diff --git a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp index 80cb25e3c34..acd8b683d99 100644 --- a/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp +++ b/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp @@ -1722,7 +1722,7 @@ bool SelectionDAGLowering::handleBitTestsSwitchCase(CaseRec& CR, << "Low bound: " << cast(minValue)->getSExtValue() << "\n" << "High bound: " << cast(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 index 00000000000..f89159987c7 --- /dev/null +++ b/test/CodeGen/X86/2007-04-27-BitTestsBadMask.ll @@ -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 +}