diff options
Diffstat (limited to 'llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp | 18 | 
1 files changed, 9 insertions, 9 deletions
| diff --git a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp index a44a8deda1a..deed58c425e 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineLoadStoreAlloca.cpp @@ -169,15 +169,6 @@ static Instruction *simplifyAllocaArraySize(InstCombiner &IC, AllocaInst &AI) {    if (!AI.isArrayAllocation())      return nullptr; -  // Ensure that the alloca array size argument has type intptr_t, so that -  // any casting is exposed early. -  Type *IntPtrTy = IC.getDataLayout().getIntPtrType(AI.getType()); -  if (AI.getArraySize()->getType() != IntPtrTy) { -    Value *V = IC.Builder->CreateIntCast(AI.getArraySize(), IntPtrTy, false); -    AI.setOperand(0, V); -    return &AI; -  } -    // Convert: alloca Ty, C - where C is a constant != 1 into: alloca [C x Ty], 1    if (const ConstantInt *C = dyn_cast<ConstantInt>(AI.getArraySize())) {      Type *NewTy = ArrayType::get(AI.getAllocatedType(), C->getZExtValue()); @@ -209,6 +200,15 @@ static Instruction *simplifyAllocaArraySize(InstCombiner &IC, AllocaInst &AI) {    if (isa<UndefValue>(AI.getArraySize()))      return IC.ReplaceInstUsesWith(AI, Constant::getNullValue(AI.getType())); +  // Ensure that the alloca array size argument has type intptr_t, so that +  // any casting is exposed early. +  Type *IntPtrTy = IC.getDataLayout().getIntPtrType(AI.getType()); +  if (AI.getArraySize()->getType() != IntPtrTy) { +    Value *V = IC.Builder->CreateIntCast(AI.getArraySize(), IntPtrTy, false); +    AI.setOperand(0, V); +    return &AI; +  } +    return nullptr;  } | 

