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 #include "llvm/Transforms/IPO/GlobalOpt.h"
17 #include "llvm/ADT/DenseMap.h"
18 #include "llvm/ADT/STLExtras.h"
19 #include "llvm/ADT/SmallPtrSet.h"
20 #include "llvm/ADT/SmallSet.h"
21 #include "llvm/ADT/SmallVector.h"
22 #include "llvm/ADT/Statistic.h"
23 #include "llvm/Analysis/ConstantFolding.h"
24 #include "llvm/Analysis/MemoryBuiltins.h"
25 #include "llvm/Analysis/TargetLibraryInfo.h"
26 #include "llvm/IR/CallSite.h"
27 #include "llvm/IR/CallingConv.h"
28 #include "llvm/IR/Constants.h"
29 #include "llvm/IR/DataLayout.h"
30 #include "llvm/IR/DerivedTypes.h"
31 #include "llvm/IR/Dominators.h"
32 #include "llvm/IR/GetElementPtrTypeIterator.h"
33 #include "llvm/IR/Instructions.h"
34 #include "llvm/IR/IntrinsicInst.h"
35 #include "llvm/IR/Module.h"
36 #include "llvm/IR/Operator.h"
37 #include "llvm/IR/ValueHandle.h"
38 #include "llvm/Pass.h"
39 #include "llvm/Support/Debug.h"
40 #include "llvm/Support/ErrorHandling.h"
41 #include "llvm/Support/MathExtras.h"
42 #include "llvm/Support/raw_ostream.h"
43 #include "llvm/Transforms/IPO.h"
44 #include "llvm/Transforms/Utils/CtorUtils.h"
45 #include "llvm/Transforms/Utils/Evaluator.h"
46 #include "llvm/Transforms/Utils/GlobalStatus.h"
47 #include <algorithm>
48 using namespace llvm;
49 
50 #define DEBUG_TYPE "globalopt"
51 
52 STATISTIC(NumMarked    , "Number of globals marked constant");
53 STATISTIC(NumUnnamed   , "Number of globals marked unnamed_addr");
54 STATISTIC(NumSRA       , "Number of aggregate globals broken into scalars");
55 STATISTIC(NumHeapSRA   , "Number of heap objects SRA'd");
56 STATISTIC(NumSubstitute,"Number of globals with initializers stored into them");
57 STATISTIC(NumDeleted   , "Number of globals deleted");
58 STATISTIC(NumGlobUses  , "Number of global uses devirtualized");
59 STATISTIC(NumLocalized , "Number of globals localized");
60 STATISTIC(NumShrunkToBool  , "Number of global vars shrunk to booleans");
61 STATISTIC(NumFastCallFns   , "Number of functions converted to fastcc");
62 STATISTIC(NumCtorsEvaluated, "Number of static ctors evaluated");
63 STATISTIC(NumNestRemoved   , "Number of nest attributes removed");
64 STATISTIC(NumAliasesResolved, "Number of global aliases resolved");
65 STATISTIC(NumAliasesRemoved, "Number of global aliases eliminated");
66 STATISTIC(NumCXXDtorsRemoved, "Number of global C++ destructors removed");
67 
68 /// Is this global variable possibly used by a leak checker as a root?  If so,
69 /// we might not really want to eliminate the stores to it.
70 static bool isLeakCheckerRoot(GlobalVariable *GV) {
71   // A global variable is a root if it is a pointer, or could plausibly contain
72   // a pointer.  There are two challenges; one is that we could have a struct
73   // the has an inner member which is a pointer.  We recurse through the type to
74   // detect these (up to a point).  The other is that we may actually be a union
75   // of a pointer and another type, and so our LLVM type is an integer which
76   // gets converted into a pointer, or our type is an [i8 x #] with a pointer
77   // potentially contained here.
78 
79   if (GV->hasPrivateLinkage())
80     return false;
81 
82   SmallVector<Type *, 4> Types;
83   Types.push_back(GV->getValueType());
84 
85   unsigned Limit = 20;
86   do {
87     Type *Ty = Types.pop_back_val();
88     switch (Ty->getTypeID()) {
89       default: break;
90       case Type::PointerTyID: return true;
91       case Type::ArrayTyID:
92       case Type::VectorTyID: {
93         SequentialType *STy = cast<SequentialType>(Ty);
94         Types.push_back(STy->getElementType());
95         break;
96       }
97       case Type::StructTyID: {
98         StructType *STy = cast<StructType>(Ty);
99         if (STy->isOpaque()) return true;
100         for (StructType::element_iterator I = STy->element_begin(),
101                  E = STy->element_end(); I != E; ++I) {
102           Type *InnerTy = *I;
103           if (isa<PointerType>(InnerTy)) return true;
104           if (isa<CompositeType>(InnerTy))
105             Types.push_back(InnerTy);
106         }
107         break;
108       }
109     }
110     if (--Limit == 0) return true;
111   } while (!Types.empty());
112   return false;
113 }
114 
115 /// Given a value that is stored to a global but never read, determine whether
116 /// it's safe to remove the store and the chain of computation that feeds the
117 /// store.
118 static bool IsSafeComputationToRemove(Value *V, const TargetLibraryInfo *TLI) {
119   do {
120     if (isa<Constant>(V))
121       return true;
122     if (!V->hasOneUse())
123       return false;
124     if (isa<LoadInst>(V) || isa<InvokeInst>(V) || isa<Argument>(V) ||
125         isa<GlobalValue>(V))
126       return false;
127     if (isAllocationFn(V, TLI))
128       return true;
129 
130     Instruction *I = cast<Instruction>(V);
131     if (I->mayHaveSideEffects())
132       return false;
133     if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(I)) {
134       if (!GEP->hasAllConstantIndices())
135         return false;
136     } else if (I->getNumOperands() != 1) {
137       return false;
138     }
139 
140     V = I->getOperand(0);
141   } while (1);
142 }
143 
144 /// This GV is a pointer root.  Loop over all users of the global and clean up
145 /// any that obviously don't assign the global a value that isn't dynamically
146 /// allocated.
147 static bool CleanupPointerRootUsers(GlobalVariable *GV,
148                                     const TargetLibraryInfo *TLI) {
149   // A brief explanation of leak checkers.  The goal is to find bugs where
150   // pointers are forgotten, causing an accumulating growth in memory
151   // usage over time.  The common strategy for leak checkers is to whitelist the
152   // memory pointed to by globals at exit.  This is popular because it also
153   // solves another problem where the main thread of a C++ program may shut down
154   // before other threads that are still expecting to use those globals.  To
155   // handle that case, we expect the program may create a singleton and never
156   // destroy it.
157 
158   bool Changed = false;
159 
160   // If Dead[n].first is the only use of a malloc result, we can delete its
161   // chain of computation and the store to the global in Dead[n].second.
162   SmallVector<std::pair<Instruction *, Instruction *>, 32> Dead;
163 
164   // Constants can't be pointers to dynamically allocated memory.
165   for (Value::user_iterator UI = GV->user_begin(), E = GV->user_end();
166        UI != E;) {
167     User *U = *UI++;
168     if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
169       Value *V = SI->getValueOperand();
170       if (isa<Constant>(V)) {
171         Changed = true;
172         SI->eraseFromParent();
173       } else if (Instruction *I = dyn_cast<Instruction>(V)) {
174         if (I->hasOneUse())
175           Dead.push_back(std::make_pair(I, SI));
176       }
177     } else if (MemSetInst *MSI = dyn_cast<MemSetInst>(U)) {
178       if (isa<Constant>(MSI->getValue())) {
179         Changed = true;
180         MSI->eraseFromParent();
181       } else if (Instruction *I = dyn_cast<Instruction>(MSI->getValue())) {
182         if (I->hasOneUse())
183           Dead.push_back(std::make_pair(I, MSI));
184       }
185     } else if (MemTransferInst *MTI = dyn_cast<MemTransferInst>(U)) {
186       GlobalVariable *MemSrc = dyn_cast<GlobalVariable>(MTI->getSource());
187       if (MemSrc && MemSrc->isConstant()) {
188         Changed = true;
189         MTI->eraseFromParent();
190       } else if (Instruction *I = dyn_cast<Instruction>(MemSrc)) {
191         if (I->hasOneUse())
192           Dead.push_back(std::make_pair(I, MTI));
193       }
194     } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
195       if (CE->use_empty()) {
196         CE->destroyConstant();
197         Changed = true;
198       }
199     } else if (Constant *C = dyn_cast<Constant>(U)) {
200       if (isSafeToDestroyConstant(C)) {
201         C->destroyConstant();
202         // This could have invalidated UI, start over from scratch.
203         Dead.clear();
204         CleanupPointerRootUsers(GV, TLI);
205         return true;
206       }
207     }
208   }
209 
210   for (int i = 0, e = Dead.size(); i != e; ++i) {
211     if (IsSafeComputationToRemove(Dead[i].first, TLI)) {
212       Dead[i].second->eraseFromParent();
213       Instruction *I = Dead[i].first;
214       do {
215         if (isAllocationFn(I, TLI))
216           break;
217         Instruction *J = dyn_cast<Instruction>(I->getOperand(0));
218         if (!J)
219           break;
220         I->eraseFromParent();
221         I = J;
222       } while (1);
223       I->eraseFromParent();
224     }
225   }
226 
227   return Changed;
228 }
229 
230 /// We just marked GV constant.  Loop over all users of the global, cleaning up
231 /// the obvious ones.  This is largely just a quick scan over the use list to
232 /// clean up the easy and obvious cruft.  This returns true if it made a change.
233 static bool CleanupConstantGlobalUsers(Value *V, Constant *Init,
234                                        const DataLayout &DL,
235                                        TargetLibraryInfo *TLI) {
236   bool Changed = false;
237   // Note that we need to use a weak value handle for the worklist items. When
238   // we delete a constant array, we may also be holding pointer to one of its
239   // elements (or an element of one of its elements if we're dealing with an
240   // array of arrays) in the worklist.
241   SmallVector<WeakVH, 8> WorkList(V->user_begin(), V->user_end());
242   while (!WorkList.empty()) {
243     Value *UV = WorkList.pop_back_val();
244     if (!UV)
245       continue;
246 
247     User *U = cast<User>(UV);
248 
249     if (LoadInst *LI = dyn_cast<LoadInst>(U)) {
250       if (Init) {
251         // Replace the load with the initializer.
252         LI->replaceAllUsesWith(Init);
253         LI->eraseFromParent();
254         Changed = true;
255       }
256     } else if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
257       // Store must be unreachable or storing Init into the global.
258       SI->eraseFromParent();
259       Changed = true;
260     } else if (ConstantExpr *CE = dyn_cast<ConstantExpr>(U)) {
261       if (CE->getOpcode() == Instruction::GetElementPtr) {
262         Constant *SubInit = nullptr;
263         if (Init)
264           SubInit = ConstantFoldLoadThroughGEPConstantExpr(Init, CE);
265         Changed |= CleanupConstantGlobalUsers(CE, SubInit, DL, TLI);
266       } else if ((CE->getOpcode() == Instruction::BitCast &&
267                   CE->getType()->isPointerTy()) ||
268                  CE->getOpcode() == Instruction::AddrSpaceCast) {
269         // Pointer cast, delete any stores and memsets to the global.
270         Changed |= CleanupConstantGlobalUsers(CE, nullptr, DL, TLI);
271       }
272 
273       if (CE->use_empty()) {
274         CE->destroyConstant();
275         Changed = true;
276       }
277     } else if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(U)) {
278       // Do not transform "gepinst (gep constexpr (GV))" here, because forming
279       // "gepconstexpr (gep constexpr (GV))" will cause the two gep's to fold
280       // and will invalidate our notion of what Init is.
281       Constant *SubInit = nullptr;
282       if (!isa<ConstantExpr>(GEP->getOperand(0))) {
283         ConstantExpr *CE = dyn_cast_or_null<ConstantExpr>(
284             ConstantFoldInstruction(GEP, DL, TLI));
285         if (Init && CE && CE->getOpcode() == Instruction::GetElementPtr)
286           SubInit = ConstantFoldLoadThroughGEPConstantExpr(Init, CE);
287 
288         // If the initializer is an all-null value and we have an inbounds GEP,
289         // we already know what the result of any load from that GEP is.
290         // TODO: Handle splats.
291         if (Init && isa<ConstantAggregateZero>(Init) && GEP->isInBounds())
292           SubInit = Constant::getNullValue(GEP->getResultElementType());
293       }
294       Changed |= CleanupConstantGlobalUsers(GEP, SubInit, DL, TLI);
295 
296       if (GEP->use_empty()) {
297         GEP->eraseFromParent();
298         Changed = true;
299       }
300     } else if (MemIntrinsic *MI = dyn_cast<MemIntrinsic>(U)) { // memset/cpy/mv
301       if (MI->getRawDest() == V) {
302         MI->eraseFromParent();
303         Changed = true;
304       }
305 
306     } else if (Constant *C = dyn_cast<Constant>(U)) {
307       // If we have a chain of dead constantexprs or other things dangling from
308       // us, and if they are all dead, nuke them without remorse.
309       if (isSafeToDestroyConstant(C)) {
310         C->destroyConstant();
311         CleanupConstantGlobalUsers(V, Init, DL, TLI);
312         return true;
313       }
314     }
315   }
316   return Changed;
317 }
318 
319 /// Return true if the specified instruction is a safe user of a derived
320 /// expression from a global that we want to SROA.
321 static bool isSafeSROAElementUse(Value *V) {
322   // We might have a dead and dangling constant hanging off of here.
323   if (Constant *C = dyn_cast<Constant>(V))
324     return isSafeToDestroyConstant(C);
325 
326   Instruction *I = dyn_cast<Instruction>(V);
327   if (!I) return false;
328 
329   // Loads are ok.
330   if (isa<LoadInst>(I)) return true;
331 
332   // Stores *to* the pointer are ok.
333   if (StoreInst *SI = dyn_cast<StoreInst>(I))
334     return SI->getOperand(0) != V;
335 
336   // Otherwise, it must be a GEP.
337   GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(I);
338   if (!GEPI) return false;
339 
340   if (GEPI->getNumOperands() < 3 || !isa<Constant>(GEPI->getOperand(1)) ||
341       !cast<Constant>(GEPI->getOperand(1))->isNullValue())
342     return false;
343 
344   for (User *U : GEPI->users())
345     if (!isSafeSROAElementUse(U))
346       return false;
347   return true;
348 }
349 
350 
351 /// U is a direct user of the specified global value.  Look at it and its uses
352 /// and decide whether it is safe to SROA this global.
353 static bool IsUserOfGlobalSafeForSRA(User *U, GlobalValue *GV) {
354   // The user of the global must be a GEP Inst or a ConstantExpr GEP.
355   if (!isa<GetElementPtrInst>(U) &&
356       (!isa<ConstantExpr>(U) ||
357        cast<ConstantExpr>(U)->getOpcode() != Instruction::GetElementPtr))
358     return false;
359 
360   // Check to see if this ConstantExpr GEP is SRA'able.  In particular, we
361   // don't like < 3 operand CE's, and we don't like non-constant integer
362   // indices.  This enforces that all uses are 'gep GV, 0, C, ...' for some
363   // value of C.
364   if (U->getNumOperands() < 3 || !isa<Constant>(U->getOperand(1)) ||
365       !cast<Constant>(U->getOperand(1))->isNullValue() ||
366       !isa<ConstantInt>(U->getOperand(2)))
367     return false;
368 
369   gep_type_iterator GEPI = gep_type_begin(U), E = gep_type_end(U);
370   ++GEPI;  // Skip over the pointer index.
371 
372   // If this is a use of an array allocation, do a bit more checking for sanity.
373   if (ArrayType *AT = dyn_cast<ArrayType>(*GEPI)) {
374     uint64_t NumElements = AT->getNumElements();
375     ConstantInt *Idx = cast<ConstantInt>(U->getOperand(2));
376 
377     // Check to make sure that index falls within the array.  If not,
378     // something funny is going on, so we won't do the optimization.
379     //
380     if (Idx->getZExtValue() >= NumElements)
381       return false;
382 
383     // We cannot scalar repl this level of the array unless any array
384     // sub-indices are in-range constants.  In particular, consider:
385     // A[0][i].  We cannot know that the user isn't doing invalid things like
386     // allowing i to index an out-of-range subscript that accesses A[1].
387     //
388     // Scalar replacing *just* the outer index of the array is probably not
389     // going to be a win anyway, so just give up.
390     for (++GEPI; // Skip array index.
391          GEPI != E;
392          ++GEPI) {
393       uint64_t NumElements;
394       if (ArrayType *SubArrayTy = dyn_cast<ArrayType>(*GEPI))
395         NumElements = SubArrayTy->getNumElements();
396       else if (VectorType *SubVectorTy = dyn_cast<VectorType>(*GEPI))
397         NumElements = SubVectorTy->getNumElements();
398       else {
399         assert((*GEPI)->isStructTy() &&
400                "Indexed GEP type is not array, vector, or struct!");
401         continue;
402       }
403 
404       ConstantInt *IdxVal = dyn_cast<ConstantInt>(GEPI.getOperand());
405       if (!IdxVal || IdxVal->getZExtValue() >= NumElements)
406         return false;
407     }
408   }
409 
410   for (User *UU : U->users())
411     if (!isSafeSROAElementUse(UU))
412       return false;
413 
414   return true;
415 }
416 
417 /// Look at all uses of the global and decide whether it is safe for us to
418 /// perform this transformation.
419 static bool GlobalUsersSafeToSRA(GlobalValue *GV) {
420   for (User *U : GV->users())
421     if (!IsUserOfGlobalSafeForSRA(U, GV))
422       return false;
423 
424   return true;
425 }
426 
427 
428 /// Perform scalar replacement of aggregates on the specified global variable.
429 /// This opens the door for other optimizations by exposing the behavior of the
430 /// program in a more fine-grained way.  We have determined that this
431 /// transformation is safe already.  We return the first global variable we
432 /// insert so that the caller can reprocess it.
433 static GlobalVariable *SRAGlobal(GlobalVariable *GV, const DataLayout &DL) {
434   // Make sure this global only has simple uses that we can SRA.
435   if (!GlobalUsersSafeToSRA(GV))
436     return nullptr;
437 
438   assert(GV->hasLocalLinkage());
439   Constant *Init = GV->getInitializer();
440   Type *Ty = Init->getType();
441 
442   std::vector<GlobalVariable*> NewGlobals;
443   Module::GlobalListType &Globals = GV->getParent()->getGlobalList();
444 
445   // Get the alignment of the global, either explicit or target-specific.
446   unsigned StartAlignment = GV->getAlignment();
447   if (StartAlignment == 0)
448     StartAlignment = DL.getABITypeAlignment(GV->getType());
449 
450   if (StructType *STy = dyn_cast<StructType>(Ty)) {
451     NewGlobals.reserve(STy->getNumElements());
452     const StructLayout &Layout = *DL.getStructLayout(STy);
453     for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i) {
454       Constant *In = Init->getAggregateElement(i);
455       assert(In && "Couldn't get element of initializer?");
456       GlobalVariable *NGV = new GlobalVariable(STy->getElementType(i), false,
457                                                GlobalVariable::InternalLinkage,
458                                                In, GV->getName()+"."+Twine(i),
459                                                GV->getThreadLocalMode(),
460                                               GV->getType()->getAddressSpace());
461       NGV->setExternallyInitialized(GV->isExternallyInitialized());
462       NGV->copyAttributesFrom(GV);
463       Globals.push_back(NGV);
464       NewGlobals.push_back(NGV);
465 
466       // Calculate the known alignment of the field.  If the original aggregate
467       // had 256 byte alignment for example, something might depend on that:
468       // propagate info to each field.
469       uint64_t FieldOffset = Layout.getElementOffset(i);
470       unsigned NewAlign = (unsigned)MinAlign(StartAlignment, FieldOffset);
471       if (NewAlign > DL.getABITypeAlignment(STy->getElementType(i)))
472         NGV->setAlignment(NewAlign);
473     }
474   } else if (SequentialType *STy = dyn_cast<SequentialType>(Ty)) {
475     unsigned NumElements = 0;
476     if (ArrayType *ATy = dyn_cast<ArrayType>(STy))
477       NumElements = ATy->getNumElements();
478     else
479       NumElements = cast<VectorType>(STy)->getNumElements();
480 
481     if (NumElements > 16 && GV->hasNUsesOrMore(16))
482       return nullptr; // It's not worth it.
483     NewGlobals.reserve(NumElements);
484 
485     uint64_t EltSize = DL.getTypeAllocSize(STy->getElementType());
486     unsigned EltAlign = DL.getABITypeAlignment(STy->getElementType());
487     for (unsigned i = 0, e = NumElements; i != e; ++i) {
488       Constant *In = Init->getAggregateElement(i);
489       assert(In && "Couldn't get element of initializer?");
490 
491       GlobalVariable *NGV = new GlobalVariable(STy->getElementType(), false,
492                                                GlobalVariable::InternalLinkage,
493                                                In, GV->getName()+"."+Twine(i),
494                                                GV->getThreadLocalMode(),
495                                               GV->getType()->getAddressSpace());
496       NGV->setExternallyInitialized(GV->isExternallyInitialized());
497       NGV->copyAttributesFrom(GV);
498       Globals.push_back(NGV);
499       NewGlobals.push_back(NGV);
500 
501       // Calculate the known alignment of the field.  If the original aggregate
502       // had 256 byte alignment for example, something might depend on that:
503       // propagate info to each field.
504       unsigned NewAlign = (unsigned)MinAlign(StartAlignment, EltSize*i);
505       if (NewAlign > EltAlign)
506         NGV->setAlignment(NewAlign);
507     }
508   }
509 
510   if (NewGlobals.empty())
511     return nullptr;
512 
513   DEBUG(dbgs() << "PERFORMING GLOBAL SRA ON: " << *GV << "\n");
514 
515   Constant *NullInt =Constant::getNullValue(Type::getInt32Ty(GV->getContext()));
516 
517   // Loop over all of the uses of the global, replacing the constantexpr geps,
518   // with smaller constantexpr geps or direct references.
519   while (!GV->use_empty()) {
520     User *GEP = GV->user_back();
521     assert(((isa<ConstantExpr>(GEP) &&
522              cast<ConstantExpr>(GEP)->getOpcode()==Instruction::GetElementPtr)||
523             isa<GetElementPtrInst>(GEP)) && "NonGEP CE's are not SRAable!");
524 
525     // Ignore the 1th operand, which has to be zero or else the program is quite
526     // broken (undefined).  Get the 2nd operand, which is the structure or array
527     // index.
528     unsigned Val = cast<ConstantInt>(GEP->getOperand(2))->getZExtValue();
529     if (Val >= NewGlobals.size()) Val = 0; // Out of bound array access.
530 
531     Value *NewPtr = NewGlobals[Val];
532     Type *NewTy = NewGlobals[Val]->getValueType();
533 
534     // Form a shorter GEP if needed.
535     if (GEP->getNumOperands() > 3) {
536       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GEP)) {
537         SmallVector<Constant*, 8> Idxs;
538         Idxs.push_back(NullInt);
539         for (unsigned i = 3, e = CE->getNumOperands(); i != e; ++i)
540           Idxs.push_back(CE->getOperand(i));
541         NewPtr =
542             ConstantExpr::getGetElementPtr(NewTy, cast<Constant>(NewPtr), Idxs);
543       } else {
544         GetElementPtrInst *GEPI = cast<GetElementPtrInst>(GEP);
545         SmallVector<Value*, 8> Idxs;
546         Idxs.push_back(NullInt);
547         for (unsigned i = 3, e = GEPI->getNumOperands(); i != e; ++i)
548           Idxs.push_back(GEPI->getOperand(i));
549         NewPtr = GetElementPtrInst::Create(
550             NewTy, NewPtr, Idxs, GEPI->getName() + "." + Twine(Val), GEPI);
551       }
552     }
553     GEP->replaceAllUsesWith(NewPtr);
554 
555     if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(GEP))
556       GEPI->eraseFromParent();
557     else
558       cast<ConstantExpr>(GEP)->destroyConstant();
559   }
560 
561   // Delete the old global, now that it is dead.
562   Globals.erase(GV);
563   ++NumSRA;
564 
565   // Loop over the new globals array deleting any globals that are obviously
566   // dead.  This can arise due to scalarization of a structure or an array that
567   // has elements that are dead.
568   unsigned FirstGlobal = 0;
569   for (unsigned i = 0, e = NewGlobals.size(); i != e; ++i)
570     if (NewGlobals[i]->use_empty()) {
571       Globals.erase(NewGlobals[i]);
572       if (FirstGlobal == i) ++FirstGlobal;
573     }
574 
575   return FirstGlobal != NewGlobals.size() ? NewGlobals[FirstGlobal] : nullptr;
576 }
577 
578 /// Return true if all users of the specified value will trap if the value is
579 /// dynamically null.  PHIs keeps track of any phi nodes we've seen to avoid
580 /// reprocessing them.
581 static bool AllUsesOfValueWillTrapIfNull(const Value *V,
582                                         SmallPtrSetImpl<const PHINode*> &PHIs) {
583   for (const User *U : V->users())
584     if (isa<LoadInst>(U)) {
585       // Will trap.
586     } else if (const StoreInst *SI = dyn_cast<StoreInst>(U)) {
587       if (SI->getOperand(0) == V) {
588         //cerr << "NONTRAPPING USE: " << *U;
589         return false;  // Storing the value.
590       }
591     } else if (const CallInst *CI = dyn_cast<CallInst>(U)) {
592       if (CI->getCalledValue() != V) {
593         //cerr << "NONTRAPPING USE: " << *U;
594         return false;  // Not calling the ptr
595       }
596     } else if (const InvokeInst *II = dyn_cast<InvokeInst>(U)) {
597       if (II->getCalledValue() != V) {
598         //cerr << "NONTRAPPING USE: " << *U;
599         return false;  // Not calling the ptr
600       }
601     } else if (const BitCastInst *CI = dyn_cast<BitCastInst>(U)) {
602       if (!AllUsesOfValueWillTrapIfNull(CI, PHIs)) return false;
603     } else if (const GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(U)) {
604       if (!AllUsesOfValueWillTrapIfNull(GEPI, PHIs)) return false;
605     } else if (const PHINode *PN = dyn_cast<PHINode>(U)) {
606       // If we've already seen this phi node, ignore it, it has already been
607       // checked.
608       if (PHIs.insert(PN).second && !AllUsesOfValueWillTrapIfNull(PN, PHIs))
609         return false;
610     } else if (isa<ICmpInst>(U) &&
611                isa<ConstantPointerNull>(U->getOperand(1))) {
612       // Ignore icmp X, null
613     } else {
614       //cerr << "NONTRAPPING USE: " << *U;
615       return false;
616     }
617 
618   return true;
619 }
620 
621 /// Return true if all uses of any loads from GV will trap if the loaded value
622 /// is null.  Note that this also permits comparisons of the loaded value
623 /// against null, as a special case.
624 static bool AllUsesOfLoadedValueWillTrapIfNull(const GlobalVariable *GV) {
625   for (const User *U : GV->users())
626     if (const LoadInst *LI = dyn_cast<LoadInst>(U)) {
627       SmallPtrSet<const PHINode*, 8> PHIs;
628       if (!AllUsesOfValueWillTrapIfNull(LI, PHIs))
629         return false;
630     } else if (isa<StoreInst>(U)) {
631       // Ignore stores to the global.
632     } else {
633       // We don't know or understand this user, bail out.
634       //cerr << "UNKNOWN USER OF GLOBAL!: " << *U;
635       return false;
636     }
637   return true;
638 }
639 
640 static bool OptimizeAwayTrappingUsesOfValue(Value *V, Constant *NewV) {
641   bool Changed = false;
642   for (auto UI = V->user_begin(), E = V->user_end(); UI != E; ) {
643     Instruction *I = cast<Instruction>(*UI++);
644     if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
645       LI->setOperand(0, NewV);
646       Changed = true;
647     } else if (StoreInst *SI = dyn_cast<StoreInst>(I)) {
648       if (SI->getOperand(1) == V) {
649         SI->setOperand(1, NewV);
650         Changed = true;
651       }
652     } else if (isa<CallInst>(I) || isa<InvokeInst>(I)) {
653       CallSite CS(I);
654       if (CS.getCalledValue() == V) {
655         // Calling through the pointer!  Turn into a direct call, but be careful
656         // that the pointer is not also being passed as an argument.
657         CS.setCalledFunction(NewV);
658         Changed = true;
659         bool PassedAsArg = false;
660         for (unsigned i = 0, e = CS.arg_size(); i != e; ++i)
661           if (CS.getArgument(i) == V) {
662             PassedAsArg = true;
663             CS.setArgument(i, NewV);
664           }
665 
666         if (PassedAsArg) {
667           // Being passed as an argument also.  Be careful to not invalidate UI!
668           UI = V->user_begin();
669         }
670       }
671     } else if (CastInst *CI = dyn_cast<CastInst>(I)) {
672       Changed |= OptimizeAwayTrappingUsesOfValue(CI,
673                                 ConstantExpr::getCast(CI->getOpcode(),
674                                                       NewV, CI->getType()));
675       if (CI->use_empty()) {
676         Changed = true;
677         CI->eraseFromParent();
678       }
679     } else if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(I)) {
680       // Should handle GEP here.
681       SmallVector<Constant*, 8> Idxs;
682       Idxs.reserve(GEPI->getNumOperands()-1);
683       for (User::op_iterator i = GEPI->op_begin() + 1, e = GEPI->op_end();
684            i != e; ++i)
685         if (Constant *C = dyn_cast<Constant>(*i))
686           Idxs.push_back(C);
687         else
688           break;
689       if (Idxs.size() == GEPI->getNumOperands()-1)
690         Changed |= OptimizeAwayTrappingUsesOfValue(
691             GEPI, ConstantExpr::getGetElementPtr(nullptr, NewV, Idxs));
692       if (GEPI->use_empty()) {
693         Changed = true;
694         GEPI->eraseFromParent();
695       }
696     }
697   }
698 
699   return Changed;
700 }
701 
702 
703 /// The specified global has only one non-null value stored into it.  If there
704 /// are uses of the loaded value that would trap if the loaded value is
705 /// dynamically null, then we know that they cannot be reachable with a null
706 /// optimize away the load.
707 static bool OptimizeAwayTrappingUsesOfLoads(GlobalVariable *GV, Constant *LV,
708                                             const DataLayout &DL,
709                                             TargetLibraryInfo *TLI) {
710   bool Changed = false;
711 
712   // Keep track of whether we are able to remove all the uses of the global
713   // other than the store that defines it.
714   bool AllNonStoreUsesGone = true;
715 
716   // Replace all uses of loads with uses of uses of the stored value.
717   for (Value::user_iterator GUI = GV->user_begin(), E = GV->user_end(); GUI != E;){
718     User *GlobalUser = *GUI++;
719     if (LoadInst *LI = dyn_cast<LoadInst>(GlobalUser)) {
720       Changed |= OptimizeAwayTrappingUsesOfValue(LI, LV);
721       // If we were able to delete all uses of the loads
722       if (LI->use_empty()) {
723         LI->eraseFromParent();
724         Changed = true;
725       } else {
726         AllNonStoreUsesGone = false;
727       }
728     } else if (isa<StoreInst>(GlobalUser)) {
729       // Ignore the store that stores "LV" to the global.
730       assert(GlobalUser->getOperand(1) == GV &&
731              "Must be storing *to* the global");
732     } else {
733       AllNonStoreUsesGone = false;
734 
735       // If we get here we could have other crazy uses that are transitively
736       // loaded.
737       assert((isa<PHINode>(GlobalUser) || isa<SelectInst>(GlobalUser) ||
738               isa<ConstantExpr>(GlobalUser) || isa<CmpInst>(GlobalUser) ||
739               isa<BitCastInst>(GlobalUser) ||
740               isa<GetElementPtrInst>(GlobalUser)) &&
741              "Only expect load and stores!");
742     }
743   }
744 
745   if (Changed) {
746     DEBUG(dbgs() << "OPTIMIZED LOADS FROM STORED ONCE POINTER: " << *GV << "\n");
747     ++NumGlobUses;
748   }
749 
750   // If we nuked all of the loads, then none of the stores are needed either,
751   // nor is the global.
752   if (AllNonStoreUsesGone) {
753     if (isLeakCheckerRoot(GV)) {
754       Changed |= CleanupPointerRootUsers(GV, TLI);
755     } else {
756       Changed = true;
757       CleanupConstantGlobalUsers(GV, nullptr, DL, TLI);
758     }
759     if (GV->use_empty()) {
760       DEBUG(dbgs() << "  *** GLOBAL NOW DEAD!\n");
761       Changed = true;
762       GV->eraseFromParent();
763       ++NumDeleted;
764     }
765   }
766   return Changed;
767 }
768 
769 /// Walk the use list of V, constant folding all of the instructions that are
770 /// foldable.
771 static void ConstantPropUsersOf(Value *V, const DataLayout &DL,
772                                 TargetLibraryInfo *TLI) {
773   for (Value::user_iterator UI = V->user_begin(), E = V->user_end(); UI != E; )
774     if (Instruction *I = dyn_cast<Instruction>(*UI++))
775       if (Constant *NewC = ConstantFoldInstruction(I, DL, TLI)) {
776         I->replaceAllUsesWith(NewC);
777 
778         // Advance UI to the next non-I use to avoid invalidating it!
779         // Instructions could multiply use V.
780         while (UI != E && *UI == I)
781           ++UI;
782         I->eraseFromParent();
783       }
784 }
785 
786 /// This function takes the specified global variable, and transforms the
787 /// program as if it always contained the result of the specified malloc.
788 /// Because it is always the result of the specified malloc, there is no reason
789 /// to actually DO the malloc.  Instead, turn the malloc into a global, and any
790 /// loads of GV as uses of the new global.
791 static GlobalVariable *
792 OptimizeGlobalAddressOfMalloc(GlobalVariable *GV, CallInst *CI, Type *AllocTy,
793                               ConstantInt *NElements, const DataLayout &DL,
794                               TargetLibraryInfo *TLI) {
795   DEBUG(errs() << "PROMOTING GLOBAL: " << *GV << "  CALL = " << *CI << '\n');
796 
797   Type *GlobalType;
798   if (NElements->getZExtValue() == 1)
799     GlobalType = AllocTy;
800   else
801     // If we have an array allocation, the global variable is of an array.
802     GlobalType = ArrayType::get(AllocTy, NElements->getZExtValue());
803 
804   // Create the new global variable.  The contents of the malloc'd memory is
805   // undefined, so initialize with an undef value.
806   GlobalVariable *NewGV = new GlobalVariable(
807       *GV->getParent(), GlobalType, false, GlobalValue::InternalLinkage,
808       UndefValue::get(GlobalType), GV->getName() + ".body", nullptr,
809       GV->getThreadLocalMode());
810 
811   // If there are bitcast users of the malloc (which is typical, usually we have
812   // a malloc + bitcast) then replace them with uses of the new global.  Update
813   // other users to use the global as well.
814   BitCastInst *TheBC = nullptr;
815   while (!CI->use_empty()) {
816     Instruction *User = cast<Instruction>(CI->user_back());
817     if (BitCastInst *BCI = dyn_cast<BitCastInst>(User)) {
818       if (BCI->getType() == NewGV->getType()) {
819         BCI->replaceAllUsesWith(NewGV);
820         BCI->eraseFromParent();
821       } else {
822         BCI->setOperand(0, NewGV);
823       }
824     } else {
825       if (!TheBC)
826         TheBC = new BitCastInst(NewGV, CI->getType(), "newgv", CI);
827       User->replaceUsesOfWith(CI, TheBC);
828     }
829   }
830 
831   Constant *RepValue = NewGV;
832   if (NewGV->getType() != GV->getValueType())
833     RepValue = ConstantExpr::getBitCast(RepValue, GV->getValueType());
834 
835   // If there is a comparison against null, we will insert a global bool to
836   // keep track of whether the global was initialized yet or not.
837   GlobalVariable *InitBool =
838     new GlobalVariable(Type::getInt1Ty(GV->getContext()), false,
839                        GlobalValue::InternalLinkage,
840                        ConstantInt::getFalse(GV->getContext()),
841                        GV->getName()+".init", GV->getThreadLocalMode());
842   bool InitBoolUsed = false;
843 
844   // Loop over all uses of GV, processing them in turn.
845   while (!GV->use_empty()) {
846     if (StoreInst *SI = dyn_cast<StoreInst>(GV->user_back())) {
847       // The global is initialized when the store to it occurs.
848       new StoreInst(ConstantInt::getTrue(GV->getContext()), InitBool, false, 0,
849                     SI->getOrdering(), SI->getSynchScope(), SI);
850       SI->eraseFromParent();
851       continue;
852     }
853 
854     LoadInst *LI = cast<LoadInst>(GV->user_back());
855     while (!LI->use_empty()) {
856       Use &LoadUse = *LI->use_begin();
857       ICmpInst *ICI = dyn_cast<ICmpInst>(LoadUse.getUser());
858       if (!ICI) {
859         LoadUse = RepValue;
860         continue;
861       }
862 
863       // Replace the cmp X, 0 with a use of the bool value.
864       // Sink the load to where the compare was, if atomic rules allow us to.
865       Value *LV = new LoadInst(InitBool, InitBool->getName()+".val", false, 0,
866                                LI->getOrdering(), LI->getSynchScope(),
867                                LI->isUnordered() ? (Instruction*)ICI : LI);
868       InitBoolUsed = true;
869       switch (ICI->getPredicate()) {
870       default: llvm_unreachable("Unknown ICmp Predicate!");
871       case ICmpInst::ICMP_ULT:
872       case ICmpInst::ICMP_SLT:   // X < null -> always false
873         LV = ConstantInt::getFalse(GV->getContext());
874         break;
875       case ICmpInst::ICMP_ULE:
876       case ICmpInst::ICMP_SLE:
877       case ICmpInst::ICMP_EQ:
878         LV = BinaryOperator::CreateNot(LV, "notinit", ICI);
879         break;
880       case ICmpInst::ICMP_NE:
881       case ICmpInst::ICMP_UGE:
882       case ICmpInst::ICMP_SGE:
883       case ICmpInst::ICMP_UGT:
884       case ICmpInst::ICMP_SGT:
885         break;  // no change.
886       }
887       ICI->replaceAllUsesWith(LV);
888       ICI->eraseFromParent();
889     }
890     LI->eraseFromParent();
891   }
892 
893   // If the initialization boolean was used, insert it, otherwise delete it.
894   if (!InitBoolUsed) {
895     while (!InitBool->use_empty())  // Delete initializations
896       cast<StoreInst>(InitBool->user_back())->eraseFromParent();
897     delete InitBool;
898   } else
899     GV->getParent()->getGlobalList().insert(GV->getIterator(), InitBool);
900 
901   // Now the GV is dead, nuke it and the malloc..
902   GV->eraseFromParent();
903   CI->eraseFromParent();
904 
905   // To further other optimizations, loop over all users of NewGV and try to
906   // constant prop them.  This will promote GEP instructions with constant
907   // indices into GEP constant-exprs, which will allow global-opt to hack on it.
908   ConstantPropUsersOf(NewGV, DL, TLI);
909   if (RepValue != NewGV)
910     ConstantPropUsersOf(RepValue, DL, TLI);
911 
912   return NewGV;
913 }
914 
915 /// Scan the use-list of V checking to make sure that there are no complex uses
916 /// of V.  We permit simple things like dereferencing the pointer, but not
917 /// storing through the address, unless it is to the specified global.
918 static bool ValueIsOnlyUsedLocallyOrStoredToOneGlobal(const Instruction *V,
919                                                       const GlobalVariable *GV,
920                                         SmallPtrSetImpl<const PHINode*> &PHIs) {
921   for (const User *U : V->users()) {
922     const Instruction *Inst = cast<Instruction>(U);
923 
924     if (isa<LoadInst>(Inst) || isa<CmpInst>(Inst)) {
925       continue; // Fine, ignore.
926     }
927 
928     if (const StoreInst *SI = dyn_cast<StoreInst>(Inst)) {
929       if (SI->getOperand(0) == V && SI->getOperand(1) != GV)
930         return false;  // Storing the pointer itself... bad.
931       continue; // Otherwise, storing through it, or storing into GV... fine.
932     }
933 
934     // Must index into the array and into the struct.
935     if (isa<GetElementPtrInst>(Inst) && Inst->getNumOperands() >= 3) {
936       if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(Inst, GV, PHIs))
937         return false;
938       continue;
939     }
940 
941     if (const PHINode *PN = dyn_cast<PHINode>(Inst)) {
942       // PHIs are ok if all uses are ok.  Don't infinitely recurse through PHI
943       // cycles.
944       if (PHIs.insert(PN).second)
945         if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(PN, GV, PHIs))
946           return false;
947       continue;
948     }
949 
950     if (const BitCastInst *BCI = dyn_cast<BitCastInst>(Inst)) {
951       if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(BCI, GV, PHIs))
952         return false;
953       continue;
954     }
955 
956     return false;
957   }
958   return true;
959 }
960 
961 /// The Alloc pointer is stored into GV somewhere.  Transform all uses of the
962 /// allocation into loads from the global and uses of the resultant pointer.
963 /// Further, delete the store into GV.  This assumes that these value pass the
964 /// 'ValueIsOnlyUsedLocallyOrStoredToOneGlobal' predicate.
965 static void ReplaceUsesOfMallocWithGlobal(Instruction *Alloc,
966                                           GlobalVariable *GV) {
967   while (!Alloc->use_empty()) {
968     Instruction *U = cast<Instruction>(*Alloc->user_begin());
969     Instruction *InsertPt = U;
970     if (StoreInst *SI = dyn_cast<StoreInst>(U)) {
971       // If this is the store of the allocation into the global, remove it.
972       if (SI->getOperand(1) == GV) {
973         SI->eraseFromParent();
974         continue;
975       }
976     } else if (PHINode *PN = dyn_cast<PHINode>(U)) {
977       // Insert the load in the corresponding predecessor, not right before the
978       // PHI.
979       InsertPt = PN->getIncomingBlock(*Alloc->use_begin())->getTerminator();
980     } else if (isa<BitCastInst>(U)) {
981       // Must be bitcast between the malloc and store to initialize the global.
982       ReplaceUsesOfMallocWithGlobal(U, GV);
983       U->eraseFromParent();
984       continue;
985     } else if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(U)) {
986       // If this is a "GEP bitcast" and the user is a store to the global, then
987       // just process it as a bitcast.
988       if (GEPI->hasAllZeroIndices() && GEPI->hasOneUse())
989         if (StoreInst *SI = dyn_cast<StoreInst>(GEPI->user_back()))
990           if (SI->getOperand(1) == GV) {
991             // Must be bitcast GEP between the malloc and store to initialize
992             // the global.
993             ReplaceUsesOfMallocWithGlobal(GEPI, GV);
994             GEPI->eraseFromParent();
995             continue;
996           }
997     }
998 
999     // Insert a load from the global, and use it instead of the malloc.
1000     Value *NL = new LoadInst(GV, GV->getName()+".val", InsertPt);
1001     U->replaceUsesOfWith(Alloc, NL);
1002   }
1003 }
1004 
1005 /// Verify that all uses of V (a load, or a phi of a load) are simple enough to
1006 /// perform heap SRA on.  This permits GEP's that index through the array and
1007 /// struct field, icmps of null, and PHIs.
1008 static bool LoadUsesSimpleEnoughForHeapSRA(const Value *V,
1009                         SmallPtrSetImpl<const PHINode*> &LoadUsingPHIs,
1010                         SmallPtrSetImpl<const PHINode*> &LoadUsingPHIsPerLoad) {
1011   // We permit two users of the load: setcc comparing against the null
1012   // pointer, and a getelementptr of a specific form.
1013   for (const User *U : V->users()) {
1014     const Instruction *UI = cast<Instruction>(U);
1015 
1016     // Comparison against null is ok.
1017     if (const ICmpInst *ICI = dyn_cast<ICmpInst>(UI)) {
1018       if (!isa<ConstantPointerNull>(ICI->getOperand(1)))
1019         return false;
1020       continue;
1021     }
1022 
1023     // getelementptr is also ok, but only a simple form.
1024     if (const GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(UI)) {
1025       // Must index into the array and into the struct.
1026       if (GEPI->getNumOperands() < 3)
1027         return false;
1028 
1029       // Otherwise the GEP is ok.
1030       continue;
1031     }
1032 
1033     if (const PHINode *PN = dyn_cast<PHINode>(UI)) {
1034       if (!LoadUsingPHIsPerLoad.insert(PN).second)
1035         // This means some phi nodes are dependent on each other.
1036         // Avoid infinite looping!
1037         return false;
1038       if (!LoadUsingPHIs.insert(PN).second)
1039         // If we have already analyzed this PHI, then it is safe.
1040         continue;
1041 
1042       // Make sure all uses of the PHI are simple enough to transform.
1043       if (!LoadUsesSimpleEnoughForHeapSRA(PN,
1044                                           LoadUsingPHIs, LoadUsingPHIsPerLoad))
1045         return false;
1046 
1047       continue;
1048     }
1049 
1050     // Otherwise we don't know what this is, not ok.
1051     return false;
1052   }
1053 
1054   return true;
1055 }
1056 
1057 
1058 /// If all users of values loaded from GV are simple enough to perform HeapSRA,
1059 /// return true.
1060 static bool AllGlobalLoadUsesSimpleEnoughForHeapSRA(const GlobalVariable *GV,
1061                                                     Instruction *StoredVal) {
1062   SmallPtrSet<const PHINode*, 32> LoadUsingPHIs;
1063   SmallPtrSet<const PHINode*, 32> LoadUsingPHIsPerLoad;
1064   for (const User *U : GV->users())
1065     if (const LoadInst *LI = dyn_cast<LoadInst>(U)) {
1066       if (!LoadUsesSimpleEnoughForHeapSRA(LI, LoadUsingPHIs,
1067                                           LoadUsingPHIsPerLoad))
1068         return false;
1069       LoadUsingPHIsPerLoad.clear();
1070     }
1071 
1072   // If we reach here, we know that all uses of the loads and transitive uses
1073   // (through PHI nodes) are simple enough to transform.  However, we don't know
1074   // that all inputs the to the PHI nodes are in the same equivalence sets.
1075   // Check to verify that all operands of the PHIs are either PHIS that can be
1076   // transformed, loads from GV, or MI itself.
1077   for (const PHINode *PN : LoadUsingPHIs) {
1078     for (unsigned op = 0, e = PN->getNumIncomingValues(); op != e; ++op) {
1079       Value *InVal = PN->getIncomingValue(op);
1080 
1081       // PHI of the stored value itself is ok.
1082       if (InVal == StoredVal) continue;
1083 
1084       if (const PHINode *InPN = dyn_cast<PHINode>(InVal)) {
1085         // One of the PHIs in our set is (optimistically) ok.
1086         if (LoadUsingPHIs.count(InPN))
1087           continue;
1088         return false;
1089       }
1090 
1091       // Load from GV is ok.
1092       if (const LoadInst *LI = dyn_cast<LoadInst>(InVal))
1093         if (LI->getOperand(0) == GV)
1094           continue;
1095 
1096       // UNDEF? NULL?
1097 
1098       // Anything else is rejected.
1099       return false;
1100     }
1101   }
1102 
1103   return true;
1104 }
1105 
1106 static Value *GetHeapSROAValue(Value *V, unsigned FieldNo,
1107                DenseMap<Value*, std::vector<Value*> > &InsertedScalarizedValues,
1108                    std::vector<std::pair<PHINode*, unsigned> > &PHIsToRewrite) {
1109   std::vector<Value*> &FieldVals = InsertedScalarizedValues[V];
1110 
1111   if (FieldNo >= FieldVals.size())
1112     FieldVals.resize(FieldNo+1);
1113 
1114   // If we already have this value, just reuse the previously scalarized
1115   // version.
1116   if (Value *FieldVal = FieldVals[FieldNo])
1117     return FieldVal;
1118 
1119   // Depending on what instruction this is, we have several cases.
1120   Value *Result;
1121   if (LoadInst *LI = dyn_cast<LoadInst>(V)) {
1122     // This is a scalarized version of the load from the global.  Just create
1123     // a new Load of the scalarized global.
1124     Result = new LoadInst(GetHeapSROAValue(LI->getOperand(0), FieldNo,
1125                                            InsertedScalarizedValues,
1126                                            PHIsToRewrite),
1127                           LI->getName()+".f"+Twine(FieldNo), LI);
1128   } else {
1129     PHINode *PN = cast<PHINode>(V);
1130     // PN's type is pointer to struct.  Make a new PHI of pointer to struct
1131     // field.
1132 
1133     PointerType *PTy = cast<PointerType>(PN->getType());
1134     StructType *ST = cast<StructType>(PTy->getElementType());
1135 
1136     unsigned AS = PTy->getAddressSpace();
1137     PHINode *NewPN =
1138       PHINode::Create(PointerType::get(ST->getElementType(FieldNo), AS),
1139                      PN->getNumIncomingValues(),
1140                      PN->getName()+".f"+Twine(FieldNo), PN);
1141     Result = NewPN;
1142     PHIsToRewrite.push_back(std::make_pair(PN, FieldNo));
1143   }
1144 
1145   return FieldVals[FieldNo] = Result;
1146 }
1147 
1148 /// Given a load instruction and a value derived from the load, rewrite the
1149 /// derived value to use the HeapSRoA'd load.
1150 static void RewriteHeapSROALoadUser(Instruction *LoadUser,
1151              DenseMap<Value*, std::vector<Value*> > &InsertedScalarizedValues,
1152                    std::vector<std::pair<PHINode*, unsigned> > &PHIsToRewrite) {
1153   // If this is a comparison against null, handle it.
1154   if (ICmpInst *SCI = dyn_cast<ICmpInst>(LoadUser)) {
1155     assert(isa<ConstantPointerNull>(SCI->getOperand(1)));
1156     // If we have a setcc of the loaded pointer, we can use a setcc of any
1157     // field.
1158     Value *NPtr = GetHeapSROAValue(SCI->getOperand(0), 0,
1159                                    InsertedScalarizedValues, PHIsToRewrite);
1160 
1161     Value *New = new ICmpInst(SCI, SCI->getPredicate(), NPtr,
1162                               Constant::getNullValue(NPtr->getType()),
1163                               SCI->getName());
1164     SCI->replaceAllUsesWith(New);
1165     SCI->eraseFromParent();
1166     return;
1167   }
1168 
1169   // Handle 'getelementptr Ptr, Idx, i32 FieldNo ...'
1170   if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(LoadUser)) {
1171     assert(GEPI->getNumOperands() >= 3 && isa<ConstantInt>(GEPI->getOperand(2))
1172            && "Unexpected GEPI!");
1173 
1174     // Load the pointer for this field.
1175     unsigned FieldNo = cast<ConstantInt>(GEPI->getOperand(2))->getZExtValue();
1176     Value *NewPtr = GetHeapSROAValue(GEPI->getOperand(0), FieldNo,
1177                                      InsertedScalarizedValues, PHIsToRewrite);
1178 
1179     // Create the new GEP idx vector.
1180     SmallVector<Value*, 8> GEPIdx;
1181     GEPIdx.push_back(GEPI->getOperand(1));
1182     GEPIdx.append(GEPI->op_begin()+3, GEPI->op_end());
1183 
1184     Value *NGEPI = GetElementPtrInst::Create(GEPI->getResultElementType(), NewPtr, GEPIdx,
1185                                              GEPI->getName(), GEPI);
1186     GEPI->replaceAllUsesWith(NGEPI);
1187     GEPI->eraseFromParent();
1188     return;
1189   }
1190 
1191   // Recursively transform the users of PHI nodes.  This will lazily create the
1192   // PHIs that are needed for individual elements.  Keep track of what PHIs we
1193   // see in InsertedScalarizedValues so that we don't get infinite loops (very
1194   // antisocial).  If the PHI is already in InsertedScalarizedValues, it has
1195   // already been seen first by another load, so its uses have already been
1196   // processed.
1197   PHINode *PN = cast<PHINode>(LoadUser);
1198   if (!InsertedScalarizedValues.insert(std::make_pair(PN,
1199                                               std::vector<Value*>())).second)
1200     return;
1201 
1202   // If this is the first time we've seen this PHI, recursively process all
1203   // users.
1204   for (auto UI = PN->user_begin(), E = PN->user_end(); UI != E;) {
1205     Instruction *User = cast<Instruction>(*UI++);
1206     RewriteHeapSROALoadUser(User, InsertedScalarizedValues, PHIsToRewrite);
1207   }
1208 }
1209 
1210 /// We are performing Heap SRoA on a global.  Ptr is a value loaded from the
1211 /// global.  Eliminate all uses of Ptr, making them use FieldGlobals instead.
1212 /// All uses of loaded values satisfy AllGlobalLoadUsesSimpleEnoughForHeapSRA.
1213 static void RewriteUsesOfLoadForHeapSRoA(LoadInst *Load,
1214                DenseMap<Value*, std::vector<Value*> > &InsertedScalarizedValues,
1215                    std::vector<std::pair<PHINode*, unsigned> > &PHIsToRewrite) {
1216   for (auto UI = Load->user_begin(), E = Load->user_end(); UI != E;) {
1217     Instruction *User = cast<Instruction>(*UI++);
1218     RewriteHeapSROALoadUser(User, InsertedScalarizedValues, PHIsToRewrite);
1219   }
1220 
1221   if (Load->use_empty()) {
1222     Load->eraseFromParent();
1223     InsertedScalarizedValues.erase(Load);
1224   }
1225 }
1226 
1227 /// CI is an allocation of an array of structures.  Break it up into multiple
1228 /// allocations of arrays of the fields.
1229 static GlobalVariable *PerformHeapAllocSRoA(GlobalVariable *GV, CallInst *CI,
1230                                             Value *NElems, const DataLayout &DL,
1231                                             const TargetLibraryInfo *TLI) {
1232   DEBUG(dbgs() << "SROA HEAP ALLOC: " << *GV << "  MALLOC = " << *CI << '\n');
1233   Type *MAT = getMallocAllocatedType(CI, TLI);
1234   StructType *STy = cast<StructType>(MAT);
1235 
1236   // There is guaranteed to be at least one use of the malloc (storing
1237   // it into GV).  If there are other uses, change them to be uses of
1238   // the global to simplify later code.  This also deletes the store
1239   // into GV.
1240   ReplaceUsesOfMallocWithGlobal(CI, GV);
1241 
1242   // Okay, at this point, there are no users of the malloc.  Insert N
1243   // new mallocs at the same place as CI, and N globals.
1244   std::vector<Value*> FieldGlobals;
1245   std::vector<Value*> FieldMallocs;
1246 
1247   unsigned AS = GV->getType()->getPointerAddressSpace();
1248   for (unsigned FieldNo = 0, e = STy->getNumElements(); FieldNo != e;++FieldNo){
1249     Type *FieldTy = STy->getElementType(FieldNo);
1250     PointerType *PFieldTy = PointerType::get(FieldTy, AS);
1251 
1252     GlobalVariable *NGV = new GlobalVariable(
1253         *GV->getParent(), PFieldTy, false, GlobalValue::InternalLinkage,
1254         Constant::getNullValue(PFieldTy), GV->getName() + ".f" + Twine(FieldNo),
1255         nullptr, GV->getThreadLocalMode());
1256     NGV->copyAttributesFrom(GV);
1257     FieldGlobals.push_back(NGV);
1258 
1259     unsigned TypeSize = DL.getTypeAllocSize(FieldTy);
1260     if (StructType *ST = dyn_cast<StructType>(FieldTy))
1261       TypeSize = DL.getStructLayout(ST)->getSizeInBytes();
1262     Type *IntPtrTy = DL.getIntPtrType(CI->getType());
1263     Value *NMI = CallInst::CreateMalloc(CI, IntPtrTy, FieldTy,
1264                                         ConstantInt::get(IntPtrTy, TypeSize),
1265                                         NElems, nullptr,
1266                                         CI->getName() + ".f" + Twine(FieldNo));
1267     FieldMallocs.push_back(NMI);
1268     new StoreInst(NMI, NGV, CI);
1269   }
1270 
1271   // The tricky aspect of this transformation is handling the case when malloc
1272   // fails.  In the original code, malloc failing would set the result pointer
1273   // of malloc to null.  In this case, some mallocs could succeed and others
1274   // could fail.  As such, we emit code that looks like this:
1275   //    F0 = malloc(field0)
1276   //    F1 = malloc(field1)
1277   //    F2 = malloc(field2)
1278   //    if (F0 == 0 || F1 == 0 || F2 == 0) {
1279   //      if (F0) { free(F0); F0 = 0; }
1280   //      if (F1) { free(F1); F1 = 0; }
1281   //      if (F2) { free(F2); F2 = 0; }
1282   //    }
1283   // The malloc can also fail if its argument is too large.
1284   Constant *ConstantZero = ConstantInt::get(CI->getArgOperand(0)->getType(), 0);
1285   Value *RunningOr = new ICmpInst(CI, ICmpInst::ICMP_SLT, CI->getArgOperand(0),
1286                                   ConstantZero, "isneg");
1287   for (unsigned i = 0, e = FieldMallocs.size(); i != e; ++i) {
1288     Value *Cond = new ICmpInst(CI, ICmpInst::ICMP_EQ, FieldMallocs[i],
1289                              Constant::getNullValue(FieldMallocs[i]->getType()),
1290                                "isnull");
1291     RunningOr = BinaryOperator::CreateOr(RunningOr, Cond, "tmp", CI);
1292   }
1293 
1294   // Split the basic block at the old malloc.
1295   BasicBlock *OrigBB = CI->getParent();
1296   BasicBlock *ContBB =
1297       OrigBB->splitBasicBlock(CI->getIterator(), "malloc_cont");
1298 
1299   // Create the block to check the first condition.  Put all these blocks at the
1300   // end of the function as they are unlikely to be executed.
1301   BasicBlock *NullPtrBlock = BasicBlock::Create(OrigBB->getContext(),
1302                                                 "malloc_ret_null",
1303                                                 OrigBB->getParent());
1304 
1305   // Remove the uncond branch from OrigBB to ContBB, turning it into a cond
1306   // branch on RunningOr.
1307   OrigBB->getTerminator()->eraseFromParent();
1308   BranchInst::Create(NullPtrBlock, ContBB, RunningOr, OrigBB);
1309 
1310   // Within the NullPtrBlock, we need to emit a comparison and branch for each
1311   // pointer, because some may be null while others are not.
1312   for (unsigned i = 0, e = FieldGlobals.size(); i != e; ++i) {
1313     Value *GVVal = new LoadInst(FieldGlobals[i], "tmp", NullPtrBlock);
1314     Value *Cmp = new ICmpInst(*NullPtrBlock, ICmpInst::ICMP_NE, GVVal,
1315                               Constant::getNullValue(GVVal->getType()));
1316     BasicBlock *FreeBlock = BasicBlock::Create(Cmp->getContext(), "free_it",
1317                                                OrigBB->getParent());
1318     BasicBlock *NextBlock = BasicBlock::Create(Cmp->getContext(), "next",
1319                                                OrigBB->getParent());
1320     Instruction *BI = BranchInst::Create(FreeBlock, NextBlock,
1321                                          Cmp, NullPtrBlock);
1322 
1323     // Fill in FreeBlock.
1324     CallInst::CreateFree(GVVal, BI);
1325     new StoreInst(Constant::getNullValue(GVVal->getType()), FieldGlobals[i],
1326                   FreeBlock);
1327     BranchInst::Create(NextBlock, FreeBlock);
1328 
1329     NullPtrBlock = NextBlock;
1330   }
1331 
1332   BranchInst::Create(ContBB, NullPtrBlock);
1333 
1334   // CI is no longer needed, remove it.
1335   CI->eraseFromParent();
1336 
1337   /// As we process loads, if we can't immediately update all uses of the load,
1338   /// keep track of what scalarized loads are inserted for a given load.
1339   DenseMap<Value*, std::vector<Value*> > InsertedScalarizedValues;
1340   InsertedScalarizedValues[GV] = FieldGlobals;
1341 
1342   std::vector<std::pair<PHINode*, unsigned> > PHIsToRewrite;
1343 
1344   // Okay, the malloc site is completely handled.  All of the uses of GV are now
1345   // loads, and all uses of those loads are simple.  Rewrite them to use loads
1346   // of the per-field globals instead.
1347   for (auto UI = GV->user_begin(), E = GV->user_end(); UI != E;) {
1348     Instruction *User = cast<Instruction>(*UI++);
1349 
1350     if (LoadInst *LI = dyn_cast<LoadInst>(User)) {
1351       RewriteUsesOfLoadForHeapSRoA(LI, InsertedScalarizedValues, PHIsToRewrite);
1352       continue;
1353     }
1354 
1355     // Must be a store of null.
1356     StoreInst *SI = cast<StoreInst>(User);
1357     assert(isa<ConstantPointerNull>(SI->getOperand(0)) &&
1358            "Unexpected heap-sra user!");
1359 
1360     // Insert a store of null into each global.
1361     for (unsigned i = 0, e = FieldGlobals.size(); i != e; ++i) {
1362       Type *ValTy = cast<GlobalValue>(FieldGlobals[i])->getValueType();
1363       Constant *Null = Constant::getNullValue(ValTy);
1364       new StoreInst(Null, FieldGlobals[i], SI);
1365     }
1366     // Erase the original store.
1367     SI->eraseFromParent();
1368   }
1369 
1370   // While we have PHIs that are interesting to rewrite, do it.
1371   while (!PHIsToRewrite.empty()) {
1372     PHINode *PN = PHIsToRewrite.back().first;
1373     unsigned FieldNo = PHIsToRewrite.back().second;
1374     PHIsToRewrite.pop_back();
1375     PHINode *FieldPN = cast<PHINode>(InsertedScalarizedValues[PN][FieldNo]);
1376     assert(FieldPN->getNumIncomingValues() == 0 &&"Already processed this phi");
1377 
1378     // Add all the incoming values.  This can materialize more phis.
1379     for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
1380       Value *InVal = PN->getIncomingValue(i);
1381       InVal = GetHeapSROAValue(InVal, FieldNo, InsertedScalarizedValues,
1382                                PHIsToRewrite);
1383       FieldPN->addIncoming(InVal, PN->getIncomingBlock(i));
1384     }
1385   }
1386 
1387   // Drop all inter-phi links and any loads that made it this far.
1388   for (DenseMap<Value*, std::vector<Value*> >::iterator
1389        I = InsertedScalarizedValues.begin(), E = InsertedScalarizedValues.end();
1390        I != E; ++I) {
1391     if (PHINode *PN = dyn_cast<PHINode>(I->first))
1392       PN->dropAllReferences();
1393     else if (LoadInst *LI = dyn_cast<LoadInst>(I->first))
1394       LI->dropAllReferences();
1395   }
1396 
1397   // Delete all the phis and loads now that inter-references are dead.
1398   for (DenseMap<Value*, std::vector<Value*> >::iterator
1399        I = InsertedScalarizedValues.begin(), E = InsertedScalarizedValues.end();
1400        I != E; ++I) {
1401     if (PHINode *PN = dyn_cast<PHINode>(I->first))
1402       PN->eraseFromParent();
1403     else if (LoadInst *LI = dyn_cast<LoadInst>(I->first))
1404       LI->eraseFromParent();
1405   }
1406 
1407   // The old global is now dead, remove it.
1408   GV->eraseFromParent();
1409 
1410   ++NumHeapSRA;
1411   return cast<GlobalVariable>(FieldGlobals[0]);
1412 }
1413 
1414 /// This function is called when we see a pointer global variable with a single
1415 /// value stored it that is a malloc or cast of malloc.
1416 static bool tryToOptimizeStoreOfMallocToGlobal(GlobalVariable *GV, CallInst *CI,
1417                                                Type *AllocTy,
1418                                                AtomicOrdering Ordering,
1419                                                const DataLayout &DL,
1420                                                TargetLibraryInfo *TLI) {
1421   // If this is a malloc of an abstract type, don't touch it.
1422   if (!AllocTy->isSized())
1423     return false;
1424 
1425   // We can't optimize this global unless all uses of it are *known* to be
1426   // of the malloc value, not of the null initializer value (consider a use
1427   // that compares the global's value against zero to see if the malloc has
1428   // been reached).  To do this, we check to see if all uses of the global
1429   // would trap if the global were null: this proves that they must all
1430   // happen after the malloc.
1431   if (!AllUsesOfLoadedValueWillTrapIfNull(GV))
1432     return false;
1433 
1434   // We can't optimize this if the malloc itself is used in a complex way,
1435   // for example, being stored into multiple globals.  This allows the
1436   // malloc to be stored into the specified global, loaded icmp'd, and
1437   // GEP'd.  These are all things we could transform to using the global
1438   // for.
1439   SmallPtrSet<const PHINode*, 8> PHIs;
1440   if (!ValueIsOnlyUsedLocallyOrStoredToOneGlobal(CI, GV, PHIs))
1441     return false;
1442 
1443   // If we have a global that is only initialized with a fixed size malloc,
1444   // transform the program to use global memory instead of malloc'd memory.
1445   // This eliminates dynamic allocation, avoids an indirection accessing the
1446   // data, and exposes the resultant global to further GlobalOpt.
1447   // We cannot optimize the malloc if we cannot determine malloc array size.
1448   Value *NElems = getMallocArraySize(CI, DL, TLI, true);
1449   if (!NElems)
1450     return false;
1451 
1452   if (ConstantInt *NElements = dyn_cast<ConstantInt>(NElems))
1453     // Restrict this transformation to only working on small allocations
1454     // (2048 bytes currently), as we don't want to introduce a 16M global or
1455     // something.
1456     if (NElements->getZExtValue() * DL.getTypeAllocSize(AllocTy) < 2048) {
1457       OptimizeGlobalAddressOfMalloc(GV, CI, AllocTy, NElements, DL, TLI);
1458       return true;
1459     }
1460 
1461   // If the allocation is an array of structures, consider transforming this
1462   // into multiple malloc'd arrays, one for each field.  This is basically
1463   // SRoA for malloc'd memory.
1464 
1465   if (Ordering != AtomicOrdering::NotAtomic)
1466     return false;
1467 
1468   // If this is an allocation of a fixed size array of structs, analyze as a
1469   // variable size array.  malloc [100 x struct],1 -> malloc struct, 100
1470   if (NElems == ConstantInt::get(CI->getArgOperand(0)->getType(), 1))
1471     if (ArrayType *AT = dyn_cast<ArrayType>(AllocTy))
1472       AllocTy = AT->getElementType();
1473 
1474   StructType *AllocSTy = dyn_cast<StructType>(AllocTy);
1475   if (!AllocSTy)
1476     return false;
1477 
1478   // This the structure has an unreasonable number of fields, leave it
1479   // alone.
1480   if (AllocSTy->getNumElements() <= 16 && AllocSTy->getNumElements() != 0 &&
1481       AllGlobalLoadUsesSimpleEnoughForHeapSRA(GV, CI)) {
1482 
1483     // If this is a fixed size array, transform the Malloc to be an alloc of
1484     // structs.  malloc [100 x struct],1 -> malloc struct, 100
1485     if (ArrayType *AT = dyn_cast<ArrayType>(getMallocAllocatedType(CI, TLI))) {
1486       Type *IntPtrTy = DL.getIntPtrType(CI->getType());
1487       unsigned TypeSize = DL.getStructLayout(AllocSTy)->getSizeInBytes();
1488       Value *AllocSize = ConstantInt::get(IntPtrTy, TypeSize);
1489       Value *NumElements = ConstantInt::get(IntPtrTy, AT->getNumElements());
1490       Instruction *Malloc = CallInst::CreateMalloc(CI, IntPtrTy, AllocSTy,
1491                                                    AllocSize, NumElements,
1492                                                    nullptr, CI->getName());
1493       Instruction *Cast = new BitCastInst(Malloc, CI->getType(), "tmp", CI);
1494       CI->replaceAllUsesWith(Cast);
1495       CI->eraseFromParent();
1496       if (BitCastInst *BCI = dyn_cast<BitCastInst>(Malloc))
1497         CI = cast<CallInst>(BCI->getOperand(0));
1498       else
1499         CI = cast<CallInst>(Malloc);
1500     }
1501 
1502     PerformHeapAllocSRoA(GV, CI, getMallocArraySize(CI, DL, TLI, true), DL,
1503                          TLI);
1504     return true;
1505   }
1506 
1507   return false;
1508 }
1509 
1510 // Try to optimize globals based on the knowledge that only one value (besides
1511 // its initializer) is ever stored to the global.
1512 static bool optimizeOnceStoredGlobal(GlobalVariable *GV, Value *StoredOnceVal,
1513                                      AtomicOrdering Ordering,
1514                                      const DataLayout &DL,
1515                                      TargetLibraryInfo *TLI) {
1516   // Ignore no-op GEPs and bitcasts.
1517   StoredOnceVal = StoredOnceVal->stripPointerCasts();
1518 
1519   // If we are dealing with a pointer global that is initialized to null and
1520   // only has one (non-null) value stored into it, then we can optimize any
1521   // users of the loaded value (often calls and loads) that would trap if the
1522   // value was null.
1523   if (GV->getInitializer()->getType()->isPointerTy() &&
1524       GV->getInitializer()->isNullValue()) {
1525     if (Constant *SOVC = dyn_cast<Constant>(StoredOnceVal)) {
1526       if (GV->getInitializer()->getType() != SOVC->getType())
1527         SOVC = ConstantExpr::getBitCast(SOVC, GV->getInitializer()->getType());
1528 
1529       // Optimize away any trapping uses of the loaded value.
1530       if (OptimizeAwayTrappingUsesOfLoads(GV, SOVC, DL, TLI))
1531         return true;
1532     } else if (CallInst *CI = extractMallocCall(StoredOnceVal, TLI)) {
1533       Type *MallocType = getMallocAllocatedType(CI, TLI);
1534       if (MallocType && tryToOptimizeStoreOfMallocToGlobal(GV, CI, MallocType,
1535                                                            Ordering, DL, TLI))
1536         return true;
1537     }
1538   }
1539 
1540   return false;
1541 }
1542 
1543 /// At this point, we have learned that the only two values ever stored into GV
1544 /// are its initializer and OtherVal.  See if we can shrink the global into a
1545 /// boolean and select between the two values whenever it is used.  This exposes
1546 /// the values to other scalar optimizations.
1547 static bool TryToShrinkGlobalToBoolean(GlobalVariable *GV, Constant *OtherVal) {
1548   Type *GVElType = GV->getValueType();
1549 
1550   // If GVElType is already i1, it is already shrunk.  If the type of the GV is
1551   // an FP value, pointer or vector, don't do this optimization because a select
1552   // between them is very expensive and unlikely to lead to later
1553   // simplification.  In these cases, we typically end up with "cond ? v1 : v2"
1554   // where v1 and v2 both require constant pool loads, a big loss.
1555   if (GVElType == Type::getInt1Ty(GV->getContext()) ||
1556       GVElType->isFloatingPointTy() ||
1557       GVElType->isPointerTy() || GVElType->isVectorTy())
1558     return false;
1559 
1560   // Walk the use list of the global seeing if all the uses are load or store.
1561   // If there is anything else, bail out.
1562   for (User *U : GV->users())
1563     if (!isa<LoadInst>(U) && !isa<StoreInst>(U))
1564       return false;
1565 
1566   DEBUG(dbgs() << "   *** SHRINKING TO BOOL: " << *GV << "\n");
1567 
1568   // Create the new global, initializing it to false.
1569   GlobalVariable *NewGV = new GlobalVariable(Type::getInt1Ty(GV->getContext()),
1570                                              false,
1571                                              GlobalValue::InternalLinkage,
1572                                         ConstantInt::getFalse(GV->getContext()),
1573                                              GV->getName()+".b",
1574                                              GV->getThreadLocalMode(),
1575                                              GV->getType()->getAddressSpace());
1576   NewGV->copyAttributesFrom(GV);
1577   GV->getParent()->getGlobalList().insert(GV->getIterator(), NewGV);
1578 
1579   Constant *InitVal = GV->getInitializer();
1580   assert(InitVal->getType() != Type::getInt1Ty(GV->getContext()) &&
1581          "No reason to shrink to bool!");
1582 
1583   // If initialized to zero and storing one into the global, we can use a cast
1584   // instead of a select to synthesize the desired value.
1585   bool IsOneZero = false;
1586   if (ConstantInt *CI = dyn_cast<ConstantInt>(OtherVal))
1587     IsOneZero = InitVal->isNullValue() && CI->isOne();
1588 
1589   while (!GV->use_empty()) {
1590     Instruction *UI = cast<Instruction>(GV->user_back());
1591     if (StoreInst *SI = dyn_cast<StoreInst>(UI)) {
1592       // Change the store into a boolean store.
1593       bool StoringOther = SI->getOperand(0) == OtherVal;
1594       // Only do this if we weren't storing a loaded value.
1595       Value *StoreVal;
1596       if (StoringOther || SI->getOperand(0) == InitVal) {
1597         StoreVal = ConstantInt::get(Type::getInt1Ty(GV->getContext()),
1598                                     StoringOther);
1599       } else {
1600         // Otherwise, we are storing a previously loaded copy.  To do this,
1601         // change the copy from copying the original value to just copying the
1602         // bool.
1603         Instruction *StoredVal = cast<Instruction>(SI->getOperand(0));
1604 
1605         // If we've already replaced the input, StoredVal will be a cast or
1606         // select instruction.  If not, it will be a load of the original
1607         // global.
1608         if (LoadInst *LI = dyn_cast<LoadInst>(StoredVal)) {
1609           assert(LI->getOperand(0) == GV && "Not a copy!");
1610           // Insert a new load, to preserve the saved value.
1611           StoreVal = new LoadInst(NewGV, LI->getName()+".b", false, 0,
1612                                   LI->getOrdering(), LI->getSynchScope(), LI);
1613         } else {
1614           assert((isa<CastInst>(StoredVal) || isa<SelectInst>(StoredVal)) &&
1615                  "This is not a form that we understand!");
1616           StoreVal = StoredVal->getOperand(0);
1617           assert(isa<LoadInst>(StoreVal) && "Not a load of NewGV!");
1618         }
1619       }
1620       new StoreInst(StoreVal, NewGV, false, 0,
1621                     SI->getOrdering(), SI->getSynchScope(), SI);
1622     } else {
1623       // Change the load into a load of bool then a select.
1624       LoadInst *LI = cast<LoadInst>(UI);
1625       LoadInst *NLI = new LoadInst(NewGV, LI->getName()+".b", false, 0,
1626                                    LI->getOrdering(), LI->getSynchScope(), LI);
1627       Value *NSI;
1628       if (IsOneZero)
1629         NSI = new ZExtInst(NLI, LI->getType(), "", LI);
1630       else
1631         NSI = SelectInst::Create(NLI, OtherVal, InitVal, "", LI);
1632       NSI->takeName(LI);
1633       LI->replaceAllUsesWith(NSI);
1634     }
1635     UI->eraseFromParent();
1636   }
1637 
1638   // Retain the name of the old global variable. People who are debugging their
1639   // programs may expect these variables to be named the same.
1640   NewGV->takeName(GV);
1641   GV->eraseFromParent();
1642   return true;
1643 }
1644 
1645 static bool deleteIfDead(GlobalValue &GV,
1646                          SmallSet<const Comdat *, 8> &NotDiscardableComdats) {
1647   GV.removeDeadConstantUsers();
1648 
1649   if (!GV.isDiscardableIfUnused())
1650     return false;
1651 
1652   if (const Comdat *C = GV.getComdat())
1653     if (!GV.hasLocalLinkage() && NotDiscardableComdats.count(C))
1654       return false;
1655 
1656   bool Dead;
1657   if (auto *F = dyn_cast<Function>(&GV))
1658     Dead = F->isDefTriviallyDead();
1659   else
1660     Dead = GV.use_empty();
1661   if (!Dead)
1662     return false;
1663 
1664   DEBUG(dbgs() << "GLOBAL DEAD: " << GV << "\n");
1665   GV.eraseFromParent();
1666   ++NumDeleted;
1667   return true;
1668 }
1669 
1670 static bool isPointerValueDeadOnEntryToFunction(
1671     const Function *F, GlobalValue *GV,
1672     function_ref<DominatorTree &(Function &)> LookupDomTree) {
1673   // Find all uses of GV. We expect them all to be in F, and if we can't
1674   // identify any of the uses we bail out.
1675   //
1676   // On each of these uses, identify if the memory that GV points to is
1677   // used/required/live at the start of the function. If it is not, for example
1678   // if the first thing the function does is store to the GV, the GV can
1679   // possibly be demoted.
1680   //
1681   // We don't do an exhaustive search for memory operations - simply look
1682   // through bitcasts as they're quite common and benign.
1683   const DataLayout &DL = GV->getParent()->getDataLayout();
1684   SmallVector<LoadInst *, 4> Loads;
1685   SmallVector<StoreInst *, 4> Stores;
1686   for (auto *U : GV->users()) {
1687     if (Operator::getOpcode(U) == Instruction::BitCast) {
1688       for (auto *UU : U->users()) {
1689         if (auto *LI = dyn_cast<LoadInst>(UU))
1690           Loads.push_back(LI);
1691         else if (auto *SI = dyn_cast<StoreInst>(UU))
1692           Stores.push_back(SI);
1693         else
1694           return false;
1695       }
1696       continue;
1697     }
1698 
1699     Instruction *I = dyn_cast<Instruction>(U);
1700     if (!I)
1701       return false;
1702     assert(I->getParent()->getParent() == F);
1703 
1704     if (auto *LI = dyn_cast<LoadInst>(I))
1705       Loads.push_back(LI);
1706     else if (auto *SI = dyn_cast<StoreInst>(I))
1707       Stores.push_back(SI);
1708     else
1709       return false;
1710   }
1711 
1712   // We have identified all uses of GV into loads and stores. Now check if all
1713   // of them are known not to depend on the value of the global at the function
1714   // entry point. We do this by ensuring that every load is dominated by at
1715   // least one store.
1716   auto &DT = LookupDomTree(*const_cast<Function *>(F));
1717 
1718   // The below check is quadratic. Check we're not going to do too many tests.
1719   // FIXME: Even though this will always have worst-case quadratic time, we
1720   // could put effort into minimizing the average time by putting stores that
1721   // have been shown to dominate at least one load at the beginning of the
1722   // Stores array, making subsequent dominance checks more likely to succeed
1723   // early.
1724   //
1725   // The threshold here is fairly large because global->local demotion is a
1726   // very powerful optimization should it fire.
1727   const unsigned Threshold = 100;
1728   if (Loads.size() * Stores.size() > Threshold)
1729     return false;
1730 
1731   for (auto *L : Loads) {
1732     auto *LTy = L->getType();
1733     if (!std::any_of(Stores.begin(), Stores.end(), [&](StoreInst *S) {
1734           auto *STy = S->getValueOperand()->getType();
1735           // The load is only dominated by the store if DomTree says so
1736           // and the number of bits loaded in L is less than or equal to
1737           // the number of bits stored in S.
1738           return DT.dominates(S, L) &&
1739                  DL.getTypeStoreSize(LTy) <= DL.getTypeStoreSize(STy);
1740         }))
1741       return false;
1742   }
1743   // All loads have known dependences inside F, so the global can be localized.
1744   return true;
1745 }
1746 
1747 /// C may have non-instruction users. Can all of those users be turned into
1748 /// instructions?
1749 static bool allNonInstructionUsersCanBeMadeInstructions(Constant *C) {
1750   // We don't do this exhaustively. The most common pattern that we really need
1751   // to care about is a constant GEP or constant bitcast - so just looking
1752   // through one single ConstantExpr.
1753   //
1754   // The set of constants that this function returns true for must be able to be
1755   // handled by makeAllConstantUsesInstructions.
1756   for (auto *U : C->users()) {
1757     if (isa<Instruction>(U))
1758       continue;
1759     if (!isa<ConstantExpr>(U))
1760       // Non instruction, non-constantexpr user; cannot convert this.
1761       return false;
1762     for (auto *UU : U->users())
1763       if (!isa<Instruction>(UU))
1764         // A constantexpr used by another constant. We don't try and recurse any
1765         // further but just bail out at this point.
1766         return false;
1767   }
1768 
1769   return true;
1770 }
1771 
1772 /// C may have non-instruction users, and
1773 /// allNonInstructionUsersCanBeMadeInstructions has returned true. Convert the
1774 /// non-instruction users to instructions.
1775 static void makeAllConstantUsesInstructions(Constant *C) {
1776   SmallVector<ConstantExpr*,4> Users;
1777   for (auto *U : C->users()) {
1778     if (isa<ConstantExpr>(U))
1779       Users.push_back(cast<ConstantExpr>(U));
1780     else
1781       // We should never get here; allNonInstructionUsersCanBeMadeInstructions
1782       // should not have returned true for C.
1783       assert(
1784           isa<Instruction>(U) &&
1785           "Can't transform non-constantexpr non-instruction to instruction!");
1786   }
1787 
1788   SmallVector<Value*,4> UUsers;
1789   for (auto *U : Users) {
1790     UUsers.clear();
1791     for (auto *UU : U->users())
1792       UUsers.push_back(UU);
1793     for (auto *UU : UUsers) {
1794       Instruction *UI = cast<Instruction>(UU);
1795       Instruction *NewU = U->getAsInstruction();
1796       NewU->insertBefore(UI);
1797       UI->replaceUsesOfWith(U, NewU);
1798     }
1799     U->dropAllReferences();
1800   }
1801 }
1802 
1803 /// Analyze the specified global variable and optimize
1804 /// it if possible.  If we make a change, return true.
1805 static bool processInternalGlobal(
1806     GlobalVariable *GV, const GlobalStatus &GS, TargetLibraryInfo *TLI,
1807     function_ref<DominatorTree &(Function &)> LookupDomTree) {
1808   auto &DL = GV->getParent()->getDataLayout();
1809   // If this is a first class global and has only one accessing function and
1810   // this function is non-recursive, we replace the global with a local alloca
1811   // in this function.
1812   //
1813   // NOTE: It doesn't make sense to promote non-single-value types since we
1814   // are just replacing static memory to stack memory.
1815   //
1816   // If the global is in different address space, don't bring it to stack.
1817   if (!GS.HasMultipleAccessingFunctions &&
1818       GS.AccessingFunction &&
1819       GV->getValueType()->isSingleValueType() &&
1820       GV->getType()->getAddressSpace() == 0 &&
1821       !GV->isExternallyInitialized() &&
1822       allNonInstructionUsersCanBeMadeInstructions(GV) &&
1823       GS.AccessingFunction->doesNotRecurse() &&
1824       isPointerValueDeadOnEntryToFunction(GS.AccessingFunction, GV,
1825                                           LookupDomTree)) {
1826     DEBUG(dbgs() << "LOCALIZING GLOBAL: " << *GV << "\n");
1827     Instruction &FirstI = const_cast<Instruction&>(*GS.AccessingFunction
1828                                                    ->getEntryBlock().begin());
1829     Type *ElemTy = GV->getValueType();
1830     // FIXME: Pass Global's alignment when globals have alignment
1831     AllocaInst *Alloca = new AllocaInst(ElemTy, nullptr,
1832                                         GV->getName(), &FirstI);
1833     if (!isa<UndefValue>(GV->getInitializer()))
1834       new StoreInst(GV->getInitializer(), Alloca, &FirstI);
1835 
1836     makeAllConstantUsesInstructions(GV);
1837 
1838     GV->replaceAllUsesWith(Alloca);
1839     GV->eraseFromParent();
1840     ++NumLocalized;
1841     return true;
1842   }
1843 
1844   // If the global is never loaded (but may be stored to), it is dead.
1845   // Delete it now.
1846   if (!GS.IsLoaded) {
1847     DEBUG(dbgs() << "GLOBAL NEVER LOADED: " << *GV << "\n");
1848 
1849     bool Changed;
1850     if (isLeakCheckerRoot(GV)) {
1851       // Delete any constant stores to the global.
1852       Changed = CleanupPointerRootUsers(GV, TLI);
1853     } else {
1854       // Delete any stores we can find to the global.  We may not be able to
1855       // make it completely dead though.
1856       Changed = CleanupConstantGlobalUsers(GV, GV->getInitializer(), DL, TLI);
1857     }
1858 
1859     // If the global is dead now, delete it.
1860     if (GV->use_empty()) {
1861       GV->eraseFromParent();
1862       ++NumDeleted;
1863       Changed = true;
1864     }
1865     return Changed;
1866 
1867   }
1868   if (GS.StoredType <= GlobalStatus::InitializerStored) {
1869     DEBUG(dbgs() << "MARKING CONSTANT: " << *GV << "\n");
1870     GV->setConstant(true);
1871 
1872     // Clean up any obviously simplifiable users now.
1873     CleanupConstantGlobalUsers(GV, GV->getInitializer(), DL, TLI);
1874 
1875     // If the global is dead now, just nuke it.
1876     if (GV->use_empty()) {
1877       DEBUG(dbgs() << "   *** Marking constant allowed us to simplify "
1878             << "all users and delete global!\n");
1879       GV->eraseFromParent();
1880       ++NumDeleted;
1881       return true;
1882     }
1883 
1884     // Fall through to the next check; see if we can optimize further.
1885     ++NumMarked;
1886   }
1887   if (!GV->getInitializer()->getType()->isSingleValueType()) {
1888     const DataLayout &DL = GV->getParent()->getDataLayout();
1889     if (SRAGlobal(GV, DL))
1890       return true;
1891   }
1892   if (GS.StoredType == GlobalStatus::StoredOnce && GS.StoredOnceValue) {
1893     // If the initial value for the global was an undef value, and if only
1894     // one other value was stored into it, we can just change the
1895     // initializer to be the stored value, then delete all stores to the
1896     // global.  This allows us to mark it constant.
1897     if (Constant *SOVConstant = dyn_cast<Constant>(GS.StoredOnceValue))
1898       if (isa<UndefValue>(GV->getInitializer())) {
1899         // Change the initial value here.
1900         GV->setInitializer(SOVConstant);
1901 
1902         // Clean up any obviously simplifiable users now.
1903         CleanupConstantGlobalUsers(GV, GV->getInitializer(), DL, TLI);
1904 
1905         if (GV->use_empty()) {
1906           DEBUG(dbgs() << "   *** Substituting initializer allowed us to "
1907                        << "simplify all users and delete global!\n");
1908           GV->eraseFromParent();
1909           ++NumDeleted;
1910         }
1911         ++NumSubstitute;
1912         return true;
1913       }
1914 
1915     // Try to optimize globals based on the knowledge that only one value
1916     // (besides its initializer) is ever stored to the global.
1917     if (optimizeOnceStoredGlobal(GV, GS.StoredOnceValue, GS.Ordering, DL, TLI))
1918       return true;
1919 
1920     // Otherwise, if the global was not a boolean, we can shrink it to be a
1921     // boolean.
1922     if (Constant *SOVConstant = dyn_cast<Constant>(GS.StoredOnceValue)) {
1923       if (GS.Ordering == AtomicOrdering::NotAtomic) {
1924         if (TryToShrinkGlobalToBoolean(GV, SOVConstant)) {
1925           ++NumShrunkToBool;
1926           return true;
1927         }
1928       }
1929     }
1930   }
1931 
1932   return false;
1933 }
1934 
1935 /// Analyze the specified global variable and optimize it if possible.  If we
1936 /// make a change, return true.
1937 static bool
1938 processGlobal(GlobalValue &GV, TargetLibraryInfo *TLI,
1939               function_ref<DominatorTree &(Function &)> LookupDomTree) {
1940   // Do more involved optimizations if the global is internal.
1941   if (!GV.hasLocalLinkage())
1942     return false;
1943 
1944   GlobalStatus GS;
1945 
1946   if (GlobalStatus::analyzeGlobal(&GV, GS))
1947     return false;
1948 
1949   bool Changed = false;
1950   if (!GS.IsCompared && !GV.hasUnnamedAddr()) {
1951     GV.setUnnamedAddr(true);
1952     NumUnnamed++;
1953     Changed = true;
1954   }
1955 
1956   auto *GVar = dyn_cast<GlobalVariable>(&GV);
1957   if (!GVar)
1958     return Changed;
1959 
1960   if (GVar->isConstant() || !GVar->hasInitializer())
1961     return Changed;
1962 
1963   return processInternalGlobal(GVar, GS, TLI, LookupDomTree) || Changed;
1964 }
1965 
1966 /// Walk all of the direct calls of the specified function, changing them to
1967 /// FastCC.
1968 static void ChangeCalleesToFastCall(Function *F) {
1969   for (User *U : F->users()) {
1970     if (isa<BlockAddress>(U))
1971       continue;
1972     CallSite CS(cast<Instruction>(U));
1973     CS.setCallingConv(CallingConv::Fast);
1974   }
1975 }
1976 
1977 static AttributeSet StripNest(LLVMContext &C, const AttributeSet &Attrs) {
1978   for (unsigned i = 0, e = Attrs.getNumSlots(); i != e; ++i) {
1979     unsigned Index = Attrs.getSlotIndex(i);
1980     if (!Attrs.getSlotAttributes(i).hasAttribute(Index, Attribute::Nest))
1981       continue;
1982 
1983     // There can be only one.
1984     return Attrs.removeAttribute(C, Index, Attribute::Nest);
1985   }
1986 
1987   return Attrs;
1988 }
1989 
1990 static void RemoveNestAttribute(Function *F) {
1991   F->setAttributes(StripNest(F->getContext(), F->getAttributes()));
1992   for (User *U : F->users()) {
1993     if (isa<BlockAddress>(U))
1994       continue;
1995     CallSite CS(cast<Instruction>(U));
1996     CS.setAttributes(StripNest(F->getContext(), CS.getAttributes()));
1997   }
1998 }
1999 
2000 /// Return true if this is a calling convention that we'd like to change.  The
2001 /// idea here is that we don't want to mess with the convention if the user
2002 /// explicitly requested something with performance implications like coldcc,
2003 /// GHC, or anyregcc.
2004 static bool isProfitableToMakeFastCC(Function *F) {
2005   CallingConv::ID CC = F->getCallingConv();
2006   // FIXME: Is it worth transforming x86_stdcallcc and x86_fastcallcc?
2007   return CC == CallingConv::C || CC == CallingConv::X86_ThisCall;
2008 }
2009 
2010 static bool
2011 OptimizeFunctions(Module &M, TargetLibraryInfo *TLI,
2012                   function_ref<DominatorTree &(Function &)> LookupDomTree,
2013                   SmallSet<const Comdat *, 8> &NotDiscardableComdats) {
2014   bool Changed = false;
2015   // Optimize functions.
2016   for (Module::iterator FI = M.begin(), E = M.end(); FI != E; ) {
2017     Function *F = &*FI++;
2018     // Functions without names cannot be referenced outside this module.
2019     if (!F->hasName() && !F->isDeclaration() && !F->hasLocalLinkage())
2020       F->setLinkage(GlobalValue::InternalLinkage);
2021 
2022     if (deleteIfDead(*F, NotDiscardableComdats)) {
2023       Changed = true;
2024       continue;
2025     }
2026 
2027     Changed |= processGlobal(*F, TLI, LookupDomTree);
2028 
2029     if (!F->hasLocalLinkage())
2030       continue;
2031     if (isProfitableToMakeFastCC(F) && !F->isVarArg() &&
2032         !F->hasAddressTaken()) {
2033       // If this function has a calling convention worth changing, is not a
2034       // varargs function, and is only called directly, promote it to use the
2035       // Fast calling convention.
2036       F->setCallingConv(CallingConv::Fast);
2037       ChangeCalleesToFastCall(F);
2038       ++NumFastCallFns;
2039       Changed = true;
2040     }
2041 
2042     if (F->getAttributes().hasAttrSomewhere(Attribute::Nest) &&
2043         !F->hasAddressTaken()) {
2044       // The function is not used by a trampoline intrinsic, so it is safe
2045       // to remove the 'nest' attribute.
2046       RemoveNestAttribute(F);
2047       ++NumNestRemoved;
2048       Changed = true;
2049     }
2050   }
2051   return Changed;
2052 }
2053 
2054 static bool
2055 OptimizeGlobalVars(Module &M, TargetLibraryInfo *TLI,
2056                    function_ref<DominatorTree &(Function &)> LookupDomTree,
2057                    SmallSet<const Comdat *, 8> &NotDiscardableComdats) {
2058   bool Changed = false;
2059 
2060   for (Module::global_iterator GVI = M.global_begin(), E = M.global_end();
2061        GVI != E; ) {
2062     GlobalVariable *GV = &*GVI++;
2063     // Global variables without names cannot be referenced outside this module.
2064     if (!GV->hasName() && !GV->isDeclaration() && !GV->hasLocalLinkage())
2065       GV->setLinkage(GlobalValue::InternalLinkage);
2066     // Simplify the initializer.
2067     if (GV->hasInitializer())
2068       if (ConstantExpr *CE = dyn_cast<ConstantExpr>(GV->getInitializer())) {
2069         auto &DL = M.getDataLayout();
2070         Constant *New = ConstantFoldConstantExpression(CE, DL, TLI);
2071         if (New && New != CE)
2072           GV->setInitializer(New);
2073       }
2074 
2075     if (deleteIfDead(*GV, NotDiscardableComdats)) {
2076       Changed = true;
2077       continue;
2078     }
2079 
2080     Changed |= processGlobal(*GV, TLI, LookupDomTree);
2081   }
2082   return Changed;
2083 }
2084 
2085 /// Evaluate a piece of a constantexpr store into a global initializer.  This
2086 /// returns 'Init' modified to reflect 'Val' stored into it.  At this point, the
2087 /// GEP operands of Addr [0, OpNo) have been stepped into.
2088 static Constant *EvaluateStoreInto(Constant *Init, Constant *Val,
2089                                    ConstantExpr *Addr, unsigned OpNo) {
2090   // Base case of the recursion.
2091   if (OpNo == Addr->getNumOperands()) {
2092     assert(Val->getType() == Init->getType() && "Type mismatch!");
2093     return Val;
2094   }
2095 
2096   SmallVector<Constant*, 32> Elts;
2097   if (StructType *STy = dyn_cast<StructType>(Init->getType())) {
2098     // Break up the constant into its elements.
2099     for (unsigned i = 0, e = STy->getNumElements(); i != e; ++i)
2100       Elts.push_back(Init->getAggregateElement(i));
2101 
2102     // Replace the element that we are supposed to.
2103     ConstantInt *CU = cast<ConstantInt>(Addr->getOperand(OpNo));
2104     unsigned Idx = CU->getZExtValue();
2105     assert(Idx < STy->getNumElements() && "Struct index out of range!");
2106     Elts[Idx] = EvaluateStoreInto(Elts[Idx], Val, Addr, OpNo+1);
2107 
2108     // Return the modified struct.
2109     return ConstantStruct::get(STy, Elts);
2110   }
2111 
2112   ConstantInt *CI = cast<ConstantInt>(Addr->getOperand(OpNo));
2113   SequentialType *InitTy = cast<SequentialType>(Init->getType());
2114 
2115   uint64_t NumElts;
2116   if (ArrayType *ATy = dyn_cast<ArrayType>(InitTy))
2117     NumElts = ATy->getNumElements();
2118   else
2119     NumElts = InitTy->getVectorNumElements();
2120 
2121   // Break up the array into elements.
2122   for (uint64_t i = 0, e = NumElts; i != e; ++i)
2123     Elts.push_back(Init->getAggregateElement(i));
2124 
2125   assert(CI->getZExtValue() < NumElts);
2126   Elts[CI->getZExtValue()] =
2127     EvaluateStoreInto(Elts[CI->getZExtValue()], Val, Addr, OpNo+1);
2128 
2129   if (Init->getType()->isArrayTy())
2130     return ConstantArray::get(cast<ArrayType>(InitTy), Elts);
2131   return ConstantVector::get(Elts);
2132 }
2133 
2134 /// We have decided that Addr (which satisfies the predicate
2135 /// isSimpleEnoughPointerToCommit) should get Val as its value.  Make it happen.
2136 static void CommitValueTo(Constant *Val, Constant *Addr) {
2137   if (GlobalVariable *GV = dyn_cast<GlobalVariable>(Addr)) {
2138     assert(GV->hasInitializer());
2139     GV->setInitializer(Val);
2140     return;
2141   }
2142 
2143   ConstantExpr *CE = cast<ConstantExpr>(Addr);
2144   GlobalVariable *GV = cast<GlobalVariable>(CE->getOperand(0));
2145   GV->setInitializer(EvaluateStoreInto(GV->getInitializer(), Val, CE, 2));
2146 }
2147 
2148 /// Evaluate static constructors in the function, if we can.  Return true if we
2149 /// can, false otherwise.
2150 static bool EvaluateStaticConstructor(Function *F, const DataLayout &DL,
2151                                       TargetLibraryInfo *TLI) {
2152   // Call the function.
2153   Evaluator Eval(DL, TLI);
2154   Constant *RetValDummy;
2155   bool EvalSuccess = Eval.EvaluateFunction(F, RetValDummy,
2156                                            SmallVector<Constant*, 0>());
2157 
2158   if (EvalSuccess) {
2159     ++NumCtorsEvaluated;
2160 
2161     // We succeeded at evaluation: commit the result.
2162     DEBUG(dbgs() << "FULLY EVALUATED GLOBAL CTOR FUNCTION '"
2163           << F->getName() << "' to " << Eval.getMutatedMemory().size()
2164           << " stores.\n");
2165     for (DenseMap<Constant*, Constant*>::const_iterator I =
2166            Eval.getMutatedMemory().begin(), E = Eval.getMutatedMemory().end();
2167          I != E; ++I)
2168       CommitValueTo(I->second, I->first);
2169     for (GlobalVariable *GV : Eval.getInvariants())
2170       GV->setConstant(true);
2171   }
2172 
2173   return EvalSuccess;
2174 }
2175 
2176 static int compareNames(Constant *const *A, Constant *const *B) {
2177   Value *AStripped = (*A)->stripPointerCastsNoFollowAliases();
2178   Value *BStripped = (*B)->stripPointerCastsNoFollowAliases();
2179   return AStripped->getName().compare(BStripped->getName());
2180 }
2181 
2182 static void setUsedInitializer(GlobalVariable &V,
2183                                const SmallPtrSet<GlobalValue *, 8> &Init) {
2184   if (Init.empty()) {
2185     V.eraseFromParent();
2186     return;
2187   }
2188 
2189   // Type of pointer to the array of pointers.
2190   PointerType *Int8PtrTy = Type::getInt8PtrTy(V.getContext(), 0);
2191 
2192   SmallVector<llvm::Constant *, 8> UsedArray;
2193   for (GlobalValue *GV : Init) {
2194     Constant *Cast
2195       = ConstantExpr::getPointerBitCastOrAddrSpaceCast(GV, Int8PtrTy);
2196     UsedArray.push_back(Cast);
2197   }
2198   // Sort to get deterministic order.
2199   array_pod_sort(UsedArray.begin(), UsedArray.end(), compareNames);
2200   ArrayType *ATy = ArrayType::get(Int8PtrTy, UsedArray.size());
2201 
2202   Module *M = V.getParent();
2203   V.removeFromParent();
2204   GlobalVariable *NV =
2205       new GlobalVariable(*M, ATy, false, llvm::GlobalValue::AppendingLinkage,
2206                          llvm::ConstantArray::get(ATy, UsedArray), "");
2207   NV->takeName(&V);
2208   NV->setSection("llvm.metadata");
2209   delete &V;
2210 }
2211 
2212 namespace {
2213 /// An easy to access representation of llvm.used and llvm.compiler.used.
2214 class LLVMUsed {
2215   SmallPtrSet<GlobalValue *, 8> Used;
2216   SmallPtrSet<GlobalValue *, 8> CompilerUsed;
2217   GlobalVariable *UsedV;
2218   GlobalVariable *CompilerUsedV;
2219 
2220 public:
2221   LLVMUsed(Module &M) {
2222     UsedV = collectUsedGlobalVariables(M, Used, false);
2223     CompilerUsedV = collectUsedGlobalVariables(M, CompilerUsed, true);
2224   }
2225   typedef SmallPtrSet<GlobalValue *, 8>::iterator iterator;
2226   typedef iterator_range<iterator> used_iterator_range;
2227   iterator usedBegin() { return Used.begin(); }
2228   iterator usedEnd() { return Used.end(); }
2229   used_iterator_range used() {
2230     return used_iterator_range(usedBegin(), usedEnd());
2231   }
2232   iterator compilerUsedBegin() { return CompilerUsed.begin(); }
2233   iterator compilerUsedEnd() { return CompilerUsed.end(); }
2234   used_iterator_range compilerUsed() {
2235     return used_iterator_range(compilerUsedBegin(), compilerUsedEnd());
2236   }
2237   bool usedCount(GlobalValue *GV) const { return Used.count(GV); }
2238   bool compilerUsedCount(GlobalValue *GV) const {
2239     return CompilerUsed.count(GV);
2240   }
2241   bool usedErase(GlobalValue *GV) { return Used.erase(GV); }
2242   bool compilerUsedErase(GlobalValue *GV) { return CompilerUsed.erase(GV); }
2243   bool usedInsert(GlobalValue *GV) { return Used.insert(GV).second; }
2244   bool compilerUsedInsert(GlobalValue *GV) {
2245     return CompilerUsed.insert(GV).second;
2246   }
2247 
2248   void syncVariablesAndSets() {
2249     if (UsedV)
2250       setUsedInitializer(*UsedV, Used);
2251     if (CompilerUsedV)
2252       setUsedInitializer(*CompilerUsedV, CompilerUsed);
2253   }
2254 };
2255 }
2256 
2257 static bool hasUseOtherThanLLVMUsed(GlobalAlias &GA, const LLVMUsed &U) {
2258   if (GA.use_empty()) // No use at all.
2259     return false;
2260 
2261   assert((!U.usedCount(&GA) || !U.compilerUsedCount(&GA)) &&
2262          "We should have removed the duplicated "
2263          "element from llvm.compiler.used");
2264   if (!GA.hasOneUse())
2265     // Strictly more than one use. So at least one is not in llvm.used and
2266     // llvm.compiler.used.
2267     return true;
2268 
2269   // Exactly one use. Check if it is in llvm.used or llvm.compiler.used.
2270   return !U.usedCount(&GA) && !U.compilerUsedCount(&GA);
2271 }
2272 
2273 static bool hasMoreThanOneUseOtherThanLLVMUsed(GlobalValue &V,
2274                                                const LLVMUsed &U) {
2275   unsigned N = 2;
2276   assert((!U.usedCount(&V) || !U.compilerUsedCount(&V)) &&
2277          "We should have removed the duplicated "
2278          "element from llvm.compiler.used");
2279   if (U.usedCount(&V) || U.compilerUsedCount(&V))
2280     ++N;
2281   return V.hasNUsesOrMore(N);
2282 }
2283 
2284 static bool mayHaveOtherReferences(GlobalAlias &GA, const LLVMUsed &U) {
2285   if (!GA.hasLocalLinkage())
2286     return true;
2287 
2288   return U.usedCount(&GA) || U.compilerUsedCount(&GA);
2289 }
2290 
2291 static bool hasUsesToReplace(GlobalAlias &GA, const LLVMUsed &U,
2292                              bool &RenameTarget) {
2293   RenameTarget = false;
2294   bool Ret = false;
2295   if (hasUseOtherThanLLVMUsed(GA, U))
2296     Ret = true;
2297 
2298   // If the alias is externally visible, we may still be able to simplify it.
2299   if (!mayHaveOtherReferences(GA, U))
2300     return Ret;
2301 
2302   // If the aliasee has internal linkage, give it the name and linkage
2303   // of the alias, and delete the alias.  This turns:
2304   //   define internal ... @f(...)
2305   //   @a = alias ... @f
2306   // into:
2307   //   define ... @a(...)
2308   Constant *Aliasee = GA.getAliasee();
2309   GlobalValue *Target = cast<GlobalValue>(Aliasee->stripPointerCasts());
2310   if (!Target->hasLocalLinkage())
2311     return Ret;
2312 
2313   // Do not perform the transform if multiple aliases potentially target the
2314   // aliasee. This check also ensures that it is safe to replace the section
2315   // and other attributes of the aliasee with those of the alias.
2316   if (hasMoreThanOneUseOtherThanLLVMUsed(*Target, U))
2317     return Ret;
2318 
2319   RenameTarget = true;
2320   return true;
2321 }
2322 
2323 static bool
2324 OptimizeGlobalAliases(Module &M,
2325                       SmallSet<const Comdat *, 8> &NotDiscardableComdats) {
2326   bool Changed = false;
2327   LLVMUsed Used(M);
2328 
2329   for (GlobalValue *GV : Used.used())
2330     Used.compilerUsedErase(GV);
2331 
2332   for (Module::alias_iterator I = M.alias_begin(), E = M.alias_end();
2333        I != E;) {
2334     GlobalAlias *J = &*I++;
2335 
2336     // Aliases without names cannot be referenced outside this module.
2337     if (!J->hasName() && !J->isDeclaration() && !J->hasLocalLinkage())
2338       J->setLinkage(GlobalValue::InternalLinkage);
2339 
2340     if (deleteIfDead(*J, NotDiscardableComdats)) {
2341       Changed = true;
2342       continue;
2343     }
2344 
2345     // If the aliasee may change at link time, nothing can be done - bail out.
2346     if (J->isInterposable())
2347       continue;
2348 
2349     Constant *Aliasee = J->getAliasee();
2350     GlobalValue *Target = dyn_cast<GlobalValue>(Aliasee->stripPointerCasts());
2351     // We can't trivially replace the alias with the aliasee if the aliasee is
2352     // non-trivial in some way.
2353     // TODO: Try to handle non-zero GEPs of local aliasees.
2354     if (!Target)
2355       continue;
2356     Target->removeDeadConstantUsers();
2357 
2358     // Make all users of the alias use the aliasee instead.
2359     bool RenameTarget;
2360     if (!hasUsesToReplace(*J, Used, RenameTarget))
2361       continue;
2362 
2363     J->replaceAllUsesWith(ConstantExpr::getBitCast(Aliasee, J->getType()));
2364     ++NumAliasesResolved;
2365     Changed = true;
2366 
2367     if (RenameTarget) {
2368       // Give the aliasee the name, linkage and other attributes of the alias.
2369       Target->takeName(&*J);
2370       Target->setLinkage(J->getLinkage());
2371       Target->setVisibility(J->getVisibility());
2372       Target->setDLLStorageClass(J->getDLLStorageClass());
2373 
2374       if (Used.usedErase(&*J))
2375         Used.usedInsert(Target);
2376 
2377       if (Used.compilerUsedErase(&*J))
2378         Used.compilerUsedInsert(Target);
2379     } else if (mayHaveOtherReferences(*J, Used))
2380       continue;
2381 
2382     // Delete the alias.
2383     M.getAliasList().erase(J);
2384     ++NumAliasesRemoved;
2385     Changed = true;
2386   }
2387 
2388   Used.syncVariablesAndSets();
2389 
2390   return Changed;
2391 }
2392 
2393 static Function *FindCXAAtExit(Module &M, TargetLibraryInfo *TLI) {
2394   LibFunc::Func F = LibFunc::cxa_atexit;
2395   if (!TLI->has(F))
2396     return nullptr;
2397 
2398   Function *Fn = M.getFunction(TLI->getName(F));
2399   if (!Fn)
2400     return nullptr;
2401 
2402   // Make sure that the function has the correct prototype.
2403   if (!TLI->getLibFunc(*Fn, F) || F != LibFunc::cxa_atexit)
2404     return nullptr;
2405 
2406   return Fn;
2407 }
2408 
2409 /// Returns whether the given function is an empty C++ destructor and can
2410 /// therefore be eliminated.
2411 /// Note that we assume that other optimization passes have already simplified
2412 /// the code so we only look for a function with a single basic block, where
2413 /// the only allowed instructions are 'ret', 'call' to an empty C++ dtor and
2414 /// other side-effect free instructions.
2415 static bool cxxDtorIsEmpty(const Function &Fn,
2416                            SmallPtrSet<const Function *, 8> &CalledFunctions) {
2417   // FIXME: We could eliminate C++ destructors if they're readonly/readnone and
2418   // nounwind, but that doesn't seem worth doing.
2419   if (Fn.isDeclaration())
2420     return false;
2421 
2422   if (++Fn.begin() != Fn.end())
2423     return false;
2424 
2425   const BasicBlock &EntryBlock = Fn.getEntryBlock();
2426   for (BasicBlock::const_iterator I = EntryBlock.begin(), E = EntryBlock.end();
2427        I != E; ++I) {
2428     if (const CallInst *CI = dyn_cast<CallInst>(I)) {
2429       // Ignore debug intrinsics.
2430       if (isa<DbgInfoIntrinsic>(CI))
2431         continue;
2432 
2433       const Function *CalledFn = CI->getCalledFunction();
2434 
2435       if (!CalledFn)
2436         return false;
2437 
2438       SmallPtrSet<const Function *, 8> NewCalledFunctions(CalledFunctions);
2439 
2440       // Don't treat recursive functions as empty.
2441       if (!NewCalledFunctions.insert(CalledFn).second)
2442         return false;
2443 
2444       if (!cxxDtorIsEmpty(*CalledFn, NewCalledFunctions))
2445         return false;
2446     } else if (isa<ReturnInst>(*I))
2447       return true; // We're done.
2448     else if (I->mayHaveSideEffects())
2449       return false; // Destructor with side effects, bail.
2450   }
2451 
2452   return false;
2453 }
2454 
2455 static bool OptimizeEmptyGlobalCXXDtors(Function *CXAAtExitFn) {
2456   /// Itanium C++ ABI p3.3.5:
2457   ///
2458   ///   After constructing a global (or local static) object, that will require
2459   ///   destruction on exit, a termination function is registered as follows:
2460   ///
2461   ///   extern "C" int __cxa_atexit ( void (*f)(void *), void *p, void *d );
2462   ///
2463   ///   This registration, e.g. __cxa_atexit(f,p,d), is intended to cause the
2464   ///   call f(p) when DSO d is unloaded, before all such termination calls
2465   ///   registered before this one. It returns zero if registration is
2466   ///   successful, nonzero on failure.
2467 
2468   // This pass will look for calls to __cxa_atexit where the function is trivial
2469   // and remove them.
2470   bool Changed = false;
2471 
2472   for (auto I = CXAAtExitFn->user_begin(), E = CXAAtExitFn->user_end();
2473        I != E;) {
2474     // We're only interested in calls. Theoretically, we could handle invoke
2475     // instructions as well, but neither llvm-gcc nor clang generate invokes
2476     // to __cxa_atexit.
2477     CallInst *CI = dyn_cast<CallInst>(*I++);
2478     if (!CI)
2479       continue;
2480 
2481     Function *DtorFn =
2482       dyn_cast<Function>(CI->getArgOperand(0)->stripPointerCasts());
2483     if (!DtorFn)
2484       continue;
2485 
2486     SmallPtrSet<const Function *, 8> CalledFunctions;
2487     if (!cxxDtorIsEmpty(*DtorFn, CalledFunctions))
2488       continue;
2489 
2490     // Just remove the call.
2491     CI->replaceAllUsesWith(Constant::getNullValue(CI->getType()));
2492     CI->eraseFromParent();
2493 
2494     ++NumCXXDtorsRemoved;
2495 
2496     Changed |= true;
2497   }
2498 
2499   return Changed;
2500 }
2501 
2502 static bool optimizeGlobalsInModule(
2503     Module &M, const DataLayout &DL, TargetLibraryInfo *TLI,
2504     function_ref<DominatorTree &(Function &)> LookupDomTree) {
2505   SmallSet<const Comdat *, 8> NotDiscardableComdats;
2506   bool Changed = false;
2507   bool LocalChange = true;
2508   while (LocalChange) {
2509     LocalChange = false;
2510 
2511     NotDiscardableComdats.clear();
2512     for (const GlobalVariable &GV : M.globals())
2513       if (const Comdat *C = GV.getComdat())
2514         if (!GV.isDiscardableIfUnused() || !GV.use_empty())
2515           NotDiscardableComdats.insert(C);
2516     for (Function &F : M)
2517       if (const Comdat *C = F.getComdat())
2518         if (!F.isDefTriviallyDead())
2519           NotDiscardableComdats.insert(C);
2520     for (GlobalAlias &GA : M.aliases())
2521       if (const Comdat *C = GA.getComdat())
2522         if (!GA.isDiscardableIfUnused() || !GA.use_empty())
2523           NotDiscardableComdats.insert(C);
2524 
2525     // Delete functions that are trivially dead, ccc -> fastcc
2526     LocalChange |=
2527         OptimizeFunctions(M, TLI, LookupDomTree, NotDiscardableComdats);
2528 
2529     // Optimize global_ctors list.
2530     LocalChange |= optimizeGlobalCtorsList(M, [&](Function *F) {
2531       return EvaluateStaticConstructor(F, DL, TLI);
2532     });
2533 
2534     // Optimize non-address-taken globals.
2535     LocalChange |= OptimizeGlobalVars(M, TLI, LookupDomTree,
2536                                       NotDiscardableComdats);
2537 
2538     // Resolve aliases, when possible.
2539     LocalChange |= OptimizeGlobalAliases(M, NotDiscardableComdats);
2540 
2541     // Try to remove trivial global destructors if they are not removed
2542     // already.
2543     Function *CXAAtExitFn = FindCXAAtExit(M, TLI);
2544     if (CXAAtExitFn)
2545       LocalChange |= OptimizeEmptyGlobalCXXDtors(CXAAtExitFn);
2546 
2547     Changed |= LocalChange;
2548   }
2549 
2550   // TODO: Move all global ctors functions to the end of the module for code
2551   // layout.
2552 
2553   return Changed;
2554 }
2555 
2556 PreservedAnalyses GlobalOptPass::run(Module &M, AnalysisManager<Module> &AM) {
2557     auto &DL = M.getDataLayout();
2558     auto &TLI = AM.getResult<TargetLibraryAnalysis>(M);
2559     auto &FAM =
2560         AM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager();
2561     auto LookupDomTree = [&FAM](Function &F) -> DominatorTree &{
2562       return FAM.getResult<DominatorTreeAnalysis>(F);
2563     };
2564     if (!optimizeGlobalsInModule(M, DL, &TLI, LookupDomTree))
2565       return PreservedAnalyses::all();
2566     return PreservedAnalyses::none();
2567 }
2568 
2569 namespace {
2570 struct GlobalOptLegacyPass : public ModulePass {
2571   static char ID; // Pass identification, replacement for typeid
2572   GlobalOptLegacyPass() : ModulePass(ID) {
2573     initializeGlobalOptLegacyPassPass(*PassRegistry::getPassRegistry());
2574   }
2575 
2576   bool runOnModule(Module &M) override {
2577     if (skipModule(M))
2578       return false;
2579 
2580     auto &DL = M.getDataLayout();
2581     auto *TLI = &getAnalysis<TargetLibraryInfoWrapperPass>().getTLI();
2582     auto LookupDomTree = [this](Function &F) -> DominatorTree & {
2583       return this->getAnalysis<DominatorTreeWrapperPass>(F).getDomTree();
2584     };
2585     return optimizeGlobalsInModule(M, DL, TLI, LookupDomTree);
2586   }
2587 
2588   void getAnalysisUsage(AnalysisUsage &AU) const override {
2589     AU.addRequired<TargetLibraryInfoWrapperPass>();
2590     AU.addRequired<DominatorTreeWrapperPass>();
2591   }
2592 };
2593 }
2594 
2595 char GlobalOptLegacyPass::ID = 0;
2596 INITIALIZE_PASS_BEGIN(GlobalOptLegacyPass, "globalopt",
2597                       "Global Variable Optimizer", false, false)
2598 INITIALIZE_PASS_DEPENDENCY(TargetLibraryInfoWrapperPass)
2599 INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
2600 INITIALIZE_PASS_END(GlobalOptLegacyPass, "globalopt",
2601                     "Global Variable Optimizer", false, false)
2602 
2603 ModulePass *llvm::createGlobalOptimizerPass() {
2604   return new GlobalOptLegacyPass();
2605 }
2606