OSDN Git Service

[TableGen:AsmWriter] Cope with consecutive tied operands.
authorSimon Tatham <simon.tatham@arm.com>
Fri, 14 Dec 2018 11:39:55 +0000 (11:39 +0000)
committerSimon Tatham <simon.tatham@arm.com>
Fri, 14 Dec 2018 11:39:55 +0000 (11:39 +0000)
commitc25292edd5cedd5aff7fce9150265038fcca83ac
treed0547470299380e781e1b08714a86e066df4af7c
parenta32130ae3885bc845496262e7186bef9c83f871a
[TableGen:AsmWriter] Cope with consecutive tied operands.

When you define an instruction alias as a subclass of InstAlias, you
specify all the MC operands for the instruction it expands to, except
for operands that are tied to a previous one, which you leave out in
the expectation that the Tablegen output code will fill them in
automatically.

But the code in Tablegen's AsmWriter backend that skips over a tied
operand was doing it using 'if' instead of 'while', because it wasn't
expecting to find two tied operands in sequence.

So if an instruction updates a pair of registers in place, so that its
MC representation has two input operands tied to the output ones (for
example, Arm's UMLAL instruction), then any alias which wants to
expand to a special case of that instruction is likely to fail to
match, because the indices of subsequent operands will be off by one
in the generated printAliasInstr function.

This patch re-indents some existing code, so it's clearest when
viewed as a diff with whitespace changes ignored.

Reviewers: fhahn, rengolin, sdesmalen, atanasyan, asb, jholewinski, t.p.northover, kparzysz, craig.topper, stoklund

Reviewed By: rengolin

Subscribers: javed.absar, kristof.beyls, llvm-commits

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

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