Skip to content

Commit d4ce3c0

Browse files
author
anoopkg6
committed
Incorporate code review feedback.
1 parent 85d1590 commit d4ce3c0

File tree

6 files changed

+31
-41
lines changed

6 files changed

+31
-41
lines changed

clang/include/clang/Basic/TargetInfo.h

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1138,7 +1138,6 @@ class TargetInfo : public TransferrableTargetInfo,
11381138

11391139
std::string ConstraintStr; // constraint: "=rm"
11401140
std::string Name; // Operand name: [foo] with no []'s.
1141-
11421141
public:
11431142
ConstraintInfo(StringRef ConstraintStr, StringRef Name)
11441143
: Flags(0), TiedOperand(-1), ConstraintStr(ConstraintStr.str()),
@@ -1213,11 +1212,9 @@ class TargetInfo : public TransferrableTargetInfo,
12131212
// Don't copy Name or constraint string.
12141213
}
12151214

1216-
// CC range can be set by targets supporting flag output operand.
1217-
void setFlagOutputCCUpperBound(unsigned CCBound) {
1218-
// Using ImmRange.Max to store CC upper bound. Interval [0, CCBound).
1219-
ImmRange.Max = CCBound;
1220-
ImmRange.isConstrained = true;
1215+
// Output operand bounds can be set by target.
1216+
void setOutputOperandBounds(unsigned Min, unsigned Max) {
1217+
setRequiresImmediate(Min, Max);
12211218
}
12221219
unsigned getFlagOutputCCUpperBound() const { return ImmRange.Max; }
12231220
};

clang/lib/Basic/Targets/AArch64.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1568,7 +1568,7 @@ bool AArch64TargetInfo::validateAsmConstraint(
15681568
if (const unsigned Len = matchAsmCCConstraint(Name)) {
15691569
Name += Len - 1;
15701570
Info.setAllowsRegister();
1571-
Info.setFlagOutputCCUpperBound(2);
1571+
Info.setOutputOperandBounds(0, 2);
15721572
return true;
15731573
}
15741574
}

clang/lib/Basic/Targets/SystemZ.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ bool SystemZTargetInfo::validateAsmConstraint(
105105
Name += 2;
106106
Info.setAllowsRegister();
107107
// SystemZ has 2-bits CC, and hence Interval [0, 4).
108-
Info.setFlagOutputCCUpperBound(4);
108+
Info.setOutputOperandBounds(0, 4);
109109
return true;
110110
}
111111
return false;

clang/lib/Basic/Targets/X86.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1582,7 +1582,7 @@ bool X86TargetInfo::validateAsmConstraint(
15821582
if (auto Len = matchAsmCCConstraint(Name)) {
15831583
Name += Len - 1;
15841584
Info.setAllowsRegister();
1585-
Info.setFlagOutputCCUpperBound(2);
1585+
Info.setOutputOperandBounds(0, 2);
15861586
return true;
15871587
}
15881588
return false;

llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2814,6 +2814,7 @@ void SelectionDAGBuilder::visitBr(const BranchInst &I) {
28142814
Opcode = Instruction::And;
28152815
else if (match(BOp, m_LogicalOr(m_Value(BOp0), m_Value(BOp1))))
28162816
Opcode = Instruction::Or;
2817+
28172818
if (Opcode &&
28182819
!(match(BOp0, m_ExtractElt(m_Value(Vec), m_Value())) &&
28192820
match(BOp1, m_ExtractElt(m_Specific(Vec), m_Value()))) &&

llvm/lib/Target/SystemZ/SystemZISelLowering.cpp

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -8776,8 +8776,6 @@ static bool combineCCMask(SDValue &CCReg, int &CCValid, int &CCMask,
87768776

87778777
SmallVector<SDValue, 4> static simplifyAssumingCCVal(SDValue &Val, SDValue &CC,
87788778
SelectionDAG &DAG) {
8779-
if (CC == SDValue())
8780-
return {};
87818779
SDLoc DL(Val);
87828780
auto Opcode = Val.getOpcode();
87838781
switch (Opcode) {
@@ -8881,16 +8879,13 @@ static bool combineCCMask(SDValue &CCReg, int &CCValid, int &CCMask,
88818879
const auto &&Op1SDVals = simplifyAssumingCCVal(Op1, Op0CC, DAG);
88828880
if (Op0SDVals.empty() || Op1SDVals.empty())
88838881
return false;
8884-
SmallVector<int, 4> CCVals;
8885-
std::transform(Op0SDVals.begin(), Op0SDVals.end(), Op1SDVals.begin(),
8886-
std::back_inserter(CCVals), emulateTMCCMask);
8887-
if (std::any_of(CCVals.begin(), CCVals.end(),
8888-
[](const auto Val) { return Val < 0; }))
8889-
return false;
88908882
int NewCCMask = 0;
8891-
for (auto CC : CCVals) {
8883+
for (auto CC : {0, 1, 2, 3}) {
8884+
auto CCVal = emulateTMCCMask(Op0SDVals[CC], Op1SDVals[CC]);
8885+
if (CCVal < 0)
8886+
return false;
88928887
NewCCMask <<= 1;
8893-
NewCCMask |= (CCMask & (1 << (3 - CC))) != 0;
8888+
NewCCMask |= (CCMask & (1 << (3 - CCVal))) != 0;
88948889
}
88958890
NewCCMask &= Op0CCValid;
88968891
CCReg = Op0CC;
@@ -8926,16 +8921,13 @@ static bool combineCCMask(SDValue &CCReg, int &CCValid, int &CCMask,
89268921
return Op0APVal == Op1APVal ? 0 : Op0APVal.slt(Op1APVal) ? 1 : 2;
89278922
return Op0APVal == Op1APVal ? 0 : Op0APVal.ult(Op1APVal) ? 1 : 2;
89288923
};
8929-
SmallVector<int, 4> CCVals;
8930-
std::transform(Op0SDVals.begin(), Op0SDVals.end(), Op1SDVals.begin(),
8931-
std::back_inserter(CCVals), compareCCSigned);
8932-
if (std::any_of(CCVals.begin(), CCVals.end(),
8933-
[](const auto Val) { return Val < 0; }))
8934-
return false;
89358924
int NewCCMask = 0;
8936-
for (auto CC : CCVals) {
8925+
for (auto CC : {0, 1, 2, 3}) {
8926+
auto CCVal = compareCCSigned(Op0SDVals[CC], Op1SDVals[CC]);
8927+
if (CCVal < 0)
8928+
return false;
89378929
NewCCMask <<= 1;
8938-
NewCCMask |= ((CCMask & (1 << (3 - CC))) != 0);
8930+
NewCCMask |= (CCMask & (1 << (3 - CCVal))) != 0;
89398931
}
89408932
NewCCMask &= Op0CCValid;
89418933
CCMask = NewCCMask;
@@ -9018,7 +9010,7 @@ SDValue SystemZTargetLowering::combineSELECT_CCMASK(
90189010
int CCMaskVal = CCMask->getZExtValue();
90199011
SDValue CCReg = N->getOperand(4);
90209012

9021-
bool UpdatedCCReg = combineCCMask(CCReg, CCValidVal, CCMaskVal, DAG);
9013+
bool IsCombinedCCReg = combineCCMask(CCReg, CCValidVal, CCMaskVal, DAG);
90229014

90239015
// Attempting to optimize TrueVal/FalseVal in outermost select_ccmask either
90249016
// with CCReg found by combineCCMask or original CCReg.
@@ -9031,15 +9023,14 @@ SDValue SystemZTargetLowering::combineSELECT_CCMASK(
90319023
// optimized by combineCCMask, we can not take early exit here, just bypass it
90329024
// and directly create a new SELECT_CCMASK.
90339025
if (!TrueSDVals.empty() && !FalseSDVals.empty()) {
9034-
SmallVector<SDValue, 4> MergedSDVals;
9035-
CCMaskVal &= CCValidVal;
9026+
SmallSet<SDValue, 4> MergedSDValsSet;
9027+
// Ignoring CC values outside CCValiid.
90369028
for (auto CC : {0, 1, 2, 3}) {
9037-
MergedSDVals.emplace_back(((CCMaskVal & (1 << (3 - CC))) != 0)
9038-
? TrueSDVals[CC]
9039-
: FalseSDVals[CC]);
9029+
if ((CCValidVal & ((1 << (3 - CC)))) != 0)
9030+
MergedSDValsSet.insert(((CCMaskVal & (1 << (3 - CC))) != 0)
9031+
? TrueSDVals[CC]
9032+
: FalseSDVals[CC]);
90409033
}
9041-
SmallSet<SDValue, 4> MergedSDValsSet(MergedSDVals.begin(),
9042-
MergedSDVals.end());
90439034
if (MergedSDValsSet.size() == 1)
90449035
return *MergedSDValsSet.begin();
90459036
if (MergedSDValsSet.size() == 2) {
@@ -9050,19 +9041,19 @@ SDValue SystemZTargetLowering::combineSELECT_CCMASK(
90509041
int NewCCMask = 0;
90519042
for (auto CC : {0, 1, 2, 3}) {
90529043
NewCCMask <<= 1;
9053-
NewCCMask |= MergedSDVals[CC] == NewTrueVal;
9044+
NewCCMask |= ((CCMaskVal & (1 << (3 - CC))) != 0)
9045+
? (TrueSDVals[CC] == NewTrueVal)
9046+
: (FalseSDVals[CC] == NewTrueVal);
90549047
}
90559048
CCMaskVal = NewCCMask;
9049+
CCMaskVal &= CCValidVal;
90569050
TrueVal = NewTrueVal;
90579051
FalseVal = NewFalseVal;
9058-
return DAG.getNode(
9059-
SystemZISD::SELECT_CCMASK, SDLoc(N), N->getValueType(0), TrueVal,
9060-
FalseVal, DAG.getTargetConstant(CCValidVal, SDLoc(N), MVT::i32),
9061-
DAG.getTargetConstant(CCMaskVal, SDLoc(N), MVT::i32), CCReg);
9052+
IsCombinedCCReg = true;
90629053
}
90639054
}
90649055

9065-
if (UpdatedCCReg)
9056+
if (IsCombinedCCReg)
90669057
return DAG.getNode(
90679058
SystemZISD::SELECT_CCMASK, SDLoc(N), N->getValueType(0), TrueVal,
90689059
FalseVal, DAG.getTargetConstant(CCValidVal, SDLoc(N), MVT::i32),
@@ -9396,6 +9387,7 @@ SDValue SystemZTargetLowering::PerformDAGCombine(SDNode *N,
93969387
case ISD::INTRINSIC_VOID:
93979388
return combineINTRINSIC(N, DCI);
93989389
}
9390+
93999391
return SDValue();
94009392
}
94019393

0 commit comments

Comments
 (0)