aboutsummaryrefslogtreecommitdiff
path: root/test/Transforms/SimplifyCFG/switch-range-to-icmp.ll
diff options
context:
space:
mode:
Diffstat (limited to 'test/Transforms/SimplifyCFG/switch-range-to-icmp.ll')
-rw-r--r--test/Transforms/SimplifyCFG/switch-range-to-icmp.ll27
1 files changed, 27 insertions, 0 deletions
diff --git a/test/Transforms/SimplifyCFG/switch-range-to-icmp.ll b/test/Transforms/SimplifyCFG/switch-range-to-icmp.ll
index 8bf2b04520b9..a109b317c732 100644
--- a/test/Transforms/SimplifyCFG/switch-range-to-icmp.ll
+++ b/test/Transforms/SimplifyCFG/switch-range-to-icmp.ll
@@ -48,3 +48,30 @@ b:
%1 = call i32 @f(i32 1)
ret i32 %1
}
+
+
+define i32 @unreachable2(i32 %x) {
+; CHECK-LABEL: @unreachable2
+; CHECK: x.off = add i32 %x, -5
+; CHECK: %switch = icmp ult i32 %x.off, 3
+; CHECK: br i1 %switch, label %a, label %b
+
+entry:
+ ; Note: folding the most popular case destination into the default
+ ; would prevent switch-to-icmp here.
+ switch i32 %x, label %unreachable [
+ i32 5, label %a
+ i32 6, label %a
+ i32 7, label %a
+ i32 10, label %b
+ i32 20, label %b
+ ]
+unreachable:
+ unreachable
+a:
+ %0 = call i32 @f(i32 0)
+ ret i32 %0
+b:
+ %1 = call i32 @f(i32 1)
+ ret i32 %1
+}