Skip to content

Commit 329a308

Browse files
committed
[𝘀𝗽𝗿] changes to main this commit is based on
Created using spr 1.3.8-beta.1 [skip ci]
1 parent 4b54836 commit 329a308

File tree

3 files changed

+13
-15
lines changed

3 files changed

+13
-15
lines changed

llvm/utils/TableGen/Common/CodeGenInstAlias.cpp

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -44,20 +44,17 @@ static Expected<ResultOperand> matchSimpleOperand(const Init *Arg,
4444
const StringInit *ArgName,
4545
const Record *Op,
4646
const CodeGenTarget &T) {
47-
if (Op->isSubClassOf("RegisterClass") ||
48-
Op->isSubClassOf("RegisterOperand")) {
49-
const Record *OpRC =
50-
Op->isSubClassOf("RegisterClass") ? Op : Op->getValueAsDef("RegClass");
51-
47+
if (const Record *OpRC = T.getAsRegClassLike(Op)) {
5248
if (const auto *ArgDef = dyn_cast<DefInit>(Arg)) {
5349
const Record *ArgRec = ArgDef->getDef();
5450

5551
// Match 'RegClass:$name' or 'RegOp:$name'.
5652
if (const Record *ArgRC = T.getInitValueAsRegClassLike(Arg)) {
5753
if (ArgRC->isSubClassOf("RegisterClass")) {
58-
if (!T.getRegisterClass(OpRC).hasSubClass(&T.getRegisterClass(ArgRC)))
54+
if (!OpRC->isSubClassOf("RegisterClass") ||
55+
!T.getRegisterClass(OpRC).hasSubClass(&T.getRegisterClass(ArgRC)))
5956
return createStringError(
60-
"argument register class" + ArgRC->getName() +
57+
"argument register class " + ArgRC->getName() +
6158
" is not a subclass of operand register class " +
6259
OpRC->getName());
6360
if (!ArgName)
@@ -111,11 +108,9 @@ static Expected<ResultOperand> matchSimpleOperand(const Init *Arg,
111108
return ResultOperand::createRecord(ArgName->getAsUnquotedString(),
112109
ArgDef->getDef());
113110
}
114-
115-
return createStringError("argument must be a subclass of Operand");
116111
}
117-
118-
llvm_unreachable("Unknown operand kind");
112+
return createStringError("argument must be a subclass of 'Operand' but got " +
113+
Op->getName() + " instead");
119114
}
120115

121116
static Expected<ResultOperand> matchComplexOperand(const Init *Arg,

llvm/utils/TableGen/Common/CodeGenTarget.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -227,12 +227,14 @@ const Record *CodeGenTarget::getInitValueAsRegClassLike(const Init *V) const {
227227
const DefInit *VDefInit = dyn_cast<DefInit>(V);
228228
if (!VDefInit)
229229
return nullptr;
230+
return getAsRegClassLike(VDefInit->getDef());
231+
}
230232

231-
const Record *RegClass = VDefInit->getDef();
232-
if (RegClass->isSubClassOf("RegisterOperand"))
233-
return RegClass->getValueAsDef("RegClass");
233+
const Record *CodeGenTarget::getAsRegClassLike(const Record *Rec) const {
234+
if (Rec->isSubClassOf("RegisterOperand"))
235+
return Rec->getValueAsDef("RegClass");
234236

235-
return RegClass->isSubClassOf("RegisterClassLike") ? RegClass : nullptr;
237+
return Rec->isSubClassOf("RegisterClassLike") ? Rec : nullptr;
236238
}
237239

238240
CodeGenSchedModels &CodeGenTarget::getSchedModels() const {

llvm/utils/TableGen/Common/CodeGenTarget.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,7 @@ class CodeGenTarget {
165165
/// return the Record. This is used as a convenience function to handle direct
166166
/// RegisterClass references, or those wrapped in a RegisterOperand.
167167
const Record *getInitValueAsRegClassLike(const Init *V) const;
168+
const Record *getAsRegClassLike(const Record *V) const;
168169

169170
CodeGenSchedModels &getSchedModels() const;
170171

0 commit comments

Comments
 (0)