mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-27 14:34:58 +00:00
Make TableGen mangle operand method names before putting in enum.
The purpose of this patch is to allow PredicateMethods to be set to something like "isUImm<8>", calling a C++ template method to reduce code duplication. For this to work, the PredicateMethod must be mangled into a valid C++ identifier for insertion into an enum. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@172073 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2b8f6ae6b7
commit
88abcde3b4
@ -1658,6 +1658,16 @@ void MatchableInfo::buildAliasResultOperands() {
|
||||
}
|
||||
}
|
||||
|
||||
// Modify a string so that it is suitable for use as an enum tag.
|
||||
static std::string mangle(const std::string &Name) {
|
||||
std::string MangledName = Name;
|
||||
for (unsigned i = 0; i < MangledName.size(); ++i) {
|
||||
if (!isalnum(MangledName[i]) && MangledName[i] != '_')
|
||||
MangledName[i] = '_';
|
||||
}
|
||||
return MangledName;
|
||||
}
|
||||
|
||||
static unsigned getConverterOperandID(const std::string &Name,
|
||||
SetVector<std::string> &Table,
|
||||
bool &IsNew) {
|
||||
@ -1754,7 +1764,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
|
||||
// Remember this converter for the kind enum.
|
||||
unsigned KindID = OperandConversionKinds.size();
|
||||
OperandConversionKinds.insert("CVT_" + AsmMatchConverter);
|
||||
OperandConversionKinds.insert("CVT_" + mangle(AsmMatchConverter));
|
||||
|
||||
// Add the converter row for this instruction.
|
||||
ConversionTable.push_back(std::vector<uint8_t>());
|
||||
@ -1762,7 +1772,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
ConversionTable.back().push_back(CVT_Done);
|
||||
|
||||
// Add the handler to the conversion driver function.
|
||||
CvtOS << " case CVT_" << AsmMatchConverter << ":\n"
|
||||
CvtOS << " case CVT_" << mangle(AsmMatchConverter) << ":\n"
|
||||
<< " " << AsmMatchConverter << "(Inst, Operands);\n"
|
||||
<< " break;\n";
|
||||
|
||||
@ -1800,6 +1810,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
// the index of its entry in the vector).
|
||||
std::string Name = "CVT_" + (Op.Class->isRegisterClass() ? "Reg" :
|
||||
Op.Class->RenderMethod);
|
||||
Name = mangle(Name);
|
||||
|
||||
bool IsNewConverter = false;
|
||||
unsigned ID = getConverterOperandID(Name, OperandConversionKinds,
|
||||
|
Loading…
x
Reference in New Issue
Block a user