1
0
mirror of https://github.com/RPCS3/llvm-mirror.git synced 2024-11-25 04:02:41 +01:00
llvm-mirror/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
Bob Wilson ad00f21093 Re-commit my previous SSAUpdater changes. The previous version naively tried
to determine where to place PHIs by iteratively comparing reaching definitions
at each block.  That was just plain wrong.  This version now computes the
dominator tree within the subset of the CFG where PHIs may need to be placed,
and then places the PHIs in the iterated dominance frontier of each definition.
The rest of the patch is mostly the same, with a few more performance
improvements added in.

llvm-svn: 101612
2010-04-17 03:08:24 +00:00

47 lines
1.3 KiB
LLVM

; RUN: opt < %s -gvn -enable-full-load-pre -S | FileCheck %s
define i8* @cat(i8* %s1, ...) nounwind {
entry:
br i1 undef, label %bb, label %bb3
bb: ; preds = %entry
unreachable
bb3: ; preds = %entry
store i8* undef, i8** undef, align 4
br i1 undef, label %bb5, label %bb6
bb5: ; preds = %bb3
unreachable
bb6: ; preds = %bb3
br label %bb12
bb8: ; preds = %bb12
br i1 undef, label %bb9, label %bb10
bb9: ; preds = %bb8
%0 = load i8** undef, align 4 ; <i8*> [#uses=0]
%1 = load i8** undef, align 4 ; <i8*> [#uses=0]
br label %bb11
bb10: ; preds = %bb8
br label %bb11
bb11: ; preds = %bb10, %bb9
; CHECK: bb11:
; CHECK: phi
; CHECK-NOT: phi
br label %bb12
bb12: ; preds = %bb11, %bb6
; CHECK: bb12:
; CHECK: phi
; CHECK-NOT: phi
br i1 undef, label %bb8, label %bb13
bb13: ; preds = %bb12
; CHECK: bb13:
ret i8* undef
}