Skip to content

Commit 8c8bead

Browse files
authored
[X86] combinePTESTCC - ensure repeated operands are frozen (#165697)
As noticed on #165676 - if we're increasing the use of an operand we should freeze it
1 parent a8656c5 commit 8c8bead

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

llvm/lib/Target/X86/X86ISelLowering.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -48778,10 +48778,9 @@ static SDValue combinePTESTCC(SDValue EFLAGS, X86::CondCode &CC,
4877848778
SDValue BC0 = peekThroughBitcasts(Op0);
4877948779
if (BC0.getOpcode() == X86ISD::PCMPEQ &&
4878048780
ISD::isBuildVectorAllZeros(BC0.getOperand(1).getNode())) {
48781-
SDLoc DL(EFLAGS);
4878248781
CC = (CC == X86::COND_B ? X86::COND_E : X86::COND_NE);
48783-
SDValue X = DAG.getBitcast(OpVT, BC0.getOperand(0));
48784-
return DAG.getNode(EFLAGS.getOpcode(), DL, VT, X, X);
48782+
SDValue X = DAG.getBitcast(OpVT, DAG.getFreeze(BC0.getOperand(0)));
48783+
return DAG.getNode(EFLAGS.getOpcode(), SDLoc(EFLAGS), VT, X, X);
4878548784
}
4878648785
}
4878748786
}
@@ -48837,7 +48836,7 @@ static SDValue combinePTESTCC(SDValue EFLAGS, X86::CondCode &CC,
4883748836
MVT FloatSVT = MVT::getFloatingPointVT(EltBits);
4883848837
MVT FloatVT =
4883948838
MVT::getVectorVT(FloatSVT, OpVT.getSizeInBits() / EltBits);
48840-
Res = DAG.getBitcast(FloatVT, Res);
48839+
Res = DAG.getBitcast(FloatVT, DAG.getFreeze(Res));
4884148840
return DAG.getNode(X86ISD::TESTP, SDLoc(EFLAGS), VT, Res, Res);
4884248841
} else if (EltBits == 16) {
4884348842
MVT MovmskVT = BCVT.is128BitVector() ? MVT::v16i8 : MVT::v32i8;
@@ -48856,8 +48855,10 @@ static SDValue combinePTESTCC(SDValue EFLAGS, X86::CondCode &CC,
4885648855
}
4885748856

4885848857
// TESTZ(X,-1) == TESTZ(X,X)
48859-
if (ISD::isBuildVectorAllOnes(Op1.getNode()))
48858+
if (ISD::isBuildVectorAllOnes(Op1.getNode())) {
48859+
Op0 = DAG.getFreeze(Op0);
4886048860
return DAG.getNode(EFLAGS.getOpcode(), SDLoc(EFLAGS), VT, Op0, Op0);
48861+
}
4886148862

4886248863
// TESTZ(OR(LO(X),HI(X)),OR(LO(Y),HI(Y))) -> TESTZ(X,Y)
4886348864
// TODO: Add COND_NE handling?

0 commit comments

Comments
 (0)