[X86] Prefer to create a ISD::SETCC over X86ISD::PCMPEQ in combineVectorSizedSetCCEquality.
This is running pre-legalize, we should try to use target independent nodes. This will give the best opportunity for target independent optimizations. llvm-svn: 324147
This commit is contained in:
parent
f46d3d1be9
commit
fae8788cfa
|
|
@ -36477,13 +36477,13 @@ static SDValue combineVectorSizedSetCCEquality(SDNode *SetCC, SelectionDAG &DAG,
|
||||||
SDValue B = DAG.getBitcast(VecVT, X.getOperand(0).getOperand(1));
|
SDValue B = DAG.getBitcast(VecVT, X.getOperand(0).getOperand(1));
|
||||||
SDValue C = DAG.getBitcast(VecVT, X.getOperand(1).getOperand(0));
|
SDValue C = DAG.getBitcast(VecVT, X.getOperand(1).getOperand(0));
|
||||||
SDValue D = DAG.getBitcast(VecVT, X.getOperand(1).getOperand(1));
|
SDValue D = DAG.getBitcast(VecVT, X.getOperand(1).getOperand(1));
|
||||||
SDValue Cmp1 = DAG.getNode(X86ISD::PCMPEQ, DL, VecVT, A, B);
|
SDValue Cmp1 = DAG.getSetCC(DL, VecVT, A, B, ISD::SETEQ);
|
||||||
SDValue Cmp2 = DAG.getNode(X86ISD::PCMPEQ, DL, VecVT, C, D);
|
SDValue Cmp2 = DAG.getSetCC(DL, VecVT, C, D, ISD::SETEQ);
|
||||||
Cmp = DAG.getNode(ISD::AND, DL, VecVT, Cmp1, Cmp2);
|
Cmp = DAG.getNode(ISD::AND, DL, VecVT, Cmp1, Cmp2);
|
||||||
} else {
|
} else {
|
||||||
SDValue VecX = DAG.getBitcast(VecVT, X);
|
SDValue VecX = DAG.getBitcast(VecVT, X);
|
||||||
SDValue VecY = DAG.getBitcast(VecVT, Y);
|
SDValue VecY = DAG.getBitcast(VecVT, Y);
|
||||||
Cmp = DAG.getNode(X86ISD::PCMPEQ, DL, VecVT, VecX, VecY);
|
Cmp = DAG.getSetCC(DL, VecVT, VecX, VecY, ISD::SETEQ);
|
||||||
}
|
}
|
||||||
// If all bytes match (bitmask is 0x(FFFF)FFFF), that's equality.
|
// If all bytes match (bitmask is 0x(FFFF)FFFF), that's equality.
|
||||||
// setcc i128 X, Y, eq --> setcc (pmovmskb (pcmpeqb X, Y)), 0xFFFF, eq
|
// setcc i128 X, Y, eq --> setcc (pmovmskb (pcmpeqb X, Y)), 0xFFFF, eq
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue