InstCombineLoadStoreAlloca.cpp revision dd9344f3face8f1978a7f9f393c31b628144d1f6
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 =
1488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      GetOrEnforceKnownAlignment(Op, TD->getPrefTypeAlignment(LI.getType()));
1498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (KnownAlign >
1508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        (LI.getAlignment() == 0 ? TD->getABITypeAlignment(LI.getType()) :
1518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                  LI.getAlignment()))
1528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      LI.setAlignment(KnownAlign);
1538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load (cast X) --> cast (load X) iff safe.
1568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Op))
1578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
1588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
1598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // None of the following transforms are legal for volatile loads.
1618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (LI.isVolatile()) return 0;
1628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple store-to-load forwarding and load CSE, to catch cases
1648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // where there are several consequtive memory accesses to the same location,
1658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // separated by a few arithmetic operations.
1668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &LI;
1678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Value *AvailableVal = FindAvailableLoadedValue(Op, LI.getParent(), BBI,6))
1688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, AvailableVal);
1698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load(gep null, ...) -> unreachable
1718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (GetElementPtrInst *GEPI = dyn_cast<GetElementPtrInst>(Op)) {
1728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    const Value *GEPI0 = GEPI->getOperand(0);
1738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // TODO: Consider a target hook for valid address spaces for this xform.
1748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (isa<ConstantPointerNull>(GEPI0) && GEPI->getPointerAddressSpace() == 0){
1758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Insert a new store to null instruction before the load to indicate
1768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // that this code is not reachable.  We do this instead of inserting
1778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // an unreachable instruction directly because we cannot modify the
1788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // 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
1858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // load null/undef -> unreachable
1868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // TODO: Consider a target hook for valid address spaces for this xform.
1878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Op) ||
1888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      (isa<ConstantPointerNull>(Op) && LI.getPointerAddressSpace() == 0)) {
1898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Insert a new store to null instruction before the load to indicate that
1908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // this code is not reachable.  We do this instead of inserting an
1918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unreachable instruction directly because we cannot modify the CFG.
1928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    new StoreInst(UndefValue::get(LI.getType()),
1938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                  Constant::getNullValue(Op->getType()), &LI);
1948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return ReplaceInstUsesWith(LI, UndefValue::get(LI.getType()));
1958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
1968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
1978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Instcombine load (constantexpr_cast global) -> cast (load global)
1988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Op))
1998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
2008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineLoadCast(*this, LI, TD))
2018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
2028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (Op->hasOneUse()) {
2048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Change select and PHI nodes to select values instead of addresses: this
2058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // helps alias analysis out a lot, allows many others simplifications, and
2068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // exposes redundancy in the code.
2078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Note that we cannot do the transformation unless we know that the
2098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // introduced loads cannot trap!  Something like this is valid as long as
2108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the condition is always false: load (select bool %C, int* null, int* %G),
2118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // but it would not be valid if we transformed it to load from null
2128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // unconditionally.
2138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    //
2148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (SelectInst *SI = dyn_cast<SelectInst>(Op)) {
2158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (Cond, &V1, &V2))  --> select(Cond, load &V1, load &V2).
21649db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      unsigned Align = LI.getAlignment();
21749db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson      if (isSafeToLoadUnconditionally(SI->getOperand(1), SI, Align, TD) &&
21849db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson          isSafeToLoadUnconditionally(SI->getOperand(2), SI, Align, TD)) {
2196ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V1 = Builder->CreateLoad(SI->getOperand(1),
22049db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(1)->getName()+".val");
2216ecfccfd55274187368b86d7f2e65f77d1921c36Bob Wilson        LoadInst *V2 = Builder->CreateLoad(SI->getOperand(2),
22249db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson                                           SI->getOperand(2)->getName()+".val");
22349db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V1->setAlignment(Align);
22449db68fba01722ca032dc5170f8248a9d25f0199Bob Wilson        V2->setAlignment(Align);
2258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return SelectInst::Create(SI->getCondition(), V1, V2);
2268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, null, P)) -> load P
2298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(1)))
2308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(2));
2328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // load (select (cond, P, null)) -> load P
2368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Constant *C = dyn_cast<Constant>(SI->getOperand(2)))
2378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (C->isNullValue()) {
2388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          LI.setOperand(0, SI->getOperand(1));
2398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return &LI;
2408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
2418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
2448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
2458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// InstCombineStoreToCast - Fold store V, (cast P) -> store (cast V), P
2478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// when possible.  This makes it generally easy to do alias analysis and/or
2488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SROA/mem2reg of the memory object.
2498d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic Instruction *InstCombineStoreToCast(InstCombiner &IC, StoreInst &SI) {
2508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  User *CI = cast<User>(SI.getOperand(1));
2518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *CastOp = CI->getOperand(0);
2528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *DestPTy = cast<PointerType>(CI->getType())->getElementType();
2548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const PointerType *SrcTy = dyn_cast<PointerType>(CastOp->getType());
2558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SrcTy == 0) return 0;
2568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type *SrcPTy = SrcTy->getElementType();
2588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2591df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!DestPTy->isIntegerTy() && !DestPTy->isPointerTy())
2608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// NewGEPIndices - If SrcPTy is an aggregate type, we can emit a "noop gep"
2638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// to its first element.  This allows us to handle things like:
2648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  ///   store i32 xxx, (bitcast {foo*, float}* %P to i32*)
2658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  /// on 32-bit hosts.
2668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  SmallVector<Value*, 4> NewGEPIndices;
2678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the source is an array, the code below will not succeed.  Check to
2698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // see if a trivial 'gep P, 0, 0' will help matters.  Only do this for
2708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // constants.
2711df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (SrcPTy->isArrayTy() || SrcPTy->isStructTy()) {
2728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Index through pointer.
2738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    Constant *Zero = Constant::getNullValue(Type::getInt32Ty(SI.getContext()));
2748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    NewGEPIndices.push_back(Zero);
2758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    while (1) {
2778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (const StructType *STy = dyn_cast<StructType>(SrcPTy)) {
2788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (!STy->getNumElements()) /* Struct can be empty {} */
2798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          break;
2808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = STy->getElementType(0);
2828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else if (const ArrayType *ATy = dyn_cast<ArrayType>(SrcPTy)) {
2838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        NewGEPIndices.push_back(Zero);
2848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        SrcPTy = ATy->getElementType();
2858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      } else {
2868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
2878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
2888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
2898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    SrcTy = PointerType::get(SrcPTy, SrcTy->getAddressSpace());
2918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
2928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2931df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (!SrcPTy->isIntegerTy() && !SrcPTy->isPointerTy())
2948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
2958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
2968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointers point into different address spaces or if they point to
2978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // values with different sizes, we can't do the transformation.
2988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!IC.getTargetData() ||
2998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SrcTy->getAddressSpace() !=
3008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        cast<PointerType>(CI->getType())->getAddressSpace() ||
3018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(SrcPTy) !=
3028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      IC.getTargetData()->getTypeSizeInBits(DestPTy))
3038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Okay, we are casting from one integer or pointer type to another of
3068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the same size.  Instead of casting the pointer before
3078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the store, cast the value to be stored.
3088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *NewCast;
3098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *SIOp0 = SI.getOperand(0);
3108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Instruction::CastOps opcode = Instruction::BitCast;
3118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type* CastSrcTy = SIOp0->getType();
3128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  const Type* CastDstTy = SrcPTy;
3131df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  if (CastDstTy->isPointerTy()) {
314b0bc6c361da9009e8414efde317d9bbff755f6c0Duncan Sands    if (CastSrcTy->isIntegerTy())
3158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::IntToPtr;
3161df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands  } else if (CastDstTy->isIntegerTy()) {
3171df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands    if (SIOp0->getType()->isPointerTy())
3188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      opcode = Instruction::PtrToInt;
3198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // SIOp0 is a pointer to aggregate and this is a store to the first field,
3228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // emit a GEP to index into its first field.
3238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!NewGEPIndices.empty())
3248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    CastOp = IC.Builder->CreateInBoundsGEP(CastOp, NewGEPIndices.begin(),
3258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                           NewGEPIndices.end());
3268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  NewCast = IC.Builder->CreateCast(opcode, SIOp0, CastDstTy,
3288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                   SIOp0->getName()+".c");
3298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return new StoreInst(NewCast, CastOp);
3308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// equivalentAddressValues - Test if A and B will obviously have the same
3338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value. This includes recognizing that %t0 and %t1 will have the same
3348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// value in code like this:
3358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t0 = getelementptr \@a, 0, 3
3368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   store i32 0, i32* %t0
3378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t1 = getelementptr \@a, 0, 3
3388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   %t2 = load i32* %t1
3398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
3408d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerstatic bool equivalentAddressValues(Value *A, Value *B) {
3418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values are trivially equivalent.
3428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (A == B) return true;
3438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Test if the values come form identical arithmetic instructions.
3458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // This uses isIdenticalToWhenDefined instead of isIdenticalTo because
3468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // its only used to compare two uses within the same basic block, which
3478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // means that they'll always either have the same value or one of them
3488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // will have an undefined value.
3498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<BinaryOperator>(A) ||
3508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<CastInst>(A) ||
3518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<PHINode>(A) ||
3528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      isa<GetElementPtrInst>(A))
3538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *BI = dyn_cast<Instruction>(B))
3548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (cast<Instruction>(A)->isIdenticalToWhenDefined(BI))
3558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return true;
3568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Otherwise they may not be equivalent.
3588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return false;
3598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// If this instruction has two uses, one of which is a llvm.dbg.declare,
3628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner// return the llvm.dbg.declare.
3638d9b8d717e665945b31b0742b901561fb433ceceChris LattnerDbgDeclareInst *InstCombiner::hasOneUsePlusDeclare(Value *V) {
3648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!V->hasNUses(2))
3658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;
3668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (Value::use_iterator UI = V->use_begin(), E = V->use_end();
3678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       UI != E; ++UI) {
3688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(UI))
3698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return DI;
3708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (isa<BitCastInst>(UI) && UI->hasOneUse()) {
3718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (DbgDeclareInst *DI = dyn_cast<DbgDeclareInst>(UI->use_begin()))
3728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return DI;
3738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
3748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
3758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
3768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
3778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3788d9b8d717e665945b31b0742b901561fb433ceceChris LattnerInstruction *InstCombiner::visitStoreInst(StoreInst &SI) {
3798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Val = SI.getOperand(0);
3808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *Ptr = SI.getOperand(1);
3818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
3828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a single use, zapify the store, making the
3838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // alloca dead.
3848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the RHS is an alloca with a two uses, the other one being a
3858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // llvm.dbg.declare, zapify the store and the declare, making the
386d3dc3cc98f0366a9860a68eaa1f823dfc7fa310bEric Christopher  // alloca dead.  We must do this to prevent declares from affecting
3878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // codegen.
3888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!SI.isVolatile()) {
3898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Ptr->hasOneUse()) {
3908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (isa<AllocaInst>(Ptr))
3918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return EraseInstFromFunction(SI);
3928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (GetElementPtrInst *GEP = dyn_cast<GetElementPtrInst>(Ptr)) {
3938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (isa<AllocaInst>(GEP->getOperand(0))) {
3948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (GEP->getOperand(0)->hasOneUse())
3958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            return EraseInstFromFunction(SI);
3968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          if (DbgDeclareInst *DI = hasOneUsePlusDeclare(GEP->getOperand(0))) {
3978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            EraseInstFromFunction(*DI);
3988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            return EraseInstFromFunction(SI);
3998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          }
4008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        }
4018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
4028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (DbgDeclareInst *DI = hasOneUsePlusDeclare(Ptr)) {
4048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      EraseInstFromFunction(*DI);
4058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return EraseInstFromFunction(SI);
4068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Attempt to improve the alignment.
4108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (TD) {
4118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    unsigned KnownAlign =
4128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      GetOrEnforceKnownAlignment(Ptr, TD->getPrefTypeAlignment(Val->getType()));
4138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (KnownAlign >
4148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        (SI.getAlignment() == 0 ? TD->getABITypeAlignment(Val->getType()) :
4158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                  SI.getAlignment()))
4168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setAlignment(KnownAlign);
4178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Do really simple DSE, to catch cases where there are several consecutive
4208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // stores to the same location, separated by a few arithmetic operations. This
4218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // situation often occurs with bitfield accesses.
4228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = &SI;
4238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  for (unsigned ScanInsts = 6; BBI != SI.getParent()->begin() && ScanInsts;
4248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner       --ScanInsts) {
4258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
42629fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // Don't count debug info directives, lest they affect codegen,
42729fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    // and we skip pointer-to-pointer bitcasts, which are NOPs.
42829fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    if (isa<DbgInfoIntrinsic>(BBI) ||
4291df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands        (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
4308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      ScanInsts++;
4318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      continue;
4328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (StoreInst *PrevSI = dyn_cast<StoreInst>(BBI)) {
4358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Prev store isn't volatile, and stores to the same location?
4368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (!PrevSI->isVolatile() &&equivalentAddressValues(PrevSI->getOperand(1),
4378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                                          SI.getOperand(1))) {
4388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++NumDeadStore;
4398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        ++BBI;
4408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        EraseInstFromFunction(*PrevSI);
4418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        continue;
4428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
4438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this is a load, we have to stop.  However, if the loaded value is from
4478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // the pointer we're loading and is producing the pointer we're storing,
4488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // then *this* store is dead (X = load P; store X -> P).
4498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (LoadInst *LI = dyn_cast<LoadInst>(BBI)) {
4508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (LI == Val && equivalentAddressValues(LI->getOperand(0), Ptr) &&
4518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          !SI.isVolatile())
4528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return EraseInstFromFunction(SI);
4538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Otherwise, this is a load from some other location.  Stores before it
4558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // may not be dead.
4568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4598d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Don't skip over loads or things that can modify memory.
4608d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BBI->mayWriteToMemory() || BBI->mayReadFromMemory())
4618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      break;
4628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (SI.isVolatile()) return 0;  // Don't hack volatile stores.
4668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store X, null    -> turns into 'unreachable' in SimplifyCFG
4688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<ConstantPointerNull>(Ptr) && SI.getPointerAddressSpace() == 0) {
4698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!isa<UndefValue>(Val)) {
4708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      SI.setOperand(0, UndefValue::get(Val->getType()));
4718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *U = dyn_cast<Instruction>(Val))
4728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        Worklist.Add(U);  // Dropped a use.
4738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
4748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return 0;  // Do not modify these!
4758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
4768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // store undef, Ptr -> noop
4788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<UndefValue>(Val))
4798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return EraseInstFromFunction(SI);
4808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the pointer destination is a cast, see if we can fold the cast into the
4828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // source instead.
4838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (isa<CastInst>(Ptr))
4848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return Res;
4868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (ConstantExpr *CE = dyn_cast<ConstantExpr>(Ptr))
4878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (CE->isCast())
4888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (Instruction *Res = InstCombineStoreToCast(*this, SI))
4898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return Res;
4908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
4928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If this store is the last instruction in the basic block (possibly
493a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // excepting debug info instructions), and if the block ends with an
494a4c77622f7f9f7546f0eae7c171ab56df125dc9aVictor Hernandez  // unconditional branch, try to move it to the successor block.
4958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = &SI;
4968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  do {
4978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    ++BBI;
49829fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez  } while (isa<DbgInfoIntrinsic>(BBI) ||
4991df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy()));
5008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (BranchInst *BI = dyn_cast<BranchInst>(BBI))
5018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (BI->isUnconditional())
5028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (SimplifyStoreAtEndOfBlock(SI))
5038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return 0;  // xform done!
5048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return 0;
5068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
5078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// SimplifyStoreAtEndOfBlock - Turn things like:
5098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   if () { *P = v1; } else { *P = v2 }
5108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
5118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
5128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// Simplify things like:
5138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///   *P = v1; if () { *P = v2; }
5148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner/// into a phi node with a store in the successor.
5158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner///
5168d9b8d717e665945b31b0742b901561fb433ceceChris Lattnerbool InstCombiner::SimplifyStoreAtEndOfBlock(StoreInst &SI) {
5178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *StoreBB = SI.getParent();
5188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Check to see if the successor block has exactly two incoming edges.  If
5208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // so, see if the other predecessor contains a store to the same location.
5218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // if so, insert a PHI node (if needed) and move the stores down.
5228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *DestBB = StoreBB->getTerminator()->getSuccessor(0);
5238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Determine whether Dest has exactly two predecessors and, if so, compute
5258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // the other predecessor.
5268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  pred_iterator PI = pred_begin(DestBB);
5278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock *OtherBB = 0;
5288d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (*PI != StoreBB)
5298d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherBB = *PI;
5308d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  ++PI;
5318d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (PI == pred_end(DestBB))
5328d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5338d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5348d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (*PI != StoreBB) {
5358d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBB)
5368d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5378d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherBB = *PI;
5388d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
5398d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (++PI != pred_end(DestBB))
5408d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5418d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5428d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Bail out if all the relevant blocks aren't distinct (this can happen,
5438d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // for example, if SI is in an infinite loop)
5448d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (StoreBB == DestBB || OtherBB == DestBB)
5458d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5468d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5478d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Verify that the other block ends in a branch and is not otherwise empty.
5488d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BasicBlock::iterator BBI = OtherBB->getTerminator();
5498d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BranchInst *OtherBr = dyn_cast<BranchInst>(BBI);
5508d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (!OtherBr || BBI == OtherBB->begin())
5518d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    return false;
5528d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5538d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // If the other block ends in an unconditional branch, check for the 'if then
5548d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // else' case.  there is an instruction before the branch.
5558d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  StoreInst *OtherStore = 0;
5568d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (OtherBr->isUnconditional()) {
5578d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    --BBI;
5588d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Skip over debugging info.
55929fa5e98863332eb808a6f5c1e29138ca6fd7f5cVictor Hernandez    while (isa<DbgInfoIntrinsic>(BBI) ||
5601df9859c40492511b8aa4321eb76496005d3b75bDuncan Sands           (isa<BitCastInst>(BBI) && BBI->getType()->isPointerTy())) {
5618d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (BBI==OtherBB->begin())
5628d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
5638d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      --BBI;
5648d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
5658d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // If this isn't a store, isn't a store to the same location, or if the
5668d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // alignments differ, bail out.
5678d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    OtherStore = dyn_cast<StoreInst>(BBI);
5688d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (!OtherStore || OtherStore->getOperand(1) != SI.getOperand(1) ||
5698d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        OtherStore->getAlignment() != SI.getAlignment())
5708d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5718d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  } else {
5728d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Otherwise, the other block ended with a conditional branch. If one of the
5738d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // destinations is StoreBB, then we have the if/then case.
5748d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    if (OtherBr->getSuccessor(0) != StoreBB &&
5758d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        OtherBr->getSuccessor(1) != StoreBB)
5768d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      return false;
5778d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5788d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // Okay, we know that OtherBr now goes to Dest and StoreBB, so this is an
5798d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // if/then triangle.  See if there is a store to the same ptr as SI that
5808d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // lives in OtherBB.
5818d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    for (;; --BBI) {
5828d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // Check to see if we find the matching store.
5838d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if ((OtherStore = dyn_cast<StoreInst>(BBI))) {
5848d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        if (OtherStore->getOperand(1) != SI.getOperand(1) ||
5858d9b8d717e665945b31b0742b901561fb433ceceChris Lattner            OtherStore->getAlignment() != SI.getAlignment())
5868d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          return false;
5878d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        break;
5888d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      }
5898d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // If we find something that may be using or overwriting the stored
5908d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // value, or if we run out of instructions, we can't do the xform.
5918d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (BBI->mayReadFromMemory() || BBI->mayWriteToMemory() ||
5928d9b8d717e665945b31b0742b901561fb433ceceChris Lattner          BBI == OtherBB->begin())
5938d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
5948d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
5958d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
5968d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // In order to eliminate the store in OtherBr, we have to
5978d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // make sure nothing reads or overwrites the stored value in
5988d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    // StoreBB.
5998d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    for (BasicBlock::iterator I = StoreBB->begin(); &*I != &SI; ++I) {
6008d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      // FIXME: This should really be AA driven.
6018d9b8d717e665945b31b0742b901561fb433ceceChris Lattner      if (I->mayReadFromMemory() || I->mayWriteToMemory())
6028d9b8d717e665945b31b0742b901561fb433ceceChris Lattner        return false;
6038d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    }
6048d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
6058d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6068d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Insert a PHI node now if we need it.
6078d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  Value *MergedVal = OtherStore->getOperand(0);
6088d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  if (MergedVal != SI.getOperand(0)) {
6098d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PHINode *PN = PHINode::Create(MergedVal->getType(), "storemerge");
6108d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->reserveOperandSpace(2);
6118d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(SI.getOperand(0), SI.getParent());
6128d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    PN->addIncoming(OtherStore->getOperand(0), OtherBB);
6138d9b8d717e665945b31b0742b901561fb433ceceChris Lattner    MergedVal = InsertNewInstBefore(PN, DestBB->front());
6148d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  }
6158d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6168d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Advance to a place where it is safe to insert the new store and
6178d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // insert it.
6188d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  BBI = DestBB->getFirstNonPHI();
6198d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  InsertNewInstBefore(new StoreInst(MergedVal, SI.getOperand(1),
6208d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                    OtherStore->isVolatile(),
6218d9b8d717e665945b31b0742b901561fb433ceceChris Lattner                                    SI.getAlignment()), *BBI);
6228d9b8d717e665945b31b0742b901561fb433ceceChris Lattner
6238d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  // Nuke the old stores.
6248d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(SI);
6258d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  EraseInstFromFunction(*OtherStore);
6268d9b8d717e665945b31b0742b901561fb433ceceChris Lattner  return true;
6278d9b8d717e665945b31b0742b901561fb433ceceChris Lattner}
628