Using and Porting the GNU Compiler Collection (GCC)
The various expression codes are divided into several classes,
which are represented by single characters. You can determine the class
of an RTX code with the macro GET_RTX_CLASS (code).
Currently, `rtx.def' defines these classes:
o
REG) or a memory location (MEM, SYMBOL_REF).
Constants and basic transforms on objects (ADDRESSOF,
HIGH, LO_SUM) are also included. Note that SUBREG
and STRICT_LOW_PART are not in this class, but in class x.
<
NE or LT.
1
NEG,
NOT, or ABS. This category also includes value extension
(sign or zero) and conversions between integer and floating point.
c
PLUS or
AND. NE and EQ are comparisons, so they have class
<.
2
MINUS,
DIV, or ASHIFTRT.
b
ZERO_EXTRACT and SIGN_EXTRACT. These have three inputs
and are lvalues (so they can be used for insertion as well). See Bit Fields.
3
IF_THEN_ELSE.
i
INSN, JUMP_INSN, and
CALL_INSN. See Insns.
m
MATCH_DUP. These only occur in machine descriptions.
x
DEFINE_*, etc.). It also includes
all the codes describing side effects (SET, USE,
CLOBBER, etc.) and the non-insns that may appear on an insn
chain, such as NOTE, BARRIER, and CODE_LABEL.
For each expression type `rtl.def' specifies the number of
contained objects and their kinds, with four possibilities: `e' for
expression (actually a pointer to an expression), `i' for integer,
`w' for wide integer, `s' for string, and `E' for vector
of expressions. The sequence of letters for an expression code is
called its format. For example, the format of subreg is
`ei'.
A few other format characters are used occasionally:
u
u' is equivalent to `e' except that it is printed differently
in debugging dumps. It is used for pointers to insns.
n
n' is equivalent to `i' except that it is printed differently
in debugging dumps. It is used for the line number or code number of a
note insn.
S
S' indicates a string which is optional. In the RTL objects in
core, `S' is equivalent to `s', but when the object is read,
from an `md' file, the string value of this operand may be omitted.
An omitted string is taken to be the null string.
V
V' indicates a vector which is optional. In the RTL objects in
core, `V' is equivalent to `E', but when the object is read
from an `md' file, the vector value of this operand may be omitted.
An omitted vector is effectively the same as a vector of no elements.
0
0' means a slot whose contents do not fit any normal category.
`0' slots are not printed at all in dumps, and are often used in
special ways by small parts of the compiler.
There are macros to get the number of operands and the format of an expression code:
GET_RTX_LENGTH (code)
GET_RTX_FORMAT (code)
Some classes of RTX codes always have the same format. For example, it
is safe to assume that all comparison operations have format ee.
1
e.
<
c
2
ee.
b
3
eee.
i
iuueiee.
See Insns. Note that not all RTL objects linked onto an insn chain
are of class i.
o
m
x
Using and Porting the GNU Compiler Collection (GCC)
Packaging copyright © 1988-2000 OAR Corporation Context copyright by each document's author. See Free Software Foundation for information.