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