diff options
Diffstat (limited to 'llvm/lib/Analysis/ConstantFolding.cpp')
-rw-r--r-- | llvm/lib/Analysis/ConstantFolding.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/llvm/lib/Analysis/ConstantFolding.cpp b/llvm/lib/Analysis/ConstantFolding.cpp index fab73c2..2f164e8 100644 --- a/llvm/lib/Analysis/ConstantFolding.cpp +++ b/llvm/lib/Analysis/ConstantFolding.cpp @@ -1435,7 +1435,7 @@ Constant *llvm::ConstantFoldCastOperand(unsigned Opcode, Constant *C, /*IsSigned=*/false); } } - return ConstantExpr::getCast(Opcode, C, DestTy); + break; case Instruction::IntToPtr: // If the input is a ptrtoint, turn the pair into a ptr to ptr bitcast if // the int size is >= the ptr size and the address spaces are the same. @@ -1454,8 +1454,7 @@ Constant *llvm::ConstantFoldCastOperand(unsigned Opcode, Constant *C, } } } - - return ConstantExpr::getCast(Opcode, C, DestTy); + break; case Instruction::Trunc: case Instruction::ZExt: case Instruction::SExt: @@ -1466,10 +1465,14 @@ Constant *llvm::ConstantFoldCastOperand(unsigned Opcode, Constant *C, case Instruction::FPToUI: case Instruction::FPToSI: case Instruction::AddrSpaceCast: - return ConstantExpr::getCast(Opcode, C, DestTy); + break; case Instruction::BitCast: return FoldBitCast(C, DestTy, DL); } + + if (ConstantExpr::isDesirableCastOp(Opcode)) + return ConstantExpr::getCast(Opcode, C, DestTy); + return ConstantFoldCastInstruction(Opcode, C, DestTy); } //===----------------------------------------------------------------------===// |