diff options
author | Duncan Sands <baldrick@free.fr> | 2012-05-31 08:09:49 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2012-05-31 08:09:49 +0000 |
commit | 53b4177df78401da23468f49ad0bc056e9acb627 (patch) | |
tree | 501ab121e77c7d0da264bea0ceef285987d0a03c /test/Transforms | |
parent | 0559a2f8ae25a6cf34fb0211bbd37c643c0a87e3 (diff) | |
download | external_llvm-53b4177df78401da23468f49ad0bc056e9acb627.zip external_llvm-53b4177df78401da23468f49ad0bc056e9acb627.tar.gz external_llvm-53b4177df78401da23468f49ad0bc056e9acb627.tar.bz2 |
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')
-rw-r--r-- | test/Transforms/Sink/basic.ll | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/test/Transforms/Sink/basic.ll b/test/Transforms/Sink/basic.ll index 4c531d8..1d0b6b5 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 +} + |