diff options
author | Eli Friedman <eli.friedman@gmail.com> | 2011-03-15 02:23:35 +0000 |
---|---|---|
committer | Eli Friedman <eli.friedman@gmail.com> | 2011-03-15 02:23:35 +0000 |
commit | c4414c6e92da69e747b9a10479ee95403bbd431b (patch) | |
tree | 07e4192bbb700c30cc71269c4478e27729b56281 /llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll | |
parent | c5c2cfa38114f7b71d1af3137d3d3afa4031d5de (diff) | |
download | bcm5719-llvm-c4414c6e92da69e747b9a10479ee95403bbd431b.tar.gz bcm5719-llvm-c4414c6e92da69e747b9a10479ee95403bbd431b.zip |
PR9450: Make switch optimization in SimplifyCFG not dependent on the ordering
of pointers in an std::map.
llvm-svn: 127650
Diffstat (limited to 'llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll')
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll | 56 |
1 files changed, 48 insertions, 8 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll b/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll index 7133d9875ca..4a692f3622e 100644 --- a/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll +++ b/llvm/test/Transforms/SimplifyCFG/UnreachableEliminate.ll @@ -1,33 +1,73 @@ -; RUN: opt < %s -simplifycfg -S | not grep unreachable +; RUN: opt < %s -simplifycfg -S | FileCheck %s define void @test1(i1 %C, i1* %BP) { +; CHECK: @test1 +; CHECK: entry: +; CHECK-NEXT: ret void +entry: br i1 %C, label %T, label %F -T: ; preds = %0 +T: store i1 %C, i1* %BP unreachable -F: ; preds = %0 +F: ret void } define void @test2() { +; CHECK: @test2 +; CHECK: entry: +; CHECK-NEXT: call void @test2() +; CHECK-NEXT: ret void +entry: invoke void @test2( ) to label %N unwind label %U -U: ; preds = %0 +U: unreachable -N: ; preds = %0 +N: ret void } define i32 @test3(i32 %v) { +; CHECK: @test3 +; CHECK: entry: +; CHECK-NEXT: [[CMP:%[A-Za-z0-9]+]] = icmp eq i32 %v, 2 +; CHECK-NEXT: select i1 [[CMP]], i32 2, i32 1 +; CHECK-NEXT: ret +entry: switch i32 %v, label %default [ i32 1, label %U i32 2, label %T ] -default: ; preds = %0 +default: ret i32 1 -U: ; preds = %0 +U: unreachable -T: ; preds = %0 +T: ret i32 2 } +; PR9450 +define i32 @test4(i32 %v) { +; CHECK: entry: +; CHECK-NEXT: switch i32 %v, label %T [ +; CHECK-NEXT: i32 3, label %V +; CHECK-NEXT: i32 2, label %U +; CHECK-NEXT: ] + +entry: + br label %SWITCH +V: + ret i32 7 +SWITCH: + switch i32 %v, label %default [ + i32 1, label %T + i32 2, label %U + i32 3, label %V + ] +default: + unreachable +U: + ret i32 1 +T: + ret i32 2 +} |