20 #define DEBUG_TYPE "xfer"
58 const char *getPassName()
const {
59 return "Hexagon Split Const32s and Const64s";
68 bool HexagonSplitConst32AndConst64::runOnMachineFunction(
MachineFunction &Fn) {
74 MBBb != MBBe; ++MBBb) {
82 if (Opc == Hexagon::CONST32_set) {
92 MII = MBB->
erase (MI);
95 else if (Opc == Hexagon::CONST32_set_jt) {
100 TII->
get(Hexagon::LO_jt), DestReg).addOperand(Symbol);
102 TII->
get(Hexagon::HI_jt), DestReg).addOperand(Symbol);
105 MII = MBB->
erase (MI);
108 else if (Opc == Hexagon::CONST32_Label) {
113 TII->
get(Hexagon::LO_label), DestReg).addOperand(Symbol);
115 TII->
get(Hexagon::HI_label), DestReg).addOperand(Symbol);
118 MII = MBB->
erase (MI);
126 TII->
get(Hexagon::LOi), DestReg).addImm(ImmValue);
128 TII->
get(Hexagon::HIi), DestReg).addImm(ImmValue);
129 MII = MBB->
erase (MI);
132 else if (Opc == Hexagon::CONST64_Int_Real) {
136 QTM.getRegisterInfo()->getSubReg (DestReg, Hexagon::subreg_loreg);
138 QTM.getRegisterInfo()->getSubReg (DestReg, Hexagon::subreg_hireg);
140 int32_t LowWord = (ImmValue & 0xFFFFFFFF);
141 int32_t HighWord = (ImmValue >> 32) & 0xFFFFFFFF;
145 TII->
get(Hexagon::LOi), DestLo).addImm(LowWord);
148 TII->
get(Hexagon::HIi), DestLo).addImm(LowWord);
151 TII->
get(Hexagon::LOi), DestHi).addImm(HighWord);
154 TII->
get(Hexagon::HIi), DestHi).addImm(HighWord);
155 MII = MBB->
erase (MI);
173 return new HexagonSplitConst32AndConst64(TM);
instr_iterator erase(instr_iterator I)
const HexagonInstrInfo * TII
ID
LLVM Calling Convention Representation.
bundle_iterator< MachineInstr, instr_iterator > iterator
const MachineOperand & getOperand(unsigned i) const
MachineInstrBuilder BuildMI(MachineFunction &MF, DebugLoc DL, const MCInstrDesc &MCID)
FunctionPass * createHexagonSplitConst32AndConst64(const HexagonTargetMachine &TM)
const MCInstrDesc & get(unsigned Opcode) const
virtual const HexagonSubtarget * getSubtargetImpl() const
unsigned getReg() const
getReg - Returns the register number.
BasicBlockListType::iterator iterator
DebugLoc getDebugLoc() const