diff options
| author | Hans Wennborg <hans@hanshq.net> | 2015-01-26 19:52:34 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2015-01-26 19:52:34 +0000 |
| commit | b64cb271dced24f1cabf7a33c29240a551b888d4 (patch) | |
| tree | 5472d3061ec62611c84e9db5c0bd520496d8184f /llvm/test/Transforms/SimplifyCFG | |
| parent | 6800008f049f4c33ec42acfd7055b82ed38d7559 (diff) | |
| download | bcm5719-llvm-b64cb271dced24f1cabf7a33c29240a551b888d4.tar.gz bcm5719-llvm-b64cb271dced24f1cabf7a33c29240a551b888d4.zip | |
SimplifyCFG: Omit range checks for switch lookup tables when default is unreachable
The range check would get optimized away later, but we might as well not emit
them in the first place.
http://reviews.llvm.org/D6471
llvm-svn: 227126
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG')
| -rw-r--r-- | llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll index 9cf57b38dfe..ea3b5756390 100644 --- a/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll +++ b/llvm/test/Transforms/SimplifyCFG/X86/switch_to_lookup_table.ll @@ -781,6 +781,35 @@ return: ; CHECK: getelementptr inbounds [9 x i32]* @switch.table6, i32 0, i32 %switch.tableidx } +define i32 @unreachable_default(i32 %x) { +entry: + switch i32 %x, label %default [ + i32 0, label %bb0 + i32 1, label %bb1 + i32 2, label %bb2 + i32 3, label %bb3 + ] + +bb0: br label %return +bb1: br label %return +bb2: br label %return +bb3: br label %return +default: unreachable + +return: + %retval = phi i32 [ 42, %bb0 ], [ 52, %bb1 ], [ 1, %bb2 ], [ 2, %bb3 ] + ret i32 %retval + +; CHECK-LABEL: @unreachable_default( +; CHECK: entry: +; CHECK-NEXT: %switch.tableidx = sub i32 %x, 0 +; CHECK-NOT: icmp +; CHECK-NOT: br 1i +; CHECK-NEXT: %switch.gep = getelementptr inbounds [4 x i32]* @switch.table7, i32 0, i32 %switch.tableidx +; CHECK-NEXT: %switch.load = load i32* %switch.gep +; CHECK-NEXT: ret i32 %switch.load +} + ; Don't create a table with illegal type define i96 @illegaltype(i32 %c) { entry: |

