[llvm] r338273 - Recommit r338204 "[X86] Correct the immediate cost for 'add/sub i64 %x, 0x80000000'."

Craig Topper via llvm-commits llvm-commits at lists.llvm.org
Mon Jul 30 10:29:57 PDT 2018


Author: ctopper
Date: Mon Jul 30 10:29:57 2018
New Revision: 338273

URL: http://llvm.org/viewvc/llvm-project?rev=338273&view=rev
Log:
Recommit r338204 "[X86] Correct the immediate cost for 'add/sub i64 %x, 0x80000000'."

This checks in a more direct way without triggering a UBSAN error.

Modified:
    llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp

Modified: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp?rev=338273&r1=338272&r2=338273&view=diff
==============================================================================
--- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp Mon Jul 30 10:29:57 2018
@@ -2332,9 +2332,15 @@ int X86TTIImpl::getIntImmCost(unsigned O
     // 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 && Imm.getZExtValue() == 0x80000000)
+      return TTI::TCC_Free;
+    ImmIdx = 1;
+    break;
   case Instruction::Mul:
   case Instruction::UDiv:
   case Instruction::SDiv:




More information about the llvm-commits mailing list