summaryrefslogtreecommitdiff
path: root/test/Transforms/Sink
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2012-05-31 08:09:49 +0000
committerDuncan Sands <baldrick@free.fr>2012-05-31 08:09:49 +0000
commit53b4177df78401da23468f49ad0bc056e9acb627 (patch)
tree501ab121e77c7d0da264bea0ceef285987d0a03c /test/Transforms/Sink
parent0559a2f8ae25a6cf34fb0211bbd37c643c0a87e3 (diff)
downloadllvm-53b4177df78401da23468f49ad0bc056e9acb627.tar.gz
llvm-53b4177df78401da23468f49ad0bc056e9acb627.tar.bz2
llvm-53b4177df78401da23468f49ad0bc056e9acb627.tar.xz
Enhance the sinking code to handle diamond patterns. Patch by
Carlo Alberto Ferraris. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@157736 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/Transforms/Sink')
-rw-r--r--test/Transforms/Sink/basic.ll26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Transforms/Sink/basic.ll b/test/Transforms/Sink/basic.ll
index 4c531d82e6..1d0b6b529d 100644
--- a/test/Transforms/Sink/basic.ll
+++ b/test/Transforms/Sink/basic.ll
@@ -36,3 +36,29 @@ true:
false:
ret i32 0
}
+
+; Sink to the nearest post-dominator
+
+; CHECK: @diamond
+; CHECK: X:
+; CHECK-NEXT: phi
+; CHECK-NEXT: mul nsw
+; CHECK-NEXT: sub
+
+define i32 @diamond(i32 %a, i32 %b, i32 %c) {
+ %1 = mul nsw i32 %c, %b
+ %2 = icmp sgt i32 %a, 0
+ br i1 %2, label %B0, label %B1
+
+B0: ; preds = %0
+ br label %X
+
+B1: ; preds = %0
+ br label %X
+
+X: ; preds = %5, %3
+ %.01 = phi i32 [ %c, %B0 ], [ %a, %B1 ]
+ %R = sub i32 %1, %.01
+ ret i32 %R
+}
+