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, rtl.def defines these classes:
RTX_OBJ
REG
) or a memory location (MEM
, SYMBOL_REF
).
LO_SUM
) is also included; instead, SUBREG
and
STRICT_LOW_PART
are not in this class, but in class x
.
RTX_CONST_OBJ
HIGH
is also
included in this class.
RTX_COMPARE
GEU
or
LT
.
RTX_COMM_COMPARE
EQ
or ORDERED
.
RTX_UNARY
NEG
,
NOT
, or ABS
. This category also includes value extension
(sign or zero) and conversions between integer and floating point.
RTX_COMM_ARITH
PLUS
or
AND
. NE
and EQ
are comparisons, so they have class
<
.
RTX_BIN_ARITH
MINUS
,
DIV
, or ASHIFTRT
.
RTX_BITFIELD_OPS
ZERO_EXTRACT
and SIGN_EXTRACT
. These have three inputs
and are lvalues (so they can be used for insertion as well).
See Bit-Fields.
RTX_TERNARY
IF_THEN_ELSE
, VEC_MERGE
, SIGN_EXTRACT
,
ZERO_EXTRACT
, and FMA
.
RTX_INSN
INSN
, JUMP_INSN
, and
CALL_INSN
. See Insns.
RTX_MATCH
MATCH_DUP
. These only occur in machine descriptions.
RTX_AUTOINC
POST_INC
. ‘XEXP (x, 0)’ gives the auto-modified
register.
RTX_EXTRA
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
.
SUBREG
is also part of this class.
For each expression code, rtl.def specifies the number of
contained objects and their kinds using a sequence of characters
called the format of the expression code. For example,
the format of subreg
is ‘ei’.
These are the most commonly used format characters:
e
i
w
s
E
A few other format characters are used occasionally:
u
n
note
insn.
S
V
B
0
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