aboutsummaryrefslogtreecommitdiff
path: root/lib/CodeGen
diff options
context:
space:
mode:
authorRuchira Sasanka <sasanka@students.uiuc.edu>2001-10-21 16:43:41 +0000
committerRuchira Sasanka <sasanka@students.uiuc.edu>2001-10-21 16:43:41 +0000
commitb3b6f5338c246ad1b209047cf9422fbf08fb1ddc (patch)
tree48554b6e499cdad23193afce2eed0848b7b2fd85 /lib/CodeGen
parent5ab1f877864c7ab9604321ce50091d101baca203 (diff)
Added support for both call/jmpl instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@930 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen')
-rw-r--r--lib/CodeGen/RegAlloc/PhyRegAlloc.cpp35
1 files changed, 13 insertions, 22 deletions
diff --git a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
index b36e8e4443..43ea5a5cd0 100644
--- a/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp
@@ -149,7 +149,7 @@ void PhyRegAlloc::setCallInterferences(const MachineInstr *MInst,
const LiveVarSet *const LVSetAft )
{
// Now find the LR of the return value of the call
- // The last *implicit operand* is the return value of a call
+
// We do this because, we look at the LV set *after* the instruction
// to determine, which LRs must be saved across calls. The return value
@@ -158,19 +158,13 @@ void PhyRegAlloc::setCallInterferences(const MachineInstr *MInst,
LiveRange *RetValLR = NULL;
- unsigned NumOfImpRefs = MInst->getNumImplicitRefs();
- if( NumOfImpRefs > 0 ) {
-
- if( MInst->implicitRefIsDefined(NumOfImpRefs-1) ) {
-
- const Value *RetVal = MInst->getImplicitRef(NumOfImpRefs-1);
- RetValLR = LRI.getLiveRangeForValue( RetVal );
- assert( RetValLR && "No LR for RetValue of call");
- }
+ const Value *RetVal = MRI.getCallInstRetVal( MInst );
+ if( RetVal ) {
+ RetValLR = LRI.getLiveRangeForValue( RetVal );
+ assert( RetValLR && "No LR for RetValue of call");
}
-
if( DEBUG_RA)
cout << "\n For call inst: " << *MInst;
@@ -356,20 +350,17 @@ void PhyRegAlloc::insertCallerSavingCode(const MachineInstr *MInst,
// to determine, which LRs must be saved across calls. The return value
// of the call is live in this set - but we must not save/restore it.
- unsigned NumOfImpRefs = MInst->getNumImplicitRefs();
- if( NumOfImpRefs > 0 ) {
-
- if( MInst->implicitRefIsDefined(NumOfImpRefs-1) ) {
- const Value *RetVal = MInst->getImplicitRef(NumOfImpRefs-1);
- LiveRange *RetValLR = LRI.getLiveRangeForValue( RetVal );
- assert( RetValLR && "No LR for RetValue of call");
+ const Value *RetVal = MRI.getCallInstRetVal( MInst );
- PushedRegSet.insert(
- MRI.getUnifiedRegNum((RetValLR->getRegClass())->getID(),
- RetValLR->getColor() ) );
- }
+ if( RetVal ) {
+
+ LiveRange *RetValLR = LRI.getLiveRangeForValue( RetVal );
+ assert( RetValLR && "No LR for RetValue of call");
+ PushedRegSet.insert(
+ MRI.getUnifiedRegNum((RetValLR->getRegClass())->getID(),
+ RetValLR->getColor() ) );
}