summaryrefslogtreecommitdiffstats
path: root/llvm/lib
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib')
-rw-r--r--llvm/lib/CodeGen/MIRParser/MIParser.cpp13
1 files changed, 13 insertions, 0 deletions
diff --git a/llvm/lib/CodeGen/MIRParser/MIParser.cpp b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
index c11117312c9..c6c0e4516f1 100644
--- a/llvm/lib/CodeGen/MIRParser/MIParser.cpp
+++ b/llvm/lib/CodeGen/MIRParser/MIParser.cpp
@@ -695,6 +695,19 @@ bool MIParser::verifyImplicitOperands(
if (ImplicitOperand.isIdenticalTo(Operand))
continue;
if (Operand.isReg() && Operand.isImplicit()) {
+ // Check if this implicit register is a subregister of an explicit
+ // register operand.
+ bool IsImplicitSubRegister = false;
+ for (size_t K = 0, E = Operands.size(); K < E; ++K) {
+ const auto &Op = Operands[K].Operand;
+ if (Op.isReg() && !Op.isImplicit() &&
+ TRI->isSubRegister(Op.getReg(), Operand.getReg())) {
+ IsImplicitSubRegister = true;
+ break;
+ }
+ }
+ if (IsImplicitSubRegister)
+ continue;
return error(Operands[J].Begin,
Twine("expected an implicit register operand '") +
printImplicitRegisterFlag(ImplicitOperand) + " %" +
OpenPOWER on IntegriCloud