[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