via llvm-dev
2017-Dec-15 02:12 UTC
[llvm-dev] InstAlias with tied operands - can it be supported?
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.
Daniel Sanders via llvm-dev
2017-Dec-15 11:40 UTC
[llvm-dev] InstAlias with tied operands - can it be supported?
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
via llvm-dev
2018-Jan-04 02:23 UTC
[llvm-dev] InstAlias with tied operands - can it be supported?
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.
Reasonably Related Threads
- InstAlias with tied operands - can it be supported?
- InstAlias with tied operands - can it be supported?
- TableGen change in LLVM 3.9 allows only prefix instruction notation
- [LLVMdev] Hexagon Assembly parser question
- [LLVMdev] Hexagon Assembly parser question