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.