blob: a8758a789ec4dfa6206a9e42338f804c80ddd11e [file] [log] [blame]
Eric Christophercee313d2019-04-17 04:52:47 +00001; RUN: opt < %s -simplifycfg -switch-to-lookup -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
2; RUN: opt < %s -passes='simplify-cfg<switch-to-lookup>' -S -mtriple=x86_64-unknown-linux-gnu | FileCheck %s
3
4; In the presence of "-no-jump-tables"="true", simplifycfg should not convert switches to lookup tables.
5
6; CHECK: @switch.table.bar = private unnamed_addr constant [4 x i32] [i32 55, i32 123, i32 0, i32 -1]
7; CHECK-LABEL: foo
8; CHECK-NOT: @switch.table.foo = private unnamed_addr constant [4 x i32] [i32 55, i32 123, i32 0, i32 -1]
9
10define i32 @foo(i32 %c) "no-jump-tables"="true" {
11entry:
12 switch i32 %c, label %sw.default [
13 i32 42, label %return
14 i32 43, label %sw.bb1
15 i32 44, label %sw.bb2
16 i32 45, label %sw.bb3
17 ]
18
19sw.bb1: br label %return
20sw.bb2: br label %return
21sw.bb3: br label %return
22sw.default: br label %return
23return:
24 %retval.0 = phi i32 [ 15, %sw.default ], [ -1, %sw.bb3 ], [ 0, %sw.bb2 ], [ 123, %sw.bb1 ], [ 55, %entry ]
25 ret i32 %retval.0
26}
27
28
29define i32 @bar(i32 %c) {
30entry:
31 switch i32 %c, label %sw.default [
32 i32 42, label %return
33 i32 43, label %sw.bb1
34 i32 44, label %sw.bb2
35 i32 45, label %sw.bb3
36 ]
37
38sw.bb1: br label %return
39sw.bb2: br label %return
40sw.bb3: br label %return
41sw.default: br label %return
42return:
43 %retval.0 = phi i32 [ 15, %sw.default ], [ -1, %sw.bb3 ], [ 0, %sw.bb2 ], [ 123, %sw.bb1 ], [ 55, %entry ]
44 ret i32 %retval.0
45}
46