@@ -2730,6 +2730,7 @@ static bool isX86CCSigned(unsigned X86CC) {
2730
2730
2731
2731
static X86::CondCode TranslateIntegerX86CC(ISD::CondCode SetCCOpcode) {
2732
2732
switch (SetCCOpcode) {
2733
+ // clang-format off
2733
2734
default: llvm_unreachable("Invalid integer condition!");
2734
2735
case ISD::SETEQ: return X86::COND_E;
2735
2736
case ISD::SETGT: return X86::COND_G;
@@ -2741,6 +2742,7 @@ static X86::CondCode TranslateIntegerX86CC(ISD::CondCode SetCCOpcode) {
2741
2742
case ISD::SETUGT: return X86::COND_A;
2742
2743
case ISD::SETULE: return X86::COND_BE;
2743
2744
case ISD::SETUGE: return X86::COND_AE;
2745
+ // clang-format on
2744
2746
}
2745
2747
}
2746
2748
@@ -2801,6 +2803,7 @@ static X86::CondCode TranslateX86CC(ISD::CondCode SetCCOpcode, const SDLoc &DL,
2801
2803
// 1 | 0 | 0 | X == Y
2802
2804
// 1 | 1 | 1 | unordered
2803
2805
switch (SetCCOpcode) {
2806
+ // clang-format off
2804
2807
default: llvm_unreachable("Condcode should be pre-legalized away");
2805
2808
case ISD::SETUEQ:
2806
2809
case ISD::SETEQ: return X86::COND_E;
@@ -2822,6 +2825,7 @@ static X86::CondCode TranslateX86CC(ISD::CondCode SetCCOpcode, const SDLoc &DL,
2822
2825
case ISD::SETO: return X86::COND_NP;
2823
2826
case ISD::SETOEQ:
2824
2827
case ISD::SETUNE: return X86::COND_INVALID;
2828
+ // clang-format on
2825
2829
}
2826
2830
}
2827
2831
@@ -7997,11 +8001,13 @@ static bool isHopBuildVector(const BuildVectorSDNode *BV, SelectionDAG &DAG,
7997
8001
if (HOpcode == ISD::DELETED_NODE) {
7998
8002
GenericOpcode = Op.getOpcode();
7999
8003
switch (GenericOpcode) {
8004
+ // clang-format off
8000
8005
case ISD::ADD: HOpcode = X86ISD::HADD; break;
8001
8006
case ISD::SUB: HOpcode = X86ISD::HSUB; break;
8002
8007
case ISD::FADD: HOpcode = X86ISD::FHADD; break;
8003
8008
case ISD::FSUB: HOpcode = X86ISD::FHSUB; break;
8004
8009
default: return false;
8010
+ // clang-format on
8005
8011
}
8006
8012
}
8007
8013
@@ -21575,12 +21581,14 @@ static SDValue lowerAddSubToHorizontalOp(SDValue Op, SelectionDAG &DAG,
21575
21581
// TODO: Allow commuted (f)sub by negating the result of (F)HSUB?
21576
21582
unsigned HOpcode;
21577
21583
switch (Op.getOpcode()) {
21578
- case ISD::ADD: HOpcode = X86ISD::HADD; break;
21579
- case ISD::SUB: HOpcode = X86ISD::HSUB; break;
21580
- case ISD::FADD: HOpcode = X86ISD::FHADD; break;
21581
- case ISD::FSUB: HOpcode = X86ISD::FHSUB; break;
21582
- default:
21583
- llvm_unreachable("Trying to lower unsupported opcode to horizontal op");
21584
+ // clang-format off
21585
+ case ISD::ADD: HOpcode = X86ISD::HADD; break;
21586
+ case ISD::SUB: HOpcode = X86ISD::HSUB; break;
21587
+ case ISD::FADD: HOpcode = X86ISD::FHADD; break;
21588
+ case ISD::FSUB: HOpcode = X86ISD::FHSUB; break;
21589
+ default:
21590
+ llvm_unreachable("Trying to lower unsupported opcode to horizontal op");
21591
+ // clang-format on
21584
21592
}
21585
21593
unsigned LExtIndex = LHS.getConstantOperandVal(1);
21586
21594
unsigned RExtIndex = RHS.getConstantOperandVal(1);
@@ -22482,12 +22490,14 @@ static SDValue EmitTest(SDValue Op, unsigned X86CC, const SDLoc &dl,
22482
22490
22483
22491
// Otherwise use a regular EFLAGS-setting instruction.
22484
22492
switch (ArithOp.getOpcode()) {
22493
+ // clang-format off
22485
22494
default: llvm_unreachable("unexpected operator!");
22486
22495
case ISD::ADD: Opcode = X86ISD::ADD; break;
22487
22496
case ISD::SUB: Opcode = X86ISD::SUB; break;
22488
22497
case ISD::XOR: Opcode = X86ISD::XOR; break;
22489
22498
case ISD::AND: Opcode = X86ISD::AND; break;
22490
22499
case ISD::OR: Opcode = X86ISD::OR; break;
22500
+ // clang-format on
22491
22501
}
22492
22502
22493
22503
NumOperands = 2;
@@ -22876,6 +22886,7 @@ static unsigned translateX86FSETCC(ISD::CondCode SetCCOpcode, SDValue &Op0,
22876
22886
// 6 - NLE
22877
22887
// 7 - ORD
22878
22888
switch (SetCCOpcode) {
22889
+ // clang-format off
22879
22890
default: llvm_unreachable("Unexpected SETCC condition");
22880
22891
case ISD::SETOEQ:
22881
22892
case ISD::SETEQ: SSECC = 0; break;
@@ -22897,6 +22908,7 @@ static unsigned translateX86FSETCC(ISD::CondCode SetCCOpcode, SDValue &Op0,
22897
22908
case ISD::SETO: SSECC = 7; break;
22898
22909
case ISD::SETUEQ: SSECC = 8; break;
22899
22910
case ISD::SETONE: SSECC = 12; break;
22911
+ // clang-format on
22900
22912
}
22901
22913
if (Swap)
22902
22914
std::swap(Op0, Op1);
@@ -23237,6 +23249,7 @@ static SDValue LowerVSETCC(SDValue Op, const X86Subtarget &Subtarget,
23237
23249
// Translate compare code to XOP PCOM compare mode.
23238
23250
unsigned CmpMode = 0;
23239
23251
switch (Cond) {
23252
+ // clang-format off
23240
23253
default: llvm_unreachable("Unexpected SETCC condition");
23241
23254
case ISD::SETULT:
23242
23255
case ISD::SETLT: CmpMode = 0x00; break;
@@ -23248,6 +23261,7 @@ static SDValue LowerVSETCC(SDValue Op, const X86Subtarget &Subtarget,
23248
23261
case ISD::SETGE: CmpMode = 0x03; break;
23249
23262
case ISD::SETEQ: CmpMode = 0x04; break;
23250
23263
case ISD::SETNE: CmpMode = 0x05; break;
23264
+ // clang-format on
23251
23265
}
23252
23266
23253
23267
// Are we comparing unsigned or signed integers?
@@ -23351,11 +23365,13 @@ static SDValue LowerVSETCC(SDValue Op, const X86Subtarget &Subtarget,
23351
23365
bool Invert = false;
23352
23366
unsigned Opc;
23353
23367
switch (Cond) {
23368
+ // clang-format off
23354
23369
default: llvm_unreachable("Unexpected condition code");
23355
23370
case ISD::SETUGT: Invert = true; [[fallthrough]];
23356
23371
case ISD::SETULE: Opc = ISD::UMIN; break;
23357
23372
case ISD::SETULT: Invert = true; [[fallthrough]];
23358
23373
case ISD::SETUGE: Opc = ISD::UMAX; break;
23374
+ // clang-format on
23359
23375
}
23360
23376
23361
23377
SDValue Result = DAG.getNode(Opc, dl, VT, Op0, Op1);
@@ -27492,12 +27508,14 @@ SDValue X86TargetLowering::LowerSET_ROUNDING(SDValue Op,
27492
27508
uint64_t RM = CVal->getZExtValue();
27493
27509
int FieldVal;
27494
27510
switch (static_cast<RoundingMode>(RM)) {
27511
+ // clang-format off
27495
27512
case RoundingMode::NearestTiesToEven: FieldVal = X86::rmToNearest; break;
27496
27513
case RoundingMode::TowardNegative: FieldVal = X86::rmDownward; break;
27497
27514
case RoundingMode::TowardPositive: FieldVal = X86::rmUpward; break;
27498
27515
case RoundingMode::TowardZero: FieldVal = X86::rmTowardZero; break;
27499
27516
default:
27500
27517
llvm_unreachable("rounding mode is not supported by X86 hardware");
27518
+ // clang-format on
27501
27519
}
27502
27520
RMBits = DAG.getConstant(FieldVal, DL, MVT::i16);
27503
27521
} else {
@@ -28713,11 +28731,13 @@ SDValue X86TargetLowering::LowerWin64_i128OP(SDValue Op, SelectionDAG &DAG) cons
28713
28731
RTLIB::Libcall LC;
28714
28732
bool isSigned;
28715
28733
switch (Op->getOpcode()) {
28734
+ // clang-format off
28716
28735
default: llvm_unreachable("Unexpected request for libcall!");
28717
28736
case ISD::SDIV: isSigned = true; LC = RTLIB::SDIV_I128; break;
28718
28737
case ISD::UDIV: isSigned = false; LC = RTLIB::UDIV_I128; break;
28719
28738
case ISD::SREM: isSigned = true; LC = RTLIB::SREM_I128; break;
28720
28739
case ISD::UREM: isSigned = false; LC = RTLIB::UREM_I128; break;
28740
+ // clang-format on
28721
28741
}
28722
28742
28723
28743
SDLoc dl(Op);
@@ -31846,6 +31866,7 @@ bool X86TargetLowering::isInlineAsmTargetBranch(
31846
31866
/// Provide custom lowering hooks for some operations.
31847
31867
SDValue X86TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
31848
31868
switch (Op.getOpcode()) {
31869
+ // clang-format off
31849
31870
default: llvm_unreachable("Should not custom lower this!");
31850
31871
case ISD::ATOMIC_FENCE: return LowerATOMIC_FENCE(Op, Subtarget, DAG);
31851
31872
case ISD::ATOMIC_CMP_SWAP_WITH_SUCCESS:
@@ -31997,6 +32018,7 @@ SDValue X86TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
31997
32018
case ISD::ADDRSPACECAST: return LowerADDRSPACECAST(Op, DAG);
31998
32019
case X86ISD::CVTPS2PH: return LowerCVTPS2PH(Op, DAG);
31999
32020
case ISD::PREFETCH: return LowerPREFETCH(Op, Subtarget, DAG);
32021
+ // clang-format on
32000
32022
}
32001
32023
}
32002
32024
@@ -36128,6 +36150,7 @@ X86TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
36128
36150
// Get the X86 opcode to use.
36129
36151
unsigned Opc;
36130
36152
switch (MI.getOpcode()) {
36153
+ // clang-format off
36131
36154
default: llvm_unreachable("illegal opcode!");
36132
36155
case X86::FP32_TO_INT16_IN_MEM: Opc = X86::IST_Fp16m32; break;
36133
36156
case X86::FP32_TO_INT32_IN_MEM: Opc = X86::IST_Fp32m32; break;
@@ -36138,6 +36161,7 @@ X86TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
36138
36161
case X86::FP80_TO_INT16_IN_MEM: Opc = X86::IST_Fp16m80; break;
36139
36162
case X86::FP80_TO_INT32_IN_MEM: Opc = X86::IST_Fp32m80; break;
36140
36163
case X86::FP80_TO_INT64_IN_MEM: Opc = X86::IST_Fp64m80; break;
36164
+ // clang-format on
36141
36165
}
36142
36166
36143
36167
X86AddressMode AM = getAddressFromInstr(&MI, 0);
@@ -36346,13 +36370,15 @@ X86TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
36346
36370
case X86::PTDPFP16PS: {
36347
36371
unsigned Opc;
36348
36372
switch (MI.getOpcode()) {
36373
+ // clang-format off
36349
36374
default: llvm_unreachable("illegal opcode!");
36350
36375
case X86::PTDPBSSD: Opc = X86::TDPBSSD; break;
36351
36376
case X86::PTDPBSUD: Opc = X86::TDPBSUD; break;
36352
36377
case X86::PTDPBUSD: Opc = X86::TDPBUSD; break;
36353
36378
case X86::PTDPBUUD: Opc = X86::TDPBUUD; break;
36354
36379
case X86::PTDPBF16PS: Opc = X86::TDPBF16PS; break;
36355
36380
case X86::PTDPFP16PS: Opc = X86::TDPFP16PS; break;
36381
+ // clang-format on
36356
36382
}
36357
36383
36358
36384
MachineInstrBuilder MIB = BuildMI(*BB, MI, MIMD, TII->get(Opc));
@@ -36413,9 +36439,11 @@ X86TargetLowering::EmitInstrWithCustomInserter(MachineInstr &MI,
36413
36439
const MIMetadata MIMD(MI);
36414
36440
unsigned Opc;
36415
36441
switch (MI.getOpcode()) {
36442
+ // clang-format off
36416
36443
default: llvm_unreachable("Unexpected instruction!");
36417
36444
case X86::PTCMMIMFP16PS: Opc = X86::TCMMIMFP16PS; break;
36418
36445
case X86::PTCMMRLFP16PS: Opc = X86::TCMMRLFP16PS; break;
36446
+ // clang-format on
36419
36447
}
36420
36448
MachineInstrBuilder MIB = BuildMI(*BB, MI, MIMD, TII->get(Opc));
36421
36449
MIB.addReg(TMMImmToTMMReg(MI.getOperand(0).getImm()), RegState::Define);
@@ -42424,10 +42452,12 @@ static bool checkBitcastSrcVectorSize(SDValue Src, unsigned Size,
42424
42452
// Helper to flip between AND/OR/XOR opcodes and their X86ISD FP equivalents.
42425
42453
static unsigned getAltBitOpcode(unsigned Opcode) {
42426
42454
switch(Opcode) {
42455
+ // clang-format off
42427
42456
case ISD::AND: return X86ISD::FAND;
42428
42457
case ISD::OR: return X86ISD::FOR;
42429
42458
case ISD::XOR: return X86ISD::FXOR;
42430
42459
case X86ISD::ANDNP: return X86ISD::FANDN;
42460
+ // clang-format on
42431
42461
}
42432
42462
llvm_unreachable("Unknown bitwise opcode");
42433
42463
}
@@ -43115,10 +43145,12 @@ static SDValue combineBitcast(SDNode *N, SelectionDAG &DAG,
43115
43145
// transferring the SSE operand to integer register and back.
43116
43146
unsigned FPOpcode;
43117
43147
switch (N0.getOpcode()) {
43118
- case ISD::AND: FPOpcode = X86ISD::FAND; break;
43119
- case ISD::OR: FPOpcode = X86ISD::FOR; break;
43120
- case ISD::XOR: FPOpcode = X86ISD::FXOR; break;
43121
- default: return SDValue();
43148
+ // clang-format off
43149
+ case ISD::AND: FPOpcode = X86ISD::FAND; break;
43150
+ case ISD::OR: FPOpcode = X86ISD::FOR; break;
43151
+ case ISD::XOR: FPOpcode = X86ISD::FXOR; break;
43152
+ default: return SDValue();
43153
+ // clang-format on
43122
43154
}
43123
43155
43124
43156
// Check if we have a bitcast from another integer type as well.
@@ -45181,11 +45213,13 @@ static SDValue combineSelect(SDNode *N, SelectionDAG &DAG,
45181
45213
Cond1 == InnerSetCC.getOperand(1)) {
45182
45214
ISD::CondCode NewCC;
45183
45215
switch (CC == ISD::SETEQ ? InnerCC : CC) {
45216
+ // clang-format off
45184
45217
case ISD::SETGT: NewCC = ISD::SETGE; break;
45185
45218
case ISD::SETLT: NewCC = ISD::SETLE; break;
45186
45219
case ISD::SETUGT: NewCC = ISD::SETUGE; break;
45187
45220
case ISD::SETULT: NewCC = ISD::SETULE; break;
45188
45221
default: NewCC = ISD::SETCC_INVALID; break;
45222
+ // clang-format on
45189
45223
}
45190
45224
if (NewCC != ISD::SETCC_INVALID) {
45191
45225
Cond = DAG.getSetCC(DL, CondVT, Cond0, Cond1, NewCC);
@@ -48018,10 +48052,12 @@ static SDValue PromoteMaskArithmetic(SDNode *N, SelectionDAG &DAG,
48018
48052
static unsigned convertIntLogicToFPLogicOpcode(unsigned Opcode) {
48019
48053
unsigned FPOpcode;
48020
48054
switch (Opcode) {
48055
+ // clang-format off
48021
48056
default: llvm_unreachable("Unexpected input node for FP logic conversion");
48022
48057
case ISD::AND: FPOpcode = X86ISD::FAND; break;
48023
48058
case ISD::OR: FPOpcode = X86ISD::FOR; break;
48024
48059
case ISD::XOR: FPOpcode = X86ISD::FXOR; break;
48060
+ // clang-format on
48025
48061
}
48026
48062
return FPOpcode;
48027
48063
}
@@ -49593,6 +49629,7 @@ static SDValue foldVectorXorShiftIntoCmp(SDNode *N, SelectionDAG &DAG,
49593
49629
return SDValue();
49594
49630
49595
49631
switch (VT.getSimpleVT().SimpleTy) {
49632
+ // clang-format off
49596
49633
default: return SDValue();
49597
49634
case MVT::v16i8:
49598
49635
case MVT::v8i16:
@@ -49602,6 +49639,7 @@ static SDValue foldVectorXorShiftIntoCmp(SDNode *N, SelectionDAG &DAG,
49602
49639
case MVT::v16i16:
49603
49640
case MVT::v8i32:
49604
49641
case MVT::v4i64: if (!Subtarget.hasAVX2()) return SDValue(); break;
49642
+ // clang-format on
49605
49643
}
49606
49644
49607
49645
// There must be a shift right algebraic before the xor, and the xor must be a
@@ -51546,6 +51584,7 @@ static unsigned negateFMAOpcode(unsigned Opcode, bool NegMul, bool NegAcc,
51546
51584
bool NegRes) {
51547
51585
if (NegMul) {
51548
51586
switch (Opcode) {
51587
+ // clang-format off
51549
51588
default: llvm_unreachable("Unexpected opcode");
51550
51589
case ISD::FMA: Opcode = X86ISD::FNMADD; break;
51551
51590
case ISD::STRICT_FMA: Opcode = X86ISD::STRICT_FNMADD; break;
@@ -51559,11 +51598,13 @@ static unsigned negateFMAOpcode(unsigned Opcode, bool NegMul, bool NegAcc,
51559
51598
case X86ISD::FNMSUB: Opcode = X86ISD::FMSUB; break;
51560
51599
case X86ISD::STRICT_FNMSUB: Opcode = X86ISD::STRICT_FMSUB; break;
51561
51600
case X86ISD::FNMSUB_RND: Opcode = X86ISD::FMSUB_RND; break;
51601
+ // clang-format on
51562
51602
}
51563
51603
}
51564
51604
51565
51605
if (NegAcc) {
51566
51606
switch (Opcode) {
51607
+ // clang-format off
51567
51608
default: llvm_unreachable("Unexpected opcode");
51568
51609
case ISD::FMA: Opcode = X86ISD::FMSUB; break;
51569
51610
case ISD::STRICT_FMA: Opcode = X86ISD::STRICT_FMSUB; break;
@@ -51581,12 +51622,14 @@ static unsigned negateFMAOpcode(unsigned Opcode, bool NegMul, bool NegAcc,
51581
51622
case X86ISD::FMADDSUB_RND: Opcode = X86ISD::FMSUBADD_RND; break;
51582
51623
case X86ISD::FMSUBADD: Opcode = X86ISD::FMADDSUB; break;
51583
51624
case X86ISD::FMSUBADD_RND: Opcode = X86ISD::FMADDSUB_RND; break;
51625
+ // clang-format on
51584
51626
}
51585
51627
}
51586
51628
51587
51629
if (NegRes) {
51588
51630
switch (Opcode) {
51589
51631
// For accuracy reason, we never combine fneg and fma under strict FP.
51632
+ // clang-format off
51590
51633
default: llvm_unreachable("Unexpected opcode");
51591
51634
case ISD::FMA: Opcode = X86ISD::FNMSUB; break;
51592
51635
case X86ISD::FMADD_RND: Opcode = X86ISD::FNMSUB_RND; break;
@@ -51596,6 +51639,7 @@ static unsigned negateFMAOpcode(unsigned Opcode, bool NegMul, bool NegAcc,
51596
51639
case X86ISD::FNMADD_RND: Opcode = X86ISD::FMSUB_RND; break;
51597
51640
case X86ISD::FNMSUB: Opcode = ISD::FMA; break;
51598
51641
case X86ISD::FNMSUB_RND: Opcode = X86ISD::FMADD_RND; break;
51642
+ // clang-format on
51599
51643
}
51600
51644
}
51601
51645
@@ -51724,11 +51768,13 @@ static SDValue lowerX86FPLogicOp(SDNode *N, SelectionDAG &DAG,
51724
51768
SDValue Op1 = DAG.getBitcast(IntVT, N->getOperand(1));
51725
51769
unsigned IntOpcode;
51726
51770
switch (N->getOpcode()) {
51771
+ // clang-format off
51727
51772
default: llvm_unreachable("Unexpected FP logic op");
51728
51773
case X86ISD::FOR: IntOpcode = ISD::OR; break;
51729
51774
case X86ISD::FXOR: IntOpcode = ISD::XOR; break;
51730
51775
case X86ISD::FAND: IntOpcode = ISD::AND; break;
51731
51776
case X86ISD::FANDN: IntOpcode = X86ISD::ANDNP; break;
51777
+ // clang-format on
51732
51778
}
51733
51779
SDValue IntOp = DAG.getNode(IntOpcode, dl, IntVT, Op0, Op1);
51734
51780
return DAG.getBitcast(VT, IntOp);
@@ -53788,13 +53834,15 @@ static bool needCarryOrOverflowFlag(SDValue Flags) {
53788
53834
}
53789
53835
53790
53836
switch (CC) {
53837
+ // clang-format off
53791
53838
default: break;
53792
53839
case X86::COND_A: case X86::COND_AE:
53793
53840
case X86::COND_B: case X86::COND_BE:
53794
53841
case X86::COND_O: case X86::COND_NO:
53795
53842
case X86::COND_G: case X86::COND_GE:
53796
53843
case X86::COND_L: case X86::COND_LE:
53797
53844
return true;
53845
+ // clang-format on
53798
53846
}
53799
53847
}
53800
53848
@@ -56188,6 +56236,7 @@ SDValue X86TargetLowering::PerformDAGCombine(SDNode *N,
56188
56236
DAGCombinerInfo &DCI) const {
56189
56237
SelectionDAG &DAG = DCI.DAG;
56190
56238
switch (N->getOpcode()) {
56239
+ // clang-format off
56191
56240
default: break;
56192
56241
case ISD::SCALAR_TO_VECTOR:
56193
56242
return combineScalarToVector(N, DAG);
@@ -56365,6 +56414,7 @@ SDValue X86TargetLowering::PerformDAGCombine(SDNode *N,
56365
56414
case X86ISD::SUBV_BROADCAST_LOAD: return combineBROADCAST_LOAD(N, DAG, DCI);
56366
56415
case X86ISD::MOVDQ2Q: return combineMOVDQ2Q(N, DAG);
56367
56416
case X86ISD::PDEP: return combinePDEP(N, DAG, DCI);
56417
+ // clang-format on
56368
56418
}
56369
56419
56370
56420
return SDValue();
0 commit comments