[PATCH] Allow ParserMatchClass attribute on RegisterClass
Jakob Stoklund Olesen
stoklund at 2pi.dk
Thu Mar 28 10:03:43 PDT 2013
On Mar 28, 2013, at 9:42 AM, Ulrich Weigand <ulrich.weigand at de.ibm.com> wrote:
> The problem intended to be solved by this patch is a peculiarity of the
> PowerPC assembler format. The general "flow" of the assembler parser on
> other platforms is that common code will first attempt to classify all
> instruction operands into categories like "Register of class X",
> "Immediate", or "Memory address", and *then* go into the instruction table
> using the opcode and list of operand types to select the matching pattern.
> This approach assumes that you *can* classify operands by just looking at
> them in isolation. Unfortunately this is not true on PowerPC, since
> registers are specified in assembler source simply by their numbers, making
> them indistinguishable from small immediates. For example, the "3" in "add
> 1, 2, 3" refers to a register while the "3" in "addi 1, 2, 3" refers to the
> immediate value. This means that basically the whole generic mechanism of
> classifying operands into register classes does not work, and we need to
> instead define back-end matchers for all the register classes.
>
> This would be possible without common code changes by using RegisterOperand
> classes to specify a ParserMatchClass -- but this means that every instance
> of a register class in the .td files must be replaced by the corresponding
> RegisterOperand class, which seems a bit unnecessary to me, and may cause
> future maintainability hassles. I'd propose to instead allow specifying a
> ParserMatchClass directly on the RegisterClass itself, which can be done by
> a minor TableGen change as implemented by this patch.
Actually, I think I would prefer the RegisterOperand solution.
As we add new targets, it is becoming clearer that a register class is often insufficient for describing register operands, and I think it is healthy to separate the concepts.
/jakob
More information about the llvm-commits
mailing list