[PATCH] TableGen: AsmMatcherEmitter: Don't use custom converters for instruction aliases
Ahmed Bougacha
ahmed.bougacha at gmail.com
Mon Apr 27 16:10:05 PDT 2015
In http://reviews.llvm.org/D9083#161473, @tstellarAMD wrote:
> In http://reviews.llvm.org/D9083#161432, @ab wrote:
>
> > I can see this being useful, but I don't know these parts very well, so, just to make sure I understand this correctly: someone might need to have an InstAlias-specific AsmMatchConverter, someday, right? And they could restore the current behavior - which I can see being useful as well - by setting that to the same converter as the aliasee? Also, when you say the "converter supplied with the alias", that would be the tblgen-erated converter, right?
> >
> > If that makes no sense, I'm not qualified to review; if it does, LGTM ;)
>
>
> I think I understand what you are saying about an InstAlias-specific AsmMatchConverter, but let me explain the issue to make sure we are both on the same page.
>
> There are three ways to specify an AsmMatchConverter (the function that converts from OperandVector to MCInst):
>
> 1. Do nothing, tablegen will generate one for you.
> 2. Set Instruction::AsmMatchConverter to the name of a function (e.g. cvtFoo) and then implement that function in your target's AsmParser
> 3. Define an InstAlias, which will cause TableGen to generate a custom AsmMatchConverter based on the InstAlias.
>
> This patch attempts to fix what I consider to be a bug, which is that if you do #2, then you can never use that instruction in an InstAlias, because TableGen will generate a call to your custom AsmMatchConverter (e.g. cvtFoo) rather than to the AsmMatchConverter that is generated based on the InstAlias.
Agreed.
> In your comment, you point out the fact that someone may want to use the custom AsmMatchConverter (e.g. cvtFoo) for an InstAlias. I had originally thought this would never be useful, but after reconsidering, I think it would potentially be useful in the case where you have an InstAlias where the mnemonic and MCInst are different e.g.
>
> InstAlias <(shl $dst, $src0, 1), (mul GPR:$dst, GPR:$src0, 2)>;
Yep, I had something like that in mind. I don't think you need to implement it though, since it would be untestable/untested; you decide!
-Ahmed
> So, it turns out you are qualified to review the patch ;)
>
> I think the correct solution would be to add a bit to the InstAlias class that is used to determine which AsmMatchConverter to use (#2 or #3). I will make that change to this patch.
REPOSITORY
rL LLVM
http://reviews.llvm.org/D9083
EMAIL PREFERENCES
http://reviews.llvm.org/settings/panel/emailpreferences/
More information about the llvm-commits
mailing list