OSDN Git Service

[TableGen] AsmMatcher: allow repeated input operands
authorSjoerd Meijer <sjoerd.meijer@arm.com>
Thu, 30 May 2019 07:38:09 +0000 (07:38 +0000)
committerSjoerd Meijer <sjoerd.meijer@arm.com>
Thu, 30 May 2019 07:38:09 +0000 (07:38 +0000)
commitbef419a7786bf14a644daa3ef407d38a65cddaab
tree9274d00e5b956afa651034d3608db892343bbd6c
parent7b341dbecba5a5e0b71ce1acf30fd53cf26b1519
[TableGen] AsmMatcher: allow repeated input operands

If an assembly instruction has to mention an input operand name twice,
for example the MVE VMOV instruction that accesses two lanes of the
same vector by writing 'vmov r1, r2, q0[3], q0[1]', then the obvious
way to write its AsmString is to include the same operand (here $Qd)
twice. But this causes the AsmMatcher generator to omit that
instruction completely from the match table, on the basis that the
generator isn't clever enough to deal with the duplication.

But you need to have _some_ way of dealing with an instruction like
this - and in this case, where the mnemonic is shared with many other
instructions that the AsmMatcher does handle, it would be very painful
to take it out of the AsmMatcher system completely.

A nicer way is to add a custom AsmMatchConverter routine, and let that
deal with the problem if the autogenerated converter can't. But that
doesn't work, because TableGen leaves the instruction out of its table
_even_ if you provide a custom converter.

Solution: this change, which makes TableGen relax the restriction on
duplicated operands in the case where there's a custom converter.

Patch by: Simon Tatham

Differential Revision: https://reviews.llvm.org/D60695

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362066 91177308-0d34-0410-b5e6-96231b3b80d8
utils/TableGen/AsmMatcherEmitter.cpp