@@ -106,9 +106,8 @@ void PseudoLoweringEmitter::addOperandMapping(
106106 " ' has a different number of sub operands than source operand '" +
107107 SrcOpnd.Rec ->getName () + " '" );
108108
109- // Source operand maps to destination operand. The Data element
110- // will be filled in later, just set the Kind for now. Do it
111- // for each corresponding MachineInstr operand, not just the first.
109+ // Source operand maps to destination operand. Do it for each corresponding
110+ // MachineInstr operand, not just the first.
112111 for (unsigned I = 0 , E = NumOps; I != E; ++I) {
113112 auto &Entry = OperandMap[MIOpNo + I];
114113 Entry.Kind = OpData::Operand;
@@ -191,21 +190,26 @@ void PseudoLoweringEmitter::evaluateExpansion(const Record *Rec) {
191190 unsigned MIOpNo = DstOp.MIOperandNo ;
192191
193192 if (const auto *SubDag = dyn_cast<DagInit>(Dag->getArg (Idx))) {
193+ if (DstOp.MIOperandInfo ->getNumArgs () == 0 )
194+ PrintFatalError (Rec, " In pseudo instruction '" + Rec->getName () +
195+ " ', operand '" + DstOp.Rec ->getName () +
196+ " ' does not have suboperands" );
194197 if (DstOp.MINumOperands != SubDag->getNumArgs ()) {
195- PrintError (Rec,
196- " In pseudo instruction '" + Rec->getName () + " ', '" +
197- SubDag->getAsString () +
198- " ' has wrong number of operands for operand type '" +
199- DstOp.Rec ->getName () + " '" );
198+ PrintFatalError (
199+ Rec, " In pseudo instruction '" + Rec->getName () + " ', '" +
200+ SubDag->getAsString () +
201+ " ' has wrong number of operands for operand type '" +
202+ DstOp.Rec ->getName () + " '" );
200203 }
201204 for (unsigned I = 0 , E = DstOp.MINumOperands ; I != E; ++I) {
202205 auto *OpndRec = cast<DefInit>(DstOp.MIOperandInfo ->getArg (I))->getDef ();
203206 addOperandMapping (MIOpNo + I, 1 , Rec, SubDag, I, OpndRec, OperandMap,
204207 SourceOperands, SourceInsn);
205208 }
206- } else
209+ } else {
207210 addOperandMapping (MIOpNo, DstOp.MINumOperands , Rec, Dag, Idx, DstOp.Rec ,
208211 OperandMap, SourceOperands, SourceInsn);
212+ }
209213 }
210214
211215 Expansions.emplace_back (SourceInsn, Insn, OperandMap);
0 commit comments