Use getValueOperand() and getPointerOperand() on load and store
[oota-llvm.git] / lib / Transforms / Scalar / GVN.cpp
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 #define DEBUG_TYPE "gvn"
19 #include "llvm/Transforms/Scalar.h"
20 #include "llvm/BasicBlock.h"
21 #include "llvm/Constants.h"
22 #include "llvm/DerivedTypes.h"
23 #include "llvm/GlobalVariable.h"
24 #include "llvm/Function.h"
25 #include "llvm/IntrinsicInst.h"
26 #include "llvm/LLVMContext.h"
27 #include "llvm/Operator.h"
28 #include "llvm/Value.h"
29 #include "llvm/ADT/DenseMap.h"
30 #include "llvm/ADT/DepthFirstIterator.h"
31 #include "llvm/ADT/PostOrderIterator.h"
32 #include "llvm/ADT/SmallPtrSet.h"
33 #include "llvm/ADT/SmallVector.h"
34 #include "llvm/ADT/Statistic.h"
35 #include "llvm/Analysis/AliasAnalysis.h"
36 #include "llvm/Analysis/ConstantFolding.h"
37 #include "llvm/Analysis/Dominators.h"
38 #include "llvm/Analysis/Loads.h"
39 #include "llvm/Analysis/MemoryBuiltins.h"
40 #include "llvm/Analysis/MemoryDependenceAnalysis.h"
41 #include "llvm/Analysis/PHITransAddr.h"
42 #include "llvm/Support/CFG.h"
43 #include "llvm/Support/CommandLine.h"
44 #include "llvm/Support/Debug.h"
45 #include "llvm/Support/ErrorHandling.h"
46 #include "llvm/Support/GetElementPtrTypeIterator.h"
47 #include "llvm/Support/IRBuilder.h"
48 #include "llvm/Support/raw_ostream.h"
49 #include "llvm/Target/TargetData.h"
50 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
51 #include "llvm/Transforms/Utils/Local.h"
52 #include "llvm/Transforms/Utils/SSAUpdater.h"
53 using namespace llvm;
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(NumPRELoad,   "Number of loads PRE'd");
60
61 static cl::opt<bool> EnablePRE("enable-pre",
62                                cl::init(true), cl::Hidden);
63 static cl::opt<bool> EnableLoadPRE("enable-load-pre", cl::init(true));
64
65 //===----------------------------------------------------------------------===//
66 //                         ValueTable Class
67 //===----------------------------------------------------------------------===//
68
69 /// This class holds the mapping between values and value numbers.  It is used
70 /// as an efficient mechanism to determine the expression-wise equivalence of
71 /// two values.
72 namespace {
73   struct Expression {
74     enum ExpressionOpcode { 
75       ADD = Instruction::Add,
76       FADD = Instruction::FAdd,
77       SUB = Instruction::Sub,
78       FSUB = Instruction::FSub,
79       MUL = Instruction::Mul,
80       FMUL = Instruction::FMul,
81       UDIV = Instruction::UDiv,
82       SDIV = Instruction::SDiv,
83       FDIV = Instruction::FDiv,
84       UREM = Instruction::URem,
85       SREM = Instruction::SRem,
86       FREM = Instruction::FRem,
87       SHL = Instruction::Shl,
88       LSHR = Instruction::LShr,
89       ASHR = Instruction::AShr,
90       AND = Instruction::And,
91       OR = Instruction::Or,
92       XOR = Instruction::Xor,
93       TRUNC = Instruction::Trunc,
94       ZEXT = Instruction::ZExt,
95       SEXT = Instruction::SExt,
96       FPTOUI = Instruction::FPToUI,
97       FPTOSI = Instruction::FPToSI,
98       UITOFP = Instruction::UIToFP,
99       SITOFP = Instruction::SIToFP,
100       FPTRUNC = Instruction::FPTrunc,
101       FPEXT = Instruction::FPExt,
102       PTRTOINT = Instruction::PtrToInt,
103       INTTOPTR = Instruction::IntToPtr,
104       BITCAST = Instruction::BitCast,
105       ICMPEQ, ICMPNE, ICMPUGT, ICMPUGE, ICMPULT, ICMPULE,
106       ICMPSGT, ICMPSGE, ICMPSLT, ICMPSLE, FCMPOEQ,
107       FCMPOGT, FCMPOGE, FCMPOLT, FCMPOLE, FCMPONE,
108       FCMPORD, FCMPUNO, FCMPUEQ, FCMPUGT, FCMPUGE,
109       FCMPULT, FCMPULE, FCMPUNE, EXTRACT, INSERT,
110       SHUFFLE, SELECT, GEP, CALL, CONSTANT,
111       INSERTVALUE, EXTRACTVALUE, EMPTY, TOMBSTONE };
112
113     ExpressionOpcode opcode;
114     const Type* type;
115     SmallVector<uint32_t, 4> varargs;
116     Value *function;
117
118     Expression() { }
119     Expression(ExpressionOpcode o) : opcode(o) { }
120
121     bool operator==(const Expression &other) const {
122       if (opcode != other.opcode)
123         return false;
124       else if (opcode == EMPTY || opcode == TOMBSTONE)
125         return true;
126       else if (type != other.type)
127         return false;
128       else if (function != other.function)
129         return false;
130       else {
131         if (varargs.size() != other.varargs.size())
132           return false;
133
134         for (size_t i = 0; i < varargs.size(); ++i)
135           if (varargs[i] != other.varargs[i])
136             return false;
137
138         return true;
139       }
140     }
141
142     /*bool operator!=(const Expression &other) const {
143       return !(*this == other);
144     }*/
145   };
146
147   class ValueTable {
148     private:
149       DenseMap<Value*, uint32_t> valueNumbering;
150       DenseMap<Expression, uint32_t> expressionNumbering;
151       AliasAnalysis* AA;
152       MemoryDependenceAnalysis* MD;
153       DominatorTree* DT;
154
155       uint32_t nextValueNumber;
156
157       Expression::ExpressionOpcode getOpcode(CmpInst* C);
158       Expression create_expression(BinaryOperator* BO);
159       Expression create_expression(CmpInst* C);
160       Expression create_expression(ShuffleVectorInst* V);
161       Expression create_expression(ExtractElementInst* C);
162       Expression create_expression(InsertElementInst* V);
163       Expression create_expression(SelectInst* V);
164       Expression create_expression(CastInst* C);
165       Expression create_expression(GetElementPtrInst* G);
166       Expression create_expression(CallInst* C);
167       Expression create_expression(ExtractValueInst* C);
168       Expression create_expression(InsertValueInst* C);
169       
170       uint32_t lookup_or_add_call(CallInst* C);
171     public:
172       ValueTable() : nextValueNumber(1) { }
173       uint32_t lookup_or_add(Value *V);
174       uint32_t lookup(Value *V) const;
175       void add(Value *V, uint32_t num);
176       void clear();
177       void erase(Value *v);
178       void setAliasAnalysis(AliasAnalysis* A) { AA = A; }
179       AliasAnalysis *getAliasAnalysis() const { return AA; }
180       void setMemDep(MemoryDependenceAnalysis* M) { MD = M; }
181       void setDomTree(DominatorTree* D) { DT = D; }
182       uint32_t getNextUnusedValueNumber() { return nextValueNumber; }
183       void verifyRemoved(const Value *) const;
184   };
185 }
186
187 namespace llvm {
188 template <> struct DenseMapInfo<Expression> {
189   static inline Expression getEmptyKey() {
190     return Expression(Expression::EMPTY);
191   }
192
193   static inline Expression getTombstoneKey() {
194     return Expression(Expression::TOMBSTONE);
195   }
196
197   static unsigned getHashValue(const Expression e) {
198     unsigned hash = e.opcode;
199
200     hash = ((unsigned)((uintptr_t)e.type >> 4) ^
201             (unsigned)((uintptr_t)e.type >> 9));
202
203     for (SmallVector<uint32_t, 4>::const_iterator I = e.varargs.begin(),
204          E = e.varargs.end(); I != E; ++I)
205       hash = *I + hash * 37;
206
207     hash = ((unsigned)((uintptr_t)e.function >> 4) ^
208             (unsigned)((uintptr_t)e.function >> 9)) +
209            hash * 37;
210
211     return hash;
212   }
213   static bool isEqual(const Expression &LHS, const Expression &RHS) {
214     return LHS == RHS;
215   }
216 };
217   
218 template <>
219 struct isPodLike<Expression> { static const bool value = true; };
220
221 }
222
223 //===----------------------------------------------------------------------===//
224 //                     ValueTable Internal Functions
225 //===----------------------------------------------------------------------===//
226
227 Expression::ExpressionOpcode ValueTable::getOpcode(CmpInst* C) {
228   if (isa<ICmpInst>(C)) {
229     switch (C->getPredicate()) {
230     default:  // THIS SHOULD NEVER HAPPEN
231       llvm_unreachable("Comparison with unknown predicate?");
232     case ICmpInst::ICMP_EQ:  return Expression::ICMPEQ;
233     case ICmpInst::ICMP_NE:  return Expression::ICMPNE;
234     case ICmpInst::ICMP_UGT: return Expression::ICMPUGT;
235     case ICmpInst::ICMP_UGE: return Expression::ICMPUGE;
236     case ICmpInst::ICMP_ULT: return Expression::ICMPULT;
237     case ICmpInst::ICMP_ULE: return Expression::ICMPULE;
238     case ICmpInst::ICMP_SGT: return Expression::ICMPSGT;
239     case ICmpInst::ICMP_SGE: return Expression::ICMPSGE;
240     case ICmpInst::ICMP_SLT: return Expression::ICMPSLT;
241     case ICmpInst::ICMP_SLE: return Expression::ICMPSLE;
242     }
243   } else {
244     switch (C->getPredicate()) {
245     default: // THIS SHOULD NEVER HAPPEN
246       llvm_unreachable("Comparison with unknown predicate?");
247     case FCmpInst::FCMP_OEQ: return Expression::FCMPOEQ;
248     case FCmpInst::FCMP_OGT: return Expression::FCMPOGT;
249     case FCmpInst::FCMP_OGE: return Expression::FCMPOGE;
250     case FCmpInst::FCMP_OLT: return Expression::FCMPOLT;
251     case FCmpInst::FCMP_OLE: return Expression::FCMPOLE;
252     case FCmpInst::FCMP_ONE: return Expression::FCMPONE;
253     case FCmpInst::FCMP_ORD: return Expression::FCMPORD;
254     case FCmpInst::FCMP_UNO: return Expression::FCMPUNO;
255     case FCmpInst::FCMP_UEQ: return Expression::FCMPUEQ;
256     case FCmpInst::FCMP_UGT: return Expression::FCMPUGT;
257     case FCmpInst::FCMP_UGE: return Expression::FCMPUGE;
258     case FCmpInst::FCMP_ULT: return Expression::FCMPULT;
259     case FCmpInst::FCMP_ULE: return Expression::FCMPULE;
260     case FCmpInst::FCMP_UNE: return Expression::FCMPUNE;
261     }
262   }
263 }
264
265 Expression ValueTable::create_expression(CallInst* C) {
266   Expression e;
267
268   e.type = C->getType();
269   e.function = C->getCalledFunction();
270   e.opcode = Expression::CALL;
271
272   CallSite CS(C);
273   for (CallInst::op_iterator I = CS.arg_begin(), E = CS.arg_end();
274        I != E; ++I)
275     e.varargs.push_back(lookup_or_add(*I));
276
277   return e;
278 }
279
280 Expression ValueTable::create_expression(BinaryOperator* BO) {
281   Expression e;
282   e.varargs.push_back(lookup_or_add(BO->getOperand(0)));
283   e.varargs.push_back(lookup_or_add(BO->getOperand(1)));
284   e.function = 0;
285   e.type = BO->getType();
286   e.opcode = static_cast<Expression::ExpressionOpcode>(BO->getOpcode());
287
288   return e;
289 }
290
291 Expression ValueTable::create_expression(CmpInst* C) {
292   Expression e;
293
294   e.varargs.push_back(lookup_or_add(C->getOperand(0)));
295   e.varargs.push_back(lookup_or_add(C->getOperand(1)));
296   e.function = 0;
297   e.type = C->getType();
298   e.opcode = getOpcode(C);
299
300   return e;
301 }
302
303 Expression ValueTable::create_expression(CastInst* C) {
304   Expression e;
305
306   e.varargs.push_back(lookup_or_add(C->getOperand(0)));
307   e.function = 0;
308   e.type = C->getType();
309   e.opcode = static_cast<Expression::ExpressionOpcode>(C->getOpcode());
310
311   return e;
312 }
313
314 Expression ValueTable::create_expression(ShuffleVectorInst* S) {
315   Expression e;
316
317   e.varargs.push_back(lookup_or_add(S->getOperand(0)));
318   e.varargs.push_back(lookup_or_add(S->getOperand(1)));
319   e.varargs.push_back(lookup_or_add(S->getOperand(2)));
320   e.function = 0;
321   e.type = S->getType();
322   e.opcode = Expression::SHUFFLE;
323
324   return e;
325 }
326
327 Expression ValueTable::create_expression(ExtractElementInst* E) {
328   Expression e;
329
330   e.varargs.push_back(lookup_or_add(E->getOperand(0)));
331   e.varargs.push_back(lookup_or_add(E->getOperand(1)));
332   e.function = 0;
333   e.type = E->getType();
334   e.opcode = Expression::EXTRACT;
335
336   return e;
337 }
338
339 Expression ValueTable::create_expression(InsertElementInst* I) {
340   Expression e;
341
342   e.varargs.push_back(lookup_or_add(I->getOperand(0)));
343   e.varargs.push_back(lookup_or_add(I->getOperand(1)));
344   e.varargs.push_back(lookup_or_add(I->getOperand(2)));
345   e.function = 0;
346   e.type = I->getType();
347   e.opcode = Expression::INSERT;
348
349   return e;
350 }
351
352 Expression ValueTable::create_expression(SelectInst* I) {
353   Expression e;
354
355   e.varargs.push_back(lookup_or_add(I->getCondition()));
356   e.varargs.push_back(lookup_or_add(I->getTrueValue()));
357   e.varargs.push_back(lookup_or_add(I->getFalseValue()));
358   e.function = 0;
359   e.type = I->getType();
360   e.opcode = Expression::SELECT;
361
362   return e;
363 }
364
365 Expression ValueTable::create_expression(GetElementPtrInst* G) {
366   Expression e;
367
368   e.varargs.push_back(lookup_or_add(G->getPointerOperand()));
369   e.function = 0;
370   e.type = G->getType();
371   e.opcode = Expression::GEP;
372
373   for (GetElementPtrInst::op_iterator I = G->idx_begin(), E = G->idx_end();
374        I != E; ++I)
375     e.varargs.push_back(lookup_or_add(*I));
376
377   return e;
378 }
379
380 Expression ValueTable::create_expression(ExtractValueInst* E) {
381   Expression e;
382
383   e.varargs.push_back(lookup_or_add(E->getAggregateOperand()));
384   for (ExtractValueInst::idx_iterator II = E->idx_begin(), IE = E->idx_end();
385        II != IE; ++II)
386     e.varargs.push_back(*II);
387   e.function = 0;
388   e.type = E->getType();
389   e.opcode = Expression::EXTRACTVALUE;
390
391   return e;
392 }
393
394 Expression ValueTable::create_expression(InsertValueInst* E) {
395   Expression e;
396
397   e.varargs.push_back(lookup_or_add(E->getAggregateOperand()));
398   e.varargs.push_back(lookup_or_add(E->getInsertedValueOperand()));
399   for (InsertValueInst::idx_iterator II = E->idx_begin(), IE = E->idx_end();
400        II != IE; ++II)
401     e.varargs.push_back(*II);
402   e.function = 0;
403   e.type = E->getType();
404   e.opcode = Expression::INSERTVALUE;
405
406   return e;
407 }
408
409 //===----------------------------------------------------------------------===//
410 //                     ValueTable External Functions
411 //===----------------------------------------------------------------------===//
412
413 /// add - Insert a value into the table with a specified value number.
414 void ValueTable::add(Value *V, uint32_t num) {
415   valueNumbering.insert(std::make_pair(V, num));
416 }
417
418 uint32_t ValueTable::lookup_or_add_call(CallInst* C) {
419   if (AA->doesNotAccessMemory(C)) {
420     Expression exp = create_expression(C);
421     uint32_t& e = expressionNumbering[exp];
422     if (!e) e = nextValueNumber++;
423     valueNumbering[C] = e;
424     return e;
425   } else if (AA->onlyReadsMemory(C)) {
426     Expression exp = create_expression(C);
427     uint32_t& e = expressionNumbering[exp];
428     if (!e) {
429       e = nextValueNumber++;
430       valueNumbering[C] = e;
431       return e;
432     }
433     if (!MD) {
434       e = nextValueNumber++;
435       valueNumbering[C] = e;
436       return e;
437     }
438
439     MemDepResult local_dep = MD->getDependency(C);
440
441     if (!local_dep.isDef() && !local_dep.isNonLocal()) {
442       valueNumbering[C] =  nextValueNumber;
443       return nextValueNumber++;
444     }
445
446     if (local_dep.isDef()) {
447       CallInst* local_cdep = cast<CallInst>(local_dep.getInst());
448
449       if (local_cdep->getNumArgOperands() != C->getNumArgOperands()) {
450         valueNumbering[C] = nextValueNumber;
451         return nextValueNumber++;
452       }
453
454       for (unsigned i = 0, e = C->getNumArgOperands(); i < e; ++i) {
455         uint32_t c_vn = lookup_or_add(C->getArgOperand(i));
456         uint32_t cd_vn = lookup_or_add(local_cdep->getArgOperand(i));
457         if (c_vn != cd_vn) {
458           valueNumbering[C] = nextValueNumber;
459           return nextValueNumber++;
460         }
461       }
462
463       uint32_t v = lookup_or_add(local_cdep);
464       valueNumbering[C] = v;
465       return v;
466     }
467
468     // Non-local case.
469     const MemoryDependenceAnalysis::NonLocalDepInfo &deps =
470       MD->getNonLocalCallDependency(CallSite(C));
471     // FIXME: call/call dependencies for readonly calls should return def, not
472     // clobber!  Move the checking logic to MemDep!
473     CallInst* cdep = 0;
474
475     // Check to see if we have a single dominating call instruction that is
476     // identical to C.
477     for (unsigned i = 0, e = deps.size(); i != e; ++i) {
478       const NonLocalDepEntry *I = &deps[i];
479       // Ignore non-local dependencies.
480       if (I->getResult().isNonLocal())
481         continue;
482
483       // We don't handle non-depedencies.  If we already have a call, reject
484       // instruction dependencies.
485       if (I->getResult().isClobber() || cdep != 0) {
486         cdep = 0;
487         break;
488       }
489
490       CallInst *NonLocalDepCall = dyn_cast<CallInst>(I->getResult().getInst());
491       // FIXME: All duplicated with non-local case.
492       if (NonLocalDepCall && DT->properlyDominates(I->getBB(), C->getParent())){
493         cdep = NonLocalDepCall;
494         continue;
495       }
496
497       cdep = 0;
498       break;
499     }
500
501     if (!cdep) {
502       valueNumbering[C] = nextValueNumber;
503       return nextValueNumber++;
504     }
505
506     if (cdep->getNumArgOperands() != C->getNumArgOperands()) {
507       valueNumbering[C] = nextValueNumber;
508       return nextValueNumber++;
509     }
510     for (unsigned i = 0, e = C->getNumArgOperands(); i < e; ++i) {
511       uint32_t c_vn = lookup_or_add(C->getArgOperand(i));
512       uint32_t cd_vn = lookup_or_add(cdep->getArgOperand(i));
513       if (c_vn != cd_vn) {
514         valueNumbering[C] = nextValueNumber;
515         return nextValueNumber++;
516       }
517     }
518
519     uint32_t v = lookup_or_add(cdep);
520     valueNumbering[C] = v;
521     return v;
522
523   } else {
524     valueNumbering[C] = nextValueNumber;
525     return nextValueNumber++;
526   }
527 }
528
529 /// lookup_or_add - Returns the value number for the specified value, assigning
530 /// it a new number if it did not have one before.
531 uint32_t ValueTable::lookup_or_add(Value *V) {
532   DenseMap<Value*, uint32_t>::iterator VI = valueNumbering.find(V);
533   if (VI != valueNumbering.end())
534     return VI->second;
535
536   if (!isa<Instruction>(V)) {
537     valueNumbering[V] = nextValueNumber;
538     return nextValueNumber++;
539   }
540   
541   Instruction* I = cast<Instruction>(V);
542   Expression exp;
543   switch (I->getOpcode()) {
544     case Instruction::Call:
545       return lookup_or_add_call(cast<CallInst>(I));
546     case Instruction::Add:
547     case Instruction::FAdd:
548     case Instruction::Sub:
549     case Instruction::FSub:
550     case Instruction::Mul:
551     case Instruction::FMul:
552     case Instruction::UDiv:
553     case Instruction::SDiv:
554     case Instruction::FDiv:
555     case Instruction::URem:
556     case Instruction::SRem:
557     case Instruction::FRem:
558     case Instruction::Shl:
559     case Instruction::LShr:
560     case Instruction::AShr:
561     case Instruction::And:
562     case Instruction::Or :
563     case Instruction::Xor:
564       exp = create_expression(cast<BinaryOperator>(I));
565       break;
566     case Instruction::ICmp:
567     case Instruction::FCmp:
568       exp = create_expression(cast<CmpInst>(I));
569       break;
570     case Instruction::Trunc:
571     case Instruction::ZExt:
572     case Instruction::SExt:
573     case Instruction::FPToUI:
574     case Instruction::FPToSI:
575     case Instruction::UIToFP:
576     case Instruction::SIToFP:
577     case Instruction::FPTrunc:
578     case Instruction::FPExt:
579     case Instruction::PtrToInt:
580     case Instruction::IntToPtr:
581     case Instruction::BitCast:
582       exp = create_expression(cast<CastInst>(I));
583       break;
584     case Instruction::Select:
585       exp = create_expression(cast<SelectInst>(I));
586       break;
587     case Instruction::ExtractElement:
588       exp = create_expression(cast<ExtractElementInst>(I));
589       break;
590     case Instruction::InsertElement:
591       exp = create_expression(cast<InsertElementInst>(I));
592       break;
593     case Instruction::ShuffleVector:
594       exp = create_expression(cast<ShuffleVectorInst>(I));
595       break;
596     case Instruction::ExtractValue:
597       exp = create_expression(cast<ExtractValueInst>(I));
598       break;
599     case Instruction::InsertValue:
600       exp = create_expression(cast<InsertValueInst>(I));
601       break;      
602     case Instruction::GetElementPtr:
603       exp = create_expression(cast<GetElementPtrInst>(I));
604       break;
605     default:
606       valueNumbering[V] = nextValueNumber;
607       return nextValueNumber++;
608   }
609
610   uint32_t& e = expressionNumbering[exp];
611   if (!e) e = nextValueNumber++;
612   valueNumbering[V] = e;
613   return e;
614 }
615
616 /// lookup - Returns the value number of the specified value. Fails if
617 /// the value has not yet been numbered.
618 uint32_t ValueTable::lookup(Value *V) const {
619   DenseMap<Value*, uint32_t>::const_iterator VI = valueNumbering.find(V);
620   assert(VI != valueNumbering.end() && "Value not numbered?");
621   return VI->second;
622 }
623
624 /// clear - Remove all entries from the ValueTable
625 void ValueTable::clear() {
626   valueNumbering.clear();
627   expressionNumbering.clear();
628   nextValueNumber = 1;
629 }
630
631 /// erase - Remove a value from the value numbering
632 void ValueTable::erase(Value *V) {
633   valueNumbering.erase(V);
634 }
635
636 /// verifyRemoved - Verify that the value is removed from all internal data
637 /// structures.
638 void ValueTable::verifyRemoved(const Value *V) const {
639   for (DenseMap<Value*, uint32_t>::const_iterator
640          I = valueNumbering.begin(), E = valueNumbering.end(); I != E; ++I) {
641     assert(I->first != V && "Inst still occurs in value numbering map!");
642   }
643 }
644
645 //===----------------------------------------------------------------------===//
646 //                                GVN Pass
647 //===----------------------------------------------------------------------===//
648
649 namespace {
650   struct ValueNumberScope {
651     ValueNumberScope* parent;
652     DenseMap<uint32_t, Value*> table;
653
654     ValueNumberScope(ValueNumberScope* p) : parent(p) { }
655   };
656 }
657
658 namespace {
659
660   class GVN : public FunctionPass {
661     bool runOnFunction(Function &F);
662   public:
663     static char ID; // Pass identification, replacement for typeid
664     explicit GVN(bool noloads = false)
665         : FunctionPass(ID), NoLoads(noloads), MD(0) {
666       initializeGVNPass(*PassRegistry::getPassRegistry());
667     }
668
669   private:
670     bool NoLoads;
671     MemoryDependenceAnalysis *MD;
672     DominatorTree *DT;
673
674     ValueTable VN;
675     DenseMap<BasicBlock*, ValueNumberScope*> localAvail;
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     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
682       AU.addRequired<DominatorTree>();
683       if (!NoLoads)
684         AU.addRequired<MemoryDependenceAnalysis>();
685       AU.addRequired<AliasAnalysis>();
686
687       AU.addPreserved<DominatorTree>();
688       AU.addPreserved<AliasAnalysis>();
689     }
690
691     // Helper fuctions
692     // FIXME: eliminate or document these better
693     bool processLoad(LoadInst* L,
694                      SmallVectorImpl<Instruction*> &toErase);
695     bool processInstruction(Instruction *I,
696                             SmallVectorImpl<Instruction*> &toErase);
697     bool processNonLocalLoad(LoadInst* L,
698                              SmallVectorImpl<Instruction*> &toErase);
699     bool processBlock(BasicBlock *BB);
700     void dump(DenseMap<uint32_t, Value*>& d);
701     bool iterateOnFunction(Function &F);
702     Value *CollapsePhi(PHINode* p);
703     bool performPRE(Function& F);
704     Value *lookupNumber(BasicBlock *BB, uint32_t num);
705     void cleanupGlobalSets();
706     void verifyRemoved(const Instruction *I) const;
707     bool splitCriticalEdges();
708   };
709
710   char GVN::ID = 0;
711 }
712
713 // createGVNPass - The public interface to this file...
714 FunctionPass *llvm::createGVNPass(bool NoLoads) {
715   return new GVN(NoLoads);
716 }
717
718 INITIALIZE_PASS_BEGIN(GVN, "gvn", "Global Value Numbering", false, false)
719 INITIALIZE_PASS_DEPENDENCY(MemoryDependenceAnalysis)
720 INITIALIZE_PASS_DEPENDENCY(DominatorTree)
721 INITIALIZE_AG_DEPENDENCY(AliasAnalysis)
722 INITIALIZE_PASS_END(GVN, "gvn", "Global Value Numbering", false, false)
723
724 void GVN::dump(DenseMap<uint32_t, Value*>& d) {
725   errs() << "{\n";
726   for (DenseMap<uint32_t, Value*>::iterator I = d.begin(),
727        E = d.end(); I != E; ++I) {
728       errs() << I->first << "\n";
729       I->second->dump();
730   }
731   errs() << "}\n";
732 }
733
734 static bool isSafeReplacement(PHINode* p, Instruction *inst) {
735   if (!isa<PHINode>(inst))
736     return true;
737
738   for (Instruction::use_iterator UI = p->use_begin(), E = p->use_end();
739        UI != E; ++UI)
740     if (PHINode* use_phi = dyn_cast<PHINode>(*UI))
741       if (use_phi->getParent() == inst->getParent())
742         return false;
743
744   return true;
745 }
746
747 Value *GVN::CollapsePhi(PHINode *PN) {
748   Value *ConstVal = PN->hasConstantValue(DT);
749   if (!ConstVal) return 0;
750
751   Instruction *Inst = dyn_cast<Instruction>(ConstVal);
752   if (!Inst)
753     return ConstVal;
754
755   if (DT->dominates(Inst, PN))
756     if (isSafeReplacement(PN, Inst))
757       return Inst;
758   return 0;
759 }
760
761 /// IsValueFullyAvailableInBlock - Return true if we can prove that the value
762 /// we're analyzing is fully available in the specified block.  As we go, keep
763 /// track of which blocks we know are fully alive in FullyAvailableBlocks.  This
764 /// map is actually a tri-state map with the following values:
765 ///   0) we know the block *is not* fully available.
766 ///   1) we know the block *is* fully available.
767 ///   2) we do not know whether the block is fully available or not, but we are
768 ///      currently speculating that it will be.
769 ///   3) we are speculating for this block and have used that to speculate for
770 ///      other blocks.
771 static bool IsValueFullyAvailableInBlock(BasicBlock *BB,
772                             DenseMap<BasicBlock*, char> &FullyAvailableBlocks) {
773   // Optimistically assume that the block is fully available and check to see
774   // if we already know about this block in one lookup.
775   std::pair<DenseMap<BasicBlock*, char>::iterator, char> IV =
776     FullyAvailableBlocks.insert(std::make_pair(BB, 2));
777
778   // If the entry already existed for this block, return the precomputed value.
779   if (!IV.second) {
780     // If this is a speculative "available" value, mark it as being used for
781     // speculation of other blocks.
782     if (IV.first->second == 2)
783       IV.first->second = 3;
784     return IV.first->second != 0;
785   }
786
787   // Otherwise, see if it is fully available in all predecessors.
788   pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
789
790   // If this block has no predecessors, it isn't live-in here.
791   if (PI == PE)
792     goto SpeculationFailure;
793
794   for (; PI != PE; ++PI)
795     // If the value isn't fully available in one of our predecessors, then it
796     // isn't fully available in this block either.  Undo our previous
797     // optimistic assumption and bail out.
798     if (!IsValueFullyAvailableInBlock(*PI, FullyAvailableBlocks))
799       goto SpeculationFailure;
800
801   return true;
802
803 // SpeculationFailure - If we get here, we found out that this is not, after
804 // all, a fully-available block.  We have a problem if we speculated on this and
805 // used the speculation to mark other blocks as available.
806 SpeculationFailure:
807   char &BBVal = FullyAvailableBlocks[BB];
808
809   // If we didn't speculate on this, just return with it set to false.
810   if (BBVal == 2) {
811     BBVal = 0;
812     return false;
813   }
814
815   // If we did speculate on this value, we could have blocks set to 1 that are
816   // incorrect.  Walk the (transitive) successors of this block and mark them as
817   // 0 if set to one.
818   SmallVector<BasicBlock*, 32> BBWorklist;
819   BBWorklist.push_back(BB);
820
821   do {
822     BasicBlock *Entry = BBWorklist.pop_back_val();
823     // Note that this sets blocks to 0 (unavailable) if they happen to not
824     // already be in FullyAvailableBlocks.  This is safe.
825     char &EntryVal = FullyAvailableBlocks[Entry];
826     if (EntryVal == 0) continue;  // Already unavailable.
827
828     // Mark as unavailable.
829     EntryVal = 0;
830
831     for (succ_iterator I = succ_begin(Entry), E = succ_end(Entry); I != E; ++I)
832       BBWorklist.push_back(*I);
833   } while (!BBWorklist.empty());
834
835   return false;
836 }
837
838
839 /// CanCoerceMustAliasedValueToLoad - Return true if
840 /// CoerceAvailableValueToLoadType will succeed.
841 static bool CanCoerceMustAliasedValueToLoad(Value *StoredVal,
842                                             const Type *LoadTy,
843                                             const TargetData &TD) {
844   // If the loaded or stored value is an first class array or struct, don't try
845   // to transform them.  We need to be able to bitcast to integer.
846   if (LoadTy->isStructTy() || LoadTy->isArrayTy() ||
847       StoredVal->getType()->isStructTy() ||
848       StoredVal->getType()->isArrayTy())
849     return false;
850   
851   // The store has to be at least as big as the load.
852   if (TD.getTypeSizeInBits(StoredVal->getType()) <
853         TD.getTypeSizeInBits(LoadTy))
854     return false;
855   
856   return true;
857 }
858   
859
860 /// CoerceAvailableValueToLoadType - If we saw a store of a value to memory, and
861 /// then a load from a must-aliased pointer of a different type, try to coerce
862 /// the stored value.  LoadedTy is the type of the load we want to replace and
863 /// InsertPt is the place to insert new instructions.
864 ///
865 /// If we can't do it, return null.
866 static Value *CoerceAvailableValueToLoadType(Value *StoredVal, 
867                                              const Type *LoadedTy,
868                                              Instruction *InsertPt,
869                                              const TargetData &TD) {
870   if (!CanCoerceMustAliasedValueToLoad(StoredVal, LoadedTy, TD))
871     return 0;
872   
873   const Type *StoredValTy = StoredVal->getType();
874   
875   uint64_t StoreSize = TD.getTypeStoreSizeInBits(StoredValTy);
876   uint64_t LoadSize = TD.getTypeSizeInBits(LoadedTy);
877   
878   // If the store and reload are the same size, we can always reuse it.
879   if (StoreSize == LoadSize) {
880     if (StoredValTy->isPointerTy() && LoadedTy->isPointerTy()) {
881       // Pointer to Pointer -> use bitcast.
882       return new BitCastInst(StoredVal, LoadedTy, "", InsertPt);
883     }
884     
885     // Convert source pointers to integers, which can be bitcast.
886     if (StoredValTy->isPointerTy()) {
887       StoredValTy = TD.getIntPtrType(StoredValTy->getContext());
888       StoredVal = new PtrToIntInst(StoredVal, StoredValTy, "", InsertPt);
889     }
890     
891     const Type *TypeToCastTo = LoadedTy;
892     if (TypeToCastTo->isPointerTy())
893       TypeToCastTo = TD.getIntPtrType(StoredValTy->getContext());
894     
895     if (StoredValTy != TypeToCastTo)
896       StoredVal = new BitCastInst(StoredVal, TypeToCastTo, "", InsertPt);
897     
898     // Cast to pointer if the load needs a pointer type.
899     if (LoadedTy->isPointerTy())
900       StoredVal = new IntToPtrInst(StoredVal, LoadedTy, "", InsertPt);
901     
902     return StoredVal;
903   }
904   
905   // If the loaded value is smaller than the available value, then we can
906   // extract out a piece from it.  If the available value is too small, then we
907   // can't do anything.
908   assert(StoreSize >= LoadSize && "CanCoerceMustAliasedValueToLoad fail");
909   
910   // Convert source pointers to integers, which can be manipulated.
911   if (StoredValTy->isPointerTy()) {
912     StoredValTy = TD.getIntPtrType(StoredValTy->getContext());
913     StoredVal = new PtrToIntInst(StoredVal, StoredValTy, "", InsertPt);
914   }
915   
916   // Convert vectors and fp to integer, which can be manipulated.
917   if (!StoredValTy->isIntegerTy()) {
918     StoredValTy = IntegerType::get(StoredValTy->getContext(), StoreSize);
919     StoredVal = new BitCastInst(StoredVal, StoredValTy, "", InsertPt);
920   }
921   
922   // If this is a big-endian system, we need to shift the value down to the low
923   // bits so that a truncate will work.
924   if (TD.isBigEndian()) {
925     Constant *Val = ConstantInt::get(StoredVal->getType(), StoreSize-LoadSize);
926     StoredVal = BinaryOperator::CreateLShr(StoredVal, Val, "tmp", InsertPt);
927   }
928   
929   // Truncate the integer to the right size now.
930   const Type *NewIntTy = IntegerType::get(StoredValTy->getContext(), LoadSize);
931   StoredVal = new TruncInst(StoredVal, NewIntTy, "trunc", InsertPt);
932   
933   if (LoadedTy == NewIntTy)
934     return StoredVal;
935   
936   // If the result is a pointer, inttoptr.
937   if (LoadedTy->isPointerTy())
938     return new IntToPtrInst(StoredVal, LoadedTy, "inttoptr", InsertPt);
939   
940   // Otherwise, bitcast.
941   return new BitCastInst(StoredVal, LoadedTy, "bitcast", InsertPt);
942 }
943
944 /// GetBaseWithConstantOffset - Analyze the specified pointer to see if it can
945 /// be expressed as a base pointer plus a constant offset.  Return the base and
946 /// offset to the caller.
947 static Value *GetBaseWithConstantOffset(Value *Ptr, int64_t &Offset,
948                                         const TargetData &TD) {
949   Operator *PtrOp = dyn_cast<Operator>(Ptr);
950   if (PtrOp == 0) return Ptr;
951   
952   // Just look through bitcasts.
953   if (PtrOp->getOpcode() == Instruction::BitCast)
954     return GetBaseWithConstantOffset(PtrOp->getOperand(0), Offset, TD);
955   
956   // If this is a GEP with constant indices, we can look through it.
957   GEPOperator *GEP = dyn_cast<GEPOperator>(PtrOp);
958   if (GEP == 0 || !GEP->hasAllConstantIndices()) return Ptr;
959   
960   gep_type_iterator GTI = gep_type_begin(GEP);
961   for (User::op_iterator I = GEP->idx_begin(), E = GEP->idx_end(); I != E;
962        ++I, ++GTI) {
963     ConstantInt *OpC = cast<ConstantInt>(*I);
964     if (OpC->isZero()) continue;
965     
966     // Handle a struct and array indices which add their offset to the pointer.
967     if (const StructType *STy = dyn_cast<StructType>(*GTI)) {
968       Offset += TD.getStructLayout(STy)->getElementOffset(OpC->getZExtValue());
969     } else {
970       uint64_t Size = TD.getTypeAllocSize(GTI.getIndexedType());
971       Offset += OpC->getSExtValue()*Size;
972     }
973   }
974   
975   // Re-sign extend from the pointer size if needed to get overflow edge cases
976   // right.
977   unsigned PtrSize = TD.getPointerSizeInBits();
978   if (PtrSize < 64)
979     Offset = (Offset << (64-PtrSize)) >> (64-PtrSize);
980   
981   return GetBaseWithConstantOffset(GEP->getPointerOperand(), Offset, TD);
982 }
983
984
985 /// AnalyzeLoadFromClobberingWrite - This function is called when we have a
986 /// memdep query of a load that ends up being a clobbering memory write (store,
987 /// memset, memcpy, memmove).  This means that the write *may* provide bits used
988 /// by the load but we can't be sure because the pointers don't mustalias.
989 ///
990 /// Check this case to see if there is anything more we can do before we give
991 /// up.  This returns -1 if we have to give up, or a byte number in the stored
992 /// value of the piece that feeds the load.
993 static int AnalyzeLoadFromClobberingWrite(const Type *LoadTy, Value *LoadPtr,
994                                           Value *WritePtr,
995                                           uint64_t WriteSizeInBits,
996                                           const TargetData &TD) {
997   // If the loaded or stored value is an first class array or struct, don't try
998   // to transform them.  We need to be able to bitcast to integer.
999   if (LoadTy->isStructTy() || LoadTy->isArrayTy())
1000     return -1;
1001   
1002   int64_t StoreOffset = 0, LoadOffset = 0;
1003   Value *StoreBase = GetBaseWithConstantOffset(WritePtr, StoreOffset, TD);
1004   Value *LoadBase = 
1005     GetBaseWithConstantOffset(LoadPtr, LoadOffset, TD);
1006   if (StoreBase != LoadBase)
1007     return -1;
1008   
1009   // If the load and store are to the exact same address, they should have been
1010   // a must alias.  AA must have gotten confused.
1011   // FIXME: Study to see if/when this happens.  One case is forwarding a memset
1012   // to a load from the base of the memset.
1013 #if 0
1014   if (LoadOffset == StoreOffset) {
1015     dbgs() << "STORE/LOAD DEP WITH COMMON POINTER MISSED:\n"
1016     << "Base       = " << *StoreBase << "\n"
1017     << "Store Ptr  = " << *WritePtr << "\n"
1018     << "Store Offs = " << StoreOffset << "\n"
1019     << "Load Ptr   = " << *LoadPtr << "\n";
1020     abort();
1021   }
1022 #endif
1023   
1024   // If the load and store don't overlap at all, the store doesn't provide
1025   // anything to the load.  In this case, they really don't alias at all, AA
1026   // must have gotten confused.
1027   // FIXME: Investigate cases where this bails out, e.g. rdar://7238614. Then
1028   // remove this check, as it is duplicated with what we have below.
1029   uint64_t LoadSize = TD.getTypeSizeInBits(LoadTy);
1030   
1031   if ((WriteSizeInBits & 7) | (LoadSize & 7))
1032     return -1;
1033   uint64_t StoreSize = WriteSizeInBits >> 3;  // Convert to bytes.
1034   LoadSize >>= 3;
1035   
1036   
1037   bool isAAFailure = false;
1038   if (StoreOffset < LoadOffset)
1039     isAAFailure = StoreOffset+int64_t(StoreSize) <= LoadOffset;
1040   else
1041     isAAFailure = LoadOffset+int64_t(LoadSize) <= StoreOffset;
1042
1043   if (isAAFailure) {
1044 #if 0
1045     dbgs() << "STORE LOAD DEP WITH COMMON BASE:\n"
1046     << "Base       = " << *StoreBase << "\n"
1047     << "Store Ptr  = " << *WritePtr << "\n"
1048     << "Store Offs = " << StoreOffset << "\n"
1049     << "Load Ptr   = " << *LoadPtr << "\n";
1050     abort();
1051 #endif
1052     return -1;
1053   }
1054   
1055   // If the Load isn't completely contained within the stored bits, we don't
1056   // have all the bits to feed it.  We could do something crazy in the future
1057   // (issue a smaller load then merge the bits in) but this seems unlikely to be
1058   // valuable.
1059   if (StoreOffset > LoadOffset ||
1060       StoreOffset+StoreSize < LoadOffset+LoadSize)
1061     return -1;
1062   
1063   // Okay, we can do this transformation.  Return the number of bytes into the
1064   // store that the load is.
1065   return LoadOffset-StoreOffset;
1066 }  
1067
1068 /// AnalyzeLoadFromClobberingStore - This function is called when we have a
1069 /// memdep query of a load that ends up being a clobbering store.
1070 static int AnalyzeLoadFromClobberingStore(const Type *LoadTy, Value *LoadPtr,
1071                                           StoreInst *DepSI,
1072                                           const TargetData &TD) {
1073   // Cannot handle reading from store of first-class aggregate yet.
1074   if (DepSI->getValueOperand()->getType()->isStructTy() ||
1075       DepSI->getValueOperand()->getType()->isArrayTy())
1076     return -1;
1077
1078   Value *StorePtr = DepSI->getPointerOperand();
1079   uint64_t StoreSize =TD.getTypeSizeInBits(DepSI->getValueOperand()->getType());
1080   return AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr,
1081                                         StorePtr, StoreSize, TD);
1082 }
1083
1084 static int AnalyzeLoadFromClobberingMemInst(const Type *LoadTy, Value *LoadPtr,
1085                                             MemIntrinsic *MI,
1086                                             const TargetData &TD) {
1087   // If the mem operation is a non-constant size, we can't handle it.
1088   ConstantInt *SizeCst = dyn_cast<ConstantInt>(MI->getLength());
1089   if (SizeCst == 0) return -1;
1090   uint64_t MemSizeInBits = SizeCst->getZExtValue()*8;
1091
1092   // If this is memset, we just need to see if the offset is valid in the size
1093   // of the memset..
1094   if (MI->getIntrinsicID() == Intrinsic::memset)
1095     return AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr, MI->getDest(),
1096                                           MemSizeInBits, TD);
1097   
1098   // If we have a memcpy/memmove, the only case we can handle is if this is a
1099   // copy from constant memory.  In that case, we can read directly from the
1100   // constant memory.
1101   MemTransferInst *MTI = cast<MemTransferInst>(MI);
1102   
1103   Constant *Src = dyn_cast<Constant>(MTI->getSource());
1104   if (Src == 0) return -1;
1105   
1106   GlobalVariable *GV = dyn_cast<GlobalVariable>(Src->getUnderlyingObject());
1107   if (GV == 0 || !GV->isConstant()) return -1;
1108   
1109   // See if the access is within the bounds of the transfer.
1110   int Offset = AnalyzeLoadFromClobberingWrite(LoadTy, LoadPtr,
1111                                               MI->getDest(), MemSizeInBits, TD);
1112   if (Offset == -1)
1113     return Offset;
1114   
1115   // Otherwise, see if we can constant fold a load from the constant with the
1116   // offset applied as appropriate.
1117   Src = ConstantExpr::getBitCast(Src,
1118                                  llvm::Type::getInt8PtrTy(Src->getContext()));
1119   Constant *OffsetCst = 
1120     ConstantInt::get(Type::getInt64Ty(Src->getContext()), (unsigned)Offset);
1121   Src = ConstantExpr::getGetElementPtr(Src, &OffsetCst, 1);
1122   Src = ConstantExpr::getBitCast(Src, PointerType::getUnqual(LoadTy));
1123   if (ConstantFoldLoadFromConstPtr(Src, &TD))
1124     return Offset;
1125   return -1;
1126 }
1127                                             
1128
1129 /// GetStoreValueForLoad - This function is called when we have a
1130 /// memdep query of a load that ends up being a clobbering store.  This means
1131 /// that the store *may* provide bits used by the load but we can't be sure
1132 /// because the pointers don't mustalias.  Check this case to see if there is
1133 /// anything more we can do before we give up.
1134 static Value *GetStoreValueForLoad(Value *SrcVal, unsigned Offset,
1135                                    const Type *LoadTy,
1136                                    Instruction *InsertPt, const TargetData &TD){
1137   LLVMContext &Ctx = SrcVal->getType()->getContext();
1138   
1139   uint64_t StoreSize = (TD.getTypeSizeInBits(SrcVal->getType()) + 7) / 8;
1140   uint64_t LoadSize = (TD.getTypeSizeInBits(LoadTy) + 7) / 8;
1141   
1142   IRBuilder<> Builder(InsertPt->getParent(), InsertPt);
1143   
1144   // Compute which bits of the stored value are being used by the load.  Convert
1145   // to an integer type to start with.
1146   if (SrcVal->getType()->isPointerTy())
1147     SrcVal = Builder.CreatePtrToInt(SrcVal, TD.getIntPtrType(Ctx), "tmp");
1148   if (!SrcVal->getType()->isIntegerTy())
1149     SrcVal = Builder.CreateBitCast(SrcVal, IntegerType::get(Ctx, StoreSize*8),
1150                                    "tmp");
1151   
1152   // Shift the bits to the least significant depending on endianness.
1153   unsigned ShiftAmt;
1154   if (TD.isLittleEndian())
1155     ShiftAmt = Offset*8;
1156   else
1157     ShiftAmt = (StoreSize-LoadSize-Offset)*8;
1158   
1159   if (ShiftAmt)
1160     SrcVal = Builder.CreateLShr(SrcVal, ShiftAmt, "tmp");
1161   
1162   if (LoadSize != StoreSize)
1163     SrcVal = Builder.CreateTrunc(SrcVal, IntegerType::get(Ctx, LoadSize*8),
1164                                  "tmp");
1165   
1166   return CoerceAvailableValueToLoadType(SrcVal, LoadTy, InsertPt, TD);
1167 }
1168
1169 /// GetMemInstValueForLoad - This function is called when we have a
1170 /// memdep query of a load that ends up being a clobbering mem intrinsic.
1171 static Value *GetMemInstValueForLoad(MemIntrinsic *SrcInst, unsigned Offset,
1172                                      const Type *LoadTy, Instruction *InsertPt,
1173                                      const TargetData &TD){
1174   LLVMContext &Ctx = LoadTy->getContext();
1175   uint64_t LoadSize = TD.getTypeSizeInBits(LoadTy)/8;
1176
1177   IRBuilder<> Builder(InsertPt->getParent(), InsertPt);
1178   
1179   // We know that this method is only called when the mem transfer fully
1180   // provides the bits for the load.
1181   if (MemSetInst *MSI = dyn_cast<MemSetInst>(SrcInst)) {
1182     // memset(P, 'x', 1234) -> splat('x'), even if x is a variable, and
1183     // independently of what the offset is.
1184     Value *Val = MSI->getValue();
1185     if (LoadSize != 1)
1186       Val = Builder.CreateZExt(Val, IntegerType::get(Ctx, LoadSize*8));
1187     
1188     Value *OneElt = Val;
1189     
1190     // Splat the value out to the right number of bits.
1191     for (unsigned NumBytesSet = 1; NumBytesSet != LoadSize; ) {
1192       // If we can double the number of bytes set, do it.
1193       if (NumBytesSet*2 <= LoadSize) {
1194         Value *ShVal = Builder.CreateShl(Val, NumBytesSet*8);
1195         Val = Builder.CreateOr(Val, ShVal);
1196         NumBytesSet <<= 1;
1197         continue;
1198       }
1199       
1200       // Otherwise insert one byte at a time.
1201       Value *ShVal = Builder.CreateShl(Val, 1*8);
1202       Val = Builder.CreateOr(OneElt, ShVal);
1203       ++NumBytesSet;
1204     }
1205     
1206     return CoerceAvailableValueToLoadType(Val, LoadTy, InsertPt, TD);
1207   }
1208  
1209   // Otherwise, this is a memcpy/memmove from a constant global.
1210   MemTransferInst *MTI = cast<MemTransferInst>(SrcInst);
1211   Constant *Src = cast<Constant>(MTI->getSource());
1212
1213   // Otherwise, see if we can constant fold a load from the constant with the
1214   // offset applied as appropriate.
1215   Src = ConstantExpr::getBitCast(Src,
1216                                  llvm::Type::getInt8PtrTy(Src->getContext()));
1217   Constant *OffsetCst = 
1218   ConstantInt::get(Type::getInt64Ty(Src->getContext()), (unsigned)Offset);
1219   Src = ConstantExpr::getGetElementPtr(Src, &OffsetCst, 1);
1220   Src = ConstantExpr::getBitCast(Src, PointerType::getUnqual(LoadTy));
1221   return ConstantFoldLoadFromConstPtr(Src, &TD);
1222 }
1223
1224 namespace {
1225
1226 struct AvailableValueInBlock {
1227   /// BB - The basic block in question.
1228   BasicBlock *BB;
1229   enum ValType {
1230     SimpleVal,  // A simple offsetted value that is accessed.
1231     MemIntrin   // A memory intrinsic which is loaded from.
1232   };
1233   
1234   /// V - The value that is live out of the block.
1235   PointerIntPair<Value *, 1, ValType> Val;
1236   
1237   /// Offset - The byte offset in Val that is interesting for the load query.
1238   unsigned Offset;
1239   
1240   static AvailableValueInBlock get(BasicBlock *BB, Value *V,
1241                                    unsigned Offset = 0) {
1242     AvailableValueInBlock Res;
1243     Res.BB = BB;
1244     Res.Val.setPointer(V);
1245     Res.Val.setInt(SimpleVal);
1246     Res.Offset = Offset;
1247     return Res;
1248   }
1249
1250   static AvailableValueInBlock getMI(BasicBlock *BB, MemIntrinsic *MI,
1251                                      unsigned Offset = 0) {
1252     AvailableValueInBlock Res;
1253     Res.BB = BB;
1254     Res.Val.setPointer(MI);
1255     Res.Val.setInt(MemIntrin);
1256     Res.Offset = Offset;
1257     return Res;
1258   }
1259   
1260   bool isSimpleValue() const { return Val.getInt() == SimpleVal; }
1261   Value *getSimpleValue() const {
1262     assert(isSimpleValue() && "Wrong accessor");
1263     return Val.getPointer();
1264   }
1265   
1266   MemIntrinsic *getMemIntrinValue() const {
1267     assert(!isSimpleValue() && "Wrong accessor");
1268     return cast<MemIntrinsic>(Val.getPointer());
1269   }
1270   
1271   /// MaterializeAdjustedValue - Emit code into this block to adjust the value
1272   /// defined here to the specified type.  This handles various coercion cases.
1273   Value *MaterializeAdjustedValue(const Type *LoadTy,
1274                                   const TargetData *TD) const {
1275     Value *Res;
1276     if (isSimpleValue()) {
1277       Res = getSimpleValue();
1278       if (Res->getType() != LoadTy) {
1279         assert(TD && "Need target data to handle type mismatch case");
1280         Res = GetStoreValueForLoad(Res, Offset, LoadTy, BB->getTerminator(),
1281                                    *TD);
1282         
1283         DEBUG(errs() << "GVN COERCED NONLOCAL VAL:\nOffset: " << Offset << "  "
1284                      << *getSimpleValue() << '\n'
1285                      << *Res << '\n' << "\n\n\n");
1286       }
1287     } else {
1288       Res = GetMemInstValueForLoad(getMemIntrinValue(), Offset,
1289                                    LoadTy, BB->getTerminator(), *TD);
1290       DEBUG(errs() << "GVN COERCED NONLOCAL MEM INTRIN:\nOffset: " << Offset
1291                    << "  " << *getMemIntrinValue() << '\n'
1292                    << *Res << '\n' << "\n\n\n");
1293     }
1294     return Res;
1295   }
1296 };
1297
1298 }
1299
1300 /// ConstructSSAForLoadSet - Given a set of loads specified by ValuesPerBlock,
1301 /// construct SSA form, allowing us to eliminate LI.  This returns the value
1302 /// that should be used at LI's definition site.
1303 static Value *ConstructSSAForLoadSet(LoadInst *LI, 
1304                          SmallVectorImpl<AvailableValueInBlock> &ValuesPerBlock,
1305                                      const TargetData *TD,
1306                                      const DominatorTree &DT,
1307                                      AliasAnalysis *AA) {
1308   // Check for the fully redundant, dominating load case.  In this case, we can
1309   // just use the dominating value directly.
1310   if (ValuesPerBlock.size() == 1 && 
1311       DT.properlyDominates(ValuesPerBlock[0].BB, LI->getParent()))
1312     return ValuesPerBlock[0].MaterializeAdjustedValue(LI->getType(), TD);
1313
1314   // Otherwise, we have to construct SSA form.
1315   SmallVector<PHINode*, 8> NewPHIs;
1316   SSAUpdater SSAUpdate(&NewPHIs);
1317   SSAUpdate.Initialize(LI->getType(), LI->getName());
1318   
1319   const Type *LoadTy = LI->getType();
1320   
1321   for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i) {
1322     const AvailableValueInBlock &AV = ValuesPerBlock[i];
1323     BasicBlock *BB = AV.BB;
1324     
1325     if (SSAUpdate.HasValueForBlock(BB))
1326       continue;
1327
1328     SSAUpdate.AddAvailableValue(BB, AV.MaterializeAdjustedValue(LoadTy, TD));
1329   }
1330   
1331   // Perform PHI construction.
1332   Value *V = SSAUpdate.GetValueInMiddleOfBlock(LI->getParent());
1333   
1334   // If new PHI nodes were created, notify alias analysis.
1335   if (V->getType()->isPointerTy())
1336     for (unsigned i = 0, e = NewPHIs.size(); i != e; ++i)
1337       AA->copyValue(LI, NewPHIs[i]);
1338
1339   return V;
1340 }
1341
1342 static bool isLifetimeStart(const Instruction *Inst) {
1343   if (const IntrinsicInst* II = dyn_cast<IntrinsicInst>(Inst))
1344     return II->getIntrinsicID() == Intrinsic::lifetime_start;
1345   return false;
1346 }
1347
1348 /// processNonLocalLoad - Attempt to eliminate a load whose dependencies are
1349 /// non-local by performing PHI construction.
1350 bool GVN::processNonLocalLoad(LoadInst *LI,
1351                               SmallVectorImpl<Instruction*> &toErase) {
1352   // Find the non-local dependencies of the load.
1353   SmallVector<NonLocalDepResult, 64> Deps;
1354   MD->getNonLocalPointerDependency(LI->getPointerOperand(), true,
1355                                    LI->getParent(),
1356                                    Deps);
1357   //DEBUG(dbgs() << "INVESTIGATING NONLOCAL LOAD: "
1358   //             << Deps.size() << *LI << '\n');
1359
1360   // If we had to process more than one hundred blocks to find the
1361   // dependencies, this load isn't worth worrying about.  Optimizing
1362   // it will be too expensive.
1363   if (Deps.size() > 100)
1364     return false;
1365
1366   // If we had a phi translation failure, we'll have a single entry which is a
1367   // clobber in the current block.  Reject this early.
1368   if (Deps.size() == 1 && Deps[0].getResult().isClobber()) {
1369     DEBUG(
1370       dbgs() << "GVN: non-local load ";
1371       WriteAsOperand(dbgs(), LI);
1372       dbgs() << " is clobbered by " << *Deps[0].getResult().getInst() << '\n';
1373     );
1374     return false;
1375   }
1376
1377   // Filter out useless results (non-locals, etc).  Keep track of the blocks
1378   // where we have a value available in repl, also keep track of whether we see
1379   // dependencies that produce an unknown value for the load (such as a call
1380   // that could potentially clobber the load).
1381   SmallVector<AvailableValueInBlock, 16> ValuesPerBlock;
1382   SmallVector<BasicBlock*, 16> UnavailableBlocks;
1383
1384   const TargetData *TD = 0;
1385   
1386   for (unsigned i = 0, e = Deps.size(); i != e; ++i) {
1387     BasicBlock *DepBB = Deps[i].getBB();
1388     MemDepResult DepInfo = Deps[i].getResult();
1389
1390     if (DepInfo.isClobber()) {
1391       // The address being loaded in this non-local block may not be the same as
1392       // the pointer operand of the load if PHI translation occurs.  Make sure
1393       // to consider the right address.
1394       Value *Address = Deps[i].getAddress();
1395       
1396       // If the dependence is to a store that writes to a superset of the bits
1397       // read by the load, we can extract the bits we need for the load from the
1398       // stored value.
1399       if (StoreInst *DepSI = dyn_cast<StoreInst>(DepInfo.getInst())) {
1400         if (TD == 0)
1401           TD = getAnalysisIfAvailable<TargetData>();
1402         if (TD && Address) {
1403           int Offset = AnalyzeLoadFromClobberingStore(LI->getType(), Address,
1404                                                       DepSI, *TD);
1405           if (Offset != -1) {
1406             ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
1407                                                        DepSI->getValueOperand(),
1408                                                                 Offset));
1409             continue;
1410           }
1411         }
1412       }
1413
1414       // If the clobbering value is a memset/memcpy/memmove, see if we can
1415       // forward a value on from it.
1416       if (MemIntrinsic *DepMI = dyn_cast<MemIntrinsic>(DepInfo.getInst())) {
1417         if (TD == 0)
1418           TD = getAnalysisIfAvailable<TargetData>();
1419         if (TD && Address) {
1420           int Offset = AnalyzeLoadFromClobberingMemInst(LI->getType(), Address,
1421                                                         DepMI, *TD);
1422           if (Offset != -1) {
1423             ValuesPerBlock.push_back(AvailableValueInBlock::getMI(DepBB, DepMI,
1424                                                                   Offset));
1425             continue;
1426           }            
1427         }
1428       }
1429       
1430       UnavailableBlocks.push_back(DepBB);
1431       continue;
1432     }
1433
1434     Instruction *DepInst = DepInfo.getInst();
1435
1436     // Loading the allocation -> undef.
1437     if (isa<AllocaInst>(DepInst) || isMalloc(DepInst) ||
1438         // Loading immediately after lifetime begin -> undef.
1439         isLifetimeStart(DepInst)) {
1440       ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
1441                                              UndefValue::get(LI->getType())));
1442       continue;
1443     }
1444     
1445     if (StoreInst *S = dyn_cast<StoreInst>(DepInst)) {
1446       // Reject loads and stores that are to the same address but are of
1447       // different types if we have to.
1448       if (S->getValueOperand()->getType() != LI->getType()) {
1449         if (TD == 0)
1450           TD = getAnalysisIfAvailable<TargetData>();
1451         
1452         // If the stored value is larger or equal to the loaded value, we can
1453         // reuse it.
1454         if (TD == 0 || !CanCoerceMustAliasedValueToLoad(S->getValueOperand(),
1455                                                         LI->getType(), *TD)) {
1456           UnavailableBlocks.push_back(DepBB);
1457           continue;
1458         }
1459       }
1460
1461       ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB,
1462                                                          S->getValueOperand()));
1463       continue;
1464     }
1465     
1466     if (LoadInst *LD = dyn_cast<LoadInst>(DepInst)) {
1467       // If the types mismatch and we can't handle it, reject reuse of the load.
1468       if (LD->getType() != LI->getType()) {
1469         if (TD == 0)
1470           TD = getAnalysisIfAvailable<TargetData>();
1471         
1472         // If the stored value is larger or equal to the loaded value, we can
1473         // reuse it.
1474         if (TD == 0 || !CanCoerceMustAliasedValueToLoad(LD, LI->getType(),*TD)){
1475           UnavailableBlocks.push_back(DepBB);
1476           continue;
1477         }          
1478       }
1479       ValuesPerBlock.push_back(AvailableValueInBlock::get(DepBB, LD));
1480       continue;
1481     }
1482     
1483     UnavailableBlocks.push_back(DepBB);
1484     continue;
1485   }
1486
1487   // If we have no predecessors that produce a known value for this load, exit
1488   // early.
1489   if (ValuesPerBlock.empty()) return false;
1490
1491   // If all of the instructions we depend on produce a known value for this
1492   // load, then it is fully redundant and we can use PHI insertion to compute
1493   // its value.  Insert PHIs and remove the fully redundant value now.
1494   if (UnavailableBlocks.empty()) {
1495     DEBUG(dbgs() << "GVN REMOVING NONLOCAL LOAD: " << *LI << '\n');
1496     
1497     // Perform PHI construction.
1498     Value *V = ConstructSSAForLoadSet(LI, ValuesPerBlock, TD, *DT,
1499                                       VN.getAliasAnalysis());
1500     LI->replaceAllUsesWith(V);
1501
1502     if (isa<PHINode>(V))
1503       V->takeName(LI);
1504     if (V->getType()->isPointerTy())
1505       MD->invalidateCachedPointerInfo(V);
1506     VN.erase(LI);
1507     toErase.push_back(LI);
1508     ++NumGVNLoad;
1509     return true;
1510   }
1511
1512   if (!EnablePRE || !EnableLoadPRE)
1513     return false;
1514
1515   // Okay, we have *some* definitions of the value.  This means that the value
1516   // is available in some of our (transitive) predecessors.  Lets think about
1517   // doing PRE of this load.  This will involve inserting a new load into the
1518   // predecessor when it's not available.  We could do this in general, but
1519   // prefer to not increase code size.  As such, we only do this when we know
1520   // that we only have to insert *one* load (which means we're basically moving
1521   // the load, not inserting a new one).
1522
1523   SmallPtrSet<BasicBlock *, 4> Blockers;
1524   for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
1525     Blockers.insert(UnavailableBlocks[i]);
1526
1527   // Lets find first basic block with more than one predecessor.  Walk backwards
1528   // through predecessors if needed.
1529   BasicBlock *LoadBB = LI->getParent();
1530   BasicBlock *TmpBB = LoadBB;
1531
1532   bool isSinglePred = false;
1533   bool allSingleSucc = true;
1534   while (TmpBB->getSinglePredecessor()) {
1535     isSinglePred = true;
1536     TmpBB = TmpBB->getSinglePredecessor();
1537     if (TmpBB == LoadBB) // Infinite (unreachable) loop.
1538       return false;
1539     if (Blockers.count(TmpBB))
1540       return false;
1541     
1542     // If any of these blocks has more than one successor (i.e. if the edge we
1543     // just traversed was critical), then there are other paths through this 
1544     // block along which the load may not be anticipated.  Hoisting the load 
1545     // above this block would be adding the load to execution paths along
1546     // which it was not previously executed.
1547     if (TmpBB->getTerminator()->getNumSuccessors() != 1)
1548       return false;
1549   }
1550
1551   assert(TmpBB);
1552   LoadBB = TmpBB;
1553
1554   // FIXME: It is extremely unclear what this loop is doing, other than
1555   // artificially restricting loadpre.
1556   if (isSinglePred) {
1557     bool isHot = false;
1558     for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i) {
1559       const AvailableValueInBlock &AV = ValuesPerBlock[i];
1560       if (AV.isSimpleValue())
1561         // "Hot" Instruction is in some loop (because it dominates its dep.
1562         // instruction).
1563         if (Instruction *I = dyn_cast<Instruction>(AV.getSimpleValue()))
1564           if (DT->dominates(LI, I)) {
1565             isHot = true;
1566             break;
1567           }
1568     }
1569
1570     // We are interested only in "hot" instructions. We don't want to do any
1571     // mis-optimizations here.
1572     if (!isHot)
1573       return false;
1574   }
1575
1576   // Check to see how many predecessors have the loaded value fully
1577   // available.
1578   DenseMap<BasicBlock*, Value*> PredLoads;
1579   DenseMap<BasicBlock*, char> FullyAvailableBlocks;
1580   for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i)
1581     FullyAvailableBlocks[ValuesPerBlock[i].BB] = true;
1582   for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
1583     FullyAvailableBlocks[UnavailableBlocks[i]] = false;
1584
1585   SmallVector<std::pair<TerminatorInst*, unsigned>, 4> NeedToSplit;
1586   for (pred_iterator PI = pred_begin(LoadBB), E = pred_end(LoadBB);
1587        PI != E; ++PI) {
1588     BasicBlock *Pred = *PI;
1589     if (IsValueFullyAvailableInBlock(Pred, FullyAvailableBlocks)) {
1590       continue;
1591     }
1592     PredLoads[Pred] = 0;
1593
1594     if (Pred->getTerminator()->getNumSuccessors() != 1) {
1595       if (isa<IndirectBrInst>(Pred->getTerminator())) {
1596         DEBUG(dbgs() << "COULD NOT PRE LOAD BECAUSE OF INDBR CRITICAL EDGE '"
1597               << Pred->getName() << "': " << *LI << '\n');
1598         return false;
1599       }
1600       unsigned SuccNum = GetSuccessorNumber(Pred, LoadBB);
1601       NeedToSplit.push_back(std::make_pair(Pred->getTerminator(), SuccNum));
1602     }
1603   }
1604   if (!NeedToSplit.empty()) {
1605     toSplit.append(NeedToSplit.begin(), NeedToSplit.end());
1606     return false;
1607   }
1608
1609   // Decide whether PRE is profitable for this load.
1610   unsigned NumUnavailablePreds = PredLoads.size();
1611   assert(NumUnavailablePreds != 0 &&
1612          "Fully available value should be eliminated above!");
1613   
1614   // If this load is unavailable in multiple predecessors, reject it.
1615   // FIXME: If we could restructure the CFG, we could make a common pred with
1616   // all the preds that don't have an available LI and insert a new load into
1617   // that one block.
1618   if (NumUnavailablePreds != 1)
1619       return false;
1620
1621   // Check if the load can safely be moved to all the unavailable predecessors.
1622   bool CanDoPRE = true;
1623   SmallVector<Instruction*, 8> NewInsts;
1624   for (DenseMap<BasicBlock*, Value*>::iterator I = PredLoads.begin(),
1625          E = PredLoads.end(); I != E; ++I) {
1626     BasicBlock *UnavailablePred = I->first;
1627
1628     // Do PHI translation to get its value in the predecessor if necessary.  The
1629     // returned pointer (if non-null) is guaranteed to dominate UnavailablePred.
1630
1631     // If all preds have a single successor, then we know it is safe to insert
1632     // the load on the pred (?!?), so we can insert code to materialize the
1633     // pointer if it is not available.
1634     PHITransAddr Address(LI->getPointerOperand(), TD);
1635     Value *LoadPtr = 0;
1636     if (allSingleSucc) {
1637       LoadPtr = Address.PHITranslateWithInsertion(LoadBB, UnavailablePred,
1638                                                   *DT, NewInsts);
1639     } else {
1640       Address.PHITranslateValue(LoadBB, UnavailablePred, DT);
1641       LoadPtr = Address.getAddr();
1642     }
1643
1644     // If we couldn't find or insert a computation of this phi translated value,
1645     // we fail PRE.
1646     if (LoadPtr == 0) {
1647       DEBUG(dbgs() << "COULDN'T INSERT PHI TRANSLATED VALUE OF: "
1648             << *LI->getPointerOperand() << "\n");
1649       CanDoPRE = false;
1650       break;
1651     }
1652
1653     // Make sure it is valid to move this load here.  We have to watch out for:
1654     //  @1 = getelementptr (i8* p, ...
1655     //  test p and branch if == 0
1656     //  load @1
1657     // It is valid to have the getelementptr before the test, even if p can be 0,
1658     // as getelementptr only does address arithmetic.
1659     // If we are not pushing the value through any multiple-successor blocks
1660     // we do not have this case.  Otherwise, check that the load is safe to
1661     // put anywhere; this can be improved, but should be conservatively safe.
1662     if (!allSingleSucc &&
1663         // FIXME: REEVALUTE THIS.
1664         !isSafeToLoadUnconditionally(LoadPtr,
1665                                      UnavailablePred->getTerminator(),
1666                                      LI->getAlignment(), TD)) {
1667       CanDoPRE = false;
1668       break;
1669     }
1670
1671     I->second = LoadPtr;
1672   }
1673
1674   if (!CanDoPRE) {
1675     while (!NewInsts.empty())
1676       NewInsts.pop_back_val()->eraseFromParent();
1677     return false;
1678   }
1679
1680   // Okay, we can eliminate this load by inserting a reload in the predecessor
1681   // and using PHI construction to get the value in the other predecessors, do
1682   // it.
1683   DEBUG(dbgs() << "GVN REMOVING PRE LOAD: " << *LI << '\n');
1684   DEBUG(if (!NewInsts.empty())
1685           dbgs() << "INSERTED " << NewInsts.size() << " INSTS: "
1686                  << *NewInsts.back() << '\n');
1687   
1688   // Assign value numbers to the new instructions.
1689   for (unsigned i = 0, e = NewInsts.size(); i != e; ++i) {
1690     // FIXME: We really _ought_ to insert these value numbers into their 
1691     // parent's availability map.  However, in doing so, we risk getting into
1692     // ordering issues.  If a block hasn't been processed yet, we would be
1693     // marking a value as AVAIL-IN, which isn't what we intend.
1694     VN.lookup_or_add(NewInsts[i]);
1695   }
1696
1697   for (DenseMap<BasicBlock*, Value*>::iterator I = PredLoads.begin(),
1698          E = PredLoads.end(); I != E; ++I) {
1699     BasicBlock *UnavailablePred = I->first;
1700     Value *LoadPtr = I->second;
1701
1702     Value *NewLoad = new LoadInst(LoadPtr, LI->getName()+".pre", false,
1703                                   LI->getAlignment(),
1704                                   UnavailablePred->getTerminator());
1705
1706     // Add the newly created load.
1707     ValuesPerBlock.push_back(AvailableValueInBlock::get(UnavailablePred,
1708                                                         NewLoad));
1709     MD->invalidateCachedPointerInfo(LoadPtr);
1710     DEBUG(dbgs() << "GVN INSERTED " << *NewLoad << '\n');
1711   }
1712
1713   // Perform PHI construction.
1714   Value *V = ConstructSSAForLoadSet(LI, ValuesPerBlock, TD, *DT,
1715                                     VN.getAliasAnalysis());
1716   LI->replaceAllUsesWith(V);
1717   if (isa<PHINode>(V))
1718     V->takeName(LI);
1719   if (V->getType()->isPointerTy())
1720     MD->invalidateCachedPointerInfo(V);
1721   VN.erase(LI);
1722   toErase.push_back(LI);
1723   ++NumPRELoad;
1724   return true;
1725 }
1726
1727 /// processLoad - Attempt to eliminate a load, first by eliminating it
1728 /// locally, and then attempting non-local elimination if that fails.
1729 bool GVN::processLoad(LoadInst *L, SmallVectorImpl<Instruction*> &toErase) {
1730   if (!MD)
1731     return false;
1732
1733   if (L->isVolatile())
1734     return false;
1735
1736   // ... to a pointer that has been loaded from before...
1737   MemDepResult Dep = MD->getDependency(L);
1738
1739   // If the value isn't available, don't do anything!
1740   if (Dep.isClobber()) {
1741     // Check to see if we have something like this:
1742     //   store i32 123, i32* %P
1743     //   %A = bitcast i32* %P to i8*
1744     //   %B = gep i8* %A, i32 1
1745     //   %C = load i8* %B
1746     //
1747     // We could do that by recognizing if the clobber instructions are obviously
1748     // a common base + constant offset, and if the previous store (or memset)
1749     // completely covers this load.  This sort of thing can happen in bitfield
1750     // access code.
1751     Value *AvailVal = 0;
1752     if (StoreInst *DepSI = dyn_cast<StoreInst>(Dep.getInst()))
1753       if (const TargetData *TD = getAnalysisIfAvailable<TargetData>()) {
1754         int Offset = AnalyzeLoadFromClobberingStore(L->getType(),
1755                                                     L->getPointerOperand(),
1756                                                     DepSI, *TD);
1757         if (Offset != -1)
1758           AvailVal = GetStoreValueForLoad(DepSI->getValueOperand(), Offset,
1759                                           L->getType(), L, *TD);
1760       }
1761     
1762     // If the clobbering value is a memset/memcpy/memmove, see if we can forward
1763     // a value on from it.
1764     if (MemIntrinsic *DepMI = dyn_cast<MemIntrinsic>(Dep.getInst())) {
1765       if (const TargetData *TD = getAnalysisIfAvailable<TargetData>()) {
1766         int Offset = AnalyzeLoadFromClobberingMemInst(L->getType(),
1767                                                       L->getPointerOperand(),
1768                                                       DepMI, *TD);
1769         if (Offset != -1)
1770           AvailVal = GetMemInstValueForLoad(DepMI, Offset, L->getType(), L,*TD);
1771       }
1772     }
1773         
1774     if (AvailVal) {
1775       DEBUG(dbgs() << "GVN COERCED INST:\n" << *Dep.getInst() << '\n'
1776             << *AvailVal << '\n' << *L << "\n\n\n");
1777       
1778       // Replace the load!
1779       L->replaceAllUsesWith(AvailVal);
1780       if (AvailVal->getType()->isPointerTy())
1781         MD->invalidateCachedPointerInfo(AvailVal);
1782       VN.erase(L);
1783       toErase.push_back(L);
1784       ++NumGVNLoad;
1785       return true;
1786     }
1787         
1788     DEBUG(
1789       // fast print dep, using operator<< on instruction would be too slow
1790       dbgs() << "GVN: load ";
1791       WriteAsOperand(dbgs(), L);
1792       Instruction *I = Dep.getInst();
1793       dbgs() << " is clobbered by " << *I << '\n';
1794     );
1795     return false;
1796   }
1797
1798   // If it is defined in another block, try harder.
1799   if (Dep.isNonLocal())
1800     return processNonLocalLoad(L, toErase);
1801
1802   Instruction *DepInst = Dep.getInst();
1803   if (StoreInst *DepSI = dyn_cast<StoreInst>(DepInst)) {
1804     Value *StoredVal = DepSI->getValueOperand();
1805     
1806     // The store and load are to a must-aliased pointer, but they may not
1807     // actually have the same type.  See if we know how to reuse the stored
1808     // value (depending on its type).
1809     const TargetData *TD = 0;
1810     if (StoredVal->getType() != L->getType()) {
1811       if ((TD = getAnalysisIfAvailable<TargetData>())) {
1812         StoredVal = CoerceAvailableValueToLoadType(StoredVal, L->getType(),
1813                                                    L, *TD);
1814         if (StoredVal == 0)
1815           return false;
1816         
1817         DEBUG(dbgs() << "GVN COERCED STORE:\n" << *DepSI << '\n' << *StoredVal
1818                      << '\n' << *L << "\n\n\n");
1819       }
1820       else 
1821         return false;
1822     }
1823
1824     // Remove it!
1825     L->replaceAllUsesWith(StoredVal);
1826     if (StoredVal->getType()->isPointerTy())
1827       MD->invalidateCachedPointerInfo(StoredVal);
1828     VN.erase(L);
1829     toErase.push_back(L);
1830     ++NumGVNLoad;
1831     return true;
1832   }
1833
1834   if (LoadInst *DepLI = dyn_cast<LoadInst>(DepInst)) {
1835     Value *AvailableVal = DepLI;
1836     
1837     // The loads are of a must-aliased pointer, but they may not actually have
1838     // the same type.  See if we know how to reuse the previously loaded value
1839     // (depending on its type).
1840     const TargetData *TD = 0;
1841     if (DepLI->getType() != L->getType()) {
1842       if ((TD = getAnalysisIfAvailable<TargetData>())) {
1843         AvailableVal = CoerceAvailableValueToLoadType(DepLI, L->getType(), L,*TD);
1844         if (AvailableVal == 0)
1845           return false;
1846       
1847         DEBUG(dbgs() << "GVN COERCED LOAD:\n" << *DepLI << "\n" << *AvailableVal
1848                      << "\n" << *L << "\n\n\n");
1849       }
1850       else 
1851         return false;
1852     }
1853     
1854     // Remove it!
1855     L->replaceAllUsesWith(AvailableVal);
1856     if (DepLI->getType()->isPointerTy())
1857       MD->invalidateCachedPointerInfo(DepLI);
1858     VN.erase(L);
1859     toErase.push_back(L);
1860     ++NumGVNLoad;
1861     return true;
1862   }
1863
1864   // If this load really doesn't depend on anything, then we must be loading an
1865   // undef value.  This can happen when loading for a fresh allocation with no
1866   // intervening stores, for example.
1867   if (isa<AllocaInst>(DepInst) || isMalloc(DepInst)) {
1868     L->replaceAllUsesWith(UndefValue::get(L->getType()));
1869     VN.erase(L);
1870     toErase.push_back(L);
1871     ++NumGVNLoad;
1872     return true;
1873   }
1874   
1875   // If this load occurs either right after a lifetime begin,
1876   // then the loaded value is undefined.
1877   if (IntrinsicInst* II = dyn_cast<IntrinsicInst>(DepInst)) {
1878     if (II->getIntrinsicID() == Intrinsic::lifetime_start) {
1879       L->replaceAllUsesWith(UndefValue::get(L->getType()));
1880       VN.erase(L);
1881       toErase.push_back(L);
1882       ++NumGVNLoad;
1883       return true;
1884     }
1885   }
1886
1887   return false;
1888 }
1889
1890 Value *GVN::lookupNumber(BasicBlock *BB, uint32_t num) {
1891   DenseMap<BasicBlock*, ValueNumberScope*>::iterator I = localAvail.find(BB);
1892   if (I == localAvail.end())
1893     return 0;
1894
1895   ValueNumberScope *Locals = I->second;
1896   while (Locals) {
1897     DenseMap<uint32_t, Value*>::iterator I = Locals->table.find(num);
1898     if (I != Locals->table.end())
1899       return I->second;
1900     Locals = Locals->parent;
1901   }
1902
1903   return 0;
1904 }
1905
1906
1907 /// processInstruction - When calculating availability, handle an instruction
1908 /// by inserting it into the appropriate sets
1909 bool GVN::processInstruction(Instruction *I,
1910                              SmallVectorImpl<Instruction*> &toErase) {
1911   // Ignore dbg info intrinsics.
1912   if (isa<DbgInfoIntrinsic>(I))
1913     return false;
1914
1915   if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
1916     bool Changed = processLoad(LI, toErase);
1917
1918     if (!Changed) {
1919       unsigned Num = VN.lookup_or_add(LI);
1920       localAvail[I->getParent()]->table.insert(std::make_pair(Num, LI));
1921     }
1922
1923     return Changed;
1924   }
1925
1926   uint32_t NextNum = VN.getNextUnusedValueNumber();
1927   unsigned Num = VN.lookup_or_add(I);
1928
1929   if (BranchInst *BI = dyn_cast<BranchInst>(I)) {
1930     localAvail[I->getParent()]->table.insert(std::make_pair(Num, I));
1931
1932     if (!BI->isConditional() || isa<Constant>(BI->getCondition()))
1933       return false;
1934
1935     Value *BranchCond = BI->getCondition();
1936     uint32_t CondVN = VN.lookup_or_add(BranchCond);
1937
1938     BasicBlock *TrueSucc = BI->getSuccessor(0);
1939     BasicBlock *FalseSucc = BI->getSuccessor(1);
1940
1941     if (TrueSucc->getSinglePredecessor())
1942       localAvail[TrueSucc]->table[CondVN] =
1943         ConstantInt::getTrue(TrueSucc->getContext());
1944     if (FalseSucc->getSinglePredecessor())
1945       localAvail[FalseSucc]->table[CondVN] =
1946         ConstantInt::getFalse(TrueSucc->getContext());
1947
1948     return false;
1949
1950   // Allocations are always uniquely numbered, so we can save time and memory
1951   // by fast failing them.
1952   } else if (isa<AllocaInst>(I) || isa<TerminatorInst>(I)) {
1953     localAvail[I->getParent()]->table.insert(std::make_pair(Num, I));
1954     return false;
1955   }
1956
1957   // Collapse PHI nodes
1958   if (PHINode* p = dyn_cast<PHINode>(I)) {
1959     Value *constVal = CollapsePhi(p);
1960
1961     if (constVal) {
1962       p->replaceAllUsesWith(constVal);
1963       if (MD && constVal->getType()->isPointerTy())
1964         MD->invalidateCachedPointerInfo(constVal);
1965       VN.erase(p);
1966
1967       toErase.push_back(p);
1968     } else {
1969       localAvail[I->getParent()]->table.insert(std::make_pair(Num, I));
1970     }
1971
1972   // If the number we were assigned was a brand new VN, then we don't
1973   // need to do a lookup to see if the number already exists
1974   // somewhere in the domtree: it can't!
1975   } else if (Num == NextNum) {
1976     localAvail[I->getParent()]->table.insert(std::make_pair(Num, I));
1977
1978   // Perform fast-path value-number based elimination of values inherited from
1979   // dominators.
1980   } else if (Value *repl = lookupNumber(I->getParent(), Num)) {
1981     // Remove it!
1982     VN.erase(I);
1983     I->replaceAllUsesWith(repl);
1984     if (MD && repl->getType()->isPointerTy())
1985       MD->invalidateCachedPointerInfo(repl);
1986     toErase.push_back(I);
1987     return true;
1988
1989   } else {
1990     localAvail[I->getParent()]->table.insert(std::make_pair(Num, I));
1991   }
1992
1993   return false;
1994 }
1995
1996 /// runOnFunction - This is the main transformation entry point for a function.
1997 bool GVN::runOnFunction(Function& F) {
1998   if (!NoLoads)
1999     MD = &getAnalysis<MemoryDependenceAnalysis>();
2000   DT = &getAnalysis<DominatorTree>();
2001   VN.setAliasAnalysis(&getAnalysis<AliasAnalysis>());
2002   VN.setMemDep(MD);
2003   VN.setDomTree(DT);
2004
2005   bool Changed = false;
2006   bool ShouldContinue = true;
2007
2008   // Merge unconditional branches, allowing PRE to catch more
2009   // optimization opportunities.
2010   for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ) {
2011     BasicBlock *BB = FI;
2012     ++FI;
2013     bool removedBlock = MergeBlockIntoPredecessor(BB, this);
2014     if (removedBlock) ++NumGVNBlocks;
2015
2016     Changed |= removedBlock;
2017   }
2018
2019   unsigned Iteration = 0;
2020
2021   while (ShouldContinue) {
2022     DEBUG(dbgs() << "GVN iteration: " << Iteration << "\n");
2023     ShouldContinue = iterateOnFunction(F);
2024     if (splitCriticalEdges())
2025       ShouldContinue = true;
2026     Changed |= ShouldContinue;
2027     ++Iteration;
2028   }
2029
2030   if (EnablePRE) {
2031     bool PREChanged = true;
2032     while (PREChanged) {
2033       PREChanged = performPRE(F);
2034       Changed |= PREChanged;
2035     }
2036   }
2037   // FIXME: Should perform GVN again after PRE does something.  PRE can move
2038   // computations into blocks where they become fully redundant.  Note that
2039   // we can't do this until PRE's critical edge splitting updates memdep.
2040   // Actually, when this happens, we should just fully integrate PRE into GVN.
2041
2042   cleanupGlobalSets();
2043
2044   return Changed;
2045 }
2046
2047
2048 bool GVN::processBlock(BasicBlock *BB) {
2049   // FIXME: Kill off toErase by doing erasing eagerly in a helper function (and
2050   // incrementing BI before processing an instruction).
2051   SmallVector<Instruction*, 8> toErase;
2052   bool ChangedFunction = false;
2053
2054   for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();
2055        BI != BE;) {
2056     ChangedFunction |= processInstruction(BI, toErase);
2057     if (toErase.empty()) {
2058       ++BI;
2059       continue;
2060     }
2061
2062     // If we need some instructions deleted, do it now.
2063     NumGVNInstr += toErase.size();
2064
2065     // Avoid iterator invalidation.
2066     bool AtStart = BI == BB->begin();
2067     if (!AtStart)
2068       --BI;
2069
2070     for (SmallVector<Instruction*, 4>::iterator I = toErase.begin(),
2071          E = toErase.end(); I != E; ++I) {
2072       DEBUG(dbgs() << "GVN removed: " << **I << '\n');
2073       if (MD) MD->removeInstruction(*I);
2074       (*I)->eraseFromParent();
2075       DEBUG(verifyRemoved(*I));
2076     }
2077     toErase.clear();
2078
2079     if (AtStart)
2080       BI = BB->begin();
2081     else
2082       ++BI;
2083   }
2084
2085   return ChangedFunction;
2086 }
2087
2088 /// performPRE - Perform a purely local form of PRE that looks for diamond
2089 /// control flow patterns and attempts to perform simple PRE at the join point.
2090 bool GVN::performPRE(Function &F) {
2091   bool Changed = false;
2092   DenseMap<BasicBlock*, Value*> predMap;
2093   for (df_iterator<BasicBlock*> DI = df_begin(&F.getEntryBlock()),
2094        DE = df_end(&F.getEntryBlock()); DI != DE; ++DI) {
2095     BasicBlock *CurrentBlock = *DI;
2096
2097     // Nothing to PRE in the entry block.
2098     if (CurrentBlock == &F.getEntryBlock()) continue;
2099
2100     for (BasicBlock::iterator BI = CurrentBlock->begin(),
2101          BE = CurrentBlock->end(); BI != BE; ) {
2102       Instruction *CurInst = BI++;
2103
2104       if (isa<AllocaInst>(CurInst) ||
2105           isa<TerminatorInst>(CurInst) || isa<PHINode>(CurInst) ||
2106           CurInst->getType()->isVoidTy() ||
2107           CurInst->mayReadFromMemory() || CurInst->mayHaveSideEffects() ||
2108           isa<DbgInfoIntrinsic>(CurInst))
2109         continue;
2110       
2111       // We don't currently value number ANY inline asm calls.
2112       if (CallInst *CallI = dyn_cast<CallInst>(CurInst))
2113         if (CallI->isInlineAsm())
2114           continue;
2115
2116       uint32_t ValNo = VN.lookup(CurInst);
2117
2118       // Look for the predecessors for PRE opportunities.  We're
2119       // only trying to solve the basic diamond case, where
2120       // a value is computed in the successor and one predecessor,
2121       // but not the other.  We also explicitly disallow cases
2122       // where the successor is its own predecessor, because they're
2123       // more complicated to get right.
2124       unsigned NumWith = 0;
2125       unsigned NumWithout = 0;
2126       BasicBlock *PREPred = 0;
2127       predMap.clear();
2128
2129       for (pred_iterator PI = pred_begin(CurrentBlock),
2130            PE = pred_end(CurrentBlock); PI != PE; ++PI) {
2131         BasicBlock *P = *PI;
2132         // We're not interested in PRE where the block is its
2133         // own predecessor, or in blocks with predecessors
2134         // that are not reachable.
2135         if (P == CurrentBlock) {
2136           NumWithout = 2;
2137           break;
2138         } else if (!localAvail.count(P))  {
2139           NumWithout = 2;
2140           break;
2141         }
2142
2143         DenseMap<uint32_t, Value*>::iterator predV =
2144                                             localAvail[P]->table.find(ValNo);
2145         if (predV == localAvail[P]->table.end()) {
2146           PREPred = P;
2147           ++NumWithout;
2148         } else if (predV->second == CurInst) {
2149           NumWithout = 2;
2150         } else {
2151           predMap[P] = predV->second;
2152           ++NumWith;
2153         }
2154       }
2155
2156       // Don't do PRE when it might increase code size, i.e. when
2157       // we would need to insert instructions in more than one pred.
2158       if (NumWithout != 1 || NumWith == 0)
2159         continue;
2160       
2161       // Don't do PRE across indirect branch.
2162       if (isa<IndirectBrInst>(PREPred->getTerminator()))
2163         continue;
2164
2165       // We can't do PRE safely on a critical edge, so instead we schedule
2166       // the edge to be split and perform the PRE the next time we iterate
2167       // on the function.
2168       unsigned SuccNum = GetSuccessorNumber(PREPred, CurrentBlock);
2169       if (isCriticalEdge(PREPred->getTerminator(), SuccNum)) {
2170         toSplit.push_back(std::make_pair(PREPred->getTerminator(), SuccNum));
2171         continue;
2172       }
2173
2174       // Instantiate the expression in the predecessor that lacked it.
2175       // Because we are going top-down through the block, all value numbers
2176       // will be available in the predecessor by the time we need them.  Any
2177       // that weren't originally present will have been instantiated earlier
2178       // in this loop.
2179       Instruction *PREInstr = CurInst->clone();
2180       bool success = true;
2181       for (unsigned i = 0, e = CurInst->getNumOperands(); i != e; ++i) {
2182         Value *Op = PREInstr->getOperand(i);
2183         if (isa<Argument>(Op) || isa<Constant>(Op) || isa<GlobalValue>(Op))
2184           continue;
2185
2186         if (Value *V = lookupNumber(PREPred, VN.lookup(Op))) {
2187           PREInstr->setOperand(i, V);
2188         } else {
2189           success = false;
2190           break;
2191         }
2192       }
2193
2194       // Fail out if we encounter an operand that is not available in
2195       // the PRE predecessor.  This is typically because of loads which
2196       // are not value numbered precisely.
2197       if (!success) {
2198         delete PREInstr;
2199         DEBUG(verifyRemoved(PREInstr));
2200         continue;
2201       }
2202
2203       PREInstr->insertBefore(PREPred->getTerminator());
2204       PREInstr->setName(CurInst->getName() + ".pre");
2205       predMap[PREPred] = PREInstr;
2206       VN.add(PREInstr, ValNo);
2207       ++NumGVNPRE;
2208
2209       // Update the availability map to include the new instruction.
2210       localAvail[PREPred]->table.insert(std::make_pair(ValNo, PREInstr));
2211
2212       // Create a PHI to make the value available in this block.
2213       PHINode* Phi = PHINode::Create(CurInst->getType(),
2214                                      CurInst->getName() + ".pre-phi",
2215                                      CurrentBlock->begin());
2216       for (pred_iterator PI = pred_begin(CurrentBlock),
2217            PE = pred_end(CurrentBlock); PI != PE; ++PI) {
2218         BasicBlock *P = *PI;
2219         Phi->addIncoming(predMap[P], P);
2220       }
2221
2222       VN.add(Phi, ValNo);
2223       localAvail[CurrentBlock]->table[ValNo] = Phi;
2224
2225       CurInst->replaceAllUsesWith(Phi);
2226       if (MD && Phi->getType()->isPointerTy())
2227         MD->invalidateCachedPointerInfo(Phi);
2228       VN.erase(CurInst);
2229
2230       DEBUG(dbgs() << "GVN PRE removed: " << *CurInst << '\n');
2231       if (MD) MD->removeInstruction(CurInst);
2232       CurInst->eraseFromParent();
2233       DEBUG(verifyRemoved(CurInst));
2234       Changed = true;
2235     }
2236   }
2237
2238   if (splitCriticalEdges())
2239     Changed = true;
2240
2241   return Changed;
2242 }
2243
2244 /// splitCriticalEdges - Split critical edges found during the previous
2245 /// iteration that may enable further optimization.
2246 bool GVN::splitCriticalEdges() {
2247   if (toSplit.empty())
2248     return false;
2249   do {
2250     std::pair<TerminatorInst*, unsigned> Edge = toSplit.pop_back_val();
2251     SplitCriticalEdge(Edge.first, Edge.second, this);
2252   } while (!toSplit.empty());
2253   if (MD) MD->invalidateCachedPredecessors();
2254   return true;
2255 }
2256
2257 /// iterateOnFunction - Executes one iteration of GVN
2258 bool GVN::iterateOnFunction(Function &F) {
2259   cleanupGlobalSets();
2260
2261   for (df_iterator<DomTreeNode*> DI = df_begin(DT->getRootNode()),
2262        DE = df_end(DT->getRootNode()); DI != DE; ++DI) {
2263     if (DI->getIDom())
2264       localAvail[DI->getBlock()] =
2265                    new ValueNumberScope(localAvail[DI->getIDom()->getBlock()]);
2266     else
2267       localAvail[DI->getBlock()] = new ValueNumberScope(0);
2268   }
2269
2270   // Top-down walk of the dominator tree
2271   bool Changed = false;
2272 #if 0
2273   // Needed for value numbering with phi construction to work.
2274   ReversePostOrderTraversal<Function*> RPOT(&F);
2275   for (ReversePostOrderTraversal<Function*>::rpo_iterator RI = RPOT.begin(),
2276        RE = RPOT.end(); RI != RE; ++RI)
2277     Changed |= processBlock(*RI);
2278 #else
2279   for (df_iterator<DomTreeNode*> DI = df_begin(DT->getRootNode()),
2280        DE = df_end(DT->getRootNode()); DI != DE; ++DI)
2281     Changed |= processBlock(DI->getBlock());
2282 #endif
2283
2284   return Changed;
2285 }
2286
2287 void GVN::cleanupGlobalSets() {
2288   VN.clear();
2289
2290   for (DenseMap<BasicBlock*, ValueNumberScope*>::iterator
2291        I = localAvail.begin(), E = localAvail.end(); I != E; ++I)
2292     delete I->second;
2293   localAvail.clear();
2294 }
2295
2296 /// verifyRemoved - Verify that the specified instruction does not occur in our
2297 /// internal data structures.
2298 void GVN::verifyRemoved(const Instruction *Inst) const {
2299   VN.verifyRemoved(Inst);
2300
2301   // Walk through the value number scope to make sure the instruction isn't
2302   // ferreted away in it.
2303   for (DenseMap<BasicBlock*, ValueNumberScope*>::const_iterator
2304          I = localAvail.begin(), E = localAvail.end(); I != E; ++I) {
2305     const ValueNumberScope *VNS = I->second;
2306
2307     while (VNS) {
2308       for (DenseMap<uint32_t, Value*>::const_iterator
2309              II = VNS->table.begin(), IE = VNS->table.end(); II != IE; ++II) {
2310         assert(II->second != Inst && "Inst still in value numbering scope!");
2311       }
2312
2313       VNS = VNS->parent;
2314     }
2315   }
2316 }