mirror of
https://github.com/RPCSX/llvm.git
synced 2024-12-04 10:04:33 +00:00
[CVP] Don't assume Constants of type i1 can be known to be true or false
CVP wants to analyze the condition operand of a select along an edge. It succeeds in getting back a Constant but not a ConstantInt. Instead, it gets a ConstantExpr. It then assumes that the Constant must be equal to false because it isn't equal to true. Instead, perform an additional comparison. This fixes PR23752. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239217 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b21b529990
commit
e46e8af4d7
@ -113,10 +113,11 @@ bool CorrelatedValuePropagation::processPHI(PHINode *P) {
|
||||
|
||||
Value *Condition = SI->getCondition();
|
||||
if (!Condition->getType()->isVectorTy()) {
|
||||
if (Constant *C = LVI->getConstantOnEdge(Condition, P->getIncomingBlock(i), BB, P)) {
|
||||
if (C == ConstantInt::getTrue(Condition->getType())) {
|
||||
if (Constant *C = LVI->getConstantOnEdge(
|
||||
Condition, P->getIncomingBlock(i), BB, P)) {
|
||||
if (C->isOneValue()) {
|
||||
V = SI->getTrueValue();
|
||||
} else {
|
||||
} else if (C->isZeroValue()) {
|
||||
V = SI->getFalseValue();
|
||||
}
|
||||
// Once LVI learns to handle vector types, we could also add support
|
||||
|
@ -51,3 +51,25 @@ else:
|
||||
ret i8 %b
|
||||
}
|
||||
|
||||
@c = global i32 0, align 4
|
||||
@b = global i32 0, align 4
|
||||
|
||||
; CHECK-LABEL: @PR23752(
|
||||
define i32 @PR23752() {
|
||||
entry:
|
||||
br label %for.body
|
||||
|
||||
for.body:
|
||||
%phi = phi i32 [ 0, %entry ], [ %sel, %for.body ]
|
||||
%sel = select i1 icmp sgt (i32* @b, i32* @c), i32 %phi, i32 1
|
||||
%cmp = icmp ne i32 %sel, 1
|
||||
br i1 %cmp, label %for.body, label %if.end
|
||||
|
||||
; CHECK: %[[sel:.*]] = select i1 icmp sgt (i32* @b, i32* @c), i32 0, i32 1
|
||||
; CHECK-NEXT: %[[cmp:.*]] = icmp ne i32 %[[sel]], 1
|
||||
; CHECK-NEXT: br i1 %[[cmp]]
|
||||
|
||||
if.end:
|
||||
ret i32 %sel
|
||||
; CHECK: ret i32 %[[sel]]
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user