mirror of
https://github.com/RPCSX/llvm.git
synced 2024-11-28 22:20:37 +00:00
AsmMatcherEmitter: Add an option to override custom converters for InstAlias
If there is an InstAlias defined for an instruction that had a custom converter (AsmMatchConverter), then when the alias is matched, the custom converter will be used rather than the converter generated by the InstAlias. This patch adds the UseInstAsmMatchConverter field to the InstAlias class, which allows you to override this behavior and force the converter generated by the InstAlias to be used. This is required for some future improvemnts to the R600 assembler. Differential Revision: http://reviews.llvm.org/D9083 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238210 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b14ebd6a1d
commit
75775939fa
@ -1006,6 +1006,15 @@ class InstAlias<string Asm, dag Result, int Emit = 1> {
|
||||
|
||||
// Predicates - Predicates that must be true for this to match.
|
||||
list<Predicate> Predicates = [];
|
||||
|
||||
// If the instruction specified in Result has defined an AsmMatchConverter
|
||||
// then setting this to 1 will cause the alias to use the AsmMatchConverter
|
||||
// function when converting the OperandVector into an MCInst instead of the
|
||||
// function that is generated by the dag Result.
|
||||
// Setting this to 0 will cause the alias to ignore the Result instruction's
|
||||
// defined AsmMatchConverter and instead use the function generated by the
|
||||
// dag Result.
|
||||
bit UseInstAsmMatchConverter = 1;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -438,12 +438,21 @@ struct MatchableInfo {
|
||||
/// If this instruction is deprecated in some form.
|
||||
bool HasDeprecation;
|
||||
|
||||
/// If this is an alias, this is use to determine whether or not to using
|
||||
/// the conversion function defined by the instruction's AsmMatchConverter
|
||||
/// or to use the function generated by the alias.
|
||||
bool UseInstAsmMatchConverter;
|
||||
|
||||
MatchableInfo(const CodeGenInstruction &CGI)
|
||||
: AsmVariantID(0), AsmString(CGI.AsmString), TheDef(CGI.TheDef), DefRec(&CGI) {
|
||||
: AsmVariantID(0), AsmString(CGI.AsmString), TheDef(CGI.TheDef), DefRec(&CGI),
|
||||
UseInstAsmMatchConverter(true) {
|
||||
}
|
||||
|
||||
MatchableInfo(std::unique_ptr<const CodeGenInstAlias> Alias)
|
||||
: AsmVariantID(0), AsmString(Alias->AsmString), TheDef(Alias->TheDef), DefRec(Alias.release()) {
|
||||
: AsmVariantID(0), AsmString(Alias->AsmString), TheDef(Alias->TheDef),
|
||||
DefRec(Alias.release()),
|
||||
UseInstAsmMatchConverter(
|
||||
TheDef->getValueAsBit("UseInstAsmMatchConverter")) {
|
||||
}
|
||||
|
||||
~MatchableInfo() {
|
||||
@ -1749,7 +1758,7 @@ static void emitConvertFuncs(CodeGenTarget &Target, StringRef ClassName,
|
||||
// Check if we have a custom match function.
|
||||
std::string AsmMatchConverter =
|
||||
II->getResultInst()->TheDef->getValueAsString("AsmMatchConverter");
|
||||
if (!AsmMatchConverter.empty()) {
|
||||
if (!AsmMatchConverter.empty() && II->UseInstAsmMatchConverter) {
|
||||
std::string Signature = "ConvertCustom_" + AsmMatchConverter;
|
||||
II->ConversionFnKind = Signature;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user