@@ -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