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
This commit is contained in:
Duncan Sands
2012-05-31 08:09:49 +00:00
parent 0559a2f8ae
commit 53b4177df7
2 changed files with 95 additions and 75 deletions

View File

@ -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
}