Eric Christopher | cee313d | 2019-04-17 04:52:47 +0000 | [diff] [blame^] | 1 | ; 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 | |
| 10 | define i32 @foo(i32 %c) "no-jump-tables"="true" { |
| 11 | entry: |
| 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 | |
| 19 | sw.bb1: br label %return |
| 20 | sw.bb2: br label %return |
| 21 | sw.bb3: br label %return |
| 22 | sw.default: br label %return |
| 23 | return: |
| 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 | |
| 29 | define i32 @bar(i32 %c) { |
| 30 | entry: |
| 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 | |
| 38 | sw.bb1: br label %return |
| 39 | sw.bb2: br label %return |
| 40 | sw.bb3: br label %return |
| 41 | sw.default: br label %return |
| 42 | return: |
| 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 | |