InstCombineLoadStoreAlloca.cpp revision 8908ff207d8dc0daccde3dc5710dc805ec98e1fa
18d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//===- InstCombineLoadStoreAlloca.cpp -------------------------------------===//
28d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//
38d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//                     The LLVM Compiler Infrastructure
48d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//
58d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// This file is distributed under the University of Illinois Open Source
68d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// License. See LICENSE.TXT for details.
78d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//
88d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//===----------------------------------------------------------------------===//
98d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//
108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// This file implements the visit functions for load, store and alloca.
118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//
128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner//===----------------------------------------------------------------------===//
138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "InstCombine.h"
158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/IntrinsicInst.h"
16dd9344f3face8f1978a7f9f393c31b628144d1f6Dan Gohman#include "llvm/Analysis/Loads.h"
178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/Target/TargetData.h"
188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/Transforms/Utils/BasicBlockUtils.h"
198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/Transforms/Utils/Local.h"
208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/ADT/Statistic.h"
218d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerusing namespace llvm;
228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
238d9b8d717e665945b31b0742b901561fb433ceceChris LattnerSTATISTIC(NumDeadStore, "Number of dead stores eliminated");
248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
258d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitAllocaInst(AllocaInst &AI) {
2605d62537276197b3351d9887f4967590b6a3b901Dan Gohman  // Ensure that the alloca array size argument has type intptr_t, so that
2705d62537276197b3351d9887f4967590b6a3b901Dan Gohman  // any casting is exposed early.
2805d62537276197b3351d9887f4967590b6a3b901Dan Gohman  if (TD) {
29db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner    Type *IntPtrTy = TD->getIntPtrType(AI.getContext());
3005d62537276197b3351d9887f4967590b6a3b901Dan Gohman    if (AI.getArraySize()->getType() != IntPtrTy) {
3105d62537276197b3351d9887f4967590b6a3b901Dan Gohman      Value *V = Builder->CreateIntCast(AI.getArraySize(),
3205d62537276197b3351d9887f4967590b6a3b901Dan Gohman                                        IntPtrTy, false);
3305d62537276197b3351d9887f4967590b6a3b901Dan Gohman      AI.setOperand(0, V);
3405d62537276197b3351d9887f4967590b6a3b901Dan Gohman      return &AI;
3505d62537276197b3351d9887f4967590b6a3b901Dan Gohman    }
3605d62537276197b3351d9887f4967590b6a3b901Dan Gohman  }
3705d62537276197b3351d9887f4967590b6a3b901Dan Gohman
388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Convert: alloca Ty, C - where C is a constant != 1 into: alloca [C x Ty], 1
398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (AI.isArrayAllocation()) {  // Check C != 1
408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (const ConstantInt *C = dyn_cast<ConstantInt>(AI.getArraySize())) {
41db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner      Type *NewTy =
428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ArrayType::get(AI.getAllocatedType(), C->getZExtValue());
438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      assert(isa<AllocaInst>(AI) && "Unknown type of allocation inst!");
448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      AllocaInst *New = Builder->CreateAlloca(NewTy, 0, AI.getName());
458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      New->setAlignment(AI.getAlignment());
468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Scan to the end of the allocation instructions, to skip over a block of
488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // allocas if possible...also skip interleaved debug info
498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      //
508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      BasicBlock::iterator It = New;
518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      while (isa<AllocaInst>(*It) || isa<DbgInfoIntrinsic>(*It)) ++It;
528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Now that I is pointing to the first non-allocation-inst in the block,
548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // insert our getelementptr instruction...
558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      //
568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Value *NullIdx =Constant::getNullValue(Type::getInt32Ty(AI.getContext()));
578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Value *Idx[2];
588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Idx[0] = NullIdx;
598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Idx[1] = NullIdx;
60e6f364b6c44eda14cd4ad54366ea5cc7246b9500Eli Friedman      Instruction *GEP =
61e6f364b6c44eda14cd4ad54366ea5cc7246b9500Eli Friedman           GetElementPtrInst::CreateInBounds(New, Idx, Idx + 2,
62e6f364b6c44eda14cd4ad54366ea5cc7246b9500Eli Friedman                                             New->getName()+".sub");
63e6f364b6c44eda14cd4ad54366ea5cc7246b9500Eli Friedman      InsertNewInstBefore(GEP, *It);
648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Now make everything use the getelementptr instead of the original
668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // allocation.
67e6f364b6c44eda14cd4ad54366ea5cc7246b9500Eli Friedman      return ReplaceInstUsesWith(AI, GEP);
688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    } else if (isa<UndefValue>(AI.getArraySize())) {
698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD && isa<AllocaInst>(AI) && AI.getAllocatedType()->isSized()) {
748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If alloca'ing a zero byte object, replace the alloca with a null pointer.
758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we only do this for alloca's, because malloc should allocate
768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // and return a unique pointer, even for a zero byte allocation.
778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (TD->getTypeAllocSize(AI.getAllocatedType()) == 0)
788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If the alignment is 0 (unspecified), assign it the preferred alignment.
818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (AI.getAlignment() == 0)
828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      AI.setAlignment(TD->getPrefTypeAlignment(AI.getAllocatedType()));
838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineLoadCast - Fold 'load (cast P)' -> cast (load P)' when possible.
908d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                        const TargetData *TD) {
928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(LI.getOperand(0));
938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
95db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  PointerType *DestTy = cast<PointerType>(CI->getType());
96db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type *DestPTy = DestTy->getElementType();
97db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  if (PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If the address spaces don't match, don't eliminate the cast.
1008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DestTy->getAddressSpace() != SrcTy->getAddressSpace())
1018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return 0;
1028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
103db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner    Type *SrcPTy = SrcTy->getElementType();
1048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1051df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (DestPTy->isIntegerTy() || DestPTy->isPointerTy() ||
1061df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands         DestPTy->isVectorTy()) {
1078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // If the source is an array, the code below will not succeed.  Check to
1088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
1098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // constants.
110db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner      if (ArrayType *ASrcTy = dyn_cast<ArrayType>(SrcPTy))
1118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (Constant *CSrc = dyn_cast<Constant>(CastOp))
1128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (ASrcTy->getNumElements() != 0) {
1138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Value *Idxs[2];
1148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Idxs[0] = Constant::getNullValue(Type::getInt32Ty(LI.getContext()));
1158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Idxs[1] = Idxs[0];
1168908ff207d8dc0daccde3dc5710dc805ec98e1faJay Foad            CastOp = ConstantExpr::getGetElementPtr(CSrc, Idxs);
1178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            SrcTy = cast<PointerType>(CastOp->getType());
1188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            SrcPTy = SrcTy->getElementType();
1198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          }
1208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (IC.getTargetData() &&
1221df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands          (SrcPTy->isIntegerTy() || SrcPTy->isPointerTy() ||
1231df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands            SrcPTy->isVectorTy()) &&
1248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          // Do not allow turning this into a load of an integer, which is then
1258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          // casted to a pointer, this pessimizes pointer analysis a lot.
1261df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands          (SrcPTy->isPointerTy() == LI.getType()->isPointerTy()) &&
1278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          IC.getTargetData()->getTypeSizeInBits(SrcPTy) ==
1288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner               IC.getTargetData()->getTypeSizeInBits(DestPTy)) {
1298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // Okay, we are casting from one integer or pointer type to another of
1318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // the same size.  Instead of casting the pointer before the load, cast
1328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // the result of the loaded value.
1336ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *NewLoad =
1348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          IC.Builder->CreateLoad(CastOp, LI.isVolatile(), CI->getName());
1356ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        NewLoad->setAlignment(LI.getAlignment());
1368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // Now cast the result of the load.
1378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return new BitCastInst(NewLoad, LI.getType());
1388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
1398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
1408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
1428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
1438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1448d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitLoadInst(LoadInst &LI) {
1458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Op = LI.getOperand(0);
1468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
1488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
1498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
150687140c818ba4b896329a83324714140b6580ef8Chris Lattner      getOrEnforceKnownAlignment(Op, TD->getPrefTypeAlignment(LI.getType()),TD);
1510fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned LoadAlign = LI.getAlignment();
1520fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned EffectiveLoadAlign = LoadAlign != 0 ? LoadAlign :
1530fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      TD->getABITypeAlignment(LI.getType());
1540fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman
1550fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    if (KnownAlign > EffectiveLoadAlign)
1568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      LI.setAlignment(KnownAlign);
1570fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    else if (LoadAlign == 0)
1580fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      LI.setAlignment(EffectiveLoadAlign);
1598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load (cast X) --> cast (load X) iff safe.
1628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Op))
1638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
1648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
1658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // None of the following transforms are legal for volatile loads.
1678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (LI.isVolatile()) return 0;
1688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple store-to-load forwarding and load CSE, to catch cases
170ab4c366274a582dd8146b2820c6b999cad5fce36Duncan Sands  // where there are several consecutive memory accesses to the same location,
1718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // separated by a few arithmetic operations.
1728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &LI;
1738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Value *AvailableVal = FindAvailableLoadedValue(Op, LI.getParent(), BBI,6))
1748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, AvailableVal);
1758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load(gep null, ...) -> unreachable
1778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op)) {
1788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    const Value *GEPI0 = GEPI->getOperand(0);
1798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // TODO: Consider a target hook for valid address spaces for this xform.
1808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (isa<ConstantPointerNull>(GEPI0) && GEPI->getPointerAddressSpace() == 0){
1818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Insert a new store to null instruction before the load to indicate
1828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // that this code is not reachable.  We do this instead of inserting
1838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // an unreachable instruction directly because we cannot modify the
1848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // CFG.
1858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      new StoreInst(UndefValue::get(LI.getType()),
1868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                    Constant::getNullValue(Op->getType()), &LI);
1878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
1888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
1898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load null/undef -> unreachable
1928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // TODO: Consider a target hook for valid address spaces for this xform.
1938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Op) ||
1948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      (isa<ConstantPointerNull>(Op) && LI.getPointerAddressSpace() == 0)) {
1958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Insert a new store to null instruction before the load to indicate that
1968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // this code is not reachable.  We do this instead of inserting an
1978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unreachable instruction directly because we cannot modify the CFG.
1988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    new StoreInst(UndefValue::get(LI.getType()),
1998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                  Constant::getNullValue(Op->getType()), &LI);
2008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
2018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Instcombine load (constantexpr_cast global) -> cast (load global)
2048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Op))
2058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
2068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
2078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
2088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Op->hasOneUse()) {
2108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Change select and PHI nodes to select values instead of addresses: this
2118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // helps alias analysis out a lot, allows many others simplifications, and
2128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // exposes redundancy in the code.
2138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we cannot do the transformation unless we know that the
2158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // introduced loads cannot trap!  Something like this is valid as long as
2168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the condition is always false: load (select bool %C, int* null, int* %G),
2178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // but it would not be valid if we transformed it to load from null
2188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unconditionally.
2198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (SelectInst *SI = dyn_cast<SelectInst>(Op)) {
2218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (Cond, &V1, &V2))  --> select(Cond, load &V1, load &V2).
22249db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      unsigned Align = LI.getAlignment();
22349db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      if (isSafeToLoadUnconditionally(SI->getOperand(1), SI, Align, TD) &&
22449db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson          isSafeToLoadUnconditionally(SI->getOperand(2), SI, Align, TD)) {
2256ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V1 = Builder->CreateLoad(SI->getOperand(1),
22649db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(1)->getName()+".val");
2276ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V2 = Builder->CreateLoad(SI->getOperand(2),
22849db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(2)->getName()+".val");
22949db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V1->setAlignment(Align);
23049db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V2->setAlignment(Align);
2318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return SelectInst::Create(SI->getCondition(), V1, V2);
2328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, null, P)) -> load P
2358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(1)))
2368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(2));
2388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, P, null)) -> load P
2428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(2)))
2438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(1));
2458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
2508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
2518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineStoreToCast - Fold store V, (cast P) -> store (cast V), P
2538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// when possible.  This makes it generally easy to do alias analysis and/or
2548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SROA/mem2reg of the memory object.
2558d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
2568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(SI.getOperand(1));
2578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
2588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
259db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type *DestPTy = cast<PointerType>(CI->getType())->getElementType();
260db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType());
2618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SrcTy == 0) return 0;
2628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
263db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type *SrcPTy = SrcTy->getElementType();
2648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2651df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!DestPTy->isIntegerTy() && !DestPTy->isPointerTy())
2668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// NewGEPIndices - If SrcPTy is an aggregate type, we can emit a "noop gep"
2698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// to its first element.  This allows us to handle things like:
2708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  ///   store i32 xxx, (bitcast {foo*, float}* %P to i32*)
2718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// on 32-bit hosts.
2728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  SmallVector<Value*, 4> NewGEPIndices;
2738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the source is an array, the code below will not succeed.  Check to
2758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
2768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // constants.
2771df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (SrcPTy->isArrayTy() || SrcPTy->isStructTy()) {
2788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Index through pointer.
2798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    Constant *Zero = Constant::getNullValue(Type::getInt32Ty(SI.getContext()));
2808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    NewGEPIndices.push_back(Zero);
2818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    while (1) {
283db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner      if (StructType *STy = dyn_cast<StructType>(SrcPTy)) {
2848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (!STy->getNumElements()) /* Struct can be empty {} */
2858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          break;
2868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = STy->getElementType(0);
288db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner      } else if (ArrayType *ATy = dyn_cast<ArrayType>(SrcPTy)) {
2898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = ATy->getElementType();
2918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else {
2928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
2938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    SrcTy = PointerType::get(SrcPTy, SrcTy->getAddressSpace());
2978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2991df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!SrcPTy->isIntegerTy() && !SrcPTy->isPointerTy())
3008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointers point into different address spaces or if they point to
3038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // values with different sizes, we can't do the transformation.
3048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!IC.getTargetData() ||
3058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SrcTy->getAddressSpace() !=
3068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        cast<PointerType>(CI->getType())->getAddressSpace() ||
3078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(SrcPTy) !=
3088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(DestPTy))
3098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Okay, we are casting from one integer or pointer type to another of
3128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the same size.  Instead of casting the pointer before
3138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the store, cast the value to be stored.
3148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *NewCast;
3158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *SIOp0 = SI.getOperand(0);
3168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Instruction::CastOps opcode = Instruction::BitCast;
317db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type* CastSrcTy = SIOp0->getType();
318db125cfaf57cc83e7dd7453de2d509bc8efd0e5eChris Lattner  Type* CastDstTy = SrcPTy;
3191df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (CastDstTy->isPointerTy()) {
320b0bc6c361da9009e8414efde317d9bbff755f6c0Duncan Sands    if (CastSrcTy->isIntegerTy())
3218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::IntToPtr;
3221df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  } else if (CastDstTy->isIntegerTy()) {
3231df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (SIOp0->getType()->isPointerTy())
3248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::PtrToInt;
3258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // SIOp0 is a pointer to aggregate and this is a store to the first field,
3288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // emit a GEP to index into its first field.
3298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!NewGEPIndices.empty())
3308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    CastOp = IC.Builder->CreateInBoundsGEP(CastOp, NewGEPIndices.begin(),
3318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                           NewGEPIndices.end());
3328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  NewCast = IC.Builder->CreateCast(opcode, SIOp0, CastDstTy,
3348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                   SIOp0->getName()+".c");
33517a0bf996fb61cdd43cec2cfc7db53145bbc767aDan Gohman  SI.setOperand(0, NewCast);
33617a0bf996fb61cdd43cec2cfc7db53145bbc767aDan Gohman  SI.setOperand(1, CastOp);
33717a0bf996fb61cdd43cec2cfc7db53145bbc767aDan Gohman  return &SI;
3388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// equivalentAddressValues - Test if A and B will obviously have the same
3418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value. This includes recognizing that %t0 and %t1 will have the same
3428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value in code like this:
3438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t0 = getelementptr \@a, 0, 3
3448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   store i32 0, i32* %t0
3458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t1 = getelementptr \@a, 0, 3
3468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t2 = load i32* %t1
3478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
3488d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic bool equivalentAddressValues(Value *A, Value *B) {
3498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values are trivially equivalent.
3508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (A == B) return true;
3518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values come form identical arithmetic instructions.
3538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // This uses isIdenticalToWhenDefined instead of isIdenticalTo because
3548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // its only used to compare two uses within the same basic block, which
3558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // means that they'll always either have the same value or one of them
3568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // will have an undefined value.
3578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<BinaryOperator>(A) ||
3588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<CastInst>(A) ||
3598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<PHINode>(A) ||
3608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<GetElementPtrInst>(A))
3618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *BI = dyn_cast<Instruction>(B))
3628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (cast<Instruction>(A)->isIdenticalToWhenDefined(BI))
3638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return true;
3648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Otherwise they may not be equivalent.
3668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return false;
3678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3698d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitStoreInst(StoreInst &SI) {
3708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Val = SI.getOperand(0);
3718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Ptr = SI.getOperand(1);
3728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a single use, zapify the store, making the
3748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // alloca dead.
3758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!SI.isVolatile()) {
3768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Ptr->hasOneUse()) {
3778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (isa<AllocaInst>(Ptr))
3788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return EraseInstFromFunction(SI);
3798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Ptr)) {
3808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (isa<AllocaInst>(GEP->getOperand(0))) {
3818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (GEP->getOperand(0)->hasOneUse())
3828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            return EraseInstFromFunction(SI);
3838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
3848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
3858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
3868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
3898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
3908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
391687140c818ba4b896329a83324714140b6580ef8Chris Lattner      getOrEnforceKnownAlignment(Ptr, TD->getPrefTypeAlignment(Val->getType()),
392687140c818ba4b896329a83324714140b6580ef8Chris Lattner                                 TD);
3930fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned StoreAlign = SI.getAlignment();
3940fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned EffectiveStoreAlign = StoreAlign != 0 ? StoreAlign :
3950fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      TD->getABITypeAlignment(Val->getType());
3960fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman
3970fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    if (KnownAlign > EffectiveStoreAlign)
3988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setAlignment(KnownAlign);
3990fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    else if (StoreAlign == 0)
4000fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      SI.setAlignment(EffectiveStoreAlign);
4018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple DSE, to catch cases where there are several consecutive
4048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // stores to the same location, separated by a few arithmetic operations. This
4058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // situation often occurs with bitfield accesses.
4068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &SI;
4078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (unsigned ScanInsts = 6; BBI != SI.getParent()->begin() && ScanInsts;
4088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       --ScanInsts) {
4098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
41029fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // Don't count debug info directives, lest they affect codegen,
41129fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // and we skip pointer-to-pointer bitcasts, which are NOPs.
41229fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    if (isa<DbgInfoIntrinsic>(BBI) ||
4131df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands        (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
4148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      ScanInsts++;
4158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      continue;
4168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (StoreInst *PrevSI = dyn_cast<StoreInst>(BBI)) {
4198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Prev store isn't volatile, and stores to the same location?
4208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (!PrevSI->isVolatile() &&equivalentAddressValues(PrevSI->getOperand(1),
4218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                                          SI.getOperand(1))) {
4228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++NumDeadStore;
4238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++BBI;
4248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        EraseInstFromFunction(*PrevSI);
4258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        continue;
4268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
4278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this is a load, we have to stop.  However, if the loaded value is from
4318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the pointer we're loading and is producing the pointer we're storing,
4328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // then *this* store is dead (X = load P; store X -> P).
4338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
434948d9e7ec7c4f8da50d2640d3564b01d40ffd4b1Jin-Gu Kang      if (LI == Val && equivalentAddressValues(LI->getOperand(0), Ptr) &&
435948d9e7ec7c4f8da50d2640d3564b01d40ffd4b1Jin-Gu Kang          !SI.isVolatile())
436948d9e7ec7c4f8da50d2640d3564b01d40ffd4b1Jin-Gu Kang        return EraseInstFromFunction(SI);
4378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Otherwise, this is a load from some other location.  Stores before it
4398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // may not be dead.
4408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Don't skip over loads or things that can modify memory.
4448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BBI->mayWriteToMemory() || BBI->mayReadFromMemory())
4458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SI.isVolatile()) return 0;  // Don't hack volatile stores.
4508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store X, null    -> turns into 'unreachable' in SimplifyCFG
4528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<ConstantPointerNull>(Ptr) && SI.getPointerAddressSpace() == 0) {
4538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!isa<UndefValue>(Val)) {
4548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setOperand(0, UndefValue::get(Val->getType()));
4558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *U = dyn_cast<Instruction>(Val))
4568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        Worklist.Add(U);  // Dropped a use.
4578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;  // Do not modify these!
4598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store undef, Ptr -> noop
4628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Val))
4638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return EraseInstFromFunction(SI);
4648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointer destination is a cast, see if we can fold the cast into the
4668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // source instead.
4678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Ptr))
4688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
4708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
4718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
4728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
4748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If this store is the last instruction in the basic block (possibly
477a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // excepting debug info instructions), and if the block ends with an
478a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // unconditional branch, try to move it to the successor block.
4798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = &SI;
4808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  do {
4818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    ++BBI;
48229fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez  } while (isa<DbgInfoIntrinsic>(BBI) ||
4831df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy()));
4848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (BranchInst *BI = dyn_cast<BranchInst>(BBI))
4858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BI->isUnconditional())
4868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (SimplifyStoreAtEndOfBlock(SI))
4878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return 0;  // xform done!
4888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
4908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
4918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SimplifyStoreAtEndOfBlock - Turn things like:
4938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   if () { *P = v1; } else { *P = v2 }
4948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
4958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
4968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// Simplify things like:
4978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   *P = v1; if () { *P = v2; }
4988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
4998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
5008d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerbool InstCombiner::SimplifyStoreAtEndOfBlock(StoreInst &SI) {
5018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *StoreBB = SI.getParent();
5028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Check to see if the successor block has exactly two incoming edges.  If
5048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // so, see if the other predecessor contains a store to the same location.
5058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // if so, insert a PHI node (if needed) and move the stores down.
5068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *DestBB = StoreBB->getTerminator()->getSuccessor(0);
5078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Determine whether Dest has exactly two predecessors and, if so, compute
5098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the other predecessor.
5108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  pred_iterator PI = pred_begin(DestBB);
511a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  BasicBlock *P = *PI;
5128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *OtherBB = 0;
513a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif
514a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  if (P != StoreBB)
515a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif    OtherBB = P;
516a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif
517a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  if (++PI == pred_end(DestBB))
5188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
520a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  P = *PI;
521a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  if (P != StoreBB) {
5228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBB)
5238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
524a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif    OtherBB = P;
5258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
5268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (++PI != pred_end(DestBB))
5278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Bail out if all the relevant blocks aren't distinct (this can happen,
5308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // for example, if SI is in an infinite loop)
5318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (StoreBB == DestBB || OtherBB == DestBB)
5328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Verify that the other block ends in a branch and is not otherwise empty.
5358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = OtherBB->getTerminator();
5368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BranchInst *OtherBr = dyn_cast<BranchInst>(BBI);
5378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!OtherBr || BBI == OtherBB->begin())
5388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the other block ends in an unconditional branch, check for the 'if then
5418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // else' case.  there is an instruction before the branch.
5428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  StoreInst *OtherStore = 0;
5438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (OtherBr->isUnconditional()) {
5448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
5458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Skip over debugging info.
54629fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    while (isa<DbgInfoIntrinsic>(BBI) ||
5471df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
5488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (BBI==OtherBB->begin())
5498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
5508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      --BBI;
5518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
5528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this isn't a store, isn't a store to the same location, or if the
5538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // alignments differ, bail out.
5548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherStore = dyn_cast<StoreInst>(BBI);
5558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!OtherStore || OtherStore->getOperand(1) != SI.getOperand(1) ||
5568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        OtherStore->getAlignment() != SI.getAlignment())
5578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  } else {
5598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Otherwise, the other block ended with a conditional branch. If one of the
5608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // destinations is StoreBB, then we have the if/then case.
5618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBr->getSuccessor(0) != StoreBB &&
5628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        OtherBr->getSuccessor(1) != StoreBB)
5638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Okay, we know that OtherBr now goes to Dest and StoreBB, so this is an
5668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // if/then triangle.  See if there is a store to the same ptr as SI that
5678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // lives in OtherBB.
5688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    for (;; --BBI) {
5698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Check to see if we find the matching store.
5708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if ((OtherStore = dyn_cast<StoreInst>(BBI))) {
5718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (OtherStore->getOperand(1) != SI.getOperand(1) ||
5728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            OtherStore->getAlignment() != SI.getAlignment())
5738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return false;
5748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
5758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
5768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // If we find something that may be using or overwriting the stored
5778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // value, or if we run out of instructions, we can't do the xform.
5788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (BBI->mayReadFromMemory() || BBI->mayWriteToMemory() ||
5798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          BBI == OtherBB->begin())
5808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
5818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
5828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // In order to eliminate the store in OtherBr, we have to
5848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // make sure nothing reads or overwrites the stored value in
5858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // StoreBB.
5868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    for (BasicBlock::iterator I = StoreBB->begin(); &*I != &SI; ++I) {
5878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // FIXME: This should really be AA driven.
5888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (I->mayReadFromMemory() || I->mayWriteToMemory())
5898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
5908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
5918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
5928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Insert a PHI node now if we need it.
5948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *MergedVal = OtherStore->getOperand(0);
5958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (MergedVal != SI.getOperand(0)) {
5963ecfc861b4365f341c5c969b40e1afccde676e6fJay Foad    PHINode *PN = PHINode::Create(MergedVal->getType(), 2, "storemerge");
5978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(SI.getOperand(0), SI.getParent());
5988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(OtherStore->getOperand(0), OtherBB);
5998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    MergedVal = InsertNewInstBefore(PN, DestBB->front());
6008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
6018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Advance to a place where it is safe to insert the new store and
6038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // insert it.
6048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = DestBB->getFirstNonPHI();
605a311c34d2af7c750f016ef5e4c41bee77a1dfac7Eli Friedman  StoreInst *NewSI = new StoreInst(MergedVal, SI.getOperand(1),
606a311c34d2af7c750f016ef5e4c41bee77a1dfac7Eli Friedman                                   OtherStore->isVolatile(),
607a311c34d2af7c750f016ef5e4c41bee77a1dfac7Eli Friedman                                   SI.getAlignment());
608a311c34d2af7c750f016ef5e4c41bee77a1dfac7Eli Friedman  InsertNewInstBefore(NewSI, *BBI);
609a311c34d2af7c750f016ef5e4c41bee77a1dfac7Eli Friedman  NewSI->setDebugLoc(OtherStore->getDebugLoc());
610a311c34d2af7c750f016ef5e4c41bee77a1dfac7Eli Friedman
6118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Nuke the old stores.
6128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(SI);
6138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(*OtherStore);
6148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return true;
6158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
616