Fix linking of llvm-ld and lli with CMake, from Xerxes RĂ„nby
[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/Function.h"
24 #include "llvm/IntrinsicInst.h"
25 #include "llvm/Value.h"
26 #include "llvm/ADT/DenseMap.h"
27 #include "llvm/ADT/DepthFirstIterator.h"
28 #include "llvm/ADT/PostOrderIterator.h"
29 #include "llvm/ADT/SmallPtrSet.h"
30 #include "llvm/ADT/SmallVector.h"
31 #include "llvm/ADT/Statistic.h"
32 #include "llvm/Analysis/Dominators.h"
33 #include "llvm/Analysis/AliasAnalysis.h"
34 #include "llvm/Analysis/MemoryDependenceAnalysis.h"
35 #include "llvm/Support/CFG.h"
36 #include "llvm/Support/CommandLine.h"
37 #include "llvm/Support/Compiler.h"
38 #include "llvm/Support/Debug.h"
39 #include "llvm/Transforms/Utils/BasicBlockUtils.h"
40 #include "llvm/Transforms/Utils/Local.h"
41 #include <cstdio>
42 using namespace llvm;
43
44 STATISTIC(NumGVNInstr,  "Number of instructions deleted");
45 STATISTIC(NumGVNLoad,   "Number of loads deleted");
46 STATISTIC(NumGVNPRE,    "Number of instructions PRE'd");
47 STATISTIC(NumGVNBlocks, "Number of blocks merged");
48 STATISTIC(NumPRELoad,   "Number of loads PRE'd");
49
50 static cl::opt<bool> EnablePRE("enable-pre",
51                                cl::init(true), cl::Hidden);
52 static cl::opt<bool> EnableLoadPRE("enable-load-pre", cl::init(true));
53
54 //===----------------------------------------------------------------------===//
55 //                         ValueTable Class
56 //===----------------------------------------------------------------------===//
57
58 /// This class holds the mapping between values and value numbers.  It is used
59 /// as an efficient mechanism to determine the expression-wise equivalence of
60 /// two values.
61 namespace {
62   struct VISIBILITY_HIDDEN Expression {
63     enum ExpressionOpcode { ADD, FADD, SUB, FSUB, MUL, FMUL,
64                             UDIV, SDIV, FDIV, UREM, SREM,
65                             FREM, SHL, LSHR, ASHR, AND, OR, XOR, ICMPEQ, 
66                             ICMPNE, ICMPUGT, ICMPUGE, ICMPULT, ICMPULE, 
67                             ICMPSGT, ICMPSGE, ICMPSLT, ICMPSLE, FCMPOEQ, 
68                             FCMPOGT, FCMPOGE, FCMPOLT, FCMPOLE, FCMPONE, 
69                             FCMPORD, FCMPUNO, FCMPUEQ, FCMPUGT, FCMPUGE, 
70                             FCMPULT, FCMPULE, FCMPUNE, EXTRACT, INSERT,
71                             SHUFFLE, SELECT, TRUNC, ZEXT, SEXT, FPTOUI,
72                             FPTOSI, UITOFP, SITOFP, FPTRUNC, FPEXT, 
73                             PTRTOINT, INTTOPTR, BITCAST, GEP, CALL, CONSTANT,
74                             EMPTY, TOMBSTONE };
75
76     ExpressionOpcode opcode;
77     const Type* type;
78     uint32_t firstVN;
79     uint32_t secondVN;
80     uint32_t thirdVN;
81     SmallVector<uint32_t, 4> varargs;
82     Value* function;
83   
84     Expression() { }
85     Expression(ExpressionOpcode o) : opcode(o) { }
86   
87     bool operator==(const Expression &other) const {
88       if (opcode != other.opcode)
89         return false;
90       else if (opcode == EMPTY || opcode == TOMBSTONE)
91         return true;
92       else if (type != other.type)
93         return false;
94       else if (function != other.function)
95         return false;
96       else if (firstVN != other.firstVN)
97         return false;
98       else if (secondVN != other.secondVN)
99         return false;
100       else if (thirdVN != other.thirdVN)
101         return false;
102       else {
103         if (varargs.size() != other.varargs.size())
104           return false;
105       
106         for (size_t i = 0; i < varargs.size(); ++i)
107           if (varargs[i] != other.varargs[i])
108             return false;
109     
110         return true;
111       }
112     }
113   
114     bool operator!=(const Expression &other) const {
115       return !(*this == other);
116     }
117   };
118   
119   class VISIBILITY_HIDDEN ValueTable {
120     private:
121       DenseMap<Value*, uint32_t> valueNumbering;
122       DenseMap<Expression, uint32_t> expressionNumbering;
123       AliasAnalysis* AA;
124       MemoryDependenceAnalysis* MD;
125       DominatorTree* DT;
126   
127       uint32_t nextValueNumber;
128     
129       Expression::ExpressionOpcode getOpcode(BinaryOperator* BO);
130       Expression::ExpressionOpcode getOpcode(CmpInst* C);
131       Expression::ExpressionOpcode getOpcode(CastInst* C);
132       Expression create_expression(BinaryOperator* BO);
133       Expression create_expression(CmpInst* C);
134       Expression create_expression(ShuffleVectorInst* V);
135       Expression create_expression(ExtractElementInst* C);
136       Expression create_expression(InsertElementInst* V);
137       Expression create_expression(SelectInst* V);
138       Expression create_expression(CastInst* C);
139       Expression create_expression(GetElementPtrInst* G);
140       Expression create_expression(CallInst* C);
141       Expression create_expression(Constant* C);
142     public:
143       ValueTable() : nextValueNumber(1) { }
144       uint32_t lookup_or_add(Value* V);
145       uint32_t lookup(Value* V) const;
146       void add(Value* V, uint32_t num);
147       void clear();
148       void erase(Value* v);
149       unsigned size();
150       void setAliasAnalysis(AliasAnalysis* A) { AA = A; }
151       AliasAnalysis *getAliasAnalysis() const { return AA; }
152       void setMemDep(MemoryDependenceAnalysis* M) { MD = M; }
153       void setDomTree(DominatorTree* D) { DT = D; }
154       uint32_t getNextUnusedValueNumber() { return nextValueNumber; }
155       void verifyRemoved(const Value *) const;
156   };
157 }
158
159 namespace llvm {
160 template <> struct DenseMapInfo<Expression> {
161   static inline Expression getEmptyKey() {
162     return Expression(Expression::EMPTY);
163   }
164   
165   static inline Expression getTombstoneKey() {
166     return Expression(Expression::TOMBSTONE);
167   }
168   
169   static unsigned getHashValue(const Expression e) {
170     unsigned hash = e.opcode;
171     
172     hash = e.firstVN + hash * 37;
173     hash = e.secondVN + hash * 37;
174     hash = e.thirdVN + hash * 37;
175     
176     hash = ((unsigned)((uintptr_t)e.type >> 4) ^
177             (unsigned)((uintptr_t)e.type >> 9)) +
178            hash * 37;
179     
180     for (SmallVector<uint32_t, 4>::const_iterator I = e.varargs.begin(),
181          E = e.varargs.end(); I != E; ++I)
182       hash = *I + hash * 37;
183     
184     hash = ((unsigned)((uintptr_t)e.function >> 4) ^
185             (unsigned)((uintptr_t)e.function >> 9)) +
186            hash * 37;
187     
188     return hash;
189   }
190   static bool isEqual(const Expression &LHS, const Expression &RHS) {
191     return LHS == RHS;
192   }
193   static bool isPod() { return true; }
194 };
195 }
196
197 //===----------------------------------------------------------------------===//
198 //                     ValueTable Internal Functions
199 //===----------------------------------------------------------------------===//
200 Expression::ExpressionOpcode ValueTable::getOpcode(BinaryOperator* BO) {
201   switch(BO->getOpcode()) {
202   default: // THIS SHOULD NEVER HAPPEN
203     assert(0 && "Binary operator with unknown opcode?");
204   case Instruction::Add:  return Expression::ADD;
205   case Instruction::FAdd: return Expression::FADD;
206   case Instruction::Sub:  return Expression::SUB;
207   case Instruction::FSub: return Expression::FSUB;
208   case Instruction::Mul:  return Expression::MUL;
209   case Instruction::FMul: return Expression::FMUL;
210   case Instruction::UDiv: return Expression::UDIV;
211   case Instruction::SDiv: return Expression::SDIV;
212   case Instruction::FDiv: return Expression::FDIV;
213   case Instruction::URem: return Expression::UREM;
214   case Instruction::SRem: return Expression::SREM;
215   case Instruction::FRem: return Expression::FREM;
216   case Instruction::Shl:  return Expression::SHL;
217   case Instruction::LShr: return Expression::LSHR;
218   case Instruction::AShr: return Expression::ASHR;
219   case Instruction::And:  return Expression::AND;
220   case Instruction::Or:   return Expression::OR;
221   case Instruction::Xor:  return Expression::XOR;
222   }
223 }
224
225 Expression::ExpressionOpcode ValueTable::getOpcode(CmpInst* C) {
226   if (isa<ICmpInst>(C) || isa<VICmpInst>(C)) {
227     switch (C->getPredicate()) {
228     default:  // THIS SHOULD NEVER HAPPEN
229       assert(0 && "Comparison with unknown predicate?");
230     case ICmpInst::ICMP_EQ:  return Expression::ICMPEQ;
231     case ICmpInst::ICMP_NE:  return Expression::ICMPNE;
232     case ICmpInst::ICMP_UGT: return Expression::ICMPUGT;
233     case ICmpInst::ICMP_UGE: return Expression::ICMPUGE;
234     case ICmpInst::ICMP_ULT: return Expression::ICMPULT;
235     case ICmpInst::ICMP_ULE: return Expression::ICMPULE;
236     case ICmpInst::ICMP_SGT: return Expression::ICMPSGT;
237     case ICmpInst::ICMP_SGE: return Expression::ICMPSGE;
238     case ICmpInst::ICMP_SLT: return Expression::ICMPSLT;
239     case ICmpInst::ICMP_SLE: return Expression::ICMPSLE;
240     }
241   }
242   assert((isa<FCmpInst>(C) || isa<VFCmpInst>(C)) && "Unknown compare");
243   switch (C->getPredicate()) {
244   default: // THIS SHOULD NEVER HAPPEN
245     assert(0 && "Comparison with unknown predicate?");
246   case FCmpInst::FCMP_OEQ: return Expression::FCMPOEQ;
247   case FCmpInst::FCMP_OGT: return Expression::FCMPOGT;
248   case FCmpInst::FCMP_OGE: return Expression::FCMPOGE;
249   case FCmpInst::FCMP_OLT: return Expression::FCMPOLT;
250   case FCmpInst::FCMP_OLE: return Expression::FCMPOLE;
251   case FCmpInst::FCMP_ONE: return Expression::FCMPONE;
252   case FCmpInst::FCMP_ORD: return Expression::FCMPORD;
253   case FCmpInst::FCMP_UNO: return Expression::FCMPUNO;
254   case FCmpInst::FCMP_UEQ: return Expression::FCMPUEQ;
255   case FCmpInst::FCMP_UGT: return Expression::FCMPUGT;
256   case FCmpInst::FCMP_UGE: return Expression::FCMPUGE;
257   case FCmpInst::FCMP_ULT: return Expression::FCMPULT;
258   case FCmpInst::FCMP_ULE: return Expression::FCMPULE;
259   case FCmpInst::FCMP_UNE: return Expression::FCMPUNE;
260   }
261 }
262
263 Expression::ExpressionOpcode ValueTable::getOpcode(CastInst* C) {
264   switch(C->getOpcode()) {
265   default: // THIS SHOULD NEVER HAPPEN
266     assert(0 && "Cast operator with unknown opcode?");
267   case Instruction::Trunc:    return Expression::TRUNC;
268   case Instruction::ZExt:     return Expression::ZEXT;
269   case Instruction::SExt:     return Expression::SEXT;
270   case Instruction::FPToUI:   return Expression::FPTOUI;
271   case Instruction::FPToSI:   return Expression::FPTOSI;
272   case Instruction::UIToFP:   return Expression::UITOFP;
273   case Instruction::SIToFP:   return Expression::SITOFP;
274   case Instruction::FPTrunc:  return Expression::FPTRUNC;
275   case Instruction::FPExt:    return Expression::FPEXT;
276   case Instruction::PtrToInt: return Expression::PTRTOINT;
277   case Instruction::IntToPtr: return Expression::INTTOPTR;
278   case Instruction::BitCast:  return Expression::BITCAST;
279   }
280 }
281
282 Expression ValueTable::create_expression(CallInst* C) {
283   Expression e;
284   
285   e.type = C->getType();
286   e.firstVN = 0;
287   e.secondVN = 0;
288   e.thirdVN = 0;
289   e.function = C->getCalledFunction();
290   e.opcode = Expression::CALL;
291   
292   for (CallInst::op_iterator I = C->op_begin()+1, E = C->op_end();
293        I != E; ++I)
294     e.varargs.push_back(lookup_or_add(*I));
295   
296   return e;
297 }
298
299 Expression ValueTable::create_expression(BinaryOperator* BO) {
300   Expression e;
301     
302   e.firstVN = lookup_or_add(BO->getOperand(0));
303   e.secondVN = lookup_or_add(BO->getOperand(1));
304   e.thirdVN = 0;
305   e.function = 0;
306   e.type = BO->getType();
307   e.opcode = getOpcode(BO);
308   
309   return e;
310 }
311
312 Expression ValueTable::create_expression(CmpInst* C) {
313   Expression e;
314     
315   e.firstVN = lookup_or_add(C->getOperand(0));
316   e.secondVN = lookup_or_add(C->getOperand(1));
317   e.thirdVN = 0;
318   e.function = 0;
319   e.type = C->getType();
320   e.opcode = getOpcode(C);
321   
322   return e;
323 }
324
325 Expression ValueTable::create_expression(CastInst* C) {
326   Expression e;
327     
328   e.firstVN = lookup_or_add(C->getOperand(0));
329   e.secondVN = 0;
330   e.thirdVN = 0;
331   e.function = 0;
332   e.type = C->getType();
333   e.opcode = getOpcode(C);
334   
335   return e;
336 }
337
338 Expression ValueTable::create_expression(ShuffleVectorInst* S) {
339   Expression e;
340     
341   e.firstVN = lookup_or_add(S->getOperand(0));
342   e.secondVN = lookup_or_add(S->getOperand(1));
343   e.thirdVN = lookup_or_add(S->getOperand(2));
344   e.function = 0;
345   e.type = S->getType();
346   e.opcode = Expression::SHUFFLE;
347   
348   return e;
349 }
350
351 Expression ValueTable::create_expression(ExtractElementInst* E) {
352   Expression e;
353     
354   e.firstVN = lookup_or_add(E->getOperand(0));
355   e.secondVN = lookup_or_add(E->getOperand(1));
356   e.thirdVN = 0;
357   e.function = 0;
358   e.type = E->getType();
359   e.opcode = Expression::EXTRACT;
360   
361   return e;
362 }
363
364 Expression ValueTable::create_expression(InsertElementInst* I) {
365   Expression e;
366     
367   e.firstVN = lookup_or_add(I->getOperand(0));
368   e.secondVN = lookup_or_add(I->getOperand(1));
369   e.thirdVN = lookup_or_add(I->getOperand(2));
370   e.function = 0;
371   e.type = I->getType();
372   e.opcode = Expression::INSERT;
373   
374   return e;
375 }
376
377 Expression ValueTable::create_expression(SelectInst* I) {
378   Expression e;
379     
380   e.firstVN = lookup_or_add(I->getCondition());
381   e.secondVN = lookup_or_add(I->getTrueValue());
382   e.thirdVN = lookup_or_add(I->getFalseValue());
383   e.function = 0;
384   e.type = I->getType();
385   e.opcode = Expression::SELECT;
386   
387   return e;
388 }
389
390 Expression ValueTable::create_expression(GetElementPtrInst* G) {
391   Expression e;
392   
393   e.firstVN = lookup_or_add(G->getPointerOperand());
394   e.secondVN = 0;
395   e.thirdVN = 0;
396   e.function = 0;
397   e.type = G->getType();
398   e.opcode = Expression::GEP;
399   
400   for (GetElementPtrInst::op_iterator I = G->idx_begin(), E = G->idx_end();
401        I != E; ++I)
402     e.varargs.push_back(lookup_or_add(*I));
403   
404   return e;
405 }
406
407 //===----------------------------------------------------------------------===//
408 //                     ValueTable External Functions
409 //===----------------------------------------------------------------------===//
410
411 /// add - Insert a value into the table with a specified value number.
412 void ValueTable::add(Value* V, uint32_t num) {
413   valueNumbering.insert(std::make_pair(V, num));
414 }
415
416 /// lookup_or_add - Returns the value number for the specified value, assigning
417 /// it a new number if it did not have one before.
418 uint32_t ValueTable::lookup_or_add(Value* V) {
419   DenseMap<Value*, uint32_t>::iterator VI = valueNumbering.find(V);
420   if (VI != valueNumbering.end())
421     return VI->second;
422   
423   if (CallInst* C = dyn_cast<CallInst>(V)) {
424     if (AA->doesNotAccessMemory(C)) {
425       Expression e = create_expression(C);
426     
427       DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
428       if (EI != expressionNumbering.end()) {
429         valueNumbering.insert(std::make_pair(V, EI->second));
430         return EI->second;
431       } else {
432         expressionNumbering.insert(std::make_pair(e, nextValueNumber));
433         valueNumbering.insert(std::make_pair(V, nextValueNumber));
434       
435         return nextValueNumber++;
436       }
437     } else if (AA->onlyReadsMemory(C)) {
438       Expression e = create_expression(C);
439       
440       if (expressionNumbering.find(e) == expressionNumbering.end()) {
441         expressionNumbering.insert(std::make_pair(e, nextValueNumber));
442         valueNumbering.insert(std::make_pair(V, nextValueNumber));
443         return nextValueNumber++;
444       }
445       
446       MemDepResult local_dep = MD->getDependency(C);
447       
448       if (!local_dep.isDef() && !local_dep.isNonLocal()) {
449         valueNumbering.insert(std::make_pair(V, nextValueNumber));
450         return nextValueNumber++;
451       }
452
453       if (local_dep.isDef()) {
454         CallInst* local_cdep = cast<CallInst>(local_dep.getInst());
455         
456         if (local_cdep->getNumOperands() != C->getNumOperands()) {
457           valueNumbering.insert(std::make_pair(V, nextValueNumber));
458           return nextValueNumber++;
459         }
460           
461         for (unsigned i = 1; i < C->getNumOperands(); ++i) {
462           uint32_t c_vn = lookup_or_add(C->getOperand(i));
463           uint32_t cd_vn = lookup_or_add(local_cdep->getOperand(i));
464           if (c_vn != cd_vn) {
465             valueNumbering.insert(std::make_pair(V, nextValueNumber));
466             return nextValueNumber++;
467           }
468         }
469       
470         uint32_t v = lookup_or_add(local_cdep);
471         valueNumbering.insert(std::make_pair(V, v));
472         return v;
473       }
474
475       // Non-local case.
476       const MemoryDependenceAnalysis::NonLocalDepInfo &deps = 
477         MD->getNonLocalCallDependency(CallSite(C));
478       // FIXME: call/call dependencies for readonly calls should return def, not
479       // clobber!  Move the checking logic to MemDep!
480       CallInst* cdep = 0;
481       
482       // Check to see if we have a single dominating call instruction that is
483       // identical to C.
484       for (unsigned i = 0, e = deps.size(); i != e; ++i) {
485         const MemoryDependenceAnalysis::NonLocalDepEntry *I = &deps[i];
486         // Ignore non-local dependencies.
487         if (I->second.isNonLocal())
488           continue;
489
490         // We don't handle non-depedencies.  If we already have a call, reject
491         // instruction dependencies.
492         if (I->second.isClobber() || cdep != 0) {
493           cdep = 0;
494           break;
495         }
496         
497         CallInst *NonLocalDepCall = dyn_cast<CallInst>(I->second.getInst());
498         // FIXME: All duplicated with non-local case.
499         if (NonLocalDepCall && DT->properlyDominates(I->first, C->getParent())){
500           cdep = NonLocalDepCall;
501           continue;
502         }
503         
504         cdep = 0;
505         break;
506       }
507       
508       if (!cdep) {
509         valueNumbering.insert(std::make_pair(V, nextValueNumber));
510         return nextValueNumber++;
511       }
512       
513       if (cdep->getNumOperands() != C->getNumOperands()) {
514         valueNumbering.insert(std::make_pair(V, nextValueNumber));
515         return nextValueNumber++;
516       }
517       for (unsigned i = 1; i < C->getNumOperands(); ++i) {
518         uint32_t c_vn = lookup_or_add(C->getOperand(i));
519         uint32_t cd_vn = lookup_or_add(cdep->getOperand(i));
520         if (c_vn != cd_vn) {
521           valueNumbering.insert(std::make_pair(V, nextValueNumber));
522           return nextValueNumber++;
523         }
524       }
525       
526       uint32_t v = lookup_or_add(cdep);
527       valueNumbering.insert(std::make_pair(V, v));
528       return v;
529       
530     } else {
531       valueNumbering.insert(std::make_pair(V, nextValueNumber));
532       return nextValueNumber++;
533     }
534   } else if (BinaryOperator* BO = dyn_cast<BinaryOperator>(V)) {
535     Expression e = create_expression(BO);
536     
537     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
538     if (EI != expressionNumbering.end()) {
539       valueNumbering.insert(std::make_pair(V, EI->second));
540       return EI->second;
541     } else {
542       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
543       valueNumbering.insert(std::make_pair(V, nextValueNumber));
544       
545       return nextValueNumber++;
546     }
547   } else if (CmpInst* C = dyn_cast<CmpInst>(V)) {
548     Expression e = create_expression(C);
549     
550     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
551     if (EI != expressionNumbering.end()) {
552       valueNumbering.insert(std::make_pair(V, EI->second));
553       return EI->second;
554     } else {
555       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
556       valueNumbering.insert(std::make_pair(V, nextValueNumber));
557       
558       return nextValueNumber++;
559     }
560   } else if (ShuffleVectorInst* U = dyn_cast<ShuffleVectorInst>(V)) {
561     Expression e = create_expression(U);
562     
563     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
564     if (EI != expressionNumbering.end()) {
565       valueNumbering.insert(std::make_pair(V, EI->second));
566       return EI->second;
567     } else {
568       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
569       valueNumbering.insert(std::make_pair(V, nextValueNumber));
570       
571       return nextValueNumber++;
572     }
573   } else if (ExtractElementInst* U = dyn_cast<ExtractElementInst>(V)) {
574     Expression e = create_expression(U);
575     
576     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
577     if (EI != expressionNumbering.end()) {
578       valueNumbering.insert(std::make_pair(V, EI->second));
579       return EI->second;
580     } else {
581       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
582       valueNumbering.insert(std::make_pair(V, nextValueNumber));
583       
584       return nextValueNumber++;
585     }
586   } else if (InsertElementInst* U = dyn_cast<InsertElementInst>(V)) {
587     Expression e = create_expression(U);
588     
589     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
590     if (EI != expressionNumbering.end()) {
591       valueNumbering.insert(std::make_pair(V, EI->second));
592       return EI->second;
593     } else {
594       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
595       valueNumbering.insert(std::make_pair(V, nextValueNumber));
596       
597       return nextValueNumber++;
598     }
599   } else if (SelectInst* U = dyn_cast<SelectInst>(V)) {
600     Expression e = create_expression(U);
601     
602     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
603     if (EI != expressionNumbering.end()) {
604       valueNumbering.insert(std::make_pair(V, EI->second));
605       return EI->second;
606     } else {
607       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
608       valueNumbering.insert(std::make_pair(V, nextValueNumber));
609       
610       return nextValueNumber++;
611     }
612   } else if (CastInst* U = dyn_cast<CastInst>(V)) {
613     Expression e = create_expression(U);
614     
615     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
616     if (EI != expressionNumbering.end()) {
617       valueNumbering.insert(std::make_pair(V, EI->second));
618       return EI->second;
619     } else {
620       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
621       valueNumbering.insert(std::make_pair(V, nextValueNumber));
622       
623       return nextValueNumber++;
624     }
625   } else if (GetElementPtrInst* U = dyn_cast<GetElementPtrInst>(V)) {
626     Expression e = create_expression(U);
627     
628     DenseMap<Expression, uint32_t>::iterator EI = expressionNumbering.find(e);
629     if (EI != expressionNumbering.end()) {
630       valueNumbering.insert(std::make_pair(V, EI->second));
631       return EI->second;
632     } else {
633       expressionNumbering.insert(std::make_pair(e, nextValueNumber));
634       valueNumbering.insert(std::make_pair(V, nextValueNumber));
635       
636       return nextValueNumber++;
637     }
638   } else {
639     valueNumbering.insert(std::make_pair(V, nextValueNumber));
640     return nextValueNumber++;
641   }
642 }
643
644 /// lookup - Returns the value number of the specified value. Fails if
645 /// the value has not yet been numbered.
646 uint32_t ValueTable::lookup(Value* V) const {
647   DenseMap<Value*, uint32_t>::iterator VI = valueNumbering.find(V);
648   assert(VI != valueNumbering.end() && "Value not numbered?");
649   return VI->second;
650 }
651
652 /// clear - Remove all entries from the ValueTable
653 void ValueTable::clear() {
654   valueNumbering.clear();
655   expressionNumbering.clear();
656   nextValueNumber = 1;
657 }
658
659 /// erase - Remove a value from the value numbering
660 void ValueTable::erase(Value* V) {
661   valueNumbering.erase(V);
662 }
663
664 /// verifyRemoved - Verify that the value is removed from all internal data
665 /// structures.
666 void ValueTable::verifyRemoved(const Value *V) const {
667   for (DenseMap<Value*, uint32_t>::iterator
668          I = valueNumbering.begin(), E = valueNumbering.end(); I != E; ++I) {
669     assert(I->first != V && "Inst still occurs in value numbering map!");
670   }
671 }
672
673 //===----------------------------------------------------------------------===//
674 //                                GVN Pass
675 //===----------------------------------------------------------------------===//
676
677 namespace {
678   struct VISIBILITY_HIDDEN ValueNumberScope {
679     ValueNumberScope* parent;
680     DenseMap<uint32_t, Value*> table;
681     
682     ValueNumberScope(ValueNumberScope* p) : parent(p) { }
683   };
684 }
685
686 namespace {
687
688   class VISIBILITY_HIDDEN GVN : public FunctionPass {
689     bool runOnFunction(Function &F);
690   public:
691     static char ID; // Pass identification, replacement for typeid
692     GVN() : FunctionPass(&ID) { }
693
694   private:
695     MemoryDependenceAnalysis *MD;
696     DominatorTree *DT;
697
698     ValueTable VN;
699     DenseMap<BasicBlock*, ValueNumberScope*> localAvail;
700     
701     typedef DenseMap<Value*, SmallPtrSet<Instruction*, 4> > PhiMapType;
702     PhiMapType phiMap;
703     
704     
705     // This transformation requires dominator postdominator info
706     virtual void getAnalysisUsage(AnalysisUsage &AU) const {
707       AU.addRequired<DominatorTree>();
708       AU.addRequired<MemoryDependenceAnalysis>();
709       AU.addRequired<AliasAnalysis>();
710       
711       AU.addPreserved<DominatorTree>();
712       AU.addPreserved<AliasAnalysis>();
713     }
714   
715     // Helper fuctions
716     // FIXME: eliminate or document these better
717     bool processLoad(LoadInst* L,
718                      SmallVectorImpl<Instruction*> &toErase);
719     bool processInstruction(Instruction* I,
720                             SmallVectorImpl<Instruction*> &toErase);
721     bool processNonLocalLoad(LoadInst* L,
722                              SmallVectorImpl<Instruction*> &toErase);
723     bool processBlock(BasicBlock* BB);
724     Value *GetValueForBlock(BasicBlock *BB, Instruction* orig,
725                             DenseMap<BasicBlock*, Value*> &Phis,
726                             bool top_level = false);
727     void dump(DenseMap<uint32_t, Value*>& d);
728     bool iterateOnFunction(Function &F);
729     Value* CollapsePhi(PHINode* p);
730     bool isSafeReplacement(PHINode* p, Instruction* inst);
731     bool performPRE(Function& F);
732     Value* lookupNumber(BasicBlock* BB, uint32_t num);
733     bool mergeBlockIntoPredecessor(BasicBlock* BB);
734     Value* AttemptRedundancyElimination(Instruction* orig, unsigned valno);
735     void cleanupGlobalSets();
736     void verifyRemoved(const Instruction *I) const;
737   };
738   
739   char GVN::ID = 0;
740 }
741
742 // createGVNPass - The public interface to this file...
743 FunctionPass *llvm::createGVNPass() { return new GVN(); }
744
745 static RegisterPass<GVN> X("gvn",
746                            "Global Value Numbering");
747
748 void GVN::dump(DenseMap<uint32_t, Value*>& d) {
749   printf("{\n");
750   for (DenseMap<uint32_t, Value*>::iterator I = d.begin(),
751        E = d.end(); I != E; ++I) {
752       printf("%d\n", I->first);
753       I->second->dump();
754   }
755   printf("}\n");
756 }
757
758 Value* GVN::CollapsePhi(PHINode* p) {
759   Value* constVal = p->hasConstantValue();
760   if (!constVal) return 0;
761   
762   Instruction* inst = dyn_cast<Instruction>(constVal);
763   if (!inst)
764     return constVal;
765     
766   if (DT->dominates(inst, p))
767     if (isSafeReplacement(p, inst))
768       return inst;
769   return 0;
770 }
771
772 bool GVN::isSafeReplacement(PHINode* p, Instruction* inst) {
773   if (!isa<PHINode>(inst))
774     return true;
775   
776   for (Instruction::use_iterator UI = p->use_begin(), E = p->use_end();
777        UI != E; ++UI)
778     if (PHINode* use_phi = dyn_cast<PHINode>(UI))
779       if (use_phi->getParent() == inst->getParent())
780         return false;
781   
782   return true;
783 }
784
785 /// GetValueForBlock - Get the value to use within the specified basic block.
786 /// available values are in Phis.
787 Value *GVN::GetValueForBlock(BasicBlock *BB, Instruction* orig,
788                              DenseMap<BasicBlock*, Value*> &Phis,
789                              bool top_level) { 
790                                  
791   // If we have already computed this value, return the previously computed val.
792   DenseMap<BasicBlock*, Value*>::iterator V = Phis.find(BB);
793   if (V != Phis.end() && !top_level) return V->second;
794   
795   // If the block is unreachable, just return undef, since this path
796   // can't actually occur at runtime.
797   if (!DT->isReachableFromEntry(BB))
798     return Phis[BB] = UndefValue::get(orig->getType());
799   
800   if (BasicBlock *Pred = BB->getSinglePredecessor()) {
801     Value *ret = GetValueForBlock(Pred, orig, Phis);
802     Phis[BB] = ret;
803     return ret;
804   }
805
806   // Get the number of predecessors of this block so we can reserve space later.
807   // If there is already a PHI in it, use the #preds from it, otherwise count.
808   // Getting it from the PHI is constant time.
809   unsigned NumPreds;
810   if (PHINode *ExistingPN = dyn_cast<PHINode>(BB->begin()))
811     NumPreds = ExistingPN->getNumIncomingValues();
812   else
813     NumPreds = std::distance(pred_begin(BB), pred_end(BB));
814   
815   // Otherwise, the idom is the loop, so we need to insert a PHI node.  Do so
816   // now, then get values to fill in the incoming values for the PHI.
817   PHINode *PN = PHINode::Create(orig->getType(), orig->getName()+".rle",
818                                 BB->begin());
819   PN->reserveOperandSpace(NumPreds);
820   
821   Phis.insert(std::make_pair(BB, PN));
822   
823   // Fill in the incoming values for the block.
824   for (pred_iterator PI = pred_begin(BB), E = pred_end(BB); PI != E; ++PI) {
825     Value* val = GetValueForBlock(*PI, orig, Phis);
826     PN->addIncoming(val, *PI);
827   }
828   
829   VN.getAliasAnalysis()->copyValue(orig, PN);
830   
831   // Attempt to collapse PHI nodes that are trivially redundant
832   Value* v = CollapsePhi(PN);
833   if (!v) {
834     // Cache our phi construction results
835     if (LoadInst* L = dyn_cast<LoadInst>(orig))
836       phiMap[L->getPointerOperand()].insert(PN);
837     else
838       phiMap[orig].insert(PN);
839     
840     return PN;
841   }
842     
843   PN->replaceAllUsesWith(v);
844   if (isa<PointerType>(v->getType()))
845     MD->invalidateCachedPointerInfo(v);
846
847   for (DenseMap<BasicBlock*, Value*>::iterator I = Phis.begin(),
848        E = Phis.end(); I != E; ++I)
849     if (I->second == PN)
850       I->second = v;
851
852   DEBUG(cerr << "GVN removed: " << *PN);
853   MD->removeInstruction(PN);
854   PN->eraseFromParent();
855   DEBUG(verifyRemoved(PN));
856
857   Phis[BB] = v;
858   return v;
859 }
860
861 /// IsValueFullyAvailableInBlock - Return true if we can prove that the value
862 /// we're analyzing is fully available in the specified block.  As we go, keep
863 /// track of which blocks we know are fully alive in FullyAvailableBlocks.  This
864 /// map is actually a tri-state map with the following values:
865 ///   0) we know the block *is not* fully available.
866 ///   1) we know the block *is* fully available.
867 ///   2) we do not know whether the block is fully available or not, but we are
868 ///      currently speculating that it will be.
869 ///   3) we are speculating for this block and have used that to speculate for
870 ///      other blocks.
871 static bool IsValueFullyAvailableInBlock(BasicBlock *BB, 
872                             DenseMap<BasicBlock*, char> &FullyAvailableBlocks) {
873   // Optimistically assume that the block is fully available and check to see
874   // if we already know about this block in one lookup.
875   std::pair<DenseMap<BasicBlock*, char>::iterator, char> IV = 
876     FullyAvailableBlocks.insert(std::make_pair(BB, 2));
877
878   // If the entry already existed for this block, return the precomputed value.
879   if (!IV.second) {
880     // If this is a speculative "available" value, mark it as being used for
881     // speculation of other blocks.
882     if (IV.first->second == 2)
883       IV.first->second = 3;
884     return IV.first->second != 0;
885   }
886   
887   // Otherwise, see if it is fully available in all predecessors.
888   pred_iterator PI = pred_begin(BB), PE = pred_end(BB);
889   
890   // If this block has no predecessors, it isn't live-in here.
891   if (PI == PE)
892     goto SpeculationFailure;
893   
894   for (; PI != PE; ++PI)
895     // If the value isn't fully available in one of our predecessors, then it
896     // isn't fully available in this block either.  Undo our previous
897     // optimistic assumption and bail out.
898     if (!IsValueFullyAvailableInBlock(*PI, FullyAvailableBlocks))
899       goto SpeculationFailure;
900   
901   return true;
902   
903 // SpeculationFailure - If we get here, we found out that this is not, after
904 // all, a fully-available block.  We have a problem if we speculated on this and
905 // used the speculation to mark other blocks as available.
906 SpeculationFailure:
907   char &BBVal = FullyAvailableBlocks[BB];
908   
909   // If we didn't speculate on this, just return with it set to false.
910   if (BBVal == 2) {
911     BBVal = 0;
912     return false;
913   }
914
915   // If we did speculate on this value, we could have blocks set to 1 that are
916   // incorrect.  Walk the (transitive) successors of this block and mark them as
917   // 0 if set to one.
918   SmallVector<BasicBlock*, 32> BBWorklist;
919   BBWorklist.push_back(BB);
920   
921   while (!BBWorklist.empty()) {
922     BasicBlock *Entry = BBWorklist.pop_back_val();
923     // Note that this sets blocks to 0 (unavailable) if they happen to not
924     // already be in FullyAvailableBlocks.  This is safe.
925     char &EntryVal = FullyAvailableBlocks[Entry];
926     if (EntryVal == 0) continue;  // Already unavailable.
927
928     // Mark as unavailable.
929     EntryVal = 0;
930     
931     for (succ_iterator I = succ_begin(Entry), E = succ_end(Entry); I != E; ++I)
932       BBWorklist.push_back(*I);
933   }
934   
935   return false;
936 }
937
938 /// processNonLocalLoad - Attempt to eliminate a load whose dependencies are
939 /// non-local by performing PHI construction.
940 bool GVN::processNonLocalLoad(LoadInst *LI,
941                               SmallVectorImpl<Instruction*> &toErase) {
942   // Find the non-local dependencies of the load.
943   SmallVector<MemoryDependenceAnalysis::NonLocalDepEntry, 64> Deps; 
944   MD->getNonLocalPointerDependency(LI->getOperand(0), true, LI->getParent(),
945                                    Deps);
946   //DEBUG(cerr << "INVESTIGATING NONLOCAL LOAD: " << Deps.size() << *LI);
947   
948   // If we had to process more than one hundred blocks to find the
949   // dependencies, this load isn't worth worrying about.  Optimizing
950   // it will be too expensive.
951   if (Deps.size() > 100)
952     return false;
953
954   // If we had a phi translation failure, we'll have a single entry which is a
955   // clobber in the current block.  Reject this early.
956   if (Deps.size() == 1 && Deps[0].second.isClobber()) {
957     DEBUG(
958       DOUT << "GVN: non-local load ";
959       WriteAsOperand(*DOUT.stream(), LI);
960       DOUT << " is clobbered by " << *Deps[0].second.getInst();
961     );
962     return false;
963   }
964   
965   // Filter out useless results (non-locals, etc).  Keep track of the blocks
966   // where we have a value available in repl, also keep track of whether we see
967   // dependencies that produce an unknown value for the load (such as a call
968   // that could potentially clobber the load).
969   SmallVector<std::pair<BasicBlock*, Value*>, 16> ValuesPerBlock;
970   SmallVector<BasicBlock*, 16> UnavailableBlocks;
971   
972   for (unsigned i = 0, e = Deps.size(); i != e; ++i) {
973     BasicBlock *DepBB = Deps[i].first;
974     MemDepResult DepInfo = Deps[i].second;
975     
976     if (DepInfo.isClobber()) {
977       UnavailableBlocks.push_back(DepBB);
978       continue;
979     }
980     
981     Instruction *DepInst = DepInfo.getInst();
982     
983     // Loading the allocation -> undef.
984     if (isa<AllocationInst>(DepInst)) {
985       ValuesPerBlock.push_back(std::make_pair(DepBB, 
986                                               UndefValue::get(LI->getType())));
987       continue;
988     }
989   
990     if (StoreInst* S = dyn_cast<StoreInst>(DepInst)) {
991       // Reject loads and stores that are to the same address but are of 
992       // different types.
993       // NOTE: 403.gcc does have this case (e.g. in readonly_fields_p) because
994       // of bitfield access, it would be interesting to optimize for it at some
995       // point.
996       if (S->getOperand(0)->getType() != LI->getType()) {
997         UnavailableBlocks.push_back(DepBB);
998         continue;
999       }
1000       
1001       ValuesPerBlock.push_back(std::make_pair(DepBB, S->getOperand(0)));
1002       
1003     } else if (LoadInst* LD = dyn_cast<LoadInst>(DepInst)) {
1004       if (LD->getType() != LI->getType()) {
1005         UnavailableBlocks.push_back(DepBB);
1006         continue;
1007       }
1008       ValuesPerBlock.push_back(std::make_pair(DepBB, LD));
1009     } else {
1010       UnavailableBlocks.push_back(DepBB);
1011       continue;
1012     }
1013   }
1014   
1015   // If we have no predecessors that produce a known value for this load, exit
1016   // early.
1017   if (ValuesPerBlock.empty()) return false;
1018   
1019   // If all of the instructions we depend on produce a known value for this
1020   // load, then it is fully redundant and we can use PHI insertion to compute
1021   // its value.  Insert PHIs and remove the fully redundant value now.
1022   if (UnavailableBlocks.empty()) {
1023     // Use cached PHI construction information from previous runs
1024     SmallPtrSet<Instruction*, 4> &p = phiMap[LI->getPointerOperand()];
1025     // FIXME: What does phiMap do? Are we positive it isn't getting invalidated?
1026     for (SmallPtrSet<Instruction*, 4>::iterator I = p.begin(), E = p.end();
1027          I != E; ++I) {
1028       if ((*I)->getParent() == LI->getParent()) {
1029         DEBUG(cerr << "GVN REMOVING NONLOCAL LOAD #1: " << *LI);
1030         LI->replaceAllUsesWith(*I);
1031         if (isa<PointerType>((*I)->getType()))
1032           MD->invalidateCachedPointerInfo(*I);
1033         toErase.push_back(LI);
1034         NumGVNLoad++;
1035         return true;
1036       }
1037       
1038       ValuesPerBlock.push_back(std::make_pair((*I)->getParent(), *I));
1039     }
1040     
1041     DEBUG(cerr << "GVN REMOVING NONLOCAL LOAD: " << *LI);
1042     
1043     DenseMap<BasicBlock*, Value*> BlockReplValues;
1044     BlockReplValues.insert(ValuesPerBlock.begin(), ValuesPerBlock.end());
1045     // Perform PHI construction.
1046     Value* v = GetValueForBlock(LI->getParent(), LI, BlockReplValues, true);
1047     LI->replaceAllUsesWith(v);
1048     
1049     if (isa<PHINode>(v))
1050       v->takeName(LI);
1051     if (isa<PointerType>(v->getType()))
1052       MD->invalidateCachedPointerInfo(v);
1053     toErase.push_back(LI);
1054     NumGVNLoad++;
1055     return true;
1056   }
1057   
1058   if (!EnablePRE || !EnableLoadPRE)
1059     return false;
1060
1061   // Okay, we have *some* definitions of the value.  This means that the value
1062   // is available in some of our (transitive) predecessors.  Lets think about
1063   // doing PRE of this load.  This will involve inserting a new load into the
1064   // predecessor when it's not available.  We could do this in general, but
1065   // prefer to not increase code size.  As such, we only do this when we know
1066   // that we only have to insert *one* load (which means we're basically moving
1067   // the load, not inserting a new one).
1068   
1069   SmallPtrSet<BasicBlock *, 4> Blockers;
1070   for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
1071     Blockers.insert(UnavailableBlocks[i]);
1072
1073   // Lets find first basic block with more than one predecessor.  Walk backwards
1074   // through predecessors if needed.
1075   BasicBlock *LoadBB = LI->getParent();
1076   BasicBlock *TmpBB = LoadBB;
1077
1078   bool isSinglePred = false;
1079   bool allSingleSucc = true;
1080   while (TmpBB->getSinglePredecessor()) {
1081     isSinglePred = true;
1082     TmpBB = TmpBB->getSinglePredecessor();
1083     if (!TmpBB) // If haven't found any, bail now.
1084       return false;
1085     if (TmpBB == LoadBB) // Infinite (unreachable) loop.
1086       return false;
1087     if (Blockers.count(TmpBB))
1088       return false;
1089     if (TmpBB->getTerminator()->getNumSuccessors() != 1)
1090       allSingleSucc = false;
1091   }
1092   
1093   assert(TmpBB);
1094   LoadBB = TmpBB;
1095   
1096   // If we have a repl set with LI itself in it, this means we have a loop where
1097   // at least one of the values is LI.  Since this means that we won't be able
1098   // to eliminate LI even if we insert uses in the other predecessors, we will
1099   // end up increasing code size.  Reject this by scanning for LI.
1100   for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i)
1101     if (ValuesPerBlock[i].second == LI)
1102       return false;
1103   
1104   if (isSinglePred) {
1105     bool isHot = false;
1106     for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i)
1107       if (Instruction *I = dyn_cast<Instruction>(ValuesPerBlock[i].second))
1108         // "Hot" Instruction is in some loop (because it dominates its dep. 
1109         // instruction).
1110         if (DT->dominates(LI, I)) { 
1111           isHot = true;
1112           break;
1113         }
1114
1115     // We are interested only in "hot" instructions. We don't want to do any
1116     // mis-optimizations here.
1117     if (!isHot)
1118       return false;
1119   }
1120
1121   // Okay, we have some hope :).  Check to see if the loaded value is fully
1122   // available in all but one predecessor.
1123   // FIXME: If we could restructure the CFG, we could make a common pred with
1124   // all the preds that don't have an available LI and insert a new load into
1125   // that one block.
1126   BasicBlock *UnavailablePred = 0;
1127
1128   DenseMap<BasicBlock*, char> FullyAvailableBlocks;
1129   for (unsigned i = 0, e = ValuesPerBlock.size(); i != e; ++i)
1130     FullyAvailableBlocks[ValuesPerBlock[i].first] = true;
1131   for (unsigned i = 0, e = UnavailableBlocks.size(); i != e; ++i)
1132     FullyAvailableBlocks[UnavailableBlocks[i]] = false;
1133
1134   for (pred_iterator PI = pred_begin(LoadBB), E = pred_end(LoadBB);
1135        PI != E; ++PI) {
1136     if (IsValueFullyAvailableInBlock(*PI, FullyAvailableBlocks))
1137       continue;
1138     
1139     // If this load is not available in multiple predecessors, reject it.
1140     if (UnavailablePred && UnavailablePred != *PI)
1141       return false;
1142     UnavailablePred = *PI;
1143   }
1144   
1145   assert(UnavailablePred != 0 &&
1146          "Fully available value should be eliminated above!");
1147   
1148   // If the loaded pointer is PHI node defined in this block, do PHI translation
1149   // to get its value in the predecessor.
1150   Value *LoadPtr = LI->getOperand(0)->DoPHITranslation(LoadBB, UnavailablePred);
1151   
1152   // Make sure the value is live in the predecessor.  If it was defined by a
1153   // non-PHI instruction in this block, we don't know how to recompute it above.
1154   if (Instruction *LPInst = dyn_cast<Instruction>(LoadPtr))
1155     if (!DT->dominates(LPInst->getParent(), UnavailablePred)) {
1156       DEBUG(cerr << "COULDN'T PRE LOAD BECAUSE PTR IS UNAVAILABLE IN PRED: "
1157                  << *LPInst << *LI << "\n");
1158       return false;
1159     }
1160   
1161   // We don't currently handle critical edges :(
1162   if (UnavailablePred->getTerminator()->getNumSuccessors() != 1) {
1163     DEBUG(cerr << "COULD NOT PRE LOAD BECAUSE OF CRITICAL EDGE '"
1164                 << UnavailablePred->getName() << "': " << *LI);
1165     return false;
1166   }
1167
1168   // Make sure it is valid to move this load here.  We have to watch out for:
1169   //  @1 = getelementptr (i8* p, ...
1170   //  test p and branch if == 0
1171   //  load @1
1172   // It is valid to have the getelementptr before the test, even if p can be 0,
1173   // as getelementptr only does address arithmetic.
1174   // If we are not pushing the value through any multiple-successor blocks
1175   // we do not have this case.  Otherwise, check that the load is safe to
1176   // put anywhere; this can be improved, but should be conservatively safe.
1177   if (!allSingleSucc &&
1178       !isSafeToLoadUnconditionally(LoadPtr, UnavailablePred->getTerminator()))
1179     return false;
1180
1181   // Okay, we can eliminate this load by inserting a reload in the predecessor
1182   // and using PHI construction to get the value in the other predecessors, do
1183   // it.
1184   DEBUG(cerr << "GVN REMOVING PRE LOAD: " << *LI);
1185   
1186   Value *NewLoad = new LoadInst(LoadPtr, LI->getName()+".pre", false,
1187                                 LI->getAlignment(),
1188                                 UnavailablePred->getTerminator());
1189   
1190   SmallPtrSet<Instruction*, 4> &p = phiMap[LI->getPointerOperand()];
1191   for (SmallPtrSet<Instruction*, 4>::iterator I = p.begin(), E = p.end();
1192        I != E; ++I)
1193     ValuesPerBlock.push_back(std::make_pair((*I)->getParent(), *I));
1194   
1195   DenseMap<BasicBlock*, Value*> BlockReplValues;
1196   BlockReplValues.insert(ValuesPerBlock.begin(), ValuesPerBlock.end());
1197   BlockReplValues[UnavailablePred] = NewLoad;
1198   
1199   // Perform PHI construction.
1200   Value* v = GetValueForBlock(LI->getParent(), LI, BlockReplValues, true);
1201   LI->replaceAllUsesWith(v);
1202   if (isa<PHINode>(v))
1203     v->takeName(LI);
1204   if (isa<PointerType>(v->getType()))
1205     MD->invalidateCachedPointerInfo(v);
1206   toErase.push_back(LI);
1207   NumPRELoad++;
1208   return true;
1209 }
1210
1211 /// processLoad - Attempt to eliminate a load, first by eliminating it
1212 /// locally, and then attempting non-local elimination if that fails.
1213 bool GVN::processLoad(LoadInst *L, SmallVectorImpl<Instruction*> &toErase) {
1214   if (L->isVolatile())
1215     return false;
1216   
1217   Value* pointer = L->getPointerOperand();
1218
1219   // ... to a pointer that has been loaded from before...
1220   MemDepResult dep = MD->getDependency(L);
1221   
1222   // If the value isn't available, don't do anything!
1223   if (dep.isClobber()) {
1224     DEBUG(
1225       // fast print dep, using operator<< on instruction would be too slow
1226       DOUT << "GVN: load ";
1227       WriteAsOperand(*DOUT.stream(), L);
1228       Instruction *I = dep.getInst();
1229       DOUT << " is clobbered by " << *I;
1230     );
1231     return false;
1232   }
1233
1234   // If it is defined in another block, try harder.
1235   if (dep.isNonLocal())
1236     return processNonLocalLoad(L, toErase);
1237
1238   Instruction *DepInst = dep.getInst();
1239   if (StoreInst *DepSI = dyn_cast<StoreInst>(DepInst)) {
1240     // Only forward substitute stores to loads of the same type.
1241     // FIXME: Could do better!
1242     if (DepSI->getPointerOperand()->getType() != pointer->getType())
1243       return false;
1244     
1245     // Remove it!
1246     L->replaceAllUsesWith(DepSI->getOperand(0));
1247     if (isa<PointerType>(DepSI->getOperand(0)->getType()))
1248       MD->invalidateCachedPointerInfo(DepSI->getOperand(0));
1249     toErase.push_back(L);
1250     NumGVNLoad++;
1251     return true;
1252   }
1253
1254   if (LoadInst *DepLI = dyn_cast<LoadInst>(DepInst)) {
1255     // Only forward substitute stores to loads of the same type.
1256     // FIXME: Could do better! load i32 -> load i8 -> truncate on little endian.
1257     if (DepLI->getType() != L->getType())
1258       return false;
1259     
1260     // Remove it!
1261     L->replaceAllUsesWith(DepLI);
1262     if (isa<PointerType>(DepLI->getType()))
1263       MD->invalidateCachedPointerInfo(DepLI);
1264     toErase.push_back(L);
1265     NumGVNLoad++;
1266     return true;
1267   }
1268   
1269   // If this load really doesn't depend on anything, then we must be loading an
1270   // undef value.  This can happen when loading for a fresh allocation with no
1271   // intervening stores, for example.
1272   if (isa<AllocationInst>(DepInst)) {
1273     L->replaceAllUsesWith(UndefValue::get(L->getType()));
1274     toErase.push_back(L);
1275     NumGVNLoad++;
1276     return true;
1277   }
1278
1279   return false;
1280 }
1281
1282 Value* GVN::lookupNumber(BasicBlock* BB, uint32_t num) {
1283   DenseMap<BasicBlock*, ValueNumberScope*>::iterator I = localAvail.find(BB);
1284   if (I == localAvail.end())
1285     return 0;
1286   
1287   ValueNumberScope* locals = I->second;
1288   
1289   while (locals) {
1290     DenseMap<uint32_t, Value*>::iterator I = locals->table.find(num);
1291     if (I != locals->table.end())
1292       return I->second;
1293     else
1294       locals = locals->parent;
1295   }
1296   
1297   return 0;
1298 }
1299
1300 /// AttemptRedundancyElimination - If the "fast path" of redundancy elimination
1301 /// by inheritance from the dominator fails, see if we can perform phi 
1302 /// construction to eliminate the redundancy.
1303 Value* GVN::AttemptRedundancyElimination(Instruction* orig, unsigned valno) {
1304   BasicBlock* BaseBlock = orig->getParent();
1305   
1306   SmallPtrSet<BasicBlock*, 4> Visited;
1307   SmallVector<BasicBlock*, 8> Stack;
1308   Stack.push_back(BaseBlock);
1309   
1310   DenseMap<BasicBlock*, Value*> Results;
1311   
1312   // Walk backwards through our predecessors, looking for instances of the
1313   // value number we're looking for.  Instances are recorded in the Results
1314   // map, which is then used to perform phi construction.
1315   while (!Stack.empty()) {
1316     BasicBlock* Current = Stack.back();
1317     Stack.pop_back();
1318     
1319     // If we've walked all the way to a proper dominator, then give up. Cases
1320     // where the instance is in the dominator will have been caught by the fast
1321     // path, and any cases that require phi construction further than this are
1322     // probably not worth it anyways.  Note that this is a SIGNIFICANT compile
1323     // time improvement.
1324     if (DT->properlyDominates(Current, orig->getParent())) return 0;
1325     
1326     DenseMap<BasicBlock*, ValueNumberScope*>::iterator LA =
1327                                                        localAvail.find(Current);
1328     if (LA == localAvail.end()) return 0;
1329     DenseMap<uint32_t, Value*>::iterator V = LA->second->table.find(valno);
1330     
1331     if (V != LA->second->table.end()) {
1332       // Found an instance, record it.
1333       Results.insert(std::make_pair(Current, V->second));
1334       continue;
1335     }
1336     
1337     // If we reach the beginning of the function, then give up.
1338     if (pred_begin(Current) == pred_end(Current))
1339       return 0;
1340     
1341     for (pred_iterator PI = pred_begin(Current), PE = pred_end(Current);
1342          PI != PE; ++PI)
1343       if (Visited.insert(*PI))
1344         Stack.push_back(*PI);
1345   }
1346   
1347   // If we didn't find instances, give up.  Otherwise, perform phi construction.
1348   if (Results.size() == 0)
1349     return 0;
1350   else
1351     return GetValueForBlock(BaseBlock, orig, Results, true);
1352 }
1353
1354 /// processInstruction - When calculating availability, handle an instruction
1355 /// by inserting it into the appropriate sets
1356 bool GVN::processInstruction(Instruction *I,
1357                              SmallVectorImpl<Instruction*> &toErase) {
1358   if (LoadInst* L = dyn_cast<LoadInst>(I)) {
1359     bool changed = processLoad(L, toErase);
1360     
1361     if (!changed) {
1362       unsigned num = VN.lookup_or_add(L);
1363       localAvail[I->getParent()]->table.insert(std::make_pair(num, L));
1364     }
1365     
1366     return changed;
1367   }
1368   
1369   uint32_t nextNum = VN.getNextUnusedValueNumber();
1370   unsigned num = VN.lookup_or_add(I);
1371   
1372   if (BranchInst* BI = dyn_cast<BranchInst>(I)) {
1373     localAvail[I->getParent()]->table.insert(std::make_pair(num, I));
1374     
1375     if (!BI->isConditional() || isa<Constant>(BI->getCondition()))
1376       return false;
1377     
1378     Value* branchCond = BI->getCondition();
1379     uint32_t condVN = VN.lookup_or_add(branchCond);
1380     
1381     BasicBlock* trueSucc = BI->getSuccessor(0);
1382     BasicBlock* falseSucc = BI->getSuccessor(1);
1383     
1384     if (trueSucc->getSinglePredecessor())
1385       localAvail[trueSucc]->table[condVN] = ConstantInt::getTrue();
1386     if (falseSucc->getSinglePredecessor())
1387       localAvail[falseSucc]->table[condVN] = ConstantInt::getFalse();
1388
1389     return false;
1390     
1391   // Allocations are always uniquely numbered, so we can save time and memory
1392   // by fast failing them.  
1393   } else if (isa<AllocationInst>(I) || isa<TerminatorInst>(I)) {
1394     localAvail[I->getParent()]->table.insert(std::make_pair(num, I));
1395     return false;
1396   }
1397   
1398   // Collapse PHI nodes
1399   if (PHINode* p = dyn_cast<PHINode>(I)) {
1400     Value* constVal = CollapsePhi(p);
1401     
1402     if (constVal) {
1403       for (PhiMapType::iterator PI = phiMap.begin(), PE = phiMap.end();
1404            PI != PE; ++PI)
1405         PI->second.erase(p);
1406         
1407       p->replaceAllUsesWith(constVal);
1408       if (isa<PointerType>(constVal->getType()))
1409         MD->invalidateCachedPointerInfo(constVal);
1410       VN.erase(p);
1411       
1412       toErase.push_back(p);
1413     } else {
1414       localAvail[I->getParent()]->table.insert(std::make_pair(num, I));
1415     }
1416   
1417   // If the number we were assigned was a brand new VN, then we don't
1418   // need to do a lookup to see if the number already exists
1419   // somewhere in the domtree: it can't!
1420   } else if (num == nextNum) {
1421     localAvail[I->getParent()]->table.insert(std::make_pair(num, I));
1422     
1423   // Perform fast-path value-number based elimination of values inherited from
1424   // dominators.
1425   } else if (Value* repl = lookupNumber(I->getParent(), num)) {
1426     // Remove it!
1427     VN.erase(I);
1428     I->replaceAllUsesWith(repl);
1429     if (isa<PointerType>(repl->getType()))
1430       MD->invalidateCachedPointerInfo(repl);
1431     toErase.push_back(I);
1432     return true;
1433
1434 #if 0
1435   // Perform slow-pathvalue-number based elimination with phi construction.
1436   } else if (Value* repl = AttemptRedundancyElimination(I, num)) {
1437     // Remove it!
1438     VN.erase(I);
1439     I->replaceAllUsesWith(repl);
1440     if (isa<PointerType>(repl->getType()))
1441       MD->invalidateCachedPointerInfo(repl);
1442     toErase.push_back(I);
1443     return true;
1444 #endif
1445   } else {
1446     localAvail[I->getParent()]->table.insert(std::make_pair(num, I));
1447   }
1448   
1449   return false;
1450 }
1451
1452 /// runOnFunction - This is the main transformation entry point for a function.
1453 bool GVN::runOnFunction(Function& F) {
1454   MD = &getAnalysis<MemoryDependenceAnalysis>();
1455   DT = &getAnalysis<DominatorTree>();
1456   VN.setAliasAnalysis(&getAnalysis<AliasAnalysis>());
1457   VN.setMemDep(MD);
1458   VN.setDomTree(DT);
1459   
1460   bool changed = false;
1461   bool shouldContinue = true;
1462   
1463   // Merge unconditional branches, allowing PRE to catch more
1464   // optimization opportunities.
1465   for (Function::iterator FI = F.begin(), FE = F.end(); FI != FE; ) {
1466     BasicBlock* BB = FI;
1467     ++FI;
1468     bool removedBlock = MergeBlockIntoPredecessor(BB, this);
1469     if (removedBlock) NumGVNBlocks++;
1470     
1471     changed |= removedBlock;
1472   }
1473   
1474   unsigned Iteration = 0;
1475   
1476   while (shouldContinue) {
1477     DEBUG(cerr << "GVN iteration: " << Iteration << "\n");
1478     shouldContinue = iterateOnFunction(F);
1479     changed |= shouldContinue;
1480     ++Iteration;
1481   }
1482   
1483   if (EnablePRE) {
1484     bool PREChanged = true;
1485     while (PREChanged) {
1486       PREChanged = performPRE(F);
1487       changed |= PREChanged;
1488     }
1489   }
1490   // FIXME: Should perform GVN again after PRE does something.  PRE can move
1491   // computations into blocks where they become fully redundant.  Note that
1492   // we can't do this until PRE's critical edge splitting updates memdep.
1493   // Actually, when this happens, we should just fully integrate PRE into GVN.
1494
1495   cleanupGlobalSets();
1496
1497   return changed;
1498 }
1499
1500
1501 bool GVN::processBlock(BasicBlock* BB) {
1502   // FIXME: Kill off toErase by doing erasing eagerly in a helper function (and
1503   // incrementing BI before processing an instruction).
1504   SmallVector<Instruction*, 8> toErase;
1505   bool changed_function = false;
1506   
1507   for (BasicBlock::iterator BI = BB->begin(), BE = BB->end();
1508        BI != BE;) {
1509     changed_function |= processInstruction(BI, toErase);
1510     if (toErase.empty()) {
1511       ++BI;
1512       continue;
1513     }
1514     
1515     // If we need some instructions deleted, do it now.
1516     NumGVNInstr += toErase.size();
1517     
1518     // Avoid iterator invalidation.
1519     bool AtStart = BI == BB->begin();
1520     if (!AtStart)
1521       --BI;
1522
1523     for (SmallVector<Instruction*, 4>::iterator I = toErase.begin(),
1524          E = toErase.end(); I != E; ++I) {
1525       DEBUG(cerr << "GVN removed: " << **I);
1526       MD->removeInstruction(*I);
1527       (*I)->eraseFromParent();
1528       DEBUG(verifyRemoved(*I));
1529     }
1530     toErase.clear();
1531
1532     if (AtStart)
1533       BI = BB->begin();
1534     else
1535       ++BI;
1536   }
1537   
1538   return changed_function;
1539 }
1540
1541 /// performPRE - Perform a purely local form of PRE that looks for diamond
1542 /// control flow patterns and attempts to perform simple PRE at the join point.
1543 bool GVN::performPRE(Function& F) {
1544   bool Changed = false;
1545   SmallVector<std::pair<TerminatorInst*, unsigned>, 4> toSplit;
1546   DenseMap<BasicBlock*, Value*> predMap;
1547   for (df_iterator<BasicBlock*> DI = df_begin(&F.getEntryBlock()),
1548        DE = df_end(&F.getEntryBlock()); DI != DE; ++DI) {
1549     BasicBlock* CurrentBlock = *DI;
1550     
1551     // Nothing to PRE in the entry block.
1552     if (CurrentBlock == &F.getEntryBlock()) continue;
1553     
1554     for (BasicBlock::iterator BI = CurrentBlock->begin(),
1555          BE = CurrentBlock->end(); BI != BE; ) {
1556       Instruction *CurInst = BI++;
1557
1558       if (isa<AllocationInst>(CurInst) || isa<TerminatorInst>(CurInst) ||
1559           isa<PHINode>(CurInst) || (CurInst->getType() == Type::VoidTy) ||
1560           CurInst->mayReadFromMemory() || CurInst->mayHaveSideEffects() ||
1561           isa<DbgInfoIntrinsic>(CurInst))
1562         continue;
1563
1564       uint32_t valno = VN.lookup(CurInst);
1565       
1566       // Look for the predecessors for PRE opportunities.  We're
1567       // only trying to solve the basic diamond case, where
1568       // a value is computed in the successor and one predecessor,
1569       // but not the other.  We also explicitly disallow cases
1570       // where the successor is its own predecessor, because they're
1571       // more complicated to get right.
1572       unsigned numWith = 0;
1573       unsigned numWithout = 0;
1574       BasicBlock* PREPred = 0;
1575       predMap.clear();
1576
1577       for (pred_iterator PI = pred_begin(CurrentBlock),
1578            PE = pred_end(CurrentBlock); PI != PE; ++PI) {
1579         // We're not interested in PRE where the block is its
1580         // own predecessor, on in blocks with predecessors
1581         // that are not reachable.
1582         if (*PI == CurrentBlock) {
1583           numWithout = 2;
1584           break;
1585         } else if (!localAvail.count(*PI))  {
1586           numWithout = 2;
1587           break;
1588         }
1589         
1590         DenseMap<uint32_t, Value*>::iterator predV = 
1591                                             localAvail[*PI]->table.find(valno);
1592         if (predV == localAvail[*PI]->table.end()) {
1593           PREPred = *PI;
1594           numWithout++;
1595         } else if (predV->second == CurInst) {
1596           numWithout = 2;
1597         } else {
1598           predMap[*PI] = predV->second;
1599           numWith++;
1600         }
1601       }
1602       
1603       // Don't do PRE when it might increase code size, i.e. when
1604       // we would need to insert instructions in more than one pred.
1605       if (numWithout != 1 || numWith == 0)
1606         continue;
1607       
1608       // We can't do PRE safely on a critical edge, so instead we schedule
1609       // the edge to be split and perform the PRE the next time we iterate
1610       // on the function.
1611       unsigned succNum = 0;
1612       for (unsigned i = 0, e = PREPred->getTerminator()->getNumSuccessors();
1613            i != e; ++i)
1614         if (PREPred->getTerminator()->getSuccessor(i) == CurrentBlock) {
1615           succNum = i;
1616           break;
1617         }
1618         
1619       if (isCriticalEdge(PREPred->getTerminator(), succNum)) {
1620         toSplit.push_back(std::make_pair(PREPred->getTerminator(), succNum));
1621         continue;
1622       }
1623       
1624       // Instantiate the expression the in predecessor that lacked it.
1625       // Because we are going top-down through the block, all value numbers
1626       // will be available in the predecessor by the time we need them.  Any
1627       // that weren't original present will have been instantiated earlier
1628       // in this loop.
1629       Instruction* PREInstr = CurInst->clone();
1630       bool success = true;
1631       for (unsigned i = 0, e = CurInst->getNumOperands(); i != e; ++i) {
1632         Value *Op = PREInstr->getOperand(i);
1633         if (isa<Argument>(Op) || isa<Constant>(Op) || isa<GlobalValue>(Op))
1634           continue;
1635         
1636         if (Value *V = lookupNumber(PREPred, VN.lookup(Op))) {
1637           PREInstr->setOperand(i, V);
1638         } else {
1639           success = false;
1640           break;
1641         }
1642       }
1643       
1644       // Fail out if we encounter an operand that is not available in
1645       // the PRE predecessor.  This is typically because of loads which 
1646       // are not value numbered precisely.
1647       if (!success) {
1648         delete PREInstr;
1649         DEBUG(verifyRemoved(PREInstr));
1650         continue;
1651       }
1652       
1653       PREInstr->insertBefore(PREPred->getTerminator());
1654       PREInstr->setName(CurInst->getName() + ".pre");
1655       predMap[PREPred] = PREInstr;
1656       VN.add(PREInstr, valno);
1657       NumGVNPRE++;
1658       
1659       // Update the availability map to include the new instruction.
1660       localAvail[PREPred]->table.insert(std::make_pair(valno, PREInstr));
1661       
1662       // Create a PHI to make the value available in this block.
1663       PHINode* Phi = PHINode::Create(CurInst->getType(),
1664                                      CurInst->getName() + ".pre-phi",
1665                                      CurrentBlock->begin());
1666       for (pred_iterator PI = pred_begin(CurrentBlock),
1667            PE = pred_end(CurrentBlock); PI != PE; ++PI)
1668         Phi->addIncoming(predMap[*PI], *PI);
1669       
1670       VN.add(Phi, valno);
1671       localAvail[CurrentBlock]->table[valno] = Phi;
1672       
1673       CurInst->replaceAllUsesWith(Phi);
1674       if (isa<PointerType>(Phi->getType()))
1675         MD->invalidateCachedPointerInfo(Phi);
1676       VN.erase(CurInst);
1677       
1678       DEBUG(cerr << "GVN PRE removed: " << *CurInst);
1679       MD->removeInstruction(CurInst);
1680       CurInst->eraseFromParent();
1681       DEBUG(verifyRemoved(CurInst));
1682       Changed = true;
1683     }
1684   }
1685   
1686   for (SmallVector<std::pair<TerminatorInst*, unsigned>, 4>::iterator
1687        I = toSplit.begin(), E = toSplit.end(); I != E; ++I)
1688     SplitCriticalEdge(I->first, I->second, this);
1689   
1690   return Changed || toSplit.size();
1691 }
1692
1693 /// iterateOnFunction - Executes one iteration of GVN
1694 bool GVN::iterateOnFunction(Function &F) {
1695   cleanupGlobalSets();
1696
1697   for (df_iterator<DomTreeNode*> DI = df_begin(DT->getRootNode()),
1698        DE = df_end(DT->getRootNode()); DI != DE; ++DI) {
1699     if (DI->getIDom())
1700       localAvail[DI->getBlock()] =
1701                    new ValueNumberScope(localAvail[DI->getIDom()->getBlock()]);
1702     else
1703       localAvail[DI->getBlock()] = new ValueNumberScope(0);
1704   }
1705
1706   // Top-down walk of the dominator tree
1707   bool changed = false;
1708 #if 0
1709   // Needed for value numbering with phi construction to work.
1710   ReversePostOrderTraversal<Function*> RPOT(&F);
1711   for (ReversePostOrderTraversal<Function*>::rpo_iterator RI = RPOT.begin(),
1712        RE = RPOT.end(); RI != RE; ++RI)
1713     changed |= processBlock(*RI);
1714 #else
1715   for (df_iterator<DomTreeNode*> DI = df_begin(DT->getRootNode()),
1716        DE = df_end(DT->getRootNode()); DI != DE; ++DI)
1717     changed |= processBlock(DI->getBlock());
1718 #endif
1719
1720   return changed;
1721 }
1722
1723 void GVN::cleanupGlobalSets() {
1724   VN.clear();
1725   phiMap.clear();
1726
1727   for (DenseMap<BasicBlock*, ValueNumberScope*>::iterator
1728        I = localAvail.begin(), E = localAvail.end(); I != E; ++I)
1729     delete I->second;
1730   localAvail.clear();
1731 }
1732
1733 /// verifyRemoved - Verify that the specified instruction does not occur in our
1734 /// internal data structures.
1735 void GVN::verifyRemoved(const Instruction *Inst) const {
1736   VN.verifyRemoved(Inst);
1737
1738   // Walk through the PHI map to make sure the instruction isn't hiding in there
1739   // somewhere.
1740   for (PhiMapType::iterator
1741          I = phiMap.begin(), E = phiMap.end(); I != E; ++I) {
1742     assert(I->first != Inst && "Inst is still a key in PHI map!");
1743
1744     for (SmallPtrSet<Instruction*, 4>::iterator
1745            II = I->second.begin(), IE = I->second.end(); II != IE; ++II) {
1746       assert(*II != Inst && "Inst is still a value in PHI map!");
1747     }
1748   }
1749
1750   // Walk through the value number scope to make sure the instruction isn't
1751   // ferreted away in it.
1752   for (DenseMap<BasicBlock*, ValueNumberScope*>::iterator
1753          I = localAvail.begin(), E = localAvail.end(); I != E; ++I) {
1754     const ValueNumberScope *VNS = I->second;
1755
1756     while (VNS) {
1757       for (DenseMap<uint32_t, Value*>::iterator
1758              II = VNS->table.begin(), IE = VNS->table.end(); II != IE; ++II) {
1759         assert(II->second != Inst && "Inst still in value numbering scope!");
1760       }
1761
1762       VNS = VNS->parent;
1763     }
1764   }
1765 }