aboutsummaryrefslogtreecommitdiff
path: root/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
diff options
context:
space:
mode:
authorRiver Riddle <riddleriver@gmail.com>2022-05-06 18:05:54 -0700
committerRiver Riddle <riddleriver@gmail.com>2022-05-11 11:55:33 -0700
commit2ac3cd20cacdf37135eeb64ad2b7baefb9769e99 (patch)
tree08cae2495aeaabec60a39287d12198e6dbff8a0b /llvm/utils/TableGen/CodeGenDAGPatterns.cpp
parent3ca6328637b3f42096c652e4df53282649956bdb (diff)
downloadllvm-2ac3cd20cacdf37135eeb64ad2b7baefb9769e99.zip
llvm-2ac3cd20cacdf37135eeb64ad2b7baefb9769e99.tar.gz
llvm-2ac3cd20cacdf37135eeb64ad2b7baefb9769e99.tar.bz2
[TableGen] Remove the use of global Record state
This commits removes TableGens reliance on managed static global record state by moving the RecordContext into the RecordKeeper. The RecordKeeper is now treated similarly to a (LLVM|MLIR|etc)Context object and is passed to static construction functions. This is an important step forward in removing TableGens reliance on global state, and in a followup will allow for users that parse tablegen to parse multiple tablegen files without worrying about Record lifetime. Differential Revision: https://reviews.llvm.org/D125276
Diffstat (limited to 'llvm/utils/TableGen/CodeGenDAGPatterns.cpp')
-rw-r--r--llvm/utils/TableGen/CodeGenDAGPatterns.cpp13
1 files changed, 7 insertions, 6 deletions
diff --git a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
index 701800fc..9d6adb6d 100644
--- a/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
+++ b/llvm/utils/TableGen/CodeGenDAGPatterns.cpp
@@ -2816,6 +2816,7 @@ void TreePattern::ComputeNamedNodes(TreePatternNode *N) {
TreePatternNodePtr TreePattern::ParseTreePattern(Init *TheInit,
StringRef OpName) {
+ RecordKeeper &RK = TheInit->getRecordKeeper();
if (DefInit *DI = dyn_cast<DefInit>(TheInit)) {
Record *R = DI->getDef();
@@ -2854,13 +2855,13 @@ TreePatternNodePtr TreePattern::ParseTreePattern(Init *TheInit,
if (!OpName.empty())
error("Constant int or bit argument should not have a name!");
if (isa<BitInit>(TheInit))
- TheInit = TheInit->convertInitializerTo(IntRecTy::get());
+ TheInit = TheInit->convertInitializerTo(IntRecTy::get(RK));
return std::make_shared<TreePatternNode>(TheInit, 1);
}
if (BitsInit *BI = dyn_cast<BitsInit>(TheInit)) {
// Turn this into an IntInit.
- Init *II = BI->convertInitializerTo(IntRecTy::get());
+ Init *II = BI->convertInitializerTo(IntRecTy::get(RK));
if (!II || !isa<IntInit>(II))
error("Bits value must be constants!");
return ParseTreePattern(II, OpName);
@@ -2959,8 +2960,8 @@ TreePatternNodePtr TreePattern::ParseTreePattern(Init *TheInit,
else // Otherwise, no chain.
Operator = getDAGPatterns().get_intrinsic_wo_chain_sdnode();
- Children.insert(Children.begin(),
- std::make_shared<TreePatternNode>(IntInit::get(IID), 1));
+ Children.insert(Children.begin(), std::make_shared<TreePatternNode>(
+ IntInit::get(RK, IID), 1));
}
if (Operator->isSubClassOf("ComplexPattern")) {
@@ -4367,7 +4368,7 @@ void CodeGenDAGPatterns::ExpandHwModeBasedTypes() {
PatternsToMatch.emplace_back(P.getSrcRecord(), P.getPredicates(),
std::move(NewSrc), std::move(NewDst),
P.getDstRegs(), P.getAddedComplexity(),
- Record::getNewUID(), Mode, Check);
+ Record::getNewUID(Records), Mode, Check);
};
for (PatternToMatch &P : Copy) {
@@ -4743,7 +4744,7 @@ void CodeGenDAGPatterns::GenerateVariants() {
PatternsToMatch[i].getSrcRecord(), PatternsToMatch[i].getPredicates(),
Variant, PatternsToMatch[i].getDstPatternShared(),
PatternsToMatch[i].getDstRegs(),
- PatternsToMatch[i].getAddedComplexity(), Record::getNewUID(),
+ PatternsToMatch[i].getAddedComplexity(), Record::getNewUID(Records),
PatternsToMatch[i].getForceMode(),
PatternsToMatch[i].getHwModeFeatures());
}