diff --git a/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp b/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp --- a/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp +++ b/llvm/lib/Target/AVR/AVRExpandPseudoInsts.cpp @@ -650,10 +650,10 @@ if (TmpReg) { // Move the high byte into the final destination. - buildMI(MBB, MBBI, AVR::MOVRdRr).addReg(DstHiReg).addReg(TmpReg); + buildMI(MBB, MBBI, AVR::MOVRdRr, DstHiReg).addReg(TmpReg); // Move the low byte from the scratch space into the final destination. - buildMI(MBB, MBBI, AVR::POPRd).addReg(DstLoReg); + buildMI(MBB, MBBI, AVR::POPRd, DstLoReg); } MIBLO.setMemRefs(MI.memoperands()); @@ -767,10 +767,10 @@ if (TmpReg) { // Move the high byte into the final destination. - buildMI(MBB, MBBI, AVR::MOVRdRr).addReg(DstHiReg).addReg(TmpReg); + buildMI(MBB, MBBI, AVR::MOVRdRr, DstHiReg).addReg(TmpReg); // Move the low byte from the scratch space into the final destination. - buildMI(MBB, MBBI, AVR::POPRd).addReg(DstLoReg); + buildMI(MBB, MBBI, AVR::POPRd, DstLoReg); } MIBLO.setMemRefs(MI.memoperands()); @@ -815,10 +815,10 @@ if (TmpReg) { // Move the high byte into the final destination. - buildMI(MBB, MBBI, AVR::MOVRdRr).addReg(DstHiReg).addReg(TmpReg); + buildMI(MBB, MBBI, AVR::MOVRdRr, DstHiReg).addReg(TmpReg); // Move the low byte from the scratch space into the final destination. - buildMI(MBB, MBBI, AVR::POPRd).addReg(DstLoReg); + buildMI(MBB, MBBI, AVR::POPRd, DstLoReg); } MIBLO.setMemRefs(MI.memoperands()); @@ -1750,8 +1750,9 @@ .addReg(DstHiReg, getKillRegState(DstIsKill)); // Move the sign bit to the C flag. - buildMI(MBB, MBBI, AVR::ADDRdRr).addReg(DstHiReg) - .addReg(DstHiReg, RegState::Define | getDeadRegState(DstIsDead)) + buildMI(MBB, MBBI, AVR::ADDRdRr) + .addReg(DstHiReg, RegState::Define, getDeadRegState(DstIsDead)) + .addReg(DstHiReg, getKillRegState(DstIsKill) | getDeadRegState(DstIsDead)) .addReg(DstHiReg, getKillRegState(DstIsKill)); // Set upper byte to 0 or -1. diff --git a/llvm/lib/Target/AVR/AVRRelaxMemOperations.cpp b/llvm/lib/Target/AVR/AVRRelaxMemOperations.cpp --- a/llvm/lib/Target/AVR/AVRRelaxMemOperations.cpp +++ b/llvm/lib/Target/AVR/AVRRelaxMemOperations.cpp @@ -113,7 +113,7 @@ // Pop the original state of the pointer register. buildMI(MBB, MBBI, AVR::POPWRd) - .addReg(Ptr.getReg(), getKillRegState(Ptr.isKill())); + .addDef(Ptr.getReg(), getKillRegState(Ptr.isKill())); MI.removeFromParent(); } diff --git a/llvm/test/CodeGen/AVR/relax-mem/STDWPtrQRr.mir b/llvm/test/CodeGen/AVR/relax-mem/STDWPtrQRr.mir --- a/llvm/test/CodeGen/AVR/relax-mem/STDWPtrQRr.mir +++ b/llvm/test/CodeGen/AVR/relax-mem/STDWPtrQRr.mir @@ -26,6 +26,6 @@ ; CHECK-NEXT: PUSHWRr $r29r28, implicit-def $sp, implicit $sp ; CHECK-NEXT: $r29r28 = SBCIWRdK $r29r28, -64, implicit-def $sreg, implicit $sreg ; CHECK-NEXT: STWPtrRr $r29r28, $r1r0 - ; CHECK-NEXT: POPWRd $r29r28, implicit-def $sp, implicit $sp + ; CHECK-NEXT: $r29r28 = POPWRd implicit-def $sp, implicit $sp STDWPtrQRr $r29r28, 64, $r1r0 ...