diff options
| author | Brian Gaeke <gaeke@uiuc.edu> | 2003-10-22 20:44:23 +0000 | 
|---|---|---|
| committer | Brian Gaeke <gaeke@uiuc.edu> | 2003-10-22 20:44:23 +0000 | 
| commit | 41fe18cbaa408ffdf5b2d612fac4b0ce9342dcf7 (patch) | |
| tree | cd2ae2a4dee47a374c13e23f9274cb4abbf84606 /llvm/lib/CodeGen/RegAlloc | |
| parent | f29231ec3a57226c1a8e89b9c384d08d29ce16b8 (diff) | |
| download | bcm5719-llvm-41fe18cbaa408ffdf5b2d612fac4b0ce9342dcf7.tar.gz bcm5719-llvm-41fe18cbaa408ffdf5b2d612fac4b0ce9342dcf7.zip  | |
Don't worry about converting each function's reg. alloc. state into One Big
Constant early on, because we can do it in doFinalization.
Tighten up a comment.
llvm-svn: 9387
Diffstat (limited to 'llvm/lib/CodeGen/RegAlloc')
| -rw-r--r-- | llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp | 41 | 
1 files changed, 21 insertions, 20 deletions
diff --git a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp index 0c27cc938aa..f23a22c6c44 100644 --- a/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp +++ b/llvm/lib/CodeGen/RegAlloc/PhyRegAlloc.cpp @@ -1176,7 +1176,7 @@ namespace {  /// debug info").  ///  void PhyRegAlloc::saveState () { -  std::vector<Constant *> state; +  std::vector<Constant *> &state = FnAllocState[Fn];    unsigned Insn = 0;    LiveRangeMapType::const_iterator HMIEnd = LRI->getLiveRangeMap ()->end ();       for (const_inst_iterator II=inst_begin (Fn), IE=inst_end (Fn); II != IE; ++II) @@ -1207,20 +1207,6 @@ void PhyRegAlloc::saveState () {        state.push_back (AllocInfo (Insn, i, AllocState,                                    Placement).toConstant ());      } -  // Convert state into an LLVM ConstantArray, and put it in a -  // ConstantStruct (named S) along with its size. -  unsigned Size = state.size (); -  ArrayType *AT = ArrayType::get (AllocInfo::getConstantType (), Size); -  std::vector<const Type *> TV; -  TV.push_back (Type::UIntTy); -  TV.push_back (AT); -  StructType *ST = StructType::get (TV); -  std::vector<Constant *> CV; -  CV.push_back (ConstantUInt::get (Type::UIntTy, Size)); -  CV.push_back (ConstantArray::get (AT, state)); -  Constant *S = ConstantStruct::get (ST, CV); -  // Save S in the map containing register allocator state for this module. -  FnAllocState[Fn] = S;  }  /// Check the saved state filled in by saveState(), and abort if it looks @@ -1248,10 +1234,26 @@ bool PhyRegAlloc::doFinalization (Module &M) {      if (FnAllocState.find (F) == FnAllocState.end ()) {        allstate.push_back (ConstantPointerNull::get (PT));      } else { +      std::vector<Constant *> &state = FnAllocState[F]; + +      // Convert state into an LLVM ConstantArray, and put it in a +      // ConstantStruct (named S) along with its size. +      unsigned Size = state.size (); +      ArrayType *AT = ArrayType::get (AllocInfo::getConstantType (), Size); +      std::vector<const Type *> TV; +      TV.push_back (Type::UIntTy); +      TV.push_back (AT); +      StructType *ST = StructType::get (TV); +      std::vector<Constant *> CV; +      CV.push_back (ConstantUInt::get (Type::UIntTy, Size)); +      CV.push_back (ConstantArray::get (AT, state)); +      Constant *S = ConstantStruct::get (ST, CV); +        GlobalVariable *GV = -        new GlobalVariable (FnAllocState[F]->getType (), true, -                            GlobalValue::InternalLinkage, FnAllocState[F], +        new GlobalVariable (ST, true, +                            GlobalValue::InternalLinkage, S,                              F->getName () + ".regAllocState", &M); +        // Have: { uint, [Size x { uint, uint, uint, int }] } *        // Cast it to: { uint, [0 x { uint, uint, uint, int }] } *        Constant *CE = ConstantExpr::getCast (ConstantPointerRef::get (GV), PT); @@ -1354,9 +1356,8 @@ bool PhyRegAlloc::runOnFunction (Function &F) {      verifySavedState ();    } -  // Now update the machine code with register names and add any  -  // additional code inserted by the register allocator to the instruction -  // stream +  // Now update the machine code with register names and add any additional +  // code inserted by the register allocator to the instruction stream.    updateMachineCode();     if (DEBUG_RA) {  | 

