Home | History | Annotate | Download | only in Utils
      1 //===- SSAUpdater.cpp - Unstructured SSA Update Tool ----------------------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // This file implements the SSAUpdater class.
     11 //
     12 //===----------------------------------------------------------------------===//
     13 
     14 #define DEBUG_TYPE "ssaupdater"
     15 #include "llvm/Constants.h"
     16 #include "llvm/Instructions.h"
     17 #include "llvm/IntrinsicInst.h"
     18 #include "llvm/ADT/DenseMap.h"
     19 #include "llvm/ADT/TinyPtrVector.h"
     20 #include "llvm/Analysis/InstructionSimplify.h"
     21 #include "llvm/Support/AlignOf.h"
     22 #include "llvm/Support/Allocator.h"
     23 #include "llvm/Support/CFG.h"
     24 #include "llvm/Support/Debug.h"
     25 #include "llvm/Support/raw_ostream.h"
     26 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
     27 #include "llvm/Transforms/Utils/Local.h"
     28 #include "llvm/Transforms/Utils/SSAUpdater.h"
     29 #include "llvm/Transforms/Utils/SSAUpdaterImpl.h"
     30 
     31 using namespace llvm;
     32 
     33 typedef DenseMap<BasicBlock*, Value*> AvailableValsTy;
     34 static AvailableValsTy &getAvailableVals(void *AV) {
     35   return *static_cast<AvailableValsTy*>(AV);
     36 }
     37 
     38 SSAUpdater::SSAUpdater(SmallVectorImpl<PHINode*> *NewPHI)
     39   : AV(0), ProtoType(0), ProtoName(), InsertedPHIs(NewPHI) {}
     40 
     41 SSAUpdater::~SSAUpdater() {
     42   delete &getAvailableVals(AV);
     43 }
     44 
     45 /// Initialize - Reset this object to get ready for a new set of SSA
     46 /// updates with type 'Ty'.  PHI nodes get a name based on 'Name'.
     47 void SSAUpdater::Initialize(Type *Ty, StringRef Name) {
     48   if (AV == 0)
     49     AV = new AvailableValsTy();
     50   else
     51     getAvailableVals(AV).clear();
     52   ProtoType = Ty;
     53   ProtoName = Name;
     54 }
     55 
     56 /// HasValueForBlock - Return true if the SSAUpdater already has a value for
     57 /// the specified block.
     58 bool SSAUpdater::HasValueForBlock(BasicBlock *BB) const {
     59   return getAvailableVals(AV).count(BB);
     60 }
     61 
     62 /// AddAvailableValue - Indicate that a rewritten value is available in the
     63 /// specified block with the specified value.
     64 void SSAUpdater::AddAvailableValue(BasicBlock *BB, Value *V) {
     65   assert(ProtoType != 0 && "Need to initialize SSAUpdater");
     66   assert(ProtoType == V->getType() &&
     67          "All rewritten values must have the same type");
     68   getAvailableVals(AV)[BB] = V;
     69 }
     70 
     71 /// IsEquivalentPHI - Check if PHI has the same incoming value as specified
     72 /// in ValueMapping for each predecessor block.
     73 static bool IsEquivalentPHI(PHINode *PHI,
     74                             DenseMap<BasicBlock*, Value*> &ValueMapping) {
     75   unsigned PHINumValues = PHI->getNumIncomingValues();
     76   if (PHINumValues != ValueMapping.size())
     77     return false;
     78 
     79   // Scan the phi to see if it matches.
     80   for (unsigned i = 0, e = PHINumValues; i != e; ++i)
     81     if (ValueMapping[PHI->getIncomingBlock(i)] !=
     82         PHI->getIncomingValue(i)) {
     83       return false;
     84     }
     85 
     86   return true;
     87 }
     88 
     89 /// GetValueAtEndOfBlock - Construct SSA form, materializing a value that is
     90 /// live at the end of the specified block.
     91 Value *SSAUpdater::GetValueAtEndOfBlock(BasicBlock *BB) {
     92   Value *Res = GetValueAtEndOfBlockInternal(BB);
     93   return Res;
     94 }
     95 
     96 /// GetValueInMiddleOfBlock - Construct SSA form, materializing a value that
     97 /// is live in the middle of the specified block.
     98 ///
     99 /// GetValueInMiddleOfBlock is the same as GetValueAtEndOfBlock except in one
    100 /// important case: if there is a definition of the rewritten value after the
    101 /// 'use' in BB.  Consider code like this:
    102 ///
    103 ///      X1 = ...
    104 ///   SomeBB:
    105 ///      use(X)
    106 ///      X2 = ...
    107 ///      br Cond, SomeBB, OutBB
    108 ///
    109 /// In this case, there are two values (X1 and X2) added to the AvailableVals
    110 /// set by the client of the rewriter, and those values are both live out of
    111 /// their respective blocks.  However, the use of X happens in the *middle* of
    112 /// a block.  Because of this, we need to insert a new PHI node in SomeBB to
    113 /// merge the appropriate values, and this value isn't live out of the block.
    114 ///
    115 Value *SSAUpdater::GetValueInMiddleOfBlock(BasicBlock *BB) {
    116   // If there is no definition of the renamed variable in this block, just use
    117   // GetValueAtEndOfBlock to do our work.
    118   if (!HasValueForBlock(BB))
    119     return GetValueAtEndOfBlock(BB);
    120 
    121   // Otherwise, we have the hard case.  Get the live-in values for each
    122   // predecessor.
    123   SmallVector<std::pair<BasicBlock*, Value*>, 8> PredValues;
    124   Value *SingularValue = 0;
    125 
    126   // We can get our predecessor info by walking the pred_iterator list, but it
    127   // is relatively slow.  If we already have PHI nodes in this block, walk one
    128   // of them to get the predecessor list instead.
    129   if (PHINode *SomePhi = dyn_cast<PHINode>(BB->begin())) {
    130     for (unsigned i = 0, e = SomePhi->getNumIncomingValues(); i != e; ++i) {
    131       BasicBlock *PredBB = SomePhi->getIncomingBlock(i);
    132       Value *PredVal = GetValueAtEndOfBlock(PredBB);
    133       PredValues.push_back(std::make_pair(PredBB, PredVal));
    134 
    135       // Compute SingularValue.
    136       if (i == 0)
    137         SingularValue = PredVal;
    138       else if (PredVal != SingularValue)
    139         SingularValue = 0;
    140     }
    141   } else {
    142     bool isFirstPred = true;
    143     for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
    144       BasicBlock *PredBB = *PI;
    145       Value *PredVal = GetValueAtEndOfBlock(PredBB);
    146       PredValues.push_back(std::make_pair(PredBB, PredVal));
    147 
    148       // Compute SingularValue.
    149       if (isFirstPred) {
    150         SingularValue = PredVal;
    151         isFirstPred = false;
    152       } else if (PredVal != SingularValue)
    153         SingularValue = 0;
    154     }
    155   }
    156 
    157   // If there are no predecessors, just return undef.
    158   if (PredValues.empty())
    159     return UndefValue::get(ProtoType);
    160 
    161   // Otherwise, if all the merged values are the same, just use it.
    162   if (SingularValue != 0)
    163     return SingularValue;
    164 
    165   // Otherwise, we do need a PHI: check to see if we already have one available
    166   // in this block that produces the right value.
    167   if (isa<PHINode>(BB->begin())) {
    168     DenseMap<BasicBlock*, Value*> ValueMapping(PredValues.begin(),
    169                                                PredValues.end());
    170     PHINode *SomePHI;
    171     for (BasicBlock::iterator It = BB->begin();
    172          (SomePHI = dyn_cast<PHINode>(It)); ++It) {
    173       if (IsEquivalentPHI(SomePHI, ValueMapping))
    174         return SomePHI;
    175     }
    176   }
    177 
    178   // Ok, we have no way out, insert a new one now.
    179   PHINode *InsertedPHI = PHINode::Create(ProtoType, PredValues.size(),
    180                                          ProtoName, &BB->front());
    181 
    182   // Fill in all the predecessors of the PHI.
    183   for (unsigned i = 0, e = PredValues.size(); i != e; ++i)
    184     InsertedPHI->addIncoming(PredValues[i].second, PredValues[i].first);
    185 
    186   // See if the PHI node can be merged to a single value.  This can happen in
    187   // loop cases when we get a PHI of itself and one other value.
    188   if (Value *V = SimplifyInstruction(InsertedPHI)) {
    189     InsertedPHI->eraseFromParent();
    190     return V;
    191   }
    192 
    193   // Set DebugLoc.
    194   InsertedPHI->setDebugLoc(GetFirstDebugLocInBasicBlock(BB));
    195 
    196   // If the client wants to know about all new instructions, tell it.
    197   if (InsertedPHIs) InsertedPHIs->push_back(InsertedPHI);
    198 
    199   DEBUG(dbgs() << "  Inserted PHI: " << *InsertedPHI << "\n");
    200   return InsertedPHI;
    201 }
    202 
    203 /// RewriteUse - Rewrite a use of the symbolic value.  This handles PHI nodes,
    204 /// which use their value in the corresponding predecessor.
    205 void SSAUpdater::RewriteUse(Use &U) {
    206   Instruction *User = cast<Instruction>(U.getUser());
    207 
    208   Value *V;
    209   if (PHINode *UserPN = dyn_cast<PHINode>(User))
    210     V = GetValueAtEndOfBlock(UserPN->getIncomingBlock(U));
    211   else
    212     V = GetValueInMiddleOfBlock(User->getParent());
    213 
    214   U.set(V);
    215 }
    216 
    217 /// RewriteUseAfterInsertions - Rewrite a use, just like RewriteUse.  However,
    218 /// this version of the method can rewrite uses in the same block as a
    219 /// definition, because it assumes that all uses of a value are below any
    220 /// inserted values.
    221 void SSAUpdater::RewriteUseAfterInsertions(Use &U) {
    222   Instruction *User = cast<Instruction>(U.getUser());
    223 
    224   Value *V;
    225   if (PHINode *UserPN = dyn_cast<PHINode>(User))
    226     V = GetValueAtEndOfBlock(UserPN->getIncomingBlock(U));
    227   else
    228     V = GetValueAtEndOfBlock(User->getParent());
    229 
    230   U.set(V);
    231 }
    232 
    233 /// PHIiter - Iterator for PHI operands.  This is used for the PHI_iterator
    234 /// in the SSAUpdaterImpl template.
    235 namespace {
    236   class PHIiter {
    237   private:
    238     PHINode *PHI;
    239     unsigned idx;
    240 
    241   public:
    242     explicit PHIiter(PHINode *P) // begin iterator
    243       : PHI(P), idx(0) {}
    244     PHIiter(PHINode *P, bool) // end iterator
    245       : PHI(P), idx(PHI->getNumIncomingValues()) {}
    246 
    247     PHIiter &operator++() { ++idx; return *this; }
    248     bool operator==(const PHIiter& x) const { return idx == x.idx; }
    249     bool operator!=(const PHIiter& x) const { return !operator==(x); }
    250     Value *getIncomingValue() { return PHI->getIncomingValue(idx); }
    251     BasicBlock *getIncomingBlock() { return PHI->getIncomingBlock(idx); }
    252   };
    253 }
    254 
    255 /// SSAUpdaterTraits<SSAUpdater> - Traits for the SSAUpdaterImpl template,
    256 /// specialized for SSAUpdater.
    257 namespace llvm {
    258 template<>
    259 class SSAUpdaterTraits<SSAUpdater> {
    260 public:
    261   typedef BasicBlock BlkT;
    262   typedef Value *ValT;
    263   typedef PHINode PhiT;
    264 
    265   typedef succ_iterator BlkSucc_iterator;
    266   static BlkSucc_iterator BlkSucc_begin(BlkT *BB) { return succ_begin(BB); }
    267   static BlkSucc_iterator BlkSucc_end(BlkT *BB) { return succ_end(BB); }
    268 
    269   typedef PHIiter PHI_iterator;
    270   static inline PHI_iterator PHI_begin(PhiT *PHI) { return PHI_iterator(PHI); }
    271   static inline PHI_iterator PHI_end(PhiT *PHI) {
    272     return PHI_iterator(PHI, true);
    273   }
    274 
    275   /// FindPredecessorBlocks - Put the predecessors of Info->BB into the Preds
    276   /// vector, set Info->NumPreds, and allocate space in Info->Preds.
    277   static void FindPredecessorBlocks(BasicBlock *BB,
    278                                     SmallVectorImpl<BasicBlock*> *Preds) {
    279     // We can get our predecessor info by walking the pred_iterator list,
    280     // but it is relatively slow.  If we already have PHI nodes in this
    281     // block, walk one of them to get the predecessor list instead.
    282     if (PHINode *SomePhi = dyn_cast<PHINode>(BB->begin())) {
    283       for (unsigned PI = 0, E = SomePhi->getNumIncomingValues(); PI != E; ++PI)
    284         Preds->push_back(SomePhi->getIncomingBlock(PI));
    285     } else {
    286       for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI)
    287         Preds->push_back(*PI);
    288     }
    289   }
    290 
    291   /// GetUndefVal - Get an undefined value of the same type as the value
    292   /// being handled.
    293   static Value *GetUndefVal(BasicBlock *BB, SSAUpdater *Updater) {
    294     return UndefValue::get(Updater->ProtoType);
    295   }
    296 
    297   /// CreateEmptyPHI - Create a new PHI instruction in the specified block.
    298   /// Reserve space for the operands but do not fill them in yet.
    299   static Value *CreateEmptyPHI(BasicBlock *BB, unsigned NumPreds,
    300                                SSAUpdater *Updater) {
    301     PHINode *PHI = PHINode::Create(Updater->ProtoType, NumPreds,
    302                                    Updater->ProtoName, &BB->front());
    303     return PHI;
    304   }
    305 
    306   /// AddPHIOperand - Add the specified value as an operand of the PHI for
    307   /// the specified predecessor block.
    308   static void AddPHIOperand(PHINode *PHI, Value *Val, BasicBlock *Pred) {
    309     PHI->addIncoming(Val, Pred);
    310   }
    311 
    312   /// InstrIsPHI - Check if an instruction is a PHI.
    313   ///
    314   static PHINode *InstrIsPHI(Instruction *I) {
    315     return dyn_cast<PHINode>(I);
    316   }
    317 
    318   /// ValueIsPHI - Check if a value is a PHI.
    319   ///
    320   static PHINode *ValueIsPHI(Value *Val, SSAUpdater *Updater) {
    321     return dyn_cast<PHINode>(Val);
    322   }
    323 
    324   /// ValueIsNewPHI - Like ValueIsPHI but also check if the PHI has no source
    325   /// operands, i.e., it was just added.
    326   static PHINode *ValueIsNewPHI(Value *Val, SSAUpdater *Updater) {
    327     PHINode *PHI = ValueIsPHI(Val, Updater);
    328     if (PHI && PHI->getNumIncomingValues() == 0)
    329       return PHI;
    330     return 0;
    331   }
    332 
    333   /// GetPHIValue - For the specified PHI instruction, return the value
    334   /// that it defines.
    335   static Value *GetPHIValue(PHINode *PHI) {
    336     return PHI;
    337   }
    338 };
    339 
    340 } // End llvm namespace
    341 
    342 /// GetValueAtEndOfBlockInternal - Check to see if AvailableVals has an entry
    343 /// for the specified BB and if so, return it.  If not, construct SSA form by
    344 /// first calculating the required placement of PHIs and then inserting new
    345 /// PHIs where needed.
    346 Value *SSAUpdater::GetValueAtEndOfBlockInternal(BasicBlock *BB) {
    347   AvailableValsTy &AvailableVals = getAvailableVals(AV);
    348   if (Value *V = AvailableVals[BB])
    349     return V;
    350 
    351   SSAUpdaterImpl<SSAUpdater> Impl(this, &AvailableVals, InsertedPHIs);
    352   return Impl.GetValue(BB);
    353 }
    354 
    355 //===----------------------------------------------------------------------===//
    356 // LoadAndStorePromoter Implementation
    357 //===----------------------------------------------------------------------===//
    358 
    359 LoadAndStorePromoter::
    360 LoadAndStorePromoter(const SmallVectorImpl<Instruction*> &Insts,
    361                      SSAUpdater &S, StringRef BaseName) : SSA(S) {
    362   if (Insts.empty()) return;
    363 
    364   Value *SomeVal;
    365   if (LoadInst *LI = dyn_cast<LoadInst>(Insts[0]))
    366     SomeVal = LI;
    367   else
    368     SomeVal = cast<StoreInst>(Insts[0])->getOperand(0);
    369 
    370   if (BaseName.empty())
    371     BaseName = SomeVal->getName();
    372   SSA.Initialize(SomeVal->getType(), BaseName);
    373 }
    374 
    375 
    376 void LoadAndStorePromoter::
    377 run(const SmallVectorImpl<Instruction*> &Insts) const {
    378 
    379   // First step: bucket up uses of the alloca by the block they occur in.
    380   // This is important because we have to handle multiple defs/uses in a block
    381   // ourselves: SSAUpdater is purely for cross-block references.
    382   DenseMap<BasicBlock*, TinyPtrVector<Instruction*> > UsesByBlock;
    383 
    384   for (unsigned i = 0, e = Insts.size(); i != e; ++i) {
    385     Instruction *User = Insts[i];
    386     UsesByBlock[User->getParent()].push_back(User);
    387   }
    388 
    389   // Okay, now we can iterate over all the blocks in the function with uses,
    390   // processing them.  Keep track of which loads are loading a live-in value.
    391   // Walk the uses in the use-list order to be determinstic.
    392   SmallVector<LoadInst*, 32> LiveInLoads;
    393   DenseMap<Value*, Value*> ReplacedLoads;
    394 
    395   for (unsigned i = 0, e = Insts.size(); i != e; ++i) {
    396     Instruction *User = Insts[i];
    397     BasicBlock *BB = User->getParent();
    398     TinyPtrVector<Instruction*> &BlockUses = UsesByBlock[BB];
    399 
    400     // If this block has already been processed, ignore this repeat use.
    401     if (BlockUses.empty()) continue;
    402 
    403     // Okay, this is the first use in the block.  If this block just has a
    404     // single user in it, we can rewrite it trivially.
    405     if (BlockUses.size() == 1) {
    406       // If it is a store, it is a trivial def of the value in the block.
    407       if (StoreInst *SI = dyn_cast<StoreInst>(User)) {
    408         updateDebugInfo(SI);
    409         SSA.AddAvailableValue(BB, SI->getOperand(0));
    410       } else
    411         // Otherwise it is a load, queue it to rewrite as a live-in load.
    412         LiveInLoads.push_back(cast<LoadInst>(User));
    413       BlockUses.clear();
    414       continue;
    415     }
    416 
    417     // Otherwise, check to see if this block is all loads.
    418     bool HasStore = false;
    419     for (unsigned i = 0, e = BlockUses.size(); i != e; ++i) {
    420       if (isa<StoreInst>(BlockUses[i])) {
    421         HasStore = true;
    422         break;
    423       }
    424     }
    425 
    426     // If so, we can queue them all as live in loads.  We don't have an
    427     // efficient way to tell which on is first in the block and don't want to
    428     // scan large blocks, so just add all loads as live ins.
    429     if (!HasStore) {
    430       for (unsigned i = 0, e = BlockUses.size(); i != e; ++i)
    431         LiveInLoads.push_back(cast<LoadInst>(BlockUses[i]));
    432       BlockUses.clear();
    433       continue;
    434     }
    435 
    436     // Otherwise, we have mixed loads and stores (or just a bunch of stores).
    437     // Since SSAUpdater is purely for cross-block values, we need to determine
    438     // the order of these instructions in the block.  If the first use in the
    439     // block is a load, then it uses the live in value.  The last store defines
    440     // the live out value.  We handle this by doing a linear scan of the block.
    441     Value *StoredValue = 0;
    442     for (BasicBlock::iterator II = BB->begin(), E = BB->end(); II != E; ++II) {
    443       if (LoadInst *L = dyn_cast<LoadInst>(II)) {
    444         // If this is a load from an unrelated pointer, ignore it.
    445         if (!isInstInList(L, Insts)) continue;
    446 
    447         // If we haven't seen a store yet, this is a live in use, otherwise
    448         // use the stored value.
    449         if (StoredValue) {
    450           replaceLoadWithValue(L, StoredValue);
    451           L->replaceAllUsesWith(StoredValue);
    452           ReplacedLoads[L] = StoredValue;
    453         } else {
    454           LiveInLoads.push_back(L);
    455         }
    456         continue;
    457       }
    458 
    459       if (StoreInst *SI = dyn_cast<StoreInst>(II)) {
    460         // If this is a store to an unrelated pointer, ignore it.
    461         if (!isInstInList(SI, Insts)) continue;
    462         updateDebugInfo(SI);
    463 
    464         // Remember that this is the active value in the block.
    465         StoredValue = SI->getOperand(0);
    466       }
    467     }
    468 
    469     // The last stored value that happened is the live-out for the block.
    470     assert(StoredValue && "Already checked that there is a store in block");
    471     SSA.AddAvailableValue(BB, StoredValue);
    472     BlockUses.clear();
    473   }
    474 
    475   // Okay, now we rewrite all loads that use live-in values in the loop,
    476   // inserting PHI nodes as necessary.
    477   for (unsigned i = 0, e = LiveInLoads.size(); i != e; ++i) {
    478     LoadInst *ALoad = LiveInLoads[i];
    479     Value *NewVal = SSA.GetValueInMiddleOfBlock(ALoad->getParent());
    480     replaceLoadWithValue(ALoad, NewVal);
    481 
    482     // Avoid assertions in unreachable code.
    483     if (NewVal == ALoad) NewVal = UndefValue::get(NewVal->getType());
    484     ALoad->replaceAllUsesWith(NewVal);
    485     ReplacedLoads[ALoad] = NewVal;
    486   }
    487 
    488   // Allow the client to do stuff before we start nuking things.
    489   doExtraRewritesBeforeFinalDeletion();
    490 
    491   // Now that everything is rewritten, delete the old instructions from the
    492   // function.  They should all be dead now.
    493   for (unsigned i = 0, e = Insts.size(); i != e; ++i) {
    494     Instruction *User = Insts[i];
    495 
    496     // If this is a load that still has uses, then the load must have been added
    497     // as a live value in the SSAUpdate data structure for a block (e.g. because
    498     // the loaded value was stored later).  In this case, we need to recursively
    499     // propagate the updates until we get to the real value.
    500     if (!User->use_empty()) {
    501       Value *NewVal = ReplacedLoads[User];
    502       assert(NewVal && "not a replaced load?");
    503 
    504       // Propagate down to the ultimate replacee.  The intermediately loads
    505       // could theoretically already have been deleted, so we don't want to
    506       // dereference the Value*'s.
    507       DenseMap<Value*, Value*>::iterator RLI = ReplacedLoads.find(NewVal);
    508       while (RLI != ReplacedLoads.end()) {
    509         NewVal = RLI->second;
    510         RLI = ReplacedLoads.find(NewVal);
    511       }
    512 
    513       replaceLoadWithValue(cast<LoadInst>(User), NewVal);
    514       User->replaceAllUsesWith(NewVal);
    515     }
    516 
    517     instructionDeleted(User);
    518     User->eraseFromParent();
    519   }
    520 }
    521 
    522 bool
    523 LoadAndStorePromoter::isInstInList(Instruction *I,
    524                                    const SmallVectorImpl<Instruction*> &Insts)
    525                                    const {
    526   return std::find(Insts.begin(), Insts.end(), I) != Insts.end();
    527 }
    528