@@ -29,7 +29,7 @@ class PseudoLoweringEmitter {
2929 union {
3030 unsigned Operand; // Operand number mapped to.
3131 uint64_t Imm; // Integer immedate value.
32- Record *Reg; // Physical register.
32+ const Record *Reg; // Physical register.
3333 } Data;
3434 };
3535 struct PseudoExpansion {
@@ -42,24 +42,24 @@ class PseudoLoweringEmitter {
4242 : Source(s), Dest(d), OperandMap(m) {}
4343 };
4444
45- RecordKeeper &Records;
45+ const RecordKeeper &Records;
4646
4747 // It's overkill to have an instance of the full CodeGenTarget object,
4848 // but it loads everything on demand, not in the constructor, so it's
4949 // lightweight in performance, so it works out OK.
50- CodeGenTarget Target;
50+ const CodeGenTarget Target;
5151
5252 SmallVector<PseudoExpansion, 64 > Expansions;
5353
54- unsigned addDagOperandMapping (Record *Rec, DagInit *Dag,
55- CodeGenInstruction &Insn,
54+ unsigned addDagOperandMapping (const Record *Rec, const DagInit *Dag,
55+ const CodeGenInstruction &Insn,
5656 IndexedMap<OpData> &OperandMap,
5757 unsigned BaseIdx);
58- void evaluateExpansion (Record *Pseudo);
58+ void evaluateExpansion (const Record *Pseudo);
5959 void emitLoweringEmitter (raw_ostream &o);
6060
6161public:
62- PseudoLoweringEmitter (RecordKeeper &R) : Records(R), Target(R) {}
62+ PseudoLoweringEmitter (const RecordKeeper &R) : Records(R), Target(R) {}
6363
6464 // / run - Output the pseudo-lowerings.
6565 void run (raw_ostream &o);
@@ -69,13 +69,12 @@ class PseudoLoweringEmitter {
6969// FIXME: This pass currently can only expand a pseudo to a single instruction.
7070// The pseudo expansion really should take a list of dags, not just
7171// a single dag, so we can do fancier things.
72-
7372unsigned PseudoLoweringEmitter::addDagOperandMapping (
74- Record *Rec, DagInit *Dag, CodeGenInstruction &Insn,
73+ const Record *Rec, const DagInit *Dag, const CodeGenInstruction &Insn,
7574 IndexedMap<OpData> &OperandMap, unsigned BaseIdx) {
7675 unsigned OpsAdded = 0 ;
7776 for (unsigned i = 0 , e = Dag->getNumArgs (); i != e; ++i) {
78- if (DefInit *DI = dyn_cast<DefInit>(Dag->getArg (i))) {
77+ if (const DefInit *DI = dyn_cast<DefInit>(Dag->getArg (i))) {
7978 // Physical register reference. Explicit check for the special case
8079 // "zero_reg" definition.
8180 if (DI->getDef ()->isSubClassOf (" Register" ) ||
@@ -105,17 +104,15 @@ unsigned PseudoLoweringEmitter::addDagOperandMapping(
105104 for (unsigned I = 0 , E = Insn.Operands [i].MINumOperands ; I != E; ++I)
106105 OperandMap[BaseIdx + i + I].Kind = OpData::Operand;
107106 OpsAdded += Insn.Operands [i].MINumOperands ;
108- } else if (IntInit *II = dyn_cast<IntInit>(Dag->getArg (i))) {
107+ } else if (const IntInit *II = dyn_cast<IntInit>(Dag->getArg (i))) {
109108 OperandMap[BaseIdx + i].Kind = OpData::Imm;
110109 OperandMap[BaseIdx + i].Data .Imm = II->getValue ();
111110 ++OpsAdded;
112- } else if (auto *BI = dyn_cast<BitsInit>(Dag->getArg (i))) {
113- auto *II =
114- cast<IntInit>(BI->convertInitializerTo (IntRecTy::get (Records)));
111+ } else if (const auto *BI = dyn_cast<BitsInit>(Dag->getArg (i))) {
115112 OperandMap[BaseIdx + i].Kind = OpData::Imm;
116- OperandMap[BaseIdx + i].Data .Imm = II-> getValue ();
113+ OperandMap[BaseIdx + i].Data .Imm = *BI-> convertInitializerToInt ();
117114 ++OpsAdded;
118- } else if (DagInit *SubDag = dyn_cast<DagInit>(Dag->getArg (i))) {
115+ } else if (const DagInit *SubDag = dyn_cast<DagInit>(Dag->getArg (i))) {
119116 // Just add the operands recursively. This is almost certainly
120117 // a constant value for a complex operand (> 1 MI operand).
121118 unsigned NewOps =
@@ -129,23 +126,23 @@ unsigned PseudoLoweringEmitter::addDagOperandMapping(
129126 return OpsAdded;
130127}
131128
132- void PseudoLoweringEmitter::evaluateExpansion (Record *Rec) {
129+ void PseudoLoweringEmitter::evaluateExpansion (const Record *Rec) {
133130 LLVM_DEBUG (dbgs () << " Pseudo definition: " << Rec->getName () << " \n " );
134131
135132 // Validate that the result pattern has the corrent number and types
136133 // of arguments for the instruction it references.
137- DagInit *Dag = Rec->getValueAsDag (" ResultInst" );
134+ const DagInit *Dag = Rec->getValueAsDag (" ResultInst" );
138135 assert (Dag && " Missing result instruction in pseudo expansion!" );
139136 LLVM_DEBUG (dbgs () << " Result: " << *Dag << " \n " );
140137
141- DefInit *OpDef = dyn_cast<DefInit>(Dag->getOperator ());
138+ const DefInit *OpDef = dyn_cast<DefInit>(Dag->getOperator ());
142139 if (!OpDef) {
143140 PrintError (Rec, " In pseudo instruction '" + Rec->getName () +
144141 " ', result operator is not a record" );
145142 PrintFatalNote (Rec->getValue (" ResultInst" ),
146143 " Result was assigned at the following location:" );
147144 }
148- Record *Operator = OpDef->getDef ();
145+ const Record *Operator = OpDef->getDef ();
149146 if (!Operator->isSubClassOf (" Instruction" )) {
150147 PrintError (Rec, " In pseudo instruction '" + Rec->getName () +
151148 " ', result operator '" + Operator->getName () +
@@ -173,8 +170,8 @@ void PseudoLoweringEmitter::evaluateExpansion(Record *Rec) {
173170 }
174171
175172 unsigned NumMIOperands = 0 ;
176- for (unsigned i = 0 , e = Insn.Operands . size (); i != e; ++i )
177- NumMIOperands += Insn. Operands [i] .MINumOperands ;
173+ for (const auto &Op : Insn.Operands )
174+ NumMIOperands += Op .MINumOperands ;
178175 IndexedMap<OpData> OperandMap;
179176 OperandMap.grow (NumMIOperands);
180177
@@ -192,8 +189,8 @@ void PseudoLoweringEmitter::evaluateExpansion(Record *Rec) {
192189 // the lowering emitter.
193190 CodeGenInstruction SourceInsn (Rec);
194191 StringMap<unsigned > SourceOperands;
195- for (unsigned i = 0 , e = SourceInsn.Operands . size (); i != e; ++i )
196- SourceOperands[SourceInsn. Operands [i]. Name ] = i ;
192+ for (const auto &[Idx, SrcOp] : enumerate( SourceInsn.Operands ) )
193+ SourceOperands[SrcOp. Name ] = Idx ;
197194
198195 LLVM_DEBUG (dbgs () << " Operand mapping:\n " );
199196 for (unsigned i = 0 , e = Insn.Operands .size (); i != e; ++i) {
@@ -265,7 +262,7 @@ void PseudoLoweringEmitter::emitLoweringEmitter(raw_ostream &o) {
265262 << Expansion.OperandMap [MIOpNo + i].Data .Imm << " ));\n " ;
266263 break ;
267264 case OpData::Reg: {
268- Record *Reg = Expansion.OperandMap [MIOpNo + i].Data .Reg ;
265+ const Record *Reg = Expansion.OperandMap [MIOpNo + i].Data .Reg ;
269266 o << " Inst.addOperand(MCOperand::createReg(" ;
270267 // "zero_reg" is special.
271268 if (Reg->getName () == " zero_reg" )
@@ -297,19 +294,18 @@ void PseudoLoweringEmitter::emitLoweringEmitter(raw_ostream &o) {
297294 o << " \n }\n\n " ;
298295}
299296
300- void PseudoLoweringEmitter::run (raw_ostream &o ) {
297+ void PseudoLoweringEmitter::run (raw_ostream &OS ) {
301298 StringRef Classes[] = {" PseudoInstExpansion" , " Instruction" };
302- std::vector<Record *> Insts = Records.getAllDerivedDefinitions (Classes);
303299
304300 // Process the pseudo expansion definitions, validating them as we do so.
305301 Records.startTimer (" Process definitions" );
306- for (unsigned i = 0 , e = Insts. size (); i != e; ++i )
307- evaluateExpansion (Insts[i] );
302+ for (const Record *Inst : Records. getAllDerivedDefinitions (Classes) )
303+ evaluateExpansion (Inst );
308304
309305 // Generate expansion code to lower the pseudo to an MCInst of the real
310306 // instruction.
311307 Records.startTimer (" Emit expansion code" );
312- emitLoweringEmitter (o );
308+ emitLoweringEmitter (OS );
313309}
314310
315311static TableGen::Emitter::OptClass<PseudoLoweringEmitter>
0 commit comments