Skip to content
This repository was archived by the owner on Mar 28, 2020. It is now read-only.

Commit 1e23cc8

Browse files
committed
[AVX-512] Split scalar version of X86ISD::SELECT into a separate opcode because isel is not robust with multiple type profiles for the same opcode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@282340 91177308-0d34-0410-b5e6-96231b3b80d8
1 parent 9ca28ec commit 1e23cc8

File tree

3 files changed

+6
-4
lines changed

3 files changed

+6
-4
lines changed

lib/Target/X86/X86ISelLowering.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15995,7 +15995,8 @@ SDValue X86TargetLowering::LowerSELECT(SDValue Op, SelectionDAG &DAG) const {
1599515995
if (Subtarget.hasAVX512()) {
1599615996
SDValue Cmp = DAG.getNode(X86ISD::FSETCCM, DL, MVT::i1, CondOp0,
1599715997
CondOp1, DAG.getConstant(SSECC, DL, MVT::i8));
15998-
return DAG.getNode(X86ISD::SELECT, DL, VT, Cmp, Op1, Op2);
15998+
return DAG.getNode(VT.isVector() ? X86ISD::SELECT : X86ISD::SELECTS,
15999+
DL, VT, Cmp, Op1, Op2);
1599916000
}
1600016001

1600116002
SDValue Cmp = DAG.getNode(X86ISD::FSETCC, DL, VT, CondOp0, CondOp1,
@@ -17529,7 +17530,7 @@ static SDValue getScalarMaskingNode(SDValue Op, SDValue Mask,
1752917530

1753017531
if (PreservedSrc.isUndef())
1753117532
PreservedSrc = getZeroVector(VT, Subtarget, DAG, dl);
17532-
return DAG.getNode(X86ISD::SELECT, dl, VT, IMask, Op, PreservedSrc);
17533+
return DAG.getNode(X86ISD::SELECTS, dl, VT, IMask, Op, PreservedSrc);
1753317534
}
1753417535

1753517536
static int getSEHRegistrationNodeSize(const Function *Fn) {
@@ -22626,6 +22627,7 @@ const char *X86TargetLowering::getTargetNodeName(unsigned Opcode) const {
2262622627
case X86ISD::COMPRESS: return "X86ISD::COMPRESS";
2262722628
case X86ISD::EXPAND: return "X86ISD::EXPAND";
2262822629
case X86ISD::SELECT: return "X86ISD::SELECT";
22630+
case X86ISD::SELECTS: return "X86ISD::SELECTS";
2262922631
case X86ISD::ADDSUB: return "X86ISD::ADDSUB";
2263022632
case X86ISD::RCP28: return "X86ISD::RCP28";
2263122633
case X86ISD::RCP28S: return "X86ISD::RCP28S";

lib/Target/X86/X86ISelLowering.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ namespace llvm {
9595
SETCC,
9696

9797
/// X86 Select
98-
SELECT,
98+
SELECT, SELECTS,
9999

100100
// Same as SETCC except it's materialized with a sbb and the value is all
101101
// one's or all zero's.

lib/Target/X86/X86InstrFragmentsSIMD.td

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ def X86select : SDNode<"X86ISD::SELECT",
272272
SDTCisSameAs<2, 3>,
273273
SDTCisSameNumEltsAs<0, 1>]>>;
274274

275-
def X86selects : SDNode<"X86ISD::SELECT",
275+
def X86selects : SDNode<"X86ISD::SELECTS",
276276
SDTypeProfile<1, 3, [SDTCisVT<1, i1>,
277277
SDTCisSameAs<0, 2>,
278278
SDTCisSameAs<2, 3>]>>;

0 commit comments

Comments
 (0)