InstCombineLoadStoreAlloca.cpp revision 687140c818ba4b896329a83324714140b6580ef8
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) {
2905d62537276197b3351d9887f4967590b6a3b901Dan Gohman    const 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())) {
418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      const 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;
608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      Value *V = GetElementPtrInst::CreateInBounds(New, Idx, Idx + 2,
618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                                   New->getName()+".sub", It);
628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Now make everything use the getelementptr instead of the original
648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // allocation.
658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, V);
668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    } else if (isa<UndefValue>(AI.getArraySize())) {
678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD && isa<AllocaInst>(AI) && AI.getAllocatedType()->isSized()) {
728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If alloca'ing a zero byte object, replace the alloca with a null pointer.
738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we only do this for alloca's, because malloc should allocate
748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // and return a unique pointer, even for a zero byte allocation.
758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (TD->getTypeAllocSize(AI.getAllocatedType()) == 0)
768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType()));
778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If the alignment is 0 (unspecified), assign it the preferred alignment.
798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (AI.getAlignment() == 0)
808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      AI.setAlignment(TD->getPrefTypeAlignment(AI.getAllocatedType()));
818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineLoadCast - Fold 'load (cast P)' -> cast (load P)' when possible.
888d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineLoadCast(InstCombiner &IC, LoadInst &LI,
898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                        const TargetData *TD) {
908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(LI.getOperand(0));
918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const PointerType *DestTy = cast<PointerType>(CI->getType());
948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *DestPTy = DestTy->getElementType();
958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType())) {
968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If the address spaces don't match, don't eliminate the cast.
988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DestTy->getAddressSpace() != SrcTy->getAddressSpace())
998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return 0;
1008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    const Type *SrcPTy = SrcTy->getElementType();
1028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1031df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (DestPTy->isIntegerTy() || DestPTy->isPointerTy() ||
1041df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands         DestPTy->isVectorTy()) {
1058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // If the source is an array, the code below will not succeed.  Check to
1068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
1078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // constants.
1088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (const ArrayType *ASrcTy = dyn_cast<ArrayType>(SrcPTy))
1098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (Constant *CSrc = dyn_cast<Constant>(CastOp))
1108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (ASrcTy->getNumElements() != 0) {
1118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Value *Idxs[2];
1128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Idxs[0] = Constant::getNullValue(Type::getInt32Ty(LI.getContext()));
1138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            Idxs[1] = Idxs[0];
1148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            CastOp = ConstantExpr::getGetElementPtr(CSrc, Idxs, 2);
1158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            SrcTy = cast<PointerType>(CastOp->getType());
1168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            SrcPTy = SrcTy->getElementType();
1178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          }
1188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (IC.getTargetData() &&
1201df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands          (SrcPTy->isIntegerTy() || SrcPTy->isPointerTy() ||
1211df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands            SrcPTy->isVectorTy()) &&
1228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          // Do not allow turning this into a load of an integer, which is then
1238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          // casted to a pointer, this pessimizes pointer analysis a lot.
1241df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands          (SrcPTy->isPointerTy() == LI.getType()->isPointerTy()) &&
1258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          IC.getTargetData()->getTypeSizeInBits(SrcPTy) ==
1268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner               IC.getTargetData()->getTypeSizeInBits(DestPTy)) {
1278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // Okay, we are casting from one integer or pointer type to another of
1298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // the same size.  Instead of casting the pointer before the load, cast
1308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // the result of the loaded value.
1316ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *NewLoad =
1328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          IC.Builder->CreateLoad(CastOp, LI.isVolatile(), CI->getName());
1336ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        NewLoad->setAlignment(LI.getAlignment());
1348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        // Now cast the result of the load.
1358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return new BitCastInst(NewLoad, LI.getType());
1368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
1378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
1388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
1408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
1418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1428d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitLoadInst(LoadInst &LI) {
1438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Op = LI.getOperand(0);
1448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
1468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
1478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
148687140c818ba4b896329a83324714140b6580ef8Chris Lattner      getOrEnforceKnownAlignment(Op, TD->getPrefTypeAlignment(LI.getType()),TD);
1490fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned LoadAlign = LI.getAlignment();
1500fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned EffectiveLoadAlign = LoadAlign != 0 ? LoadAlign :
1510fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      TD->getABITypeAlignment(LI.getType());
1520fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman
1530fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    if (KnownAlign > EffectiveLoadAlign)
1548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      LI.setAlignment(KnownAlign);
1550fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    else if (LoadAlign == 0)
1560fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      LI.setAlignment(EffectiveLoadAlign);
1578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load (cast X) --> cast (load X) iff safe.
1608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Op))
1618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
1628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
1638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // None of the following transforms are legal for volatile loads.
1658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (LI.isVolatile()) return 0;
1668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple store-to-load forwarding and load CSE, to catch cases
1688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // where there are several consequtive memory accesses to the same location,
1698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // separated by a few arithmetic operations.
1708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &LI;
1718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Value *AvailableVal = FindAvailableLoadedValue(Op, LI.getParent(), BBI,6))
1728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, AvailableVal);
1738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load(gep null, ...) -> unreachable
1758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op)) {
1768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    const Value *GEPI0 = GEPI->getOperand(0);
1778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // TODO: Consider a target hook for valid address spaces for this xform.
1788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (isa<ConstantPointerNull>(GEPI0) && GEPI->getPointerAddressSpace() == 0){
1798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Insert a new store to null instruction before the load to indicate
1808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // that this code is not reachable.  We do this instead of inserting
1818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // an unreachable instruction directly because we cannot modify the
1828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // CFG.
1838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      new StoreInst(UndefValue::get(LI.getType()),
1848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                    Constant::getNullValue(Op->getType()), &LI);
1858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
1868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
1878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load null/undef -> unreachable
1908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // TODO: Consider a target hook for valid address spaces for this xform.
1918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Op) ||
1928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      (isa<ConstantPointerNull>(Op) && LI.getPointerAddressSpace() == 0)) {
1938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Insert a new store to null instruction before the load to indicate that
1948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // this code is not reachable.  We do this instead of inserting an
1958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unreachable instruction directly because we cannot modify the CFG.
1968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    new StoreInst(UndefValue::get(LI.getType()),
1978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                  Constant::getNullValue(Op->getType()), &LI);
1988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
1998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Instcombine load (constantexpr_cast global) -> cast (load global)
2028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Op))
2038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
2048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
2058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
2068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Op->hasOneUse()) {
2088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Change select and PHI nodes to select values instead of addresses: this
2098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // helps alias analysis out a lot, allows many others simplifications, and
2108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // exposes redundancy in the code.
2118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we cannot do the transformation unless we know that the
2138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // introduced loads cannot trap!  Something like this is valid as long as
2148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the condition is always false: load (select bool %C, int* null, int* %G),
2158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // but it would not be valid if we transformed it to load from null
2168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unconditionally.
2178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (SelectInst *SI = dyn_cast<SelectInst>(Op)) {
2198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (Cond, &V1, &V2))  --> select(Cond, load &V1, load &V2).
22049db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      unsigned Align = LI.getAlignment();
22149db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      if (isSafeToLoadUnconditionally(SI->getOperand(1), SI, Align, TD) &&
22249db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson          isSafeToLoadUnconditionally(SI->getOperand(2), SI, Align, TD)) {
2236ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V1 = Builder->CreateLoad(SI->getOperand(1),
22449db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(1)->getName()+".val");
2256ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V2 = Builder->CreateLoad(SI->getOperand(2),
22649db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(2)->getName()+".val");
22749db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V1->setAlignment(Align);
22849db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V2->setAlignment(Align);
2298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return SelectInst::Create(SI->getCondition(), V1, V2);
2308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, null, P)) -> load P
2338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(1)))
2348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(2));
2368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, P, null)) -> load P
2408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(2)))
2418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(1));
2438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
2488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
2498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineStoreToCast - Fold store V, (cast P) -> store (cast V), P
2518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// when possible.  This makes it generally easy to do alias analysis and/or
2528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SROA/mem2reg of the memory object.
2538d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
2548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(SI.getOperand(1));
2558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
2568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *DestPTy = cast<PointerType>(CI->getType())->getElementType();
2588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType());
2598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SrcTy == 0) return 0;
2608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *SrcPTy = SrcTy->getElementType();
2628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2631df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!DestPTy->isIntegerTy() && !DestPTy->isPointerTy())
2648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// NewGEPIndices - If SrcPTy is an aggregate type, we can emit a "noop gep"
2678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// to its first element.  This allows us to handle things like:
2688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  ///   store i32 xxx, (bitcast {foo*, float}* %P to i32*)
2698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// on 32-bit hosts.
2708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  SmallVector<Value*, 4> NewGEPIndices;
2718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the source is an array, the code below will not succeed.  Check to
2738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
2748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // constants.
2751df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (SrcPTy->isArrayTy() || SrcPTy->isStructTy()) {
2768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Index through pointer.
2778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    Constant *Zero = Constant::getNullValue(Type::getInt32Ty(SI.getContext()));
2788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    NewGEPIndices.push_back(Zero);
2798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    while (1) {
2818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (const StructType *STy = dyn_cast<StructType>(SrcPTy)) {
2828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (!STy->getNumElements()) /* Struct can be empty {} */
2838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          break;
2848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = STy->getElementType(0);
2868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else if (const ArrayType *ATy = dyn_cast<ArrayType>(SrcPTy)) {
2878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = ATy->getElementType();
2898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else {
2908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
2918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    SrcTy = PointerType::get(SrcPTy, SrcTy->getAddressSpace());
2958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2971df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!SrcPTy->isIntegerTy() && !SrcPTy->isPointerTy())
2988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointers point into different address spaces or if they point to
3018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // values with different sizes, we can't do the transformation.
3028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!IC.getTargetData() ||
3038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SrcTy->getAddressSpace() !=
3048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        cast<PointerType>(CI->getType())->getAddressSpace() ||
3058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(SrcPTy) !=
3068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(DestPTy))
3078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Okay, we are casting from one integer or pointer type to another of
3108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the same size.  Instead of casting the pointer before
3118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the store, cast the value to be stored.
3128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *NewCast;
3138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *SIOp0 = SI.getOperand(0);
3148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Instruction::CastOps opcode = Instruction::BitCast;
3158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type* CastSrcTy = SIOp0->getType();
3168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type* CastDstTy = SrcPTy;
3171df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (CastDstTy->isPointerTy()) {
318b0bc6c361da9009e8414efde317d9bbff755f6c0Duncan Sands    if (CastSrcTy->isIntegerTy())
3198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::IntToPtr;
3201df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  } else if (CastDstTy->isIntegerTy()) {
3211df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (SIOp0->getType()->isPointerTy())
3228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::PtrToInt;
3238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // SIOp0 is a pointer to aggregate and this is a store to the first field,
3268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // emit a GEP to index into its first field.
3278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!NewGEPIndices.empty())
3288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    CastOp = IC.Builder->CreateInBoundsGEP(CastOp, NewGEPIndices.begin(),
3298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                           NewGEPIndices.end());
3308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  NewCast = IC.Builder->CreateCast(opcode, SIOp0, CastDstTy,
3328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                   SIOp0->getName()+".c");
33317a0bf996fb61cdd43cec2cfc7db53145bbc767aDan Gohman  SI.setOperand(0, NewCast);
33417a0bf996fb61cdd43cec2cfc7db53145bbc767aDan Gohman  SI.setOperand(1, CastOp);
33517a0bf996fb61cdd43cec2cfc7db53145bbc767aDan Gohman  return &SI;
3368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// equivalentAddressValues - Test if A and B will obviously have the same
3398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value. This includes recognizing that %t0 and %t1 will have the same
3408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value in code like this:
3418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t0 = getelementptr \@a, 0, 3
3428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   store i32 0, i32* %t0
3438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t1 = getelementptr \@a, 0, 3
3448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t2 = load i32* %t1
3458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
3468d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic bool equivalentAddressValues(Value *A, Value *B) {
3478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values are trivially equivalent.
3488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (A == B) return true;
3498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values come form identical arithmetic instructions.
3518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // This uses isIdenticalToWhenDefined instead of isIdenticalTo because
3528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // its only used to compare two uses within the same basic block, which
3538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // means that they'll always either have the same value or one of them
3548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // will have an undefined value.
3558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<BinaryOperator>(A) ||
3568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<CastInst>(A) ||
3578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<PHINode>(A) ||
3588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<GetElementPtrInst>(A))
3598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *BI = dyn_cast<Instruction>(B))
3608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (cast<Instruction>(A)->isIdenticalToWhenDefined(BI))
3618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return true;
3628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Otherwise they may not be equivalent.
3648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return false;
3658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// If this instruction has two uses, one of which is a llvm.dbg.declare,
3688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// return the llvm.dbg.declare.
3698d9b8d717e665945b31b0742b901561fb433ceceChris LattnerDbgDeclareInst *InstCombiner::hasOneUsePlusDeclare(Value *V) {
3708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!V->hasNUses(2))
3718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (Value::use_iterator UI = V->use_begin(), E = V->use_end();
3738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       UI != E; ++UI) {
374b654435712f3e1345cc40aff99724de9300e5de0Gabor Greif    User *U = *UI;
375b654435712f3e1345cc40aff99724de9300e5de0Gabor Greif    if (DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(U))
3768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return DI;
377b654435712f3e1345cc40aff99724de9300e5de0Gabor Greif    if (isa<BitCastInst>(U) && U->hasOneUse()) {
37896f1d8ebdd33b3f9bdb3b1163f36072c68599f42Gabor Greif      if (DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(*U->use_begin()))
3798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return DI;
3808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
3818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
3838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3858d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitStoreInst(StoreInst &SI) {
3868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Val = SI.getOperand(0);
3878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Ptr = SI.getOperand(1);
3888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a single use, zapify the store, making the
3908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // alloca dead.
3918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a two uses, the other one being a
3928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // llvm.dbg.declare, zapify the store and the declare, making the
393d3dc3cc98f0366a9860a68eaa1f823dfc7fa310bEric Christopher  // alloca dead.  We must do this to prevent declares from affecting
3948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // codegen.
3958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!SI.isVolatile()) {
3968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Ptr->hasOneUse()) {
3978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (isa<AllocaInst>(Ptr))
3988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return EraseInstFromFunction(SI);
3998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Ptr)) {
4008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (isa<AllocaInst>(GEP->getOperand(0))) {
4018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (GEP->getOperand(0)->hasOneUse())
4028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            return EraseInstFromFunction(SI);
4038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (DbgDeclareInst *DI = hasOneUsePlusDeclare(GEP->getOperand(0))) {
4048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            EraseInstFromFunction(*DI);
4058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            return EraseInstFromFunction(SI);
4068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          }
4078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
4088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
4098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DbgDeclareInst *DI = hasOneUsePlusDeclare(Ptr)) {
4118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      EraseInstFromFunction(*DI);
4128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return EraseInstFromFunction(SI);
4138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
4178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
4188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
419687140c818ba4b896329a83324714140b6580ef8Chris Lattner      getOrEnforceKnownAlignment(Ptr, TD->getPrefTypeAlignment(Val->getType()),
420687140c818ba4b896329a83324714140b6580ef8Chris Lattner                                 TD);
4210fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned StoreAlign = SI.getAlignment();
4220fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    unsigned EffectiveStoreAlign = StoreAlign != 0 ? StoreAlign :
4230fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      TD->getABITypeAlignment(Val->getType());
4240fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman
4250fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    if (KnownAlign > EffectiveStoreAlign)
4268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setAlignment(KnownAlign);
4270fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman    else if (StoreAlign == 0)
4280fd353376b2741fc477c5fe05a5f18ae3abc4f60Dan Gohman      SI.setAlignment(EffectiveStoreAlign);
4298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple DSE, to catch cases where there are several consecutive
4328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // stores to the same location, separated by a few arithmetic operations. This
4338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // situation often occurs with bitfield accesses.
4348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &SI;
4358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (unsigned ScanInsts = 6; BBI != SI.getParent()->begin() && ScanInsts;
4368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       --ScanInsts) {
4378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
43829fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // Don't count debug info directives, lest they affect codegen,
43929fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // and we skip pointer-to-pointer bitcasts, which are NOPs.
44029fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    if (isa<DbgInfoIntrinsic>(BBI) ||
4411df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands        (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
4428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      ScanInsts++;
4438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      continue;
4448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (StoreInst *PrevSI = dyn_cast<StoreInst>(BBI)) {
4478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Prev store isn't volatile, and stores to the same location?
4488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (!PrevSI->isVolatile() &&equivalentAddressValues(PrevSI->getOperand(1),
4498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                                          SI.getOperand(1))) {
4508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++NumDeadStore;
4518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++BBI;
4528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        EraseInstFromFunction(*PrevSI);
4538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        continue;
4548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
4558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this is a load, we have to stop.  However, if the loaded value is from
4598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the pointer we're loading and is producing the pointer we're storing,
4608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // then *this* store is dead (X = load P; store X -> P).
4618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
4628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (LI == Val && equivalentAddressValues(LI->getOperand(0), Ptr) &&
4638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          !SI.isVolatile())
4648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return EraseInstFromFunction(SI);
4658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Otherwise, this is a load from some other location.  Stores before it
4678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // may not be dead.
4688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Don't skip over loads or things that can modify memory.
4728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BBI->mayWriteToMemory() || BBI->mayReadFromMemory())
4738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SI.isVolatile()) return 0;  // Don't hack volatile stores.
4788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store X, null    -> turns into 'unreachable' in SimplifyCFG
4808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<ConstantPointerNull>(Ptr) && SI.getPointerAddressSpace() == 0) {
4818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!isa<UndefValue>(Val)) {
4828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setOperand(0, UndefValue::get(Val->getType()));
4838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *U = dyn_cast<Instruction>(Val))
4848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        Worklist.Add(U);  // Dropped a use.
4858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;  // Do not modify these!
4878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store undef, Ptr -> noop
4908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Val))
4918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return EraseInstFromFunction(SI);
4928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointer destination is a cast, see if we can fold the cast into the
4948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // source instead.
4958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Ptr))
4968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
4988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
4998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
5008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineStoreToCast(*this, SI))
5018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
5028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If this store is the last instruction in the basic block (possibly
505a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // excepting debug info instructions), and if the block ends with an
506a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // unconditional branch, try to move it to the successor block.
5078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = &SI;
5088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  do {
5098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    ++BBI;
51029fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez  } while (isa<DbgInfoIntrinsic>(BBI) ||
5111df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy()));
5128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (BranchInst *BI = dyn_cast<BranchInst>(BBI))
5138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BI->isUnconditional())
5148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (SimplifyStoreAtEndOfBlock(SI))
5158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return 0;  // xform done!
5168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
5188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
5198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SimplifyStoreAtEndOfBlock - Turn things like:
5218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   if () { *P = v1; } else { *P = v2 }
5228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
5238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
5248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// Simplify things like:
5258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   *P = v1; if () { *P = v2; }
5268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
5278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
5288d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerbool InstCombiner::SimplifyStoreAtEndOfBlock(StoreInst &SI) {
5298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *StoreBB = SI.getParent();
5308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Check to see if the successor block has exactly two incoming edges.  If
5328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // so, see if the other predecessor contains a store to the same location.
5338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // if so, insert a PHI node (if needed) and move the stores down.
5348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *DestBB = StoreBB->getTerminator()->getSuccessor(0);
5358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Determine whether Dest has exactly two predecessors and, if so, compute
5378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the other predecessor.
5388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  pred_iterator PI = pred_begin(DestBB);
539a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  BasicBlock *P = *PI;
5408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *OtherBB = 0;
541a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif
542a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  if (P != StoreBB)
543a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif    OtherBB = P;
544a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif
545a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  if (++PI == pred_end(DestBB))
5468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
548a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  P = *PI;
549a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif  if (P != StoreBB) {
5508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBB)
5518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
552a9b8338bfa126de7ad6d57ca417b39d5c6a979ffGabor Greif    OtherBB = P;
5538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
5548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (++PI != pred_end(DestBB))
5558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Bail out if all the relevant blocks aren't distinct (this can happen,
5588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // for example, if SI is in an infinite loop)
5598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (StoreBB == DestBB || OtherBB == DestBB)
5608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Verify that the other block ends in a branch and is not otherwise empty.
5638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = OtherBB->getTerminator();
5648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BranchInst *OtherBr = dyn_cast<BranchInst>(BBI);
5658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!OtherBr || BBI == OtherBB->begin())
5668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the other block ends in an unconditional branch, check for the 'if then
5698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // else' case.  there is an instruction before the branch.
5708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  StoreInst *OtherStore = 0;
5718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (OtherBr->isUnconditional()) {
5728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
5738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Skip over debugging info.
57429fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    while (isa<DbgInfoIntrinsic>(BBI) ||
5751df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
5768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (BBI==OtherBB->begin())
5778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
5788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      --BBI;
5798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
5808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this isn't a store, isn't a store to the same location, or if the
5818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // alignments differ, bail out.
5828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherStore = dyn_cast<StoreInst>(BBI);
5838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!OtherStore || OtherStore->getOperand(1) != SI.getOperand(1) ||
5848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        OtherStore->getAlignment() != SI.getAlignment())
5858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  } else {
5878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Otherwise, the other block ended with a conditional branch. If one of the
5888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // destinations is StoreBB, then we have the if/then case.
5898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBr->getSuccessor(0) != StoreBB &&
5908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        OtherBr->getSuccessor(1) != StoreBB)
5918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Okay, we know that OtherBr now goes to Dest and StoreBB, so this is an
5948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // if/then triangle.  See if there is a store to the same ptr as SI that
5958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // lives in OtherBB.
5968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    for (;; --BBI) {
5978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Check to see if we find the matching store.
5988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if ((OtherStore = dyn_cast<StoreInst>(BBI))) {
5998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (OtherStore->getOperand(1) != SI.getOperand(1) ||
6008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            OtherStore->getAlignment() != SI.getAlignment())
6018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return false;
6028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
6038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
6048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // If we find something that may be using or overwriting the stored
6058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // value, or if we run out of instructions, we can't do the xform.
6068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (BBI->mayReadFromMemory() || BBI->mayWriteToMemory() ||
6078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          BBI == OtherBB->begin())
6088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
6098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
6108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // In order to eliminate the store in OtherBr, we have to
6128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // make sure nothing reads or overwrites the stored value in
6138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // StoreBB.
6148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    for (BasicBlock::iterator I = StoreBB->begin(); &*I != &SI; ++I) {
6158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // FIXME: This should really be AA driven.
6168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (I->mayReadFromMemory() || I->mayWriteToMemory())
6178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
6188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
6198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
6208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Insert a PHI node now if we need it.
6228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *MergedVal = OtherStore->getOperand(0);
6238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (MergedVal != SI.getOperand(0)) {
6248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PHINode *PN = PHINode::Create(MergedVal->getType(), "storemerge");
6258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->reserveOperandSpace(2);
6268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(SI.getOperand(0), SI.getParent());
6278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(OtherStore->getOperand(0), OtherBB);
6288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    MergedVal = InsertNewInstBefore(PN, DestBB->front());
6298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
6308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Advance to a place where it is safe to insert the new store and
6328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // insert it.
6338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = DestBB->getFirstNonPHI();
6348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  InsertNewInstBefore(new StoreInst(MergedVal, SI.getOperand(1),
6358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                    OtherStore->isVolatile(),
6368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                    SI.getAlignment()), *BBI);
6378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Nuke the old stores.
6398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(SI);
6408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(*OtherStore);
6418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return true;
6428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
643