Updated to work with new CFG.h file.
[oota-llvm.git] / lib / Transforms / Scalar / DCE.cpp
1 //===- DCE.cpp - Code to perform dead code elimination --------------------===//
2 //
3 // This file implements dead code elimination and basic block merging.
4 //
5 // Specifically, this:
6 //   * removes definitions with no uses (including unused constants)
7 //   * removes basic blocks with no predecessors
8 //   * merges a basic block into its predecessor if there is only one and the
9 //     predecessor only has one successor.
10 //   * Eliminates PHI nodes for basic blocks with a single predecessor
11 //   * Eliminates a basic block that only contains an unconditional branch
12 //
13 // TODO: This should REALLY be recursive instead of iterative.  Right now, we 
14 // scan linearly through values, removing unused ones as we go.  The problem is
15 // that this may cause other earlier values to become unused.  To make sure that
16 // we get them all, we iterate until things stop changing.  Instead, when 
17 // removing a value, recheck all of its operands to see if they are now unused.
18 // Piece of cake, and more efficient as well.
19 //
20 //===----------------------------------------------------------------------===//
21
22 #include "llvm/Module.h"
23 #include "llvm/Method.h"
24 #include "llvm/BasicBlock.h"
25 #include "llvm/iTerminators.h"
26 #include "llvm/iOther.h"
27 #include "llvm/Opt/AllOpts.h"
28 #include "llvm/Assembly/Writer.h"
29 #include "llvm/CFG.h"
30
31 struct ConstPoolDCE { 
32   enum { EndOffs = 0 };
33   static bool isDCEable(const Value *) { return true; } 
34 };
35
36 struct BasicBlockDCE {
37   enum { EndOffs = 1 };
38   static bool isDCEable(const Instruction *I) {
39     return !I->hasSideEffects();
40   }
41 };
42
43
44 template<class ValueSubclass, class ItemParentType, class DCEController>
45 static bool RemoveUnusedDefs(ValueHolder<ValueSubclass, ItemParentType> &Vals, 
46                              DCEController DCEControl) {
47   bool Changed = false;
48   typedef ValueHolder<ValueSubclass, ItemParentType> Container;
49
50   int Offset = DCEController::EndOffs;
51   for (Container::iterator DI = Vals.begin(); DI != Vals.end()-Offset; ) {
52     // Look for un"used" definitions...
53     if ((*DI)->use_empty() && DCEController::isDCEable(*DI)) {
54       // Bye bye
55       //cerr << "Removing: " << *DI;
56       delete Vals.remove(DI);
57       Changed = true;
58     } else {
59       DI++;
60     }
61   }
62   return Changed;
63 }
64
65 // RemoveSingularPHIs - This removes PHI nodes from basic blocks that have only
66 // a single predecessor.  This means that the PHI node must only have a single
67 // RHS value and can be eliminated.
68 //
69 // This routine is very simple because we know that PHI nodes must be the first
70 // things in a basic block, if they are present.
71 //
72 static bool RemoveSingularPHIs(BasicBlock *BB) {
73   pred_iterator PI(pred_begin(BB));
74   if (PI == pred_end(BB) || ++PI != pred_end(BB)) 
75     return false;   // More than one predecessor...
76
77   Instruction *I = BB->getInstList().front();
78   if (I->getInstType() != Instruction::PHINode) return false;  // No PHI nodes
79
80   cerr << "Killing PHIs from " << BB;
81   cerr << "Pred #0 = " << *pred_begin(BB);
82
83   cerr << "Method == " << BB->getParent();
84
85   do {
86     PHINode *PN = (PHINode*)I;
87     assert(PN->getOperand(1) == 0 && "PHI node should only have one value!");
88     Value *V = PN->getOperand(0);
89
90     PN->replaceAllUsesWith(V);      // Replace PHI node with its single value.
91     delete BB->getInstList().remove(BB->getInstList().begin());
92
93     I = BB->getInstList().front();
94   } while (I->getInstType() == Instruction::PHINode);
95         
96   return true;  // Yes, we nuked at least one phi node
97 }
98
99 bool DoRemoveUnusedConstants(SymTabValue *S) {
100   bool Changed = false;
101   ConstantPool &CP = S->getConstantPool();
102   for (ConstantPool::plane_iterator PI = CP.begin(); PI != CP.end(); ++PI)
103     Changed |= RemoveUnusedDefs(**PI, ConstPoolDCE());
104   return Changed;
105 }
106
107 static void ReplaceUsesWithConstant(Instruction *I) {
108   // Get the method level constant pool
109   ConstantPool &CP = I->getParent()->getParent()->getConstantPool();
110
111   ConstPoolVal *CPV = 0;
112   ConstantPool::PlaneType *P;
113   if (!CP.getPlane(I->getType(), P)) {  // Does plane exist?
114     // Yes, is it empty?
115     if (!P->empty()) CPV = P->front();
116   }
117
118   if (CPV == 0) { // We don't have an existing constant to reuse.  Just add one.
119     CPV = ConstPoolVal::getNullConstant(I->getType());  // Create a new constant
120
121     // Add the new value to the constant pool...
122     CP.insert(CPV);
123   }
124   
125   // Make all users of this instruction reference the constant instead
126   I->replaceAllUsesWith(CPV);
127 }
128
129 // RemovePredecessorFromBlock - This function is called when we are about
130 // to remove a predecessor from a basic block.  This function takes care of
131 // removing the predecessor from the PHI nodes in BB so that after the pred
132 // is removed, the number of PHI slots per bb is equal to the number of
133 // predecessors.
134 //
135 static void RemovePredecessorFromBlock(BasicBlock *BB, BasicBlock *Pred) {
136   pred_iterator PI(pred_begin(BB)), EI(pred_end(BB));
137   unsigned pred_idx = 0, max_idx;
138
139   cerr << "RPFB: " << Pred << "From Block: " << BB;
140   
141   // Find out what index the predecessor is...
142   for (; *PI != BB; ++PI, ++pred_idx) {
143     assert(PI != EI && "Pred is not a predecessor of BB!");
144   }
145
146   // Loop over the rest of the predecssors until we run out, or until we find
147   // out that there are more than 2 predecessors.
148   for (max_idx = pred_idx; PI != EI && max_idx < 2; ++PI, ++max_idx) /*empty*/;
149
150   // If there are exactly two predecessors, then we want to nuke the PHI nodes
151   // altogether.
152   bool NukePHIs = max_idx == 1;
153   
154   // Okay, now we know that we need to remove predecessor #pred_idx from all
155   // PHI nodes.  Iterate over each PHI node fixing them up
156   BasicBlock::InstListType::iterator II(BB->getInstList().begin());
157   for (; (*II)->getInstType() == Instruction::PHINode; ++II) {
158     PHINode *PN = (PHINode*)*II;
159     PN->removeIncomingValue(pred_idx);
160
161     if (NukePHIs) {  // Destroy the PHI altogether??
162       assert(PN->getOperand(1) == 0 && "PHI node should only have one value!");
163       Value *V = PN->getOperand(0);
164
165       PN->replaceAllUsesWith(V);      // Replace PHI node with its single value.
166       delete BB->getInstList().remove(II);
167     }
168   }
169 }
170
171 // PropogatePredecessors - This gets "Succ" ready to have the predecessors from
172 // "BB".  This is a little tricky because "Succ" has PHI nodes, which need to
173 // have extra slots added to them to hold the merge edges from BB's
174 // predecessors.
175 //
176 // Assumption: BB is the single predecessor of Succ.
177 //
178 static void PropogatePredecessorsForPHIs(BasicBlock *BB, BasicBlock *Succ) {
179   assert(BB && Succ && *pred_begin(Succ) == BB && "BB is only pred of Succ" &&
180          ++pred_begin(Succ) == pred_end(Succ));
181
182   // If there is more than one predecessor, and there are PHI nodes in
183   // the successor, then we need to add incoming edges for the PHI nodes
184   pred_iterator PI(pred_begin(BB));
185   for (; PI != pred_end(BB); ++PI) {
186     // TODO:
187   }
188 }
189
190 static bool DoDCEPass(Method *M) {
191   Method::BasicBlocksType &BBs = M->getBasicBlocks();
192   Method::BasicBlocksType::iterator BBIt, BBEnd = BBs.end();
193   if (BBs.begin() == BBEnd) return false;  // Nothing to do
194   bool Changed = false;
195
196   // Loop through now and remove instructions that have no uses...
197   for (BBIt = BBs.begin(); BBIt != BBEnd; BBIt++) {
198     Changed |= RemoveUnusedDefs((*BBIt)->getInstList(), BasicBlockDCE());
199     Changed |= RemoveSingularPHIs(*BBIt);
200   }
201
202   // Loop over all of the basic blocks (except the first one) and remove them
203   // if they are unneeded...
204   //
205   for (BBIt = BBs.begin(), ++BBIt; BBIt != BBs.end(); ++BBIt) {
206     BasicBlock *BB = *BBIt;
207     assert(BB->getTerminator() && "Degenerate basic block encountered!");
208
209 #if 0
210     // Remove basic blocks that have no predecessors... which are unreachable.
211     if (pred_begin(BB) == pred_end(BB) &&
212         !BB->hasConstantPoolReferences() && 0) {
213       cerr << "Removing BB: \n" << BB;
214
215       // Loop through all of our successors and make sure they know that one
216       // of their predecessors is going away.
217       for (succ_iterator SI = succ_begin(BB), EI = succ_end(BB); SI != EI; ++SI)
218         RemovePredecessorFromBlock(*SI, BB);
219
220       while (!BB->getInstList().empty()) {
221         Instruction *I = BB->getInstList().front();
222         // If this instruction is used, replace uses with an arbitrary
223         // constant value.  Because control flow can't get here, we don't care
224         // what we replace the value with.
225         if (!I->use_empty()) ReplaceUsesWithConstant(I);
226
227         // Remove the instruction from the basic block
228         delete BB->getInstList().remove(BB->getInstList().begin());
229       }
230       delete BBs.remove(BBIt);
231       --BBIt;  // remove puts use on the next block, we want the previous one
232       Changed = true;
233       continue;
234     } 
235
236     // Check to see if this block has no instructions and only a single 
237     // successor.  If so, replace block references with successor.
238     succ_iterator SI(succ_begin(BB));
239     if (SI != succ_end(BB) && ++SI == succ_end(BB)) {  // One succ?
240       Instruction *I = BB->getInstList().front();
241       if (I->isTerminator()) {   // Terminator is the only instruction!
242
243         if (Succ->getInstList().front()->getInstType() == Instruction::PHINode){
244           // Add entries to the PHI nodes so that the PHI nodes have the right
245           // number of entries...
246           PropogatePredecessorsForPHIs(BB, Succ);
247         }
248
249         BasicBlock *Succ = *succ_begin(BB); // There is exactly one successor
250         BB->replaceAllUsesWith(Succ);
251         cerr << "Killing Trivial BB: \n" << BB;
252
253         BB = BBs.remove(BBIt);
254         --BBIt; // remove puts use on the next block, we want the previous one
255         
256         if (BB->hasName() && !Succ->hasName())  // Transfer name if we can
257           Succ->setName(BB->getName());
258         delete BB;                              // Delete basic block
259
260         cerr << "Method after removal: \n" << M;
261         Changed = true;
262         continue;
263       }
264     }
265 #endif
266
267     // Merge basic blocks into their predecessor if there is only one pred, 
268     // and if there is only one successor of the predecessor. 
269     pred_iterator PI(pred_begin(BB));
270     if (PI != pred_end(BB) && *PI != BB &&    // Not empty?  Not same BB?
271         ++PI == pred_end(BB) && !BB->hasConstantPoolReferences()) {
272       BasicBlock *Pred = *pred_begin(BB);
273       TerminatorInst *Term = Pred->getTerminator();
274       assert(Term != 0 && "malformed basic block without terminator!");
275
276       // Does the predecessor block only have a single successor?
277       succ_iterator SI(succ_begin(Pred));
278       if (++SI == succ_end(Pred)) {
279         //cerr << "Merging: " << BB << "into: " << Pred;
280
281         // Delete the unconditianal branch from the predecessor...
282         BasicBlock::InstListType::iterator DI = Pred->getInstList().end();
283         assert(Pred->getTerminator() && 
284                "Degenerate basic block encountered!");  // Empty bb???      
285         delete Pred->getInstList().remove(--DI);
286         
287         // Move all definitions in the succecessor to the predecessor...
288         while (!BB->getInstList().empty()) {
289           DI = BB->getInstList().begin();
290           Instruction *Def = BB->getInstList().remove(DI); // Remove from front
291           Pred->getInstList().push_back(Def);              // Add to end...
292         }
293         
294         // Remove basic block from the method... and advance iterator to the
295         // next valid block...
296         BB = BBs.remove(BBIt);
297         --BBIt;  // remove puts us on the NEXT bb.  We want the prev BB
298         Changed = true;
299         
300         // Inherit predecessors name if it exists...
301         if (BB->hasName() && !Pred->hasName()) Pred->setName(BB->getName());
302         
303         // You ARE the weakest link... goodbye
304         delete BB;
305       }
306     }
307   }
308
309   // Remove unused constants
310   Changed |= DoRemoveUnusedConstants(M);
311   return Changed;
312 }
313
314
315 // It is possible that we may require multiple passes over the code to fully
316 // eliminate dead code.  Iterate until we are done.
317 //
318 bool DoDeadCodeElimination(Method *M) {
319   bool Changed = false;
320   while (DoDCEPass(M)) Changed = true;
321   return Changed;
322 }
323
324 bool DoDeadCodeElimination(Module *C) { 
325   bool Val = ApplyOptToAllMethods(C, DoDeadCodeElimination);
326   while (DoRemoveUnusedConstants(C)) Val = true;
327   return Val;
328 }