[llvm-dev] InstAlias with tied operands - can it be supported?

via llvm-dev llvm-dev at lists.llvm.org
Wed Jan 3 18:23:18 PST 2018


Hi Daniel,

I defined checkEarlyTargetMatchPredicate() to explicitly check for the 
tied operands, and it worked.

I could define an alias like: InstAlias<"oldOP $rd, $rd, $rs1", (NEWOP 
$rd, $rs1)>

However, I had to additionally change AsmMatcherEmitter 'Hack' variable 
setting to allow the repeated operand $rd in the AsmString.

Do you or anyone else know the history with this 'Hack' flag?

Thanks,
Ana.

diff --git a/utils/TableGen/AsmMatcherEmitter.cpp 
b/utils/TableGen/AsmMatcherEmitter.cpp
index 1a820a5..252fd51 100644
--- a/utils/TableGen/AsmMatcherEmitter.cpp
+++ b/utils/TableGen/AsmMatcherEmitter.cpp
@@ -1526,7 +1526,7 @@ void AsmMatcherInfo::buildInfo() {
        II->initialize(*this, SingletonRegisters, Variant, 
HasMnemonicFirst);

        // Validate the alias definitions.
-      II->validate(CommentDelimiter, false);
+      II->validate(CommentDelimiter, true);

        Matchables.push_back(std::move(II));
      }



On 2017-12-15 03:40, Daniel Sanders wrote:
> Hi,
> 
> On Instructions you can use checkEarlyTargetMatchPredicate() to check
> that the operands are the same. There's an example of that in
> MipsAsmParser.cpp for DATI and DAHI. I can't think of a reason
> TableGen couldn't be made to allow this for InstAlias too.
> 
>> On 15 Dec 2017, at 02:12, via llvm-dev <llvm-dev at lists.llvm.org> 
>> wrote:
>> 
>> Hello,
>> 
>> InstAlias does not allow tied operands (repeated operands) in the asm 
>> string to be matched.
>> 
>> It seems this situation is explicitly prevented in 
>> AsmMatcherEmitter.cpp:
>> 
>>   if  (!Hack)
>>        PrintFatalError(TheDef->getLoc(),
>>                        "ERROR: matchable with tied operand '" + Tok +
>>                        "' can never be matched!");
>>      // FIXME: Should reject these.  The ARM backend hits this with 
>> $lane in a
>>      // bunch of instructions.  It is unclear what the right answer 
>> is.
>>>> 
>> Is there a way to fix this limitation?
>> 
>> I would like to express: InstAlias<(opcode $rd, $rd, $rs1), (newopcode 
>> $rd, $rs1)>
>> 
>> Thank you,
>> Ana.
>> 
>> 
>> --
>> Ana Pazos
>> Qualcomm Innovation Center, Inc.
>> Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
>> a Linux Foundation Collaborative Project.
>> _______________________________________________
>> LLVM Developers mailing list
>> llvm-dev at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-dev

-- 
Ana Pazos
Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project.


More information about the llvm-dev mailing list