[llvm] [TableGen] Change CodeGenInstruction record members to const (PR #107921)
via llvm-commits
llvm-commits at lists.llvm.org
Mon Sep 9 18:22:44 PDT 2024
llvmbot wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-x86
@llvm/pr-subscribers-llvm-selectiondag
Author: Rahul Joshi (jurahul)
<details>
<summary>Changes</summary>
Change CodeGenInstruction::{TheDef, InfereredFrom} to const pointers.
This is a part of effort to have better const correctness in TableGen backends:
https://discourse.llvm.org/t/psa-planned-changes-to-tablegen-getallderiveddefinitions-api-potential-downstream-breakages/81089
---
Patch is 40.40 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/107921.diff
19 Files Affected:
- (modified) llvm/utils/TableGen/AsmMatcherEmitter.cpp (+1-1)
- (modified) llvm/utils/TableGen/CodeEmitterGen.cpp (+2-2)
- (modified) llvm/utils/TableGen/CodeGenMapTable.cpp (+2-2)
- (modified) llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp (+24-25)
- (modified) llvm/utils/TableGen/Common/CodeGenDAGPatterns.h (+30-31)
- (modified) llvm/utils/TableGen/Common/CodeGenInstruction.cpp (+6-4)
- (modified) llvm/utils/TableGen/Common/CodeGenInstruction.h (+4-4)
- (modified) llvm/utils/TableGen/Common/CodeGenSchedule.cpp (+1-1)
- (modified) llvm/utils/TableGen/Common/DAGISelMatcher.h (+3-3)
- (modified) llvm/utils/TableGen/Common/GlobalISel/GlobalISelMatchTable.cpp (+1-1)
- (modified) llvm/utils/TableGen/Common/GlobalISel/GlobalISelMatchTable.h (+3-2)
- (modified) llvm/utils/TableGen/Common/VarLenCodeEmitterGen.cpp (+4-4)
- (modified) llvm/utils/TableGen/DAGISelEmitter.cpp (+2-2)
- (modified) llvm/utils/TableGen/DAGISelMatcherEmitter.cpp (+5-5)
- (modified) llvm/utils/TableGen/DAGISelMatcherGen.cpp (+4-4)
- (modified) llvm/utils/TableGen/FastISelEmitter.cpp (+4-4)
- (modified) llvm/utils/TableGen/GlobalISelEmitter.cpp (+10-10)
- (modified) llvm/utils/TableGen/InstrDocsEmitter.cpp (+1-1)
- (modified) llvm/utils/TableGen/X86FoldTablesEmitter.cpp (+3-3)
``````````diff
diff --git a/llvm/utils/TableGen/AsmMatcherEmitter.cpp b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
index c5849b6c12dfc7..4a1bf7ea5ef201 100644
--- a/llvm/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/llvm/utils/TableGen/AsmMatcherEmitter.cpp
@@ -504,7 +504,7 @@ struct MatchableInfo {
/// TheDef - This is the definition of the instruction or InstAlias that this
/// matchable came from.
- Record *const TheDef;
+ const Record *const TheDef;
// ResInstSize - The size of the resulting instruction for this matchable.
unsigned ResInstSize;
diff --git a/llvm/utils/TableGen/CodeEmitterGen.cpp b/llvm/utils/TableGen/CodeEmitterGen.cpp
index 88acd79cab092e..69ca9a84953a30 100644
--- a/llvm/utils/TableGen/CodeEmitterGen.cpp
+++ b/llvm/utils/TableGen/CodeEmitterGen.cpp
@@ -403,7 +403,7 @@ void CodeEmitterGen::emitInstructionBaseValues(
<< HWM.getModeName(HwMode, /*IncludeDefault=*/true) << "[] = {\n";
for (const CodeGenInstruction *CGI : NumberedInstructions) {
- Record *R = CGI->TheDef;
+ const Record *R = CGI->TheDef;
if (R->getValueAsString("Namespace") == "TargetOpcode" ||
R->getValueAsBit("isPseudo")) {
@@ -485,7 +485,7 @@ void CodeEmitterGen::run(raw_ostream &o) {
std::set<unsigned> HwModes;
BitWidth = 0;
for (const CodeGenInstruction *CGI : NumberedInstructions) {
- Record *R = CGI->TheDef;
+ const Record *R = CGI->TheDef;
if (R->getValueAsString("Namespace") == "TargetOpcode" ||
R->getValueAsBit("isPseudo"))
continue;
diff --git a/llvm/utils/TableGen/CodeGenMapTable.cpp b/llvm/utils/TableGen/CodeGenMapTable.cpp
index fbf1d47c0327d9..46aad7f7f8bdd9 100644
--- a/llvm/utils/TableGen/CodeGenMapTable.cpp
+++ b/llvm/utils/TableGen/CodeGenMapTable.cpp
@@ -185,7 +185,7 @@ class MapTableEmitter {
// KeyInstrVec - list of key instructions.
std::vector<Record *> KeyInstrVec;
- DenseMap<Record *, std::vector<Record *>> MapTable;
+ DenseMap<const Record *, std::vector<Record *>> MapTable;
public:
MapTableEmitter(CodeGenTarget &Target, RecordKeeper &Records, Record *IMRec)
@@ -371,7 +371,7 @@ unsigned MapTableEmitter::emitBinSearchTable(raw_ostream &OS) {
// emitted as first column.
OS << "Table[][" << NumCol + 1 << "] = {\n";
for (unsigned i = 0; i < TotalNumInstr; i++) {
- Record *CurInstr = NumberedInstructions[i]->TheDef;
+ const Record *CurInstr = NumberedInstructions[i]->TheDef;
std::vector<Record *> ColInstrs = MapTable[CurInstr];
std::string OutStr;
unsigned RelExists = 0;
diff --git a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp
index 458247811091e4..a77e2472ef2cbc 100644
--- a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp
+++ b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.cpp
@@ -1255,28 +1255,28 @@ bool TreePredicateFn::isAtomicOrderingWeakerThanRelease() const {
false);
}
Record *TreePredicateFn::getMemoryVT() const {
- Record *R = getOrigPatFragRecord()->getRecord();
+ const Record *R = getOrigPatFragRecord()->getRecord();
if (R->isValueUnset("MemoryVT"))
return nullptr;
return R->getValueAsDef("MemoryVT");
}
ListInit *TreePredicateFn::getAddressSpaces() const {
- Record *R = getOrigPatFragRecord()->getRecord();
+ const Record *R = getOrigPatFragRecord()->getRecord();
if (R->isValueUnset("AddressSpaces"))
return nullptr;
return R->getValueAsListInit("AddressSpaces");
}
int64_t TreePredicateFn::getMinAlignment() const {
- Record *R = getOrigPatFragRecord()->getRecord();
+ const Record *R = getOrigPatFragRecord()->getRecord();
if (R->isValueUnset("MinAlignment"))
return 0;
return R->getValueAsInt("MinAlignment");
}
Record *TreePredicateFn::getScalarMemoryVT() const {
- Record *R = getOrigPatFragRecord()->getRecord();
+ const Record *R = getOrigPatFragRecord()->getRecord();
if (R->isValueUnset("ScalarMemoryVT"))
return nullptr;
return R->getValueAsDef("ScalarMemoryVT");
@@ -1390,7 +1390,7 @@ std::string TreePredicateFn::getCodeToRunOnSDNode() const {
if (Tree->isLeaf())
TreeClassName = "SDNode";
else {
- Record *Op = Tree->getOperator();
+ const Record *Op = Tree->getOperator();
const SDNodeInfo &Info = PatFragRec->getDAGPatterns().getSDNodeInfo(Op);
TreeClassName = Info.getSDClassName();
}
@@ -1848,7 +1848,8 @@ MVT::SimpleValueType SDNodeInfo::getKnownType(unsigned ResNo) const {
// TreePatternNode implementation
//
-static unsigned GetNumNodeResults(Record *Operator, CodeGenDAGPatterns &CDP) {
+static unsigned GetNumNodeResults(const Record *Operator,
+ CodeGenDAGPatterns &CDP) {
if (Operator->getName() == "set" || Operator->getName() == "implicit")
return 0; // All return nothing.
@@ -2077,7 +2078,7 @@ void TreePatternNode::InlinePatternFragments(
return;
}
- Record *Op = getOperator();
+ const Record *Op = getOperator();
if (!Op->isSubClassOf("PatFrags")) {
if (getNumChildren() == 0) {
@@ -2340,7 +2341,7 @@ TreePatternNode::getIntrinsicInfo(const CodeGenDAGPatterns &CDP) const {
/// return the ComplexPattern information, otherwise return null.
const ComplexPattern *
TreePatternNode::getComplexPatternInfo(const CodeGenDAGPatterns &CGP) const {
- Record *Rec;
+ const Record *Rec;
if (isLeaf()) {
DefInit *DI = dyn_cast<DefInit>(getLeafValue());
if (!DI)
@@ -2793,7 +2794,7 @@ bool TreePatternNode::canPatternMatch(std::string &Reason,
// TreePattern implementation
//
-TreePattern::TreePattern(Record *TheRec, ListInit *RawPat, bool isInput,
+TreePattern::TreePattern(const Record *TheRec, ListInit *RawPat, bool isInput,
CodeGenDAGPatterns &cdp)
: TheRecord(TheRec), CDP(cdp), isInputPattern(isInput), HasError(false),
Infer(*this) {
@@ -2801,15 +2802,15 @@ TreePattern::TreePattern(Record *TheRec, ListInit *RawPat, bool isInput,
Trees.push_back(ParseTreePattern(I, ""));
}
-TreePattern::TreePattern(Record *TheRec, DagInit *Pat, bool isInput,
+TreePattern::TreePattern(const Record *TheRec, DagInit *Pat, bool isInput,
CodeGenDAGPatterns &cdp)
: TheRecord(TheRec), CDP(cdp), isInputPattern(isInput), HasError(false),
Infer(*this) {
Trees.push_back(ParseTreePattern(Pat, ""));
}
-TreePattern::TreePattern(Record *TheRec, TreePatternNodePtr Pat, bool isInput,
- CodeGenDAGPatterns &cdp)
+TreePattern::TreePattern(const Record *TheRec, TreePatternNodePtr Pat,
+ bool isInput, CodeGenDAGPatterns &cdp)
: TheRecord(TheRec), CDP(cdp), isInputPattern(isInput), HasError(false),
Infer(*this) {
Trees.push_back(Pat);
@@ -3389,7 +3390,7 @@ static bool HandleUse(TreePattern &I, TreePatternNodePtr Pat,
return false;
}
- Record *Rec;
+ const Record *Rec;
if (Pat->isLeaf()) {
DefInit *DI = dyn_cast<DefInit>(Pat->getLeafValue());
if (!DI)
@@ -3408,7 +3409,7 @@ static bool HandleUse(TreePattern &I, TreePatternNodePtr Pat,
Slot = Pat;
return true;
}
- Record *SlotRec;
+ const Record *SlotRec;
if (Slot->isLeaf()) {
SlotRec = cast<DefInit>(Slot->getLeafValue())->getDef();
} else {
@@ -3633,7 +3634,8 @@ class InstAnalyzer {
};
static bool InferFromPattern(CodeGenInstruction &InstInfo,
- const InstAnalyzer &PatInfo, Record *PatDef) {
+ const InstAnalyzer &PatInfo,
+ const Record *PatDef) {
bool Error = false;
// Remember where InstInfo got its flags.
@@ -3729,7 +3731,7 @@ static bool hasNullFragReference(ListInit *LI) {
/// Get all the instructions in a tree.
static void getInstructionsInTree(TreePatternNode &Tree,
- SmallVectorImpl<Record *> &Instrs) {
+ SmallVectorImpl<const Record *> &Instrs) {
if (Tree.isLeaf())
return;
if (Tree.getOperator()->isSubClassOf("Instruction"))
@@ -3935,8 +3937,7 @@ void CodeGenDAGPatterns::parseInstructionPattern(CodeGenInstruction &CGI,
// Create and insert the instruction.
// FIXME: InstImpResults should not be part of DAGInstruction.
- Record *R = I.getRecord();
- DAGInsts.try_emplace(R, std::move(Results), std::move(Operands),
+ DAGInsts.try_emplace(I.getRecord(), std::move(Results), std::move(Operands),
std::move(InstImpResults), SrcPattern, ResultPattern);
LLVM_DEBUG(I.dump());
@@ -3989,9 +3990,7 @@ void CodeGenDAGPatterns::ParseInstructions() {
}
// If we can, convert the instructions to be patterns that are matched!
- for (auto &Entry : Instructions) {
- Record *Instr = Entry.first;
- DAGInstruction &TheInst = Entry.second;
+ for (const auto &[Instr, TheInst] : Instructions) {
TreePatternNodePtr SrcPattern = TheInst.getSrcPattern();
TreePatternNodePtr ResultPattern = TheInst.getResultPattern();
@@ -4078,7 +4077,7 @@ void CodeGenDAGPatterns::InferInstructionFlags() {
for (const PatternToMatch &PTM : ptms()) {
// We can only infer from single-instruction patterns, otherwise we won't
// know which instruction should get the flags.
- SmallVector<Record *, 8> PatInstrs;
+ SmallVector<const Record *, 8> PatInstrs;
getInstructionsInTree(PTM.getDstPattern(), PatInstrs);
if (PatInstrs.size() != 1)
continue;
@@ -4135,7 +4134,7 @@ void CodeGenDAGPatterns::InferInstructionFlags() {
void CodeGenDAGPatterns::VerifyInstructionFlags() {
unsigned Errors = 0;
for (const PatternToMatch &PTM : ptms()) {
- SmallVector<Record *, 8> Instrs;
+ SmallVector<const Record *, 8> Instrs;
getInstructionsInTree(PTM.getDstPattern(), Instrs);
if (Instrs.empty())
continue;
@@ -4245,7 +4244,7 @@ static TreePatternNodePtr PromoteXForms(TreePatternNodePtr N) {
}
void CodeGenDAGPatterns::ParseOnePattern(
- Record *TheDef, TreePattern &Pattern, TreePattern &Result,
+ const Record *TheDef, TreePattern &Pattern, TreePattern &Result,
const std::vector<Record *> &InstImpResults, bool ShouldIgnore) {
// Inline pattern fragments and expand multiple alternatives.
@@ -4591,7 +4590,7 @@ GatherChildrenOfAssociativeOpcode(TreePatternNodePtr N,
std::vector<TreePatternNodePtr> &Children) {
assert(N->getNumChildren() == 2 &&
"Associative but doesn't have 2 children!");
- Record *Operator = N->getOperator();
+ const Record *Operator = N->getOperator();
// Only permit raw nodes.
if (!N->getName().empty() || !N->getPredicateCalls().empty() ||
diff --git a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.h b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.h
index 88a543793fd471..4dc08e617d1fd6 100644
--- a/llvm/utils/TableGen/Common/CodeGenDAGPatterns.h
+++ b/llvm/utils/TableGen/Common/CodeGenDAGPatterns.h
@@ -634,7 +634,7 @@ class TreePatternNode : public RefCountedBase<TreePatternNode> {
/// OperatorOrVal - The Record for the operator if this is an interior node
/// (not a leaf) or the init value (e.g. the "GPRC" record, or "7") for a
/// leaf.
- PointerUnion<Record *, Init *> OperatorOrVal;
+ PointerUnion<const Record *, Init *> OperatorOrVal;
/// Name - The name given to this node with the :$foo notation.
///
@@ -657,7 +657,7 @@ class TreePatternNode : public RefCountedBase<TreePatternNode> {
const Record *GISelFlags = nullptr;
public:
- TreePatternNode(Record *Op, std::vector<TreePatternNodePtr> Ch,
+ TreePatternNode(const Record *Op, std::vector<TreePatternNodePtr> Ch,
unsigned NumResults)
: OperatorOrVal(Op), TransformFn(nullptr), Children(std::move(Ch)) {
Types.resize(NumResults);
@@ -717,9 +717,9 @@ class TreePatternNode : public RefCountedBase<TreePatternNode> {
assert(isLeaf());
return cast<Init *>(OperatorOrVal);
}
- Record *getOperator() const {
+ const Record *getOperator() const {
assert(!isLeaf());
- return cast<Record *>(OperatorOrVal);
+ return cast<const Record *>(OperatorOrVal);
}
unsigned getNumChildren() const { return Children.size(); }
@@ -878,7 +878,7 @@ class TreePattern {
/// TheRecord - The actual TableGen record corresponding to this pattern.
///
- Record *TheRecord;
+ const Record *TheRecord;
/// Args - This is a list of all of the arguments to this pattern (for
/// PatFrag patterns), which are the 'node' markers in this pattern.
@@ -908,11 +908,11 @@ class TreePattern {
public:
/// TreePattern constructor - Parse the specified DagInits into the
/// current record.
- TreePattern(Record *TheRec, ListInit *RawPat, bool isInput,
+ TreePattern(const Record *TheRec, ListInit *RawPat, bool isInput,
CodeGenDAGPatterns &ise);
- TreePattern(Record *TheRec, DagInit *Pat, bool isInput,
+ TreePattern(const Record *TheRec, DagInit *Pat, bool isInput,
CodeGenDAGPatterns &ise);
- TreePattern(Record *TheRec, TreePatternNodePtr Pat, bool isInput,
+ TreePattern(const Record *TheRec, TreePatternNodePtr Pat, bool isInput,
CodeGenDAGPatterns &ise);
/// getTrees - Return the tree patterns which corresponds to this pattern.
@@ -935,7 +935,7 @@ class TreePattern {
/// getRecord - Return the actual TableGen record corresponding to this
/// pattern.
///
- Record *getRecord() const { return TheRecord; }
+ const Record *getRecord() const { return TheRecord; }
unsigned getNumArgs() const { return Args.size(); }
const std::string &getArgName(unsigned i) const {
@@ -1054,7 +1054,7 @@ class DAGInstruction {
/// PatternToMatch - Used by CodeGenDAGPatterns to keep tab of patterns
/// processed to produce isel.
class PatternToMatch {
- Record *SrcRecord; // Originating Record for the pattern.
+ const Record *SrcRecord; // Originating Record for the pattern.
ListInit *Predicates; // Top level predicate conditions to match.
TreePatternNodePtr SrcPattern; // Source pattern to match.
TreePatternNodePtr DstPattern; // Resulting pattern.
@@ -1065,16 +1065,16 @@ class PatternToMatch {
unsigned ID; // Unique ID for the record.
public:
- PatternToMatch(Record *srcrecord, ListInit *preds, TreePatternNodePtr src,
- TreePatternNodePtr dst, std::vector<Record *> dstregs,
- int complexity, unsigned uid, bool ignore,
- const Twine &hwmodefeatures = "")
+ PatternToMatch(const Record *srcrecord, ListInit *preds,
+ TreePatternNodePtr src, TreePatternNodePtr dst,
+ std::vector<Record *> dstregs, int complexity, unsigned uid,
+ bool ignore, const Twine &hwmodefeatures = "")
: SrcRecord(srcrecord), Predicates(preds), SrcPattern(src),
DstPattern(dst), Dstregs(std::move(dstregs)),
HwModeFeatures(hwmodefeatures.str()), AddedComplexity(complexity),
GISelShouldIgnore(ignore), ID(uid) {}
- Record *getSrcRecord() const { return SrcRecord; }
+ const Record *getSrcRecord() const { return SrcRecord; }
ListInit *getPredicates() const { return Predicates; }
TreePatternNode &getSrcPattern() const { return *SrcPattern; }
TreePatternNodePtr getSrcPatternShared() const { return SrcPattern; }
@@ -1099,14 +1099,14 @@ class CodeGenDAGPatterns {
CodeGenTarget Target;
CodeGenIntrinsicTable Intrinsics;
- std::map<Record *, SDNodeInfo, LessRecordByID> SDNodes;
- std::map<Record *, std::pair<Record *, std::string>, LessRecordByID>
+ std::map<const Record *, SDNodeInfo, LessRecordByID> SDNodes;
+ std::map<const Record *, std::pair<Record *, std::string>, LessRecordByID>
SDNodeXForms;
- std::map<Record *, ComplexPattern, LessRecordByID> ComplexPatterns;
- std::map<Record *, std::unique_ptr<TreePattern>, LessRecordByID>
+ std::map<const Record *, ComplexPattern, LessRecordByID> ComplexPatterns;
+ std::map<const Record *, std::unique_ptr<TreePattern>, LessRecordByID>
PatternFragments;
std::map<const Record *, DAGDefaultOperand, LessRecordByID> DefaultOperands;
- std::map<Record *, DAGInstruction, LessRecordByID> Instructions;
+ std::map<const Record *, DAGInstruction, LessRecordByID> Instructions;
// Specific SDNode definitions:
Record *intrinsic_void_sdnode;
@@ -1134,7 +1134,7 @@ class CodeGenDAGPatterns {
Record *getSDNodeNamed(StringRef Name) const;
- const SDNodeInfo &getSDNodeInfo(Record *R) const {
+ const SDNodeInfo &getSDNodeInfo(const Record *R) const {
auto F = SDNodes.find(R);
assert(F != SDNodes.end() && "Unknown node!");
return F->second;
@@ -1142,19 +1142,19 @@ class CodeGenDAGPatterns {
// Node transformation lookups.
typedef std::pair<Record *, std::string> NodeXForm;
- const NodeXForm &getSDNodeTransform(Record *R) const {
+ const NodeXForm &getSDNodeTransform(const Record *R) const {
auto F = SDNodeXForms.find(R);
assert(F != SDNodeXForms.end() && "Invalid transform!");
return F->second;
}
- const ComplexPattern &getComplexPattern(Record *R) const {
+ const ComplexPattern &getComplexPattern(const Record *R) const {
auto F = ComplexPatterns.find(R);
assert(F != ComplexPatterns.end() && "Unknown addressing mode!");
return F->second;
}
- const CodeGenIntrinsic &getIntrinsic(Record *R) const {
+ const CodeGenIntrinsic &getIntrinsic(const Record *R) const {
for (unsigned i = 0, e = Intrinsics.size(); i != e; ++i)
if (Intrinsics[i].TheDef == R)
return Intrinsics[i];
@@ -1181,20 +1181,19 @@ class CodeGenDAGPatterns {
}
// Pattern Fragment information.
- TreePattern *getPatternFragment(Record *R) const {
+ TreePattern *getPatternFragment(const Record *R) const {
auto F = PatternFragments.find(R);
assert(F != PatternFragments.end() && "Invalid pattern fragment request!");
return F->second.get();
}
- TreePattern *getPatternFragmentIfRead(Record *R) const {
+ TreePattern *getPatternFragmentIfRead(const Record *R) const {
auto F = PatternFragments.find(R);
if (F == PatternFragments.end())
return nullptr;
return F->second.get();
}
- typedef std::map<Record *, std::unique_ptr<TreePattern>,
- LessRecordByID>::const_iterator pf_iterator;
+ using pf_iterator = decltype(PatternFragments)::const_iterator;
pf_iterator pf_begin() const { return PatternFragments.begin(); }
pf_iterator pf_end() const { return PatternFragments.end(); }
iterator_range<pf_iterator> ptfs() const { return PatternFragments; }
@@ -1206,11 +1205,11 @@ class CodeGenDAGPatterns {
iterator_range<ptm_iterator> ptms() const { return PatternsToMatch; }
/// Parse the Pattern for an instruction, and insert the result in DAGInsts.
- typedef std::map<Record *, DAGInstruction, LessRecordByID> DAGInstMap;
+ typedef std::map<const Record *, DAGInstruction, LessRecordByID> DAGInstMap;
void parseInstructionPattern(CodeGenInstruction &CGI, ListInit *Pattern,
DAGInstMap &DAGInsts);
- const DAGInstruction &getInstruction(Record *R) const {
+ const DAGInstruction &getInstruction(const Record *R) const {
auto F = Instructions.find(R);
assert(F != Instructions.end() && "Unknown instruction!");
return F->second;
@@ -1244,7 +1243,7 @@ class CodeGenDAGPatterns {
void GenerateVariants();
void VerifyInstructionFlags();
- void ParseOnePattern(Record *TheDef, TreePattern &Pattern,
+ void ParseOnePattern(const Record *TheDef, TreePattern &Pattern,
TreePattern &Result,
const std::vector<Record *> &InstImpResults,
bool ShouldIgnore = false);
diff --git a/llvm/utils/TableGen/Common/CodeGenInstruction.cpp b/llvm/utils/TableGen/Common/CodeGenInstruction.cpp
index 1cc217b46a7ee6..8d698fa9aa36d0 100644
--- a/llvm/utils/TableGen/Common/CodeGenInstruction.cpp
+++ b/llvm/utils/TableGen/Common/CodeGenInstruction.cpp
@@ -298,7 +298,8 @@ CGIOperandList::ParseOperandName(StringRef Op, bool AllowWholeOp) {
return std::pair(0U, 0U);
}
-static void ParseConstraint(StringRef CStr, CGIOperandList &Ops, Record *Rec) {
+static void ParseConstraint(StringRef CStr, CGIOperandList &Ops,
+ const Record *Rec) {
// EARLY_CLOBBER: @early $reg
StringRef::size_type wpos = CStr.fi...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/107921
More information about the llvm-commits
mailing list