PR7774: Fix undefined shifts in Alpha backend. As a bonus, this actually
authorEli Friedman <eli.friedman@gmail.com>
Sun, 1 Aug 2010 21:13:28 +0000 (21:13 +0000)
committerEli Friedman <eli.friedman@gmail.com>
Sun, 1 Aug 2010 21:13:28 +0000 (21:13 +0000)
improves the generated code in some cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@109985 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/Alpha/AlphaISelDAGToDAG.cpp
test/CodeGen/Alpha/2010-08-01-mulreduce64.ll [new file with mode: 0644]

index d526dc0827b2684b4e3a8017fbfd0dd2fff6e3ed..d197bd15ef9c543e1ce963a84373f71526daa43a 100644 (file)
@@ -113,8 +113,8 @@ namespace {
     static uint64_t getNearPower2(uint64_t x) {
       if (!x) return 0;
       unsigned at = CountLeadingZeros_64(x);
-      uint64_t complow = 1 << (63 - at);
-      uint64_t comphigh = 1 << (64 - at);
+      uint64_t complow = 1ULL << (63 - at);
+      uint64_t comphigh = 1ULL << (64 - at);
       //cerr << x << ":" << complow << ":" << comphigh << "\n";
       if (abs64(complow - x) <= abs64(comphigh - x))
         return complow;
diff --git a/test/CodeGen/Alpha/2010-08-01-mulreduce64.ll b/test/CodeGen/Alpha/2010-08-01-mulreduce64.ll
new file mode 100644 (file)
index 0000000..b838ec9
--- /dev/null
@@ -0,0 +1,11 @@
+; RUN: llc < %s -march=alpha | FileCheck %s
+
+define fastcc i64 @getcount(i64 %s) {
+       %tmp431 = mul i64 %s, 12884901888
+       ret i64 %tmp431
+}
+
+; CHECK: sll $16,33,$0
+; CHECK-NEXT: sll $16,32,$1
+; CHECK-NEXT: addq $0,$1,$0
+