llvm-6502/test/Transforms/GVN/2010-03-31-RedundantPHIs.ll
Bob Wilson 84bd6b0c31 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.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@101612 91177308-0d34-0410-b5e6-96231b3b80d8
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
}