Lines Matching refs:OS
29 RegisterInfoEmitter::runEnums(raw_ostream &OS,
35 EmitSourceFileHeader("Target Register Enum Values", OS);
37 OS << "\n#ifdef GET_REGINFO_ENUM\n";
38 OS << "#undef GET_REGINFO_ENUM\n";
40 OS << "namespace llvm {\n\n";
43 OS << "namespace " << Namespace << " {\n";
44 OS << "enum {\n NoRegister,\n";
47 OS << " " << Registers[i]->getName() << " = " <<
51 OS << " NUM_TARGET_REGS \t// " << Registers.size()+1 << "\n";
52 OS << "};\n";
54 OS << "}\n";
59 OS << "\n// Register classes\n";
61 OS << "namespace " << Namespace << " {\n";
62 OS << "enum {\n";
64 if (i) OS << ",\n";
65 OS << " " << RegisterClasses[i].getName() << "RegClassID";
66 OS << " = " << i;
68 OS << "\n };\n";
70 OS << "}\n";
77 OS << "\n// Register alternate name indices\n";
79 OS << "namespace " << Namespace << " {\n";
80 OS << "enum {\n";
82 OS << " " << RegAltNameIndices[i]->getName() << ",\t// " << i << "\n";
83 OS << " NUM_TARGET_REG_ALT_NAMES = " << RegAltNameIndices.size() << "\n";
84 OS << "};\n";
86 OS << "}\n";
90 OS << "} // End llvm namespace \n";
91 OS << "#endif // GET_REGINFO_ENUM\n\n";
95 RegisterInfoEmitter::EmitRegMapping(raw_ostream &OS,
126 OS << " switch (";
128 OS << "DwarfFlavour";
130 OS << "EHFlavour";
131 OS << ") {\n"
137 OS << " case " << i << ":\n";
143 OS << " ";
145 OS << "RI->";
146 OS << "mapDwarfRegToLLVMReg(" << DwarfRegNo << ", "
149 OS << "false";
151 OS << "true";
152 OS << " );\n";
154 OS << " break;\n";
156 OS << " }\n";
172 OS << " switch (";
174 OS << "DwarfFlavour";
176 OS << "EHFlavour";
177 OS << ") {\n"
183 OS << " case " << i << ":\n";
188 OS << " ";
190 OS << "RI->";
191 OS << "mapLLVMRegToDwarfReg(" << getQualifiedName(I->first) << ", "
194 OS << "false";
196 OS << "true";
197 OS << " );\n";
199 OS << " break;\n";
201 OS << " }\n";
209 RegisterInfoEmitter::runMCDesc(raw_ostream &OS, CodeGenTarget &Target,
211 EmitSourceFileHeader("MC Register Information", OS);
213 OS << "\n#ifdef GET_REGINFO_MC_DESC\n";
214 OS << "#undef GET_REGINFO_MC_DESC\n";
219 OS << "namespace llvm {\n\n";
223 OS << "struct " << ClassName << " : public MCRegisterInfo {\n"
225 OS << "};\n";
227 OS << "\nnamespace {\n";
236 OS << " const unsigned " << Reg->getName() << "_Overlaps[] = { "
241 OS << getQualifiedName((*I)->TheDef) << ", ";
242 OS << "0 };\n";
246 OS << " const unsigned Empty_SubRegsSet[] = { 0 };\n";
256 OS << " const unsigned " << Reg.getName() << "_SubRegsSet[] = { ";
258 OS << getQualifiedName(SR[j]->TheDef) << ", ";
259 OS << "0 };\n";
263 OS << " const unsigned Empty_SuperRegsSet[] = { 0 };\n";
271 OS << " const unsigned " << Reg.getName() << "_SuperRegsSet[] = { ";
273 OS << getQualifiedName(SR[j]->TheDef) << ", ";
274 OS << "0 };\n";
276 OS << "}\n"; // End of anonymous namespace...
278 OS << "\nMCRegisterDesc " << TargetName
280 OS << " { \"NOREG\",\t0,\t0,\t0 },\n";
286 OS << " { \"";
287 OS << Reg.getName() << "\",\t" << Reg.getName() << "_Overlaps,\t";
289 OS << Reg.getName() << "_SubRegsSet,\t";
291 OS << "Empty_SubRegsSet,\t";
293 OS << Reg.getName() << "_SuperRegsSet";
295 OS << "Empty_SuperRegsSet";
296 OS << " },\n";
298 OS << "};\n\n"; // End of register descriptors...
301 OS << "static inline void Init" << TargetName
304 OS << " RI->InitMCRegisterInfo(" << TargetName << "RegDesc, "
307 EmitRegMapping(OS, Regs, false);
309 OS << "}\n\n";
312 OS << "} // End llvm namespace \n";
313 OS << "#endif // GET_REGINFO_MC_DESC\n\n";
317 RegisterInfoEmitter::runTargetHeader(raw_ostream &OS, CodeGenTarget &Target,
319 EmitSourceFileHeader("Register Information Header Fragment", OS);
321 OS << "\n#ifdef GET_REGINFO_HEADER\n";
322 OS << "#undef GET_REGINFO_HEADER\n";
327 OS << "#include \"llvm/Target/TargetRegisterInfo.h\"\n";
328 OS << "#include <string>\n\n";
330 OS << "namespace llvm {\n\n";
332 OS << "struct " << ClassName << " : public TargetRegisterInfo {\n"
344 OS << "\n// Subregister indices\n";
347 OS << "namespace " << Namespace << " {\n";
348 OS << "enum {\n NoSubRegister,\n";
350 OS << " " << SubRegIndices[i]->getName() << ",\t// " << i+1 << "\n";
351 OS << " NUM_TARGET_NAMED_SUBREGS = " << SubRegIndices.size()+1 << "\n";
352 OS << "};\n";
354 OS << "}\n";
361 OS << "namespace " << RegisterClasses[0].Namespace
369 OS << " struct " << Name << "Class : public TargetRegisterClass {\n"
372 OS << " ArrayRef<unsigned> "
374 OS << " };\n";
377 OS << " extern " << Name << "Class\t" << Name << "RegClass;\n";
379 OS << " static TargetRegisterClass * const "<< Name <<"RegisterClass = &"
382 OS << "} // end of namespace " << TargetName << "\n\n";
384 OS << "} // End llvm namespace \n";
385 OS << "#endif // GET_REGINFO_HEADER\n\n";
392 RegisterInfoEmitter::runTargetDesc(raw_ostream &OS, CodeGenTarget &Target,
394 EmitSourceFileHeader("Target Register and Register Classes Information", OS);
396 OS << "\n#ifdef GET_REGINFO_TARGET_DESC\n";
397 OS << "#undef GET_REGINFO_TARGET_DESC\n";
399 OS << "namespace llvm {\n\n";
409 OS << "namespace { // Register classes...\n";
424 OS << " // " << Name << " Register Class...\n"
429 OS << getQualifiedName(Reg) << ", ";
431 OS << "\n };\n\n";
442 OS << " // " << Name
447 OS << getEnumName(RC.VTs[i]) << ", ";
448 OS << "MVT::Other\n };\n\n";
450 OS << "} // end anonymous namespace\n\n";
454 OS << "namespace " << RegisterClasses[0].Namespace
457 OS << " " << RegisterClasses[i].getName() << "Class\t"
462 OS << "\n";
491 OS << " // " << Name
498 OS << ", ";
500 OS << "&" << getQualifiedName(SRC[idx]) << "RegClass";
502 OS << "0";
504 OS << "\n };\n\n";
514 OS << " // " << Name
527 OS << ", ";
528 OS << "&" << getQualifiedName(RC2.TheDef) << "RegClass";
533 OS << (!Empty ? ", " : "") << "NULL";
534 OS << "\n };\n\n";
538 OS << " static const TargetRegisterClass* const "
549 OS << " // " << Name
562 if (!Empty) OS << ", ";
563 OS << "&" << getQualifiedName(RC2.TheDef) << "RegClass";
575 OS << (!Empty ? ", " : "") << "NULL";
576 OS << "\n };\n\n";
585 OS << " // " << Name
597 if (!Empty) OS << ", ";
598 OS << "&" << getQualifiedName(RC2.TheDef) << "RegClass";
603 OS << (!Empty ? ", " : "") << "NULL";
604 OS << "\n };\n\n";
610 OS << RC.getName() << "Class::" << RC.getName()
629 OS << "\nstatic inline unsigned " << RC.getName()
636 OS << " static const unsigned AltOrder" << oi << "[] = {";
638 OS << (elem ? ", " : " ") << getQualifiedName(Elems[elem]);
639 OS << " };\n";
641 OS << " static const ArrayRef<unsigned> Order[] = {\n"
644 OS << "),\n makeArrayRef(AltOrder" << oi;
645 OS << ")\n };\n const unsigned Select = " << RC.getName()
651 OS << "}\n";
654 OS << "\nnamespace {\n";
655 OS << " const TargetRegisterClass* const RegisterClasses[] = {\n";
657 OS << " &" << getQualifiedName(RegisterClasses[i].TheDef)
659 OS << " };\n";
660 OS << "}\n"; // End of anonymous namespace...
664 OS << "\n static const TargetRegisterInfoDesc "
667 OS << " { 0, 0 },\n";
672 OS << " { ";
673 OS << Reg.CostPerUse << ", "
676 OS << " };\n"; // End of register descriptors...
685 OS << "\n static const char *const " << TargetName
688 OS << SubRegIndices[i]->getName();
690 OS << "\", \"";
692 OS << "\" };\n\n";
696 OS << " enum {";
698 OS << "\n " << SubRegIndices[i]->getName() << " = " << i+1;
700 OS << ',';
702 OS << "\n };\n\n";
704 OS << "\n";
710 OS << "unsigned " << ClassName
718 OS << " case " << getQualifiedName(Regs[i]->TheDef) << ":\n";
719 OS << " switch (Index) {\n";
720 OS << " default: return 0;\n";
723 OS << " case " << getQualifiedName(ii->first)
725 OS << " };\n" << " break;\n";
727 OS << " };\n";
728 OS << " return 0;\n";
729 OS << "}\n\n";
731 OS << "unsigned " << ClassName
739 OS << " case " << getQualifiedName(Regs[i]->TheDef) << ":\n";
742 OS << " if (SubRegNo == " << getQualifiedName(ii->second->TheDef)
744 OS << " return 0;\n";
746 OS << " };\n";
747 OS << " return 0;\n";
748 OS << "}\n\n";
751 OS << "unsigned " << ClassName
761 OS << " case " << getQualifiedName(SubRegIndices[i])
765 OS << " case " << getQualifiedName(SubRegIndices[j])
770 OS << " }\n";
772 OS << " }\n}\n\n";
775 OS << "extern MCRegisterDesc " << TargetName << "RegDesc[];\n";
777 OS << ClassName << "::" << ClassName
785 EmitRegMapping(OS, Regs, true);
787 OS << "}\n\n";
789 OS << "} // End llvm namespace \n";
790 OS << "#endif // GET_REGINFO_TARGET_DESC\n\n";
793 void RegisterInfoEmitter::run(raw_ostream &OS) {
798 runEnums(OS, Target, RegBank);
799 runMCDesc(OS, Target, RegBank);
800 runTargetHeader(OS, Target, RegBank);
801 runTargetDesc(OS, Target, RegBank);