Skip to content

Commit 7674d6f

Browse files
authored
[LLVM][TableGen] Simplify DagInit::get (#140056)
- Add `DagInit::get` overloads that do not need ValName to be specified. - Fix some calls to either not create temporary arrays for DAG args or use the std::pair<> overload.
1 parent ebb1535 commit 7674d6f

File tree

5 files changed

+28
-24
lines changed

5 files changed

+28
-24
lines changed

llvm/include/llvm/TableGen/Record.h

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1438,12 +1438,24 @@ class DagInit final
14381438
}
14391439

14401440
static const DagInit *get(const Init *V, const StringInit *VN,
1441-
ArrayRef<const Init *> ArgRange,
1442-
ArrayRef<const StringInit *> NameRange);
1441+
ArrayRef<const Init *> Args,
1442+
ArrayRef<const StringInit *> ArgNames);
1443+
1444+
static const DagInit *get(const Init *V, ArrayRef<const Init *> Args,
1445+
ArrayRef<const StringInit *> ArgNames) {
1446+
return DagInit::get(V, nullptr, Args, ArgNames);
1447+
}
1448+
14431449
static const DagInit *
14441450
get(const Init *V, const StringInit *VN,
14451451
ArrayRef<std::pair<const Init *, const StringInit *>> ArgAndNames);
14461452

1453+
static const DagInit *
1454+
get(const Init *V,
1455+
ArrayRef<std::pair<const Init *, const StringInit *>> ArgAndNames) {
1456+
return DagInit::get(V, nullptr, ArgAndNames);
1457+
}
1458+
14471459
void Profile(FoldingSetNodeID &ID) const;
14481460

14491461
const Init *getOperator() const { return Val; }

llvm/lib/TableGen/Record.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1309,7 +1309,7 @@ const Init *BinOpInit::Fold(const Record *CurRec) const {
13091309
SmallVector<std::pair<const Init *, const StringInit *>, 8> Args;
13101310
llvm::append_range(Args, LHSs->getArgAndNames());
13111311
llvm::append_range(Args, RHSs->getArgAndNames());
1312-
return DagInit::get(Op, nullptr, Args);
1312+
return DagInit::get(Op, Args);
13131313
}
13141314
break;
13151315
}
@@ -1504,7 +1504,7 @@ const Init *BinOpInit::Fold(const Record *CurRec) const {
15041504
const auto *Dag = dyn_cast<DagInit>(LHS);
15051505
const auto *Op = dyn_cast<DefInit>(RHS);
15061506
if (Dag && Op)
1507-
return DagInit::get(Op, nullptr, Dag->getArgs(), Dag->getArgNames());
1507+
return DagInit::get(Op, Dag->getArgs(), Dag->getArgNames());
15081508
break;
15091509
}
15101510
case ADD:
@@ -1687,7 +1687,7 @@ static const Init *ForeachDagApply(const Init *LHS, const DagInit *MHSd,
16871687
}
16881688

16891689
if (Change)
1690-
return DagInit::get(Val, nullptr, NewArgs);
1690+
return DagInit::get(Val, NewArgs);
16911691
return MHSd;
16921692
}
16931693

@@ -1825,7 +1825,7 @@ const Init *TernOpInit::Fold(const Record *CurRec) const {
18251825
return this;
18261826
Children.emplace_back(Node, dyn_cast<StringInit>(Name));
18271827
}
1828-
return DagInit::get(LHS, nullptr, Children);
1828+
return DagInit::get(LHS, Children);
18291829
}
18301830
break;
18311831
}

llvm/utils/TableGen/AsmWriterEmitter.cpp

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1031,13 +1031,10 @@ void AsmWriterEmitter::EmitPrintAliasInstruction(raw_ostream &O) {
10311031
// Change (any_of FeatureAll, (any_of ...)) to (any_of FeatureAll, ...).
10321032
if (IsOr && D->getNumArgs() == 2 && isa<DagInit>(D->getArg(1))) {
10331033
const DagInit *RHS = cast<DagInit>(D->getArg(1));
1034-
SmallVector<const Init *> Args{D->getArg(0)};
1035-
SmallVector<const StringInit *> ArgNames{D->getArgName(0)};
1036-
for (unsigned i = 0, e = RHS->getNumArgs(); i != e; ++i) {
1037-
Args.push_back(RHS->getArg(i));
1038-
ArgNames.push_back(RHS->getArgName(i));
1039-
}
1040-
D = DagInit::get(D->getOperator(), nullptr, Args, ArgNames);
1034+
SmallVector<std::pair<const Init *, const StringInit *>> Args{
1035+
*D->getArgAndNames().begin()};
1036+
llvm::append_range(Args, RHS->getArgAndNames());
1037+
D = DagInit::get(D->getOperator(), Args);
10411038
}
10421039

10431040
for (auto *Arg : D->getArgs()) {

llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2906,11 +2906,7 @@ TreePatternNodePtr TreePattern::ParseTreePattern(const Init *TheInit,
29062906
// TreePatternNode of its own. For example:
29072907
/// (foo GPR, imm) -> (foo GPR, (imm))
29082908
if (R->isSubClassOf("SDNode") || R->isSubClassOf("PatFrags"))
2909-
return ParseTreePattern(
2910-
DagInit::get(
2911-
DI, nullptr,
2912-
std::vector<std::pair<const Init *, const StringInit *>>()),
2913-
OpName);
2909+
return ParseTreePattern(DagInit::get(DI, {}), OpName);
29142910

29152911
// Input argument?
29162912
TreePatternNodePtr Res = makeIntrusiveRefCnt<TreePatternNode>(DI, 1);
@@ -3413,10 +3409,8 @@ void CodeGenDAGPatterns::ParseDefaultOperands() {
34133409

34143410
// Clone the DefaultInfo dag node, changing the operator from 'ops' to
34153411
// SomeSDnode so that we can parse this.
3416-
std::vector<std::pair<const Init *, const StringInit *>> Ops;
3417-
for (unsigned op = 0, e = DefaultInfo->getNumArgs(); op != e; ++op)
3418-
Ops.emplace_back(DefaultInfo->getArg(op), DefaultInfo->getArgName(op));
3419-
const DagInit *DI = DagInit::get(SomeSDNode, nullptr, Ops);
3412+
const DagInit *DI = DagInit::get(SomeSDNode, DefaultInfo->getArgs(),
3413+
DefaultInfo->getArgNames());
34203414

34213415
// Create a TreePattern to parse this.
34223416
TreePattern P(DefaultOps[i], DI, false, *this);

llvm/utils/TableGen/Common/VarLenCodeEmitterGen.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -213,8 +213,9 @@ void VarLenInst::buildRec(const DagInit *DI) {
213213
if (NeedSwap) {
214214
// Normalization: Hi bit should always be the second argument.
215215
const Init *const NewArgs[] = {OperandName, LoBit, HiBit};
216-
Segments.push_back({NumBits,
217-
DagInit::get(DI->getOperator(), nullptr, NewArgs, {}),
216+
// TODO: This creates an invalid DagInit with 3 Args but 0 ArgNames.
217+
// Extend unit test to exercise this and fix it.
218+
Segments.push_back({NumBits, DagInit::get(DI->getOperator(), NewArgs, {}),
218219
CustomEncoder, CustomDecoder});
219220
} else {
220221
Segments.push_back({NumBits, DI, CustomEncoder, CustomDecoder});

0 commit comments

Comments
 (0)