From f30545d93abba10a8f3a9923924227c66641544b Mon Sep 17 00:00:00 2001 From: billow Date: Fri, 28 Apr 2023 23:28:33 +0800 Subject: [PATCH 1/3] Fix `regInfoEmitEnums()` and indent --- llvm/utils/TableGen/PrinterCapstone.cpp | 36 ++++++++++++++----------- 1 file changed, 20 insertions(+), 16 deletions(-) diff --git a/llvm/utils/TableGen/PrinterCapstone.cpp b/llvm/utils/TableGen/PrinterCapstone.cpp index ff2eedaabf54..81d68115c03b 100644 --- a/llvm/utils/TableGen/PrinterCapstone.cpp +++ b/llvm/utils/TableGen/PrinterCapstone.cpp @@ -27,7 +27,8 @@ static void emitDefaultSourceFileHeader(raw_ostream &OS) { OS << "/* Capstone Disassembly Engine, http://www.capstone-engine.org */\n" << "/* By Nguyen Anh Quynh , 2013-2022, */\n" << "/* Rot127 2022-2023 */\n" - << "/* Automatically generated file by Capstone's LLVM TableGen Disassembler " + << "/* Automatically generated file by Capstone's LLVM TableGen " + "Disassembler " "Backend. */\n\n" << "/* LLVM-commit: */\n" << "/* LLVM-tag: */\n\n" @@ -142,22 +143,23 @@ void PrinterCapstone::regInfoEmitEnums(CodeGenTarget const &Target, assert(Registers.size() <= 0xffff && "Too many regs to fit in tables"); emitIncludeToggle("GET_REGINFO_ENUM", true); - StringRef TargetName = Target.getName().upper(); + StringRef TargetName = Target.getName(); + std::string TargetNameU = TargetName.upper(); - OS << "enum {\n " << TargetName << "_NoRegister,\n"; - CSRegEnum << "\t" << TargetName << "_REG_INVALID = 0,\n"; + OS << "enum {\n " << TargetNameU << "_NoRegister,\n"; + CSRegEnum << "\t" << TargetNameU << "_REG_INVALID = 0,\n"; for (const auto &Reg : Registers) { - OS << " " << TargetName << "_" << Reg.getName() << " = " << Reg.EnumValue + OS << " " << TargetNameU << "_" << Reg.getName() << " = " << Reg.EnumValue << ",\n"; - CSRegEnum << "\t" << TargetName << "_REG_" << Reg.getName() << " = " + CSRegEnum << "\t" << TargetNameU << "_REG_" << Reg.getName() << " = " << Reg.EnumValue << ",\n"; } assert(Registers.size() == Registers.back().EnumValue && "Register enum value mismatch!"); OS << " NUM_TARGET_REGS // " << Registers.size() + 1 << "\n"; OS << "};\n"; - CSRegEnum << "\t" << TargetName << "_REG_ENDING, // " << Registers.size() + 1 + CSRegEnum << "\t" << TargetNameU << "_REG_ENDING, // " << Registers.size() + 1 << "\n"; writeFile(TargetName.str() + "GenCSRegEnum.inc", CSRegEnumStr); @@ -2518,8 +2520,7 @@ uint8_t getOpAccess(CodeGenInstruction const *CGI, std::string OperandType, if (OperandType.find("CS_OP_MEM") != std::string::npos) { if (CGI->mayLoad_Unset && CGI->mayStore_Unset) { return 0; - } - else if (CGI->mayLoad && CGI->mayStore) + } else if (CGI->mayLoad && CGI->mayStore) return 3; else if (CGI->mayLoad) return 1; @@ -2529,9 +2530,9 @@ uint8_t getOpAccess(CodeGenInstruction const *CGI, std::string OperandType, return IsOutOp ? 2 : 1; } -void addComplexOperand(CodeGenInstruction const *CGI, - Record const *ComplexOp, StringRef const &ArgName, - bool IsOutOp, std::vector &InsOps) { +void addComplexOperand(CodeGenInstruction const *CGI, Record const *ComplexOp, + StringRef const &ArgName, bool IsOutOp, + std::vector &InsOps) { DagInit *SubOps = ComplexOp->getValueAsDag("MIOperandInfo"); unsigned E = SubOps->getNumArgs(); @@ -2681,7 +2682,8 @@ void printFeatureEnumEntry(StringRef const &TargetName, AsmMatcherInfo &AMI, Features.emplace(Feature); // Enum - EnumName = TargetName.upper() + "_FEATURE_" + STF->TheDef->getName().str(); + EnumName = + TargetName.upper() + "_FEATURE_" + STF->TheDef->getName().str(); FeatureEnum << EnumName; if (Features.size() == 1) FeatureEnum << " = 128"; @@ -2706,8 +2708,9 @@ void printOpPrintGroupEnum(StringRef const &TargetName, static std::set OpGroups; if (OpGroups.empty()) { for (auto OpGroup : Exceptions) { - OpGroupEnum.indent(2) << TargetName.upper() + "_OP_GROUP_" + OpGroup + " = " - << OpGroups.size() << ",\n"; + OpGroupEnum.indent(2) + << TargetName.upper() + "_OP_GROUP_" + OpGroup + " = " + << OpGroups.size() << ",\n"; OpGroups.emplace(OpGroup); } } @@ -2776,7 +2779,8 @@ void PrinterCapstone::asmMatcherEmitMatchTable(CodeGenTarget const &Target, UseMI = MIMap.find(CGI->AsmString) != MIMap.end(); if (UseMI) MI = MIMap[CGI->AsmString]; - printInsnNameMapEnumEntry(Target.getName().upper(), *MI, InsnNameMap, InsnEnum); + printInsnNameMapEnumEntry(Target.getName().upper(), *MI, InsnNameMap, + InsnEnum); printFeatureEnumEntry(Target.getName().upper(), Info, CGI, FeatureEnum, FeatureNameArray); printOpPrintGroupEnum(Target.getName().upper(), CGI, OpGroups); From cd049debbd66b7408998e947dabb459fe7c924c3 Mon Sep 17 00:00:00 2001 From: billow Date: Fri, 28 Apr 2023 23:40:27 +0800 Subject: [PATCH 2/3] Fix `GenDisassemblerTables.inc#checkDecoderPredicate()` --- llvm/utils/TableGen/PrinterCapstone.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/llvm/utils/TableGen/PrinterCapstone.cpp b/llvm/utils/TableGen/PrinterCapstone.cpp index 81d68115c03b..2ec2a01e3b81 100644 --- a/llvm/utils/TableGen/PrinterCapstone.cpp +++ b/llvm/utils/TableGen/PrinterCapstone.cpp @@ -686,8 +686,11 @@ bool PrinterCapstone::decoderEmitterEmitPredicateMatchAux( if (auto *D = dyn_cast(&Val)) { if (!D->getDef()->isSubClassOf("SubtargetFeature")) return true; + + std::string Subtarget = + StringRef(PredicateNamespace).upper() + "_" + D->getAsString(); PredOS << PredicateNamespace << "_getFeatureBits(Inst->csh->mode, " - << PredicateNamespace << "_" << D->getAsString() << ")"; + << Subtarget << ")"; return false; } if (auto *D = dyn_cast(&Val)) { From 487fe51ec4f611edbd42fb9222d14e5f1b360768 Mon Sep 17 00:00:00 2001 From: billow Date: Mon, 1 May 2023 22:47:55 +0800 Subject: [PATCH 3/3] Fix `TriCoreGenRegisterInfo.inc` | `PrinterCapstone::regInfoEmitRegClasses` --- llvm/utils/TableGen/PrinterCapstone.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/llvm/utils/TableGen/PrinterCapstone.cpp b/llvm/utils/TableGen/PrinterCapstone.cpp index 2ec2a01e3b81..ce71e8f9c974 100644 --- a/llvm/utils/TableGen/PrinterCapstone.cpp +++ b/llvm/utils/TableGen/PrinterCapstone.cpp @@ -282,7 +282,7 @@ static std::string getQualifiedNameCCS(const Record *R) { Namespace = std::string(R->getValueAsString("Namespace")); if (Namespace.empty()) return std::string(R->getName()); - return Namespace + "_" + R->getName().str(); + return StringRef(Namespace).upper() + "_" + R->getName().str(); } void PrinterCapstone::regInfoEmitRegClasses(