Fixx off-by-one bug, which prevents llvm-gcc bootstrap on ppc32
authorAnton Korobeynikov <asl@math.spbu.ru>
Thu, 26 Apr 2007 20:44:04 +0000 (20:44 +0000)
committerAnton Korobeynikov <asl@math.spbu.ru>
Thu, 26 Apr 2007 20:44:04 +0000 (20:44 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@36490 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll [new file with mode: 0644]

index 80cb25e3c34b19a03da5224dc9967b182789cd1e..acd8b683d99970b3790cc3d04aba8c85b5c002fa 100644 (file)
@@ -1722,7 +1722,7 @@ bool SelectionDAGLowering::handleBitTestsSwitchCase(CaseRec& CR,
        << "Low bound: " << cast<ConstantInt>(minValue)->getSExtValue() << "\n"
        << "High bound: " << cast<ConstantInt>(maxValue)->getSExtValue() << "\n";
   
-  if (range>IntPtrBits ||
+  if (range>=IntPtrBits ||
       (!(Dests.size() == 1 && numCmps >= 3) &&
        !(Dests.size() == 2 && numCmps >= 5) &&
        !(Dests.size() >= 3 && numCmps >= 6)))
diff --git a/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll b/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll
new file mode 100644 (file)
index 0000000..f891599
--- /dev/null
@@ -0,0 +1,18 @@
+; RUN: llvm-as < %s | llc -march=x86 | grep -c je | grep 3
+; RUN: llvm-as < %s | llc -march=x86-64 | grep 4297064449
+; PR 1325+
+
+define i32 @foo(i8 %bar) {
+entry:
+       switch i8 %bar, label %bb1203 [
+                i8 117, label %bb1204
+                i8 85, label %bb1204
+                i8 106, label %bb1204
+       ]
+
+bb1203:                ; preds = %entry
+       ret i32 1
+
+bb1204:                ; preds = %entry, %entry, %entry
+       ret i32 2
+}