@@ -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,
@@ -3390,6 +3390,12 @@ static void changeVectorFPCCToAArch64CC(ISD::CondCode CC,
3390
3390
}
3391
3391
}
3392
3392
3393
+ /// Like SelectionDAG::getCondCode(), but for AArch64 condition codes.
3394
+ static SDValue getCondCode(SelectionDAG &DAG, AArch64CC::CondCode CC) {
3395
+ // TODO: Should be TargetConstant (need to s/imm/timm in patterns).
3396
+ return DAG.getConstant(CC, SDLoc(), CondCodeVT);
3397
+ }
3398
+
3393
3399
static bool isLegalArithImmed(uint64_t C) {
3394
3400
// Matches AArch64DAGToDAGISel::SelectArithImmed().
3395
3401
bool IsLegal = (C >> 12 == 0) || ((C & 0xFFFULL) == 0 && C >> 24 == 0);
@@ -3596,7 +3602,7 @@ static SDValue emitConditionalComparison(SDValue LHS, SDValue RHS,
3596
3602
if (Opcode == 0)
3597
3603
Opcode = AArch64ISD::CCMP;
3598
3604
3599
- SDValue Condition = DAG.getConstant(Predicate, DL, MVT_CC );
3605
+ SDValue Condition = getCondCode(DAG, Predicate );
3600
3606
AArch64CC::CondCode InvOutCC = AArch64CC::getInvertedCondCode(OutCC);
3601
3607
unsigned NZCV = AArch64CC::getNZCVToSatisfyCondCode(InvOutCC);
3602
3608
SDValue NZCVOp = DAG.getConstant(NZCV, DL, MVT::i32);
@@ -3993,7 +3999,7 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
3993
3999
Cmp = emitComparison(LHS, RHS, CC, DL, DAG);
3994
4000
AArch64CC = changeIntCCToAArch64CC(CC);
3995
4001
}
3996
- AArch64cc = DAG.getConstant(AArch64CC, DL, MVT_CC );
4002
+ AArch64cc = getCondCode(DAG, AArch64CC );
3997
4003
return Cmp;
3998
4004
}
3999
4005
@@ -4113,7 +4119,7 @@ SDValue AArch64TargetLowering::LowerXOR(SDValue Op, SelectionDAG &DAG) const {
4113
4119
AArch64CC::CondCode CC;
4114
4120
SDValue Value, Overflow;
4115
4121
std::tie(Value, Overflow) = getAArch64XALUOOp(CC, Sel.getValue(0), DAG);
4116
- SDValue CCVal = DAG.getConstant( getInvertedCondCode(CC), DL, MVT::i32 );
4122
+ SDValue CCVal = getCondCode(DAG, getInvertedCondCode(CC));
4117
4123
return DAG.getNode(AArch64ISD::CSEL, DL, Op.getValueType(), TVal, FVal,
4118
4124
CCVal, Overflow);
4119
4125
}
@@ -4192,8 +4198,8 @@ static SDValue carryFlagToValue(SDValue Glue, EVT VT, SelectionDAG &DAG,
4192
4198
SDLoc DL(Glue);
4193
4199
SDValue Zero = DAG.getConstant(0, DL, VT);
4194
4200
SDValue One = DAG.getConstant(1, DL, VT);
4195
- unsigned Cond = Invert ? AArch64CC::LO : AArch64CC::HS;
4196
- SDValue CC = DAG.getConstant(Cond, DL, MVT::i32 );
4201
+ AArch64CC::CondCode Cond = Invert ? AArch64CC::LO : AArch64CC::HS;
4202
+ SDValue CC = getCondCode(DAG, Cond );
4197
4203
return DAG.getNode(AArch64ISD::CSEL, DL, VT, One, Zero, CC, Glue);
4198
4204
}
4199
4205
@@ -4203,7 +4209,7 @@ static SDValue overflowFlagToValue(SDValue Glue, EVT VT, SelectionDAG &DAG) {
4203
4209
SDLoc DL(Glue);
4204
4210
SDValue Zero = DAG.getConstant(0, DL, VT);
4205
4211
SDValue One = DAG.getConstant(1, DL, VT);
4206
- SDValue CC = DAG.getConstant(AArch64CC::VS, DL, MVT::i32 );
4212
+ SDValue CC = getCondCode(DAG, AArch64CC::VS );
4207
4213
return DAG.getNode(AArch64ISD::CSEL, DL, VT, One, Zero, CC, Glue);
4208
4214
}
4209
4215
@@ -4253,7 +4259,7 @@ static SDValue LowerXALUO(SDValue Op, SelectionDAG &DAG) {
4253
4259
// We use an inverted condition, because the conditional select is inverted
4254
4260
// too. This will allow it to be selected to a single instruction:
4255
4261
// CSINC Wd, WZR, WZR, invert(cond).
4256
- SDValue CCVal = DAG.getConstant( getInvertedCondCode(CC), DL, MVT::i32 );
4262
+ SDValue CCVal = getCondCode(DAG, getInvertedCondCode(CC));
4257
4263
Overflow =
4258
4264
DAG.getNode(AArch64ISD::CSEL, DL, MVT::i32, FVal, TVal, CCVal, Overflow);
4259
4265
@@ -7043,8 +7049,7 @@ SDValue AArch64TargetLowering::LowerABS(SDValue Op, SelectionDAG &DAG) const {
7043
7049
SDValue Cmp = DAG.getNode(AArch64ISD::SUBS, DL, DAG.getVTList(VT, FlagsVT),
7044
7050
Op.getOperand(0), DAG.getConstant(0, DL, VT));
7045
7051
return DAG.getNode(AArch64ISD::CSEL, DL, VT, Op.getOperand(0), Neg,
7046
- DAG.getConstant(AArch64CC::PL, DL, MVT::i32),
7047
- Cmp.getValue(1));
7052
+ getCondCode(DAG, AArch64CC::PL), Cmp.getValue(1));
7048
7053
}
7049
7054
7050
7055
static SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) {
@@ -7055,7 +7060,7 @@ static SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) {
7055
7060
AArch64CC::CondCode CC;
7056
7061
if (SDValue Cmp = emitConjunction(DAG, Cond, CC)) {
7057
7062
SDLoc DL(Op);
7058
- SDValue CCVal = DAG.getConstant(CC, DL, MVT::i32 );
7063
+ SDValue CCVal = getCondCode(DAG, CC );
7059
7064
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CCVal,
7060
7065
Cmp);
7061
7066
}
@@ -10489,7 +10494,7 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
10489
10494
10490
10495
if (CC == ISD::SETNE)
10491
10496
OFCC = getInvertedCondCode(OFCC);
10492
- SDValue CCVal = DAG.getConstant(OFCC, DL, MVT::i32 );
10497
+ SDValue CCVal = getCondCode(DAG, OFCC );
10493
10498
10494
10499
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CCVal,
10495
10500
Overflow);
@@ -10562,7 +10567,7 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
10562
10567
AArch64CC::isValidCBCond(changeIntCCToAArch64CC(CC)) &&
10563
10568
ProduceNonFlagSettingCondBr) {
10564
10569
SDValue Cond =
10565
- DAG.getTargetConstant(changeIntCCToAArch64CC(CC), DL, MVT::i32 );
10570
+ DAG.getTargetConstant(changeIntCCToAArch64CC(CC), DL, CondCodeVT );
10566
10571
return DAG.getNode(AArch64ISD::CB, DL, MVT::Other, Chain, Cond, LHS, RHS,
10567
10572
Dest);
10568
10573
}
@@ -10581,11 +10586,11 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
10581
10586
SDValue Cmp = emitComparison(LHS, RHS, CC, DL, DAG);
10582
10587
AArch64CC::CondCode CC1, CC2;
10583
10588
changeFPCCToAArch64CC(CC, CC1, CC2);
10584
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
10589
+ SDValue CC1Val = getCondCode(DAG, CC1 );
10585
10590
SDValue BR1 =
10586
10591
DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CC1Val, Cmp);
10587
10592
if (CC2 != AArch64CC::AL) {
10588
- SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32 );
10593
+ SDValue CC2Val = getCondCode(DAG, CC2 );
10589
10594
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, BR1, Dest, CC2Val,
10590
10595
Cmp);
10591
10596
}
@@ -11074,7 +11079,7 @@ SDValue AArch64TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
11074
11079
if (CC2 == AArch64CC::AL) {
11075
11080
changeFPCCToAArch64CC(ISD::getSetCCInverse(CC, LHS.getValueType()), CC1,
11076
11081
CC2);
11077
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
11082
+ SDValue CC1Val = getCondCode(DAG, CC1 );
11078
11083
11079
11084
// Note that we inverted the condition above, so we reverse the order of
11080
11085
// the true and false operands here. This will allow the setcc to be
@@ -11087,11 +11092,11 @@ SDValue AArch64TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
11087
11092
// of the first as the RHS. We're effectively OR'ing the two CC's together.
11088
11093
11089
11094
// FIXME: It would be nice if we could match the two CSELs to two CSINCs.
11090
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
11095
+ SDValue CC1Val = getCondCode(DAG, CC1 );
11091
11096
SDValue CS1 =
11092
11097
DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, FVal, CC1Val, Cmp);
11093
11098
11094
- SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32 );
11099
+ SDValue CC2Val = getCondCode(DAG, CC2 );
11095
11100
Res = DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, CS1, CC2Val, Cmp);
11096
11101
}
11097
11102
return IsStrict ? DAG.getMergeValues({Res, Cmp.getValue(1)}, DL) : Res;
@@ -11119,8 +11124,7 @@ SDValue AArch64TargetLowering::LowerSETCCCARRY(SDValue Op,
11119
11124
11120
11125
ISD::CondCode Cond = cast<CondCodeSDNode>(Op.getOperand(3))->get();
11121
11126
ISD::CondCode CondInv = ISD::getSetCCInverse(Cond, VT);
11122
- SDValue CCVal =
11123
- DAG.getConstant(changeIntCCToAArch64CC(CondInv), DL, MVT::i32);
11127
+ SDValue CCVal = getCondCode(DAG, changeIntCCToAArch64CC(CondInv));
11124
11128
// Inputs are swapped because the condition is inverted. This will allow
11125
11129
// matching with a single CSINC instruction.
11126
11130
return DAG.getNode(AArch64ISD::CSEL, DL, OpVT, FVal, TVal, CCVal,
@@ -11475,13 +11479,13 @@ SDValue AArch64TargetLowering::LowerSELECT_CC(
11475
11479
}
11476
11480
11477
11481
// Emit first, and possibly only, CSEL.
11478
- SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32 );
11482
+ SDValue CC1Val = getCondCode(DAG, CC1 );
11479
11483
SDValue CS1 = DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, FVal, CC1Val, Cmp);
11480
11484
11481
11485
// If we need a second CSEL, emit it, using the output of the first as the
11482
11486
// RHS. We're effectively OR'ing the two CC's together.
11483
11487
if (CC2 != AArch64CC::AL) {
11484
- SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32 );
11488
+ SDValue CC2Val = getCondCode(DAG, CC2 );
11485
11489
return DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, CS1, CC2Val, Cmp);
11486
11490
}
11487
11491
@@ -11585,7 +11589,7 @@ SDValue AArch64TargetLowering::LowerSELECT(SDValue Op,
11585
11589
AArch64CC::CondCode OFCC;
11586
11590
SDValue Value, Overflow;
11587
11591
std::tie(Value, Overflow) = getAArch64XALUOOp(OFCC, CCVal.getValue(0), DAG);
11588
- SDValue CCVal = DAG.getConstant(OFCC, DL, MVT::i32 );
11592
+ SDValue CCVal = getCondCode(DAG, OFCC );
11589
11593
11590
11594
return DAG.getNode(AArch64ISD::CSEL, DL, Op.getValueType(), TVal, FVal,
11591
11595
CCVal, Overflow);
@@ -12423,10 +12427,10 @@ static AArch64CC::CondCode parseConstraintCode(llvm::StringRef Constraint) {
12423
12427
/// WZR, invert(<cond>)'.
12424
12428
static SDValue getSETCC(AArch64CC::CondCode CC, SDValue NZCV, const SDLoc &DL,
12425
12429
SelectionDAG &DAG) {
12426
- return DAG.getNode(
12427
- AArch64ISD::CSINC, DL, MVT::i32, DAG.getConstant(0, DL, MVT::i32),
12428
- DAG.getConstant(0, DL, MVT::i32),
12429
- DAG.getConstant( getInvertedCondCode(CC), DL, MVT::i32 ), NZCV);
12430
+ return DAG.getNode(AArch64ISD::CSINC, DL, MVT::i32,
12431
+ DAG.getConstant(0, DL, MVT::i32),
12432
+ DAG.getConstant(0, DL, MVT::i32),
12433
+ getCondCode(DAG, getInvertedCondCode(CC)), NZCV);
12430
12434
}
12431
12435
12432
12436
// Lower @cc flag output via getSETCC.
@@ -18594,7 +18598,7 @@ AArch64TargetLowering::BuildSREMPow2(SDNode *N, const APInt &Divisor,
18594
18598
Created.push_back(Cmp.getNode());
18595
18599
Created.push_back(And.getNode());
18596
18600
} else {
18597
- SDValue CCVal = DAG.getConstant( AArch64CC::MI, DL, MVT_CC );
18601
+ SDValue CCVal = getCondCode(DAG, AArch64CC::MI);
18598
18602
SDVTList VTs = DAG.getVTList(VT, FlagsVT);
18599
18603
18600
18604
SDValue Negs = DAG.getNode(AArch64ISD::SUBS, DL, VTs, Zero, N0);
@@ -19466,11 +19470,11 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
19466
19470
19467
19471
if (N->getOpcode() == ISD::AND) {
19468
19472
AArch64CC::CondCode InvCC0 = AArch64CC::getInvertedCondCode(CC0);
19469
- Condition = DAG.getConstant(InvCC0, DL, MVT_CC );
19473
+ Condition = getCondCode(DAG, InvCC0 );
19470
19474
NZCV = AArch64CC::getNZCVToSatisfyCondCode(CC1);
19471
19475
} else {
19472
19476
AArch64CC::CondCode InvCC1 = AArch64CC::getInvertedCondCode(CC1);
19473
- Condition = DAG.getConstant(CC0, DL, MVT_CC );
19477
+ Condition = getCondCode(DAG, CC0 );
19474
19478
NZCV = AArch64CC::getNZCVToSatisfyCondCode(InvCC1);
19475
19479
}
19476
19480
@@ -19491,8 +19495,7 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
19491
19495
Cmp1.getOperand(1), NZCVOp, Condition, Cmp0);
19492
19496
}
19493
19497
return DAG.getNode(AArch64ISD::CSEL, DL, VT, CSel0.getOperand(0),
19494
- CSel0.getOperand(1), DAG.getConstant(CC1, DL, MVT::i32),
19495
- CCmp);
19498
+ CSel0.getOperand(1), getCondCode(DAG, CC1), CCmp);
19496
19499
}
19497
19500
19498
19501
static SDValue performORCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
@@ -19697,7 +19700,7 @@ static SDValue performANDSETCCCombine(SDNode *N,
19697
19700
SDLoc DL(N);
19698
19701
return DAG.getNode(AArch64ISD::CSINC, DL, VT, DAG.getConstant(0, DL, VT),
19699
19702
DAG.getConstant(0, DL, VT),
19700
- DAG.getConstant(InvertedCC, DL, MVT::i32 ), Cmp);
19703
+ getCondCode(DAG, InvertedCC ), Cmp);
19701
19704
}
19702
19705
}
19703
19706
return SDValue();
@@ -20688,7 +20691,7 @@ static SDValue performAddCSelIntoCSinc(SDNode *N, SelectionDAG &DAG) {
20688
20691
"Unexpected constant value");
20689
20692
20690
20693
SDValue NewNode = DAG.getNode(ISD::ADD, DL, VT, RHS, SDValue(CTVal, 0));
20691
- SDValue CCVal = DAG.getConstant(AArch64CC, DL, MVT::i32 );
20694
+ SDValue CCVal = getCondCode(DAG, AArch64CC );
20692
20695
SDValue Cmp = LHS.getOperand(3);
20693
20696
20694
20697
return DAG.getNode(AArch64ISD::CSINC, DL, VT, NewNode, RHS, CCVal, Cmp);
@@ -20874,7 +20877,7 @@ static SDValue foldADCToCINC(SDNode *N, SelectionDAG &DAG) {
20874
20877
SDLoc DL(N);
20875
20878
20876
20879
// (CINC x cc cond) <=> (CSINC x x !cc cond)
20877
- SDValue CC = DAG.getConstant(AArch64CC::LO, DL, MVT::i32 );
20880
+ SDValue CC = getCondCode(DAG, AArch64CC::LO );
20878
20881
return DAG.getNode(AArch64ISD::CSINC, DL, VT, LHS, LHS, CC, Cond);
20879
20882
}
20880
20883
@@ -21947,7 +21950,7 @@ static SDValue getPTest(SelectionDAG &DAG, EVT VT, SDValue Pg, SDValue Op,
21947
21950
21948
21951
// Convert CC to integer based on requested condition.
21949
21952
// NOTE: Cond is inverted to promote CSEL's removal when it feeds a compare.
21950
- SDValue CC = DAG.getConstant( getInvertedCondCode(Cond), DL, MVT::i32 );
21953
+ SDValue CC = getCondCode(DAG, getInvertedCondCode(Cond));
21951
21954
SDValue Res = DAG.getNode(AArch64ISD::CSEL, DL, OutVT, FVal, TVal, CC, Test);
21952
21955
return DAG.getZExtOrTrunc(Res, DL, VT);
21953
21956
}
@@ -24931,10 +24934,9 @@ static SDValue performBRCONDCombine(SDNode *N,
24931
24934
auto CSelCC = getCSETCondCode(CSel);
24932
24935
if (CSelCC) {
24933
24936
SDLoc DL(N);
24934
- return DAG.getNode(
24935
- N->getOpcode(), DL, N->getVTList(), Chain, Dest,
24936
- DAG.getConstant(getInvertedCondCode(*CSelCC), DL, MVT::i32),
24937
- CSel.getOperand(3));
24937
+ return DAG.getNode(N->getOpcode(), DL, N->getVTList(), Chain, Dest,
24938
+ getCondCode(DAG, getInvertedCondCode(*CSelCC)),
24939
+ CSel.getOperand(3));
24938
24940
}
24939
24941
}
24940
24942
@@ -25075,7 +25077,7 @@ static SDValue foldCSELOfCSEL(SDNode *Op, SelectionDAG &DAG) {
25075
25077
SDLoc DL(Op);
25076
25078
EVT VT = Op->getValueType(0);
25077
25079
25078
- SDValue CCValue = DAG.getConstant(CC, DL, MVT::i32 );
25080
+ SDValue CCValue = getCondCode(DAG, CC );
25079
25081
return DAG.getNode(AArch64ISD::CSEL, DL, VT, L, R, CCValue, Cond);
25080
25082
}
25081
25083
@@ -25152,8 +25154,7 @@ static SDValue reassociateCSELOperandsForCSE(SDNode *N, SelectionDAG &DAG) {
25152
25154
SDValue TValReassoc = Reassociate(TReassocOp, 0);
25153
25155
SDValue FValReassoc = Reassociate(FReassocOp, 1);
25154
25156
return DAG.getNode(AArch64ISD::CSEL, SDLoc(N), VT, TValReassoc, FValReassoc,
25155
- DAG.getConstant(NewCC, SDLoc(N->getOperand(2)), MVT_CC),
25156
- NewCmp.getValue(1));
25157
+ getCondCode(DAG, NewCC), NewCmp.getValue(1));
25157
25158
};
25158
25159
25159
25160
auto CC = static_cast<AArch64CC::CondCode>(N->getConstantOperandVal(2));
@@ -25294,8 +25295,7 @@ static SDValue performCSELCombine(SDNode *N,
25294
25295
SDValue Sub = DAG.getNode(AArch64ISD::SUBS, DL, Cond->getVTList(),
25295
25296
Cond.getOperand(1), Cond.getOperand(0));
25296
25297
return DAG.getNode(AArch64ISD::CSEL, DL, N->getVTList(), N->getOperand(0),
25297
- N->getOperand(1),
25298
- DAG.getConstant(NewCond, DL, MVT::i32),
25298
+ N->getOperand(1), getCondCode(DAG, NewCond),
25299
25299
Sub.getValue(1));
25300
25300
}
25301
25301
}
@@ -25395,10 +25395,9 @@ static SDValue performSETCCCombine(SDNode *N,
25395
25395
auto NewCond = getInvertedCondCode(OldCond);
25396
25396
25397
25397
// csel 0, 1, !cond, X
25398
- SDValue CSEL =
25399
- DAG.getNode(AArch64ISD::CSEL, DL, LHS.getValueType(), LHS.getOperand(0),
25400
- LHS.getOperand(1), DAG.getConstant(NewCond, DL, MVT::i32),
25401
- LHS.getOperand(3));
25398
+ SDValue CSEL = DAG.getNode(AArch64ISD::CSEL, DL, LHS.getValueType(),
25399
+ LHS.getOperand(0), LHS.getOperand(1),
25400
+ getCondCode(DAG, NewCond), LHS.getOperand(3));
25402
25401
return DAG.getZExtOrTrunc(CSEL, DL, VT);
25403
25402
}
25404
25403
@@ -25468,8 +25467,7 @@ static SDValue performFlagSettingCombine(SDNode *N,
25468
25467
// If the flag result isn't used, convert back to a generic opcode.
25469
25468
if (!N->hasAnyUseOfValue(1)) {
25470
25469
SDValue Res = DCI.DAG.getNode(GenericOpcode, DL, VT, N->ops());
25471
- return DCI.DAG.getMergeValues({Res, DCI.DAG.getConstant(0, DL, MVT::i32)},
25472
- DL);
25470
+ return DCI.CombineTo(N, Res, SDValue(N, 1));
25473
25471
}
25474
25472
25475
25473
// Combine identical generic nodes into this node, re-using the result.
@@ -27166,10 +27164,10 @@ SDValue AArch64TargetLowering::PerformDAGCombine(SDNode *N,
27166
27164
SDValue A = DAG.getNode(
27167
27165
AArch64ISD::MRS, DL, DAG.getVTList(MVT::i64, FlagsVT, MVT::Other),
27168
27166
N->getOperand(0), DAG.getConstant(Register, DL, MVT::i32));
27169
- SDValue B = DAG.getNode(
27170
- AArch64ISD::CSINC, DL, MVT::i32, DAG.getConstant(0, DL, MVT::i32),
27171
- DAG.getConstant(0, DL, MVT::i32),
27172
- DAG.getConstant(AArch64CC::NE, DL, MVT::i32 ), A.getValue(1));
27167
+ SDValue B = DAG.getNode(AArch64ISD::CSINC, DL, MVT::i32,
27168
+ DAG.getConstant(0, DL, MVT::i32),
27169
+ DAG.getConstant(0, DL, MVT::i32),
27170
+ getCondCode(DAG, AArch64CC::NE ), A.getValue(1));
27173
27171
return DAG.getMergeValues(
27174
27172
{A, DAG.getZExtOrTrunc(B, DL, MVT::i1), A.getValue(2)}, DL);
27175
27173
}
0 commit comments