mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-14 05:42:45 +00:00
fix PR6533 by updating the br(xor) code to remember the case
when it looked past a trunc. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@98203 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
e3b8533e71
commit
f2f64e9063
@ -4605,7 +4605,7 @@ SDValue DAGCombiner::visitBRCOND(SDNode *N) {
|
||||
|
||||
SDNode *Trunc = 0;
|
||||
if (N1.getOpcode() == ISD::TRUNCATE && N1.hasOneUse()) {
|
||||
// Look pass truncate.
|
||||
// Look past truncate.
|
||||
Trunc = N1.getNode();
|
||||
N1 = N1.getOperand(0);
|
||||
}
|
||||
@ -4700,7 +4700,9 @@ SDValue DAGCombiner::visitBRCOND(SDNode *N) {
|
||||
Equal = true;
|
||||
}
|
||||
|
||||
EVT SetCCVT = N1.getValueType();
|
||||
SDValue NodeToReplace = Trunc ? SDValue(Trunc, 0) : N1;
|
||||
|
||||
EVT SetCCVT = NodeToReplace.getValueType();
|
||||
if (LegalTypes)
|
||||
SetCCVT = TLI.getSetCCResultType(SetCCVT);
|
||||
SDValue SetCC = DAG.getSetCC(TheXor->getDebugLoc(),
|
||||
@ -4709,9 +4711,9 @@ SDValue DAGCombiner::visitBRCOND(SDNode *N) {
|
||||
Equal ? ISD::SETEQ : ISD::SETNE);
|
||||
// Replace the uses of XOR with SETCC
|
||||
WorkListRemover DeadNodes(*this);
|
||||
DAG.ReplaceAllUsesOfValueWith(N1, SetCC, &DeadNodes);
|
||||
removeFromWorkList(N1.getNode());
|
||||
DAG.DeleteNode(N1.getNode());
|
||||
DAG.ReplaceAllUsesOfValueWith(NodeToReplace, SetCC, &DeadNodes);
|
||||
removeFromWorkList(NodeToReplace.getNode());
|
||||
DAG.DeleteNode(NodeToReplace.getNode());
|
||||
return DAG.getNode(ISD::BRCOND, N->getDebugLoc(),
|
||||
MVT::Other, Chain, SetCC, N2);
|
||||
}
|
||||
|
@ -18,3 +18,18 @@ entry:
|
||||
volatile store i32 %conv19.i, i32* undef
|
||||
ret i32 undef
|
||||
}
|
||||
|
||||
; PR6533
|
||||
define void @test2(i1 %x, i32 %y) nounwind {
|
||||
%land.ext = zext i1 %x to i32 ; <i32> [#uses=1]
|
||||
%and = and i32 %y, 1 ; <i32> [#uses=1]
|
||||
%xor = xor i32 %and, %land.ext ; <i32> [#uses=1]
|
||||
%cmp = icmp eq i32 %xor, 1 ; <i1> [#uses=1]
|
||||
br i1 %cmp, label %if.end, label %if.then
|
||||
|
||||
if.then: ; preds = %land.end
|
||||
ret void
|
||||
|
||||
if.end: ; preds = %land.end
|
||||
ret void
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user