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