diff options
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/X86/X86TargetTransformInfo.cpp | 8 | 
1 files changed, 7 insertions, 1 deletions
| diff --git a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp index 1b260d8d45d..0257c42def2 100644 --- a/llvm/lib/Target/X86/X86TargetTransformInfo.cpp +++ b/llvm/lib/Target/X86/X86TargetTransformInfo.cpp @@ -2332,9 +2332,15 @@ int X86TTIImpl::getIntImmCost(unsigned Opcode, unsigned Idx, const APInt &Imm,      // immediates here as the normal path expects bit 31 to be sign extended.      if (Idx == 1 && Imm.getBitWidth() == 64 && isUInt<32>(Imm.getZExtValue()))        return TTI::TCC_Free; -    LLVM_FALLTHROUGH; +    ImmIdx = 1; +    break;    case Instruction::Add:    case Instruction::Sub: +    // For add/sub, we can use the opposite instruction for INT32_MIN. +    if (Idx == 1 && Imm.getBitWidth() == 64 && isInt<32>(-Imm.getSExtValue())) +      return TTI::TCC_Free; +    ImmIdx = 1; +    break;    case Instruction::Mul:    case Instruction::UDiv:    case Instruction::SDiv: | 

