[llvm-commits] CVS: llvm/lib/CodeGen/PrologEpilogInserter.cpp
Chris Lattner
lattner at cs.uiuc.edu
Fri Jan 21 16:49:31 PST 2005
Changes in directory llvm/lib/CodeGen:
PrologEpilogInserter.cpp updated: 1.38 -> 1.39
---
Log message:
Implicitly defined registers can clobber callee saved registers too!
This fixes the return-address-not-being-saved problem in the Alpha backend.
---
Diffs of the changes: (+6 -0)
PrologEpilogInserter.cpp | 6 ++++++
1 files changed, 6 insertions(+)
Index: llvm/lib/CodeGen/PrologEpilogInserter.cpp
diff -u llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.38 llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.39
--- llvm/lib/CodeGen/PrologEpilogInserter.cpp:1.38 Wed Jan 19 15:32:07 2005
+++ llvm/lib/CodeGen/PrologEpilogInserter.cpp Fri Jan 21 18:49:16 2005
@@ -96,6 +96,7 @@
void PEI::calculateCallerSavedRegisters(MachineFunction &Fn) {
const MRegisterInfo *RegInfo = Fn.getTarget().getRegisterInfo();
const TargetFrameInfo *TFI = Fn.getTarget().getFrameInfo();
+ const TargetInstrInfo &TII = *Fn.getTarget().getInstrInfo();
// Get the callee saved register list...
const unsigned *CSRegs = RegInfo->getCalleeSaveRegs();
@@ -133,6 +134,11 @@
"Register allocation must be performed!");
ModifiedRegs[MO.getReg()] = true; // Register is modified
}
+
+ // Mark any implicitly defined registers as being modified.
+ for (const unsigned *ImpDefs = TII.getImplicitDefs(I->getOpcode());
+ *ImpDefs; ++ImpDefs)
+ ModifiedRegs[*ImpDefs] = true;
}
++I;
}
More information about the llvm-commits
mailing list