@@ -162,10 +162,10 @@ static cl::opt<bool> UseFEATCPACodegen(
162
162
cl::init(false));
163
163
164
164
/// Value type used for condition codes.
165
- static const MVT MVT_CC = MVT::i32;
165
+ constexpr MVT CondCodeVT = MVT::i32;
166
166
167
167
/// Value type used for NZCV flags.
168
- static constexpr MVT FlagsVT = MVT::i32;
168
+ constexpr MVT FlagsVT = MVT::i32;
169
169
170
170
static const MCPhysReg GPRArgRegs[] = {AArch64::X0, AArch64::X1, AArch64::X2,
171
171
AArch64::X3, AArch64::X4, AArch64::X5,
@@ -3472,6 +3472,12 @@ static void changeVectorFPCCToAArch64CC(ISD::CondCode CC,
3472
3472
}
3473
3473
}
3474
3474
3475
+ /// Like SelectionDAG::getCondCode(), but for AArch64 condition codes.
3476
+ static SDValue getCondCode(SelectionDAG &DAG, AArch64CC::CondCode CC) {
3477
+ // TODO: Should be TargetConstant (need to s/imm/timm in patterns).
3478
+ return DAG.getConstant(CC, SDLoc(), CondCodeVT);
3479
+ }
3480
+
3475
3481
static bool isLegalArithImmed(uint64_t C) {
3476
3482
// Matches AArch64DAGToDAGISel::SelectArithImmed().
3477
3483
bool IsLegal = (C >> 12 == 0) || ((C & 0xFFFULL) == 0 && C >> 24 == 0);
@@ -3678,7 +3684,7 @@ static SDValue emitConditionalComparison(SDValue LHS, SDValue RHS,
3678
3684
if (Opcode == 0)
3679
3685
Opcode = AArch64ISD::CCMP;
3680
3686
3681
- SDValue Condition = DAG.getConstant(Predicate, DL, MVT_CC );
3687
+ SDValue Condition = getCondCode(DAG, Predicate );
3682
3688
AArch64CC::CondCode InvOutCC = AArch64CC::getInvertedCondCode(OutCC);
3683
3689
unsigned NZCV = AArch64CC::getNZCVToSatisfyCondCode(InvOutCC);
3684
3690
SDValue NZCVOp = DAG.getConstant(NZCV, DL, MVT::i32);
@@ -4075,7 +4081,7 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
4075
4081
Cmp = emitComparison(LHS, RHS, CC, DL, DAG);
4076
4082
AArch64CC = changeIntCCToAArch64CC(CC);
4077
4083
}
4078
- AArch64cc = DAG.getConstant(AArch64CC, DL, MVT_CC );
4084
+ AArch64cc = getCondCode(DAG, AArch64CC );
4079
4085
return Cmp;
4080
4086
}
4081
4087
@@ -4195,7 +4201,7 @@ SDValue AArch64TargetLowering::LowerXOR(SDValue Op, SelectionDAG &DAG) const {
4195
4201
AArch64CC::CondCode CC;
4196
4202
SDValue Value, Overflow;
4197
4203
std::tie(Value, Overflow) = getAArch64XALUOOp(CC, Sel.getValue(0), DAG);
4198
- SDValue CCVal = DAG.getConstant( getInvertedCondCode(CC), DL, MVT::i32 );
4204
+ SDValue CCVal = getCondCode(DAG, getInvertedCondCode(CC));
4199
4205
return DAG.getNode(AArch64ISD::CSEL, DL, Op.getValueType(), TVal, FVal,
4200
4206
CCVal, Overflow);
4201
4207
}
@@ -4274,8 +4280,8 @@ static SDValue carryFlagToValue(SDValue Glue, EVT VT, SelectionDAG &DAG,
4274
4280
SDLoc DL(Glue);
4275
4281
SDValue Zero = DAG.getConstant(0, DL, VT);
4276
4282
SDValue One = DAG.getConstant(1, DL, VT);
4277
- unsigned Cond = Invert ? AArch64CC::LO : AArch64CC::HS;
4278
- SDValue CC = DAG.getConstant(Cond, DL, MVT::i32 );
4283
+ AArch64CC::CondCode Cond = Invert ? AArch64CC::LO : AArch64CC::HS;
4284
+ SDValue CC = getCondCode(DAG, Cond );
4279
4285
return DAG.getNode(AArch64ISD::CSEL, DL, VT, One, Zero, CC, Glue);
4280
4286
}
4281
4287
@@ -4285,7 +4291,7 @@ static SDValue overflowFlagToValue(SDValue Glue, EVT VT, SelectionDAG &DAG) {
4285
4291
SDLoc DL(Glue);
4286
4292
SDValue Zero = DAG.getConstant(0, DL, VT);
4287
4293
SDValue One = DAG.getConstant(1, DL, VT);
4288
- SDValue CC = DAG.getConstant(AArch64CC::VS, DL, MVT::i32 );
4294
+ SDValue CC = getCondCode(DAG, AArch64CC::VS );
4289
4295
return DAG.getNode(AArch64ISD::CSEL, DL, VT, One, Zero, CC, Glue);
4290
4296
}
4291
4297
@@ -4334,7 +4340,7 @@ static SDValue LowerXALUO(SDValue Op, SelectionDAG &DAG) {
4334
4340
// We use an inverted condition, because the conditional select is inverted
4335
4341
// too. This will allow it to be selected to a single instruction:
4336
4342
// CSINC Wd, WZR, WZR, invert(cond).
4337
- SDValue CCVal = DAG.getConstant( getInvertedCondCode(CC), DL, MVT::i32 );
4343
+ SDValue CCVal = getCondCode(DAG, getInvertedCondCode(CC));
4338
4344
Overflow =
4339
4345
DAG.getNode(AArch64ISD::CSEL, DL, MVT::i32, FVal, TVal, CCVal, Overflow);
4340
4346
@@ -7124,8 +7130,7 @@ SDValue AArch64TargetLowering::LowerABS(SDValue Op, SelectionDAG &DAG) const {
7124
7130
SDValue Cmp = DAG.getNode(AArch64ISD::SUBS, DL, DAG.getVTList(VT, FlagsVT),
7125
7131
Op.getOperand(0), DAG.getConstant(0, DL, VT));
7126
7132
return DAG.getNode(AArch64ISD::CSEL, DL, VT, Op.getOperand(0), Neg,
7127
- DAG.getConstant(AArch64CC::PL, DL, MVT::i32),
7128
- Cmp.getValue(1));
7133
+ getCondCode(DAG, AArch64CC::PL), Cmp.getValue(1));
7129
7134
}
7130
7135
7131
7136
static SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) {
@@ -7136,7 +7141,7 @@ static SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) {
7136
7141
AArch64CC::CondCode CC;
7137
7142
if (SDValue Cmp = emitConjunction(DAG, Cond, CC)) {
7138
7143
SDLoc DL(Op);
7139
- SDValue CCVal = DAG.getConstant(CC, DL, MVT::i32 );
7144
+ SDValue CCVal = getCondCode(DAG, CC );
7140
7145
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CCVal,
7141
7146
Cmp);
7142
7147
}
@@ -10575,7 +10580,7 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
10575
10580
10576
10581
if (CC == ISD::SETNE)
10577
10582
OFCC = getInvertedCondCode(OFCC);
10578
- SDValue CCVal = DAG.getConstant(OFCC, DL, MVT::i32 );
10583
+ SDValue CCVal = getCondCode(DAG, OFCC );
10579
10584
10580
10585
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CCVal,
10581
10586
Overflow);
@@ -10648,7 +10653,7 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
10648
10653
AArch64CC::isValidCBCond(changeIntCCToAArch64CC(CC)) &&
10649
10654
ProduceNonFlagSettingCondBr) {
10650
10655
SDValue Cond =
10651
- DAG.getTargetConstant(changeIntCCToAArch64CC(CC), DL, MVT::i32 );
10656
+ DAG.getTargetConstant(changeIntCCToAArch64CC(CC), DL, CondCodeVT );
10652
10657
return DAG.getNode(AArch64ISD::CB, DL, MVT::Other, Chain, Cond, LHS, RHS,
10653
10658
Dest);
10654
10659
}
@@ -10667,11 +10672,11 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
10667
10672
SDValue Cmp = emitComparison(LHS, RHS, CC, DL, DAG);
10668
10673
AArch64CC::CondCode CC1, CC2;
10669
10674
changeFPCCToAArch64CC(CC, CC1, CC2);
10670
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
10675
+ SDValue CC1Val = getCondCode(DAG, CC1 );
10671
10676
SDValue BR1 =
10672
10677
DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CC1Val, Cmp);
10673
10678
if (CC2 != AArch64CC::AL) {
10674
- SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32 );
10679
+ SDValue CC2Val = getCondCode(DAG, CC2 );
10675
10680
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, BR1, Dest, CC2Val,
10676
10681
Cmp);
10677
10682
}
@@ -11160,7 +11165,7 @@ SDValue AArch64TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
11160
11165
if (CC2 == AArch64CC::AL) {
11161
11166
changeFPCCToAArch64CC(ISD::getSetCCInverse(CC, LHS.getValueType()), CC1,
11162
11167
CC2);
11163
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
11168
+ SDValue CC1Val = getCondCode(DAG, CC1 );
11164
11169
11165
11170
// Note that we inverted the condition above, so we reverse the order of
11166
11171
// the true and false operands here. This will allow the setcc to be
@@ -11173,11 +11178,11 @@ SDValue AArch64TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
11173
11178
// of the first as the RHS. We're effectively OR'ing the two CC's together.
11174
11179
11175
11180
// FIXME: It would be nice if we could match the two CSELs to two CSINCs.
11176
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
11181
+ SDValue CC1Val = getCondCode(DAG, CC1 );
11177
11182
SDValue CS1 =
11178
11183
DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, FVal, CC1Val, Cmp);
11179
11184
11180
- SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32 );
11185
+ SDValue CC2Val = getCondCode(DAG, CC2 );
11181
11186
Res = DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, CS1, CC2Val, Cmp);
11182
11187
}
11183
11188
return IsStrict ? DAG.getMergeValues({Res, Cmp.getValue(1)}, DL) : Res;
@@ -11205,8 +11210,7 @@ SDValue AArch64TargetLowering::LowerSETCCCARRY(SDValue Op,
11205
11210
11206
11211
ISD::CondCode Cond = cast<CondCodeSDNode>(Op.getOperand(3))->get();
11207
11212
ISD::CondCode CondInv = ISD::getSetCCInverse(Cond, VT);
11208
- SDValue CCVal =
11209
- DAG.getConstant(changeIntCCToAArch64CC(CondInv), DL, MVT::i32);
11213
+ SDValue CCVal = getCondCode(DAG, changeIntCCToAArch64CC(CondInv));
11210
11214
// Inputs are swapped because the condition is inverted. This will allow
11211
11215
// matching with a single CSINC instruction.
11212
11216
return DAG.getNode(AArch64ISD::CSEL, DL, OpVT, FVal, TVal, CCVal,
@@ -11577,13 +11581,13 @@ SDValue AArch64TargetLowering::LowerSELECT_CC(
11577
11581
}
11578
11582
11579
11583
// Emit first, and possibly only, CSEL.
11580
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
11584
+ SDValue CC1Val = getCondCode(DAG, CC1 );
11581
11585
SDValue CS1 = DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, FVal, CC1Val, Cmp);
11582
11586
11583
11587
// If we need a second CSEL, emit it, using the output of the first as the
11584
11588
// RHS. We're effectively OR'ing the two CC's together.
11585
11589
if (CC2 != AArch64CC::AL) {
11586
- SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32 );
11590
+ SDValue CC2Val = getCondCode(DAG, CC2 );
11587
11591
return DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, CS1, CC2Val, Cmp);
11588
11592
}
11589
11593
@@ -11685,7 +11689,7 @@ SDValue AArch64TargetLowering::LowerSELECT(SDValue Op,
11685
11689
AArch64CC::CondCode OFCC;
11686
11690
SDValue Value, Overflow;
11687
11691
std::tie(Value, Overflow) = getAArch64XALUOOp(OFCC, CCVal.getValue(0), DAG);
11688
- SDValue CCVal = DAG.getConstant(OFCC, DL, MVT::i32 );
11692
+ SDValue CCVal = getCondCode(DAG, OFCC );
11689
11693
11690
11694
return DAG.getNode(AArch64ISD::CSEL, DL, Op.getValueType(), TVal, FVal,
11691
11695
CCVal, Overflow);
@@ -12525,10 +12529,10 @@ static AArch64CC::CondCode parseConstraintCode(llvm::StringRef Constraint) {
12525
12529
/// WZR, invert(<cond>)'.
12526
12530
static SDValue getSETCC(AArch64CC::CondCode CC, SDValue NZCV, const SDLoc &DL,
12527
12531
SelectionDAG &DAG) {
12528
- return DAG.getNode(
12529
- AArch64ISD::CSINC, DL, MVT::i32, DAG.getConstant(0, DL, MVT::i32),
12530
- DAG.getConstant(0, DL, MVT::i32),
12531
- DAG.getConstant( getInvertedCondCode(CC), DL, MVT::i32 ), NZCV);
12532
+ return DAG.getNode(AArch64ISD::CSINC, DL, MVT::i32,
12533
+ DAG.getConstant(0, DL, MVT::i32),
12534
+ DAG.getConstant(0, DL, MVT::i32),
12535
+ getCondCode(DAG, getInvertedCondCode(CC)), NZCV);
12532
12536
}
12533
12537
12534
12538
// Lower @cc flag output via getSETCC.
@@ -18699,7 +18703,7 @@ AArch64TargetLowering::BuildSREMPow2(SDNode *N, const APInt &Divisor,
18699
18703
Created.push_back(Cmp.getNode());
18700
18704
Created.push_back(And.getNode());
18701
18705
} else {
18702
- SDValue CCVal = DAG.getConstant( AArch64CC::MI, DL, MVT_CC );
18706
+ SDValue CCVal = getCondCode(DAG, AArch64CC::MI);
18703
18707
SDVTList VTs = DAG.getVTList(VT, FlagsVT);
18704
18708
18705
18709
SDValue Negs = DAG.getNode(AArch64ISD::SUBS, DL, VTs, Zero, N0);
@@ -19571,11 +19575,11 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
19571
19575
19572
19576
if (N->getOpcode() == ISD::AND) {
19573
19577
AArch64CC::CondCode InvCC0 = AArch64CC::getInvertedCondCode(CC0);
19574
- Condition = DAG.getConstant(InvCC0, DL, MVT_CC );
19578
+ Condition = getCondCode(DAG, InvCC0 );
19575
19579
NZCV = AArch64CC::getNZCVToSatisfyCondCode(CC1);
19576
19580
} else {
19577
19581
AArch64CC::CondCode InvCC1 = AArch64CC::getInvertedCondCode(CC1);
19578
- Condition = DAG.getConstant(CC0, DL, MVT_CC );
19582
+ Condition = getCondCode(DAG, CC0 );
19579
19583
NZCV = AArch64CC::getNZCVToSatisfyCondCode(InvCC1);
19580
19584
}
19581
19585
@@ -19596,8 +19600,7 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
19596
19600
Cmp1.getOperand(1), NZCVOp, Condition, Cmp0);
19597
19601
}
19598
19602
return DAG.getNode(AArch64ISD::CSEL, DL, VT, CSel0.getOperand(0),
19599
- CSel0.getOperand(1), DAG.getConstant(CC1, DL, MVT::i32),
19600
- CCmp);
19603
+ CSel0.getOperand(1), getCondCode(DAG, CC1), CCmp);
19601
19604
}
19602
19605
19603
19606
static SDValue performORCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
@@ -19802,7 +19805,7 @@ static SDValue performANDSETCCCombine(SDNode *N,
19802
19805
SDLoc DL(N);
19803
19806
return DAG.getNode(AArch64ISD::CSINC, DL, VT, DAG.getConstant(0, DL, VT),
19804
19807
DAG.getConstant(0, DL, VT),
19805
- DAG.getConstant(InvertedCC, DL, MVT::i32 ), Cmp);
19808
+ getCondCode(DAG, InvertedCC ), Cmp);
19806
19809
}
19807
19810
}
19808
19811
return SDValue();
@@ -20793,7 +20796,7 @@ static SDValue performAddCSelIntoCSinc(SDNode *N, SelectionDAG &DAG) {
20793
20796
"Unexpected constant value");
20794
20797
20795
20798
SDValue NewNode = DAG.getNode(ISD::ADD, DL, VT, RHS, SDValue(CTVal, 0));
20796
- SDValue CCVal = DAG.getConstant(AArch64CC, DL, MVT::i32 );
20799
+ SDValue CCVal = getCondCode(DAG, AArch64CC );
20797
20800
SDValue Cmp = LHS.getOperand(3);
20798
20801
20799
20802
return DAG.getNode(AArch64ISD::CSINC, DL, VT, NewNode, RHS, CCVal, Cmp);
@@ -20979,7 +20982,7 @@ static SDValue foldADCToCINC(SDNode *N, SelectionDAG &DAG) {
20979
20982
SDLoc DL(N);
20980
20983
20981
20984
// (CINC x cc cond) <=> (CSINC x x !cc cond)
20982
- SDValue CC = DAG.getConstant(AArch64CC::LO, DL, MVT::i32 );
20985
+ SDValue CC = getCondCode(DAG, AArch64CC::LO );
20983
20986
return DAG.getNode(AArch64ISD::CSINC, DL, VT, LHS, LHS, CC, Cond);
20984
20987
}
20985
20988
@@ -22052,7 +22055,7 @@ static SDValue getPTest(SelectionDAG &DAG, EVT VT, SDValue Pg, SDValue Op,
22052
22055
22053
22056
// Convert CC to integer based on requested condition.
22054
22057
// NOTE: Cond is inverted to promote CSEL's removal when it feeds a compare.
22055
- SDValue CC = DAG.getConstant( getInvertedCondCode(Cond), DL, MVT::i32 );
22058
+ SDValue CC = getCondCode(DAG, getInvertedCondCode(Cond));
22056
22059
SDValue Res = DAG.getNode(AArch64ISD::CSEL, DL, OutVT, FVal, TVal, CC, Test);
22057
22060
return DAG.getZExtOrTrunc(Res, DL, VT);
22058
22061
}
@@ -25093,10 +25096,9 @@ static SDValue performBRCONDCombine(SDNode *N,
25093
25096
auto CSelCC = getCSETCondCode(CSel);
25094
25097
if (CSelCC) {
25095
25098
SDLoc DL(N);
25096
- return DAG.getNode(
25097
- N->getOpcode(), DL, N->getVTList(), Chain, Dest,
25098
- DAG.getConstant(getInvertedCondCode(*CSelCC), DL, MVT::i32),
25099
- CSel.getOperand(3));
25099
+ return DAG.getNode(N->getOpcode(), DL, N->getVTList(), Chain, Dest,
25100
+ getCondCode(DAG, getInvertedCondCode(*CSelCC)),
25101
+ CSel.getOperand(3));
25100
25102
}
25101
25103
}
25102
25104
@@ -25237,7 +25239,7 @@ static SDValue foldCSELOfCSEL(SDNode *Op, SelectionDAG &DAG) {
25237
25239
SDLoc DL(Op);
25238
25240
EVT VT = Op->getValueType(0);
25239
25241
25240
- SDValue CCValue = DAG.getConstant(CC, DL, MVT::i32 );
25242
+ SDValue CCValue = getCondCode(DAG, CC );
25241
25243
return DAG.getNode(AArch64ISD::CSEL, DL, VT, L, R, CCValue, Cond);
25242
25244
}
25243
25245
@@ -25314,8 +25316,7 @@ static SDValue reassociateCSELOperandsForCSE(SDNode *N, SelectionDAG &DAG) {
25314
25316
SDValue TValReassoc = Reassociate(TReassocOp, 0);
25315
25317
SDValue FValReassoc = Reassociate(FReassocOp, 1);
25316
25318
return DAG.getNode(AArch64ISD::CSEL, SDLoc(N), VT, TValReassoc, FValReassoc,
25317
- DAG.getConstant(NewCC, SDLoc(N->getOperand(2)), MVT_CC),
25318
- NewCmp.getValue(1));
25319
+ getCondCode(DAG, NewCC), NewCmp.getValue(1));
25319
25320
};
25320
25321
25321
25322
auto CC = static_cast<AArch64CC::CondCode>(N->getConstantOperandVal(2));
@@ -25456,8 +25457,7 @@ static SDValue performCSELCombine(SDNode *N,
25456
25457
SDValue Sub = DAG.getNode(AArch64ISD::SUBS, DL, Cond->getVTList(),
25457
25458
Cond.getOperand(1), Cond.getOperand(0));
25458
25459
return DAG.getNode(AArch64ISD::CSEL, DL, N->getVTList(), N->getOperand(0),
25459
- N->getOperand(1),
25460
- DAG.getConstant(NewCond, DL, MVT::i32),
25460
+ N->getOperand(1), getCondCode(DAG, NewCond),
25461
25461
Sub.getValue(1));
25462
25462
}
25463
25463
}
@@ -25557,10 +25557,9 @@ static SDValue performSETCCCombine(SDNode *N,
25557
25557
auto NewCond = getInvertedCondCode(OldCond);
25558
25558
25559
25559
// csel 0, 1, !cond, X
25560
- SDValue CSEL =
25561
- DAG.getNode(AArch64ISD::CSEL, DL, LHS.getValueType(), LHS.getOperand(0),
25562
- LHS.getOperand(1), DAG.getConstant(NewCond, DL, MVT::i32),
25563
- LHS.getOperand(3));
25560
+ SDValue CSEL = DAG.getNode(AArch64ISD::CSEL, DL, LHS.getValueType(),
25561
+ LHS.getOperand(0), LHS.getOperand(1),
25562
+ getCondCode(DAG, NewCond), LHS.getOperand(3));
25564
25563
return DAG.getZExtOrTrunc(CSEL, DL, VT);
25565
25564
}
25566
25565
@@ -25630,8 +25629,7 @@ static SDValue performFlagSettingCombine(SDNode *N,
25630
25629
// If the flag result isn't used, convert back to a generic opcode.
25631
25630
if (!N->hasAnyUseOfValue(1)) {
25632
25631
SDValue Res = DCI.DAG.getNode(GenericOpcode, DL, VT, N->ops());
25633
- return DCI.DAG.getMergeValues({Res, DCI.DAG.getConstant(0, DL, MVT::i32)},
25634
- DL);
25632
+ return DCI.CombineTo(N, Res, SDValue(N, 1));
25635
25633
}
25636
25634
25637
25635
// Combine identical generic nodes into this node, re-using the result.
@@ -27013,10 +27011,10 @@ static SDValue performRNDRCombine(SDNode *N, SelectionDAG &DAG) {
27013
27011
SDValue A = DAG.getNode(
27014
27012
AArch64ISD::MRS, DL, DAG.getVTList(MVT::i64, FlagsVT, MVT::Other),
27015
27013
N->getOperand(0), DAG.getConstant(Register, DL, MVT::i32));
27016
- SDValue B = DAG.getNode(
27017
- AArch64ISD::CSINC, DL, MVT::i32, DAG.getConstant(0, DL, MVT::i32),
27018
- DAG.getConstant(0, DL, MVT::i32),
27019
- DAG.getConstant(AArch64CC::NE, DL, MVT::i32 ), A.getValue(1));
27014
+ SDValue B = DAG.getNode(AArch64ISD::CSINC, DL, MVT::i32,
27015
+ DAG.getConstant(0, DL, MVT::i32),
27016
+ DAG.getConstant(0, DL, MVT::i32),
27017
+ getCondCode(DAG, AArch64CC::NE ), A.getValue(1));
27020
27018
return DAG.getMergeValues(
27021
27019
{A, DAG.getZExtOrTrunc(B, DL, MVT::i1), A.getValue(2)}, DL);
27022
27020
}
0 commit comments