diff options
| author | Dan Gohman <gohman@apple.com> | 2008-12-18 22:03:42 +0000 |
|---|---|---|
| committer | Dan Gohman <gohman@apple.com> | 2008-12-18 22:03:42 +0000 |
| commit | 69cd963b9ade00454fca3c34834a2cfe2921ff7b (patch) | |
| tree | 44b016617bec5d15a5a30db39d864600fc5130ba /llvm/lib/Target/X86/X86RegisterInfo.cpp | |
| parent | 975f78ae79d56e8cb8285f00fdf829f3a094ee09 (diff) | |
| download | bcm5719-llvm-69cd963b9ade00454fca3c34834a2cfe2921ff7b.tar.gz bcm5719-llvm-69cd963b9ade00454fca3c34834a2cfe2921ff7b.zip | |
When emitting instructions that define EFLAGS and the EFLAGS value isn't
used, mark the defs as dead.
llvm-svn: 61215
Diffstat (limited to 'llvm/lib/Target/X86/X86RegisterInfo.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86RegisterInfo.cpp | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/llvm/lib/Target/X86/X86RegisterInfo.cpp b/llvm/lib/Target/X86/X86RegisterInfo.cpp index 4f4a33db74b..e1699f6b5a6 100644 --- a/llvm/lib/Target/X86/X86RegisterInfo.cpp +++ b/llvm/lib/Target/X86/X86RegisterInfo.cpp @@ -403,6 +403,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, } } + // The EFLAGS implicit def is dead. + New->getOperand(3).setIsDead(); + // Replace the pseudo instruction with a new instruction... if (New) MBB.insert(I, New); } @@ -416,6 +419,9 @@ eliminateCallFramePseudoInstr(MachineFunction &MF, MachineBasicBlock &MBB, (Is64Bit ? X86::SUB64ri32 : X86::SUB32ri); MachineInstr *New = BuildMI(MF, TII.get(Opc), StackPtr).addReg(StackPtr).addImm(CalleeAmt); + // The EFLAGS implicit def is dead. + New->getOperand(3).setIsDead(); + MBB.insert(I, New); } } @@ -517,7 +523,10 @@ void emitSPUpdate(MachineBasicBlock &MBB, MachineBasicBlock::iterator &MBBI, while (Offset) { uint64_t ThisVal = (Offset > Chunk) ? Chunk : Offset; - BuildMI(MBB, MBBI, TII.get(Opc), StackPtr).addReg(StackPtr).addImm(ThisVal); + MachineInstr *MI = + BuildMI(MBB, MBBI, TII.get(Opc), StackPtr).addReg(StackPtr).addImm(ThisVal); + // The EFLAGS implicit def is dead. + MI->getOperand(3).setIsDead(); Offset -= ThisVal; } } @@ -713,8 +722,11 @@ void X86RegisterInfo::emitPrologue(MachineFunction &MF) const { // applies to tail call optimized functions where the callee argument stack // size is bigger than the callers. if (TailCallReturnAddrDelta < 0) { - BuildMI(MBB, MBBI, TII.get(Is64Bit? X86::SUB64ri32 : X86::SUB32ri), - StackPtr).addReg(StackPtr).addImm(-TailCallReturnAddrDelta); + MachineInstr *MI = + BuildMI(MBB, MBBI, TII.get(Is64Bit? X86::SUB64ri32 : X86::SUB32ri), + StackPtr).addReg(StackPtr).addImm(-TailCallReturnAddrDelta); + // The EFLAGS implicit def is dead. + MI->getOperand(3).setIsDead(); } uint64_t NumBytes = 0; @@ -751,10 +763,14 @@ void X86RegisterInfo::emitPrologue(MachineFunction &MF) const { I->addLiveIn(FramePtr); // Realign stack - if (needsStackRealignment(MF)) - BuildMI(MBB, MBBI, - TII.get(Is64Bit ? X86::AND64ri32 : X86::AND32ri), - StackPtr).addReg(StackPtr).addImm(-MaxAlign); + if (needsStackRealignment(MF)) { + MachineInstr *MI = + BuildMI(MBB, MBBI, + TII.get(Is64Bit ? X86::AND64ri32 : X86::AND32ri), + StackPtr).addReg(StackPtr).addImm(-MaxAlign); + // The EFLAGS implicit def is dead. + MI->getOperand(3).setIsDead(); + } } else NumBytes = StackSize - X86FI->getCalleeSavedFrameSize(); |

