[llvm] r205947 - [ARM64] Fix immediate cost calculation for types larger than i64.

Juergen Ributzka juergen at apple.com
Wed Apr 9 18:36:59 PDT 2014


Author: ributzka
Date: Wed Apr  9 20:36:59 2014
New Revision: 205947

URL: http://llvm.org/viewvc/llvm-project?rev=205947&view=rev
Log:
[ARM64] Fix immediate cost calculation for types larger than i64.

The immediate cost calculation code was hitting an assertion in the included
test case, because APInt was still internally 128-bits. Truncating it to 64-bits
fixed the issue.

Fixes <rdar://problem/16572521>.

Added:
    llvm/trunk/test/Transforms/ConstantHoisting/ARM64/large-immediate.ll
Modified:
    llvm/trunk/lib/Target/ARM64/ARM64TargetTransformInfo.cpp

Modified: llvm/trunk/lib/Target/ARM64/ARM64TargetTransformInfo.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Target/ARM64/ARM64TargetTransformInfo.cpp?rev=205947&r1=205946&r2=205947&view=diff
==============================================================================
--- llvm/trunk/lib/Target/ARM64/ARM64TargetTransformInfo.cpp (original)
+++ llvm/trunk/lib/Target/ARM64/ARM64TargetTransformInfo.cpp Wed Apr  9 20:36:59 2014
@@ -166,7 +166,7 @@ unsigned ARM64TTI::getIntImmCost(const A
   // chunk.
   unsigned Cost = 0;
   for (unsigned ShiftVal = 0; ShiftVal < BitSize; ShiftVal += 64) {
-    APInt Tmp = ImmVal.ashr(ShiftVal).getLoBits(64);
+    APInt Tmp = ImmVal.ashr(ShiftVal).sextOrTrunc(64);
     int64_t Val = Tmp.getSExtValue();
     Cost += getIntImmCost(Val);
   }

Added: llvm/trunk/test/Transforms/ConstantHoisting/ARM64/large-immediate.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/ConstantHoisting/ARM64/large-immediate.ll?rev=205947&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/ConstantHoisting/ARM64/large-immediate.ll (added)
+++ llvm/trunk/test/Transforms/ConstantHoisting/ARM64/large-immediate.ll Wed Apr  9 20:36:59 2014
@@ -0,0 +1,10 @@
+; RUN: opt -mtriple=arm64-darwin-unknown -S -consthoist < %s | FileCheck %s
+
+define i128 @test1(i128 %a) nounwind {
+; CHECK-LABEL: test1
+; CHECK: %const = bitcast i128 12297829382473034410122878 to i128
+  %1 = add i128 %a, 12297829382473034410122878
+  %2 = add i128 %1, 12297829382473034410122878
+  ret i128 %2
+}
+





More information about the llvm-commits mailing list