diff options
Diffstat (limited to 'contrib/llvm-project/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp')
-rw-r--r-- | contrib/llvm-project/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp | 574 |
1 files changed, 298 insertions, 276 deletions
diff --git a/contrib/llvm-project/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp b/contrib/llvm-project/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp index f9f91f50c9d5..cb85d73772c5 100644 --- a/contrib/llvm-project/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp +++ b/contrib/llvm-project/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp @@ -70,25 +70,24 @@ private: return BuildMI(MBB, MBBI, MBBI->getDebugLoc(), TII->get(Opcode), DstReg); } - MachineRegisterInfo &getRegInfo(Block &MBB) { return MBB.getParent()->getRegInfo(); } + MachineRegisterInfo &getRegInfo(Block &MBB) { + return MBB.getParent()->getRegInfo(); + } bool expandArith(unsigned OpLo, unsigned OpHi, Block &MBB, BlockIt MBBI); bool expandLogic(unsigned Op, Block &MBB, BlockIt MBBI); bool expandLogicImm(unsigned Op, Block &MBB, BlockIt MBBI); bool isLogicImmOpRedundant(unsigned Op, unsigned ImmVal) const; - template<typename Func> - bool expandAtomic(Block &MBB, BlockIt MBBI, Func f); + template <typename Func> bool expandAtomic(Block &MBB, BlockIt MBBI, Func f); - template<typename Func> + template <typename Func> bool expandAtomicBinaryOp(unsigned Opcode, Block &MBB, BlockIt MBBI, Func f); bool expandAtomicBinaryOp(unsigned Opcode, Block &MBB, BlockIt MBBI); - bool expandAtomicArithmeticOp(unsigned MemOpcode, - unsigned ArithOpcode, - Block &MBB, - BlockIt MBBI); + bool expandAtomicArithmeticOp(unsigned MemOpcode, unsigned ArithOpcode, + Block &MBB, BlockIt MBBI); /// Specific shift implementation. bool expandLSLB7Rd(Block &MBB, BlockIt MBBI); @@ -150,8 +149,8 @@ bool AVRExpandPseudo::runOnMachineFunction(MachineFunction &MF) { return Modified; } -bool AVRExpandPseudo:: -expandArith(unsigned OpLo, unsigned OpHi, Block &MBB, BlockIt MBBI) { +bool AVRExpandPseudo::expandArith(unsigned OpLo, unsigned OpHi, Block &MBB, + BlockIt MBBI) { MachineInstr &MI = *MBBI; Register SrcLoReg, SrcHiReg, DstLoReg, DstHiReg; Register DstReg = MI.getOperand(0).getReg(); @@ -164,14 +163,15 @@ expandArith(unsigned OpLo, unsigned OpHi, Block &MBB, BlockIt MBBI) { TRI->splitReg(DstReg, DstLoReg, DstHiReg); buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(DstIsKill)) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(DstIsKill)) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(DstIsKill)) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(DstIsKill)) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); if (ImpIsDead) MIBHI->getOperand(3).setIsDead(); @@ -183,8 +183,7 @@ expandArith(unsigned OpLo, unsigned OpHi, Block &MBB, BlockIt MBBI) { return true; } -bool AVRExpandPseudo:: -expandLogic(unsigned Op, Block &MBB, BlockIt MBBI) { +bool AVRExpandPseudo::expandLogic(unsigned Op, Block &MBB, BlockIt MBBI) { MachineInstr &MI = *MBBI; Register SrcLoReg, SrcHiReg, DstLoReg, DstHiReg; Register DstReg = MI.getOperand(0).getReg(); @@ -196,18 +195,20 @@ expandLogic(unsigned Op, Block &MBB, BlockIt MBBI) { TRI->splitReg(SrcReg, SrcLoReg, SrcHiReg); TRI->splitReg(DstReg, DstLoReg, DstHiReg); - auto MIBLO = buildMI(MBB, MBBI, Op) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(DstIsKill)) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + auto MIBLO = + buildMI(MBB, MBBI, Op) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(DstIsKill)) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); // SREG is always implicitly dead MIBLO->getOperand(3).setIsDead(); - auto MIBHI = buildMI(MBB, MBBI, Op) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(DstIsKill)) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + auto MIBHI = + buildMI(MBB, MBBI, Op) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(DstIsKill)) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); if (ImpIsDead) MIBHI->getOperand(3).setIsDead(); @@ -216,8 +217,8 @@ expandLogic(unsigned Op, Block &MBB, BlockIt MBBI) { return true; } -bool AVRExpandPseudo:: - isLogicImmOpRedundant(unsigned Op, unsigned ImmVal) const { +bool AVRExpandPseudo::isLogicImmOpRedundant(unsigned Op, + unsigned ImmVal) const { // ANDI Rd, 0xff is redundant. if (Op == AVR::ANDIRdK && ImmVal == 0xff) @@ -230,8 +231,7 @@ bool AVRExpandPseudo:: return false; } -bool AVRExpandPseudo:: -expandLogicImm(unsigned Op, Block &MBB, BlockIt MBBI) { +bool AVRExpandPseudo::expandLogicImm(unsigned Op, Block &MBB, BlockIt MBBI) { MachineInstr &MI = *MBBI; Register DstLoReg, DstHiReg; Register DstReg = MI.getOperand(0).getReg(); @@ -244,20 +244,22 @@ expandLogicImm(unsigned Op, Block &MBB, BlockIt MBBI) { TRI->splitReg(DstReg, DstLoReg, DstHiReg); if (!isLogicImmOpRedundant(Op, Lo8)) { - auto MIBLO = buildMI(MBB, MBBI, Op) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(SrcIsKill)) - .addImm(Lo8); + auto MIBLO = + buildMI(MBB, MBBI, Op) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(SrcIsKill)) + .addImm(Lo8); // SREG is always implicitly dead MIBLO->getOperand(3).setIsDead(); } if (!isLogicImmOpRedundant(Op, Hi8)) { - auto MIBHI = buildMI(MBB, MBBI, Op) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(SrcIsKill)) - .addImm(Hi8); + auto MIBHI = + buildMI(MBB, MBBI, Op) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(SrcIsKill)) + .addImm(Hi8); if (ImpIsDead) MIBHI->getOperand(3).setIsDead(); @@ -292,13 +294,15 @@ bool AVRExpandPseudo::expand<AVR::SUBIWRdK>(Block &MBB, BlockIt MBBI) { bool ImpIsDead = MI.getOperand(3).isDead(); TRI->splitReg(DstReg, DstLoReg, DstHiReg); - auto MIBLO = buildMI(MBB, MBBI, AVR::SUBIRdK) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(SrcIsKill)); + auto MIBLO = + buildMI(MBB, MBBI, AVR::SUBIRdK) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(SrcIsKill)); - auto MIBHI = buildMI(MBB, MBBI, AVR::SBCIRdK) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(SrcIsKill)); + auto MIBHI = + buildMI(MBB, MBBI, AVR::SBCIRdK) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(SrcIsKill)); switch (MI.getOperand(2).getType()) { case MachineOperand::MO_GlobalAddress: { @@ -349,18 +353,20 @@ bool AVRExpandPseudo::expand<AVR::SBCIWRdK>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::SBCIRdK; TRI->splitReg(DstReg, DstLoReg, DstHiReg); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(SrcIsKill)) - .addImm(Lo8); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(SrcIsKill)) + .addImm(Lo8); // SREG is always implicitly killed MIBLO->getOperand(4).setIsKill(); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(SrcIsKill)) - .addImm(Hi8); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(SrcIsKill)) + .addImm(Hi8); if (ImpIsDead) MIBHI->getOperand(3).setIsDead(); @@ -409,16 +415,18 @@ bool AVRExpandPseudo::expand<AVR::COMWRd>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::COMRd; TRI->splitReg(DstReg, DstLoReg, DstHiReg); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(DstIsKill)); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(DstIsKill)); // SREG is always implicitly dead MIBLO->getOperand(2).setIsDead(); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(DstIsKill)); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(DstIsKill)); if (ImpIsDead) MIBHI->getOperand(2).setIsDead(); @@ -481,12 +489,12 @@ bool AVRExpandPseudo::expand<AVR::CPWRdRr>(Block &MBB, BlockIt MBBI) { // Low part buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, getKillRegState(DstIsKill)) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + .addReg(DstLoReg, getKillRegState(DstIsKill)) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, getKillRegState(DstIsKill)) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + .addReg(DstHiReg, getKillRegState(DstIsKill)) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); if (ImpIsDead) MIBHI->getOperand(2).setIsDead(); @@ -513,15 +521,15 @@ bool AVRExpandPseudo::expand<AVR::CPCWRdRr>(Block &MBB, BlockIt MBBI) { TRI->splitReg(DstReg, DstLoReg, DstHiReg); auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, getKillRegState(DstIsKill)) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + .addReg(DstLoReg, getKillRegState(DstIsKill)) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); // SREG is always implicitly killed MIBLO->getOperand(3).setIsKill(); auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, getKillRegState(DstIsKill)) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + .addReg(DstHiReg, getKillRegState(DstIsKill)) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); if (ImpIsDead) MIBHI->getOperand(2).setIsDead(); @@ -543,11 +551,13 @@ bool AVRExpandPseudo::expand<AVR::LDIWRdK>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::LDIRdK; TRI->splitReg(DstReg, DstLoReg, DstHiReg); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)); switch (MI.getOperand(1).getType()) { case MachineOperand::MO_GlobalAddress: { @@ -592,11 +602,13 @@ bool AVRExpandPseudo::expand<AVR::LDSWRdK>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::LDSRdK; TRI->splitReg(DstReg, DstLoReg, DstHiReg); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)); switch (MI.getOperand(1).getType()) { case MachineOperand::MO_GlobalAddress: { @@ -656,9 +668,9 @@ bool AVRExpandPseudo::expand<AVR::LDWRdPtr>(Block &MBB, BlockIt MBBI) { // Load high byte. auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(CurDstHiReg, RegState::Define) - .addReg(SrcReg, getKillRegState(SrcIsKill)) - .addImm(1); + .addReg(CurDstHiReg, RegState::Define) + .addReg(SrcReg, getKillRegState(SrcIsKill)) + .addImm(1); if (TmpReg) { // Move the high byte into the final destination. @@ -689,15 +701,17 @@ bool AVRExpandPseudo::expand<AVR::LDWRdPtrPi>(Block &MBB, BlockIt MBBI) { assert(DstReg != SrcReg && "SrcReg and DstReg cannot be the same"); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(SrcReg, RegState::Define) - .addReg(SrcReg, RegState::Kill); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(SrcReg, RegState::Define) + .addReg(SrcReg, RegState::Kill); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(SrcReg, RegState::Define | getDeadRegState(SrcIsDead)) - .addReg(SrcReg, RegState::Kill); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(SrcReg, RegState::Define | getDeadRegState(SrcIsDead)) + .addReg(SrcReg, RegState::Kill); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -720,15 +734,17 @@ bool AVRExpandPseudo::expand<AVR::LDWRdPtrPd>(Block &MBB, BlockIt MBBI) { assert(DstReg != SrcReg && "SrcReg and DstReg cannot be the same"); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(SrcReg, RegState::Define) - .addReg(SrcReg, RegState::Kill); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(SrcReg, RegState::Define) + .addReg(SrcReg, RegState::Kill); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(SrcReg, RegState::Define | getDeadRegState(SrcIsDead)) - .addReg(SrcReg, RegState::Kill); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(SrcReg, RegState::Define | getDeadRegState(SrcIsDead)) + .addReg(SrcReg, RegState::Kill); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -750,8 +766,8 @@ bool AVRExpandPseudo::expand<AVR::LDDWRdPtrQ>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::LDDRdPtrQ; TRI->splitReg(DstReg, DstLoReg, DstHiReg); - // Since we add 1 to the Imm value for the high byte below, and 63 is the highest Imm value - // allowed for the instruction, 62 is the limit here. + // Since we add 1 to the Imm value for the high byte below, and 63 is the + // highest Imm value allowed for the instruction, 62 is the limit here. assert(Imm <= 62 && "Offset is out of range"); // Use a temporary register if src and dst registers are the same. @@ -763,9 +779,9 @@ bool AVRExpandPseudo::expand<AVR::LDDWRdPtrQ>(Block &MBB, BlockIt MBBI) { // Load low byte. auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(CurDstLoReg, RegState::Define) - .addReg(SrcReg) - .addImm(Imm); + .addReg(CurDstLoReg, RegState::Define) + .addReg(SrcReg) + .addImm(Imm); // Push low byte onto stack if necessary. if (TmpReg) @@ -773,9 +789,9 @@ bool AVRExpandPseudo::expand<AVR::LDDWRdPtrQ>(Block &MBB, BlockIt MBBI) { // Load high byte. auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(CurDstHiReg, RegState::Define) - .addReg(SrcReg, getKillRegState(SrcIsKill)) - .addImm(Imm + 1); + .addReg(CurDstHiReg, RegState::Define) + .addReg(SrcReg, getKillRegState(SrcIsKill)) + .addImm(Imm + 1); if (TmpReg) { // Move the high byte into the final destination. @@ -813,8 +829,8 @@ bool AVRExpandPseudo::expand<AVR::LPMWRdZ>(Block &MBB, BlockIt MBBI) { // Load low byte. auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(CurDstLoReg, RegState::Define) - .addReg(SrcReg); + .addReg(CurDstLoReg, RegState::Define) + .addReg(SrcReg); // Push low byte onto stack if necessary. if (TmpReg) @@ -822,8 +838,8 @@ bool AVRExpandPseudo::expand<AVR::LPMWRdZ>(Block &MBB, BlockIt MBBI) { // Load high byte. auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(CurDstHiReg, RegState::Define) - .addReg(SrcReg, getKillRegState(SrcIsKill)); + .addReg(CurDstHiReg, RegState::Define) + .addReg(SrcReg, getKillRegState(SrcIsKill)); if (TmpReg) { // Move the high byte into the final destination. @@ -845,15 +861,15 @@ bool AVRExpandPseudo::expand<AVR::LPMWRdZPi>(Block &MBB, BlockIt MBBI) { llvm_unreachable("wide LPMPi is unimplemented"); } -template<typename Func> +template <typename Func> bool AVRExpandPseudo::expandAtomic(Block &MBB, BlockIt MBBI, Func f) { // Remove the pseudo instruction. MachineInstr &MI = *MBBI; // Store the SREG. buildMI(MBB, MBBI, AVR::INRdA) - .addReg(SCRATCH_REGISTER, RegState::Define) - .addImm(SREG_ADDR); + .addReg(SCRATCH_REGISTER, RegState::Define) + .addImm(SREG_ADDR); // Disable exceptions. buildMI(MBB, MBBI, AVR::BCLRs).addImm(7); // CLI @@ -861,58 +877,52 @@ bool AVRExpandPseudo::expandAtomic(Block &MBB, BlockIt MBBI, Func f) { f(MI); // Restore the status reg. - buildMI(MBB, MBBI, AVR::OUTARr) - .addImm(SREG_ADDR) - .addReg(SCRATCH_REGISTER); + buildMI(MBB, MBBI, AVR::OUTARr).addImm(SREG_ADDR).addReg(SCRATCH_REGISTER); MI.eraseFromParent(); return true; } -template<typename Func> -bool AVRExpandPseudo::expandAtomicBinaryOp(unsigned Opcode, - Block &MBB, - BlockIt MBBI, - Func f) { +template <typename Func> +bool AVRExpandPseudo::expandAtomicBinaryOp(unsigned Opcode, Block &MBB, + BlockIt MBBI, Func f) { return expandAtomic(MBB, MBBI, [&](MachineInstr &MI) { - auto Op1 = MI.getOperand(0); - auto Op2 = MI.getOperand(1); + auto Op1 = MI.getOperand(0); + auto Op2 = MI.getOperand(1); - MachineInstr &NewInst = - *buildMI(MBB, MBBI, Opcode).add(Op1).add(Op2).getInstr(); - f(NewInst); + MachineInstr &NewInst = + *buildMI(MBB, MBBI, Opcode).add(Op1).add(Op2).getInstr(); + f(NewInst); }); } -bool AVRExpandPseudo::expandAtomicBinaryOp(unsigned Opcode, - Block &MBB, +bool AVRExpandPseudo::expandAtomicBinaryOp(unsigned Opcode, Block &MBB, BlockIt MBBI) { return expandAtomicBinaryOp(Opcode, MBB, MBBI, [](MachineInstr &MI) {}); } bool AVRExpandPseudo::expandAtomicArithmeticOp(unsigned Width, - unsigned ArithOpcode, - Block &MBB, + unsigned ArithOpcode, Block &MBB, BlockIt MBBI) { return expandAtomic(MBB, MBBI, [&](MachineInstr &MI) { - auto DstReg = MI.getOperand(0).getReg(); - auto PtrOp = MI.getOperand(1); - auto SrcReg = MI.getOperand(2).getReg(); + auto DstReg = MI.getOperand(0).getReg(); + auto PtrOp = MI.getOperand(1); + auto SrcReg = MI.getOperand(2).getReg(); - unsigned LoadOpcode = (Width == 8) ? AVR::LDRdPtr : AVR::LDWRdPtr; - unsigned StoreOpcode = (Width == 8) ? AVR::STPtrRr : AVR::STWPtrRr; + unsigned LoadOpcode = (Width == 8) ? AVR::LDRdPtr : AVR::LDWRdPtr; + unsigned StoreOpcode = (Width == 8) ? AVR::STPtrRr : AVR::STWPtrRr; - // FIXME: this returns the new value (after the operation), not the old - // value as the atomicrmw instruction is supposed to do! + // FIXME: this returns the new value (after the operation), not the old + // value as the atomicrmw instruction is supposed to do! - // Create the load - buildMI(MBB, MBBI, LoadOpcode, DstReg).addReg(PtrOp.getReg()); + // Create the load + buildMI(MBB, MBBI, LoadOpcode, DstReg).addReg(PtrOp.getReg()); - // Create the arithmetic op - buildMI(MBB, MBBI, ArithOpcode, DstReg).addReg(DstReg).addReg(SrcReg); + // Create the arithmetic op + buildMI(MBB, MBBI, ArithOpcode, DstReg).addReg(DstReg).addReg(SrcReg); - // Create the store - buildMI(MBB, MBBI, StoreOpcode).add(PtrOp).addReg(DstReg); + // Create the store + buildMI(MBB, MBBI, StoreOpcode).add(PtrOp).addReg(DstReg); }); } @@ -924,8 +934,7 @@ Register AVRExpandPseudo::scavengeGPR8(MachineInstr &MI) { RS.forward(MI); BitVector Candidates = - TRI->getAllocatableSet - (*MBB.getParent(), &AVR::GPR8RegClass); + TRI->getAllocatableSet(*MBB.getParent(), &AVR::GPR8RegClass); // Exclude all the registers being used by the instruction. for (MachineOperand &MO : MI.operands()) { @@ -942,77 +951,77 @@ Register AVRExpandPseudo::scavengeGPR8(MachineInstr &MI) { return Reg; } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoad8>(Block &MBB, BlockIt MBBI) { return expandAtomicBinaryOp(AVR::LDRdPtr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoad16>(Block &MBB, BlockIt MBBI) { return expandAtomicBinaryOp(AVR::LDWRdPtr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicStore8>(Block &MBB, BlockIt MBBI) { return expandAtomicBinaryOp(AVR::STPtrRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicStore16>(Block &MBB, BlockIt MBBI) { return expandAtomicBinaryOp(AVR::STWPtrRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadAdd8>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(8, AVR::ADDRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadAdd16>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(16, AVR::ADDWRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadSub8>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(8, AVR::SUBRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadSub16>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(16, AVR::SUBWRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadAnd8>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(8, AVR::ANDRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadAnd16>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(16, AVR::ANDWRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadOr8>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(8, AVR::ORRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadOr16>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(16, AVR::ORWRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadXor8>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(8, AVR::EORRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicLoadXor16>(Block &MBB, BlockIt MBBI) { return expandAtomicArithmeticOp(16, AVR::EORWRdRr, MBB, MBBI); } -template<> +template <> bool AVRExpandPseudo::expand<AVR::AtomicFence>(Block &MBB, BlockIt MBBI) { // On AVR, there is only one core and so atomic fences do nothing. MBBI->eraseFromParent(); @@ -1077,15 +1086,15 @@ bool AVRExpandPseudo::expand<AVR::STWPtrRr>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::STDPtrQRr; TRI->splitReg(SrcReg, SrcLoReg, SrcHiReg); - //:TODO: need to reverse this order like inw and stsw? + //: TODO: need to reverse this order like inw and stsw? auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstReg, getUndefRegState(DstIsUndef)) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + .addReg(DstReg, getUndefRegState(DstIsUndef)) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstReg, getUndefRegState(DstIsUndef)) - .addImm(1) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + .addReg(DstReg, getUndefRegState(DstIsUndef)) + .addImm(1) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -1110,16 +1119,17 @@ bool AVRExpandPseudo::expand<AVR::STWPtrPiRr>(Block &MBB, BlockIt MBBI) { assert(DstReg != SrcReg && "SrcReg and DstReg cannot be the same"); auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstReg, RegState::Define) - .addReg(DstReg, RegState::Kill) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)) - .addImm(Imm); + .addReg(DstReg, RegState::Define) + .addReg(DstReg, RegState::Kill) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)) + .addImm(Imm); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg, RegState::Kill) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)) - .addImm(Imm); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstReg, RegState::Kill) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)) + .addImm(Imm); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -1144,16 +1154,17 @@ bool AVRExpandPseudo::expand<AVR::STWPtrPdRr>(Block &MBB, BlockIt MBBI) { assert(DstReg != SrcReg && "SrcReg and DstReg cannot be the same"); auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstReg, RegState::Define) - .addReg(DstReg, RegState::Kill) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)) - .addImm(Imm); + .addReg(DstReg, RegState::Define) + .addReg(DstReg, RegState::Kill) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)) + .addImm(Imm); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg, RegState::Kill) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)) - .addImm(Imm); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstReg, RegState::Kill) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)) + .addImm(Imm); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -1175,19 +1186,19 @@ bool AVRExpandPseudo::expand<AVR::STDWPtrQRr>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::STDPtrQRr; TRI->splitReg(SrcReg, SrcLoReg, SrcHiReg); - // Since we add 1 to the Imm value for the high byte below, and 63 is the highest Imm value - // allowed for the instruction, 62 is the limit here. + // Since we add 1 to the Imm value for the high byte below, and 63 is the + // highest Imm value allowed for the instruction, 62 is the limit here. assert(Imm <= 62 && "Offset is out of range"); auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstReg) - .addImm(Imm) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + .addReg(DstReg) + .addImm(Imm) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstReg, getKillRegState(DstIsKill)) - .addImm(Imm + 1) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + .addReg(DstReg, getKillRegState(DstIsKill)) + .addImm(Imm + 1) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -1207,17 +1218,19 @@ bool AVRExpandPseudo::expand<AVR::INWRdA>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::INRdA; TRI->splitReg(DstReg, DstLoReg, DstHiReg); - // Since we add 1 to the Imm value for the high byte below, and 63 is the highest Imm value - // allowed for the instruction, 62 is the limit here. + // Since we add 1 to the Imm value for the high byte below, and 63 is the + // highest Imm value allowed for the instruction, 62 is the limit here. assert(Imm <= 62 && "Address is out of range"); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addImm(Imm); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addImm(Imm); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addImm(Imm + 1); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addImm(Imm + 1); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -1237,18 +1250,18 @@ bool AVRExpandPseudo::expand<AVR::OUTWARr>(Block &MBB, BlockIt MBBI) { unsigned OpHi = AVR::OUTARr; TRI->splitReg(SrcReg, SrcLoReg, SrcHiReg); - // Since we add 1 to the Imm value for the high byte below, and 63 is the highest Imm value - // allowed for the instruction, 62 is the limit here. + // Since we add 1 to the Imm value for the high byte below, and 63 is the + // highest Imm value allowed for the instruction, 62 is the limit here. assert(Imm <= 62 && "Address is out of range"); // 16 bit I/O writes need the high byte first auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addImm(Imm + 1) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)); + .addImm(Imm + 1) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)); auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addImm(Imm) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)); + .addImm(Imm) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)); MIBLO.setMemRefs(MI.memoperands()); MIBHI.setMemRefs(MI.memoperands()); @@ -1270,13 +1283,13 @@ bool AVRExpandPseudo::expand<AVR::PUSHWRr>(Block &MBB, BlockIt MBBI) { // Low part buildMI(MBB, MBBI, OpLo) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)) - .setMIFlags(Flags); + .addReg(SrcLoReg, getKillRegState(SrcIsKill)) + .setMIFlags(Flags); // High part buildMI(MBB, MBBI, OpHi) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)) - .setMIFlags(Flags); + .addReg(SrcHiReg, getKillRegState(SrcIsKill)) + .setMIFlags(Flags); MI.eraseFromParent(); return true; @@ -1319,15 +1332,15 @@ bool AVRExpandPseudo::expand<AVR::ROLBRd>(Block &MBB, BlockIt MBBI) { // Shift part buildMI(MBB, MBBI, OpShift) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg) - .addReg(DstReg); + .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstReg) + .addReg(DstReg); // Add the carry bit auto MIB = buildMI(MBB, MBBI, OpCarry) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg) - .addReg(ZERO_REGISTER); + .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstReg) + .addReg(ZERO_REGISTER); // SREG is always implicitly killed MIB->getOperand(2).setIsKill(); @@ -1378,14 +1391,15 @@ bool AVRExpandPseudo::expand<AVR::LSLWRd>(Block &MBB, BlockIt MBBI) { // Low part buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg) - .addReg(DstLoReg, getKillRegState(DstIsKill)); + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg) + .addReg(DstLoReg, getKillRegState(DstIsKill)); - auto MIBHI = buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg) - .addReg(DstHiReg, getKillRegState(DstIsKill)); + auto MIBHI = + buildMI(MBB, MBBI, OpHi) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg) + .addReg(DstHiReg, getKillRegState(DstIsKill)); if (ImpIsDead) MIBHI->getOperand(3).setIsDead(); @@ -1554,12 +1568,13 @@ bool AVRExpandPseudo::expand<AVR::LSRWRd>(Block &MBB, BlockIt MBBI) { // High part buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(DstIsKill)); + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(DstIsKill)); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(DstIsKill)); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(DstIsKill)); if (ImpIsDead) MIBLO->getOperand(2).setIsDead(); @@ -1740,12 +1755,13 @@ bool AVRExpandPseudo::expand<AVR::ASRWRd>(Block &MBB, BlockIt MBBI) { // High part buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, getKillRegState(DstIsKill)); + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(DstIsKill)); - auto MIBLO = buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstLoReg, getKillRegState(DstIsKill)); + auto MIBLO = + buildMI(MBB, MBBI, OpLo) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstLoReg, getKillRegState(DstIsKill)); if (ImpIsDead) MIBLO->getOperand(2).setIsDead(); @@ -1817,7 +1833,8 @@ bool AVRExpandPseudo::expandLSLB7Rd(Block &MBB, BlockIt MBBI) { buildMI(MBB, MBBI, AVR::RORRd) .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) .addReg(DstReg, getKillRegState(DstIsKill)) - ->getOperand(3).setIsUndef(true); + ->getOperand(3) + .setIsUndef(true); buildMI(MBB, MBBI, AVR::EORRdRr) .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) @@ -1867,7 +1884,8 @@ bool AVRExpandPseudo::expandLSRB7Rd(Block &MBB, BlockIt MBBI) { .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) .addReg(DstReg, getKillRegState(DstIsKill)) .addReg(DstReg, getKillRegState(DstIsKill)) - ->getOperand(4).setIsUndef(true); + ->getOperand(4) + .setIsUndef(true); buildMI(MBB, MBBI, AVR::EORRdRr) .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) @@ -1918,10 +1936,11 @@ bool AVRExpandPseudo::expandASRB7Rd(Block &MBB, BlockIt MBBI) { .addReg(DstReg, getKillRegState(DstIsKill)) .addReg(DstReg, getKillRegState(DstIsKill)); - auto MIRRC = buildMI(MBB, MBBI, AVR::SBCRdRr) - .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstReg, getKillRegState(DstIsKill)) - .addReg(DstReg, getKillRegState(DstIsKill)); + auto MIRRC = + buildMI(MBB, MBBI, AVR::SBCRdRr) + .addReg(DstReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstReg, getKillRegState(DstIsKill)) + .addReg(DstReg, getKillRegState(DstIsKill)); if (ImpIsDead) MIRRC->getOperand(3).setIsDead(); @@ -1970,9 +1989,10 @@ template <> bool AVRExpandPseudo::expand<AVR::SEXT>(Block &MBB, BlockIt MBBI) { TRI->splitReg(DstReg, DstLoReg, DstHiReg); if (SrcReg != DstLoReg) { - auto MOV = buildMI(MBB, MBBI, AVR::MOVRdRr) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(SrcReg); + auto MOV = + buildMI(MBB, MBBI, AVR::MOVRdRr) + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(SrcReg); if (SrcReg == DstHiReg) { MOV->getOperand(1).setIsKill(); @@ -1981,19 +2001,20 @@ template <> bool AVRExpandPseudo::expand<AVR::SEXT>(Block &MBB, BlockIt MBBI) { if (SrcReg != DstHiReg) { buildMI(MBB, MBBI, AVR::MOVRdRr) - .addReg(DstHiReg, RegState::Define) - .addReg(SrcReg, getKillRegState(SrcIsKill)); + .addReg(DstHiReg, RegState::Define) + .addReg(SrcReg, getKillRegState(SrcIsKill)); } buildMI(MBB, MBBI, AVR::ADDRdRr) // LSL Rd <==> ADD Rd, Rr - .addReg(DstHiReg, RegState::Define) - .addReg(DstHiReg) - .addReg(DstHiReg, RegState::Kill); + .addReg(DstHiReg, RegState::Define) + .addReg(DstHiReg) + .addReg(DstHiReg, RegState::Kill); - auto SBC = buildMI(MBB, MBBI, AVR::SBCRdRr) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, RegState::Kill) - .addReg(DstHiReg, RegState::Kill); + auto SBC = + buildMI(MBB, MBBI, AVR::SBCRdRr) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, RegState::Kill) + .addReg(DstHiReg, RegState::Kill); if (ImpIsDead) SBC->getOperand(3).setIsDead(); @@ -2025,14 +2046,15 @@ template <> bool AVRExpandPseudo::expand<AVR::ZEXT>(Block &MBB, BlockIt MBBI) { if (SrcReg != DstLoReg) { buildMI(MBB, MBBI, AVR::MOVRdRr) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(SrcReg, getKillRegState(SrcIsKill)); + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(SrcReg, getKillRegState(SrcIsKill)); } - auto EOR = buildMI(MBB, MBBI, AVR::EORRdRr) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addReg(DstHiReg, RegState::Kill | RegState::Undef) - .addReg(DstHiReg, RegState::Kill | RegState::Undef); + auto EOR = + buildMI(MBB, MBBI, AVR::EORRdRr) + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addReg(DstHiReg, RegState::Kill | RegState::Undef) + .addReg(DstHiReg, RegState::Kill | RegState::Undef); if (ImpIsDead) EOR->getOperand(3).setIsDead(); @@ -2054,15 +2076,15 @@ bool AVRExpandPseudo::expand<AVR::SPREAD>(Block &MBB, BlockIt MBBI) { // Low part buildMI(MBB, MBBI, OpLo) - .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) - .addImm(0x3d) - .setMIFlags(Flags); + .addReg(DstLoReg, RegState::Define | getDeadRegState(DstIsDead)) + .addImm(0x3d) + .setMIFlags(Flags); // High part buildMI(MBB, MBBI, OpHi) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) - .addImm(0x3e) - .setMIFlags(Flags); + .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + .addImm(0x3e) + .setMIFlags(Flags); MI.eraseFromParent(); return true; @@ -2078,26 +2100,26 @@ bool AVRExpandPseudo::expand<AVR::SPWRITE>(Block &MBB, BlockIt MBBI) { TRI->splitReg(SrcReg, SrcLoReg, SrcHiReg); buildMI(MBB, MBBI, AVR::INRdA) - .addReg(AVR::R0, RegState::Define) - .addImm(SREG_ADDR) - .setMIFlags(Flags); + .addReg(AVR::R0, RegState::Define) + .addImm(SREG_ADDR) + .setMIFlags(Flags); buildMI(MBB, MBBI, AVR::BCLRs).addImm(0x07).setMIFlags(Flags); buildMI(MBB, MBBI, AVR::OUTARr) - .addImm(0x3e) - .addReg(SrcHiReg, getKillRegState(SrcIsKill)) - .setMIFlags(Flags); + .addImm(0x3e) + .addReg(SrcHiReg, getKillRegState(SrcIsKill)) + .setMIFlags(Flags); buildMI(MBB, MBBI, AVR::OUTARr) - .addImm(SREG_ADDR) - .addReg(AVR::R0, RegState::Kill) - .setMIFlags(Flags); + .addImm(SREG_ADDR) + .addReg(AVR::R0, RegState::Kill) + .setMIFlags(Flags); buildMI(MBB, MBBI, AVR::OUTARr) - .addImm(0x3d) - .addReg(SrcLoReg, getKillRegState(SrcIsKill)) - .setMIFlags(Flags); + .addImm(0x3d) + .addReg(SrcLoReg, getKillRegState(SrcIsKill)) + .setMIFlags(Flags); MI.eraseFromParent(); return true; @@ -2107,8 +2129,8 @@ bool AVRExpandPseudo::expandMI(Block &MBB, BlockIt MBBI) { MachineInstr &MI = *MBBI; int Opcode = MBBI->getOpcode(); -#define EXPAND(Op) \ - case Op: \ +#define EXPAND(Op) \ + case Op: \ return expand<Op>(MBB, MI) switch (Opcode) { @@ -2132,7 +2154,7 @@ bool AVRExpandPseudo::expandMI(Block &MBB, BlockIt MBBI) { EXPAND(AVR::LDWRdPtr); EXPAND(AVR::LDWRdPtrPi); EXPAND(AVR::LDWRdPtrPd); - case AVR::LDDWRdYQ: //:FIXME: remove this once PR13375 gets fixed + case AVR::LDDWRdYQ: //: FIXME: remove this once PR13375 gets fixed EXPAND(AVR::LDDWRdPtrQ); EXPAND(AVR::LPMWRdZ); EXPAND(AVR::LPMWRdZPi); @@ -2184,8 +2206,8 @@ bool AVRExpandPseudo::expandMI(Block &MBB, BlockIt MBBI) { } // end of anonymous namespace -INITIALIZE_PASS(AVRExpandPseudo, "avr-expand-pseudo", - AVR_EXPAND_PSEUDO_NAME, false, false) +INITIALIZE_PASS(AVRExpandPseudo, "avr-expand-pseudo", AVR_EXPAND_PSEUDO_NAME, + false, false) namespace llvm { FunctionPass *createAVRExpandPseudoPass() { return new AVRExpandPseudo(); } |