mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-13 15:11:39 +00:00
Improve the bail-out predicate to really only kick in when phi
translation fails. We were bailing out in some cases that would cause us to miss GVN'ing some non-local cases away. llvm-svn: 130206
This commit is contained in:
parent
fbb7ade7ae
commit
a43e6b57a4
@ -1103,7 +1103,8 @@ bool GVN::processNonLocalLoad(LoadInst *LI,
|
||||
|
||||
// If we had a phi translation failure, we'll have a single entry which is a
|
||||
// clobber in the current block. Reject this early.
|
||||
if (Deps.size() == 1 && Deps[0].getResult().isClobber()) {
|
||||
if (Deps.size() == 1 && Deps[0].getResult().isClobber() &&
|
||||
Deps[0].getResult().getInst()->getParent() == LI->getParent()) {
|
||||
DEBUG(
|
||||
dbgs() << "GVN: non-local load ";
|
||||
WriteAsOperand(dbgs(), LI);
|
||||
|
@ -570,4 +570,27 @@ entry:
|
||||
}
|
||||
|
||||
|
||||
; Cross block partial alias case.
|
||||
define i32 @load_load_partial_alias_cross_block(i8* %P) nounwind ssp {
|
||||
entry:
|
||||
%xx = bitcast i8* %P to i32*
|
||||
%x1 = load i32* %xx, align 4
|
||||
%cmp = icmp eq i32 %x1, 127
|
||||
br i1 %cmp, label %land.lhs.true, label %if.end
|
||||
|
||||
land.lhs.true: ; preds = %entry
|
||||
%arrayidx4 = getelementptr inbounds i8* %P, i64 1
|
||||
%tmp5 = load i8* %arrayidx4, align 1
|
||||
%conv6 = zext i8 %tmp5 to i32
|
||||
ret i32 %conv6
|
||||
|
||||
if.end:
|
||||
ret i32 52
|
||||
; CHECK: @load_load_partial_alias_cross_block
|
||||
; CHECK: land.lhs.true:
|
||||
; CHECK-NOT: load i8
|
||||
; CHECK: ret i32 %conv6
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
@ -1,7 +1,5 @@
|
||||
; RUN: opt < %s -gvn -simplifycfg \
|
||||
; RUN: -disable-output
|
||||
; RUN: opt < %s -gvn -simplifycfg -disable-output
|
||||
; PR867
|
||||
; END.
|
||||
|
||||
target datalayout = "E-p:32:32"
|
||||
target triple = "powerpc-apple-darwin8"
|
||||
|
Loading…
x
Reference in New Issue
Block a user