Home | History | Annotate | Download | only in Scalar
      1 //===- GVN.cpp - Eliminate redundant values and loads ---------------------===//
      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 pass performs global value numbering to eliminate fully redundant
     11 // instructions.  It also performs simple dead load elimination.
     12 //
     13 // Note that this pass does the value numbering itself; it does not use the
     14 // ValueNumbering analysis passes.
     15 //
     16 //===----------------------------------------------------------------------===//
     17 
     18 #include "llvm/Transforms/Scalar.h"
     19 #include "llvm/ADT/DenseMap.h"
     20 #include "llvm/ADT/DepthFirstIterator.h"
     21 #include "llvm/ADT/Hashing.h"
     22 #include "llvm/ADT/MapVector.h"
     23 #include "llvm/ADT/SetVector.h"
     24 #include "llvm/ADT/SmallPtrSet.h"
     25 #include "llvm/ADT/Statistic.h"
     26 #include "llvm/Analysis/AliasAnalysis.h"
     27 #include "llvm/Analysis/CFG.h"
     28 #include "llvm/Analysis/ConstantFolding.h"
     29 #include "llvm/Analysis/InstructionSimplify.h"
     30 #include "llvm/Analysis/Loads.h"
     31 #include "llvm/Analysis/MemoryBuiltins.h"
     32 #include "llvm/Analysis/MemoryDependenceAnalysis.h"
     33 #include "llvm/Analysis/PHITransAddr.h"
     34 #include "llvm/Analysis/ValueTracking.h"
     35 #include "llvm/IR/DataLayout.h"
     36 #include "llvm/IR/Dominators.h"
     37 #include "llvm/IR/GlobalVariable.h"
     38 #include "llvm/IR/IRBuilder.h"
     39 #include "llvm/IR/IntrinsicInst.h"
     40 #include "llvm/IR/LLVMContext.h"
     41 #include "llvm/IR/Metadata.h"
     42 #include "llvm/IR/PatternMatch.h"
     43 #include "llvm/Support/Allocator.h"
     44 #include "llvm/Support/CommandLine.h"
     45 #include "llvm/Support/Debug.h"
     46 #include "llvm/Target/TargetLibraryInfo.h"
     47 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
     48 #include "llvm/Transforms/Utils/SSAUpdater.h"
     49 #include <vector>
     50 using namespace llvm;
     51 using namespace PatternMatch;
     52 
     53 #define DEBUG_TYPE "gvn"
     54 
     55 STATISTIC(NumGVNInstr,  "Number of instructions deleted");
     56 STATISTIC(NumGVNLoad,   "Number of loads deleted");
     57 STATISTIC(NumGVNPRE,    "Number of instructions PRE'd");
     58 STATISTIC(NumGVNBlocks, "Number of blocks merged");
     59 STATISTIC(NumGVNSimpl,  "Number of instructions simplified");
     60 STATISTIC(NumGVNEqProp, "Number of equalities propagated");
     61 STATISTIC(NumPRELoad,   "Number of loads PRE'd");
     62 
     63 static cl::opt<bool> EnablePRE("enable-pre",
     64                                cl::init(true), cl::Hidden);
     65 static cl::opt<bool> EnableLoadPRE("enable-load-pre", cl::init(true));
     66 
     67 // Maximum allowed recursion depth.
     68 static cl::opt<uint32_t>
     69 MaxRecurseDepth("max-recurse-depth", cl::Hidden, cl::init(1000), cl::ZeroOrMore,
     70                 cl::desc("Max recurse depth (default = 1000)"));
     71 
     72 //===----------------------------------------------------------------------===//
     73 //                         ValueTable Class
     74 //===----------------------------------------------------------------------===//
     75 
     76 /// This class holds the mapping between values and value numbers.  It is used
     77 /// as an efficient mechanism to determine the expression-wise equivalence of
     78 /// two values.
     79 namespace {
     80   struct Expression {
     81     uint32_t opcode;
     82     Type *type;
     83     SmallVector<uint32_t, 4> varargs;
     84 
     85     Expression(uint32_t o = ~2U) : opcode(o) { }
     86 
     87     bool operator==(const Expression &other) const {
     88       if (opcode != other.opcode)
     89         return false;
     90       if (opcode == ~0U || opcode == ~1U)
     91         return true;
     92       if (type != other.type)
     93         return false;
     94       if (varargs != other.varargs)
     95         return false;
     96       return true;
     97     }
     98 
     99     friend hash_code hash_value(const Expression &Value) {
    100       return hash_combine(Value.opcode, Value.type,
    101                           hash_combine_range(Value.varargs.begin(),
    102                                              Value.varargs.end()));
    103     }
    104   };
    105 
    106   class ValueTable {
    107     DenseMap<Value*, uint32_t> valueNumbering;
    108     DenseMap<Expression, uint32_t> expressionNumbering;
    109     AliasAnalysis *AA;
    110     MemoryDependenceAnalysis *MD;
    111     DominatorTree *DT;
    112 
    113     uint32_t nextValueNumber;
    114 
    115     Expression create_expression(Instruction* I);
    116     Expression create_cmp_expression(unsigned Opcode,
    117                                      CmpInst::Predicate Predicate,
    118                                      Value *LHS, Value *RHS);
    119     Expression create_extractvalue_expression(ExtractValueInst* EI);
    120     uint32_t lookup_or_add_call(CallInst* C);
    121   public:
    122     ValueTable() : nextValueNumber(1) { }
    123     uint32_t lookup_or_add(Value *V);
    124     uint32_t lookup(Value *V) const;
    125     uint32_t lookup_or_add_cmp(unsigned Opcode, CmpInst::Predicate Pred,
    126                                Value *LHS, Value *RHS);
    127     void add(Value *V, uint32_t num);
    128     void clear();
    129     void erase(Value *v);
    130     void setAliasAnalysis(AliasAnalysis* A) { AA = A; }
    131     AliasAnalysis *getAliasAnalysis() const { return AA; }
    132     void setMemDep(MemoryDependenceAnalysis* M) { MD = M; }
    133     void setDomTree(DominatorTree* D) { DT = D; }
    134     uint32_t getNextUnusedValueNumber() { return nextValueNumber; }
    135     void verifyRemoved(const Value *) const;
    136   };
    137 }
    138 
    139 namespace llvm {
    140 template <> struct DenseMapInfo<Expression> {
    141   static inline Expression getEmptyKey() {
    142     return ~0U;
    143   }
    144 
    145   static inline Expression getTombstoneKey() {
    146     return ~1U;
    147   }
    148 
    149   static unsigned getHashValue(const Expression e) {
    150     using llvm::hash_value;
    151     return static_cast<unsigned>(hash_value(e));
    152   }
    153   static bool isEqual(const Expression &LHS, const Expression &RHS) {
    154     return LHS == RHS;
    155   }
    156 };
    157 
    158 }
    159 
    160 //===----------------------------------------------------------------------===//
    161 //                     ValueTable Internal Functions
    162 //===----------------------------------------------------------------------===//
    163 
    164 Expression ValueTable::create_expression(Instruction *I) {
    165   Expression e;
    166   e.type = I->getType();
    167   e.opcode = I->getOpcode();
    168   for (Instruction::op_iterator OI = I->op_begin(), OE = I->op_end();
    169        OI != OE; ++OI)
    170     e.varargs.push_back(lookup_or_add(*OI));
    171   if (I->isCommutative()) {
    172     // Ensure that commutative instructions that only differ by a permutation
    173     // of their operands get the same value number by sorting the operand value
    174     // numbers.  Since all commutative instructions have two operands it is more
    175     // efficient to sort by hand rather than using, say, std::sort.
    176     assert(I->getNumOperands() == 2 && "Unsupported commutative instruction!");
    177     if (e.varargs[0] > e.varargs[1])
    178       std::swap(e.varargs[0], e.varargs[1]);
    179   }
    180 
    181   if (CmpInst *C = dyn_cast<CmpInst>(I)) {
    182     // Sort the operand value numbers so x<y and y>x get the same value number.
    183     CmpInst::Predicate Predicate = C->getPredicate();
    184     if (e.varargs[0] > e.varargs[1]) {
    185       std::swap(e.varargs[0], e.varargs[1]);
    186       Predicate = CmpInst::getSwappedPredicate(Predicate);
    187     }
    188     e.opcode = (C->getOpcode() << 8) | Predicate;
    189   } else if (InsertValueInst *E = dyn_cast<InsertValueInst>(I)) {
    190     for (InsertValueInst::idx_iterator II = E->idx_begin(), IE = E->idx_end();
    191          II != IE; ++II)
    192       e.varargs.push_back(*II);
    193   }
    194 
    195   return e;
    196 }
    197 
    198 Expression ValueTable::create_cmp_expression(unsigned Opcode,
    199                                              CmpInst::Predicate Predicate,
    200                                              Value *LHS, Value *RHS) {
    201   assert((Opcode == Instruction::ICmp || Opcode == Instruction::FCmp) &&
    202          "Not a comparison!");
    203   Expression e;
    204   e.type = CmpInst::makeCmpResultType(LHS->getType());
    205   e.varargs.push_back(lookup_or_add(LHS));
    206   e.varargs.push_back(lookup_or_add(RHS));
    207 
    208   // Sort the operand value numbers so x<y and y>x get the same value number.
    209   if (e.varargs[0] > e.varargs[1]) {
    210     std::swap(e.varargs[0], e.varargs[1]);
    211     Predicate = CmpInst::getSwappedPredicate(Predicate);
    212   }
    213   e.opcode = (Opcode << 8) | Predicate;
    214   return e;
    215 }
    216 
    217 Expression ValueTable::create_extractvalue_expression(ExtractValueInst *EI) {
    218   assert(EI && "Not an ExtractValueInst?");
    219   Expression e;
    220   e.type = EI->getType();
    221   e.opcode = 0;
    222 
    223   IntrinsicInst *I = dyn_cast<IntrinsicInst>(EI->getAggregateOperand());
    224   if (I != nullptr && EI->getNumIndices() == 1 && *EI->idx_begin() == 0 ) {
    225     // EI might be an extract from one of our recognised intrinsics. If it
    226     // is we'll synthesize a semantically equivalent expression instead on
    227     // an extract value expression.
    228     switch (I->getIntrinsicID()) {
    229       case Intrinsic::sadd_with_overflow:
    230       case Intrinsic::uadd_with_overflow:
    231         e.opcode = Instruction::Add;
    232         break;
    233       case Intrinsic::ssub_with_overflow:
    234       case Intrinsic::usub_with_overflow:
    235         e.opcode = Instruction::Sub;
    236         break;
    237       case Intrinsic::smul_with_overflow:
    238       case Intrinsic::umul_with_overflow:
    239         e.opcode = Instruction::Mul;
    240         break;
    241       default:
    242         break;
    243     }
    244 
    245     if (e.opcode != 0) {
    246       // Intrinsic recognized. Grab its args to finish building the expression.
    247       assert(I->getNumArgOperands() == 2 &&
    248              "Expect two args for recognised intrinsics.");
    249       e.varargs.push_back(lookup_or_add(I->getArgOperand(0)));
    250       e.varargs.push_back(lookup_or_add(I->getArgOperand(1)));
    251       return e;
    252     }
    253   }
    254 
    255   // Not a recognised intrinsic. Fall back to producing an extract value
    256   // expression.
    257   e.opcode = EI->getOpcode();
    258   for (Instruction::op_iterator OI = EI->op_begin(), OE = EI->op_end();
    259        OI != OE; ++OI)
    260     e.varargs.push_back(lookup_or_add(*OI));
    261 
    262   for (ExtractValueInst::idx_iterator II = EI->idx_begin(), IE = EI->idx_end();
    263          II != IE; ++II)
    264     e.varargs.push_back(*II);
    265 
    266   return e;
    267 }
    268 
    269 //===----------------------------------------------------------------------===//
    270 //                     ValueTable External Functions
    271 //===----------------------------------------------------------------------===//
    272 
    273 /// add - Insert a value into the table with a specified value number.
    274 void ValueTable::add(Value *V, uint32_t num) {
    275   valueNumbering.insert(std::make_pair(V, num));
    276 }
    277 
    278 uint32_t ValueTable::lookup_or_add_call(CallInst *C) {
    279   if (AA->doesNotAccessMemory(C)) {
    280     Expression exp = create_expression(C);
    281     uint32_t &e = expressionNumbering[exp];
    282     if (!e) e = nextValueNumber++;
    283     valueNumbering[C] = e;
    284     return e;
    285   } else if (AA->onlyReadsMemory(C)) {
    286     Expression exp = create_expression(C);
    287     uint32_t &e = expressionNumbering[exp];
    288     if (!e) {
    289       e = nextValueNumber++;
    290       valueNumbering[C] = e;
    291       return e;
    292     }
    293     if (!MD) {
    294       e = nextValueNumber++;
    295       valueNumbering[C] = e;
    296       return e;
    297     }
    298 
    299     MemDepResult local_dep = MD->getDependency(C);
    300 
    301     if (!local_dep.isDef() && !local_dep.isNonLocal()) {
    302       valueNumbering[C] =  nextValueNumber;
    303       return nextValueNumber++;
    304     }
    305 
    306     if (local_dep.isDef()) {
    307       CallInst* local_cdep = cast<CallInst>(local_dep.getInst());
    308 
    309       if (local_cdep->getNumArgOperands() != C->getNumArgOperands()) {
    310         valueNumbering[C] = nextValueNumber;
    311         return nextValueNumber++;
    312       }
    313 
    314       for (unsigned i = 0, e = C->getNumArgOperands(); i < e; ++i) {
    315         uint32_t c_vn = lookup_or_add(C->getArgOperand(i));
    316         uint32_t cd_vn = lookup_or_add(local_cdep->getArgOperand(i));
    317         if (c_vn != cd_vn) {
    318           valueNumbering[C] = nextValueNumber;
    319           return nextValueNumber++;
    320         }
    321       }
    322 
    323       uint32_t v = lookup_or_add(local_cdep);
    324       valueNumbering[C] = v;
    325       return v;
    326     }
    327 
    328     // Non-local case.
    329     const MemoryDependenceAnalysis::NonLocalDepInfo &deps =
    330       MD->getNonLocalCallDependency(CallSite(C));
    331     // FIXME: Move the checking logic to MemDep!
    332     CallInst* cdep = nullptr;
    333 
    334     // Check to see if we have a single dominating call instruction that is
    335     // identical to C.
    336     for (unsigned i = 0, e = deps.size(); i != e; ++i) {
    337       const NonLocalDepEntry *I = &deps[i];
    338       if (I->getResult().isNonLocal())
    339         continue;
    340 
    341       // We don't handle non-definitions.  If we already have a call, reject
    342       // instruction dependencies.
    343       if (!I->getResult().isDef() || cdep != nullptr) {
    344         cdep = nullptr;
    345         break;
    346       }
    347 
    348       CallInst *NonLocalDepCall = dyn_cast<CallInst>(I->getResult().getInst());
    349       // FIXME: All duplicated with non-local case.
    350       if (NonLocalDepCall && DT->properlyDominates(I->getBB(), C->getParent())){
    351         cdep = NonLocalDepCall;
    352         continue;
    353       }
    354 
    355       cdep = nullptr;
    356       break;
    357     }
    358 
    359     if (!cdep) {
    360       valueNumbering[C] = nextValueNumber;
    361       return nextValueNumber++;
    362     }
    363 
    364     if (cdep->getNumArgOperands() != C->getNumArgOperands()) {
    365       valueNumbering[C] = nextValueNumber;
    366       return nextValueNumber++;
    367     }
    368     for (unsigned i = 0, e = C->getNumArgOperands(); i < e; ++i) {
    369       uint32_t c_vn = lookup_or_add(C->getArgOperand(i));
    370       uint32_t cd_vn = lookup_or_add(cdep->getArgOperand(i));
    371       if (c_vn != cd_vn) {
    372         valueNumbering[C] = nextValueNumber;
    373         return nextValueNumber++;
    374       }
    375     }
    376 
    377     uint32_t v = lookup_or_add(cdep);
    378     valueNumbering[C] = v;
    379     return v;
    380 
    381   } else {
    382     valueNumbering[C] = nextValueNumber;
    383     return nextValueNumber++;
    384   }
    385 }
    386 
    387 /// lookup_or_add - Returns the value number for the specified value, assigning
    388 /// it a new number if it did not have one before.
    389 uint32_t ValueTable::lookup_or_add(Value *V) {
    390   DenseMap<Value*, uint32_t>::iterator VI = valueNumbering.find(V);
    391   if (VI != valueNumbering.end())
    392     return VI->second;
    393 
    394   if (!isa<Instruction>(V)) {
    395     valueNumbering[V] = nextValueNumber;
    396     return nextValueNumber++;
    397   }
    398 
    399   Instruction* I = cast<Instruction>(V);
    400   Expression exp;
    401   switch (I->getOpcode()) {
    402     case Instruction::Call:
    403       return lookup_or_add_call(cast<CallInst>(I));
    404     case Instruction::Add:
    405     case Instruction::FAdd:
    406     case Instruction::Sub:
    407     case Instruction::FSub:
    408     case Instruction::Mul:
    409     case Instruction::FMul:
    410     case Instruction::UDiv:
    411     case Instruction::SDiv:
    412     case Instruction::FDiv:
    413     case Instruction::URem:
    414     case Instruction::SRem:
    415     case Instruction::FRem:
    416     case Instruction::Shl:
    417     case Instruction::LShr:
    418     case Instruction::AShr:
    419     case Instruction::And:
    420     case Instruction::Or:
    421     case Instruction::Xor:
    422     case Instruction::ICmp:
    423     case Instruction::FCmp:
    424     case Instruction::Trunc:
    425     case Instruction::ZExt:
    426     case Instruction::SExt:
    427     case Instruction::FPToUI:
    428     case Instruction::FPToSI:
    429     case Instruction::UIToFP:
    430     case Instruction::SIToFP:
    431     case Instruction::FPTrunc:
    432     case Instruction::FPExt:
    433     case Instruction::PtrToInt:
    434     case Instruction::IntToPtr:
    435     case Instruction::BitCast:
    436     case Instruction::Select:
    437     case Instruction::ExtractElement:
    438     case Instruction::InsertElement:
    439     case Instruction::ShuffleVector:
    440     case Instruction::InsertValue:
    441     case Instruction::GetElementPtr:
    442       exp = create_expression(I);
    443       break;
    444     case Instruction::ExtractValue:
    445       exp = create_extractvalue_expression(cast<ExtractValueInst>(I));
    446       break;
    447     default:
    448       valueNumbering[V] = nextValueNumber;
    449       return nextValueNumber++;
    450   }
    451 
    452   uint32_t& e = expressionNumbering[exp];
    453   if (!e) e = nextValueNumber++;
    454   valueNumbering[V] = e;
    455   return e;
    456 }
    457 
    458 /// lookup - Returns the value number of the specified value. Fails if
    459 /// the value has not yet been numbered.
    460 uint32_t ValueTable::lookup(Value *V) const {
    461   DenseMap<Value*, uint32_t>::const_iterator VI = valueNumbering.find(V);
    462   assert(VI != valueNumbering.end() && "Value not numbered?");
    463   return VI->second;
    464 }
    465 
    466 /// lookup_or_add_cmp - Returns the value number of the given comparison,
    467 /// assigning it a new number if it did not have one before.  Useful when
    468 /// we deduced the result of a comparison, but don't immediately have an
    469 /// instruction realizing that comparison to hand.
    470 uint32_t ValueTable::lookup_or_add_cmp(unsigned Opcode,
    471                                        CmpInst::Predicate Predicate,
    472                                        Value *LHS, Value *RHS) {
    473   Expression exp = create_cmp_expression(Opcode, Predicate, LHS, RHS);
    474   uint32_t& e = expressionNumbering[exp];
    475   if (!e) e = nextValueNumber++;
    476   return e;
    477 }
    478 
    479 /// clear - Remove all entries from the ValueTable.
    480 void ValueTable::clear() {
    481   valueNumbering.clear();
    482   expressionNumbering.clear();
    483   nextValueNumber = 1;
    484 }
    485 
    486 /// erase - Remove a value from the value numbering.
    487 void ValueTable::erase(Value *V) {
    488   valueNumbering.erase(V);
    489 }
    490 
    491 /// verifyRemoved - Verify that the value is removed from all internal data
    492 /// structures.
    493 void ValueTable::verifyRemoved(const Value *V) const {
    494   for (DenseMap<Value*, uint32_t>::const_iterator
    495          I = valueNumbering.begin(), E = valueNumbering.end(); I != E; ++I) {
    496     assert(I->first != V && "Inst still occurs in value numbering map!");
    497   }
    498 }
    499 
    500 //===----------------------------------------------------------------------===//
    501 //                                GVN Pass
    502 //===----------------------------------------------------------------------===//
    503 
    504 namespace {
    505   class GVN;
    506   struct AvailableValueInBlock {
    507     /// BB - The basic block in question.
    508     BasicBlock *BB;
    509     enum ValType {
    510       SimpleVal,  // A simple offsetted value that is accessed.
    511       LoadVal,    // A value produced by a load.
    512       MemIntrin,  // A memory intrinsic which is loaded from.
    513       UndefVal    // A UndefValue representing a value from dead block (which
    514                   // is not yet physically removed from the CFG).
    515     };
    516 
    517     /// V - The value that is live out of the block.
    518     PointerIntPair<Value *, 2, ValType> Val;
    519 
    520     /// Offset - The byte offset in Val that is interesting for the load query.
    521     unsigned Offset;
    522 
    523     static AvailableValueInBlock get(BasicBlock *BB, Value *V,
    524                                      unsigned Offset = 0) {
    525       AvailableValueInBlock Res;
    526       Res.BB = BB;
    527       Res.Val.setPointer(V);
    528       Res.Val.setInt(SimpleVal);
    529       Res.Offset = Offset;
    530       return Res;
    531     }
    532 
    533     static AvailableValueInBlock getMI(BasicBlock *BB, MemIntrinsic *MI,
    534                                        unsigned Offset = 0) {
    535       AvailableValueInBlock Res;
    536       Res.BB = BB;
    537       Res.Val.setPointer(MI);
    538       Res.Val.setInt(MemIntrin);
    539       Res.Offset = Offset;
    540       return Res;
    541     }
    542 
    543     static AvailableValueInBlock getLoad(BasicBlock *BB, LoadInst *LI,
    544                                          unsigned Offset = 0) {
    545       AvailableValueInBlock Res;
    546       Res.BB = BB;
    547       Res.Val.setPointer(LI);
    548       Res.Val.setInt(LoadVal);
    549       Res.Offset = Offset;
    550       return Res;
    551     }
    552 
    553     static AvailableValueInBlock getUndef(BasicBlock *BB) {
    554       AvailableValueInBlock Res;
    555       Res.BB = BB;
    556       Res.Val.setPointer(nullptr);
    557       Res.Val.setInt(UndefVal);
    558       Res.Offset = 0;
    559       return Res;
    560     }
    561 
    562     bool isSimpleValue() const { return Val.getInt() == SimpleVal; }
    563     bool isCoercedLoadValue() const { return Val.getInt() == LoadVal; }
    564     bool isMemIntrinValue() const { return Val.getInt() == MemIntrin; }
    565     bool isUndefValue() const { return Val.getInt() == UndefVal; }
    566 
    567     Value *getSimpleValue() const {
    568       assert(isSimpleValue() && "Wrong accessor");
    569       return Val.getPointer();
    570     }
    571 
    572     LoadInst *getCoercedLoadValue() const {
    573       assert(isCoercedLoadValue() && "Wrong accessor");
    574       return cast<LoadInst>(Val.getPointer());
    575     }
    576 
    577     MemIntrinsic *getMemIntrinValue() const {
    578       assert(isMemIntrinValue() && "Wrong accessor");
    579       return cast<MemIntrinsic>(Val.getPointer());
    580     }
    581 
    582     /// MaterializeAdjustedValue - Emit code into this block to adjust the value
    583     /// defined here to the specified type.  This handles various coercion cases.
    584     Value *MaterializeAdjustedValue(Type *LoadTy, GVN &gvn) const;
    585   };
    586 
    587   class GVN : public FunctionPass {
    588     bool NoLoads;
    589     MemoryDependenceAnalysis *MD;
    590     DominatorTree *DT;
    591     const DataLayout *DL;
    592     const TargetLibraryInfo *TLI;
    593     SetVector<BasicBlock *> DeadBlocks;
    594 
    595     ValueTable VN;
    596 
    597     /// LeaderTable - A mapping from value numbers to lists of Value*'s that
    598     /// have that value number.  Use findLeader to query it.
    599     struct LeaderTableEntry {
    600       Value *Val;
    601       const BasicBlock *BB;
    602       LeaderTableEntry *Next;
    603     };
    604     DenseMap<uint32_t, LeaderTableEntry> LeaderTable;
    605     BumpPtrAllocator TableAllocator;
    606 
    607     SmallVector<Instruction*, 8> InstrsToErase;
    608 
    609     typedef SmallVector<NonLocalDepResult, 64> LoadDepVect;
    610     typedef SmallVector<AvailableValueInBlock, 64> AvailValInBlkVect;
    611     typedef SmallVector<BasicBlock*, 64> UnavailBlkVect;
    612 
    613   public:
    614     static char ID; // Pass identification, replacement for typeid
    615     explicit GVN(bool noloads = false)
    616         : FunctionPass(ID), NoLoads(noloads), MD(nullptr) {
    617       initializeGVNPass(*PassRegistry::getPassRegistry());
    618     }
    619 
    620     bool runOnFunction(Function &F) override;
    621 
    622     /// markInstructionForDeletion - This removes the specified instruction from
    623     /// our various maps and marks it for deletion.
    624     void markInstructionForDeletion(Instruction *I) {
    625       VN.erase(I);
    626       InstrsToErase.push_back(I);
    627     }
    628 
    629     const DataLayout *getDataLayout() const { return DL; }
    630     DominatorTree &getDominatorTree() const { return *DT; }
    631     AliasAnalysis *getAliasAnalysis() const { return VN.getAliasAnalysis(); }
    632     MemoryDependenceAnalysis &getMemDep() const { return *MD; }
    633   private:
    634     /// addToLeaderTable - Push a new Value to the LeaderTable onto the list for
    635     /// its value number.
    636     void addToLeaderTable(uint32_t N, Value *V, const BasicBlock *BB) {
    637       LeaderTableEntry &Curr = LeaderTable[N];
    638       if (!Curr.Val) {
    639         Curr.Val = V;
    640         Curr.BB = BB;
    641         return;
    642       }
    643 
    644       LeaderTableEntry *Node = TableAllocator.Allocate<LeaderTableEntry>();
    645       Node->Val = V;
    646       Node->BB = BB;
    647       Node->Next = Curr.Next;
    648       Curr.Next = Node;
    649     }
    650 
    651     /// removeFromLeaderTable - Scan the list of values corresponding to a given
    652     /// value number, and remove the given instruction if encountered.
    653     void removeFromLeaderTable(uint32_t N, Instruction *I, BasicBlock *BB) {
    654       LeaderTableEntry* Prev = nullptr;
    655       LeaderTableEntry* Curr = &LeaderTable[N];
    656 
    657       while (Curr->Val != I || Curr->BB != BB) {
    658         Prev = Curr;
    659         Curr = Curr->Next;
    660       }
    661 
    662       if (Prev) {
    663         Prev->Next = Curr->Next;
    664       } else {
    665         if (!Curr->Next) {
    666           Curr->Val = nullptr;
    667           Curr->BB = nullptr;
    668         } else {
    669           LeaderTableEntry* Next = Curr->Next;
    670           Curr->Val = Next->Val;
    671           Curr->BB = Next->BB;
    672           Curr->Next = Next->Next;
    673         }
    674       }
    675     }
    676 
    677     // List of critical edges to be split between iterations.
    678     SmallVector<std::pair<TerminatorInst*, unsigned>, 4> toSplit;
    679 
    680     // This transformation requires dominator postdominator info
    681     void getAnalysisUsage(AnalysisUsage &AU) const override {
    682       AU.addRequired<DominatorTreeWrapperPass>();
    683       AU.addRequired<TargetLibraryInfo>();
    684       if (!NoLoads)
    685         AU.addRequired<MemoryDependenceAnalysis>();
    686       AU.addRequired<AliasAnalysis>();
    687 
    688       AU.addPreserved<DominatorTreeWrapperPass>();
    689       AU.addPreserved<AliasAnalysis>();
    690     }
    691 
    692 
    693     // Helper fuctions of redundant load elimination
    694     bool processLoad(LoadInst *L);
    695     bool processNonLocalLoad(LoadInst *L);
    696     void AnalyzeLoadAvailability(LoadInst *LI, LoadDepVect &Deps,
    697                                  AvailValInBlkVect &ValuesPerBlock,
    698                                  UnavailBlkVect &UnavailableBlocks);
    699     bool PerformLoadPRE(LoadInst *LI, AvailValInBlkVect &ValuesPerBlock,
    700                         UnavailBlkVect &UnavailableBlocks);
    701 
    702     // Other helper routines
    703     bool processInstruction(Instruction *I);
    704     bool processBlock(BasicBlock *BB);
    705     void dump(DenseMap<uint32_t, Value*> &d);
    706     bool iterateOnFunction(Function &F);
    707     bool performPRE(Function &F);
    708     Value *findLeader(const BasicBlock *BB, uint32_t num);
    709     void cleanupGlobalSets();
    710     void verifyRemoved(const Instruction *I) const;
    711     bool splitCriticalEdges();
    712     BasicBlock *splitCriticalEdges(BasicBlock *Pred, BasicBlock *Succ);
    713     unsigned replaceAllDominatedUsesWith(Value *From, Value *To,
    714                                          const BasicBlockEdge &Root);
    715     bool propagateEquality(Value *LHS, Value *RHS, const BasicBlockEdge &Root);
    716     bool processFoldableCondBr(BranchInst *BI);
    717     void addDeadBlock(BasicBlock *BB);
    718     void assignValNumForDeadCode();
    719   };
    720 
    721   char GVN::ID = 0;
    722 }
    723 
    724 // createGVNPass - The public interface to this file...
    725 FunctionPass *llvm::createGVNPass(bool NoLoads) {
    726   return new GVN(NoLoads);
    727 }
    728 
    729 INITIALIZE_PASS_BEGIN(GVN, "gvn", "Global Value Numbering", false, false)
    730 INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
    731 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
    732 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfo)
    733 INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
    734 INITIALIZE_PASS_END(GVN, "gvn", "Global Value Numbering", false, false)
    735 
    736 #if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP)
    737 void GVN::dump(DenseMap<uint32_t, Value*>& d) {
    738   errs() << "{\n";
    739   for (DenseMap<uint32_t, Value*>::iterator I = d.begin(),
    740        E = d.end(); I != E; ++I) {
    741       errs() << I->first << "\n";
    742       I->second->dump();
    743   }
    744   errs() << "}\n";
    745 }
    746 #endif
    747 
    748 /// IsValueFullyAvailableInBlock - Return true if we can prove that the value
    749 /// we're analyzing is fully available in the specified block.  As we go, keep
    750 /// track of which blocks we know are fully alive in FullyAvailableBlocks.  This
    751 /// map is actually a tri-state map with the following values:
    752 ///   0) we know the block *is not* fully available.
    753 ///   1) we know the block *is* fully available.
    754 ///   2) we do not know whether the block is fully available or not, but we are
    755 ///      currently speculating that it will be.
    756 ///   3) we are speculating for this block and have used that to speculate for
    757 ///      other blocks.
    758 static bool IsValueFullyAvailableInBlock(BasicBlock *BB,
    759                             DenseMap<BasicBlock*, char> &FullyAvailableBlocks,
    760                             uint32_t RecurseDepth) {
    761   if (RecurseDepth > MaxRecurseDepth)
    762     return false;
    763 
    764   // Optimistically assume that the block is fully available and check to see
    765   // if we already know about this block in one lookup.
    766   std::pair<DenseMap<BasicBlock*, char>::iterator, char> IV =
    767     FullyAvailableBlocks.insert(std::make_pair(BB, 2));
    768 
    769   // If the entry already existed for this block, return the precomputed value.
    770   if (!IV.second) {
    771     // If this is a speculative "available" value, mark it as being used for
    772     // speculation of other blocks.
    773     if (IV.first->second == 2)
    774       IV.first->second = 3;
    775     return IV.first->second != 0;
    776   }
    777 
    778   // Otherwise, see if it is fully available in all predecessors.
    779   pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
    780 
    781   // If this block has no predecessors, it isn't live-in here.
    782   if (PI == PE)
    783     goto SpeculationFailure;
    784 
    785   for (; PI != PE; ++PI)
    786     // If the value isn't fully available in one of our predecessors, then it
    787     // isn't fully available in this block either.  Undo our previous
    788     // optimistic assumption and bail out.
    789     if (!IsValueFullyAvailableInBlock(*PI, FullyAvailableBlocks,RecurseDepth+1))
    790       goto SpeculationFailure;
    791 
    792   return true;
    793 
    794 // SpeculationFailure - If we get here, we found out that this is not, after
    795 // all, a fully-available block.  We have a problem if we speculated on this and
    796 // used the speculation to mark other blocks as available.
    797 SpeculationFailure:
    798   char &BBVal = FullyAvailableBlocks[BB];
    799 
    800   // If we didn't speculate on this, just return with it set to false.
    801   if (BBVal == 2) {
    802     BBVal = 0;
    803     return false;
    804   }
    805 
    806   // If we did speculate on this value, we could have blocks set to 1 that are
    807   // incorrect.  Walk the (transitive) successors of this block and mark them as
    808   // 0 if set to one.
    809   SmallVector<BasicBlock*, 32> BBWorklist;
    810   BBWorklist.push_back(BB);
    811 
    812   do {
    813     BasicBlock *Entry = BBWorklist.pop_back_val();
    814     // Note that this sets blocks to 0 (unavailable) if they happen to not
    815     // already be in FullyAvailableBlocks.  This is safe.
    816     char &EntryVal = FullyAvailableBlocks[Entry];
    817     if (EntryVal == 0) continue;  // Already unavailable.
    818 
    819     // Mark as unavailable.
    820     EntryVal = 0;
    821 
    822     BBWorklist.append(succ_begin(Entry), succ_end(Entry));
    823   } while (!BBWorklist.empty());
    824 
    825   return false;
    826 }
    827 
    828 
    829 /// CanCoerceMustAliasedValueToLoad - Return true if
    830 /// CoerceAvailableValueToLoadType will succeed.
    831 static bool CanCoerceMustAliasedValueToLoad(Value *StoredVal,
    832                                             Type *LoadTy,
    833                                             const DataLayout &DL) {
    834   // If the loaded or stored value is an first class array or struct, don't try
    835   // to transform them.  We need to be able to bitcast to integer.
    836   if (LoadTy->isStructTy() || LoadTy->isArrayTy() ||
    837       StoredVal->getType()->isStructTy() ||
    838       StoredVal->getType()->isArrayTy())
    839     return false;
    840 
    841   // The store has to be at least as big as the load.
    842   if (DL.getTypeSizeInBits(StoredVal->getType()) <
    843         DL.getTypeSizeInBits(LoadTy))
    844     return false;
    845 
    846   return true;
    847 }
    848 
    849 /// CoerceAvailableValueToLoadType - If we saw a store of a value to memory, and
    850 /// then a load from a must-aliased pointer of a different type, try to coerce
    851 /// the stored value.  LoadedTy is the type of the load we want to replace and
    852 /// InsertPt is the place to insert new instructions.
    853 ///
    854 /// If we can't do it, return null.
    855 static Value *CoerceAvailableValueToLoadType(Value *StoredVal,
    856                                              Type *LoadedTy,
    857                                              Instruction *InsertPt,
    858                                              const DataLayout &DL) {
    859   if (!CanCoerceMustAliasedValueToLoad(StoredVal, LoadedTy, DL))
    860     return nullptr;
    861 
    862   // If this is already the right type, just return it.
    863   Type *StoredValTy = StoredVal->getType();
    864 
    865   uint64_t StoreSize = DL.getTypeSizeInBits(StoredValTy);
    866   uint64_t LoadSize = DL.getTypeSizeInBits(LoadedTy);
    867 
    868   // If the store and reload are the same size, we can always reuse it.
    869   if (StoreSize == LoadSize) {
    870     // Pointer to Pointer -> use bitcast.
    871     if (StoredValTy->getScalarType()->isPointerTy() &&
    872         LoadedTy->getScalarType()->isPointerTy())
    873       return new BitCastInst(StoredVal, LoadedTy, "", InsertPt);
    874 
    875     // Convert source pointers to integers, which can be bitcast.
    876     if (StoredValTy->getScalarType()->isPointerTy()) {
    877       StoredValTy = DL.getIntPtrType(StoredValTy);
    878       StoredVal = new PtrToIntInst(StoredVal, StoredValTy, "", InsertPt);
    879     }
    880 
    881     Type *TypeToCastTo = LoadedTy;
    882     if (TypeToCastTo->getScalarType()->isPointerTy())
    883       TypeToCastTo = DL.getIntPtrType(TypeToCastTo);
    884 
    885     if (StoredValTy != TypeToCastTo)
    886       StoredVal = new BitCastInst(StoredVal, TypeToCastTo, "", InsertPt);
    887 
    888     // Cast to pointer if the load needs a pointer type.
    889     if (LoadedTy->getScalarType()->isPointerTy())
    890       StoredVal = new IntToPtrInst(StoredVal, LoadedTy, "", InsertPt);
    891 
    892     return StoredVal;
    893   }
    894 
    895   // If the loaded value is smaller than the available value, then we can
    896   // extract out a piece from it.  If the available value is too small, then we
    897   // can't do anything.
    898   assert(StoreSize >= LoadSize && "CanCoerceMustAliasedValueToLoad fail");
    899 
    900   // Convert source pointers to integers, which can be manipulated.
    901   if (StoredValTy->getScalarType()->isPointerTy()) {
    902     StoredValTy = DL.getIntPtrType(StoredValTy);
    903     StoredVal = new PtrToIntInst(StoredVal, StoredValTy, "", InsertPt);
    904   }
    905 
    906   // Convert vectors and fp to integer, which can be manipulated.
    907   if (!StoredValTy->isIntegerTy()) {
    908     StoredValTy = IntegerType::get(StoredValTy->getContext(), StoreSize);
    909     StoredVal = new BitCastInst(StoredVal, StoredValTy, "", InsertPt);
    910   }
    911 
    912   // If this is a big-endian system, we need to shift the value down to the low
    913   // bits so that a truncate will work.
    914   if (DL.isBigEndian()) {
    915     Constant *Val = ConstantInt::get(StoredVal->getType(), StoreSize-LoadSize);
    916     StoredVal = BinaryOperator::CreateLShr(StoredVal, Val, "tmp", InsertPt);
    917   }
    918 
    919   // Truncate the integer to the right size now.
    920   Type *NewIntTy = IntegerType::get(StoredValTy->getContext(), LoadSize);
    921   StoredVal = new TruncInst(StoredVal, NewIntTy, "trunc", InsertPt);
    922 
    923   if (LoadedTy == NewIntTy)
    924     return StoredVal;
    925 
    926   // If the result is a pointer, inttoptr.
    927   if (LoadedTy->getScalarType()->isPointerTy())
    928     return new IntToPtrInst(StoredVal, LoadedTy, "inttoptr", InsertPt);
    929 
    930   // Otherwise, bitcast.
    931   return new BitCastInst(StoredVal, LoadedTy, "bitcast", InsertPt);
    932 }
    933 
    934 /// AnalyzeLoadFromClobberingWrite - This function is called when we have a
    935 /// memdep query of a load that ends up being a clobbering memory write (store,
    936 /// memset, memcpy, memmove).  This means that the write *may* provide bits used
    937 /// by the load but we can't be sure because the pointers don't mustalias.
    938 ///
    939 /// Check this case to see if there is anything more we can do before we give
    940 /// up.  This returns -1 if we have to give up, or a byte number in the stored
    941 /// value of the piece that feeds the load.
    942 static int AnalyzeLoadFromClobberingWrite(Type *LoadTy, Value *LoadPtr,
    943                                           Value *WritePtr,
    944                                           uint64_t WriteSizeInBits,
    945                                           const DataLayout &DL) {
    946   // If the loaded or stored value is a first class array or struct, don't try
    947   // to transform them.  We need to be able to bitcast to integer.
    948   if (LoadTy->isStructTy() || LoadTy->isArrayTy())
    949     return -1;
    950 
    951   int64_t StoreOffset = 0, LoadOffset = 0;
    952   Value *StoreBase = GetPointerBaseWithConstantOffset(WritePtr,StoreOffset,&DL);
    953   Value *LoadBase = GetPointerBaseWithConstantOffset(LoadPtr, LoadOffset, &DL);
    954   if (StoreBase != LoadBase)
    955     return -1;
    956 
    957   // If the load and store are to the exact same address, they should have been
    958   // a must alias.  AA must have gotten confused.
    959   // FIXME: Study to see if/when this happens.  One case is forwarding a memset
    960   // to a load from the base of the memset.
    961 #if 0
    962   if (LoadOffset == StoreOffset) {
    963     dbgs() << "STORE/LOAD DEP WITH COMMON POINTER MISSED:\n"
    964     << "Base       = " << *StoreBase << "\n"
    965     << "Store Ptr  = " << *WritePtr << "\n"
    966     << "Store Offs = " << StoreOffset << "\n"
    967     << "Load Ptr   = " << *LoadPtr << "\n";
    968     abort();
    969   }
    970 #endif
    971 
    972   // If the load and store don't overlap at all, the store doesn't provide
    973   // anything to the load.  In this case, they really don't alias at all, AA
    974   // must have gotten confused.
    975   uint64_t LoadSize = DL.getTypeSizeInBits(LoadTy);
    976 
    977   if ((WriteSizeInBits & 7) | (LoadSize & 7))
    978     return -1;
    979   uint64_t StoreSize = WriteSizeInBits >> 3;  // Convert to bytes.
    980   LoadSize >>= 3;
    981 
    982 
    983   bool isAAFailure = false;
    984   if (StoreOffset < LoadOffset)
    985     isAAFailure = StoreOffset+int64_t(StoreSize) <= LoadOffset;
    986   else
    987     isAAFailure = LoadOffset+int64_t(LoadSize) <= StoreOffset;
    988 
    989   if (isAAFailure) {
    990 #if 0
    991     dbgs() << "STORE LOAD DEP WITH COMMON BASE:\n"
    992     << "Base       = " << *StoreBase << "\n"
    993     << "Store Ptr  = " << *WritePtr << "\n"
    994     << "Store Offs = " << StoreOffset << "\n"
    995     << "Load Ptr   = " << *LoadPtr << "\n";
    996     abort();
    997 #endif
    998     return -1;
    999   }
   1000 
   1001   // If the Load isn't completely contained within the stored bits, we don't
   1002   // have all the bits to feed it.  We could do something crazy in the future
   1003   // (issue a smaller load then merge the bits in) but this seems unlikely to be
   1004   // valuable.
   1005   if (StoreOffset > LoadOffset ||
   1006       StoreOffset+StoreSize < LoadOffset+LoadSize)
   1007     return -1;
   1008 
   1009   // Okay, we can do this transformation.  Return the number of bytes into the
   1010   // store that the load is.
   1011   return LoadOffset-StoreOffset;
   1012 }
   1013 
   1014 /// AnalyzeLoadFromClobberingStore - This function is called when we have a
   1015 /// memdep query of a load that ends up being a clobbering store.
   1016 static int AnalyzeLoadFromClobberingStore(Type *LoadTy, Value *LoadPtr,
   1017                                           StoreInst *DepSI,
   1018                                           const DataLayout &DL) {
   1019   // Cannot handle reading from store of first-class aggregate yet.
   1020   if (DepSI->getValueOperand()->getType()->isStructTy() ||
   1021       DepSI->getValueOperand()->getType()->isArrayTy())
   1022     return -1;
   1023 
   1024   Value *StorePtr = DepSI->getPointerOperand();
   1025   uint64_t StoreSize =DL.getTypeSizeInBits(DepSI->getValueOperand()->getType());
   1026   return AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr,
   1027                                         StorePtr, StoreSize, DL);
   1028 }
   1029 
   1030 /// AnalyzeLoadFromClobberingLoad - This function is called when we have a
   1031 /// memdep query of a load that ends up being clobbered by another load.  See if
   1032 /// the other load can feed into the second load.
   1033 static int AnalyzeLoadFromClobberingLoad(Type *LoadTy, Value *LoadPtr,
   1034                                          LoadInst *DepLI, const DataLayout &DL){
   1035   // Cannot handle reading from store of first-class aggregate yet.
   1036   if (DepLI->getType()->isStructTy() || DepLI->getType()->isArrayTy())
   1037     return -1;
   1038 
   1039   Value *DepPtr = DepLI->getPointerOperand();
   1040   uint64_t DepSize = DL.getTypeSizeInBits(DepLI->getType());
   1041   int R = AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr, DepPtr, DepSize, DL);
   1042   if (R != -1) return R;
   1043 
   1044   // If we have a load/load clobber an DepLI can be widened to cover this load,
   1045   // then we should widen it!
   1046   int64_t LoadOffs = 0;
   1047   const Value *LoadBase =
   1048     GetPointerBaseWithConstantOffset(LoadPtr, LoadOffs, &DL);
   1049   unsigned LoadSize = DL.getTypeStoreSize(LoadTy);
   1050 
   1051   unsigned Size = MemoryDependenceAnalysis::
   1052     getLoadLoadClobberFullWidthSize(LoadBase, LoadOffs, LoadSize, DepLI, DL);
   1053   if (Size == 0) return -1;
   1054 
   1055   return AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr, DepPtr, Size*8, DL);
   1056 }
   1057 
   1058 
   1059 
   1060 static int AnalyzeLoadFromClobberingMemInst(Type *LoadTy, Value *LoadPtr,
   1061                                             MemIntrinsic *MI,
   1062                                             const DataLayout &DL) {
   1063   // If the mem operation is a non-constant size, we can't handle it.
   1064   ConstantInt *SizeCst = dyn_cast<ConstantInt>(MI->getLength());
   1065   if (!SizeCst) return -1;
   1066   uint64_t MemSizeInBits = SizeCst->getZExtValue()*8;
   1067 
   1068   // If this is memset, we just need to see if the offset is valid in the size
   1069   // of the memset..
   1070   if (MI->getIntrinsicID() == Intrinsic::memset)
   1071     return AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr, MI->getDest(),
   1072                                           MemSizeInBits, DL);
   1073 
   1074   // If we have a memcpy/memmove, the only case we can handle is if this is a
   1075   // copy from constant memory.  In that case, we can read directly from the
   1076   // constant memory.
   1077   MemTransferInst *MTI = cast<MemTransferInst>(MI);
   1078 
   1079   Constant *Src = dyn_cast<Constant>(MTI->getSource());
   1080   if (!Src) return -1;
   1081 
   1082   GlobalVariable *GV = dyn_cast<GlobalVariable>(GetUnderlyingObject(Src, &DL));
   1083   if (!GV || !GV->isConstant()) return -1;
   1084 
   1085   // See if the access is within the bounds of the transfer.
   1086   int Offset = AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr,
   1087                                               MI->getDest(), MemSizeInBits, DL);
   1088   if (Offset == -1)
   1089     return Offset;
   1090 
   1091   unsigned AS = Src->getType()->getPointerAddressSpace();
   1092   // Otherwise, see if we can constant fold a load from the constant with the
   1093   // offset applied as appropriate.
   1094   Src = ConstantExpr::getBitCast(Src,
   1095                                  Type::getInt8PtrTy(Src->getContext(), AS));
   1096   Constant *OffsetCst =
   1097     ConstantInt::get(Type::getInt64Ty(Src->getContext()), (unsigned)Offset);
   1098   Src = ConstantExpr::getGetElementPtr(Src, OffsetCst);
   1099   Src = ConstantExpr::getBitCast(Src, PointerType::get(LoadTy, AS));
   1100   if (ConstantFoldLoadFromConstPtr(Src, &DL))
   1101     return Offset;
   1102   return -1;
   1103 }
   1104 
   1105 
   1106 /// GetStoreValueForLoad - This function is called when we have a
   1107 /// memdep query of a load that ends up being a clobbering store.  This means
   1108 /// that the store provides bits used by the load but we the pointers don't
   1109 /// mustalias.  Check this case to see if there is anything more we can do
   1110 /// before we give up.
   1111 static Value *GetStoreValueForLoad(Value *SrcVal, unsigned Offset,
   1112                                    Type *LoadTy,
   1113                                    Instruction *InsertPt, const DataLayout &DL){
   1114   LLVMContext &Ctx = SrcVal->getType()->getContext();
   1115 
   1116   uint64_t StoreSize = (DL.getTypeSizeInBits(SrcVal->getType()) + 7) / 8;
   1117   uint64_t LoadSize = (DL.getTypeSizeInBits(LoadTy) + 7) / 8;
   1118 
   1119   IRBuilder<> Builder(InsertPt->getParent(), InsertPt);
   1120 
   1121   // Compute which bits of the stored value are being used by the load.  Convert
   1122   // to an integer type to start with.
   1123   if (SrcVal->getType()->getScalarType()->isPointerTy())
   1124     SrcVal = Builder.CreatePtrToInt(SrcVal,
   1125         DL.getIntPtrType(SrcVal->getType()));
   1126   if (!SrcVal->getType()->isIntegerTy())
   1127     SrcVal = Builder.CreateBitCast(SrcVal, IntegerType::get(Ctx, StoreSize*8));
   1128 
   1129   // Shift the bits to the least significant depending on endianness.
   1130   unsigned ShiftAmt;
   1131   if (DL.isLittleEndian())
   1132     ShiftAmt = Offset*8;
   1133   else
   1134     ShiftAmt = (StoreSize-LoadSize-Offset)*8;
   1135 
   1136   if (ShiftAmt)
   1137     SrcVal = Builder.CreateLShr(SrcVal, ShiftAmt);
   1138 
   1139   if (LoadSize != StoreSize)
   1140     SrcVal = Builder.CreateTrunc(SrcVal, IntegerType::get(Ctx, LoadSize*8));
   1141 
   1142   return CoerceAvailableValueToLoadType(SrcVal, LoadTy, InsertPt, DL);
   1143 }
   1144 
   1145 /// GetLoadValueForLoad - This function is called when we have a
   1146 /// memdep query of a load that ends up being a clobbering load.  This means
   1147 /// that the load *may* provide bits used by the load but we can't be sure
   1148 /// because the pointers don't mustalias.  Check this case to see if there is
   1149 /// anything more we can do before we give up.
   1150 static Value *GetLoadValueForLoad(LoadInst *SrcVal, unsigned Offset,
   1151                                   Type *LoadTy, Instruction *InsertPt,
   1152                                   GVN &gvn) {
   1153   const DataLayout &DL = *gvn.getDataLayout();
   1154   // If Offset+LoadTy exceeds the size of SrcVal, then we must be wanting to
   1155   // widen SrcVal out to a larger load.
   1156   unsigned SrcValSize = DL.getTypeStoreSize(SrcVal->getType());
   1157   unsigned LoadSize = DL.getTypeStoreSize(LoadTy);
   1158   if (Offset+LoadSize > SrcValSize) {
   1159     assert(SrcVal->isSimple() && "Cannot widen volatile/atomic load!");
   1160     assert(SrcVal->getType()->isIntegerTy() && "Can't widen non-integer load");
   1161     // If we have a load/load clobber an DepLI can be widened to cover this
   1162     // load, then we should widen it to the next power of 2 size big enough!
   1163     unsigned NewLoadSize = Offset+LoadSize;
   1164     if (!isPowerOf2_32(NewLoadSize))
   1165       NewLoadSize = NextPowerOf2(NewLoadSize);
   1166 
   1167     Value *PtrVal = SrcVal->getPointerOperand();
   1168 
   1169     // Insert the new load after the old load.  This ensures that subsequent
   1170     // memdep queries will find the new load.  We can't easily remove the old
   1171     // load completely because it is already in the value numbering table.
   1172     IRBuilder<> Builder(SrcVal->getParent(), ++BasicBlock::iterator(SrcVal));
   1173     Type *DestPTy =
   1174       IntegerType::get(LoadTy->getContext(), NewLoadSize*8);
   1175     DestPTy = PointerType::get(DestPTy,
   1176                                PtrVal->getType()->getPointerAddressSpace());
   1177     Builder.SetCurrentDebugLocation(SrcVal->getDebugLoc());
   1178     PtrVal = Builder.CreateBitCast(PtrVal, DestPTy);
   1179     LoadInst *NewLoad = Builder.CreateLoad(PtrVal);
   1180     NewLoad->takeName(SrcVal);
   1181     NewLoad->setAlignment(SrcVal->getAlignment());
   1182 
   1183     DEBUG(dbgs() << "GVN WIDENED LOAD: " << *SrcVal << "\n");
   1184     DEBUG(dbgs() << "TO: " << *NewLoad << "\n");
   1185 
   1186     // Replace uses of the original load with the wider load.  On a big endian
   1187     // system, we need to shift down to get the relevant bits.
   1188     Value *RV = NewLoad;
   1189     if (DL.isBigEndian())
   1190       RV = Builder.CreateLShr(RV,
   1191                     NewLoadSize*8-SrcVal->getType()->getPrimitiveSizeInBits());
   1192     RV = Builder.CreateTrunc(RV, SrcVal->getType());
   1193     SrcVal->replaceAllUsesWith(RV);
   1194 
   1195     // We would like to use gvn.markInstructionForDeletion here, but we can't
   1196     // because the load is already memoized into the leader map table that GVN
   1197     // tracks.  It is potentially possible to remove the load from the table,
   1198     // but then there all of the operations based on it would need to be
   1199     // rehashed.  Just leave the dead load around.
   1200     gvn.getMemDep().removeInstruction(SrcVal);
   1201     SrcVal = NewLoad;
   1202   }
   1203 
   1204   return GetStoreValueForLoad(SrcVal, Offset, LoadTy, InsertPt, DL);
   1205 }
   1206 
   1207 
   1208 /// GetMemInstValueForLoad - This function is called when we have a
   1209 /// memdep query of a load that ends up being a clobbering mem intrinsic.
   1210 static Value *GetMemInstValueForLoad(MemIntrinsic *SrcInst, unsigned Offset,
   1211                                      Type *LoadTy, Instruction *InsertPt,
   1212                                      const DataLayout &DL){
   1213   LLVMContext &Ctx = LoadTy->getContext();
   1214   uint64_t LoadSize = DL.getTypeSizeInBits(LoadTy)/8;
   1215 
   1216   IRBuilder<> Builder(InsertPt->getParent(), InsertPt);
   1217 
   1218   // We know that this method is only called when the mem transfer fully
   1219   // provides the bits for the load.
   1220   if (MemSetInst *MSI = dyn_cast<MemSetInst>(SrcInst)) {
   1221     // memset(P, 'x', 1234) -> splat('x'), even if x is a variable, and
   1222     // independently of what the offset is.
   1223     Value *Val = MSI->getValue();
   1224     if (LoadSize != 1)
   1225       Val = Builder.CreateZExt(Val, IntegerType::get(Ctx, LoadSize*8));
   1226 
   1227     Value *OneElt = Val;
   1228 
   1229     // Splat the value out to the right number of bits.
   1230     for (unsigned NumBytesSet = 1; NumBytesSet != LoadSize; ) {
   1231       // If we can double the number of bytes set, do it.
   1232       if (NumBytesSet*2 <= LoadSize) {
   1233         Value *ShVal = Builder.CreateShl(Val, NumBytesSet*8);
   1234         Val = Builder.CreateOr(Val, ShVal);
   1235         NumBytesSet <<= 1;
   1236         continue;
   1237       }
   1238 
   1239       // Otherwise insert one byte at a time.
   1240       Value *ShVal = Builder.CreateShl(Val, 1*8);
   1241       Val = Builder.CreateOr(OneElt, ShVal);
   1242       ++NumBytesSet;
   1243     }
   1244 
   1245     return CoerceAvailableValueToLoadType(Val, LoadTy, InsertPt, DL);
   1246   }
   1247 
   1248   // Otherwise, this is a memcpy/memmove from a constant global.
   1249   MemTransferInst *MTI = cast<MemTransferInst>(SrcInst);
   1250   Constant *Src = cast<Constant>(MTI->getSource());
   1251   unsigned AS = Src->getType()->getPointerAddressSpace();
   1252 
   1253   // Otherwise, see if we can constant fold a load from the constant with the
   1254   // offset applied as appropriate.
   1255   Src = ConstantExpr::getBitCast(Src,
   1256                                  Type::getInt8PtrTy(Src->getContext(), AS));
   1257   Constant *OffsetCst =
   1258     ConstantInt::get(Type::getInt64Ty(Src->getContext()), (unsigned)Offset);
   1259   Src = ConstantExpr::getGetElementPtr(Src, OffsetCst);
   1260   Src = ConstantExpr::getBitCast(Src, PointerType::get(LoadTy, AS));
   1261   return ConstantFoldLoadFromConstPtr(Src, &DL);
   1262 }
   1263 
   1264 
   1265 /// ConstructSSAForLoadSet - Given a set of loads specified by ValuesPerBlock,
   1266 /// construct SSA form, allowing us to eliminate LI.  This returns the value
   1267 /// that should be used at LI's definition site.
   1268 static Value *ConstructSSAForLoadSet(LoadInst *LI,
   1269                          SmallVectorImpl<AvailableValueInBlock> &ValuesPerBlock,
   1270                                      GVN &gvn) {
   1271   // Check for the fully redundant, dominating load case.  In this case, we can
   1272   // just use the dominating value directly.
   1273   if (ValuesPerBlock.size() == 1 &&
   1274       gvn.getDominatorTree().properlyDominates(ValuesPerBlock[0].BB,
   1275                                                LI->getParent())) {
   1276     assert(!ValuesPerBlock[0].isUndefValue() && "Dead BB dominate this block");
   1277     return ValuesPerBlock[0].MaterializeAdjustedValue(LI->getType(), gvn);
   1278   }
   1279 
   1280   // Otherwise, we have to construct SSA form.
   1281   SmallVector<PHINode*, 8> NewPHIs;
   1282   SSAUpdater SSAUpdate(&NewPHIs);
   1283   SSAUpdate.Initialize(LI->getType(), LI->getName());
   1284 
   1285   Type *LoadTy = LI->getType();
   1286 
   1287   for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i) {
   1288     const AvailableValueInBlock &AV = ValuesPerBlock[i];
   1289     BasicBlock *BB = AV.BB;
   1290 
   1291     if (SSAUpdate.HasValueForBlock(BB))
   1292       continue;
   1293 
   1294     SSAUpdate.AddAvailableValue(BB, AV.MaterializeAdjustedValue(LoadTy, gvn));
   1295   }
   1296 
   1297   // Perform PHI construction.
   1298   Value *V = SSAUpdate.GetValueInMiddleOfBlock(LI->getParent());
   1299 
   1300   // If new PHI nodes were created, notify alias analysis.
   1301   if (V->getType()->getScalarType()->isPointerTy()) {
   1302     AliasAnalysis *AA = gvn.getAliasAnalysis();
   1303 
   1304     for (unsigned i = 0, e = NewPHIs.size(); i != e; ++i)
   1305       AA->copyValue(LI, NewPHIs[i]);
   1306 
   1307     // Now that we've copied information to the new PHIs, scan through
   1308     // them again and inform alias analysis that we've added potentially
   1309     // escaping uses to any values that are operands to these PHIs.
   1310     for (unsigned i = 0, e = NewPHIs.size(); i != e; ++i) {
   1311       PHINode *P = NewPHIs[i];
   1312       for (unsigned ii = 0, ee = P->getNumIncomingValues(); ii != ee; ++ii) {
   1313         unsigned jj = PHINode::getOperandNumForIncomingValue(ii);
   1314         AA->addEscapingUse(P->getOperandUse(jj));
   1315       }
   1316     }
   1317   }
   1318 
   1319   return V;
   1320 }
   1321 
   1322 Value *AvailableValueInBlock::MaterializeAdjustedValue(Type *LoadTy, GVN &gvn) const {
   1323   Value *Res;
   1324   if (isSimpleValue()) {
   1325     Res = getSimpleValue();
   1326     if (Res->getType() != LoadTy) {
   1327       const DataLayout *DL = gvn.getDataLayout();
   1328       assert(DL && "Need target data to handle type mismatch case");
   1329       Res = GetStoreValueForLoad(Res, Offset, LoadTy, BB->getTerminator(),
   1330                                  *DL);
   1331 
   1332       DEBUG(dbgs() << "GVN COERCED NONLOCAL VAL:\nOffset: " << Offset << "  "
   1333                    << *getSimpleValue() << '\n'
   1334                    << *Res << '\n' << "\n\n\n");
   1335     }
   1336   } else if (isCoercedLoadValue()) {
   1337     LoadInst *Load = getCoercedLoadValue();
   1338     if (Load->getType() == LoadTy && Offset == 0) {
   1339       Res = Load;
   1340     } else {
   1341       Res = GetLoadValueForLoad(Load, Offset, LoadTy, BB->getTerminator(),
   1342                                 gvn);
   1343 
   1344       DEBUG(dbgs() << "GVN COERCED NONLOCAL LOAD:\nOffset: " << Offset << "  "
   1345                    << *getCoercedLoadValue() << '\n'
   1346                    << *Res << '\n' << "\n\n\n");
   1347     }
   1348   } else if (isMemIntrinValue()) {
   1349     const DataLayout *DL = gvn.getDataLayout();
   1350     assert(DL && "Need target data to handle type mismatch case");
   1351     Res = GetMemInstValueForLoad(getMemIntrinValue(), Offset,
   1352                                  LoadTy, BB->getTerminator(), *DL);
   1353     DEBUG(dbgs() << "GVN COERCED NONLOCAL MEM INTRIN:\nOffset: " << Offset
   1354                  << "  " << *getMemIntrinValue() << '\n'
   1355                  << *Res << '\n' << "\n\n\n");
   1356   } else {
   1357     assert(isUndefValue() && "Should be UndefVal");
   1358     DEBUG(dbgs() << "GVN COERCED NONLOCAL Undef:\n";);
   1359     return UndefValue::get(LoadTy);
   1360   }
   1361   return Res;
   1362 }
   1363 
   1364 static bool isLifetimeStart(const Instruction *Inst) {
   1365   if (const IntrinsicInst* II = dyn_cast<IntrinsicInst>(Inst))
   1366     return II->getIntrinsicID() == Intrinsic::lifetime_start;
   1367   return false;
   1368 }
   1369 
   1370 void GVN::AnalyzeLoadAvailability(LoadInst *LI, LoadDepVect &Deps,
   1371                                   AvailValInBlkVect &ValuesPerBlock,
   1372                                   UnavailBlkVect &UnavailableBlocks) {
   1373 
   1374   // Filter out useless results (non-locals, etc).  Keep track of the blocks
   1375   // where we have a value available in repl, also keep track of whether we see
   1376   // dependencies that produce an unknown value for the load (such as a call
   1377   // that could potentially clobber the load).
   1378   unsigned NumDeps = Deps.size();
   1379   for (unsigned i = 0, e = NumDeps; i != e; ++i) {
   1380     BasicBlock *DepBB = Deps[i].getBB();
   1381     MemDepResult DepInfo = Deps[i].getResult();
   1382 
   1383     if (DeadBlocks.count(DepBB)) {
   1384       // Dead dependent mem-op disguise as a load evaluating the same value
   1385       // as the load in question.
   1386       ValuesPerBlock.push_back(AvailableValueInBlock::getUndef(DepBB));
   1387       continue;
   1388     }
   1389 
   1390     if (!DepInfo.isDef() && !DepInfo.isClobber()) {
   1391       UnavailableBlocks.push_back(DepBB);
   1392       continue;
   1393     }
   1394 
   1395     if (DepInfo.isClobber()) {
   1396       // The address being loaded in this non-local block may not be the same as
   1397       // the pointer operand of the load if PHI translation occurs.  Make sure
   1398       // to consider the right address.
   1399       Value *Address = Deps[i].getAddress();
   1400 
   1401       // If the dependence is to a store that writes to a superset of the bits
   1402       // read by the load, we can extract the bits we need for the load from the
   1403       // stored value.
   1404       if (StoreInst *DepSI = dyn_cast<StoreInst>(DepInfo.getInst())) {
   1405         if (DL && Address) {
   1406           int Offset = AnalyzeLoadFromClobberingStore(LI->getType(), Address,
   1407                                                       DepSI, *DL);
   1408           if (Offset != -1) {
   1409             ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
   1410                                                        DepSI->getValueOperand(),
   1411                                                                 Offset));
   1412             continue;
   1413           }
   1414         }
   1415       }
   1416 
   1417       // Check to see if we have something like this:
   1418       //    load i32* P
   1419       //    load i8* (P+1)
   1420       // if we have this, replace the later with an extraction from the former.
   1421       if (LoadInst *DepLI = dyn_cast<LoadInst>(DepInfo.getInst())) {
   1422         // If this is a clobber and L is the first instruction in its block, then
   1423         // we have the first instruction in the entry block.
   1424         if (DepLI != LI && Address && DL) {
   1425           int Offset = AnalyzeLoadFromClobberingLoad(LI->getType(), Address,
   1426                                                      DepLI, *DL);
   1427 
   1428           if (Offset != -1) {
   1429             ValuesPerBlock.push_back(AvailableValueInBlock::getLoad(DepBB,DepLI,
   1430                                                                     Offset));
   1431             continue;
   1432           }
   1433         }
   1434       }
   1435 
   1436       // If the clobbering value is a memset/memcpy/memmove, see if we can
   1437       // forward a value on from it.
   1438       if (MemIntrinsic *DepMI = dyn_cast<MemIntrinsic>(DepInfo.getInst())) {
   1439         if (DL && Address) {
   1440           int Offset = AnalyzeLoadFromClobberingMemInst(LI->getType(), Address,
   1441                                                         DepMI, *DL);
   1442           if (Offset != -1) {
   1443             ValuesPerBlock.push_back(AvailableValueInBlock::getMI(DepBB, DepMI,
   1444                                                                   Offset));
   1445             continue;
   1446           }
   1447         }
   1448       }
   1449 
   1450       UnavailableBlocks.push_back(DepBB);
   1451       continue;
   1452     }
   1453 
   1454     // DepInfo.isDef() here
   1455 
   1456     Instruction *DepInst = DepInfo.getInst();
   1457 
   1458     // Loading the allocation -> undef.
   1459     if (isa<AllocaInst>(DepInst) || isMallocLikeFn(DepInst, TLI) ||
   1460         // Loading immediately after lifetime begin -> undef.
   1461         isLifetimeStart(DepInst)) {
   1462       ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
   1463                                              UndefValue::get(LI->getType())));
   1464       continue;
   1465     }
   1466 
   1467     // Loading from calloc (which zero initializes memory) -> zero
   1468     if (isCallocLikeFn(DepInst, TLI)) {
   1469       ValuesPerBlock.push_back(AvailableValueInBlock::get(
   1470           DepBB, Constant::getNullValue(LI->getType())));
   1471       continue;
   1472     }
   1473 
   1474     if (StoreInst *S = dyn_cast<StoreInst>(DepInst)) {
   1475       // Reject loads and stores that are to the same address but are of
   1476       // different types if we have to.
   1477       if (S->getValueOperand()->getType() != LI->getType()) {
   1478         // If the stored value is larger or equal to the loaded value, we can
   1479         // reuse it.
   1480         if (!DL || !CanCoerceMustAliasedValueToLoad(S->getValueOperand(),
   1481                                                     LI->getType(), *DL)) {
   1482           UnavailableBlocks.push_back(DepBB);
   1483           continue;
   1484         }
   1485       }
   1486 
   1487       ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
   1488                                                          S->getValueOperand()));
   1489       continue;
   1490     }
   1491 
   1492     if (LoadInst *LD = dyn_cast<LoadInst>(DepInst)) {
   1493       // If the types mismatch and we can't handle it, reject reuse of the load.
   1494       if (LD->getType() != LI->getType()) {
   1495         // If the stored value is larger or equal to the loaded value, we can
   1496         // reuse it.
   1497         if (!DL || !CanCoerceMustAliasedValueToLoad(LD, LI->getType(),*DL)) {
   1498           UnavailableBlocks.push_back(DepBB);
   1499           continue;
   1500         }
   1501       }
   1502       ValuesPerBlock.push_back(AvailableValueInBlock::getLoad(DepBB, LD));
   1503       continue;
   1504     }
   1505 
   1506     UnavailableBlocks.push_back(DepBB);
   1507   }
   1508 }
   1509 
   1510 bool GVN::PerformLoadPRE(LoadInst *LI, AvailValInBlkVect &ValuesPerBlock,
   1511                          UnavailBlkVect &UnavailableBlocks) {
   1512   // Okay, we have *some* definitions of the value.  This means that the value
   1513   // is available in some of our (transitive) predecessors.  Lets think about
   1514   // doing PRE of this load.  This will involve inserting a new load into the
   1515   // predecessor when it's not available.  We could do this in general, but
   1516   // prefer to not increase code size.  As such, we only do this when we know
   1517   // that we only have to insert *one* load (which means we're basically moving
   1518   // the load, not inserting a new one).
   1519 
   1520   SmallPtrSet<BasicBlock *, 4> Blockers;
   1521   for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
   1522     Blockers.insert(UnavailableBlocks[i]);
   1523 
   1524   // Let's find the first basic block with more than one predecessor.  Walk
   1525   // backwards through predecessors if needed.
   1526   BasicBlock *LoadBB = LI->getParent();
   1527   BasicBlock *TmpBB = LoadBB;
   1528 
   1529   while (TmpBB->getSinglePredecessor()) {
   1530     TmpBB = TmpBB->getSinglePredecessor();
   1531     if (TmpBB == LoadBB) // Infinite (unreachable) loop.
   1532       return false;
   1533     if (Blockers.count(TmpBB))
   1534       return false;
   1535 
   1536     // If any of these blocks has more than one successor (i.e. if the edge we
   1537     // just traversed was critical), then there are other paths through this
   1538     // block along which the load may not be anticipated.  Hoisting the load
   1539     // above this block would be adding the load to execution paths along
   1540     // which it was not previously executed.
   1541     if (TmpBB->getTerminator()->getNumSuccessors() != 1)
   1542       return false;
   1543   }
   1544 
   1545   assert(TmpBB);
   1546   LoadBB = TmpBB;
   1547 
   1548   // Check to see how many predecessors have the loaded value fully
   1549   // available.
   1550   MapVector<BasicBlock *, Value *> PredLoads;
   1551   DenseMap<BasicBlock*, char> FullyAvailableBlocks;
   1552   for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i)
   1553     FullyAvailableBlocks[ValuesPerBlock[i].BB] = true;
   1554   for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
   1555     FullyAvailableBlocks[UnavailableBlocks[i]] = false;
   1556 
   1557   SmallVector<BasicBlock *, 4> CriticalEdgePred;
   1558   for (pred_iterator PI = pred_begin(LoadBB), E = pred_end(LoadBB);
   1559        PI != E; ++PI) {
   1560     BasicBlock *Pred = *PI;
   1561     if (IsValueFullyAvailableInBlock(Pred, FullyAvailableBlocks, 0)) {
   1562       continue;
   1563     }
   1564 
   1565     if (Pred->getTerminator()->getNumSuccessors() != 1) {
   1566       if (isa<IndirectBrInst>(Pred->getTerminator())) {
   1567         DEBUG(dbgs() << "COULD NOT PRE LOAD BECAUSE OF INDBR CRITICAL EDGE '"
   1568               << Pred->getName() << "': " << *LI << '\n');
   1569         return false;
   1570       }
   1571 
   1572       if (LoadBB->isLandingPad()) {
   1573         DEBUG(dbgs()
   1574               << "COULD NOT PRE LOAD BECAUSE OF LANDING PAD CRITICAL EDGE '"
   1575               << Pred->getName() << "': " << *LI << '\n');
   1576         return false;
   1577       }
   1578 
   1579       CriticalEdgePred.push_back(Pred);
   1580     } else {
   1581       // Only add the predecessors that will not be split for now.
   1582       PredLoads[Pred] = nullptr;
   1583     }
   1584   }
   1585 
   1586   // Decide whether PRE is profitable for this load.
   1587   unsigned NumUnavailablePreds = PredLoads.size() + CriticalEdgePred.size();
   1588   assert(NumUnavailablePreds != 0 &&
   1589          "Fully available value should already be eliminated!");
   1590 
   1591   // If this load is unavailable in multiple predecessors, reject it.
   1592   // FIXME: If we could restructure the CFG, we could make a common pred with
   1593   // all the preds that don't have an available LI and insert a new load into
   1594   // that one block.
   1595   if (NumUnavailablePreds != 1)
   1596       return false;
   1597 
   1598   // Split critical edges, and update the unavailable predecessors accordingly.
   1599   for (BasicBlock *OrigPred : CriticalEdgePred) {
   1600     BasicBlock *NewPred = splitCriticalEdges(OrigPred, LoadBB);
   1601     assert(!PredLoads.count(OrigPred) && "Split edges shouldn't be in map!");
   1602     PredLoads[NewPred] = nullptr;
   1603     DEBUG(dbgs() << "Split critical edge " << OrigPred->getName() << "->"
   1604                  << LoadBB->getName() << '\n');
   1605   }
   1606 
   1607   // Check if the load can safely be moved to all the unavailable predecessors.
   1608   bool CanDoPRE = true;
   1609   SmallVector<Instruction*, 8> NewInsts;
   1610   for (auto &PredLoad : PredLoads) {
   1611     BasicBlock *UnavailablePred = PredLoad.first;
   1612 
   1613     // Do PHI translation to get its value in the predecessor if necessary.  The
   1614     // returned pointer (if non-null) is guaranteed to dominate UnavailablePred.
   1615 
   1616     // If all preds have a single successor, then we know it is safe to insert
   1617     // the load on the pred (?!?), so we can insert code to materialize the
   1618     // pointer if it is not available.
   1619     PHITransAddr Address(LI->getPointerOperand(), DL);
   1620     Value *LoadPtr = nullptr;
   1621     LoadPtr = Address.PHITranslateWithInsertion(LoadBB, UnavailablePred,
   1622                                                 *DT, NewInsts);
   1623 
   1624     // If we couldn't find or insert a computation of this phi translated value,
   1625     // we fail PRE.
   1626     if (!LoadPtr) {
   1627       DEBUG(dbgs() << "COULDN'T INSERT PHI TRANSLATED VALUE OF: "
   1628             << *LI->getPointerOperand() << "\n");
   1629       CanDoPRE = false;
   1630       break;
   1631     }
   1632 
   1633     PredLoad.second = LoadPtr;
   1634   }
   1635 
   1636   if (!CanDoPRE) {
   1637     while (!NewInsts.empty()) {
   1638       Instruction *I = NewInsts.pop_back_val();
   1639       if (MD) MD->removeInstruction(I);
   1640       I->eraseFromParent();
   1641     }
   1642     // HINT: Don't revert the edge-splitting as following transformation may
   1643     // also need to split these critical edges.
   1644     return !CriticalEdgePred.empty();
   1645   }
   1646 
   1647   // Okay, we can eliminate this load by inserting a reload in the predecessor
   1648   // and using PHI construction to get the value in the other predecessors, do
   1649   // it.
   1650   DEBUG(dbgs() << "GVN REMOVING PRE LOAD: " << *LI << '\n');
   1651   DEBUG(if (!NewInsts.empty())
   1652           dbgs() << "INSERTED " << NewInsts.size() << " INSTS: "
   1653                  << *NewInsts.back() << '\n');
   1654 
   1655   // Assign value numbers to the new instructions.
   1656   for (unsigned i = 0, e = NewInsts.size(); i != e; ++i) {
   1657     // FIXME: We really _ought_ to insert these value numbers into their
   1658     // parent's availability map.  However, in doing so, we risk getting into
   1659     // ordering issues.  If a block hasn't been processed yet, we would be
   1660     // marking a value as AVAIL-IN, which isn't what we intend.
   1661     VN.lookup_or_add(NewInsts[i]);
   1662   }
   1663 
   1664   for (const auto &PredLoad : PredLoads) {
   1665     BasicBlock *UnavailablePred = PredLoad.first;
   1666     Value *LoadPtr = PredLoad.second;
   1667 
   1668     Instruction *NewLoad = new LoadInst(LoadPtr, LI->getName()+".pre", false,
   1669                                         LI->getAlignment(),
   1670                                         UnavailablePred->getTerminator());
   1671 
   1672     // Transfer the old load's TBAA tag to the new load.
   1673     if (MDNode *Tag = LI->getMetadata(LLVMContext::MD_tbaa))
   1674       NewLoad->setMetadata(LLVMContext::MD_tbaa, Tag);
   1675 
   1676     // Transfer DebugLoc.
   1677     NewLoad->setDebugLoc(LI->getDebugLoc());
   1678 
   1679     // Add the newly created load.
   1680     ValuesPerBlock.push_back(AvailableValueInBlock::get(UnavailablePred,
   1681                                                         NewLoad));
   1682     MD->invalidateCachedPointerInfo(LoadPtr);
   1683     DEBUG(dbgs() << "GVN INSERTED " << *NewLoad << '\n');
   1684   }
   1685 
   1686   // Perform PHI construction.
   1687   Value *V = ConstructSSAForLoadSet(LI, ValuesPerBlock, *this);
   1688   LI->replaceAllUsesWith(V);
   1689   if (isa<PHINode>(V))
   1690     V->takeName(LI);
   1691   if (V->getType()->getScalarType()->isPointerTy())
   1692     MD->invalidateCachedPointerInfo(V);
   1693   markInstructionForDeletion(LI);
   1694   ++NumPRELoad;
   1695   return true;
   1696 }
   1697 
   1698 /// processNonLocalLoad - Attempt to eliminate a load whose dependencies are
   1699 /// non-local by performing PHI construction.
   1700 bool GVN::processNonLocalLoad(LoadInst *LI) {
   1701   // Step 1: Find the non-local dependencies of the load.
   1702   LoadDepVect Deps;
   1703   AliasAnalysis::Location Loc = VN.getAliasAnalysis()->getLocation(LI);
   1704   MD->getNonLocalPointerDependency(Loc, true, LI->getParent(), Deps);
   1705 
   1706   // If we had to process more than one hundred blocks to find the
   1707   // dependencies, this load isn't worth worrying about.  Optimizing
   1708   // it will be too expensive.
   1709   unsigned NumDeps = Deps.size();
   1710   if (NumDeps > 100)
   1711     return false;
   1712 
   1713   // If we had a phi translation failure, we'll have a single entry which is a
   1714   // clobber in the current block.  Reject this early.
   1715   if (NumDeps == 1 &&
   1716       !Deps[0].getResult().isDef() && !Deps[0].getResult().isClobber()) {
   1717     DEBUG(
   1718       dbgs() << "GVN: non-local load ";
   1719       LI->printAsOperand(dbgs());
   1720       dbgs() << " has unknown dependencies\n";
   1721     );
   1722     return false;
   1723   }
   1724 
   1725   // Step 2: Analyze the availability of the load
   1726   AvailValInBlkVect ValuesPerBlock;
   1727   UnavailBlkVect UnavailableBlocks;
   1728   AnalyzeLoadAvailability(LI, Deps, ValuesPerBlock, UnavailableBlocks);
   1729 
   1730   // If we have no predecessors that produce a known value for this load, exit
   1731   // early.
   1732   if (ValuesPerBlock.empty())
   1733     return false;
   1734 
   1735   // Step 3: Eliminate fully redundancy.
   1736   //
   1737   // If all of the instructions we depend on produce a known value for this
   1738   // load, then it is fully redundant and we can use PHI insertion to compute
   1739   // its value.  Insert PHIs and remove the fully redundant value now.
   1740   if (UnavailableBlocks.empty()) {
   1741     DEBUG(dbgs() << "GVN REMOVING NONLOCAL LOAD: " << *LI << '\n');
   1742 
   1743     // Perform PHI construction.
   1744     Value *V = ConstructSSAForLoadSet(LI, ValuesPerBlock, *this);
   1745     LI->replaceAllUsesWith(V);
   1746 
   1747     if (isa<PHINode>(V))
   1748       V->takeName(LI);
   1749     if (V->getType()->getScalarType()->isPointerTy())
   1750       MD->invalidateCachedPointerInfo(V);
   1751     markInstructionForDeletion(LI);
   1752     ++NumGVNLoad;
   1753     return true;
   1754   }
   1755 
   1756   // Step 4: Eliminate partial redundancy.
   1757   if (!EnablePRE || !EnableLoadPRE)
   1758     return false;
   1759 
   1760   return PerformLoadPRE(LI, ValuesPerBlock, UnavailableBlocks);
   1761 }
   1762 
   1763 
   1764 static void patchReplacementInstruction(Instruction *I, Value *Repl) {
   1765   // Patch the replacement so that it is not more restrictive than the value
   1766   // being replaced.
   1767   BinaryOperator *Op = dyn_cast<BinaryOperator>(I);
   1768   BinaryOperator *ReplOp = dyn_cast<BinaryOperator>(Repl);
   1769   if (Op && ReplOp && isa<OverflowingBinaryOperator>(Op) &&
   1770       isa<OverflowingBinaryOperator>(ReplOp)) {
   1771     if (ReplOp->hasNoSignedWrap() && !Op->hasNoSignedWrap())
   1772       ReplOp->setHasNoSignedWrap(false);
   1773     if (ReplOp->hasNoUnsignedWrap() && !Op->hasNoUnsignedWrap())
   1774       ReplOp->setHasNoUnsignedWrap(false);
   1775   }
   1776   if (Instruction *ReplInst = dyn_cast<Instruction>(Repl)) {
   1777     SmallVector<std::pair<unsigned, MDNode*>, 4> Metadata;
   1778     ReplInst->getAllMetadataOtherThanDebugLoc(Metadata);
   1779     for (int i = 0, n = Metadata.size(); i < n; ++i) {
   1780       unsigned Kind = Metadata[i].first;
   1781       MDNode *IMD = I->getMetadata(Kind);
   1782       MDNode *ReplMD = Metadata[i].second;
   1783       switch(Kind) {
   1784       default:
   1785         ReplInst->setMetadata(Kind, nullptr); // Remove unknown metadata
   1786         break;
   1787       case LLVMContext::MD_dbg:
   1788         llvm_unreachable("getAllMetadataOtherThanDebugLoc returned a MD_dbg");
   1789       case LLVMContext::MD_tbaa:
   1790         ReplInst->setMetadata(Kind, MDNode::getMostGenericTBAA(IMD, ReplMD));
   1791         break;
   1792       case LLVMContext::MD_range:
   1793         ReplInst->setMetadata(Kind, MDNode::getMostGenericRange(IMD, ReplMD));
   1794         break;
   1795       case LLVMContext::MD_prof:
   1796         llvm_unreachable("MD_prof in a non-terminator instruction");
   1797         break;
   1798       case LLVMContext::MD_fpmath:
   1799         ReplInst->setMetadata(Kind, MDNode::getMostGenericFPMath(IMD, ReplMD));
   1800         break;
   1801       case LLVMContext::MD_invariant_load:
   1802         // Only set the !invariant.load if it is present in both instructions.
   1803         ReplInst->setMetadata(Kind, IMD);
   1804         break;
   1805       }
   1806     }
   1807   }
   1808 }
   1809 
   1810 static void patchAndReplaceAllUsesWith(Instruction *I, Value *Repl) {
   1811   patchReplacementInstruction(I, Repl);
   1812   I->replaceAllUsesWith(Repl);
   1813 }
   1814 
   1815 /// processLoad - Attempt to eliminate a load, first by eliminating it
   1816 /// locally, and then attempting non-local elimination if that fails.
   1817 bool GVN::processLoad(LoadInst *L) {
   1818   if (!MD)
   1819     return false;
   1820 
   1821   if (!L->isSimple())
   1822     return false;
   1823 
   1824   if (L->use_empty()) {
   1825     markInstructionForDeletion(L);
   1826     return true;
   1827   }
   1828 
   1829   // ... to a pointer that has been loaded from before...
   1830   MemDepResult Dep = MD->getDependency(L);
   1831 
   1832   // If we have a clobber and target data is around, see if this is a clobber
   1833   // that we can fix up through code synthesis.
   1834   if (Dep.isClobber() && DL) {
   1835     // Check to see if we have something like this:
   1836     //   store i32 123, i32* %P
   1837     //   %A = bitcast i32* %P to i8*
   1838     //   %B = gep i8* %A, i32 1
   1839     //   %C = load i8* %B
   1840     //
   1841     // We could do that by recognizing if the clobber instructions are obviously
   1842     // a common base + constant offset, and if the previous store (or memset)
   1843     // completely covers this load.  This sort of thing can happen in bitfield
   1844     // access code.
   1845     Value *AvailVal = nullptr;
   1846     if (StoreInst *DepSI = dyn_cast<StoreInst>(Dep.getInst())) {
   1847       int Offset = AnalyzeLoadFromClobberingStore(L->getType(),
   1848                                                   L->getPointerOperand(),
   1849                                                   DepSI, *DL);
   1850       if (Offset != -1)
   1851         AvailVal = GetStoreValueForLoad(DepSI->getValueOperand(), Offset,
   1852                                         L->getType(), L, *DL);
   1853     }
   1854 
   1855     // Check to see if we have something like this:
   1856     //    load i32* P
   1857     //    load i8* (P+1)
   1858     // if we have this, replace the later with an extraction from the former.
   1859     if (LoadInst *DepLI = dyn_cast<LoadInst>(Dep.getInst())) {
   1860       // If this is a clobber and L is the first instruction in its block, then
   1861       // we have the first instruction in the entry block.
   1862       if (DepLI == L)
   1863         return false;
   1864 
   1865       int Offset = AnalyzeLoadFromClobberingLoad(L->getType(),
   1866                                                  L->getPointerOperand(),
   1867                                                  DepLI, *DL);
   1868       if (Offset != -1)
   1869         AvailVal = GetLoadValueForLoad(DepLI, Offset, L->getType(), L, *this);
   1870     }
   1871 
   1872     // If the clobbering value is a memset/memcpy/memmove, see if we can forward
   1873     // a value on from it.
   1874     if (MemIntrinsic *DepMI = dyn_cast<MemIntrinsic>(Dep.getInst())) {
   1875       int Offset = AnalyzeLoadFromClobberingMemInst(L->getType(),
   1876                                                     L->getPointerOperand(),
   1877                                                     DepMI, *DL);
   1878       if (Offset != -1)
   1879         AvailVal = GetMemInstValueForLoad(DepMI, Offset, L->getType(), L, *DL);
   1880     }
   1881 
   1882     if (AvailVal) {
   1883       DEBUG(dbgs() << "GVN COERCED INST:\n" << *Dep.getInst() << '\n'
   1884             << *AvailVal << '\n' << *L << "\n\n\n");
   1885 
   1886       // Replace the load!
   1887       L->replaceAllUsesWith(AvailVal);
   1888       if (AvailVal->getType()->getScalarType()->isPointerTy())
   1889         MD->invalidateCachedPointerInfo(AvailVal);
   1890       markInstructionForDeletion(L);
   1891       ++NumGVNLoad;
   1892       return true;
   1893     }
   1894   }
   1895 
   1896   // If the value isn't available, don't do anything!
   1897   if (Dep.isClobber()) {
   1898     DEBUG(
   1899       // fast print dep, using operator<< on instruction is too slow.
   1900       dbgs() << "GVN: load ";
   1901       L->printAsOperand(dbgs());
   1902       Instruction *I = Dep.getInst();
   1903       dbgs() << " is clobbered by " << *I << '\n';
   1904     );
   1905     return false;
   1906   }
   1907 
   1908   // If it is defined in another block, try harder.
   1909   if (Dep.isNonLocal())
   1910     return processNonLocalLoad(L);
   1911 
   1912   if (!Dep.isDef()) {
   1913     DEBUG(
   1914       // fast print dep, using operator<< on instruction is too slow.
   1915       dbgs() << "GVN: load ";
   1916       L->printAsOperand(dbgs());
   1917       dbgs() << " has unknown dependence\n";
   1918     );
   1919     return false;
   1920   }
   1921 
   1922   Instruction *DepInst = Dep.getInst();
   1923   if (StoreInst *DepSI = dyn_cast<StoreInst>(DepInst)) {
   1924     Value *StoredVal = DepSI->getValueOperand();
   1925 
   1926     // The store and load are to a must-aliased pointer, but they may not
   1927     // actually have the same type.  See if we know how to reuse the stored
   1928     // value (depending on its type).
   1929     if (StoredVal->getType() != L->getType()) {
   1930       if (DL) {
   1931         StoredVal = CoerceAvailableValueToLoadType(StoredVal, L->getType(),
   1932                                                    L, *DL);
   1933         if (!StoredVal)
   1934           return false;
   1935 
   1936         DEBUG(dbgs() << "GVN COERCED STORE:\n" << *DepSI << '\n' << *StoredVal
   1937                      << '\n' << *L << "\n\n\n");
   1938       }
   1939       else
   1940         return false;
   1941     }
   1942 
   1943     // Remove it!
   1944     L->replaceAllUsesWith(StoredVal);
   1945     if (StoredVal->getType()->getScalarType()->isPointerTy())
   1946       MD->invalidateCachedPointerInfo(StoredVal);
   1947     markInstructionForDeletion(L);
   1948     ++NumGVNLoad;
   1949     return true;
   1950   }
   1951 
   1952   if (LoadInst *DepLI = dyn_cast<LoadInst>(DepInst)) {
   1953     Value *AvailableVal = DepLI;
   1954 
   1955     // The loads are of a must-aliased pointer, but they may not actually have
   1956     // the same type.  See if we know how to reuse the previously loaded value
   1957     // (depending on its type).
   1958     if (DepLI->getType() != L->getType()) {
   1959       if (DL) {
   1960         AvailableVal = CoerceAvailableValueToLoadType(DepLI, L->getType(),
   1961                                                       L, *DL);
   1962         if (!AvailableVal)
   1963           return false;
   1964 
   1965         DEBUG(dbgs() << "GVN COERCED LOAD:\n" << *DepLI << "\n" << *AvailableVal
   1966                      << "\n" << *L << "\n\n\n");
   1967       }
   1968       else
   1969         return false;
   1970     }
   1971 
   1972     // Remove it!
   1973     patchAndReplaceAllUsesWith(L, AvailableVal);
   1974     if (DepLI->getType()->getScalarType()->isPointerTy())
   1975       MD->invalidateCachedPointerInfo(DepLI);
   1976     markInstructionForDeletion(L);
   1977     ++NumGVNLoad;
   1978     return true;
   1979   }
   1980 
   1981   // If this load really doesn't depend on anything, then we must be loading an
   1982   // undef value.  This can happen when loading for a fresh allocation with no
   1983   // intervening stores, for example.
   1984   if (isa<AllocaInst>(DepInst) || isMallocLikeFn(DepInst, TLI)) {
   1985     L->replaceAllUsesWith(UndefValue::get(L->getType()));
   1986     markInstructionForDeletion(L);
   1987     ++NumGVNLoad;
   1988     return true;
   1989   }
   1990 
   1991   // If this load occurs either right after a lifetime begin,
   1992   // then the loaded value is undefined.
   1993   if (IntrinsicInst *II = dyn_cast<IntrinsicInst>(DepInst)) {
   1994     if (II->getIntrinsicID() == Intrinsic::lifetime_start) {
   1995       L->replaceAllUsesWith(UndefValue::get(L->getType()));
   1996       markInstructionForDeletion(L);
   1997       ++NumGVNLoad;
   1998       return true;
   1999     }
   2000   }
   2001 
   2002   // If this load follows a calloc (which zero initializes memory),
   2003   // then the loaded value is zero
   2004   if (isCallocLikeFn(DepInst, TLI)) {
   2005     L->replaceAllUsesWith(Constant::getNullValue(L->getType()));
   2006     markInstructionForDeletion(L);
   2007     ++NumGVNLoad;
   2008     return true;
   2009   }
   2010 
   2011   return false;
   2012 }
   2013 
   2014 // findLeader - In order to find a leader for a given value number at a
   2015 // specific basic block, we first obtain the list of all Values for that number,
   2016 // and then scan the list to find one whose block dominates the block in
   2017 // question.  This is fast because dominator tree queries consist of only
   2018 // a few comparisons of DFS numbers.
   2019 Value *GVN::findLeader(const BasicBlock *BB, uint32_t num) {
   2020   LeaderTableEntry Vals = LeaderTable[num];
   2021   if (!Vals.Val) return nullptr;
   2022 
   2023   Value *Val = nullptr;
   2024   if (DT->dominates(Vals.BB, BB)) {
   2025     Val = Vals.Val;
   2026     if (isa<Constant>(Val)) return Val;
   2027   }
   2028 
   2029   LeaderTableEntry* Next = Vals.Next;
   2030   while (Next) {
   2031     if (DT->dominates(Next->BB, BB)) {
   2032       if (isa<Constant>(Next->Val)) return Next->Val;
   2033       if (!Val) Val = Next->Val;
   2034     }
   2035 
   2036     Next = Next->Next;
   2037   }
   2038 
   2039   return Val;
   2040 }
   2041 
   2042 /// replaceAllDominatedUsesWith - Replace all uses of 'From' with 'To' if the
   2043 /// use is dominated by the given basic block.  Returns the number of uses that
   2044 /// were replaced.
   2045 unsigned GVN::replaceAllDominatedUsesWith(Value *From, Value *To,
   2046                                           const BasicBlockEdge &Root) {
   2047   unsigned Count = 0;
   2048   for (Value::use_iterator UI = From->use_begin(), UE = From->use_end();
   2049        UI != UE; ) {
   2050     Use &U = *UI++;
   2051 
   2052     if (DT->dominates(Root, U)) {
   2053       U.set(To);
   2054       ++Count;
   2055     }
   2056   }
   2057   return Count;
   2058 }
   2059 
   2060 /// isOnlyReachableViaThisEdge - There is an edge from 'Src' to 'Dst'.  Return
   2061 /// true if every path from the entry block to 'Dst' passes via this edge.  In
   2062 /// particular 'Dst' must not be reachable via another edge from 'Src'.
   2063 static bool isOnlyReachableViaThisEdge(const BasicBlockEdge &E,
   2064                                        DominatorTree *DT) {
   2065   // While in theory it is interesting to consider the case in which Dst has
   2066   // more than one predecessor, because Dst might be part of a loop which is
   2067   // only reachable from Src, in practice it is pointless since at the time
   2068   // GVN runs all such loops have preheaders, which means that Dst will have
   2069   // been changed to have only one predecessor, namely Src.
   2070   const BasicBlock *Pred = E.getEnd()->getSinglePredecessor();
   2071   const BasicBlock *Src = E.getStart();
   2072   assert((!Pred || Pred == Src) && "No edge between these basic blocks!");
   2073   (void)Src;
   2074   return Pred != nullptr;
   2075 }
   2076 
   2077 /// propagateEquality - The given values are known to be equal in every block
   2078 /// dominated by 'Root'.  Exploit this, for example by replacing 'LHS' with
   2079 /// 'RHS' everywhere in the scope.  Returns whether a change was made.
   2080 bool GVN::propagateEquality(Value *LHS, Value *RHS,
   2081                             const BasicBlockEdge &Root) {
   2082   SmallVector<std::pair<Value*, Value*>, 4> Worklist;
   2083   Worklist.push_back(std::make_pair(LHS, RHS));
   2084   bool Changed = false;
   2085   // For speed, compute a conservative fast approximation to
   2086   // DT->dominates(Root, Root.getEnd());
   2087   bool RootDominatesEnd = isOnlyReachableViaThisEdge(Root, DT);
   2088 
   2089   while (!Worklist.empty()) {
   2090     std::pair<Value*, Value*> Item = Worklist.pop_back_val();
   2091     LHS = Item.first; RHS = Item.second;
   2092 
   2093     if (LHS == RHS) continue;
   2094     assert(LHS->getType() == RHS->getType() && "Equality but unequal types!");
   2095 
   2096     // Don't try to propagate equalities between constants.
   2097     if (isa<Constant>(LHS) && isa<Constant>(RHS)) continue;
   2098 
   2099     // Prefer a constant on the right-hand side, or an Argument if no constants.
   2100     if (isa<Constant>(LHS) || (isa<Argument>(LHS) && !isa<Constant>(RHS)))
   2101       std::swap(LHS, RHS);
   2102     assert((isa<Argument>(LHS) || isa<Instruction>(LHS)) && "Unexpected value!");
   2103 
   2104     // If there is no obvious reason to prefer the left-hand side over the right-
   2105     // hand side, ensure the longest lived term is on the right-hand side, so the
   2106     // shortest lived term will be replaced by the longest lived.  This tends to
   2107     // expose more simplifications.
   2108     uint32_t LVN = VN.lookup_or_add(LHS);
   2109     if ((isa<Argument>(LHS) && isa<Argument>(RHS)) ||
   2110         (isa<Instruction>(LHS) && isa<Instruction>(RHS))) {
   2111       // Move the 'oldest' value to the right-hand side, using the value number as
   2112       // a proxy for age.
   2113       uint32_t RVN = VN.lookup_or_add(RHS);
   2114       if (LVN < RVN) {
   2115         std::swap(LHS, RHS);
   2116         LVN = RVN;
   2117       }
   2118     }
   2119 
   2120     // If value numbering later sees that an instruction in the scope is equal
   2121     // to 'LHS' then ensure it will be turned into 'RHS'.  In order to preserve
   2122     // the invariant that instructions only occur in the leader table for their
   2123     // own value number (this is used by removeFromLeaderTable), do not do this
   2124     // if RHS is an instruction (if an instruction in the scope is morphed into
   2125     // LHS then it will be turned into RHS by the next GVN iteration anyway, so
   2126     // using the leader table is about compiling faster, not optimizing better).
   2127     // The leader table only tracks basic blocks, not edges. Only add to if we
   2128     // have the simple case where the edge dominates the end.
   2129     if (RootDominatesEnd && !isa<Instruction>(RHS))
   2130       addToLeaderTable(LVN, RHS, Root.getEnd());
   2131 
   2132     // Replace all occurrences of 'LHS' with 'RHS' everywhere in the scope.  As
   2133     // LHS always has at least one use that is not dominated by Root, this will
   2134     // never do anything if LHS has only one use.
   2135     if (!LHS->hasOneUse()) {
   2136       unsigned NumReplacements = replaceAllDominatedUsesWith(LHS, RHS, Root);
   2137       Changed |= NumReplacements > 0;
   2138       NumGVNEqProp += NumReplacements;
   2139     }
   2140 
   2141     // Now try to deduce additional equalities from this one.  For example, if the
   2142     // known equality was "(A != B)" == "false" then it follows that A and B are
   2143     // equal in the scope.  Only boolean equalities with an explicit true or false
   2144     // RHS are currently supported.
   2145     if (!RHS->getType()->isIntegerTy(1))
   2146       // Not a boolean equality - bail out.
   2147       continue;
   2148     ConstantInt *CI = dyn_cast<ConstantInt>(RHS);
   2149     if (!CI)
   2150       // RHS neither 'true' nor 'false' - bail out.
   2151       continue;
   2152     // Whether RHS equals 'true'.  Otherwise it equals 'false'.
   2153     bool isKnownTrue = CI->isAllOnesValue();
   2154     bool isKnownFalse = !isKnownTrue;
   2155 
   2156     // If "A && B" is known true then both A and B are known true.  If "A || B"
   2157     // is known false then both A and B are known false.
   2158     Value *A, *B;
   2159     if ((isKnownTrue && match(LHS, m_And(m_Value(A), m_Value(B)))) ||
   2160         (isKnownFalse && match(LHS, m_Or(m_Value(A), m_Value(B))))) {
   2161       Worklist.push_back(std::make_pair(A, RHS));
   2162       Worklist.push_back(std::make_pair(B, RHS));
   2163       continue;
   2164     }
   2165 
   2166     // If we are propagating an equality like "(A == B)" == "true" then also
   2167     // propagate the equality A == B.  When propagating a comparison such as
   2168     // "(A >= B)" == "true", replace all instances of "A < B" with "false".
   2169     if (ICmpInst *Cmp = dyn_cast<ICmpInst>(LHS)) {
   2170       Value *Op0 = Cmp->getOperand(0), *Op1 = Cmp->getOperand(1);
   2171 
   2172       // If "A == B" is known true, or "A != B" is known false, then replace
   2173       // A with B everywhere in the scope.
   2174       if ((isKnownTrue && Cmp->getPredicate() == CmpInst::ICMP_EQ) ||
   2175           (isKnownFalse && Cmp->getPredicate() == CmpInst::ICMP_NE))
   2176         Worklist.push_back(std::make_pair(Op0, Op1));
   2177 
   2178       // If "A >= B" is known true, replace "A < B" with false everywhere.
   2179       CmpInst::Predicate NotPred = Cmp->getInversePredicate();
   2180       Constant *NotVal = ConstantInt::get(Cmp->getType(), isKnownFalse);
   2181       // Since we don't have the instruction "A < B" immediately to hand, work out
   2182       // the value number that it would have and use that to find an appropriate
   2183       // instruction (if any).
   2184       uint32_t NextNum = VN.getNextUnusedValueNumber();
   2185       uint32_t Num = VN.lookup_or_add_cmp(Cmp->getOpcode(), NotPred, Op0, Op1);
   2186       // If the number we were assigned was brand new then there is no point in
   2187       // looking for an instruction realizing it: there cannot be one!
   2188       if (Num < NextNum) {
   2189         Value *NotCmp = findLeader(Root.getEnd(), Num);
   2190         if (NotCmp && isa<Instruction>(NotCmp)) {
   2191           unsigned NumReplacements =
   2192             replaceAllDominatedUsesWith(NotCmp, NotVal, Root);
   2193           Changed |= NumReplacements > 0;
   2194           NumGVNEqProp += NumReplacements;
   2195         }
   2196       }
   2197       // Ensure that any instruction in scope that gets the "A < B" value number
   2198       // is replaced with false.
   2199       // The leader table only tracks basic blocks, not edges. Only add to if we
   2200       // have the simple case where the edge dominates the end.
   2201       if (RootDominatesEnd)
   2202         addToLeaderTable(Num, NotVal, Root.getEnd());
   2203 
   2204       continue;
   2205     }
   2206   }
   2207 
   2208   return Changed;
   2209 }
   2210 
   2211 /// processInstruction - When calculating availability, handle an instruction
   2212 /// by inserting it into the appropriate sets
   2213 bool GVN::processInstruction(Instruction *I) {
   2214   // Ignore dbg info intrinsics.
   2215   if (isa<DbgInfoIntrinsic>(I))
   2216     return false;
   2217 
   2218   // If the instruction can be easily simplified then do so now in preference
   2219   // to value numbering it.  Value numbering often exposes redundancies, for
   2220   // example if it determines that %y is equal to %x then the instruction
   2221   // "%z = and i32 %x, %y" becomes "%z = and i32 %x, %x" which we now simplify.
   2222   if (Value *V = SimplifyInstruction(I, DL, TLI, DT)) {
   2223     I->replaceAllUsesWith(V);
   2224     if (MD && V->getType()->getScalarType()->isPointerTy())
   2225       MD->invalidateCachedPointerInfo(V);
   2226     markInstructionForDeletion(I);
   2227     ++NumGVNSimpl;
   2228     return true;
   2229   }
   2230 
   2231   if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
   2232     if (processLoad(LI))
   2233       return true;
   2234 
   2235     unsigned Num = VN.lookup_or_add(LI);
   2236     addToLeaderTable(Num, LI, LI->getParent());
   2237     return false;
   2238   }
   2239 
   2240   // For conditional branches, we can perform simple conditional propagation on
   2241   // the condition value itself.
   2242   if (BranchInst *BI = dyn_cast<BranchInst>(I)) {
   2243     if (!BI->isConditional())
   2244       return false;
   2245 
   2246     if (isa<Constant>(BI->getCondition()))
   2247       return processFoldableCondBr(BI);
   2248 
   2249     Value *BranchCond = BI->getCondition();
   2250     BasicBlock *TrueSucc = BI->getSuccessor(0);
   2251     BasicBlock *FalseSucc = BI->getSuccessor(1);
   2252     // Avoid multiple edges early.
   2253     if (TrueSucc == FalseSucc)
   2254       return false;
   2255 
   2256     BasicBlock *Parent = BI->getParent();
   2257     bool Changed = false;
   2258 
   2259     Value *TrueVal = ConstantInt::getTrue(TrueSucc->getContext());
   2260     BasicBlockEdge TrueE(Parent, TrueSucc);
   2261     Changed |= propagateEquality(BranchCond, TrueVal, TrueE);
   2262 
   2263     Value *FalseVal = ConstantInt::getFalse(FalseSucc->getContext());
   2264     BasicBlockEdge FalseE(Parent, FalseSucc);
   2265     Changed |= propagateEquality(BranchCond, FalseVal, FalseE);
   2266 
   2267     return Changed;
   2268   }
   2269 
   2270   // For switches, propagate the case values into the case destinations.
   2271   if (SwitchInst *SI = dyn_cast<SwitchInst>(I)) {
   2272     Value *SwitchCond = SI->getCondition();
   2273     BasicBlock *Parent = SI->getParent();
   2274     bool Changed = false;
   2275 
   2276     // Remember how many outgoing edges there are to every successor.
   2277     SmallDenseMap<BasicBlock *, unsigned, 16> SwitchEdges;
   2278     for (unsigned i = 0, n = SI->getNumSuccessors(); i != n; ++i)
   2279       ++SwitchEdges[SI->getSuccessor(i)];
   2280 
   2281     for (SwitchInst::CaseIt i = SI->case_begin(), e = SI->case_end();
   2282          i != e; ++i) {
   2283       BasicBlock *Dst = i.getCaseSuccessor();
   2284       // If there is only a single edge, propagate the case value into it.
   2285       if (SwitchEdges.lookup(Dst) == 1) {
   2286         BasicBlockEdge E(Parent, Dst);
   2287         Changed |= propagateEquality(SwitchCond, i.getCaseValue(), E);
   2288       }
   2289     }
   2290     return Changed;
   2291   }
   2292 
   2293   // Instructions with void type don't return a value, so there's
   2294   // no point in trying to find redundancies in them.
   2295   if (I->getType()->isVoidTy()) return false;
   2296 
   2297   uint32_t NextNum = VN.getNextUnusedValueNumber();
   2298   unsigned Num = VN.lookup_or_add(I);
   2299 
   2300   // Allocations are always uniquely numbered, so we can save time and memory
   2301   // by fast failing them.
   2302   if (isa<AllocaInst>(I) || isa<TerminatorInst>(I) || isa<PHINode>(I)) {
   2303     addToLeaderTable(Num, I, I->getParent());
   2304     return false;
   2305   }
   2306 
   2307   // If the number we were assigned was a brand new VN, then we don't
   2308   // need to do a lookup to see if the number already exists
   2309   // somewhere in the domtree: it can't!
   2310   if (Num >= NextNum) {
   2311     addToLeaderTable(Num, I, I->getParent());
   2312     return false;
   2313   }
   2314 
   2315   // Perform fast-path value-number based elimination of values inherited from
   2316   // dominators.
   2317   Value *repl = findLeader(I->getParent(), Num);
   2318   if (!repl) {
   2319     // Failure, just remember this instance for future use.
   2320     addToLeaderTable(Num, I, I->getParent());
   2321     return false;
   2322   }
   2323 
   2324   // Remove it!
   2325   patchAndReplaceAllUsesWith(I, repl);
   2326   if (MD && repl->getType()->getScalarType()->isPointerTy())
   2327     MD->invalidateCachedPointerInfo(repl);
   2328   markInstructionForDeletion(I);
   2329   return true;
   2330 }
   2331 
   2332 /// runOnFunction - This is the main transformation entry point for a function.
   2333 bool GVN::runOnFunction(Function& F) {
   2334   if (skipOptnoneFunction(F))
   2335     return false;
   2336 
   2337   if (!NoLoads)
   2338     MD = &getAnalysis<MemoryDependenceAnalysis>();
   2339   DT = &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
   2340   DataLayoutPass *DLP = getAnalysisIfAvailable<DataLayoutPass>();
   2341   DL = DLP ? &DLP->getDataLayout() : nullptr;
   2342   TLI = &getAnalysis<TargetLibraryInfo>();
   2343   VN.setAliasAnalysis(&getAnalysis<AliasAnalysis>());
   2344   VN.setMemDep(MD);
   2345   VN.setDomTree(DT);
   2346 
   2347   bool Changed = false;
   2348   bool ShouldContinue = true;
   2349 
   2350   // Merge unconditional branches, allowing PRE to catch more
   2351   // optimization opportunities.
   2352   for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ) {
   2353     BasicBlock *BB = FI++;
   2354 
   2355     bool removedBlock = MergeBlockIntoPredecessor(BB, this);
   2356     if (removedBlock) ++NumGVNBlocks;
   2357 
   2358     Changed |= removedBlock;
   2359   }
   2360 
   2361   unsigned Iteration = 0;
   2362   while (ShouldContinue) {
   2363     DEBUG(dbgs() << "GVN iteration: " << Iteration << "\n");
   2364     ShouldContinue = iterateOnFunction(F);
   2365     Changed |= ShouldContinue;
   2366     ++Iteration;
   2367   }
   2368 
   2369   if (EnablePRE) {
   2370     // Fabricate val-num for dead-code in order to suppress assertion in
   2371     // performPRE().
   2372     assignValNumForDeadCode();
   2373     bool PREChanged = true;
   2374     while (PREChanged) {
   2375       PREChanged = performPRE(F);
   2376       Changed |= PREChanged;
   2377     }
   2378   }
   2379 
   2380   // FIXME: Should perform GVN again after PRE does something.  PRE can move
   2381   // computations into blocks where they become fully redundant.  Note that
   2382   // we can't do this until PRE's critical edge splitting updates memdep.
   2383   // Actually, when this happens, we should just fully integrate PRE into GVN.
   2384 
   2385   cleanupGlobalSets();
   2386   // Do not cleanup DeadBlocks in cleanupGlobalSets() as it's called for each
   2387   // iteration.
   2388   DeadBlocks.clear();
   2389 
   2390   return Changed;
   2391 }
   2392 
   2393 
   2394 bool GVN::processBlock(BasicBlock *BB) {
   2395   // FIXME: Kill off InstrsToErase by doing erasing eagerly in a helper function
   2396   // (and incrementing BI before processing an instruction).
   2397   assert(InstrsToErase.empty() &&
   2398          "We expect InstrsToErase to be empty across iterations");
   2399   if (DeadBlocks.count(BB))
   2400     return false;
   2401 
   2402   bool ChangedFunction = false;
   2403 
   2404   for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();
   2405        BI != BE;) {
   2406     ChangedFunction |= processInstruction(BI);
   2407     if (InstrsToErase.empty()) {
   2408       ++BI;
   2409       continue;
   2410     }
   2411 
   2412     // If we need some instructions deleted, do it now.
   2413     NumGVNInstr += InstrsToErase.size();
   2414 
   2415     // Avoid iterator invalidation.
   2416     bool AtStart = BI == BB->begin();
   2417     if (!AtStart)
   2418       --BI;
   2419 
   2420     for (SmallVectorImpl<Instruction *>::iterator I = InstrsToErase.begin(),
   2421          E = InstrsToErase.end(); I != E; ++I) {
   2422       DEBUG(dbgs() << "GVN removed: " << **I << '\n');
   2423       if (MD) MD->removeInstruction(*I);
   2424       DEBUG(verifyRemoved(*I));
   2425       (*I)->eraseFromParent();
   2426     }
   2427     InstrsToErase.clear();
   2428 
   2429     if (AtStart)
   2430       BI = BB->begin();
   2431     else
   2432       ++BI;
   2433   }
   2434 
   2435   return ChangedFunction;
   2436 }
   2437 
   2438 /// performPRE - Perform a purely local form of PRE that looks for diamond
   2439 /// control flow patterns and attempts to perform simple PRE at the join point.
   2440 bool GVN::performPRE(Function &F) {
   2441   bool Changed = false;
   2442   SmallVector<std::pair<Value*, BasicBlock*>, 8> predMap;
   2443   for (BasicBlock *CurrentBlock : depth_first(&F.getEntryBlock())) {
   2444     // Nothing to PRE in the entry block.
   2445     if (CurrentBlock == &F.getEntryBlock()) continue;
   2446 
   2447     // Don't perform PRE on a landing pad.
   2448     if (CurrentBlock->isLandingPad()) continue;
   2449 
   2450     for (BasicBlock::iterator BI = CurrentBlock->begin(),
   2451          BE = CurrentBlock->end(); BI != BE; ) {
   2452       Instruction *CurInst = BI++;
   2453 
   2454       if (isa<AllocaInst>(CurInst) ||
   2455           isa<TerminatorInst>(CurInst) || isa<PHINode>(CurInst) ||
   2456           CurInst->getType()->isVoidTy() ||
   2457           CurInst->mayReadFromMemory() || CurInst->mayHaveSideEffects() ||
   2458           isa<DbgInfoIntrinsic>(CurInst))
   2459         continue;
   2460 
   2461       // Don't do PRE on compares. The PHI would prevent CodeGenPrepare from
   2462       // sinking the compare again, and it would force the code generator to
   2463       // move the i1 from processor flags or predicate registers into a general
   2464       // purpose register.
   2465       if (isa<CmpInst>(CurInst))
   2466         continue;
   2467 
   2468       // We don't currently value number ANY inline asm calls.
   2469       if (CallInst *CallI = dyn_cast<CallInst>(CurInst))
   2470         if (CallI->isInlineAsm())
   2471           continue;
   2472 
   2473       uint32_t ValNo = VN.lookup(CurInst);
   2474 
   2475       // Look for the predecessors for PRE opportunities.  We're
   2476       // only trying to solve the basic diamond case, where
   2477       // a value is computed in the successor and one predecessor,
   2478       // but not the other.  We also explicitly disallow cases
   2479       // where the successor is its own predecessor, because they're
   2480       // more complicated to get right.
   2481       unsigned NumWith = 0;
   2482       unsigned NumWithout = 0;
   2483       BasicBlock *PREPred = nullptr;
   2484       predMap.clear();
   2485 
   2486       for (pred_iterator PI = pred_begin(CurrentBlock),
   2487            PE = pred_end(CurrentBlock); PI != PE; ++PI) {
   2488         BasicBlock *P = *PI;
   2489         // We're not interested in PRE where the block is its
   2490         // own predecessor, or in blocks with predecessors
   2491         // that are not reachable.
   2492         if (P == CurrentBlock) {
   2493           NumWithout = 2;
   2494           break;
   2495         } else if (!DT->isReachableFromEntry(P))  {
   2496           NumWithout = 2;
   2497           break;
   2498         }
   2499 
   2500         Value* predV = findLeader(P, ValNo);
   2501         if (!predV) {
   2502           predMap.push_back(std::make_pair(static_cast<Value *>(nullptr), P));
   2503           PREPred = P;
   2504           ++NumWithout;
   2505         } else if (predV == CurInst) {
   2506           /* CurInst dominates this predecessor. */
   2507           NumWithout = 2;
   2508           break;
   2509         } else {
   2510           predMap.push_back(std::make_pair(predV, P));
   2511           ++NumWith;
   2512         }
   2513       }
   2514 
   2515       // Don't do PRE when it might increase code size, i.e. when
   2516       // we would need to insert instructions in more than one pred.
   2517       if (NumWithout != 1 || NumWith == 0)
   2518         continue;
   2519 
   2520       // Don't do PRE across indirect branch.
   2521       if (isa<IndirectBrInst>(PREPred->getTerminator()))
   2522         continue;
   2523 
   2524       // We can't do PRE safely on a critical edge, so instead we schedule
   2525       // the edge to be split and perform the PRE the next time we iterate
   2526       // on the function.
   2527       unsigned SuccNum = GetSuccessorNumber(PREPred, CurrentBlock);
   2528       if (isCriticalEdge(PREPred->getTerminator(), SuccNum)) {
   2529         toSplit.push_back(std::make_pair(PREPred->getTerminator(), SuccNum));
   2530         continue;
   2531       }
   2532 
   2533       // Instantiate the expression in the predecessor that lacked it.
   2534       // Because we are going top-down through the block, all value numbers
   2535       // will be available in the predecessor by the time we need them.  Any
   2536       // that weren't originally present will have been instantiated earlier
   2537       // in this loop.
   2538       Instruction *PREInstr = CurInst->clone();
   2539       bool success = true;
   2540       for (unsigned i = 0, e = CurInst->getNumOperands(); i != e; ++i) {
   2541         Value *Op = PREInstr->getOperand(i);
   2542         if (isa<Argument>(Op) || isa<Constant>(Op) || isa<GlobalValue>(Op))
   2543           continue;
   2544 
   2545         if (Value *V = findLeader(PREPred, VN.lookup(Op))) {
   2546           PREInstr->setOperand(i, V);
   2547         } else {
   2548           success = false;
   2549           break;
   2550         }
   2551       }
   2552 
   2553       // Fail out if we encounter an operand that is not available in
   2554       // the PRE predecessor.  This is typically because of loads which
   2555       // are not value numbered precisely.
   2556       if (!success) {
   2557         DEBUG(verifyRemoved(PREInstr));
   2558         delete PREInstr;
   2559         continue;
   2560       }
   2561 
   2562       PREInstr->insertBefore(PREPred->getTerminator());
   2563       PREInstr->setName(CurInst->getName() + ".pre");
   2564       PREInstr->setDebugLoc(CurInst->getDebugLoc());
   2565       VN.add(PREInstr, ValNo);
   2566       ++NumGVNPRE;
   2567 
   2568       // Update the availability map to include the new instruction.
   2569       addToLeaderTable(ValNo, PREInstr, PREPred);
   2570 
   2571       // Create a PHI to make the value available in this block.
   2572       PHINode* Phi = PHINode::Create(CurInst->getType(), predMap.size(),
   2573                                      CurInst->getName() + ".pre-phi",
   2574                                      CurrentBlock->begin());
   2575       for (unsigned i = 0, e = predMap.size(); i != e; ++i) {
   2576         if (Value *V = predMap[i].first)
   2577           Phi->addIncoming(V, predMap[i].second);
   2578         else
   2579           Phi->addIncoming(PREInstr, PREPred);
   2580       }
   2581 
   2582       VN.add(Phi, ValNo);
   2583       addToLeaderTable(ValNo, Phi, CurrentBlock);
   2584       Phi->setDebugLoc(CurInst->getDebugLoc());
   2585       CurInst->replaceAllUsesWith(Phi);
   2586       if (Phi->getType()->getScalarType()->isPointerTy()) {
   2587         // Because we have added a PHI-use of the pointer value, it has now
   2588         // "escaped" from alias analysis' perspective.  We need to inform
   2589         // AA of this.
   2590         for (unsigned ii = 0, ee = Phi->getNumIncomingValues(); ii != ee;
   2591              ++ii) {
   2592           unsigned jj = PHINode::getOperandNumForIncomingValue(ii);
   2593           VN.getAliasAnalysis()->addEscapingUse(Phi->getOperandUse(jj));
   2594         }
   2595 
   2596         if (MD)
   2597           MD->invalidateCachedPointerInfo(Phi);
   2598       }
   2599       VN.erase(CurInst);
   2600       removeFromLeaderTable(ValNo, CurInst, CurrentBlock);
   2601 
   2602       DEBUG(dbgs() << "GVN PRE removed: " << *CurInst << '\n');
   2603       if (MD) MD->removeInstruction(CurInst);
   2604       DEBUG(verifyRemoved(CurInst));
   2605       CurInst->eraseFromParent();
   2606       Changed = true;
   2607     }
   2608   }
   2609 
   2610   if (splitCriticalEdges())
   2611     Changed = true;
   2612 
   2613   return Changed;
   2614 }
   2615 
   2616 /// Split the critical edge connecting the given two blocks, and return
   2617 /// the block inserted to the critical edge.
   2618 BasicBlock *GVN::splitCriticalEdges(BasicBlock *Pred, BasicBlock *Succ) {
   2619   BasicBlock *BB = SplitCriticalEdge(Pred, Succ, this);
   2620   if (MD)
   2621     MD->invalidateCachedPredecessors();
   2622   return BB;
   2623 }
   2624 
   2625 /// splitCriticalEdges - Split critical edges found during the previous
   2626 /// iteration that may enable further optimization.
   2627 bool GVN::splitCriticalEdges() {
   2628   if (toSplit.empty())
   2629     return false;
   2630   do {
   2631     std::pair<TerminatorInst*, unsigned> Edge = toSplit.pop_back_val();
   2632     SplitCriticalEdge(Edge.first, Edge.second, this);
   2633   } while (!toSplit.empty());
   2634   if (MD) MD->invalidateCachedPredecessors();
   2635   return true;
   2636 }
   2637 
   2638 /// iterateOnFunction - Executes one iteration of GVN
   2639 bool GVN::iterateOnFunction(Function &F) {
   2640   cleanupGlobalSets();
   2641 
   2642   // Top-down walk of the dominator tree
   2643   bool Changed = false;
   2644 #if 0
   2645   // Needed for value numbering with phi construction to work.
   2646   ReversePostOrderTraversal<Function*> RPOT(&F);
   2647   for (ReversePostOrderTraversal<Function*>::rpo_iterator RI = RPOT.begin(),
   2648        RE = RPOT.end(); RI != RE; ++RI)
   2649     Changed |= processBlock(*RI);
   2650 #else
   2651   // Save the blocks this function have before transformation begins. GVN may
   2652   // split critical edge, and hence may invalidate the RPO/DT iterator.
   2653   //
   2654   std::vector<BasicBlock *> BBVect;
   2655   BBVect.reserve(256);
   2656   for (DomTreeNode *x : depth_first(DT->getRootNode()))
   2657     BBVect.push_back(x->getBlock());
   2658 
   2659   for (std::vector<BasicBlock *>::iterator I = BBVect.begin(), E = BBVect.end();
   2660        I != E; I++)
   2661     Changed |= processBlock(*I);
   2662 #endif
   2663 
   2664   return Changed;
   2665 }
   2666 
   2667 void GVN::cleanupGlobalSets() {
   2668   VN.clear();
   2669   LeaderTable.clear();
   2670   TableAllocator.Reset();
   2671 }
   2672 
   2673 /// verifyRemoved - Verify that the specified instruction does not occur in our
   2674 /// internal data structures.
   2675 void GVN::verifyRemoved(const Instruction *Inst) const {
   2676   VN.verifyRemoved(Inst);
   2677 
   2678   // Walk through the value number scope to make sure the instruction isn't
   2679   // ferreted away in it.
   2680   for (DenseMap<uint32_t, LeaderTableEntry>::const_iterator
   2681        I = LeaderTable.begin(), E = LeaderTable.end(); I != E; ++I) {
   2682     const LeaderTableEntry *Node = &I->second;
   2683     assert(Node->Val != Inst && "Inst still in value numbering scope!");
   2684 
   2685     while (Node->Next) {
   2686       Node = Node->Next;
   2687       assert(Node->Val != Inst && "Inst still in value numbering scope!");
   2688     }
   2689   }
   2690 }
   2691 
   2692 // BB is declared dead, which implied other blocks become dead as well. This
   2693 // function is to add all these blocks to "DeadBlocks". For the dead blocks'
   2694 // live successors, update their phi nodes by replacing the operands
   2695 // corresponding to dead blocks with UndefVal.
   2696 //
   2697 void GVN::addDeadBlock(BasicBlock *BB) {
   2698   SmallVector<BasicBlock *, 4> NewDead;
   2699   SmallSetVector<BasicBlock *, 4> DF;
   2700 
   2701   NewDead.push_back(BB);
   2702   while (!NewDead.empty()) {
   2703     BasicBlock *D = NewDead.pop_back_val();
   2704     if (DeadBlocks.count(D))
   2705       continue;
   2706 
   2707     // All blocks dominated by D are dead.
   2708     SmallVector<BasicBlock *, 8> Dom;
   2709     DT->getDescendants(D, Dom);
   2710     DeadBlocks.insert(Dom.begin(), Dom.end());
   2711 
   2712     // Figure out the dominance-frontier(D).
   2713     for (SmallVectorImpl<BasicBlock *>::iterator I = Dom.begin(),
   2714            E = Dom.end(); I != E; I++) {
   2715       BasicBlock *B = *I;
   2716       for (succ_iterator SI = succ_begin(B), SE = succ_end(B); SI != SE; SI++) {
   2717         BasicBlock *S = *SI;
   2718         if (DeadBlocks.count(S))
   2719           continue;
   2720 
   2721         bool AllPredDead = true;
   2722         for (pred_iterator PI = pred_begin(S), PE = pred_end(S); PI != PE; PI++)
   2723           if (!DeadBlocks.count(*PI)) {
   2724             AllPredDead = false;
   2725             break;
   2726           }
   2727 
   2728         if (!AllPredDead) {
   2729           // S could be proved dead later on. That is why we don't update phi
   2730           // operands at this moment.
   2731           DF.insert(S);
   2732         } else {
   2733           // While S is not dominated by D, it is dead by now. This could take
   2734           // place if S already have a dead predecessor before D is declared
   2735           // dead.
   2736           NewDead.push_back(S);
   2737         }
   2738       }
   2739     }
   2740   }
   2741 
   2742   // For the dead blocks' live successors, update their phi nodes by replacing
   2743   // the operands corresponding to dead blocks with UndefVal.
   2744   for(SmallSetVector<BasicBlock *, 4>::iterator I = DF.begin(), E = DF.end();
   2745         I != E; I++) {
   2746     BasicBlock *B = *I;
   2747     if (DeadBlocks.count(B))
   2748       continue;
   2749 
   2750     SmallVector<BasicBlock *, 4> Preds(pred_begin(B), pred_end(B));
   2751     for (SmallVectorImpl<BasicBlock *>::iterator PI = Preds.begin(),
   2752            PE = Preds.end(); PI != PE; PI++) {
   2753       BasicBlock *P = *PI;
   2754 
   2755       if (!DeadBlocks.count(P))
   2756         continue;
   2757 
   2758       if (isCriticalEdge(P->getTerminator(), GetSuccessorNumber(P, B))) {
   2759         if (BasicBlock *S = splitCriticalEdges(P, B))
   2760           DeadBlocks.insert(P = S);
   2761       }
   2762 
   2763       for (BasicBlock::iterator II = B->begin(); isa<PHINode>(II); ++II) {
   2764         PHINode &Phi = cast<PHINode>(*II);
   2765         Phi.setIncomingValue(Phi.getBasicBlockIndex(P),
   2766                              UndefValue::get(Phi.getType()));
   2767       }
   2768     }
   2769   }
   2770 }
   2771 
   2772 // If the given branch is recognized as a foldable branch (i.e. conditional
   2773 // branch with constant condition), it will perform following analyses and
   2774 // transformation.
   2775 //  1) If the dead out-coming edge is a critical-edge, split it. Let
   2776 //     R be the target of the dead out-coming edge.
   2777 //  1) Identify the set of dead blocks implied by the branch's dead outcoming
   2778 //     edge. The result of this step will be {X| X is dominated by R}
   2779 //  2) Identify those blocks which haves at least one dead prodecessor. The
   2780 //     result of this step will be dominance-frontier(R).
   2781 //  3) Update the PHIs in DF(R) by replacing the operands corresponding to
   2782 //     dead blocks with "UndefVal" in an hope these PHIs will optimized away.
   2783 //
   2784 // Return true iff *NEW* dead code are found.
   2785 bool GVN::processFoldableCondBr(BranchInst *BI) {
   2786   if (!BI || BI->isUnconditional())
   2787     return false;
   2788 
   2789   ConstantInt *Cond = dyn_cast<ConstantInt>(BI->getCondition());
   2790   if (!Cond)
   2791     return false;
   2792 
   2793   BasicBlock *DeadRoot = Cond->getZExtValue() ?
   2794                          BI->getSuccessor(1) : BI->getSuccessor(0);
   2795   if (DeadBlocks.count(DeadRoot))
   2796     return false;
   2797 
   2798   if (!DeadRoot->getSinglePredecessor())
   2799     DeadRoot = splitCriticalEdges(BI->getParent(), DeadRoot);
   2800 
   2801   addDeadBlock(DeadRoot);
   2802   return true;
   2803 }
   2804 
   2805 // performPRE() will trigger assert if it come across an instruciton without
   2806 // associated val-num. As it normally has far more live instructions than dead
   2807 // instructions, it makes more sense just to "fabricate" a val-number for the
   2808 // dead code than checking if instruction involved is dead or not.
   2809 void GVN::assignValNumForDeadCode() {
   2810   for (SetVector<BasicBlock *>::iterator I = DeadBlocks.begin(),
   2811         E = DeadBlocks.end(); I != E; I++) {
   2812     BasicBlock *BB = *I;
   2813     for (BasicBlock::iterator II = BB->begin(), EE = BB->end();
   2814           II != EE; II++) {
   2815       Instruction *Inst = &*II;
   2816       unsigned ValNum = VN.lookup_or_add(Inst);
   2817       addToLeaderTable(ValNum, Inst, BB);
   2818     }
   2819   }
   2820 }
   2821