aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Gaeke <gaeke@uiuc.edu>2004-05-30 07:08:43 +0000
committerBrian Gaeke <gaeke@uiuc.edu>2004-05-30 07:08:43 +0000
commit25d4b54f93b121d0f6beb387e85e8b2670c02b48 (patch)
treede622e6aeada28ac1faa39ab0e2f824ecdd1ef39
parenta7afac29d0686ed689bc0cd2138d0443db3ef90a (diff)
Reduce the amount of LLVM Values for which we save reg. allocator
state. Also, save the state for the incoming register of each phi node. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13906 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
index fbabc61aa5..b813ee4971 100644
--- a/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
+++ b/lib/Target/SparcV9/RegAlloc/PhyRegAlloc.cpp
@@ -28,6 +28,7 @@
#include "../LiveVar/FunctionLiveVarInfo.h"
#include "llvm/Constants.h"
#include "llvm/DerivedTypes.h"
+#include "llvm/iPHINode.h"
#include "llvm/iOther.h"
#include "llvm/Module.h"
#include "llvm/Type.h"
@@ -1164,18 +1165,22 @@ void PhyRegAlloc::saveState () {
saveStateForValue (state, Arg, -1, ArgNum);
++ArgNum;
}
- unsigned Insn = 0;
+ unsigned InstCount = 0;
// Instructions themselves encoded as operand # -1
for (const_inst_iterator II=inst_begin (Fn), IE=inst_end (Fn); II!=IE; ++II){
- saveStateForValue (state, (&*II), Insn, -1);
- for (unsigned i = 0; i < (*II).getNumOperands (); ++i) {
- const Value *V = (*II).getOperand (i);
- // Don't worry about it unless it's something whose reg. we'll need.
- if (!isa<Argument> (V) && !isa<Instruction> (V))
- continue;
- saveStateForValue (state, V, Insn, i);
+ const Instruction *Inst = &*II;
+ saveStateForValue (state, Inst, InstCount, -1);
+ if (isa<PHINode> (Inst)) {
+ MachineCodeForInstruction &MCforPN = MachineCodeForInstruction::get(Inst);
+ // Last instr should be the copy...figure out what reg it is reading from
+ if (Value *PhiCpRes = MCforPN.back()->getOperand(0).getVRegValueOrNull()){
+ if (DEBUG_RA)
+ std::cerr << "Found Phi copy result: " << PhiCpRes->getName()
+ << " in: " << *MCforPN.back() << "\n";
+ saveStateForValue (state, PhiCpRes, InstCount, -2);
+ }
}
- ++Insn;
+ ++InstCount;
}
}