InstCombineLoadStoreAlloca.cpp revision 1df9859c40492511b8aa4321eb76496005d3b75b
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"
168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/Target/TargetData.h"
178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/Transforms/Utils/BasicBlockUtils.h"
188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/Transforms/Utils/Local.h"
198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner#include "llvm/ADT/Statistic.h"
208d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerusing namespace llvm;
218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
228d9b8d717e665945b31b0742b901561fb433ceceChris LattnerSTATISTIC(NumDeadStore, "Number of dead stores eliminated");
238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
248d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitAllocaInst(AllocaInst &AI) {
258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Convert: alloca Ty, C - where C is a constant != 1 into: alloca [C x Ty], 1
268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (AI.isArrayAllocation()) {  // Check C != 1
278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (const ConstantInt *C = dyn_cast<ConstantInt>(AI.getArraySize())) {
288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      const Type *NewTy =
298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ArrayType::get(AI.getAllocatedType(), C->getZExtValue());
308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      assert(isa<AllocaInst>(AI) && "Unknown type of allocation inst!");
318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      AllocaInst *New = Builder->CreateAlloca(NewTy, 0, AI.getName());
328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      New->setAlignment(AI.getAlignment());
338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Scan to the end of the allocation instructions, to skip over a block of
358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // allocas if possible...also skip interleaved debug info
368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      //
378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      BasicBlock::iterator It = New;
388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      while (isa<AllocaInst>(*It) || isa<DbgInfoIntrinsic>(*It)) ++It;
398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Now that I is pointing to the first non-allocation-inst in the block,
418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // insert our getelementptr instruction...
428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      //
438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Value *NullIdx =Constant::getNullValue(Type::getInt32Ty(AI.getContext()));
448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Value *Idx[2];
458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Idx[0] = NullIdx;
468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Idx[1] = NullIdx;
478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Value *V = GetElementPtrInst::CreateInBounds(New, Idx, Idx + 2,
488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                                   New->getName()+".sub", It);
498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Now make everything use the getelementptr instead of the original
518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // allocation.
528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, V);
538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    } else if (isa<UndefValue>(AI.getArraySize())) {
548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD && isa<AllocaInst>(AI) && AI.getAllocatedType()->isSized()) {
598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If alloca'ing a zero byte object, replace the alloca with a null pointer.
608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we only do this for alloca's, because malloc should allocate
618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // and return a unique pointer, even for a zero byte allocation.
628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (TD->getTypeAllocSize(AI.getAllocatedType()) == 0)
638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If the alignment is 0 (unspecified), assign it the preferred alignment.
668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (AI.getAlignment() == 0)
678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      AI.setAlignment(TD->getPrefTypeAlignment(AI.getAllocatedType()));
688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineLoadCast - Fold 'load (cast P)' -> cast (load P)' when possible.
758d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                        const TargetData *TD) {
778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(LI.getOperand(0));
788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const PointerType *DestTy = cast<PointerType>(CI->getType());
818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *DestPTy = DestTy->getElementType();
828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If the address spaces don't match, don't eliminate the cast.
858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DestTy->getAddressSpace() != SrcTy->getAddressSpace())
868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return 0;
878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    const Type *SrcPTy = SrcTy->getElementType();
898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
901df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (DestPTy->isIntegerTy() || DestPTy->isPointerTy() ||
911df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands         DestPTy->isVectorTy()) {
928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // If the source is an array, the code below will not succeed.  Check to
938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // constants.
958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (const ArrayType *ASrcTy = dyn_cast<ArrayType>(SrcPTy))
968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (Constant *CSrc = dyn_cast<Constant>(CastOp))
978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (ASrcTy->getNumElements() != 0) {
988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Value *Idxs[2];
998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Idxs[0] = Constant::getNullValue(Type::getInt32Ty(LI.getContext()));
1008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Idxs[1] = Idxs[0];
1018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            CastOp = ConstantExpr::getGetElementPtr(CSrc, Idxs, 2);
1028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            SrcTy = cast<PointerType>(CastOp->getType());
1038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            SrcPTy = SrcTy->getElementType();
1048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          }
1058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (IC.getTargetData() &&
1071df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands          (SrcPTy->isIntegerTy() || SrcPTy->isPointerTy() ||
1081df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands            SrcPTy->isVectorTy()) &&
1098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          // Do not allow turning this into a load of an integer, which is then
1108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          // casted to a pointer, this pessimizes pointer analysis a lot.
1111df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands          (SrcPTy->isPointerTy() == LI.getType()->isPointerTy()) &&
1128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          IC.getTargetData()->getTypeSizeInBits(SrcPTy) ==
1138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner               IC.getTargetData()->getTypeSizeInBits(DestPTy)) {
1148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // Okay, we are casting from one integer or pointer type to another of
1168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // the same size.  Instead of casting the pointer before the load, cast
1178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // the result of the loaded value.
1186ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *NewLoad =
1198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          IC.Builder->CreateLoad(CastOp, LI.isVolatile(), CI->getName());
1206ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        NewLoad->setAlignment(LI.getAlignment());
1218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // Now cast the result of the load.
1228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return new BitCastInst(NewLoad, LI.getType());
1238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
1248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
1258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
1278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
1288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1298d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitLoadInst(LoadInst &LI) {
1308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Op = LI.getOperand(0);
1318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
1338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
1348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
1358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      GetOrEnforceKnownAlignment(Op, TD->getPrefTypeAlignment(LI.getType()));
1368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (KnownAlign >
1378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        (LI.getAlignment() == 0 ? TD->getABITypeAlignment(LI.getType()) :
1388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                  LI.getAlignment()))
1398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      LI.setAlignment(KnownAlign);
1408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load (cast X) --> cast (load X) iff safe.
1438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Op))
1448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
1458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
1468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // None of the following transforms are legal for volatile loads.
1488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (LI.isVolatile()) return 0;
1498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple store-to-load forwarding and load CSE, to catch cases
1518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // where there are several consequtive memory accesses to the same location,
1528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // separated by a few arithmetic operations.
1538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &LI;
1548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Value *AvailableVal = FindAvailableLoadedValue(Op, LI.getParent(), BBI,6))
1558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, AvailableVal);
1568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load(gep null, ...) -> unreachable
1588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op)) {
1598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    const Value *GEPI0 = GEPI->getOperand(0);
1608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // TODO: Consider a target hook for valid address spaces for this xform.
1618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (isa<ConstantPointerNull>(GEPI0) && GEPI->getPointerAddressSpace() == 0){
1628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Insert a new store to null instruction before the load to indicate
1638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // that this code is not reachable.  We do this instead of inserting
1648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // an unreachable instruction directly because we cannot modify the
1658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // CFG.
1668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      new StoreInst(UndefValue::get(LI.getType()),
1678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                    Constant::getNullValue(Op->getType()), &LI);
1688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
1698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
1708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load null/undef -> unreachable
1738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // TODO: Consider a target hook for valid address spaces for this xform.
1748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Op) ||
1758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      (isa<ConstantPointerNull>(Op) && LI.getPointerAddressSpace() == 0)) {
1768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Insert a new store to null instruction before the load to indicate that
1778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // this code is not reachable.  We do this instead of inserting an
1788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unreachable instruction directly because we cannot modify the CFG.
1798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    new StoreInst(UndefValue::get(LI.getType()),
1808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                  Constant::getNullValue(Op->getType()), &LI);
1818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
1828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Instcombine load (constantexpr_cast global) -> cast (load global)
1858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Op))
1868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
1878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
1888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
1898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Op->hasOneUse()) {
1918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Change select and PHI nodes to select values instead of addresses: this
1928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // helps alias analysis out a lot, allows many others simplifications, and
1938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // exposes redundancy in the code.
1948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
1958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we cannot do the transformation unless we know that the
1968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // introduced loads cannot trap!  Something like this is valid as long as
1978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the condition is always false: load (select bool %C, int* null, int* %G),
1988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // but it would not be valid if we transformed it to load from null
1998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unconditionally.
2008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (SelectInst *SI = dyn_cast<SelectInst>(Op)) {
2028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (Cond, &V1, &V2))  --> select(Cond, load &V1, load &V2).
20349db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      unsigned Align = LI.getAlignment();
20449db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      if (isSafeToLoadUnconditionally(SI->getOperand(1), SI, Align, TD) &&
20549db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson          isSafeToLoadUnconditionally(SI->getOperand(2), SI, Align, TD)) {
2066ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V1 = Builder->CreateLoad(SI->getOperand(1),
20749db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(1)->getName()+".val");
2086ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V2 = Builder->CreateLoad(SI->getOperand(2),
20949db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(2)->getName()+".val");
21049db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V1->setAlignment(Align);
21149db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V2->setAlignment(Align);
2128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return SelectInst::Create(SI->getCondition(), V1, V2);
2138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, null, P)) -> load P
2168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(1)))
2178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(2));
2198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, P, null)) -> load P
2238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(2)))
2248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(1));
2268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
2318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
2328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineStoreToCast - Fold store V, (cast P) -> store (cast V), P
2348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// when possible.  This makes it generally easy to do alias analysis and/or
2358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SROA/mem2reg of the memory object.
2368d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
2378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(SI.getOperand(1));
2388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
2398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *DestPTy = cast<PointerType>(CI->getType())->getElementType();
2418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType());
2428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SrcTy == 0) return 0;
2438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *SrcPTy = SrcTy->getElementType();
2458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2461df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!DestPTy->isIntegerTy() && !DestPTy->isPointerTy())
2478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// NewGEPIndices - If SrcPTy is an aggregate type, we can emit a "noop gep"
2508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// to its first element.  This allows us to handle things like:
2518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  ///   store i32 xxx, (bitcast {foo*, float}* %P to i32*)
2528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// on 32-bit hosts.
2538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  SmallVector<Value*, 4> NewGEPIndices;
2548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the source is an array, the code below will not succeed.  Check to
2568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
2578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // constants.
2581df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (SrcPTy->isArrayTy() || SrcPTy->isStructTy()) {
2598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Index through pointer.
2608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    Constant *Zero = Constant::getNullValue(Type::getInt32Ty(SI.getContext()));
2618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    NewGEPIndices.push_back(Zero);
2628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    while (1) {
2648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (const StructType *STy = dyn_cast<StructType>(SrcPTy)) {
2658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (!STy->getNumElements()) /* Struct can be empty {} */
2668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          break;
2678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = STy->getElementType(0);
2698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else if (const ArrayType *ATy = dyn_cast<ArrayType>(SrcPTy)) {
2708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = ATy->getElementType();
2728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else {
2738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
2748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    SrcTy = PointerType::get(SrcPTy, SrcTy->getAddressSpace());
2788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2801df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!SrcPTy->isIntegerTy() && !SrcPTy->isPointerTy())
2818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointers point into different address spaces or if they point to
2848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // values with different sizes, we can't do the transformation.
2858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!IC.getTargetData() ||
2868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SrcTy->getAddressSpace() !=
2878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        cast<PointerType>(CI->getType())->getAddressSpace() ||
2888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(SrcPTy) !=
2898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(DestPTy))
2908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Okay, we are casting from one integer or pointer type to another of
2938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the same size.  Instead of casting the pointer before
2948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the store, cast the value to be stored.
2958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *NewCast;
2968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *SIOp0 = SI.getOperand(0);
2978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Instruction::CastOps opcode = Instruction::BitCast;
2988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type* CastSrcTy = SIOp0->getType();
2998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type* CastDstTy = SrcPTy;
3001df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (CastDstTy->isPointerTy()) {
301b0bc6c361da9009e8414efde317d9bbff755f6c0Duncan Sands    if (CastSrcTy->isIntegerTy())
3028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::IntToPtr;
3031df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  } else if (CastDstTy->isIntegerTy()) {
3041df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (SIOp0->getType()->isPointerTy())
3058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::PtrToInt;
3068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // SIOp0 is a pointer to aggregate and this is a store to the first field,
3098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // emit a GEP to index into its first field.
3108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!NewGEPIndices.empty())
3118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    CastOp = IC.Builder->CreateInBoundsGEP(CastOp, NewGEPIndices.begin(),
3128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                           NewGEPIndices.end());
3138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  NewCast = IC.Builder->CreateCast(opcode, SIOp0, CastDstTy,
3158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                   SIOp0->getName()+".c");
3168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return new StoreInst(NewCast, CastOp);
3178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// equivalentAddressValues - Test if A and B will obviously have the same
3208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value. This includes recognizing that %t0 and %t1 will have the same
3218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value in code like this:
3228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t0 = getelementptr \@a, 0, 3
3238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   store i32 0, i32* %t0
3248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t1 = getelementptr \@a, 0, 3
3258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t2 = load i32* %t1
3268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
3278d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic bool equivalentAddressValues(Value *A, Value *B) {
3288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values are trivially equivalent.
3298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (A == B) return true;
3308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values come form identical arithmetic instructions.
3328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // This uses isIdenticalToWhenDefined instead of isIdenticalTo because
3338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // its only used to compare two uses within the same basic block, which
3348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // means that they'll always either have the same value or one of them
3358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // will have an undefined value.
3368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<BinaryOperator>(A) ||
3378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<CastInst>(A) ||
3388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<PHINode>(A) ||
3398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<GetElementPtrInst>(A))
3408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *BI = dyn_cast<Instruction>(B))
3418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (cast<Instruction>(A)->isIdenticalToWhenDefined(BI))
3428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return true;
3438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Otherwise they may not be equivalent.
3458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return false;
3468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// If this instruction has two uses, one of which is a llvm.dbg.declare,
3498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// return the llvm.dbg.declare.
3508d9b8d717e665945b31b0742b901561fb433ceceChris LattnerDbgDeclareInst *InstCombiner::hasOneUsePlusDeclare(Value *V) {
3518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!V->hasNUses(2))
3528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (Value::use_iterator UI = V->use_begin(), E = V->use_end();
3548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       UI != E; ++UI) {
3558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(UI))
3568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return DI;
3578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (isa<BitCastInst>(UI) && UI->hasOneUse()) {
3588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(UI->use_begin()))
3598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return DI;
3608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
3618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
3638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3658d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitStoreInst(StoreInst &SI) {
3668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Val = SI.getOperand(0);
3678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Ptr = SI.getOperand(1);
3688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a single use, zapify the store, making the
3708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // alloca dead.
3718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a two uses, the other one being a
3728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // llvm.dbg.declare, zapify the store and the declare, making the
373d3dc3cc98f0366a9860a68eaa1f823dfc7fa310bEric Christopher  // alloca dead.  We must do this to prevent declares from affecting
3748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // codegen.
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          if (DbgDeclareInst *DI = hasOneUsePlusDeclare(GEP->getOperand(0))) {
3848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            EraseInstFromFunction(*DI);
3858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            return EraseInstFromFunction(SI);
3868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          }
3878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
3888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
3898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
3908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DbgDeclareInst *DI = hasOneUsePlusDeclare(Ptr)) {
3918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      EraseInstFromFunction(*DI);
3928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return EraseInstFromFunction(SI);
3938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
3948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
3978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
3988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
3998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      GetOrEnforceKnownAlignment(Ptr, TD->getPrefTypeAlignment(Val->getType()));
4008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (KnownAlign >
4018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        (SI.getAlignment() == 0 ? TD->getABITypeAlignment(Val->getType()) :
4028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                  SI.getAlignment()))
4038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setAlignment(KnownAlign);
4048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple DSE, to catch cases where there are several consecutive
4078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // stores to the same location, separated by a few arithmetic operations. This
4088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // situation often occurs with bitfield accesses.
4098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &SI;
4108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (unsigned ScanInsts = 6; BBI != SI.getParent()->begin() && ScanInsts;
4118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       --ScanInsts) {
4128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
41329fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // Don't count debug info directives, lest they affect codegen,
41429fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // and we skip pointer-to-pointer bitcasts, which are NOPs.
41529fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    if (isa<DbgInfoIntrinsic>(BBI) ||
4161df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands        (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
4178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      ScanInsts++;
4188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      continue;
4198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (StoreInst *PrevSI = dyn_cast<StoreInst>(BBI)) {
4228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Prev store isn't volatile, and stores to the same location?
4238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (!PrevSI->isVolatile() &&equivalentAddressValues(PrevSI->getOperand(1),
4248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                                          SI.getOperand(1))) {
4258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++NumDeadStore;
4268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++BBI;
4278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        EraseInstFromFunction(*PrevSI);
4288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        continue;
4298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
4308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this is a load, we have to stop.  However, if the loaded value is from
4348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the pointer we're loading and is producing the pointer we're storing,
4358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // then *this* store is dead (X = load P; store X -> P).
4368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
4378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (LI == Val && equivalentAddressValues(LI->getOperand(0), Ptr) &&
4388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          !SI.isVolatile())
4398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return EraseInstFromFunction(SI);
4408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Otherwise, this is a load from some other location.  Stores before it
4428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // may not be dead.
4438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Don't skip over loads or things that can modify memory.
4478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BBI->mayWriteToMemory() || BBI->mayReadFromMemory())
4488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SI.isVolatile()) return 0;  // Don't hack volatile stores.
4538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store X, null    -> turns into 'unreachable' in SimplifyCFG
4558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<ConstantPointerNull>(Ptr) && SI.getPointerAddressSpace() == 0) {
4568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!isa<UndefValue>(Val)) {
4578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setOperand(0, UndefValue::get(Val->getType()));
4588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *U = dyn_cast<Instruction>(Val))
4598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        Worklist.Add(U);  // Dropped a use.
4608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;  // Do not modify these!
4628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store undef, Ptr -> noop
4658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Val))
4668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return EraseInstFromFunction(SI);
4678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointer destination is a cast, see if we can fold the cast into the
4698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // source instead.
4708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Ptr))
4718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
4738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
4748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
4758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
4778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If this store is the last instruction in the basic block (possibly
480a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // excepting debug info instructions), and if the block ends with an
481a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // unconditional branch, try to move it to the successor block.
4828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = &SI;
4838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  do {
4848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    ++BBI;
48529fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez  } while (isa<DbgInfoIntrinsic>(BBI) ||
4861df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy()));
4878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (BranchInst *BI = dyn_cast<BranchInst>(BBI))
4888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BI->isUnconditional())
4898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (SimplifyStoreAtEndOfBlock(SI))
4908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return 0;  // xform done!
4918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
4938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
4948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SimplifyStoreAtEndOfBlock - Turn things like:
4968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   if () { *P = v1; } else { *P = v2 }
4978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
4988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
4998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// Simplify things like:
5008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   *P = v1; if () { *P = v2; }
5018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
5028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
5038d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerbool InstCombiner::SimplifyStoreAtEndOfBlock(StoreInst &SI) {
5048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *StoreBB = SI.getParent();
5058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Check to see if the successor block has exactly two incoming edges.  If
5078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // so, see if the other predecessor contains a store to the same location.
5088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // if so, insert a PHI node (if needed) and move the stores down.
5098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *DestBB = StoreBB->getTerminator()->getSuccessor(0);
5108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Determine whether Dest has exactly two predecessors and, if so, compute
5128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the other predecessor.
5138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  pred_iterator PI = pred_begin(DestBB);
5148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *OtherBB = 0;
5158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (*PI != StoreBB)
5168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherBB = *PI;
5178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  ++PI;
5188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (PI == pred_end(DestBB))
5198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (*PI != StoreBB) {
5228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBB)
5238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherBB = *PI;
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)) {
5968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PHINode *PN = PHINode::Create(MergedVal->getType(), "storemerge");
5978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->reserveOperandSpace(2);
5988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(SI.getOperand(0), SI.getParent());
5998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(OtherStore->getOperand(0), OtherBB);
6008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    MergedVal = InsertNewInstBefore(PN, DestBB->front());
6018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
6028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Advance to a place where it is safe to insert the new store and
6048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // insert it.
6058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = DestBB->getFirstNonPHI();
6068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  InsertNewInstBefore(new StoreInst(MergedVal, SI.getOperand(1),
6078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                    OtherStore->isVolatile(),
6088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                    SI.getAlignment()), *BBI);
6098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Nuke the old stores.
6118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(SI);
6128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(*OtherStore);
6138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return true;
6148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
615