GlobalOpt.cpp revision afa10bfb94fb68da6cc3a895f7a4730df87064dd
1//===- GlobalOpt.cpp - Optimize Global Variables --------------------------===//
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 transforms simple global variables that never have their address
11// taken.  If obviously true, it marks read/write globals as constant, deletes
12// variables only stored to, etc.
13//
14//===----------------------------------------------------------------------===//
15
16#define DEBUG_TYPE "globalopt"
17#include "llvm/Transforms/IPO.h"
18#include "llvm/CallingConv.h"
19#include "llvm/Constants.h"
20#include "llvm/DerivedTypes.h"
21#include "llvm/Instructions.h"
22#include "llvm/IntrinsicInst.h"
23#include "llvm/Module.h"
24#include "llvm/ParameterAttributes.h"
25#include "llvm/Pass.h"
26#include "llvm/Analysis/ConstantFolding.h"
27#include "llvm/Target/TargetData.h"
28#include "llvm/Support/Compiler.h"
29#include "llvm/Support/Debug.h"
30#include "llvm/Support/GetElementPtrTypeIterator.h"
31#include "llvm/ADT/SmallPtrSet.h"
32#include "llvm/ADT/SmallVector.h"
33#include "llvm/ADT/Statistic.h"
34#include "llvm/ADT/StringExtras.h"
35#include <algorithm>
36#include <set>
37using namespace llvm;
38
39STATISTIC(NumMarked    , "Number of globals marked constant");
40STATISTIC(NumSRA       , "Number of aggregate globals broken into scalars");
41STATISTIC(NumHeapSRA   , "Number of heap objects SRA'd");
42STATISTIC(NumSubstitute,"Number of globals with initializers stored into them");
43STATISTIC(NumDeleted   , "Number of globals deleted");
44STATISTIC(NumFnDeleted , "Number of functions deleted");
45STATISTIC(NumGlobUses  , "Number of global uses devirtualized");
46STATISTIC(NumLocalized , "Number of globals localized");
47STATISTIC(NumShrunkToBool  , "Number of global vars shrunk to booleans");
48STATISTIC(NumFastCallFns   , "Number of functions converted to fastcc");
49STATISTIC(NumCtorsEvaluated, "Number of static ctors evaluated");
50STATISTIC(NumNestRemoved   , "Number of nest attributes removed");
51
52namespace {
53  struct VISIBILITY_HIDDEN GlobalOpt : public ModulePass {
54    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
55      AU.addRequired<TargetData>();
56    }
57    static char ID; // Pass identification, replacement for typeid
58    GlobalOpt() : ModulePass((intptr_t)&ID) {}
59
60    bool runOnModule(Module &M);
61
62  private:
63    GlobalVariable *FindGlobalCtors(Module &M);
64    bool OptimizeFunctions(Module &M);
65    bool OptimizeGlobalVars(Module &M);
66    bool OptimizeGlobalCtorsList(GlobalVariable *&GCL);
67    bool ProcessInternalGlobal(GlobalVariable *GV,Module::global_iterator &GVI);
68  };
69
70  char GlobalOpt::ID = 0;
71  RegisterPass<GlobalOpt> X("globalopt", "Global Variable Optimizer");
72}
73
74ModulePass *llvm::createGlobalOptimizerPass() { return new GlobalOpt(); }
75
76/// GlobalStatus - As we analyze each global, keep track of some information
77/// about it.  If we find out that the address of the global is taken, none of
78/// this info will be accurate.
79struct VISIBILITY_HIDDEN GlobalStatus {
80  /// isLoaded - True if the global is ever loaded.  If the global isn't ever
81  /// loaded it can be deleted.
82  bool isLoaded;
83
84  /// StoredType - Keep track of what stores to the global look like.
85  ///
86  enum StoredType {
87    /// NotStored - There is no store to this global.  It can thus be marked
88    /// constant.
89    NotStored,
90
91    /// isInitializerStored - This global is stored to, but the only thing
92    /// stored is the constant it was initialized with.  This is only tracked
93    /// for scalar globals.
94    isInitializerStored,
95
96    /// isStoredOnce - This global is stored to, but only its initializer and
97    /// one other value is ever stored to it.  If this global isStoredOnce, we
98    /// track the value stored to it in StoredOnceValue below.  This is only
99    /// tracked for scalar globals.
100    isStoredOnce,
101
102    /// isStored - This global is stored to by multiple values or something else
103    /// that we cannot track.
104    isStored
105  } StoredType;
106
107  /// StoredOnceValue - If only one value (besides the initializer constant) is
108  /// ever stored to this global, keep track of what value it is.
109  Value *StoredOnceValue;
110
111  /// AccessingFunction/HasMultipleAccessingFunctions - These start out
112  /// null/false.  When the first accessing function is noticed, it is recorded.
113  /// When a second different accessing function is noticed,
114  /// HasMultipleAccessingFunctions is set to true.
115  Function *AccessingFunction;
116  bool HasMultipleAccessingFunctions;
117
118  /// HasNonInstructionUser - Set to true if this global has a user that is not
119  /// an instruction (e.g. a constant expr or GV initializer).
120  bool HasNonInstructionUser;
121
122  /// HasPHIUser - Set to true if this global has a user that is a PHI node.
123  bool HasPHIUser;
124
125  GlobalStatus() : isLoaded(false), StoredType(NotStored), StoredOnceValue(0),
126                   AccessingFunction(0), HasMultipleAccessingFunctions(false),
127                   HasNonInstructionUser(false), HasPHIUser(false) {}
128};
129
130
131
132/// ConstantIsDead - Return true if the specified constant is (transitively)
133/// dead.  The constant may be used by other constants (e.g. constant arrays and
134/// constant exprs) as long as they are dead, but it cannot be used by anything
135/// else.
136static bool ConstantIsDead(Constant *C) {
137  if (isa<GlobalValue>(C)) return false;
138
139  for (Value::use_iterator UI = C->use_begin(), E = C->use_end(); UI != E; ++UI)
140    if (Constant *CU = dyn_cast<Constant>(*UI)) {
141      if (!ConstantIsDead(CU)) return false;
142    } else
143      return false;
144  return true;
145}
146
147
148/// AnalyzeGlobal - Look at all uses of the global and fill in the GlobalStatus
149/// structure.  If the global has its address taken, return true to indicate we
150/// can't do anything with it.
151///
152static bool AnalyzeGlobal(Value *V, GlobalStatus &GS,
153                          std::set<PHINode*> &PHIUsers) {
154  for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI)
155    if (ConstantExpr *CE = dyn_cast<ConstantExpr>(*UI)) {
156      GS.HasNonInstructionUser = true;
157
158      if (AnalyzeGlobal(CE, GS, PHIUsers)) return true;
159
160    } else if (Instruction *I = dyn_cast<Instruction>(*UI)) {
161      if (!GS.HasMultipleAccessingFunctions) {
162        Function *F = I->getParent()->getParent();
163        if (GS.AccessingFunction == 0)
164          GS.AccessingFunction = F;
165        else if (GS.AccessingFunction != F)
166          GS.HasMultipleAccessingFunctions = true;
167      }
168      if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
169        GS.isLoaded = true;
170        if (LI->isVolatile()) return true;  // Don't hack on volatile loads.
171      } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
172        // Don't allow a store OF the address, only stores TO the address.
173        if (SI->getOperand(0) == V) return true;
174
175        if (SI->isVolatile()) return true;  // Don't hack on volatile stores.
176
177        // If this is a direct store to the global (i.e., the global is a scalar
178        // value, not an aggregate), keep more specific information about
179        // stores.
180        if (GS.StoredType != GlobalStatus::isStored)
181          if (GlobalVariable *GV = dyn_cast<GlobalVariable>(SI->getOperand(1))){
182            Value *StoredVal = SI->getOperand(0);
183            if (StoredVal == GV->getInitializer()) {
184              if (GS.StoredType < GlobalStatus::isInitializerStored)
185                GS.StoredType = GlobalStatus::isInitializerStored;
186            } else if (isa<LoadInst>(StoredVal) &&
187                       cast<LoadInst>(StoredVal)->getOperand(0) == GV) {
188              // G = G
189              if (GS.StoredType < GlobalStatus::isInitializerStored)
190                GS.StoredType = GlobalStatus::isInitializerStored;
191            } else if (GS.StoredType < GlobalStatus::isStoredOnce) {
192              GS.StoredType = GlobalStatus::isStoredOnce;
193              GS.StoredOnceValue = StoredVal;
194            } else if (GS.StoredType == GlobalStatus::isStoredOnce &&
195                       GS.StoredOnceValue == StoredVal) {
196              // noop.
197            } else {
198              GS.StoredType = GlobalStatus::isStored;
199            }
200          } else {
201            GS.StoredType = GlobalStatus::isStored;
202          }
203      } else if (isa<GetElementPtrInst>(I)) {
204        if (AnalyzeGlobal(I, GS, PHIUsers)) return true;
205      } else if (isa<SelectInst>(I)) {
206        if (AnalyzeGlobal(I, GS, PHIUsers)) return true;
207      } else if (PHINode *PN = dyn_cast<PHINode>(I)) {
208        // PHI nodes we can check just like select or GEP instructions, but we
209        // have to be careful about infinite recursion.
210        if (PHIUsers.insert(PN).second)  // Not already visited.
211          if (AnalyzeGlobal(I, GS, PHIUsers)) return true;
212        GS.HasPHIUser = true;
213      } else if (isa<CmpInst>(I)) {
214      } else if (isa<MemCpyInst>(I) || isa<MemMoveInst>(I)) {
215        if (I->getOperand(1) == V)
216          GS.StoredType = GlobalStatus::isStored;
217        if (I->getOperand(2) == V)
218          GS.isLoaded = true;
219      } else if (isa<MemSetInst>(I)) {
220        assert(I->getOperand(1) == V && "Memset only takes one pointer!");
221        GS.StoredType = GlobalStatus::isStored;
222      } else {
223        return true;  // Any other non-load instruction might take address!
224      }
225    } else if (Constant *C = dyn_cast<Constant>(*UI)) {
226      GS.HasNonInstructionUser = true;
227      // We might have a dead and dangling constant hanging off of here.
228      if (!ConstantIsDead(C))
229        return true;
230    } else {
231      GS.HasNonInstructionUser = true;
232      // Otherwise must be some other user.
233      return true;
234    }
235
236  return false;
237}
238
239static Constant *getAggregateConstantElement(Constant *Agg, Constant *Idx) {
240  ConstantInt *CI = dyn_cast<ConstantInt>(Idx);
241  if (!CI) return 0;
242  unsigned IdxV = CI->getZExtValue();
243
244  if (ConstantStruct *CS = dyn_cast<ConstantStruct>(Agg)) {
245    if (IdxV < CS->getNumOperands()) return CS->getOperand(IdxV);
246  } else if (ConstantArray *CA = dyn_cast<ConstantArray>(Agg)) {
247    if (IdxV < CA->getNumOperands()) return CA->getOperand(IdxV);
248  } else if (ConstantVector *CP = dyn_cast<ConstantVector>(Agg)) {
249    if (IdxV < CP->getNumOperands()) return CP->getOperand(IdxV);
250  } else if (isa<ConstantAggregateZero>(Agg)) {
251    if (const StructType *STy = dyn_cast<StructType>(Agg->getType())) {
252      if (IdxV < STy->getNumElements())
253        return Constant::getNullValue(STy->getElementType(IdxV));
254    } else if (const SequentialType *STy =
255               dyn_cast<SequentialType>(Agg->getType())) {
256      return Constant::getNullValue(STy->getElementType());
257    }
258  } else if (isa<UndefValue>(Agg)) {
259    if (const StructType *STy = dyn_cast<StructType>(Agg->getType())) {
260      if (IdxV < STy->getNumElements())
261        return UndefValue::get(STy->getElementType(IdxV));
262    } else if (const SequentialType *STy =
263               dyn_cast<SequentialType>(Agg->getType())) {
264      return UndefValue::get(STy->getElementType());
265    }
266  }
267  return 0;
268}
269
270
271/// CleanupConstantGlobalUsers - We just marked GV constant.  Loop over all
272/// users of the global, cleaning up the obvious ones.  This is largely just a
273/// quick scan over the use list to clean up the easy and obvious cruft.  This
274/// returns true if it made a change.
275static bool CleanupConstantGlobalUsers(Value *V, Constant *Init) {
276  bool Changed = false;
277  for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E;) {
278    User *U = *UI++;
279
280    if (LoadInst *LI = dyn_cast<LoadInst>(U)) {
281      if (Init) {
282        // Replace the load with the initializer.
283        LI->replaceAllUsesWith(Init);
284        LI->eraseFromParent();
285        Changed = true;
286      }
287    } else if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
288      // Store must be unreachable or storing Init into the global.
289      SI->eraseFromParent();
290      Changed = true;
291    } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
292      if (CE->getOpcode() == Instruction::GetElementPtr) {
293        Constant *SubInit = 0;
294        if (Init)
295          SubInit = ConstantFoldLoadThroughGEPConstantExpr(Init, CE);
296        Changed |= CleanupConstantGlobalUsers(CE, SubInit);
297      } else if (CE->getOpcode() == Instruction::BitCast &&
298                 isa<PointerType>(CE->getType())) {
299        // Pointer cast, delete any stores and memsets to the global.
300        Changed |= CleanupConstantGlobalUsers(CE, 0);
301      }
302
303      if (CE->use_empty()) {
304        CE->destroyConstant();
305        Changed = true;
306      }
307    } else if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(U)) {
308      // Do not transform "gepinst (gep constexpr (GV))" here, because forming
309      // "gepconstexpr (gep constexpr (GV))" will cause the two gep's to fold
310      // and will invalidate our notion of what Init is.
311      Constant *SubInit = 0;
312      if (!isa<ConstantExpr>(GEP->getOperand(0))) {
313        ConstantExpr *CE =
314          dyn_cast_or_null<ConstantExpr>(ConstantFoldInstruction(GEP));
315        if (Init && CE && CE->getOpcode() == Instruction::GetElementPtr)
316          SubInit = ConstantFoldLoadThroughGEPConstantExpr(Init, CE);
317      }
318      Changed |= CleanupConstantGlobalUsers(GEP, SubInit);
319
320      if (GEP->use_empty()) {
321        GEP->eraseFromParent();
322        Changed = true;
323      }
324    } else if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(U)) { // memset/cpy/mv
325      if (MI->getRawDest() == V) {
326        MI->eraseFromParent();
327        Changed = true;
328      }
329
330    } else if (Constant *C = dyn_cast<Constant>(U)) {
331      // If we have a chain of dead constantexprs or other things dangling from
332      // us, and if they are all dead, nuke them without remorse.
333      if (ConstantIsDead(C)) {
334        C->destroyConstant();
335        // This could have invalidated UI, start over from scratch.
336        CleanupConstantGlobalUsers(V, Init);
337        return true;
338      }
339    }
340  }
341  return Changed;
342}
343
344/// isSafeSROAElementUse - Return true if the specified instruction is a safe
345/// user of a derived expression from a global that we want to SROA.
346static bool isSafeSROAElementUse(Value *V) {
347  // We might have a dead and dangling constant hanging off of here.
348  if (Constant *C = dyn_cast<Constant>(V))
349    return ConstantIsDead(C);
350
351  Instruction *I = dyn_cast<Instruction>(V);
352  if (!I) return false;
353
354  // Loads are ok.
355  if (isa<LoadInst>(I)) return true;
356
357  // Stores *to* the pointer are ok.
358  if (StoreInst *SI = dyn_cast<StoreInst>(I))
359    return SI->getOperand(0) != V;
360
361  // Otherwise, it must be a GEP.
362  GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(I);
363  if (GEPI == 0) return false;
364
365  if (GEPI->getNumOperands() < 3 || !isa<Constant>(GEPI->getOperand(1)) ||
366      !cast<Constant>(GEPI->getOperand(1))->isNullValue())
367    return false;
368
369  for (Value::use_iterator I = GEPI->use_begin(), E = GEPI->use_end();
370       I != E; ++I)
371    if (!isSafeSROAElementUse(*I))
372      return false;
373  return true;
374}
375
376
377/// IsUserOfGlobalSafeForSRA - U is a direct user of the specified global value.
378/// Look at it and its uses and decide whether it is safe to SROA this global.
379///
380static bool IsUserOfGlobalSafeForSRA(User *U, GlobalValue *GV) {
381  // The user of the global must be a GEP Inst or a ConstantExpr GEP.
382  if (!isa<GetElementPtrInst>(U) &&
383      (!isa<ConstantExpr>(U) ||
384       cast<ConstantExpr>(U)->getOpcode() != Instruction::GetElementPtr))
385    return false;
386
387  // Check to see if this ConstantExpr GEP is SRA'able.  In particular, we
388  // don't like < 3 operand CE's, and we don't like non-constant integer
389  // indices.  This enforces that all uses are 'gep GV, 0, C, ...' for some
390  // value of C.
391  if (U->getNumOperands() < 3 || !isa<Constant>(U->getOperand(1)) ||
392      !cast<Constant>(U->getOperand(1))->isNullValue() ||
393      !isa<ConstantInt>(U->getOperand(2)))
394    return false;
395
396  gep_type_iterator GEPI = gep_type_begin(U), E = gep_type_end(U);
397  ++GEPI;  // Skip over the pointer index.
398
399  // If this is a use of an array allocation, do a bit more checking for sanity.
400  if (const ArrayType *AT = dyn_cast<ArrayType>(*GEPI)) {
401    uint64_t NumElements = AT->getNumElements();
402    ConstantInt *Idx = cast<ConstantInt>(U->getOperand(2));
403
404    // Check to make sure that index falls within the array.  If not,
405    // something funny is going on, so we won't do the optimization.
406    //
407    if (Idx->getZExtValue() >= NumElements)
408      return false;
409
410    // We cannot scalar repl this level of the array unless any array
411    // sub-indices are in-range constants.  In particular, consider:
412    // A[0][i].  We cannot know that the user isn't doing invalid things like
413    // allowing i to index an out-of-range subscript that accesses A[1].
414    //
415    // Scalar replacing *just* the outer index of the array is probably not
416    // going to be a win anyway, so just give up.
417    for (++GEPI; // Skip array index.
418         GEPI != E && (isa<ArrayType>(*GEPI) || isa<VectorType>(*GEPI));
419         ++GEPI) {
420      uint64_t NumElements;
421      if (const ArrayType *SubArrayTy = dyn_cast<ArrayType>(*GEPI))
422        NumElements = SubArrayTy->getNumElements();
423      else
424        NumElements = cast<VectorType>(*GEPI)->getNumElements();
425
426      ConstantInt *IdxVal = dyn_cast<ConstantInt>(GEPI.getOperand());
427      if (!IdxVal || IdxVal->getZExtValue() >= NumElements)
428        return false;
429    }
430  }
431
432  for (Value::use_iterator I = U->use_begin(), E = U->use_end(); I != E; ++I)
433    if (!isSafeSROAElementUse(*I))
434      return false;
435  return true;
436}
437
438/// GlobalUsersSafeToSRA - Look at all uses of the global and decide whether it
439/// is safe for us to perform this transformation.
440///
441static bool GlobalUsersSafeToSRA(GlobalValue *GV) {
442  for (Value::use_iterator UI = GV->use_begin(), E = GV->use_end();
443       UI != E; ++UI) {
444    if (!IsUserOfGlobalSafeForSRA(*UI, GV))
445      return false;
446  }
447  return true;
448}
449
450
451/// SRAGlobal - Perform scalar replacement of aggregates on the specified global
452/// variable.  This opens the door for other optimizations by exposing the
453/// behavior of the program in a more fine-grained way.  We have determined that
454/// this transformation is safe already.  We return the first global variable we
455/// insert so that the caller can reprocess it.
456static GlobalVariable *SRAGlobal(GlobalVariable *GV) {
457  // Make sure this global only has simple uses that we can SRA.
458  if (!GlobalUsersSafeToSRA(GV))
459    return 0;
460
461  assert(GV->hasInternalLinkage() && !GV->isConstant());
462  Constant *Init = GV->getInitializer();
463  const Type *Ty = Init->getType();
464
465  std::vector<GlobalVariable*> NewGlobals;
466  Module::GlobalListType &Globals = GV->getParent()->getGlobalList();
467
468  if (const StructType *STy = dyn_cast<StructType>(Ty)) {
469    NewGlobals.reserve(STy->getNumElements());
470    for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
471      Constant *In = getAggregateConstantElement(Init,
472                                            ConstantInt::get(Type::Int32Ty, i));
473      assert(In && "Couldn't get element of initializer?");
474      GlobalVariable *NGV = new GlobalVariable(STy->getElementType(i), false,
475                                               GlobalVariable::InternalLinkage,
476                                               In, GV->getName()+"."+utostr(i),
477                                               (Module *)NULL,
478                                               GV->isThreadLocal());
479      Globals.insert(GV, NGV);
480      NewGlobals.push_back(NGV);
481    }
482  } else if (const SequentialType *STy = dyn_cast<SequentialType>(Ty)) {
483    unsigned NumElements = 0;
484    if (const ArrayType *ATy = dyn_cast<ArrayType>(STy))
485      NumElements = ATy->getNumElements();
486    else if (const VectorType *PTy = dyn_cast<VectorType>(STy))
487      NumElements = PTy->getNumElements();
488    else
489      assert(0 && "Unknown aggregate sequential type!");
490
491    if (NumElements > 16 && GV->hasNUsesOrMore(16))
492      return 0; // It's not worth it.
493    NewGlobals.reserve(NumElements);
494    for (unsigned i = 0, e = NumElements; i != e; ++i) {
495      Constant *In = getAggregateConstantElement(Init,
496                                            ConstantInt::get(Type::Int32Ty, i));
497      assert(In && "Couldn't get element of initializer?");
498
499      GlobalVariable *NGV = new GlobalVariable(STy->getElementType(), false,
500                                               GlobalVariable::InternalLinkage,
501                                               In, GV->getName()+"."+utostr(i),
502                                               (Module *)NULL,
503                                               GV->isThreadLocal());
504      Globals.insert(GV, NGV);
505      NewGlobals.push_back(NGV);
506    }
507  }
508
509  if (NewGlobals.empty())
510    return 0;
511
512  DOUT << "PERFORMING GLOBAL SRA ON: " << *GV;
513
514  Constant *NullInt = Constant::getNullValue(Type::Int32Ty);
515
516  // Loop over all of the uses of the global, replacing the constantexpr geps,
517  // with smaller constantexpr geps or direct references.
518  while (!GV->use_empty()) {
519    User *GEP = GV->use_back();
520    assert(((isa<ConstantExpr>(GEP) &&
521             cast<ConstantExpr>(GEP)->getOpcode()==Instruction::GetElementPtr)||
522            isa<GetElementPtrInst>(GEP)) && "NonGEP CE's are not SRAable!");
523
524    // Ignore the 1th operand, which has to be zero or else the program is quite
525    // broken (undefined).  Get the 2nd operand, which is the structure or array
526    // index.
527    unsigned Val = cast<ConstantInt>(GEP->getOperand(2))->getZExtValue();
528    if (Val >= NewGlobals.size()) Val = 0; // Out of bound array access.
529
530    Value *NewPtr = NewGlobals[Val];
531
532    // Form a shorter GEP if needed.
533    if (GEP->getNumOperands() > 3)
534      if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GEP)) {
535        SmallVector<Constant*, 8> Idxs;
536        Idxs.push_back(NullInt);
537        for (unsigned i = 3, e = CE->getNumOperands(); i != e; ++i)
538          Idxs.push_back(CE->getOperand(i));
539        NewPtr = ConstantExpr::getGetElementPtr(cast<Constant>(NewPtr),
540                                                &Idxs[0], Idxs.size());
541      } else {
542        GetElementPtrInst *GEPI = cast<GetElementPtrInst>(GEP);
543        SmallVector<Value*, 8> Idxs;
544        Idxs.push_back(NullInt);
545        for (unsigned i = 3, e = GEPI->getNumOperands(); i != e; ++i)
546          Idxs.push_back(GEPI->getOperand(i));
547        NewPtr = new GetElementPtrInst(NewPtr, Idxs.begin(), Idxs.end(),
548                                       GEPI->getName()+"."+utostr(Val), GEPI);
549      }
550    GEP->replaceAllUsesWith(NewPtr);
551
552    if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(GEP))
553      GEPI->eraseFromParent();
554    else
555      cast<ConstantExpr>(GEP)->destroyConstant();
556  }
557
558  // Delete the old global, now that it is dead.
559  Globals.erase(GV);
560  ++NumSRA;
561
562  // Loop over the new globals array deleting any globals that are obviously
563  // dead.  This can arise due to scalarization of a structure or an array that
564  // has elements that are dead.
565  unsigned FirstGlobal = 0;
566  for (unsigned i = 0, e = NewGlobals.size(); i != e; ++i)
567    if (NewGlobals[i]->use_empty()) {
568      Globals.erase(NewGlobals[i]);
569      if (FirstGlobal == i) ++FirstGlobal;
570    }
571
572  return FirstGlobal != NewGlobals.size() ? NewGlobals[FirstGlobal] : 0;
573}
574
575/// AllUsesOfValueWillTrapIfNull - Return true if all users of the specified
576/// value will trap if the value is dynamically null.  PHIs keeps track of any
577/// phi nodes we've seen to avoid reprocessing them.
578static bool AllUsesOfValueWillTrapIfNull(Value *V,
579                                         SmallPtrSet<PHINode*, 8> &PHIs) {
580  for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI)
581    if (isa<LoadInst>(*UI)) {
582      // Will trap.
583    } else if (StoreInst *SI = dyn_cast<StoreInst>(*UI)) {
584      if (SI->getOperand(0) == V) {
585        //cerr << "NONTRAPPING USE: " << **UI;
586        return false;  // Storing the value.
587      }
588    } else if (CallInst *CI = dyn_cast<CallInst>(*UI)) {
589      if (CI->getOperand(0) != V) {
590        //cerr << "NONTRAPPING USE: " << **UI;
591        return false;  // Not calling the ptr
592      }
593    } else if (InvokeInst *II = dyn_cast<InvokeInst>(*UI)) {
594      if (II->getOperand(0) != V) {
595        //cerr << "NONTRAPPING USE: " << **UI;
596        return false;  // Not calling the ptr
597      }
598    } else if (BitCastInst *CI = dyn_cast<BitCastInst>(*UI)) {
599      if (!AllUsesOfValueWillTrapIfNull(CI, PHIs)) return false;
600    } else if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(*UI)) {
601      if (!AllUsesOfValueWillTrapIfNull(GEPI, PHIs)) return false;
602    } else if (PHINode *PN = dyn_cast<PHINode>(*UI)) {
603      // If we've already seen this phi node, ignore it, it has already been
604      // checked.
605      if (PHIs.insert(PN))
606        return AllUsesOfValueWillTrapIfNull(PN, PHIs);
607    } else if (isa<ICmpInst>(*UI) &&
608               isa<ConstantPointerNull>(UI->getOperand(1))) {
609      // Ignore setcc X, null
610    } else {
611      //cerr << "NONTRAPPING USE: " << **UI;
612      return false;
613    }
614  return true;
615}
616
617/// AllUsesOfLoadedValueWillTrapIfNull - Return true if all uses of any loads
618/// from GV will trap if the loaded value is null.  Note that this also permits
619/// comparisons of the loaded value against null, as a special case.
620static bool AllUsesOfLoadedValueWillTrapIfNull(GlobalVariable *GV) {
621  for (Value::use_iterator UI = GV->use_begin(), E = GV->use_end(); UI!=E; ++UI)
622    if (LoadInst *LI = dyn_cast<LoadInst>(*UI)) {
623      SmallPtrSet<PHINode*, 8> PHIs;
624      if (!AllUsesOfValueWillTrapIfNull(LI, PHIs))
625        return false;
626    } else if (isa<StoreInst>(*UI)) {
627      // Ignore stores to the global.
628    } else {
629      // We don't know or understand this user, bail out.
630      //cerr << "UNKNOWN USER OF GLOBAL!: " << **UI;
631      return false;
632    }
633
634  return true;
635}
636
637static bool OptimizeAwayTrappingUsesOfValue(Value *V, Constant *NewV) {
638  bool Changed = false;
639  for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ) {
640    Instruction *I = cast<Instruction>(*UI++);
641    if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
642      LI->setOperand(0, NewV);
643      Changed = true;
644    } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
645      if (SI->getOperand(1) == V) {
646        SI->setOperand(1, NewV);
647        Changed = true;
648      }
649    } else if (isa<CallInst>(I) || isa<InvokeInst>(I)) {
650      if (I->getOperand(0) == V) {
651        // Calling through the pointer!  Turn into a direct call, but be careful
652        // that the pointer is not also being passed as an argument.
653        I->setOperand(0, NewV);
654        Changed = true;
655        bool PassedAsArg = false;
656        for (unsigned i = 1, e = I->getNumOperands(); i != e; ++i)
657          if (I->getOperand(i) == V) {
658            PassedAsArg = true;
659            I->setOperand(i, NewV);
660          }
661
662        if (PassedAsArg) {
663          // Being passed as an argument also.  Be careful to not invalidate UI!
664          UI = V->use_begin();
665        }
666      }
667    } else if (CastInst *CI = dyn_cast<CastInst>(I)) {
668      Changed |= OptimizeAwayTrappingUsesOfValue(CI,
669                                ConstantExpr::getCast(CI->getOpcode(),
670                                                      NewV, CI->getType()));
671      if (CI->use_empty()) {
672        Changed = true;
673        CI->eraseFromParent();
674      }
675    } else if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(I)) {
676      // Should handle GEP here.
677      SmallVector<Constant*, 8> Idxs;
678      Idxs.reserve(GEPI->getNumOperands()-1);
679      for (unsigned i = 1, e = GEPI->getNumOperands(); i != e; ++i)
680        if (Constant *C = dyn_cast<Constant>(GEPI->getOperand(i)))
681          Idxs.push_back(C);
682        else
683          break;
684      if (Idxs.size() == GEPI->getNumOperands()-1)
685        Changed |= OptimizeAwayTrappingUsesOfValue(GEPI,
686                                ConstantExpr::getGetElementPtr(NewV, &Idxs[0],
687                                                               Idxs.size()));
688      if (GEPI->use_empty()) {
689        Changed = true;
690        GEPI->eraseFromParent();
691      }
692    }
693  }
694
695  return Changed;
696}
697
698
699/// OptimizeAwayTrappingUsesOfLoads - The specified global has only one non-null
700/// value stored into it.  If there are uses of the loaded value that would trap
701/// if the loaded value is dynamically null, then we know that they cannot be
702/// reachable with a null optimize away the load.
703static bool OptimizeAwayTrappingUsesOfLoads(GlobalVariable *GV, Constant *LV) {
704  std::vector<LoadInst*> Loads;
705  bool Changed = false;
706
707  // Replace all uses of loads with uses of uses of the stored value.
708  for (Value::use_iterator GUI = GV->use_begin(), E = GV->use_end();
709       GUI != E; ++GUI)
710    if (LoadInst *LI = dyn_cast<LoadInst>(*GUI)) {
711      Loads.push_back(LI);
712      Changed |= OptimizeAwayTrappingUsesOfValue(LI, LV);
713    } else {
714      // If we get here we could have stores, selects, or phi nodes whose values
715      // are loaded.
716      assert((isa<StoreInst>(*GUI) || isa<PHINode>(*GUI) ||
717              isa<SelectInst>(*GUI) || isa<ConstantExpr>(*GUI)) &&
718             "Only expect load and stores!");
719    }
720
721  if (Changed) {
722    DOUT << "OPTIMIZED LOADS FROM STORED ONCE POINTER: " << *GV;
723    ++NumGlobUses;
724  }
725
726  // Delete all of the loads we can, keeping track of whether we nuked them all!
727  bool AllLoadsGone = true;
728  while (!Loads.empty()) {
729    LoadInst *L = Loads.back();
730    if (L->use_empty()) {
731      L->eraseFromParent();
732      Changed = true;
733    } else {
734      AllLoadsGone = false;
735    }
736    Loads.pop_back();
737  }
738
739  // If we nuked all of the loads, then none of the stores are needed either,
740  // nor is the global.
741  if (AllLoadsGone) {
742    DOUT << "  *** GLOBAL NOW DEAD!\n";
743    CleanupConstantGlobalUsers(GV, 0);
744    if (GV->use_empty()) {
745      GV->eraseFromParent();
746      ++NumDeleted;
747    }
748    Changed = true;
749  }
750  return Changed;
751}
752
753/// ConstantPropUsersOf - Walk the use list of V, constant folding all of the
754/// instructions that are foldable.
755static void ConstantPropUsersOf(Value *V) {
756  for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; )
757    if (Instruction *I = dyn_cast<Instruction>(*UI++))
758      if (Constant *NewC = ConstantFoldInstruction(I)) {
759        I->replaceAllUsesWith(NewC);
760
761        // Advance UI to the next non-I use to avoid invalidating it!
762        // Instructions could multiply use V.
763        while (UI != E && *UI == I)
764          ++UI;
765        I->eraseFromParent();
766      }
767}
768
769/// OptimizeGlobalAddressOfMalloc - This function takes the specified global
770/// variable, and transforms the program as if it always contained the result of
771/// the specified malloc.  Because it is always the result of the specified
772/// malloc, there is no reason to actually DO the malloc.  Instead, turn the
773/// malloc into a global, and any loads of GV as uses of the new global.
774static GlobalVariable *OptimizeGlobalAddressOfMalloc(GlobalVariable *GV,
775                                                     MallocInst *MI) {
776  DOUT << "PROMOTING MALLOC GLOBAL: " << *GV << "  MALLOC = " << *MI;
777  ConstantInt *NElements = cast<ConstantInt>(MI->getArraySize());
778
779  if (NElements->getZExtValue() != 1) {
780    // If we have an array allocation, transform it to a single element
781    // allocation to make the code below simpler.
782    Type *NewTy = ArrayType::get(MI->getAllocatedType(),
783                                 NElements->getZExtValue());
784    MallocInst *NewMI =
785      new MallocInst(NewTy, Constant::getNullValue(Type::Int32Ty),
786                     MI->getAlignment(), MI->getName(), MI);
787    Value* Indices[2];
788    Indices[0] = Indices[1] = Constant::getNullValue(Type::Int32Ty);
789    Value *NewGEP = new GetElementPtrInst(NewMI, Indices, Indices + 2,
790                                          NewMI->getName()+".el0", MI);
791    MI->replaceAllUsesWith(NewGEP);
792    MI->eraseFromParent();
793    MI = NewMI;
794  }
795
796  // Create the new global variable.  The contents of the malloc'd memory is
797  // undefined, so initialize with an undef value.
798  Constant *Init = UndefValue::get(MI->getAllocatedType());
799  GlobalVariable *NewGV = new GlobalVariable(MI->getAllocatedType(), false,
800                                             GlobalValue::InternalLinkage, Init,
801                                             GV->getName()+".body",
802                                             (Module *)NULL,
803                                             GV->isThreadLocal());
804  GV->getParent()->getGlobalList().insert(GV, NewGV);
805
806  // Anything that used the malloc now uses the global directly.
807  MI->replaceAllUsesWith(NewGV);
808
809  Constant *RepValue = NewGV;
810  if (NewGV->getType() != GV->getType()->getElementType())
811    RepValue = ConstantExpr::getBitCast(RepValue,
812                                        GV->getType()->getElementType());
813
814  // If there is a comparison against null, we will insert a global bool to
815  // keep track of whether the global was initialized yet or not.
816  GlobalVariable *InitBool =
817    new GlobalVariable(Type::Int1Ty, false, GlobalValue::InternalLinkage,
818                       ConstantInt::getFalse(), GV->getName()+".init",
819                       (Module *)NULL, GV->isThreadLocal());
820  bool InitBoolUsed = false;
821
822  // Loop over all uses of GV, processing them in turn.
823  std::vector<StoreInst*> Stores;
824  while (!GV->use_empty())
825    if (LoadInst *LI = dyn_cast<LoadInst>(GV->use_back())) {
826      while (!LI->use_empty()) {
827        Use &LoadUse = LI->use_begin().getUse();
828        if (!isa<ICmpInst>(LoadUse.getUser()))
829          LoadUse = RepValue;
830        else {
831          ICmpInst *CI = cast<ICmpInst>(LoadUse.getUser());
832          // Replace the cmp X, 0 with a use of the bool value.
833          Value *LV = new LoadInst(InitBool, InitBool->getName()+".val", CI);
834          InitBoolUsed = true;
835          switch (CI->getPredicate()) {
836          default: assert(0 && "Unknown ICmp Predicate!");
837          case ICmpInst::ICMP_ULT:
838          case ICmpInst::ICMP_SLT:
839            LV = ConstantInt::getFalse();   // X < null -> always false
840            break;
841          case ICmpInst::ICMP_ULE:
842          case ICmpInst::ICMP_SLE:
843          case ICmpInst::ICMP_EQ:
844            LV = BinaryOperator::createNot(LV, "notinit", CI);
845            break;
846          case ICmpInst::ICMP_NE:
847          case ICmpInst::ICMP_UGE:
848          case ICmpInst::ICMP_SGE:
849          case ICmpInst::ICMP_UGT:
850          case ICmpInst::ICMP_SGT:
851            break;  // no change.
852          }
853          CI->replaceAllUsesWith(LV);
854          CI->eraseFromParent();
855        }
856      }
857      LI->eraseFromParent();
858    } else {
859      StoreInst *SI = cast<StoreInst>(GV->use_back());
860      // The global is initialized when the store to it occurs.
861      new StoreInst(ConstantInt::getTrue(), InitBool, SI);
862      SI->eraseFromParent();
863    }
864
865  // If the initialization boolean was used, insert it, otherwise delete it.
866  if (!InitBoolUsed) {
867    while (!InitBool->use_empty())  // Delete initializations
868      cast<Instruction>(InitBool->use_back())->eraseFromParent();
869    delete InitBool;
870  } else
871    GV->getParent()->getGlobalList().insert(GV, InitBool);
872
873
874  // Now the GV is dead, nuke it and the malloc.
875  GV->eraseFromParent();
876  MI->eraseFromParent();
877
878  // To further other optimizations, loop over all users of NewGV and try to
879  // constant prop them.  This will promote GEP instructions with constant
880  // indices into GEP constant-exprs, which will allow global-opt to hack on it.
881  ConstantPropUsersOf(NewGV);
882  if (RepValue != NewGV)
883    ConstantPropUsersOf(RepValue);
884
885  return NewGV;
886}
887
888/// ValueIsOnlyUsedLocallyOrStoredToOneGlobal - Scan the use-list of V checking
889/// to make sure that there are no complex uses of V.  We permit simple things
890/// like dereferencing the pointer, but not storing through the address, unless
891/// it is to the specified global.
892static bool ValueIsOnlyUsedLocallyOrStoredToOneGlobal(Instruction *V,
893                                                      GlobalVariable *GV,
894                                              SmallPtrSet<PHINode*, 8> &PHIs) {
895  for (Value::use_iterator UI = V->use_begin(), E = V->use_end(); UI != E; ++UI)
896    if (isa<LoadInst>(*UI) || isa<CmpInst>(*UI)) {
897      // Fine, ignore.
898    } else if (StoreInst *SI = dyn_cast<StoreInst>(*UI)) {
899      if (SI->getOperand(0) == V && SI->getOperand(1) != GV)
900        return false;  // Storing the pointer itself... bad.
901      // Otherwise, storing through it, or storing into GV... fine.
902    } else if (isa<GetElementPtrInst>(*UI)) {
903      if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(cast<Instruction>(*UI),
904                                                     GV, PHIs))
905        return false;
906    } else if (PHINode *PN = dyn_cast<PHINode>(*UI)) {
907      // PHIs are ok if all uses are ok.  Don't infinitely recurse through PHI
908      // cycles.
909      if (PHIs.insert(PN))
910        if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(PN, GV, PHIs))
911          return false;
912    } else {
913      return false;
914    }
915  return true;
916}
917
918/// ReplaceUsesOfMallocWithGlobal - The Alloc pointer is stored into GV
919/// somewhere.  Transform all uses of the allocation into loads from the
920/// global and uses of the resultant pointer.  Further, delete the store into
921/// GV.  This assumes that these value pass the
922/// 'ValueIsOnlyUsedLocallyOrStoredToOneGlobal' predicate.
923static void ReplaceUsesOfMallocWithGlobal(Instruction *Alloc,
924                                          GlobalVariable *GV) {
925  while (!Alloc->use_empty()) {
926    Instruction *U = cast<Instruction>(*Alloc->use_begin());
927    Instruction *InsertPt = U;
928    if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
929      // If this is the store of the allocation into the global, remove it.
930      if (SI->getOperand(1) == GV) {
931        SI->eraseFromParent();
932        continue;
933      }
934    } else if (PHINode *PN = dyn_cast<PHINode>(U)) {
935      // Insert the load in the corresponding predecessor, not right before the
936      // PHI.
937      unsigned PredNo = Alloc->use_begin().getOperandNo()/2;
938      InsertPt = PN->getIncomingBlock(PredNo)->getTerminator();
939    }
940
941    // Insert a load from the global, and use it instead of the malloc.
942    Value *NL = new LoadInst(GV, GV->getName()+".val", InsertPt);
943    U->replaceUsesOfWith(Alloc, NL);
944  }
945}
946
947/// GlobalLoadUsesSimpleEnoughForHeapSRA - If all users of values loaded from
948/// GV are simple enough to perform HeapSRA, return true.
949static bool GlobalLoadUsesSimpleEnoughForHeapSRA(GlobalVariable *GV,
950                                                 MallocInst *MI) {
951  for (Value::use_iterator UI = GV->use_begin(), E = GV->use_end(); UI != E;
952       ++UI)
953    if (LoadInst *LI = dyn_cast<LoadInst>(*UI)) {
954      // We permit two users of the load: setcc comparing against the null
955      // pointer, and a getelementptr of a specific form.
956      for (Value::use_iterator UI = LI->use_begin(), E = LI->use_end(); UI != E;
957           ++UI) {
958        // Comparison against null is ok.
959        if (ICmpInst *ICI = dyn_cast<ICmpInst>(*UI)) {
960          if (!isa<ConstantPointerNull>(ICI->getOperand(1)))
961            return false;
962          continue;
963        }
964
965        // getelementptr is also ok, but only a simple form.
966        if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(*UI)) {
967          // Must index into the array and into the struct.
968          if (GEPI->getNumOperands() < 3)
969            return false;
970
971          // Otherwise the GEP is ok.
972          continue;
973        }
974
975        if (PHINode *PN = dyn_cast<PHINode>(*UI)) {
976          // We have a phi of a load from the global.  We can only handle this
977          // if the other PHI'd values are actually the same.  In this case,
978          // the rewriter will just drop the phi entirely.
979          for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
980            Value *IV = PN->getIncomingValue(i);
981            if (IV == LI) continue;  // Trivial the same.
982
983            // If the phi'd value is from the malloc that initializes the value,
984            // we can xform it.
985            if (IV == MI) continue;
986
987            // Otherwise, we don't know what it is.
988            return false;
989          }
990          return true;
991        }
992
993        // Otherwise we don't know what this is, not ok.
994        return false;
995      }
996    }
997  return true;
998}
999
1000/// GetHeapSROALoad - Return the load for the specified field of the HeapSROA'd
1001/// value, lazily creating it on demand.
1002static Value *GetHeapSROALoad(Instruction *Load, unsigned FieldNo,
1003                              const std::vector<GlobalVariable*> &FieldGlobals,
1004                              std::vector<Value *> &InsertedLoadsForPtr) {
1005  if (InsertedLoadsForPtr.size() <= FieldNo)
1006    InsertedLoadsForPtr.resize(FieldNo+1);
1007  if (InsertedLoadsForPtr[FieldNo] == 0)
1008    InsertedLoadsForPtr[FieldNo] = new LoadInst(FieldGlobals[FieldNo],
1009                                                Load->getName()+".f" +
1010                                                utostr(FieldNo), Load);
1011  return InsertedLoadsForPtr[FieldNo];
1012}
1013
1014/// RewriteHeapSROALoadUser - Given a load instruction and a value derived from
1015/// the load, rewrite the derived value to use the HeapSRoA'd load.
1016static void RewriteHeapSROALoadUser(LoadInst *Load, Instruction *LoadUser,
1017                               const std::vector<GlobalVariable*> &FieldGlobals,
1018                                    std::vector<Value *> &InsertedLoadsForPtr) {
1019  // If this is a comparison against null, handle it.
1020  if (ICmpInst *SCI = dyn_cast<ICmpInst>(LoadUser)) {
1021    assert(isa<ConstantPointerNull>(SCI->getOperand(1)));
1022    // If we have a setcc of the loaded pointer, we can use a setcc of any
1023    // field.
1024    Value *NPtr;
1025    if (InsertedLoadsForPtr.empty()) {
1026      NPtr = GetHeapSROALoad(Load, 0, FieldGlobals, InsertedLoadsForPtr);
1027    } else {
1028      NPtr = InsertedLoadsForPtr.back();
1029    }
1030
1031    Value *New = new ICmpInst(SCI->getPredicate(), NPtr,
1032                              Constant::getNullValue(NPtr->getType()),
1033                              SCI->getName(), SCI);
1034    SCI->replaceAllUsesWith(New);
1035    SCI->eraseFromParent();
1036    return;
1037  }
1038
1039  // Handle 'getelementptr Ptr, Idx, uint FieldNo ...'
1040  if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(LoadUser)) {
1041    assert(GEPI->getNumOperands() >= 3 && isa<ConstantInt>(GEPI->getOperand(2))
1042           && "Unexpected GEPI!");
1043
1044    // Load the pointer for this field.
1045    unsigned FieldNo = cast<ConstantInt>(GEPI->getOperand(2))->getZExtValue();
1046    Value *NewPtr = GetHeapSROALoad(Load, FieldNo,
1047                                    FieldGlobals, InsertedLoadsForPtr);
1048
1049    // Create the new GEP idx vector.
1050    SmallVector<Value*, 8> GEPIdx;
1051    GEPIdx.push_back(GEPI->getOperand(1));
1052    GEPIdx.append(GEPI->op_begin()+3, GEPI->op_end());
1053
1054    Value *NGEPI = new GetElementPtrInst(NewPtr, GEPIdx.begin(), GEPIdx.end(),
1055                                         GEPI->getName(), GEPI);
1056    GEPI->replaceAllUsesWith(NGEPI);
1057    GEPI->eraseFromParent();
1058    return;
1059  }
1060
1061  // Handle PHI nodes.  PHI nodes must be merging in the same values, plus
1062  // potentially the original malloc.  Insert phi nodes for each field, then
1063  // process uses of the PHI.
1064  PHINode *PN = cast<PHINode>(LoadUser);
1065  std::vector<Value *> PHIsForField;
1066  PHIsForField.resize(FieldGlobals.size());
1067  for (unsigned i = 0, e = FieldGlobals.size(); i != e; ++i) {
1068    Value *LoadV = GetHeapSROALoad(Load, i, FieldGlobals, InsertedLoadsForPtr);
1069
1070    PHINode *FieldPN = new PHINode(LoadV->getType(),
1071                                   PN->getName()+"."+utostr(i), PN);
1072    // Fill in the predecessor values.
1073    for (unsigned pred = 0, e = PN->getNumIncomingValues(); pred != e; ++pred) {
1074      // Each predecessor either uses the load or the original malloc.
1075      Value *InVal = PN->getIncomingValue(pred);
1076      BasicBlock *BB = PN->getIncomingBlock(pred);
1077      Value *NewVal;
1078      if (isa<MallocInst>(InVal)) {
1079        // Insert a reload from the global in the predecessor.
1080        NewVal = GetHeapSROALoad(BB->getTerminator(), i, FieldGlobals,
1081                                 PHIsForField);
1082      } else {
1083        NewVal = InsertedLoadsForPtr[i];
1084      }
1085      FieldPN->addIncoming(NewVal, BB);
1086    }
1087    PHIsForField[i] = FieldPN;
1088  }
1089
1090  // Since PHIsForField specifies a phi for every input value, the lazy inserter
1091  // will never insert a load.
1092  while (!PN->use_empty())
1093    RewriteHeapSROALoadUser(Load, PN->use_back(), FieldGlobals, PHIsForField);
1094  PN->eraseFromParent();
1095}
1096
1097/// RewriteUsesOfLoadForHeapSRoA - We are performing Heap SRoA on a global.  Ptr
1098/// is a value loaded from the global.  Eliminate all uses of Ptr, making them
1099/// use FieldGlobals instead.  All uses of loaded values satisfy
1100/// GlobalLoadUsesSimpleEnoughForHeapSRA.
1101static void RewriteUsesOfLoadForHeapSRoA(LoadInst *Load,
1102                             const std::vector<GlobalVariable*> &FieldGlobals) {
1103  std::vector<Value *> InsertedLoadsForPtr;
1104  //InsertedLoadsForPtr.resize(FieldGlobals.size());
1105  while (!Load->use_empty())
1106    RewriteHeapSROALoadUser(Load, Load->use_back(),
1107                            FieldGlobals, InsertedLoadsForPtr);
1108}
1109
1110/// PerformHeapAllocSRoA - MI is an allocation of an array of structures.  Break
1111/// it up into multiple allocations of arrays of the fields.
1112static GlobalVariable *PerformHeapAllocSRoA(GlobalVariable *GV, MallocInst *MI){
1113  DOUT << "SROA HEAP ALLOC: " << *GV << "  MALLOC = " << *MI;
1114  const StructType *STy = cast<StructType>(MI->getAllocatedType());
1115
1116  // There is guaranteed to be at least one use of the malloc (storing
1117  // it into GV).  If there are other uses, change them to be uses of
1118  // the global to simplify later code.  This also deletes the store
1119  // into GV.
1120  ReplaceUsesOfMallocWithGlobal(MI, GV);
1121
1122  // Okay, at this point, there are no users of the malloc.  Insert N
1123  // new mallocs at the same place as MI, and N globals.
1124  std::vector<GlobalVariable*> FieldGlobals;
1125  std::vector<MallocInst*> FieldMallocs;
1126
1127  for (unsigned FieldNo = 0, e = STy->getNumElements(); FieldNo != e;++FieldNo){
1128    const Type *FieldTy = STy->getElementType(FieldNo);
1129    const Type *PFieldTy = PointerType::getUnqual(FieldTy);
1130
1131    GlobalVariable *NGV =
1132      new GlobalVariable(PFieldTy, false, GlobalValue::InternalLinkage,
1133                         Constant::getNullValue(PFieldTy),
1134                         GV->getName() + ".f" + utostr(FieldNo), GV,
1135                         GV->isThreadLocal());
1136    FieldGlobals.push_back(NGV);
1137
1138    MallocInst *NMI = new MallocInst(FieldTy, MI->getArraySize(),
1139                                     MI->getName() + ".f" + utostr(FieldNo),MI);
1140    FieldMallocs.push_back(NMI);
1141    new StoreInst(NMI, NGV, MI);
1142  }
1143
1144  // The tricky aspect of this transformation is handling the case when malloc
1145  // fails.  In the original code, malloc failing would set the result pointer
1146  // of malloc to null.  In this case, some mallocs could succeed and others
1147  // could fail.  As such, we emit code that looks like this:
1148  //    F0 = malloc(field0)
1149  //    F1 = malloc(field1)
1150  //    F2 = malloc(field2)
1151  //    if (F0 == 0 || F1 == 0 || F2 == 0) {
1152  //      if (F0) { free(F0); F0 = 0; }
1153  //      if (F1) { free(F1); F1 = 0; }
1154  //      if (F2) { free(F2); F2 = 0; }
1155  //    }
1156  Value *RunningOr = 0;
1157  for (unsigned i = 0, e = FieldMallocs.size(); i != e; ++i) {
1158    Value *Cond = new ICmpInst(ICmpInst::ICMP_EQ, FieldMallocs[i],
1159                             Constant::getNullValue(FieldMallocs[i]->getType()),
1160                                  "isnull", MI);
1161    if (!RunningOr)
1162      RunningOr = Cond;   // First seteq
1163    else
1164      RunningOr = BinaryOperator::createOr(RunningOr, Cond, "tmp", MI);
1165  }
1166
1167  // Split the basic block at the old malloc.
1168  BasicBlock *OrigBB = MI->getParent();
1169  BasicBlock *ContBB = OrigBB->splitBasicBlock(MI, "malloc_cont");
1170
1171  // Create the block to check the first condition.  Put all these blocks at the
1172  // end of the function as they are unlikely to be executed.
1173  BasicBlock *NullPtrBlock = new BasicBlock("malloc_ret_null",
1174                                            OrigBB->getParent());
1175
1176  // Remove the uncond branch from OrigBB to ContBB, turning it into a cond
1177  // branch on RunningOr.
1178  OrigBB->getTerminator()->eraseFromParent();
1179  new BranchInst(NullPtrBlock, ContBB, RunningOr, OrigBB);
1180
1181  // Within the NullPtrBlock, we need to emit a comparison and branch for each
1182  // pointer, because some may be null while others are not.
1183  for (unsigned i = 0, e = FieldGlobals.size(); i != e; ++i) {
1184    Value *GVVal = new LoadInst(FieldGlobals[i], "tmp", NullPtrBlock);
1185    Value *Cmp = new ICmpInst(ICmpInst::ICMP_NE, GVVal,
1186                              Constant::getNullValue(GVVal->getType()),
1187                              "tmp", NullPtrBlock);
1188    BasicBlock *FreeBlock = new BasicBlock("free_it", OrigBB->getParent());
1189    BasicBlock *NextBlock = new BasicBlock("next", OrigBB->getParent());
1190    new BranchInst(FreeBlock, NextBlock, Cmp, NullPtrBlock);
1191
1192    // Fill in FreeBlock.
1193    new FreeInst(GVVal, FreeBlock);
1194    new StoreInst(Constant::getNullValue(GVVal->getType()), FieldGlobals[i],
1195                  FreeBlock);
1196    new BranchInst(NextBlock, FreeBlock);
1197
1198    NullPtrBlock = NextBlock;
1199  }
1200
1201  new BranchInst(ContBB, NullPtrBlock);
1202
1203
1204  // MI is no longer needed, remove it.
1205  MI->eraseFromParent();
1206
1207
1208  // Okay, the malloc site is completely handled.  All of the uses of GV are now
1209  // loads, and all uses of those loads are simple.  Rewrite them to use loads
1210  // of the per-field globals instead.
1211  while (!GV->use_empty()) {
1212    if (LoadInst *LI = dyn_cast<LoadInst>(GV->use_back())) {
1213      RewriteUsesOfLoadForHeapSRoA(LI, FieldGlobals);
1214      LI->eraseFromParent();
1215    } else {
1216      // Must be a store of null.
1217      StoreInst *SI = cast<StoreInst>(GV->use_back());
1218      assert(isa<Constant>(SI->getOperand(0)) &&
1219             cast<Constant>(SI->getOperand(0))->isNullValue() &&
1220             "Unexpected heap-sra user!");
1221
1222      // Insert a store of null into each global.
1223      for (unsigned i = 0, e = FieldGlobals.size(); i != e; ++i) {
1224        Constant *Null =
1225          Constant::getNullValue(FieldGlobals[i]->getType()->getElementType());
1226        new StoreInst(Null, FieldGlobals[i], SI);
1227      }
1228      // Erase the original store.
1229      SI->eraseFromParent();
1230    }
1231  }
1232
1233  // The old global is now dead, remove it.
1234  GV->eraseFromParent();
1235
1236  ++NumHeapSRA;
1237  return FieldGlobals[0];
1238}
1239
1240
1241// OptimizeOnceStoredGlobal - Try to optimize globals based on the knowledge
1242// that only one value (besides its initializer) is ever stored to the global.
1243static bool OptimizeOnceStoredGlobal(GlobalVariable *GV, Value *StoredOnceVal,
1244                                     Module::global_iterator &GVI,
1245                                     TargetData &TD) {
1246  if (CastInst *CI = dyn_cast<CastInst>(StoredOnceVal))
1247    StoredOnceVal = CI->getOperand(0);
1248  else if (GetElementPtrInst *GEPI =dyn_cast<GetElementPtrInst>(StoredOnceVal)){
1249    // "getelementptr Ptr, 0, 0, 0" is really just a cast.
1250    bool IsJustACast = true;
1251    for (unsigned i = 1, e = GEPI->getNumOperands(); i != e; ++i)
1252      if (!isa<Constant>(GEPI->getOperand(i)) ||
1253          !cast<Constant>(GEPI->getOperand(i))->isNullValue()) {
1254        IsJustACast = false;
1255        break;
1256      }
1257    if (IsJustACast)
1258      StoredOnceVal = GEPI->getOperand(0);
1259  }
1260
1261  // If we are dealing with a pointer global that is initialized to null and
1262  // only has one (non-null) value stored into it, then we can optimize any
1263  // users of the loaded value (often calls and loads) that would trap if the
1264  // value was null.
1265  if (isa<PointerType>(GV->getInitializer()->getType()) &&
1266      GV->getInitializer()->isNullValue()) {
1267    if (Constant *SOVC = dyn_cast<Constant>(StoredOnceVal)) {
1268      if (GV->getInitializer()->getType() != SOVC->getType())
1269        SOVC = ConstantExpr::getBitCast(SOVC, GV->getInitializer()->getType());
1270
1271      // Optimize away any trapping uses of the loaded value.
1272      if (OptimizeAwayTrappingUsesOfLoads(GV, SOVC))
1273        return true;
1274    } else if (MallocInst *MI = dyn_cast<MallocInst>(StoredOnceVal)) {
1275      // If this is a malloc of an abstract type, don't touch it.
1276      if (!MI->getAllocatedType()->isSized())
1277        return false;
1278
1279      // We can't optimize this global unless all uses of it are *known* to be
1280      // of the malloc value, not of the null initializer value (consider a use
1281      // that compares the global's value against zero to see if the malloc has
1282      // been reached).  To do this, we check to see if all uses of the global
1283      // would trap if the global were null: this proves that they must all
1284      // happen after the malloc.
1285      if (!AllUsesOfLoadedValueWillTrapIfNull(GV))
1286        return false;
1287
1288      // We can't optimize this if the malloc itself is used in a complex way,
1289      // for example, being stored into multiple globals.  This allows the
1290      // malloc to be stored into the specified global, loaded setcc'd, and
1291      // GEP'd.  These are all things we could transform to using the global
1292      // for.
1293      {
1294        SmallPtrSet<PHINode*, 8> PHIs;
1295        if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(MI, GV, PHIs))
1296          return false;
1297      }
1298
1299
1300      // If we have a global that is only initialized with a fixed size malloc,
1301      // transform the program to use global memory instead of malloc'd memory.
1302      // This eliminates dynamic allocation, avoids an indirection accessing the
1303      // data, and exposes the resultant global to further GlobalOpt.
1304      if (ConstantInt *NElements = dyn_cast<ConstantInt>(MI->getArraySize())) {
1305        // Restrict this transformation to only working on small allocations
1306        // (2048 bytes currently), as we don't want to introduce a 16M global or
1307        // something.
1308        if (NElements->getZExtValue()*
1309                     TD.getABITypeSize(MI->getAllocatedType()) < 2048) {
1310          GVI = OptimizeGlobalAddressOfMalloc(GV, MI);
1311          return true;
1312        }
1313      }
1314
1315      // If the allocation is an array of structures, consider transforming this
1316      // into multiple malloc'd arrays, one for each field.  This is basically
1317      // SRoA for malloc'd memory.
1318      if (const StructType *AllocTy =
1319                  dyn_cast<StructType>(MI->getAllocatedType())) {
1320        // This the structure has an unreasonable number of fields, leave it
1321        // alone.
1322        if (AllocTy->getNumElements() <= 16 && AllocTy->getNumElements() > 0 &&
1323            GlobalLoadUsesSimpleEnoughForHeapSRA(GV, MI)) {
1324          GVI = PerformHeapAllocSRoA(GV, MI);
1325          return true;
1326        }
1327      }
1328    }
1329  }
1330
1331  return false;
1332}
1333
1334/// TryToShrinkGlobalToBoolean - At this point, we have learned that the only
1335/// two values ever stored into GV are its initializer and OtherVal.  See if we
1336/// can shrink the global into a boolean and select between the two values
1337/// whenever it is used.  This exposes the values to other scalar optimizations.
1338static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
1339  const Type *GVElType = GV->getType()->getElementType();
1340
1341  // If GVElType is already i1, it is already shrunk.  If the type of the GV is
1342  // an FP value or vector, don't do this optimization because a select between
1343  // them is very expensive and unlikely to lead to later simplification.
1344  if (GVElType == Type::Int1Ty || GVElType->isFloatingPoint() ||
1345      isa<VectorType>(GVElType))
1346    return false;
1347
1348  // Walk the use list of the global seeing if all the uses are load or store.
1349  // If there is anything else, bail out.
1350  for (Value::use_iterator I = GV->use_begin(), E = GV->use_end(); I != E; ++I)
1351    if (!isa<LoadInst>(I) && !isa<StoreInst>(I))
1352      return false;
1353
1354  DOUT << "   *** SHRINKING TO BOOL: " << *GV;
1355
1356  // Create the new global, initializing it to false.
1357  GlobalVariable *NewGV = new GlobalVariable(Type::Int1Ty, false,
1358         GlobalValue::InternalLinkage, ConstantInt::getFalse(),
1359                                             GV->getName()+".b",
1360                                             (Module *)NULL,
1361                                             GV->isThreadLocal());
1362  GV->getParent()->getGlobalList().insert(GV, NewGV);
1363
1364  Constant *InitVal = GV->getInitializer();
1365  assert(InitVal->getType() != Type::Int1Ty && "No reason to shrink to bool!");
1366
1367  // If initialized to zero and storing one into the global, we can use a cast
1368  // instead of a select to synthesize the desired value.
1369  bool IsOneZero = false;
1370  if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal))
1371    IsOneZero = InitVal->isNullValue() && CI->isOne();
1372
1373  while (!GV->use_empty()) {
1374    Instruction *UI = cast<Instruction>(GV->use_back());
1375    if (StoreInst *SI = dyn_cast<StoreInst>(UI)) {
1376      // Change the store into a boolean store.
1377      bool StoringOther = SI->getOperand(0) == OtherVal;
1378      // Only do this if we weren't storing a loaded value.
1379      Value *StoreVal;
1380      if (StoringOther || SI->getOperand(0) == InitVal)
1381        StoreVal = ConstantInt::get(Type::Int1Ty, StoringOther);
1382      else {
1383        // Otherwise, we are storing a previously loaded copy.  To do this,
1384        // change the copy from copying the original value to just copying the
1385        // bool.
1386        Instruction *StoredVal = cast<Instruction>(SI->getOperand(0));
1387
1388        // If we're already replaced the input, StoredVal will be a cast or
1389        // select instruction.  If not, it will be a load of the original
1390        // global.
1391        if (LoadInst *LI = dyn_cast<LoadInst>(StoredVal)) {
1392          assert(LI->getOperand(0) == GV && "Not a copy!");
1393          // Insert a new load, to preserve the saved value.
1394          StoreVal = new LoadInst(NewGV, LI->getName()+".b", LI);
1395        } else {
1396          assert((isa<CastInst>(StoredVal) || isa<SelectInst>(StoredVal)) &&
1397                 "This is not a form that we understand!");
1398          StoreVal = StoredVal->getOperand(0);
1399          assert(isa<LoadInst>(StoreVal) && "Not a load of NewGV!");
1400        }
1401      }
1402      new StoreInst(StoreVal, NewGV, SI);
1403    } else {
1404      // Change the load into a load of bool then a select.
1405      LoadInst *LI = cast<LoadInst>(UI);
1406      LoadInst *NLI = new LoadInst(NewGV, LI->getName()+".b", LI);
1407      Value *NSI;
1408      if (IsOneZero)
1409        NSI = new ZExtInst(NLI, LI->getType(), "", LI);
1410      else
1411        NSI = new SelectInst(NLI, OtherVal, InitVal, "", LI);
1412      NSI->takeName(LI);
1413      LI->replaceAllUsesWith(NSI);
1414    }
1415    UI->eraseFromParent();
1416  }
1417
1418  GV->eraseFromParent();
1419  return true;
1420}
1421
1422
1423/// ProcessInternalGlobal - Analyze the specified global variable and optimize
1424/// it if possible.  If we make a change, return true.
1425bool GlobalOpt::ProcessInternalGlobal(GlobalVariable *GV,
1426                                      Module::global_iterator &GVI) {
1427  std::set<PHINode*> PHIUsers;
1428  GlobalStatus GS;
1429  GV->removeDeadConstantUsers();
1430
1431  if (GV->use_empty()) {
1432    DOUT << "GLOBAL DEAD: " << *GV;
1433    GV->eraseFromParent();
1434    ++NumDeleted;
1435    return true;
1436  }
1437
1438  if (!AnalyzeGlobal(GV, GS, PHIUsers)) {
1439#if 0
1440    cerr << "Global: " << *GV;
1441    cerr << "  isLoaded = " << GS.isLoaded << "\n";
1442    cerr << "  StoredType = ";
1443    switch (GS.StoredType) {
1444    case GlobalStatus::NotStored: cerr << "NEVER STORED\n"; break;
1445    case GlobalStatus::isInitializerStored: cerr << "INIT STORED\n"; break;
1446    case GlobalStatus::isStoredOnce: cerr << "STORED ONCE\n"; break;
1447    case GlobalStatus::isStored: cerr << "stored\n"; break;
1448    }
1449    if (GS.StoredType == GlobalStatus::isStoredOnce && GS.StoredOnceValue)
1450      cerr << "  StoredOnceValue = " << *GS.StoredOnceValue << "\n";
1451    if (GS.AccessingFunction && !GS.HasMultipleAccessingFunctions)
1452      cerr << "  AccessingFunction = " << GS.AccessingFunction->getName()
1453                << "\n";
1454    cerr << "  HasMultipleAccessingFunctions =  "
1455              << GS.HasMultipleAccessingFunctions << "\n";
1456    cerr << "  HasNonInstructionUser = " << GS.HasNonInstructionUser<<"\n";
1457    cerr << "\n";
1458#endif
1459
1460    // If this is a first class global and has only one accessing function
1461    // and this function is main (which we know is not recursive we can make
1462    // this global a local variable) we replace the global with a local alloca
1463    // in this function.
1464    //
1465    // NOTE: It doesn't make sense to promote non first class types since we
1466    // are just replacing static memory to stack memory.
1467    if (!GS.HasMultipleAccessingFunctions &&
1468        GS.AccessingFunction && !GS.HasNonInstructionUser &&
1469        GV->getType()->getElementType()->isFirstClassType() &&
1470        GS.AccessingFunction->getName() == "main" &&
1471        GS.AccessingFunction->hasExternalLinkage()) {
1472      DOUT << "LOCALIZING GLOBAL: " << *GV;
1473      Instruction* FirstI = GS.AccessingFunction->getEntryBlock().begin();
1474      const Type* ElemTy = GV->getType()->getElementType();
1475      // FIXME: Pass Global's alignment when globals have alignment
1476      AllocaInst* Alloca = new AllocaInst(ElemTy, NULL, GV->getName(), FirstI);
1477      if (!isa<UndefValue>(GV->getInitializer()))
1478        new StoreInst(GV->getInitializer(), Alloca, FirstI);
1479
1480      GV->replaceAllUsesWith(Alloca);
1481      GV->eraseFromParent();
1482      ++NumLocalized;
1483      return true;
1484    }
1485
1486    // If the global is never loaded (but may be stored to), it is dead.
1487    // Delete it now.
1488    if (!GS.isLoaded) {
1489      DOUT << "GLOBAL NEVER LOADED: " << *GV;
1490
1491      // Delete any stores we can find to the global.  We may not be able to
1492      // make it completely dead though.
1493      bool Changed = CleanupConstantGlobalUsers(GV, GV->getInitializer());
1494
1495      // If the global is dead now, delete it.
1496      if (GV->use_empty()) {
1497        GV->eraseFromParent();
1498        ++NumDeleted;
1499        Changed = true;
1500      }
1501      return Changed;
1502
1503    } else if (GS.StoredType <= GlobalStatus::isInitializerStored) {
1504      DOUT << "MARKING CONSTANT: " << *GV;
1505      GV->setConstant(true);
1506
1507      // Clean up any obviously simplifiable users now.
1508      CleanupConstantGlobalUsers(GV, GV->getInitializer());
1509
1510      // If the global is dead now, just nuke it.
1511      if (GV->use_empty()) {
1512        DOUT << "   *** Marking constant allowed us to simplify "
1513             << "all users and delete global!\n";
1514        GV->eraseFromParent();
1515        ++NumDeleted;
1516      }
1517
1518      ++NumMarked;
1519      return true;
1520    } else if (!GV->getInitializer()->getType()->isFirstClassType()) {
1521      if (GlobalVariable *FirstNewGV = SRAGlobal(GV)) {
1522        GVI = FirstNewGV;  // Don't skip the newly produced globals!
1523        return true;
1524      }
1525    } else if (GS.StoredType == GlobalStatus::isStoredOnce) {
1526      // If the initial value for the global was an undef value, and if only
1527      // one other value was stored into it, we can just change the
1528      // initializer to be an undef value, then delete all stores to the
1529      // global.  This allows us to mark it constant.
1530      if (Constant *SOVConstant = dyn_cast<Constant>(GS.StoredOnceValue))
1531        if (isa<UndefValue>(GV->getInitializer())) {
1532          // Change the initial value here.
1533          GV->setInitializer(SOVConstant);
1534
1535          // Clean up any obviously simplifiable users now.
1536          CleanupConstantGlobalUsers(GV, GV->getInitializer());
1537
1538          if (GV->use_empty()) {
1539            DOUT << "   *** Substituting initializer allowed us to "
1540                 << "simplify all users and delete global!\n";
1541            GV->eraseFromParent();
1542            ++NumDeleted;
1543          } else {
1544            GVI = GV;
1545          }
1546          ++NumSubstitute;
1547          return true;
1548        }
1549
1550      // Try to optimize globals based on the knowledge that only one value
1551      // (besides its initializer) is ever stored to the global.
1552      if (OptimizeOnceStoredGlobal(GV, GS.StoredOnceValue, GVI,
1553                                   getAnalysis<TargetData>()))
1554        return true;
1555
1556      // Otherwise, if the global was not a boolean, we can shrink it to be a
1557      // boolean.
1558      if (Constant *SOVConstant = dyn_cast<Constant>(GS.StoredOnceValue))
1559        if (TryToShrinkGlobalToBoolean(GV, SOVConstant)) {
1560          ++NumShrunkToBool;
1561          return true;
1562        }
1563    }
1564  }
1565  return false;
1566}
1567
1568/// OnlyCalledDirectly - Return true if the specified function is only called
1569/// directly.  In other words, its address is never taken.
1570static bool OnlyCalledDirectly(Function *F) {
1571  for (Value::use_iterator UI = F->use_begin(), E = F->use_end(); UI != E;++UI){
1572    Instruction *User = dyn_cast<Instruction>(*UI);
1573    if (!User) return false;
1574    if (!isa<CallInst>(User) && !isa<InvokeInst>(User)) return false;
1575
1576    // See if the function address is passed as an argument.
1577    for (unsigned i = 1, e = User->getNumOperands(); i != e; ++i)
1578      if (User->getOperand(i) == F) return false;
1579  }
1580  return true;
1581}
1582
1583/// ChangeCalleesToFastCall - Walk all of the direct calls of the specified
1584/// function, changing them to FastCC.
1585static void ChangeCalleesToFastCall(Function *F) {
1586  for (Value::use_iterator UI = F->use_begin(), E = F->use_end(); UI != E;++UI){
1587    Instruction *User = cast<Instruction>(*UI);
1588    if (CallInst *CI = dyn_cast<CallInst>(User))
1589      CI->setCallingConv(CallingConv::Fast);
1590    else
1591      cast<InvokeInst>(User)->setCallingConv(CallingConv::Fast);
1592  }
1593}
1594
1595static const ParamAttrsList *StripNest(const ParamAttrsList *Attrs) {
1596  if (Attrs) {
1597    for (unsigned i = 0, e = Attrs->size(); i != e; ++i) {
1598      uint16_t A = Attrs->getParamAttrsAtIndex(i);
1599      if (A & ParamAttr::Nest) {
1600        Attrs = ParamAttrsList::excludeAttrs(Attrs, Attrs->getParamIndex(i),
1601                                             ParamAttr::Nest);
1602        // There can be only one.
1603        break;
1604      }
1605    }
1606  }
1607
1608  return Attrs;
1609}
1610
1611static void RemoveNestAttribute(Function *F) {
1612  F->setParamAttrs(StripNest(F->getParamAttrs()));
1613  for (Value::use_iterator UI = F->use_begin(), E = F->use_end(); UI != E;++UI){
1614    Instruction *User = cast<Instruction>(*UI);
1615    if (CallInst *CI = dyn_cast<CallInst>(User)) {
1616      CI->setParamAttrs(StripNest(CI->getParamAttrs()));
1617    } else {
1618      InvokeInst *II = cast<InvokeInst>(User);
1619      II->setParamAttrs(StripNest(II->getParamAttrs()));
1620    }
1621  }
1622}
1623
1624bool GlobalOpt::OptimizeFunctions(Module &M) {
1625  bool Changed = false;
1626  // Optimize functions.
1627  for (Module::iterator FI = M.begin(), E = M.end(); FI != E; ) {
1628    Function *F = FI++;
1629    F->removeDeadConstantUsers();
1630    if (F->use_empty() && (F->hasInternalLinkage() ||
1631                           F->hasLinkOnceLinkage())) {
1632      M.getFunctionList().erase(F);
1633      Changed = true;
1634      ++NumFnDeleted;
1635    } else if (F->hasInternalLinkage()) {
1636      if (F->getCallingConv() == CallingConv::C && !F->isVarArg() &&
1637          OnlyCalledDirectly(F)) {
1638        // If this function has C calling conventions, is not a varargs
1639        // function, and is only called directly, promote it to use the Fast
1640        // calling convention.
1641        F->setCallingConv(CallingConv::Fast);
1642        ChangeCalleesToFastCall(F);
1643        ++NumFastCallFns;
1644        Changed = true;
1645      }
1646
1647      if (F->getParamAttrs() &&
1648          F->getParamAttrs()->hasAttrSomewhere(ParamAttr::Nest) &&
1649          OnlyCalledDirectly(F)) {
1650        // The function is not used by a trampoline intrinsic, so it is safe
1651        // to remove the 'nest' attribute.
1652        RemoveNestAttribute(F);
1653        ++NumNestRemoved;
1654        Changed = true;
1655      }
1656    }
1657  }
1658  return Changed;
1659}
1660
1661bool GlobalOpt::OptimizeGlobalVars(Module &M) {
1662  bool Changed = false;
1663  for (Module::global_iterator GVI = M.global_begin(), E = M.global_end();
1664       GVI != E; ) {
1665    GlobalVariable *GV = GVI++;
1666    if (!GV->isConstant() && GV->hasInternalLinkage() &&
1667        GV->hasInitializer())
1668      Changed |= ProcessInternalGlobal(GV, GVI);
1669  }
1670  return Changed;
1671}
1672
1673/// FindGlobalCtors - Find the llvm.globalctors list, verifying that all
1674/// initializers have an init priority of 65535.
1675GlobalVariable *GlobalOpt::FindGlobalCtors(Module &M) {
1676  for (Module::global_iterator I = M.global_begin(), E = M.global_end();
1677       I != E; ++I)
1678    if (I->getName() == "llvm.global_ctors") {
1679      // Found it, verify it's an array of { int, void()* }.
1680      const ArrayType *ATy =dyn_cast<ArrayType>(I->getType()->getElementType());
1681      if (!ATy) return 0;
1682      const StructType *STy = dyn_cast<StructType>(ATy->getElementType());
1683      if (!STy || STy->getNumElements() != 2 ||
1684          STy->getElementType(0) != Type::Int32Ty) return 0;
1685      const PointerType *PFTy = dyn_cast<PointerType>(STy->getElementType(1));
1686      if (!PFTy) return 0;
1687      const FunctionType *FTy = dyn_cast<FunctionType>(PFTy->getElementType());
1688      if (!FTy || FTy->getReturnType() != Type::VoidTy || FTy->isVarArg() ||
1689          FTy->getNumParams() != 0)
1690        return 0;
1691
1692      // Verify that the initializer is simple enough for us to handle.
1693      if (!I->hasInitializer()) return 0;
1694      ConstantArray *CA = dyn_cast<ConstantArray>(I->getInitializer());
1695      if (!CA) return 0;
1696      for (unsigned i = 0, e = CA->getNumOperands(); i != e; ++i)
1697        if (ConstantStruct *CS = dyn_cast<ConstantStruct>(CA->getOperand(i))) {
1698          if (isa<ConstantPointerNull>(CS->getOperand(1)))
1699            continue;
1700
1701          // Must have a function or null ptr.
1702          if (!isa<Function>(CS->getOperand(1)))
1703            return 0;
1704
1705          // Init priority must be standard.
1706          ConstantInt *CI = dyn_cast<ConstantInt>(CS->getOperand(0));
1707          if (!CI || CI->getZExtValue() != 65535)
1708            return 0;
1709        } else {
1710          return 0;
1711        }
1712
1713      return I;
1714    }
1715  return 0;
1716}
1717
1718/// ParseGlobalCtors - Given a llvm.global_ctors list that we can understand,
1719/// return a list of the functions and null terminator as a vector.
1720static std::vector<Function*> ParseGlobalCtors(GlobalVariable *GV) {
1721  ConstantArray *CA = cast<ConstantArray>(GV->getInitializer());
1722  std::vector<Function*> Result;
1723  Result.reserve(CA->getNumOperands());
1724  for (unsigned i = 0, e = CA->getNumOperands(); i != e; ++i) {
1725    ConstantStruct *CS = cast<ConstantStruct>(CA->getOperand(i));
1726    Result.push_back(dyn_cast<Function>(CS->getOperand(1)));
1727  }
1728  return Result;
1729}
1730
1731/// InstallGlobalCtors - Given a specified llvm.global_ctors list, install the
1732/// specified array, returning the new global to use.
1733static GlobalVariable *InstallGlobalCtors(GlobalVariable *GCL,
1734                                          const std::vector<Function*> &Ctors) {
1735  // If we made a change, reassemble the initializer list.
1736  std::vector<Constant*> CSVals;
1737  CSVals.push_back(ConstantInt::get(Type::Int32Ty, 65535));
1738  CSVals.push_back(0);
1739
1740  // Create the new init list.
1741  std::vector<Constant*> CAList;
1742  for (unsigned i = 0, e = Ctors.size(); i != e; ++i) {
1743    if (Ctors[i]) {
1744      CSVals[1] = Ctors[i];
1745    } else {
1746      const Type *FTy = FunctionType::get(Type::VoidTy,
1747                                          std::vector<const Type*>(), false);
1748      const PointerType *PFTy = PointerType::getUnqual(FTy);
1749      CSVals[1] = Constant::getNullValue(PFTy);
1750      CSVals[0] = ConstantInt::get(Type::Int32Ty, 2147483647);
1751    }
1752    CAList.push_back(ConstantStruct::get(CSVals));
1753  }
1754
1755  // Create the array initializer.
1756  const Type *StructTy =
1757    cast<ArrayType>(GCL->getType()->getElementType())->getElementType();
1758  Constant *CA = ConstantArray::get(ArrayType::get(StructTy, CAList.size()),
1759                                    CAList);
1760
1761  // If we didn't change the number of elements, don't create a new GV.
1762  if (CA->getType() == GCL->getInitializer()->getType()) {
1763    GCL->setInitializer(CA);
1764    return GCL;
1765  }
1766
1767  // Create the new global and insert it next to the existing list.
1768  GlobalVariable *NGV = new GlobalVariable(CA->getType(), GCL->isConstant(),
1769                                           GCL->getLinkage(), CA, "",
1770                                           (Module *)NULL,
1771                                           GCL->isThreadLocal());
1772  GCL->getParent()->getGlobalList().insert(GCL, NGV);
1773  NGV->takeName(GCL);
1774
1775  // Nuke the old list, replacing any uses with the new one.
1776  if (!GCL->use_empty()) {
1777    Constant *V = NGV;
1778    if (V->getType() != GCL->getType())
1779      V = ConstantExpr::getBitCast(V, GCL->getType());
1780    GCL->replaceAllUsesWith(V);
1781  }
1782  GCL->eraseFromParent();
1783
1784  if (Ctors.size())
1785    return NGV;
1786  else
1787    return 0;
1788}
1789
1790
1791static Constant *getVal(std::map<Value*, Constant*> &ComputedValues,
1792                        Value *V) {
1793  if (Constant *CV = dyn_cast<Constant>(V)) return CV;
1794  Constant *R = ComputedValues[V];
1795  assert(R && "Reference to an uncomputed value!");
1796  return R;
1797}
1798
1799/// isSimpleEnoughPointerToCommit - Return true if this constant is simple
1800/// enough for us to understand.  In particular, if it is a cast of something,
1801/// we punt.  We basically just support direct accesses to globals and GEP's of
1802/// globals.  This should be kept up to date with CommitValueTo.
1803static bool isSimpleEnoughPointerToCommit(Constant *C) {
1804  if (GlobalVariable *GV = dyn_cast<GlobalVariable>(C)) {
1805    if (!GV->hasExternalLinkage() && !GV->hasInternalLinkage())
1806      return false;  // do not allow weak/linkonce/dllimport/dllexport linkage.
1807    return !GV->isDeclaration();  // reject external globals.
1808  }
1809  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(C))
1810    // Handle a constantexpr gep.
1811    if (CE->getOpcode() == Instruction::GetElementPtr &&
1812        isa<GlobalVariable>(CE->getOperand(0))) {
1813      GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0));
1814      if (!GV->hasExternalLinkage() && !GV->hasInternalLinkage())
1815        return false;  // do not allow weak/linkonce/dllimport/dllexport linkage.
1816      return GV->hasInitializer() &&
1817             ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE);
1818    }
1819  return false;
1820}
1821
1822/// EvaluateStoreInto - Evaluate a piece of a constantexpr store into a global
1823/// initializer.  This returns 'Init' modified to reflect 'Val' stored into it.
1824/// At this point, the GEP operands of Addr [0, OpNo) have been stepped into.
1825static Constant *EvaluateStoreInto(Constant *Init, Constant *Val,
1826                                   ConstantExpr *Addr, unsigned OpNo) {
1827  // Base case of the recursion.
1828  if (OpNo == Addr->getNumOperands()) {
1829    assert(Val->getType() == Init->getType() && "Type mismatch!");
1830    return Val;
1831  }
1832
1833  if (const StructType *STy = dyn_cast<StructType>(Init->getType())) {
1834    std::vector<Constant*> Elts;
1835
1836    // Break up the constant into its elements.
1837    if (ConstantStruct *CS = dyn_cast<ConstantStruct>(Init)) {
1838      for (unsigned i = 0, e = CS->getNumOperands(); i != e; ++i)
1839        Elts.push_back(CS->getOperand(i));
1840    } else if (isa<ConstantAggregateZero>(Init)) {
1841      for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
1842        Elts.push_back(Constant::getNullValue(STy->getElementType(i)));
1843    } else if (isa<UndefValue>(Init)) {
1844      for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
1845        Elts.push_back(UndefValue::get(STy->getElementType(i)));
1846    } else {
1847      assert(0 && "This code is out of sync with "
1848             " ConstantFoldLoadThroughGEPConstantExpr");
1849    }
1850
1851    // Replace the element that we are supposed to.
1852    ConstantInt *CU = cast<ConstantInt>(Addr->getOperand(OpNo));
1853    unsigned Idx = CU->getZExtValue();
1854    assert(Idx < STy->getNumElements() && "Struct index out of range!");
1855    Elts[Idx] = EvaluateStoreInto(Elts[Idx], Val, Addr, OpNo+1);
1856
1857    // Return the modified struct.
1858    return ConstantStruct::get(&Elts[0], Elts.size(), STy->isPacked());
1859  } else {
1860    ConstantInt *CI = cast<ConstantInt>(Addr->getOperand(OpNo));
1861    const ArrayType *ATy = cast<ArrayType>(Init->getType());
1862
1863    // Break up the array into elements.
1864    std::vector<Constant*> Elts;
1865    if (ConstantArray *CA = dyn_cast<ConstantArray>(Init)) {
1866      for (unsigned i = 0, e = CA->getNumOperands(); i != e; ++i)
1867        Elts.push_back(CA->getOperand(i));
1868    } else if (isa<ConstantAggregateZero>(Init)) {
1869      Constant *Elt = Constant::getNullValue(ATy->getElementType());
1870      Elts.assign(ATy->getNumElements(), Elt);
1871    } else if (isa<UndefValue>(Init)) {
1872      Constant *Elt = UndefValue::get(ATy->getElementType());
1873      Elts.assign(ATy->getNumElements(), Elt);
1874    } else {
1875      assert(0 && "This code is out of sync with "
1876             " ConstantFoldLoadThroughGEPConstantExpr");
1877    }
1878
1879    assert(CI->getZExtValue() < ATy->getNumElements());
1880    Elts[CI->getZExtValue()] =
1881      EvaluateStoreInto(Elts[CI->getZExtValue()], Val, Addr, OpNo+1);
1882    return ConstantArray::get(ATy, Elts);
1883  }
1884}
1885
1886/// CommitValueTo - We have decided that Addr (which satisfies the predicate
1887/// isSimpleEnoughPointerToCommit) should get Val as its value.  Make it happen.
1888static void CommitValueTo(Constant *Val, Constant *Addr) {
1889  if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Addr)) {
1890    assert(GV->hasInitializer());
1891    GV->setInitializer(Val);
1892    return;
1893  }
1894
1895  ConstantExpr *CE = cast<ConstantExpr>(Addr);
1896  GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0));
1897
1898  Constant *Init = GV->getInitializer();
1899  Init = EvaluateStoreInto(Init, Val, CE, 2);
1900  GV->setInitializer(Init);
1901}
1902
1903/// ComputeLoadResult - Return the value that would be computed by a load from
1904/// P after the stores reflected by 'memory' have been performed.  If we can't
1905/// decide, return null.
1906static Constant *ComputeLoadResult(Constant *P,
1907                                const std::map<Constant*, Constant*> &Memory) {
1908  // If this memory location has been recently stored, use the stored value: it
1909  // is the most up-to-date.
1910  std::map<Constant*, Constant*>::const_iterator I = Memory.find(P);
1911  if (I != Memory.end()) return I->second;
1912
1913  // Access it.
1914  if (GlobalVariable *GV = dyn_cast<GlobalVariable>(P)) {
1915    if (GV->hasInitializer())
1916      return GV->getInitializer();
1917    return 0;
1918  }
1919
1920  // Handle a constantexpr getelementptr.
1921  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(P))
1922    if (CE->getOpcode() == Instruction::GetElementPtr &&
1923        isa<GlobalVariable>(CE->getOperand(0))) {
1924      GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0));
1925      if (GV->hasInitializer())
1926        return ConstantFoldLoadThroughGEPConstantExpr(GV->getInitializer(), CE);
1927    }
1928
1929  return 0;  // don't know how to evaluate.
1930}
1931
1932/// EvaluateFunction - Evaluate a call to function F, returning true if
1933/// successful, false if we can't evaluate it.  ActualArgs contains the formal
1934/// arguments for the function.
1935static bool EvaluateFunction(Function *F, Constant *&RetVal,
1936                             const std::vector<Constant*> &ActualArgs,
1937                             std::vector<Function*> &CallStack,
1938                             std::map<Constant*, Constant*> &MutatedMemory,
1939                             std::vector<GlobalVariable*> &AllocaTmps) {
1940  // Check to see if this function is already executing (recursion).  If so,
1941  // bail out.  TODO: we might want to accept limited recursion.
1942  if (std::find(CallStack.begin(), CallStack.end(), F) != CallStack.end())
1943    return false;
1944
1945  CallStack.push_back(F);
1946
1947  /// Values - As we compute SSA register values, we store their contents here.
1948  std::map<Value*, Constant*> Values;
1949
1950  // Initialize arguments to the incoming values specified.
1951  unsigned ArgNo = 0;
1952  for (Function::arg_iterator AI = F->arg_begin(), E = F->arg_end(); AI != E;
1953       ++AI, ++ArgNo)
1954    Values[AI] = ActualArgs[ArgNo];
1955
1956  /// ExecutedBlocks - We only handle non-looping, non-recursive code.  As such,
1957  /// we can only evaluate any one basic block at most once.  This set keeps
1958  /// track of what we have executed so we can detect recursive cases etc.
1959  std::set<BasicBlock*> ExecutedBlocks;
1960
1961  // CurInst - The current instruction we're evaluating.
1962  BasicBlock::iterator CurInst = F->begin()->begin();
1963
1964  // This is the main evaluation loop.
1965  while (1) {
1966    Constant *InstResult = 0;
1967
1968    if (StoreInst *SI = dyn_cast<StoreInst>(CurInst)) {
1969      if (SI->isVolatile()) return false;  // no volatile accesses.
1970      Constant *Ptr = getVal(Values, SI->getOperand(1));
1971      if (!isSimpleEnoughPointerToCommit(Ptr))
1972        // If this is too complex for us to commit, reject it.
1973        return false;
1974      Constant *Val = getVal(Values, SI->getOperand(0));
1975      MutatedMemory[Ptr] = Val;
1976    } else if (BinaryOperator *BO = dyn_cast<BinaryOperator>(CurInst)) {
1977      InstResult = ConstantExpr::get(BO->getOpcode(),
1978                                     getVal(Values, BO->getOperand(0)),
1979                                     getVal(Values, BO->getOperand(1)));
1980    } else if (CmpInst *CI = dyn_cast<CmpInst>(CurInst)) {
1981      InstResult = ConstantExpr::getCompare(CI->getPredicate(),
1982                                            getVal(Values, CI->getOperand(0)),
1983                                            getVal(Values, CI->getOperand(1)));
1984    } else if (CastInst *CI = dyn_cast<CastInst>(CurInst)) {
1985      InstResult = ConstantExpr::getCast(CI->getOpcode(),
1986                                         getVal(Values, CI->getOperand(0)),
1987                                         CI->getType());
1988    } else if (SelectInst *SI = dyn_cast<SelectInst>(CurInst)) {
1989      InstResult = ConstantExpr::getSelect(getVal(Values, SI->getOperand(0)),
1990                                           getVal(Values, SI->getOperand(1)),
1991                                           getVal(Values, SI->getOperand(2)));
1992    } else if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(CurInst)) {
1993      Constant *P = getVal(Values, GEP->getOperand(0));
1994      SmallVector<Constant*, 8> GEPOps;
1995      for (unsigned i = 1, e = GEP->getNumOperands(); i != e; ++i)
1996        GEPOps.push_back(getVal(Values, GEP->getOperand(i)));
1997      InstResult = ConstantExpr::getGetElementPtr(P, &GEPOps[0], GEPOps.size());
1998    } else if (LoadInst *LI = dyn_cast<LoadInst>(CurInst)) {
1999      if (LI->isVolatile()) return false;  // no volatile accesses.
2000      InstResult = ComputeLoadResult(getVal(Values, LI->getOperand(0)),
2001                                     MutatedMemory);
2002      if (InstResult == 0) return false; // Could not evaluate load.
2003    } else if (AllocaInst *AI = dyn_cast<AllocaInst>(CurInst)) {
2004      if (AI->isArrayAllocation()) return false;  // Cannot handle array allocs.
2005      const Type *Ty = AI->getType()->getElementType();
2006      AllocaTmps.push_back(new GlobalVariable(Ty, false,
2007                                              GlobalValue::InternalLinkage,
2008                                              UndefValue::get(Ty),
2009                                              AI->getName()));
2010      InstResult = AllocaTmps.back();
2011    } else if (CallInst *CI = dyn_cast<CallInst>(CurInst)) {
2012      // Cannot handle inline asm.
2013      if (isa<InlineAsm>(CI->getOperand(0))) return false;
2014
2015      // Resolve function pointers.
2016      Function *Callee = dyn_cast<Function>(getVal(Values, CI->getOperand(0)));
2017      if (!Callee) return false;  // Cannot resolve.
2018
2019      std::vector<Constant*> Formals;
2020      for (unsigned i = 1, e = CI->getNumOperands(); i != e; ++i)
2021        Formals.push_back(getVal(Values, CI->getOperand(i)));
2022
2023      if (Callee->isDeclaration()) {
2024        // If this is a function we can constant fold, do it.
2025        if (Constant *C = ConstantFoldCall(Callee, &Formals[0],
2026                                           Formals.size())) {
2027          InstResult = C;
2028        } else {
2029          return false;
2030        }
2031      } else {
2032        if (Callee->getFunctionType()->isVarArg())
2033          return false;
2034
2035        Constant *RetVal;
2036
2037        // Execute the call, if successful, use the return value.
2038        if (!EvaluateFunction(Callee, RetVal, Formals, CallStack,
2039                              MutatedMemory, AllocaTmps))
2040          return false;
2041        InstResult = RetVal;
2042      }
2043    } else if (isa<TerminatorInst>(CurInst)) {
2044      BasicBlock *NewBB = 0;
2045      if (BranchInst *BI = dyn_cast<BranchInst>(CurInst)) {
2046        if (BI->isUnconditional()) {
2047          NewBB = BI->getSuccessor(0);
2048        } else {
2049          ConstantInt *Cond =
2050            dyn_cast<ConstantInt>(getVal(Values, BI->getCondition()));
2051          if (!Cond) return false;  // Cannot determine.
2052
2053          NewBB = BI->getSuccessor(!Cond->getZExtValue());
2054        }
2055      } else if (SwitchInst *SI = dyn_cast<SwitchInst>(CurInst)) {
2056        ConstantInt *Val =
2057          dyn_cast<ConstantInt>(getVal(Values, SI->getCondition()));
2058        if (!Val) return false;  // Cannot determine.
2059        NewBB = SI->getSuccessor(SI->findCaseValue(Val));
2060      } else if (ReturnInst *RI = dyn_cast<ReturnInst>(CurInst)) {
2061        if (RI->getNumOperands())
2062          RetVal = getVal(Values, RI->getOperand(0));
2063
2064        CallStack.pop_back();  // return from fn.
2065        return true;  // We succeeded at evaluating this ctor!
2066      } else {
2067        // invoke, unwind, unreachable.
2068        return false;  // Cannot handle this terminator.
2069      }
2070
2071      // Okay, we succeeded in evaluating this control flow.  See if we have
2072      // executed the new block before.  If so, we have a looping function,
2073      // which we cannot evaluate in reasonable time.
2074      if (!ExecutedBlocks.insert(NewBB).second)
2075        return false;  // looped!
2076
2077      // Okay, we have never been in this block before.  Check to see if there
2078      // are any PHI nodes.  If so, evaluate them with information about where
2079      // we came from.
2080      BasicBlock *OldBB = CurInst->getParent();
2081      CurInst = NewBB->begin();
2082      PHINode *PN;
2083      for (; (PN = dyn_cast<PHINode>(CurInst)); ++CurInst)
2084        Values[PN] = getVal(Values, PN->getIncomingValueForBlock(OldBB));
2085
2086      // Do NOT increment CurInst.  We know that the terminator had no value.
2087      continue;
2088    } else {
2089      // Did not know how to evaluate this!
2090      return false;
2091    }
2092
2093    if (!CurInst->use_empty())
2094      Values[CurInst] = InstResult;
2095
2096    // Advance program counter.
2097    ++CurInst;
2098  }
2099}
2100
2101/// EvaluateStaticConstructor - Evaluate static constructors in the function, if
2102/// we can.  Return true if we can, false otherwise.
2103static bool EvaluateStaticConstructor(Function *F) {
2104  /// MutatedMemory - For each store we execute, we update this map.  Loads
2105  /// check this to get the most up-to-date value.  If evaluation is successful,
2106  /// this state is committed to the process.
2107  std::map<Constant*, Constant*> MutatedMemory;
2108
2109  /// AllocaTmps - To 'execute' an alloca, we create a temporary global variable
2110  /// to represent its body.  This vector is needed so we can delete the
2111  /// temporary globals when we are done.
2112  std::vector<GlobalVariable*> AllocaTmps;
2113
2114  /// CallStack - This is used to detect recursion.  In pathological situations
2115  /// we could hit exponential behavior, but at least there is nothing
2116  /// unbounded.
2117  std::vector<Function*> CallStack;
2118
2119  // Call the function.
2120  Constant *RetValDummy;
2121  bool EvalSuccess = EvaluateFunction(F, RetValDummy, std::vector<Constant*>(),
2122                                       CallStack, MutatedMemory, AllocaTmps);
2123  if (EvalSuccess) {
2124    // We succeeded at evaluation: commit the result.
2125    DOUT << "FULLY EVALUATED GLOBAL CTOR FUNCTION '"
2126         << F->getName() << "' to " << MutatedMemory.size()
2127         << " stores.\n";
2128    for (std::map<Constant*, Constant*>::iterator I = MutatedMemory.begin(),
2129         E = MutatedMemory.end(); I != E; ++I)
2130      CommitValueTo(I->second, I->first);
2131  }
2132
2133  // At this point, we are done interpreting.  If we created any 'alloca'
2134  // temporaries, release them now.
2135  while (!AllocaTmps.empty()) {
2136    GlobalVariable *Tmp = AllocaTmps.back();
2137    AllocaTmps.pop_back();
2138
2139    // If there are still users of the alloca, the program is doing something
2140    // silly, e.g. storing the address of the alloca somewhere and using it
2141    // later.  Since this is undefined, we'll just make it be null.
2142    if (!Tmp->use_empty())
2143      Tmp->replaceAllUsesWith(Constant::getNullValue(Tmp->getType()));
2144    delete Tmp;
2145  }
2146
2147  return EvalSuccess;
2148}
2149
2150
2151
2152/// OptimizeGlobalCtorsList - Simplify and evaluation global ctors if possible.
2153/// Return true if anything changed.
2154bool GlobalOpt::OptimizeGlobalCtorsList(GlobalVariable *&GCL) {
2155  std::vector<Function*> Ctors = ParseGlobalCtors(GCL);
2156  bool MadeChange = false;
2157  if (Ctors.empty()) return false;
2158
2159  // Loop over global ctors, optimizing them when we can.
2160  for (unsigned i = 0; i != Ctors.size(); ++i) {
2161    Function *F = Ctors[i];
2162    // Found a null terminator in the middle of the list, prune off the rest of
2163    // the list.
2164    if (F == 0) {
2165      if (i != Ctors.size()-1) {
2166        Ctors.resize(i+1);
2167        MadeChange = true;
2168      }
2169      break;
2170    }
2171
2172    // We cannot simplify external ctor functions.
2173    if (F->empty()) continue;
2174
2175    // If we can evaluate the ctor at compile time, do.
2176    if (EvaluateStaticConstructor(F)) {
2177      Ctors.erase(Ctors.begin()+i);
2178      MadeChange = true;
2179      --i;
2180      ++NumCtorsEvaluated;
2181      continue;
2182    }
2183  }
2184
2185  if (!MadeChange) return false;
2186
2187  GCL = InstallGlobalCtors(GCL, Ctors);
2188  return true;
2189}
2190
2191
2192bool GlobalOpt::runOnModule(Module &M) {
2193  bool Changed = false;
2194
2195  // Try to find the llvm.globalctors list.
2196  GlobalVariable *GlobalCtors = FindGlobalCtors(M);
2197
2198  bool LocalChange = true;
2199  while (LocalChange) {
2200    LocalChange = false;
2201
2202    // Delete functions that are trivially dead, ccc -> fastcc
2203    LocalChange |= OptimizeFunctions(M);
2204
2205    // Optimize global_ctors list.
2206    if (GlobalCtors)
2207      LocalChange |= OptimizeGlobalCtorsList(GlobalCtors);
2208
2209    // Optimize non-address-taken globals.
2210    LocalChange |= OptimizeGlobalVars(M);
2211    Changed |= LocalChange;
2212  }
2213
2214  // TODO: Move all global ctors functions to the end of the module for code
2215  // layout.
2216
2217  return Changed;
2218}
2219