Skip to content

Commit 83aa799

Browse files
committed
[AArch64] Add getCondCode() helper
1 parent 77363fb commit 83aa799

File tree

2 files changed

+67
-63
lines changed

2 files changed

+67
-63
lines changed

llvm/lib/Target/AArch64/AArch64ISelLowering.cpp

Lines changed: 54 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,10 @@ static cl::opt<bool> UseFEATCPACodegen(
162162
cl::init(false));
163163

164164
/// Value type used for condition codes.
165-
static const MVT MVT_CC = MVT::i32;
165+
constexpr MVT CondCodeVT = MVT::i32;
166166

167167
/// Value type used for NZCV flags.
168-
static constexpr MVT FlagsVT = MVT::i32;
168+
constexpr MVT FlagsVT = MVT::i32;
169169

170170
static const MCPhysReg GPRArgRegs[] = {AArch64::X0, AArch64::X1, AArch64::X2,
171171
AArch64::X3, AArch64::X4, AArch64::X5,
@@ -3472,6 +3472,12 @@ static void changeVectorFPCCToAArch64CC(ISD::CondCode CC,
34723472
}
34733473
}
34743474

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+
34753481
static bool isLegalArithImmed(uint64_t C) {
34763482
// Matches AArch64DAGToDAGISel::SelectArithImmed().
34773483
bool IsLegal = (C >> 12 == 0) || ((C & 0xFFFULL) == 0 && C >> 24 == 0);
@@ -3678,7 +3684,7 @@ static SDValue emitConditionalComparison(SDValue LHS, SDValue RHS,
36783684
if (Opcode == 0)
36793685
Opcode = AArch64ISD::CCMP;
36803686

3681-
SDValue Condition = DAG.getConstant(Predicate, DL, MVT_CC);
3687+
SDValue Condition = getCondCode(DAG, Predicate);
36823688
AArch64CC::CondCode InvOutCC = AArch64CC::getInvertedCondCode(OutCC);
36833689
unsigned NZCV = AArch64CC::getNZCVToSatisfyCondCode(InvOutCC);
36843690
SDValue NZCVOp = DAG.getConstant(NZCV, DL, MVT::i32);
@@ -4075,7 +4081,7 @@ static SDValue getAArch64Cmp(SDValue LHS, SDValue RHS, ISD::CondCode CC,
40754081
Cmp = emitComparison(LHS, RHS, CC, DL, DAG);
40764082
AArch64CC = changeIntCCToAArch64CC(CC);
40774083
}
4078-
AArch64cc = DAG.getConstant(AArch64CC, DL, MVT_CC);
4084+
AArch64cc = getCondCode(DAG, AArch64CC);
40794085
return Cmp;
40804086
}
40814087

@@ -4195,7 +4201,7 @@ SDValue AArch64TargetLowering::LowerXOR(SDValue Op, SelectionDAG &DAG) const {
41954201
AArch64CC::CondCode CC;
41964202
SDValue Value, Overflow;
41974203
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));
41994205
return DAG.getNode(AArch64ISD::CSEL, DL, Op.getValueType(), TVal, FVal,
42004206
CCVal, Overflow);
42014207
}
@@ -4274,8 +4280,8 @@ static SDValue carryFlagToValue(SDValue Glue, EVT VT, SelectionDAG &DAG,
42744280
SDLoc DL(Glue);
42754281
SDValue Zero = DAG.getConstant(0, DL, VT);
42764282
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);
42794285
return DAG.getNode(AArch64ISD::CSEL, DL, VT, One, Zero, CC, Glue);
42804286
}
42814287

@@ -4285,7 +4291,7 @@ static SDValue overflowFlagToValue(SDValue Glue, EVT VT, SelectionDAG &DAG) {
42854291
SDLoc DL(Glue);
42864292
SDValue Zero = DAG.getConstant(0, DL, VT);
42874293
SDValue One = DAG.getConstant(1, DL, VT);
4288-
SDValue CC = DAG.getConstant(AArch64CC::VS, DL, MVT::i32);
4294+
SDValue CC = getCondCode(DAG, AArch64CC::VS);
42894295
return DAG.getNode(AArch64ISD::CSEL, DL, VT, One, Zero, CC, Glue);
42904296
}
42914297

@@ -4334,7 +4340,7 @@ static SDValue LowerXALUO(SDValue Op, SelectionDAG &DAG) {
43344340
// We use an inverted condition, because the conditional select is inverted
43354341
// too. This will allow it to be selected to a single instruction:
43364342
// CSINC Wd, WZR, WZR, invert(cond).
4337-
SDValue CCVal = DAG.getConstant(getInvertedCondCode(CC), DL, MVT::i32);
4343+
SDValue CCVal = getCondCode(DAG, getInvertedCondCode(CC));
43384344
Overflow =
43394345
DAG.getNode(AArch64ISD::CSEL, DL, MVT::i32, FVal, TVal, CCVal, Overflow);
43404346

@@ -7124,8 +7130,7 @@ SDValue AArch64TargetLowering::LowerABS(SDValue Op, SelectionDAG &DAG) const {
71247130
SDValue Cmp = DAG.getNode(AArch64ISD::SUBS, DL, DAG.getVTList(VT, FlagsVT),
71257131
Op.getOperand(0), DAG.getConstant(0, DL, VT));
71267132
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));
71297134
}
71307135

71317136
static SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) {
@@ -7136,7 +7141,7 @@ static SDValue LowerBRCOND(SDValue Op, SelectionDAG &DAG) {
71367141
AArch64CC::CondCode CC;
71377142
if (SDValue Cmp = emitConjunction(DAG, Cond, CC)) {
71387143
SDLoc DL(Op);
7139-
SDValue CCVal = DAG.getConstant(CC, DL, MVT::i32);
7144+
SDValue CCVal = getCondCode(DAG, CC);
71407145
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CCVal,
71417146
Cmp);
71427147
}
@@ -10575,7 +10580,7 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
1057510580

1057610581
if (CC == ISD::SETNE)
1057710582
OFCC = getInvertedCondCode(OFCC);
10578-
SDValue CCVal = DAG.getConstant(OFCC, DL, MVT::i32);
10583+
SDValue CCVal = getCondCode(DAG, OFCC);
1057910584

1058010585
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CCVal,
1058110586
Overflow);
@@ -10648,7 +10653,7 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
1064810653
AArch64CC::isValidCBCond(changeIntCCToAArch64CC(CC)) &&
1064910654
ProduceNonFlagSettingCondBr) {
1065010655
SDValue Cond =
10651-
DAG.getTargetConstant(changeIntCCToAArch64CC(CC), DL, MVT::i32);
10656+
DAG.getTargetConstant(changeIntCCToAArch64CC(CC), DL, CondCodeVT);
1065210657
return DAG.getNode(AArch64ISD::CB, DL, MVT::Other, Chain, Cond, LHS, RHS,
1065310658
Dest);
1065410659
}
@@ -10667,11 +10672,11 @@ SDValue AArch64TargetLowering::LowerBR_CC(SDValue Op, SelectionDAG &DAG) const {
1066710672
SDValue Cmp = emitComparison(LHS, RHS, CC, DL, DAG);
1066810673
AArch64CC::CondCode CC1, CC2;
1066910674
changeFPCCToAArch64CC(CC, CC1, CC2);
10670-
SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32);
10675+
SDValue CC1Val = getCondCode(DAG, CC1);
1067110676
SDValue BR1 =
1067210677
DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, Chain, Dest, CC1Val, Cmp);
1067310678
if (CC2 != AArch64CC::AL) {
10674-
SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32);
10679+
SDValue CC2Val = getCondCode(DAG, CC2);
1067510680
return DAG.getNode(AArch64ISD::BRCOND, DL, MVT::Other, BR1, Dest, CC2Val,
1067610681
Cmp);
1067710682
}
@@ -11160,7 +11165,7 @@ SDValue AArch64TargetLowering::LowerSETCC(SDValue Op, SelectionDAG &DAG) const {
1116011165
if (CC2 == AArch64CC::AL) {
1116111166
changeFPCCToAArch64CC(ISD::getSetCCInverse(CC, LHS.getValueType()), CC1,
1116211167
CC2);
11163-
SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32);
11168+
SDValue CC1Val = getCondCode(DAG, CC1);
1116411169

1116511170
// Note that we inverted the condition above, so we reverse the order of
1116611171
// 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 {
1117311178
// of the first as the RHS. We're effectively OR'ing the two CC's together.
1117411179

1117511180
// 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);
1117711182
SDValue CS1 =
1117811183
DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, FVal, CC1Val, Cmp);
1117911184

11180-
SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32);
11185+
SDValue CC2Val = getCondCode(DAG, CC2);
1118111186
Res = DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, CS1, CC2Val, Cmp);
1118211187
}
1118311188
return IsStrict ? DAG.getMergeValues({Res, Cmp.getValue(1)}, DL) : Res;
@@ -11205,8 +11210,7 @@ SDValue AArch64TargetLowering::LowerSETCCCARRY(SDValue Op,
1120511210

1120611211
ISD::CondCode Cond = cast<CondCodeSDNode>(Op.getOperand(3))->get();
1120711212
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));
1121011214
// Inputs are swapped because the condition is inverted. This will allow
1121111215
// matching with a single CSINC instruction.
1121211216
return DAG.getNode(AArch64ISD::CSEL, DL, OpVT, FVal, TVal, CCVal,
@@ -11577,13 +11581,13 @@ SDValue AArch64TargetLowering::LowerSELECT_CC(
1157711581
}
1157811582

1157911583
// Emit first, and possibly only, CSEL.
11580-
SDValue CC1Val = DAG.getConstant(CC1, DL, MVT::i32);
11584+
SDValue CC1Val = getCondCode(DAG, CC1);
1158111585
SDValue CS1 = DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, FVal, CC1Val, Cmp);
1158211586

1158311587
// If we need a second CSEL, emit it, using the output of the first as the
1158411588
// RHS. We're effectively OR'ing the two CC's together.
1158511589
if (CC2 != AArch64CC::AL) {
11586-
SDValue CC2Val = DAG.getConstant(CC2, DL, MVT::i32);
11590+
SDValue CC2Val = getCondCode(DAG, CC2);
1158711591
return DAG.getNode(AArch64ISD::CSEL, DL, VT, TVal, CS1, CC2Val, Cmp);
1158811592
}
1158911593

@@ -11685,7 +11689,7 @@ SDValue AArch64TargetLowering::LowerSELECT(SDValue Op,
1168511689
AArch64CC::CondCode OFCC;
1168611690
SDValue Value, Overflow;
1168711691
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);
1168911693

1169011694
return DAG.getNode(AArch64ISD::CSEL, DL, Op.getValueType(), TVal, FVal,
1169111695
CCVal, Overflow);
@@ -12525,10 +12529,10 @@ static AArch64CC::CondCode parseConstraintCode(llvm::StringRef Constraint) {
1252512529
/// WZR, invert(<cond>)'.
1252612530
static SDValue getSETCC(AArch64CC::CondCode CC, SDValue NZCV, const SDLoc &DL,
1252712531
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);
1253212536
}
1253312537

1253412538
// Lower @cc flag output via getSETCC.
@@ -18699,7 +18703,7 @@ AArch64TargetLowering::BuildSREMPow2(SDNode *N, const APInt &Divisor,
1869918703
Created.push_back(Cmp.getNode());
1870018704
Created.push_back(And.getNode());
1870118705
} else {
18702-
SDValue CCVal = DAG.getConstant(AArch64CC::MI, DL, MVT_CC);
18706+
SDValue CCVal = getCondCode(DAG, AArch64CC::MI);
1870318707
SDVTList VTs = DAG.getVTList(VT, FlagsVT);
1870418708

1870518709
SDValue Negs = DAG.getNode(AArch64ISD::SUBS, DL, VTs, Zero, N0);
@@ -19571,11 +19575,11 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
1957119575

1957219576
if (N->getOpcode() == ISD::AND) {
1957319577
AArch64CC::CondCode InvCC0 = AArch64CC::getInvertedCondCode(CC0);
19574-
Condition = DAG.getConstant(InvCC0, DL, MVT_CC);
19578+
Condition = getCondCode(DAG, InvCC0);
1957519579
NZCV = AArch64CC::getNZCVToSatisfyCondCode(CC1);
1957619580
} else {
1957719581
AArch64CC::CondCode InvCC1 = AArch64CC::getInvertedCondCode(CC1);
19578-
Condition = DAG.getConstant(CC0, DL, MVT_CC);
19582+
Condition = getCondCode(DAG, CC0);
1957919583
NZCV = AArch64CC::getNZCVToSatisfyCondCode(InvCC1);
1958019584
}
1958119585

@@ -19596,8 +19600,7 @@ static SDValue performANDORCSELCombine(SDNode *N, SelectionDAG &DAG) {
1959619600
Cmp1.getOperand(1), NZCVOp, Condition, Cmp0);
1959719601
}
1959819602
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);
1960119604
}
1960219605

1960319606
static SDValue performORCombine(SDNode *N, TargetLowering::DAGCombinerInfo &DCI,
@@ -19802,7 +19805,7 @@ static SDValue performANDSETCCCombine(SDNode *N,
1980219805
SDLoc DL(N);
1980319806
return DAG.getNode(AArch64ISD::CSINC, DL, VT, DAG.getConstant(0, DL, VT),
1980419807
DAG.getConstant(0, DL, VT),
19805-
DAG.getConstant(InvertedCC, DL, MVT::i32), Cmp);
19808+
getCondCode(DAG, InvertedCC), Cmp);
1980619809
}
1980719810
}
1980819811
return SDValue();
@@ -20793,7 +20796,7 @@ static SDValue performAddCSelIntoCSinc(SDNode *N, SelectionDAG &DAG) {
2079320796
"Unexpected constant value");
2079420797

2079520798
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);
2079720800
SDValue Cmp = LHS.getOperand(3);
2079820801

2079920802
return DAG.getNode(AArch64ISD::CSINC, DL, VT, NewNode, RHS, CCVal, Cmp);
@@ -20979,7 +20982,7 @@ static SDValue foldADCToCINC(SDNode *N, SelectionDAG &DAG) {
2097920982
SDLoc DL(N);
2098020983

2098120984
// (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);
2098320986
return DAG.getNode(AArch64ISD::CSINC, DL, VT, LHS, LHS, CC, Cond);
2098420987
}
2098520988

@@ -22052,7 +22055,7 @@ static SDValue getPTest(SelectionDAG &DAG, EVT VT, SDValue Pg, SDValue Op,
2205222055

2205322056
// Convert CC to integer based on requested condition.
2205422057
// 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));
2205622059
SDValue Res = DAG.getNode(AArch64ISD::CSEL, DL, OutVT, FVal, TVal, CC, Test);
2205722060
return DAG.getZExtOrTrunc(Res, DL, VT);
2205822061
}
@@ -25093,10 +25096,9 @@ static SDValue performBRCONDCombine(SDNode *N,
2509325096
auto CSelCC = getCSETCondCode(CSel);
2509425097
if (CSelCC) {
2509525098
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));
2510025102
}
2510125103
}
2510225104

@@ -25237,7 +25239,7 @@ static SDValue foldCSELOfCSEL(SDNode *Op, SelectionDAG &DAG) {
2523725239
SDLoc DL(Op);
2523825240
EVT VT = Op->getValueType(0);
2523925241

25240-
SDValue CCValue = DAG.getConstant(CC, DL, MVT::i32);
25242+
SDValue CCValue = getCondCode(DAG, CC);
2524125243
return DAG.getNode(AArch64ISD::CSEL, DL, VT, L, R, CCValue, Cond);
2524225244
}
2524325245

@@ -25314,8 +25316,7 @@ static SDValue reassociateCSELOperandsForCSE(SDNode *N, SelectionDAG &DAG) {
2531425316
SDValue TValReassoc = Reassociate(TReassocOp, 0);
2531525317
SDValue FValReassoc = Reassociate(FReassocOp, 1);
2531625318
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));
2531925320
};
2532025321

2532125322
auto CC = static_cast<AArch64CC::CondCode>(N->getConstantOperandVal(2));
@@ -25456,8 +25457,7 @@ static SDValue performCSELCombine(SDNode *N,
2545625457
SDValue Sub = DAG.getNode(AArch64ISD::SUBS, DL, Cond->getVTList(),
2545725458
Cond.getOperand(1), Cond.getOperand(0));
2545825459
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),
2546125461
Sub.getValue(1));
2546225462
}
2546325463
}
@@ -25557,10 +25557,9 @@ static SDValue performSETCCCombine(SDNode *N,
2555725557
auto NewCond = getInvertedCondCode(OldCond);
2555825558

2555925559
// 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));
2556425563
return DAG.getZExtOrTrunc(CSEL, DL, VT);
2556525564
}
2556625565

@@ -25630,8 +25629,7 @@ static SDValue performFlagSettingCombine(SDNode *N,
2563025629
// If the flag result isn't used, convert back to a generic opcode.
2563125630
if (!N->hasAnyUseOfValue(1)) {
2563225631
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));
2563525633
}
2563625634

2563725635
// Combine identical generic nodes into this node, re-using the result.
@@ -27013,10 +27011,10 @@ static SDValue performRNDRCombine(SDNode *N, SelectionDAG &DAG) {
2701327011
SDValue A = DAG.getNode(
2701427012
AArch64ISD::MRS, DL, DAG.getVTList(MVT::i64, FlagsVT, MVT::Other),
2701527013
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));
2702027018
return DAG.getMergeValues(
2702127019
{A, DAG.getZExtOrTrunc(B, DL, MVT::i1), A.getValue(2)}, DL);
2702227020
}

0 commit comments

Comments
 (0)