diff options
author | Chad Rosier <mcrosier@codeaurora.org> | 2016-05-06 14:25:14 +0000 |
---|---|---|
committer | Chad Rosier <mcrosier@codeaurora.org> | 2016-05-06 14:25:14 +0000 |
commit | 4ab37c00379d158e2c963d762cf11725fe72fa47 (patch) | |
tree | fd079f9f5a940729935ea7f23d670749e38631b3 /llvm/test | |
parent | c7e4239fabf2c876449697caf05a342b01bf0312 (diff) | |
download | bcm5719-llvm-4ab37c00379d158e2c963d762cf11725fe72fa47.tar.gz bcm5719-llvm-4ab37c00379d158e2c963d762cf11725fe72fa47.zip |
[SimplifyCFG] Prefer a simplification based on a dominating condition.
Rather than merge two branches with a common destination.
Differential Revision: http://reviews.llvm.org/D19743
llvm-svn: 268735
Diffstat (limited to 'llvm/test')
-rw-r--r-- | llvm/test/Transforms/SimplifyCFG/basictest.ll | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/llvm/test/Transforms/SimplifyCFG/basictest.ll b/llvm/test/Transforms/SimplifyCFG/basictest.ll index e00c4d84003..686a535a32d 100644 --- a/llvm/test/Transforms/SimplifyCFG/basictest.ll +++ b/llvm/test/Transforms/SimplifyCFG/basictest.ll @@ -25,6 +25,54 @@ define void @test3(i1 %T) { ; CHECK-NEXT: ret void } +; Folding branch to a common destination. +; CHECK-LABEL: @test4_fold +; CHECK: %cmp1 = icmp eq i32 %a, %b +; CHECK: %cmp2 = icmp ugt i32 %a, 0 +; CHECK: %or.cond = and i1 %cmp1, %cmp2 +; CHECK: br i1 %or.cond, label %else, label %untaken +; CHECK-NOT: taken: +; CHECK: ret void +define void @test4_fold(i32 %a, i32 %b) { + %cmp1 = icmp eq i32 %a, %b + br i1 %cmp1, label %taken, label %untaken + +taken: + %cmp2 = icmp ugt i32 %a, 0 + br i1 %cmp2, label %else, label %untaken + +else: + call void @foo() + ret void + +untaken: + ret void +} + +; Prefer a simplification based on a dominating condition rather than folding a +; branch to a common destination. +; CHECK-LABEL: @test4 +; CHECK-NOT: br +; CHECK-NOT: br +; CHECK-NOT: call +; CHECK: ret void +define void @test4_no_fold(i32 %a, i32 %b) { + %cmp1 = icmp eq i32 %a, %b + br i1 %cmp1, label %taken, label %untaken + +taken: + %cmp2 = icmp ugt i32 %a, %b + br i1 %cmp2, label %else, label %untaken + +else: + call void @foo() + ret void + +untaken: + ret void +} + +declare void @foo() ; PR5795 define void @test5(i32 %A) { |