Fix cut and paste error in last change
[official-gcc.git] / gcc / rtl.texi
blob0bd9f0c46690927e8aec584c4f870dc1974e681e
1 @c Copyright (C) 1988, 89, 92, 94, 97, 1998, 1999, 2000 Free Software Foundation, Inc.
2 @c This is part of the GCC manual.
3 @c For copying conditions, see the file gcc.texi.
5 @node RTL
6 @chapter RTL Representation
7 @cindex RTL representation
8 @cindex representation of RTL
9 @cindex Register Transfer Language (RTL)
11 Most of the work of the compiler is done on an intermediate representation
12 called register transfer language.  In this language, the instructions to be
13 output are described, pretty much one by one, in an algebraic form that
14 describes what the instruction does.
16 RTL is inspired by Lisp lists.  It has both an internal form, made up of
17 structures that point at other structures, and a textual form that is used
18 in the machine description and in printed debugging dumps.  The textual
19 form uses nested parentheses to indicate the pointers in the internal form.
21 @menu
22 * RTL Objects::       Expressions vs vectors vs strings vs integers.
23 * RTL Classes::       Categories of RTL expresion objects, and their structure.
24 * Accessors::         Macros to access expression operands or vector elts.
25 * Flags::             Other flags in an RTL expression.
26 * Machine Modes::     Describing the size and format of a datum.
27 * Constants::         Expressions with constant values.
28 * Regs and Memory::   Expressions representing register contents or memory.
29 * Arithmetic::        Expressions representing arithmetic on other expressions.
30 * Comparisons::       Expressions representing comparison of expressions.
31 * Bit Fields::        Expressions representing bitfields in memory or reg.
32 * Vector Operations:: Expressions involving vector datatypes.
33 * Conversions::       Extending, truncating, floating or fixing.
34 * RTL Declarations::  Declaring volatility, constancy, etc.
35 * Side Effects::      Expressions for storing in registers, etc.
36 * Incdec::            Embedded side-effects for autoincrement addressing.
37 * Assembler::         Representing @code{asm} with operands.
38 * Insns::             Expression types for entire insns.
39 * Calls::             RTL representation of function call insns.
40 * Sharing::           Some expressions are unique; others *must* be copied.
41 * Reading RTL::       Reading textual RTL from a file.
42 @end menu
44 @node RTL Objects
45 @section RTL Object Types
46 @cindex RTL object types
48 @cindex RTL integers
49 @cindex RTL strings
50 @cindex RTL vectors
51 @cindex RTL expression
52 @cindex RTX (See RTL)
53 RTL uses five kinds of objects: expressions, integers, wide integers,
54 strings and vectors.  Expressions are the most important ones.  An RTL
55 expression (``RTX'', for short) is a C structure, but it is usually
56 referred to with a pointer; a type that is given the typedef name
57 @code{rtx}.
59 An integer is simply an @code{int}; their written form uses decimal digits.
60 A wide integer is an integral object whose type is @code{HOST_WIDE_INT}
61 (@pxref{Config}); their written form uses decimal digits.
63 A string is a sequence of characters.  In core it is represented as a
64 @code{char *} in usual C fashion, and it is written in C syntax as well.
65 However, strings in RTL may never be null.  If you write an empty string in
66 a machine description, it is represented in core as a null pointer rather
67 than as a pointer to a null character.  In certain contexts, these null
68 pointers instead of strings are valid.  Within RTL code, strings are most
69 commonly found inside @code{symbol_ref} expressions, but they appear in
70 other contexts in the RTL expressions that make up machine descriptions.  
72 A vector contains an arbitrary number of pointers to expressions.  The
73 number of elements in the vector is explicitly present in the vector.
74 The written form of a vector consists of square brackets
75 (@samp{[@dots{}]}) surrounding the elements, in sequence and with
76 whitespace separating them.  Vectors of length zero are not created;
77 null pointers are used instead.
79 @cindex expression codes
80 @cindex codes, RTL expression
81 @findex GET_CODE
82 @findex PUT_CODE
83 Expressions are classified by @dfn{expression codes} (also called RTX
84 codes).  The expression code is a name defined in @file{rtl.def}, which is
85 also (in upper case) a C enumeration constant.  The possible expression
86 codes and their meanings are machine-independent.  The code of an RTX can
87 be extracted with the macro @code{GET_CODE (@var{x})} and altered with
88 @code{PUT_CODE (@var{x}, @var{newcode})}.
90 The expression code determines how many operands the expression contains,
91 and what kinds of objects they are.  In RTL, unlike Lisp, you cannot tell
92 by looking at an operand what kind of object it is.  Instead, you must know
93 from its context---from the expression code of the containing expression.
94 For example, in an expression of code @code{subreg}, the first operand is
95 to be regarded as an expression and the second operand as an integer.  In
96 an expression of code @code{plus}, there are two operands, both of which
97 are to be regarded as expressions.  In a @code{symbol_ref} expression,
98 there is one operand, which is to be regarded as a string.
100 Expressions are written as parentheses containing the name of the
101 expression type, its flags and machine mode if any, and then the operands
102 of the expression (separated by spaces).
104 Expression code names in the @samp{md} file are written in lower case,
105 but when they appear in C code they are written in upper case.  In this
106 manual, they are shown as follows: @code{const_int}.
108 @cindex (nil)
109 @cindex nil
110 In a few contexts a null pointer is valid where an expression is normally
111 wanted.  The written form of this is @code{(nil)}.
113 @node RTL Classes
114 @section RTL Classes and Formats
115 @cindex RTL classes
116 @cindex classes of RTX codes
117 @cindex RTX codes, classes of
118 @findex GET_RTX_CLASS
120 The various expression codes are divided into several @dfn{classes},
121 which are represented by single characters.  You can determine the class
122 of an RTX code with the macro @code{GET_RTX_CLASS (@var{code})}.
123 Currently, @file{rtx.def} defines these classes:
125 @table @code
126 @item o
127 An RTX code that represents an actual object, such as a register
128 (@code{REG}) or a memory location (@code{MEM}, @code{SYMBOL_REF}).
129 Constants and basic transforms on objects (@code{ADDRESSOF},
130 @code{HIGH}, @code{LO_SUM}) are also included.  Note that @code{SUBREG}
131 and @code{STRICT_LOW_PART} are not in this class, but in class @code{x}.
133 @item <
134 An RTX code for a comparison, such as @code{NE} or @code{LT}.
136 @item 1
137 An RTX code for a unary arithmetic operation, such as @code{NEG},
138 @code{NOT}, or @code{ABS}.  This category also includes value extension
139 (sign or zero) and conversions between integer and floating point.
141 @item c
142 An RTX code for a commutative binary operation, such as @code{PLUS} or
143 @code{AND}.  @code{NE} and @code{EQ} are comparisons, so they have class
144 @code{<}.
146 @item 2
147 An RTX code for a non-commutative binary operation, such as @code{MINUS},
148 @code{DIV}, or @code{ASHIFTRT}.
150 @item b
151 An RTX code for a bitfield operation.  Currently only
152 @code{ZERO_EXTRACT} and @code{SIGN_EXTRACT}.  These have three inputs
153 and are lvalues (so they can be used for insertion as well).  @xref{Bit
154 Fields}.
156 @item 3
157 An RTX code for other three input operations.  Currently only
158 @code{IF_THEN_ELSE}.
160 @item i
161 An RTX code for an entire instruction:  @code{INSN}, @code{JUMP_INSN}, and
162 @code{CALL_INSN}. @xref{Insns}.
164 @item m
165 An RTX code for something that matches in insns, such as
166 @code{MATCH_DUP}.  These only occur in machine descriptions.
168 @item x
169 All other RTX codes.  This category includes the remaining codes used
170 only in machine descriptions (@code{DEFINE_*}, etc.).  It also includes
171 all the codes describing side effects (@code{SET}, @code{USE},
172 @code{CLOBBER}, etc.) and the non-insns that may appear on an insn
173 chain, such as @code{NOTE}, @code{BARRIER}, and @code{CODE_LABEL}.
174 @end table
176 @cindex RTL format
177 For each expression type @file{rtl.def} specifies the number of
178 contained objects and their kinds, with four possibilities: @samp{e} for
179 expression (actually a pointer to an expression), @samp{i} for integer,
180 @samp{w} for wide integer, @samp{s} for string, and @samp{E} for vector
181 of expressions.  The sequence of letters for an expression code is
182 called its @dfn{format}.  For example, the format of @code{subreg} is
183 @samp{ei}.@refill
185 @cindex RTL format characters
186 A few other format characters are used occasionally:
188 @table @code
189 @item u
190 @samp{u} is equivalent to @samp{e} except that it is printed differently
191 in debugging dumps.  It is used for pointers to insns.
193 @item n
194 @samp{n} is equivalent to @samp{i} except that it is printed differently
195 in debugging dumps.  It is used for the line number or code number of a
196 @code{note} insn.
198 @item S
199 @samp{S} indicates a string which is optional.  In the RTL objects in
200 core, @samp{S} is equivalent to @samp{s}, but when the object is read,
201 from an @samp{md} file, the string value of this operand may be omitted.
202 An omitted string is taken to be the null string.
204 @item V
205 @samp{V} indicates a vector which is optional.  In the RTL objects in
206 core, @samp{V} is equivalent to @samp{E}, but when the object is read
207 from an @samp{md} file, the vector value of this operand may be omitted.
208 An omitted vector is effectively the same as a vector of no elements.
210 @item 0
211 @samp{0} means a slot whose contents do not fit any normal category.
212 @samp{0} slots are not printed at all in dumps, and are often used in
213 special ways by small parts of the compiler.
214 @end table
216 There are macros to get the number of operands and the format
217 of an expression code:
219 @table @code
220 @findex GET_RTX_LENGTH
221 @item GET_RTX_LENGTH (@var{code})
222 Number of operands of an RTX of code @var{code}.
224 @findex GET_RTX_FORMAT
225 @item GET_RTX_FORMAT (@var{code})
226 The format of an RTX of code @var{code}, as a C string.
227 @end table
229 Some classes of RTX codes always have the same format.  For example, it
230 is safe to assume that all comparison operations have format @code{ee}.
232 @table @code
233 @item 1
234 All codes of this class have format @code{e}.
236 @item <
237 @itemx c
238 @itemx 2
239 All codes of these classes have format @code{ee}.
241 @item b
242 @itemx 3
243 All codes of these classes have format @code{eee}.
245 @item i
246 All codes of this class have formats that begin with @code{iuueiee}.
247 @xref{Insns}.  Note that not all RTL objects linked onto an insn chain
248 are of class @code{i}.
250 @item o
251 @itemx m
252 @itemx x
253 You can make no assumptions about the format of these codes.
254 @end table
256 @node Accessors
257 @section Access to Operands
258 @cindex accessors
259 @cindex access to operands
260 @cindex operand access
262 @findex XEXP
263 @findex XINT
264 @findex XWINT
265 @findex XSTR
266 Operands of expressions are accessed using the macros @code{XEXP},
267 @code{XINT}, @code{XWINT} and @code{XSTR}.  Each of these macros takes
268 two arguments: an expression-pointer (RTX) and an operand number
269 (counting from zero).  Thus,@refill
271 @example
272 XEXP (@var{x}, 2)
273 @end example
275 @noindent
276 accesses operand 2 of expression @var{x}, as an expression.
278 @example
279 XINT (@var{x}, 2)
280 @end example
282 @noindent
283 accesses the same operand as an integer.  @code{XSTR}, used in the same
284 fashion, would access it as a string.
286 Any operand can be accessed as an integer, as an expression or as a string.
287 You must choose the correct method of access for the kind of value actually
288 stored in the operand.  You would do this based on the expression code of
289 the containing expression.  That is also how you would know how many
290 operands there are.
292 For example, if @var{x} is a @code{subreg} expression, you know that it has
293 two operands which can be correctly accessed as @code{XEXP (@var{x}, 0)}
294 and @code{XINT (@var{x}, 1)}.  If you did @code{XINT (@var{x}, 0)}, you
295 would get the address of the expression operand but cast as an integer;
296 that might occasionally be useful, but it would be cleaner to write
297 @code{(int) XEXP (@var{x}, 0)}.  @code{XEXP (@var{x}, 1)} would also
298 compile without error, and would return the second, integer operand cast as
299 an expression pointer, which would probably result in a crash when
300 accessed.  Nothing stops you from writing @code{XEXP (@var{x}, 28)} either,
301 but this will access memory past the end of the expression with
302 unpredictable results.@refill
304 Access to operands which are vectors is more complicated.  You can use the
305 macro @code{XVEC} to get the vector-pointer itself, or the macros
306 @code{XVECEXP} and @code{XVECLEN} to access the elements and length of a
307 vector.
309 @table @code
310 @findex XVEC
311 @item XVEC (@var{exp}, @var{idx})
312 Access the vector-pointer which is operand number @var{idx} in @var{exp}.
314 @findex XVECLEN
315 @item XVECLEN (@var{exp}, @var{idx})
316 Access the length (number of elements) in the vector which is
317 in operand number @var{idx} in @var{exp}.  This value is an @code{int}.
319 @findex XVECEXP
320 @item XVECEXP (@var{exp}, @var{idx}, @var{eltnum})
321 Access element number @var{eltnum} in the vector which is
322 in operand number @var{idx} in @var{exp}.  This value is an RTX.
324 It is up to you to make sure that @var{eltnum} is not negative
325 and is less than @code{XVECLEN (@var{exp}, @var{idx})}.
326 @end table
328 All the macros defined in this section expand into lvalues and therefore
329 can be used to assign the operands, lengths and vector elements as well as
330 to access them.
332 @node Flags
333 @section Flags in an RTL Expression
334 @cindex flags in RTL expression
336 RTL expressions contain several flags (one-bit bitfields) and other
337 values that are used in certain types of expression.  Most often they
338 are accessed with the following macros:
340 @table @code
341 @findex MEM_VOLATILE_P
342 @cindex @code{mem} and @samp{/v}
343 @cindex @code{volatil}, in @code{mem}
344 @cindex @samp{/v} in RTL dump
345 @item MEM_VOLATILE_P (@var{x})
346 In @code{mem} expressions, nonzero for volatile memory references.
347 Stored in the @code{volatil} field and printed as @samp{/v}.
349 @findex MEM_IN_STRUCT_P
350 @cindex @code{mem} and @samp{/s}
351 @cindex @code{in_struct}, in @code{mem}
352 @cindex @samp{/s} in RTL dump
353 @item MEM_IN_STRUCT_P (@var{x})
354 In @code{mem} expressions, nonzero for reference to an entire structure,
355 union or array, or to a component of one.  Zero for references to a
356 scalar variable or through a pointer to a scalar.  Stored in the
357 @code{in_struct} field and printed as @samp{/s}.  If both this flag and
358 MEM_SCALAR_P are clear, then we don't know whether this MEM is in a
359 structure or not.  Both flags should never be simultaneously set.
361 @findex MEM_SCALAR_P
362 @cindex @code{mem} and @samp{/f}
363 @cindex @code{frame_related}, in@code{mem}
364 @cindex @samp{/f} in RTL dump
365 @item MEM_SCALAR_P (@var{x})
366 In @code{mem} expressions, nonzero for reference to a scalar known not
367 to be a member of a structure, union, or array.  Zero for such
368 references and for indirections through pointers, even pointers pointing
369 to scalar types.  If both this flag and MEM_STRUCT_P are clear, then we
370 don't know whether this MEM is in a structure or not.  Both flags should
371 never be simultaneously set.
373 @findex MEM_ALIAS_SET
374 @item MEM_ALIAS_SET (@var{x})
375 In @code{mem} expressions, the alias set to which @var{x} belongs.  If
376 zero, @var{x} is not in any alias set, and may alias anything.  If
377 nonzero, @var{x} may only alias objects in the same alias set.  This
378 value is set (in a language-specific manner) by the front-end.  This
379 field is not a bit-field; it is in an integer, found as the second
380 argument to the @code{mem}.
382 @findex REG_LOOP_TEST_P
383 @cindex @code{reg} and @samp{/s}
384 @cindex @code{in_struct}, in @code{reg}
385 @item REG_LOOP_TEST_P
386 In @code{reg} expressions, nonzero if this register's entire life is
387 contained in the exit test code for some loop.  Stored in the
388 @code{in_struct} field and printed as @samp{/s}.
390 @findex REG_USERVAR_P 
391 @cindex @code{reg} and @samp{/v}
392 @cindex @code{volatil}, in @code{reg}
393 @item REG_USERVAR_P (@var{x})
394 In a @code{reg}, nonzero if it corresponds to a variable present in
395 the user's source code.  Zero for temporaries generated internally by
396 the compiler.  Stored in the @code{volatil} field and printed as
397 @samp{/v}.
399 @cindex @samp{/i} in RTL dump
400 @findex REG_FUNCTION_VALUE_P 
401 @cindex @code{reg} and @samp{/i}
402 @cindex @code{integrated}, in @code{reg}
403 @item REG_FUNCTION_VALUE_P (@var{x})
404 Nonzero in a @code{reg} if it is the place in which this function's
405 value is going to be returned.  (This happens only in a hard
406 register.)  Stored in the @code{integrated} field and printed as
407 @samp{/i}.
409 The same hard register may be used also for collecting the values of
410 functions called by this one, but @code{REG_FUNCTION_VALUE_P} is zero
411 in this kind of use.
413 @findex SUBREG_PROMOTED_VAR_P
414 @cindex @code{subreg} and @samp{/s}
415 @cindex @code{in_struct}, in @code{subreg}
416 @item SUBREG_PROMOTED_VAR_P
417 Nonzero in a @code{subreg} if it was made when accessing an object that
418 was promoted to a wider mode in accord with the @code{PROMOTED_MODE} machine
419 description macro (@pxref{Storage Layout}).  In this case, the mode of
420 the @code{subreg} is the declared mode of the object and the mode of
421 @code{SUBREG_REG} is the mode of the register that holds the object.
422 Promoted variables are always either sign- or zero-extended to the wider
423 mode on every assignment.  Stored in the @code{in_struct} field and
424 printed as @samp{/s}.
426 @findex SUBREG_PROMOTED_UNSIGNED_P
427 @cindex @code{subreg} and @samp{/u}
428 @cindex @code{unchanging}, in @code{subreg}
429 @item SUBREG_PROMOTED_UNSIGNED_P
430 Nonzero in a @code{subreg} that has @code{SUBREG_PROMOTED_VAR_P} nonzero
431 if the object being referenced is kept zero-extended and zero if it
432 is kept sign-extended.  Stored in the @code{unchanging} field and
433 printed as @samp{/u}.
435 @findex RTX_UNCHANGING_P 
436 @cindex @code{reg} and @samp{/u}
437 @cindex @code{mem} and @samp{/u}
438 @cindex @code{unchanging}, in @code{reg} and @code{mem}
439 @cindex @samp{/u} in RTL dump
440 @item RTX_UNCHANGING_P (@var{x})
441 Nonzero in a @code{reg} or @code{mem} if the value is not changed.
442 (This flag is not set for memory references via pointers to constants.
443 Such pointers only guarantee that the object will not be changed
444 explicitly by the current function.  The object might be changed by
445 other functions or by aliasing.)  Stored in the
446 @code{unchanging} field and printed as @samp{/u}.
448 @findex RTX_INTEGRATED_P 
449 @cindex @code{integrated}, in @code{insn}
450 @item RTX_INTEGRATED_P (@var{insn})
451 Nonzero in an insn if it resulted from an in-line function call.
452 Stored in the @code{integrated} field and printed as @samp{/i}.
454 @findex RTX_FRAME_RELATED_P
455 @item RTX_FRAME_RELATED_P (@var{x})
456 Nonzero in an insn or expression which is part of a function
457 prologue and sets the stack pointer, sets the frame pointer, or saves a 
458 register. This flag is required for exception handling support
459 on targets with RTL prologues.
461 @findex SYMBOL_REF_USED
462 @cindex @code{used}, in @code{symbol_ref}
463 @item SYMBOL_REF_USED (@var{x})
464 In a @code{symbol_ref}, indicates that @var{x} has been used.  This is
465 normally only used to ensure that @var{x} is only declared external
466 once.  Stored in the @code{used} field.
468 @findex SYMBOL_REF_FLAG
469 @cindex @code{symbol_ref} and @samp{/v}
470 @cindex @code{volatil}, in @code{symbol_ref}
471 @item SYMBOL_REF_FLAG (@var{x})
472 In a @code{symbol_ref}, this is used as a flag for machine-specific purposes.
473 Stored in the @code{volatil} field and printed as @samp{/v}.
475 @findex LABEL_OUTSIDE_LOOP_P
476 @cindex @code{label_ref} and @samp{/s}
477 @cindex @code{in_struct}, in @code{label_ref}
478 @item LABEL_OUTSIDE_LOOP_P
479 In @code{label_ref} expressions, nonzero if this is a reference to a
480 label that is outside the innermost loop containing the reference to the
481 label.  Stored in the @code{in_struct} field and printed as @samp{/s}.
483 @findex INSN_DELETED_P 
484 @cindex @code{volatil}, in @code{insn}
485 @item INSN_DELETED_P (@var{insn})
486 In an insn, nonzero if the insn has been deleted.  Stored in the
487 @code{volatil} field and printed as @samp{/v}.
489 @findex INSN_ANNULLED_BRANCH_P
490 @cindex @code{insn} and @samp{/u}
491 @cindex @code{unchanging}, in @code{insn}
492 @item INSN_ANNULLED_BRANCH_P (@var{insn})
493 In an @code{insn} in the delay slot of a branch insn, indicates that an
494 annulling branch should be used.  See the discussion under
495 @code{sequence} below.  Stored in the @code{unchanging} field and printed
496 as @samp{/u}.
498 @findex INSN_FROM_TARGET_P
499 @cindex @code{insn} and @samp{/s}
500 @cindex @code{in_struct}, in @code{insn}
501 @cindex @samp{/s} in RTL dump
502 @item INSN_FROM_TARGET_P (@var{insn})
503 In an @code{insn} in a delay slot of a branch, indicates that the insn
504 is from the target of the branch.  If the branch insn has
505 @code{INSN_ANNULLED_BRANCH_P} set, this insn will only be executed if
506 the branch is taken.  For annulled branches with
507 @code{INSN_FROM_TARGET_P} clear, the insn will be executed only if the
508 branch is not taken.  When @code{INSN_ANNULLED_BRANCH_P} is not set,
509 this insn will always be executed.  Stored in the @code{in_struct}
510 field and printed as @samp{/s}.
512 @findex CONSTANT_POOL_ADDRESS_P 
513 @cindex @code{symbol_ref} and @samp{/u}
514 @cindex @code{unchanging}, in @code{symbol_ref}
515 @item CONSTANT_POOL_ADDRESS_P (@var{x})
516 Nonzero in a @code{symbol_ref} if it refers to part of the current
517 function's ``constants pool''.  These are addresses close to the
518 beginning of the function, and GNU CC assumes they can be addressed
519 directly (perhaps with the help of base registers).  Stored in the
520 @code{unchanging} field and printed as @samp{/u}.
522 @findex CONST_CALL_P
523 @cindex @code{call_insn} and @samp{/u}
524 @cindex @code{unchanging}, in @code{call_insn}
525 @item CONST_CALL_P (@var{x})
526 In a @code{call_insn}, indicates that the insn represents a call to a const
527 function.  Stored in the @code{unchanging} field and printed as @samp{/u}.
529 @findex LABEL_PRESERVE_P
530 @cindex @code{code_label} and @samp{/i}
531 @cindex @code{in_struct}, in @code{code_label}
532 @item LABEL_PRESERVE_P (@var{x})
533 In a @code{code_label}, indicates that the label can never be deleted.
534 Labels referenced by a non-local goto will have this bit set.  Stored
535 in the @code{in_struct} field and printed as @samp{/s}.
537 @findex SCHED_GROUP_P
538 @cindex @code{insn} and @samp{/i}
539 @cindex @code{in_struct}, in @code{insn}
540 @item SCHED_GROUP_P (@var{insn})
541 During instruction scheduling, in an insn, indicates that the previous insn
542 must be scheduled together with this insn.  This is used to ensure that
543 certain groups of instructions will not be split up by the instruction
544 scheduling pass, for example, @code{use} insns before a @code{call_insn} may
545 not be separated from the @code{call_insn}.  Stored in the @code{in_struct}
546 field and printed as @samp{/s}.
547 @end table
549 These are the fields which the above macros refer to:
551 @table @code
552 @findex used
553 @item used
554 Normally, this flag is used only momentarily, at the end of RTL
555 generation for a function, to count the number of times an expression
556 appears in insns.  Expressions that appear more than once are copied,
557 according to the rules for shared structure (@pxref{Sharing}).
559 In a @code{symbol_ref}, it indicates that an external declaration for
560 the symbol has already been written.
562 In a @code{reg}, it is used by the leaf register renumbering code to ensure
563 that each register is only renumbered once.
565 @findex volatil
566 @item volatil
567 This flag is used in @code{mem}, @code{symbol_ref} and @code{reg}
568 expressions and in insns.  In RTL dump files, it is printed as
569 @samp{/v}.
571 @cindex volatile memory references
572 In a @code{mem} expression, it is 1 if the memory reference is volatile.
573 Volatile memory references may not be deleted, reordered or combined.
575 In a @code{symbol_ref} expression, it is used for machine-specific 
576 purposes.
578 In a @code{reg} expression, it is 1 if the value is a user-level variable.
579 0 indicates an internal compiler temporary.
581 In an insn, 1 means the insn has been deleted.
583 @findex in_struct
584 @item in_struct
585 In @code{mem} expressions, it is 1 if the memory datum referred to is
586 all or part of a structure or array; 0 if it is (or might be) a scalar
587 variable.  A reference through a C pointer has 0 because the pointer
588 might point to a scalar variable.  This information allows the compiler
589 to determine something about possible cases of aliasing.
591 In an insn in the delay slot of a branch, 1 means that this insn is from
592 the target of the branch.
594 During instruction scheduling, in an insn, 1 means that this insn must be
595 scheduled as part of a group together with the previous insn.
597 In @code{reg} expressions, it is 1 if the register has its entire life
598 contained within the test expression of some loop.
600 In @code{subreg} expressions, 1 means that the @code{subreg} is accessing
601 an object that has had its mode promoted from a wider mode.
603 In @code{label_ref} expressions, 1 means that the referenced label is
604 outside the innermost loop containing the insn in which the @code{label_ref}
605 was found.
607 In @code{code_label} expressions, it is 1 if the label may never be deleted.
608 This is used for labels which are the target of non-local gotos.
610 In an RTL dump, this flag is represented as @samp{/s}.
612 @findex unchanging
613 @item unchanging
614 In @code{reg} and @code{mem} expressions, 1 means
615 that the value of the expression never changes.
617 In @code{subreg} expressions, it is 1 if the @code{subreg} references an
618 unsigned object whose mode has been promoted to a wider mode.
620 In an insn, 1 means that this is an annulling branch.
622 In a @code{symbol_ref} expression, 1 means that this symbol addresses
623 something in the per-function constants pool.
625 In a @code{call_insn}, 1 means that this instruction is a call to a
626 const function.
628 In an RTL dump, this flag is represented as @samp{/u}.
630 @findex integrated
631 @item integrated
632 In some kinds of expressions, including insns, this flag means the
633 rtl was produced by procedure integration.
635 In a @code{reg} expression, this flag indicates the register
636 containing the value to be returned by the current function.  On
637 machines that pass parameters in registers, the same register number
638 may be used for parameters as well, but this flag is not set on such
639 uses.
640 @end table
642 @node Machine Modes
643 @section Machine Modes
644 @cindex machine modes
646 @findex enum machine_mode
647 A machine mode describes a size of data object and the representation used
648 for it.  In the C code, machine modes are represented by an enumeration
649 type, @code{enum machine_mode}, defined in @file{machmode.def}.  Each RTL
650 expression has room for a machine mode and so do certain kinds of tree
651 expressions (declarations and types, to be precise).
653 In debugging dumps and machine descriptions, the machine mode of an RTL
654 expression is written after the expression code with a colon to separate
655 them.  The letters @samp{mode} which appear at the end of each machine mode
656 name are omitted.  For example, @code{(reg:SI 38)} is a @code{reg}
657 expression with machine mode @code{SImode}.  If the mode is
658 @code{VOIDmode}, it is not written at all.
660 Here is a table of machine modes.  The term ``byte'' below refers to an
661 object of @code{BITS_PER_UNIT} bits (@pxref{Storage Layout}).
663 @table @code
664 @findex QImode
665 @item QImode
666 ``Quarter-Integer'' mode represents a single byte treated as an integer.
668 @findex HImode
669 @item HImode
670 ``Half-Integer'' mode represents a two-byte integer.
672 @findex PSImode
673 @item PSImode
674 ``Partial Single Integer'' mode represents an integer which occupies
675 four bytes but which doesn't really use all four.  On some machines,
676 this is the right mode to use for pointers.
678 @findex SImode
679 @item SImode
680 ``Single Integer'' mode represents a four-byte integer.
682 @findex PDImode
683 @item PDImode
684 ``Partial Double Integer'' mode represents an integer which occupies
685 eight bytes but which doesn't really use all eight.  On some machines,
686 this is the right mode to use for certain pointers.
688 @findex DImode
689 @item DImode
690 ``Double Integer'' mode represents an eight-byte integer.
692 @findex TImode
693 @item TImode
694 ``Tetra Integer'' (?) mode represents a sixteen-byte integer.
696 @findex SFmode
697 @item SFmode
698 ``Single Floating'' mode represents a single-precision (four byte) floating
699 point number.
701 @findex DFmode
702 @item DFmode
703 ``Double Floating'' mode represents a double-precision (eight byte) floating
704 point number.
706 @findex XFmode
707 @item XFmode
708 ``Extended Floating'' mode represents a triple-precision (twelve byte)
709 floating point number.  This mode is used for IEEE extended floating
710 point.  On some systems not all bits within these bytes will actually
711 be used.
713 @findex TFmode
714 @item TFmode
715 ``Tetra Floating'' mode represents a quadruple-precision (sixteen byte)
716 floating point number.
718 @findex CCmode
719 @item CCmode
720 ``Condition Code'' mode represents the value of a condition code, which
721 is a machine-specific set of bits used to represent the result of a
722 comparison operation.  Other machine-specific modes may also be used for
723 the condition code.  These modes are not used on machines that use
724 @code{cc0} (see @pxref{Condition Code}).
726 @findex BLKmode
727 @item BLKmode
728 ``Block'' mode represents values that are aggregates to which none of
729 the other modes apply.  In RTL, only memory references can have this mode,
730 and only if they appear in string-move or vector instructions.  On machines
731 which have no such instructions, @code{BLKmode} will not appear in RTL.
733 @findex VOIDmode
734 @item VOIDmode
735 Void mode means the absence of a mode or an unspecified mode.
736 For example, RTL expressions of code @code{const_int} have mode
737 @code{VOIDmode} because they can be taken to have whatever mode the context
738 requires.  In debugging dumps of RTL, @code{VOIDmode} is expressed by
739 the absence of any mode.
741 @findex SCmode
742 @findex DCmode
743 @findex XCmode
744 @findex TCmode
745 @item SCmode, DCmode, XCmode, TCmode
746 These modes stand for a complex number represented as a pair of floating
747 point values.  The floating point values are in @code{SFmode},
748 @code{DFmode}, @code{XFmode}, and @code{TFmode}, respectively.
750 @findex CQImode
751 @findex CHImode
752 @findex CSImode
753 @findex CDImode
754 @findex CTImode
755 @findex COImode
756 @item CQImode, CHImode, CSImode, CDImode, CTImode, COImode
757 These modes stand for a complex number represented as a pair of integer
758 values.  The integer values are in @code{QImode}, @code{HImode},
759 @code{SImode}, @code{DImode}, @code{TImode}, and @code{OImode},
760 respectively.
761 @end table
763 The machine description defines @code{Pmode} as a C macro which expands
764 into the machine mode used for addresses.  Normally this is the mode
765 whose size is @code{BITS_PER_WORD}, @code{SImode} on 32-bit machines.
767 The only modes which a machine description @i{must} support are
768 @code{QImode}, and the modes corresponding to @code{BITS_PER_WORD},
769 @code{FLOAT_TYPE_SIZE} and @code{DOUBLE_TYPE_SIZE}.
770 The compiler will attempt to use @code{DImode} for 8-byte structures and
771 unions, but this can be prevented by overriding the definition of
772 @code{MAX_FIXED_MODE_SIZE}.  Alternatively, you can have the compiler
773 use @code{TImode} for 16-byte structures and unions.  Likewise, you can
774 arrange for the C type @code{short int} to avoid using @code{HImode}.
776 @cindex mode classes
777 Very few explicit references to machine modes remain in the compiler and
778 these few references will soon be removed.  Instead, the machine modes
779 are divided into mode classes.  These are represented by the enumeration
780 type @code{enum mode_class} defined in @file{machmode.h}.  The possible
781 mode classes are:
783 @table @code
784 @findex MODE_INT
785 @item MODE_INT
786 Integer modes.  By default these are @code{QImode}, @code{HImode},
787 @code{SImode}, @code{DImode}, and @code{TImode}.
789 @findex MODE_PARTIAL_INT
790 @item MODE_PARTIAL_INT
791 The ``partial integer'' modes, @code{PSImode} and @code{PDImode}.
793 @findex MODE_FLOAT
794 @item MODE_FLOAT
795 floating point modes.  By default these are @code{SFmode}, @code{DFmode},
796 @code{XFmode} and @code{TFmode}.
798 @findex MODE_COMPLEX_INT
799 @item MODE_COMPLEX_INT
800 Complex integer modes.  (These are not currently implemented).
802 @findex MODE_COMPLEX_FLOAT
803 @item MODE_COMPLEX_FLOAT
804 Complex floating point modes.  By default these are @code{SCmode},
805 @code{DCmode}, @code{XCmode}, and @code{TCmode}.
807 @findex MODE_FUNCTION
808 @item MODE_FUNCTION
809 Algol or Pascal function variables including a static chain.
810 (These are not currently implemented).
812 @findex MODE_CC
813 @item MODE_CC
814 Modes representing condition code values.  These are @code{CCmode} plus
815 any modes listed in the @code{EXTRA_CC_MODES} macro.  @xref{Jump Patterns},
816 also see @ref{Condition Code}.
818 @findex MODE_RANDOM
819 @item MODE_RANDOM
820 This is a catchall mode class for modes which don't fit into the above
821 classes.  Currently @code{VOIDmode} and @code{BLKmode} are in
822 @code{MODE_RANDOM}.
823 @end table
825 Here are some C macros that relate to machine modes:
827 @table @code
828 @findex GET_MODE
829 @item GET_MODE (@var{x})
830 Returns the machine mode of the RTX @var{x}.
832 @findex PUT_MODE
833 @item PUT_MODE (@var{x}, @var{newmode})
834 Alters the machine mode of the RTX @var{x} to be @var{newmode}.
836 @findex NUM_MACHINE_MODES
837 @item NUM_MACHINE_MODES
838 Stands for the number of machine modes available on the target
839 machine.  This is one greater than the largest numeric value of any
840 machine mode.
842 @findex GET_MODE_NAME
843 @item GET_MODE_NAME (@var{m})
844 Returns the name of mode @var{m} as a string.
846 @findex GET_MODE_CLASS
847 @item GET_MODE_CLASS (@var{m})
848 Returns the mode class of mode @var{m}.
850 @findex GET_MODE_WIDER_MODE
851 @item GET_MODE_WIDER_MODE (@var{m})
852 Returns the next wider natural mode.  For example, the expression
853 @code{GET_MODE_WIDER_MODE (QImode)} returns @code{HImode}.
855 @findex GET_MODE_SIZE
856 @item GET_MODE_SIZE (@var{m})
857 Returns the size in bytes of a datum of mode @var{m}.
859 @findex GET_MODE_BITSIZE
860 @item GET_MODE_BITSIZE (@var{m})
861 Returns the size in bits of a datum of mode @var{m}.
863 @findex GET_MODE_MASK
864 @item GET_MODE_MASK (@var{m})
865 Returns a bitmask containing 1 for all bits in a word that fit within
866 mode @var{m}.  This macro can only be used for modes whose bitsize is
867 less than or equal to @code{HOST_BITS_PER_INT}.
869 @findex GET_MODE_ALIGNMENT
870 @item GET_MODE_ALIGNMENT (@var{m})
871 Return the required alignment, in bits, for an object of mode @var{m}.
873 @findex GET_MODE_UNIT_SIZE
874 @item GET_MODE_UNIT_SIZE (@var{m})
875 Returns the size in bytes of the subunits of a datum of mode @var{m}.
876 This is the same as @code{GET_MODE_SIZE} except in the case of complex
877 modes.  For them, the unit size is the size of the real or imaginary
878 part.
880 @findex GET_MODE_NUNITS
881 @item GET_MODE_NUNITS (@var{m})
882 Returns the number of units contained in a mode, i.e.,
883 @code{GET_MODE_SIZE} divided by @code{GET_MODE_UNIT_SIZE}.
885 @findex GET_CLASS_NARROWEST_MODE
886 @item GET_CLASS_NARROWEST_MODE (@var{c})
887 Returns the narrowest mode in mode class @var{c}.
888 @end table
890 @findex byte_mode
891 @findex word_mode
892 The global variables @code{byte_mode} and @code{word_mode} contain modes
893 whose classes are @code{MODE_INT} and whose bitsizes are either
894 @code{BITS_PER_UNIT} or @code{BITS_PER_WORD}, respectively.  On 32-bit
895 machines, these are @code{QImode} and @code{SImode}, respectively.
897 @node Constants
898 @section Constant Expression Types
899 @cindex RTL constants
900 @cindex RTL constant expression types
902 The simplest RTL expressions are those that represent constant values.
904 @table @code
905 @findex const_int
906 @item (const_int @var{i})
907 This type of expression represents the integer value @var{i}.  @var{i}
908 is customarily accessed with the macro @code{INTVAL} as in
909 @code{INTVAL (@var{exp})}, which is equivalent to @code{XWINT (@var{exp}, 0)}.
911 @findex const0_rtx
912 @findex const1_rtx
913 @findex const2_rtx
914 @findex constm1_rtx
915 There is only one expression object for the integer value zero; it is
916 the value of the variable @code{const0_rtx}.  Likewise, the only
917 expression for integer value one is found in @code{const1_rtx}, the only
918 expression for integer value two is found in @code{const2_rtx}, and the
919 only expression for integer value negative one is found in
920 @code{constm1_rtx}.  Any attempt to create an expression of code
921 @code{const_int} and value zero, one, two or negative one will return
922 @code{const0_rtx}, @code{const1_rtx}, @code{const2_rtx} or
923 @code{constm1_rtx} as appropriate.@refill
925 @findex const_true_rtx
926 Similarly, there is only one object for the integer whose value is
927 @code{STORE_FLAG_VALUE}.  It is found in @code{const_true_rtx}.  If
928 @code{STORE_FLAG_VALUE} is one, @code{const_true_rtx} and
929 @code{const1_rtx} will point to the same object.  If
930 @code{STORE_FLAG_VALUE} is -1, @code{const_true_rtx} and
931 @code{constm1_rtx} will point to the same object.@refill
933 @findex const_double
934 @item (const_double:@var{m} @var{addr} @var{i0} @var{i1} @dots{})
935 Represents either a floating-point constant of mode @var{m} or an
936 integer constant too large to fit into @code{HOST_BITS_PER_WIDE_INT}
937 bits but small enough to fit within twice that number of bits (GNU CC
938 does not provide a mechanism to represent even larger constants).  In
939 the latter case, @var{m} will be @code{VOIDmode}.
941 @findex CONST_DOUBLE_MEM
942 @findex CONST_DOUBLE_CHAIN
943 @var{addr} is used to contain the @code{mem} expression that corresponds
944 to the location in memory that at which the constant can be found.  If
945 it has not been allocated a memory location, but is on the chain of all
946 @code{const_double} expressions in this compilation (maintained using an
947 undisplayed field), @var{addr} contains @code{const0_rtx}.  If it is not
948 on the chain, @var{addr} contains @code{cc0_rtx}.  @var{addr} is
949 customarily accessed with the macro @code{CONST_DOUBLE_MEM} and the
950 chain field via @code{CONST_DOUBLE_CHAIN}.@refill
952 @findex CONST_DOUBLE_LOW
953 If @var{m} is @code{VOIDmode}, the bits of the value are stored in
954 @var{i0} and @var{i1}.  @var{i0} is customarily accessed with the macro
955 @code{CONST_DOUBLE_LOW} and @var{i1} with @code{CONST_DOUBLE_HIGH}.
957 If the constant is floating point (regardless of its precision), then
958 the number of integers used to store the value depends on the size of
959 @code{REAL_VALUE_TYPE} (@pxref{Cross-compilation}).  The integers
960 represent a floating point number, but not precisely in the target
961 machine's or host machine's floating point format.  To convert them to
962 the precise bit pattern used by the target machine, use the macro
963 @code{REAL_VALUE_TO_TARGET_DOUBLE} and friends (@pxref{Data Output}).
965 @findex CONST0_RTX
966 @findex CONST1_RTX
967 @findex CONST2_RTX
968 The macro @code{CONST0_RTX (@var{mode})} refers to an expression with
969 value 0 in mode @var{mode}.  If mode @var{mode} is of mode class
970 @code{MODE_INT}, it returns @code{const0_rtx}.  Otherwise, it returns a
971 @code{CONST_DOUBLE} expression in mode @var{mode}.  Similarly, the macro
972 @code{CONST1_RTX (@var{mode})} refers to an expression with value 1 in
973 mode @var{mode} and similarly for @code{CONST2_RTX}.
975 @findex const_string
976 @item (const_string @var{str})
977 Represents a constant string with value @var{str}.  Currently this is
978 used only for insn attributes (@pxref{Insn Attributes}) since constant
979 strings in C are placed in memory.
981 @findex symbol_ref
982 @item (symbol_ref:@var{mode} @var{symbol})
983 Represents the value of an assembler label for data.  @var{symbol} is
984 a string that describes the name of the assembler label.  If it starts
985 with a @samp{*}, the label is the rest of @var{symbol} not including
986 the @samp{*}.  Otherwise, the label is @var{symbol}, usually prefixed
987 with @samp{_}.
989 The @code{symbol_ref} contains a mode, which is usually @code{Pmode}.
990 Usually that is the only mode for which a symbol is directly valid.
992 @findex label_ref
993 @item (label_ref @var{label})
994 Represents the value of an assembler label for code.  It contains one
995 operand, an expression, which must be a @code{code_label} that appears
996 in the instruction sequence to identify the place where the label
997 should go.
999 The reason for using a distinct expression type for code label
1000 references is so that jump optimization can distinguish them.
1002 @item (const:@var{m} @var{exp})
1003 Represents a constant that is the result of an assembly-time
1004 arithmetic computation.  The operand, @var{exp}, is an expression that
1005 contains only constants (@code{const_int}, @code{symbol_ref} and
1006 @code{label_ref} expressions) combined with @code{plus} and
1007 @code{minus}.  However, not all combinations are valid, since the
1008 assembler cannot do arbitrary arithmetic on relocatable symbols.
1010 @var{m} should be @code{Pmode}.
1012 @findex high
1013 @item (high:@var{m} @var{exp})
1014 Represents the high-order bits of @var{exp}, usually a
1015 @code{symbol_ref}.  The number of bits is machine-dependent and is
1016 normally the number of bits specified in an instruction that initializes
1017 the high order bits of a register.  It is used with @code{lo_sum} to
1018 represent the typical two-instruction sequence used in RISC machines to
1019 reference a global memory location.
1021 @var{m} should be @code{Pmode}.
1022 @end table
1024 @node Regs and Memory
1025 @section Registers and Memory
1026 @cindex RTL register expressions
1027 @cindex RTL memory expressions
1029 Here are the RTL expression types for describing access to machine
1030 registers and to main memory.
1032 @table @code
1033 @findex reg
1034 @cindex hard registers
1035 @cindex pseudo registers
1036 @item (reg:@var{m} @var{n})
1037 For small values of the integer @var{n} (those that are less than
1038 @code{FIRST_PSEUDO_REGISTER}), this stands for a reference to machine
1039 register number @var{n}: a @dfn{hard register}.  For larger values of
1040 @var{n}, it stands for a temporary value or @dfn{pseudo register}.
1041 The compiler's strategy is to generate code assuming an unlimited
1042 number of such pseudo registers, and later convert them into hard
1043 registers or into memory references.
1045 @var{m} is the machine mode of the reference.  It is necessary because
1046 machines can generally refer to each register in more than one mode.
1047 For example, a register may contain a full word but there may be
1048 instructions to refer to it as a half word or as a single byte, as
1049 well as instructions to refer to it as a floating point number of
1050 various precisions.
1052 Even for a register that the machine can access in only one mode,
1053 the mode must always be specified.
1055 The symbol @code{FIRST_PSEUDO_REGISTER} is defined by the machine
1056 description, since the number of hard registers on the machine is an
1057 invariant characteristic of the machine.  Note, however, that not
1058 all of the machine registers must be general registers.  All the
1059 machine registers that can be used for storage of data are given
1060 hard register numbers, even those that can be used only in certain
1061 instructions or can hold only certain types of data.
1063 A hard register may be accessed in various modes throughout one
1064 function, but each pseudo register is given a natural mode
1065 and is accessed only in that mode.  When it is necessary to describe
1066 an access to a pseudo register using a nonnatural mode, a @code{subreg}
1067 expression is used.
1069 A @code{reg} expression with a machine mode that specifies more than
1070 one word of data may actually stand for several consecutive registers.
1071 If in addition the register number specifies a hardware register, then
1072 it actually represents several consecutive hardware registers starting
1073 with the specified one.
1075 Each pseudo register number used in a function's RTL code is
1076 represented by a unique @code{reg} expression.
1078 @findex FIRST_VIRTUAL_REGISTER
1079 @findex LAST_VIRTUAL_REGISTER
1080 Some pseudo register numbers, those within the range of
1081 @code{FIRST_VIRTUAL_REGISTER} to @code{LAST_VIRTUAL_REGISTER} only
1082 appear during the RTL generation phase and are eliminated before the
1083 optimization phases.  These represent locations in the stack frame that
1084 cannot be determined until RTL generation for the function has been
1085 completed.  The following virtual register numbers are defined:
1087 @table @code
1088 @findex VIRTUAL_INCOMING_ARGS_REGNUM
1089 @item VIRTUAL_INCOMING_ARGS_REGNUM
1090 This points to the first word of the incoming arguments passed on the
1091 stack.  Normally these arguments are placed there by the caller, but the
1092 callee may have pushed some arguments that were previously passed in
1093 registers.
1095 @cindex @code{FIRST_PARM_OFFSET} and virtual registers
1096 @cindex @code{ARG_POINTER_REGNUM} and virtual registers
1097 When RTL generation is complete, this virtual register is replaced
1098 by the sum of the register given by @code{ARG_POINTER_REGNUM} and the
1099 value of @code{FIRST_PARM_OFFSET}.
1101 @findex VIRTUAL_STACK_VARS_REGNUM
1102 @cindex @code{FRAME_GROWS_DOWNWARD} and virtual registers
1103 @item VIRTUAL_STACK_VARS_REGNUM
1104 If @code{FRAME_GROWS_DOWNWARD} is defined, this points to immediately
1105 above the first variable on the stack.  Otherwise, it points to the
1106 first variable on the stack.
1108 @cindex @code{STARTING_FRAME_OFFSET} and virtual registers
1109 @cindex @code{FRAME_POINTER_REGNUM} and virtual registers
1110 @code{VIRTUAL_STACK_VARS_REGNUM} is replaced with the sum of the
1111 register given by @code{FRAME_POINTER_REGNUM} and the value
1112 @code{STARTING_FRAME_OFFSET}.
1114 @findex VIRTUAL_STACK_DYNAMIC_REGNUM
1115 @item VIRTUAL_STACK_DYNAMIC_REGNUM
1116 This points to the location of dynamically allocated memory on the stack
1117 immediately after the stack pointer has been adjusted by the amount of
1118 memory desired.
1120 @cindex @code{STACK_DYNAMIC_OFFSET} and virtual registers
1121 @cindex @code{STACK_POINTER_REGNUM} and virtual registers
1122 This virtual register is replaced by the sum of the register given by
1123 @code{STACK_POINTER_REGNUM} and the value @code{STACK_DYNAMIC_OFFSET}.
1125 @findex VIRTUAL_OUTGOING_ARGS_REGNUM
1126 @item VIRTUAL_OUTGOING_ARGS_REGNUM
1127 This points to the location in the stack at which outgoing arguments
1128 should be written when the stack is pre-pushed (arguments pushed using
1129 push insns should always use @code{STACK_POINTER_REGNUM}).
1131 @cindex @code{STACK_POINTER_OFFSET} and virtual registers
1132 This virtual register is replaced by the sum of the register given by
1133 @code{STACK_POINTER_REGNUM} and the value @code{STACK_POINTER_OFFSET}.
1134 @end table
1136 @findex subreg
1137 @item (subreg:@var{m} @var{reg} @var{wordnum})
1138 @code{subreg} expressions are used to refer to a register in a machine
1139 mode other than its natural one, or to refer to one register of
1140 a multi-word @code{reg} that actually refers to several registers.
1142 Each pseudo-register has a natural mode.  If it is necessary to
1143 operate on it in a different mode---for example, to perform a fullword
1144 move instruction on a pseudo-register that contains a single
1145 byte---the pseudo-register must be enclosed in a @code{subreg}.  In
1146 such a case, @var{wordnum} is zero.
1148 Usually @var{m} is at least as narrow as the mode of @var{reg}, in which
1149 case it is restricting consideration to only the bits of @var{reg} that
1150 are in @var{m}.
1152 Sometimes @var{m} is wider than the mode of @var{reg}.  These
1153 @code{subreg} expressions are often called @dfn{paradoxical}.  They are
1154 used in cases where we want to refer to an object in a wider mode but do
1155 not care what value the additional bits have.  The reload pass ensures
1156 that paradoxical references are only made to hard registers.
1158 The other use of @code{subreg} is to extract the individual registers of
1159 a multi-register value.  Machine modes such as @code{DImode} and
1160 @code{TImode} can indicate values longer than a word, values which
1161 usually require two or more consecutive registers.  To access one of the
1162 registers, use a @code{subreg} with mode @code{SImode} and a
1163 @var{wordnum} that says which register.
1165 Storing in a non-paradoxical @code{subreg} has undefined results for
1166 bits belonging to the same word as the @code{subreg}.  This laxity makes
1167 it easier to generate efficient code for such instructions.  To
1168 represent an instruction that preserves all the bits outside of those in
1169 the @code{subreg}, use @code{strict_low_part} around the @code{subreg}.
1171 @cindex @code{WORDS_BIG_ENDIAN}, effect on @code{subreg}
1172 The compilation parameter @code{WORDS_BIG_ENDIAN}, if set to 1, says
1173 that word number zero is the most significant part; otherwise, it is
1174 the least significant part.
1176 @cindex @code{FLOAT_WORDS_BIG_ENDIAN}, (lack of) effect on @code{subreg}
1177 On a few targets, @code{FLOAT_WORDS_BIG_ENDIAN} disagrees with
1178 @code{WORDS_BIG_ENDIAN}.
1179 However, most parts of the compiler treat floating point values as if
1180 they had the same endianness as integer values.  This works because
1181 they handle them solely as a collection of integer values, with no
1182 particular numerical value.  Only real.c and the runtime libraries
1183 care about @code{FLOAT_WORDS_BIG_ENDIAN}.
1185 @cindex combiner pass
1186 @cindex reload pass
1187 @cindex @code{subreg}, special reload handling
1188 Between the combiner pass and the reload pass, it is possible to have a
1189 paradoxical @code{subreg} which contains a @code{mem} instead of a
1190 @code{reg} as its first operand.  After the reload pass, it is also
1191 possible to have a non-paradoxical @code{subreg} which contains a
1192 @code{mem}; this usually occurs when the @code{mem} is a stack slot
1193 which replaced a pseudo register.
1195 Note that it is not valid to access a @code{DFmode} value in @code{SFmode}
1196 using a @code{subreg}.  On some machines the most significant part of a
1197 @code{DFmode} value does not have the same format as a single-precision
1198 floating value.
1200 It is also not valid to access a single word of a multi-word value in a
1201 hard register when less registers can hold the value than would be
1202 expected from its size.  For example, some 32-bit machines have
1203 floating-point registers that can hold an entire @code{DFmode} value.
1204 If register 10 were such a register @code{(subreg:SI (reg:DF 10) 1)}
1205 would be invalid because there is no way to convert that reference to
1206 a single machine register.  The reload pass prevents @code{subreg}
1207 expressions such as these from being formed.
1209 @findex SUBREG_REG
1210 @findex SUBREG_WORD
1211 The first operand of a @code{subreg} expression is customarily accessed 
1212 with the @code{SUBREG_REG} macro and the second operand is customarily
1213 accessed with the @code{SUBREG_WORD} macro.
1215 @findex scratch
1216 @cindex scratch operands
1217 @item (scratch:@var{m})
1218 This represents a scratch register that will be required for the
1219 execution of a single instruction and not used subsequently.  It is
1220 converted into a @code{reg} by either the local register allocator or
1221 the reload pass.
1223 @code{scratch} is usually present inside a @code{clobber} operation
1224 (@pxref{Side Effects}).
1226 @findex cc0
1227 @cindex condition code register
1228 @item (cc0)
1229 This refers to the machine's condition code register.  It has no
1230 operands and may not have a machine mode.  There are two ways to use it:
1232 @itemize @bullet
1233 @item
1234 To stand for a complete set of condition code flags.  This is best on
1235 most machines, where each comparison sets the entire series of flags.
1237 With this technique, @code{(cc0)} may be validly used in only two
1238 contexts: as the destination of an assignment (in test and compare
1239 instructions) and in comparison operators comparing against zero
1240 (@code{const_int} with value zero; that is to say, @code{const0_rtx}).
1242 @item
1243 To stand for a single flag that is the result of a single condition.
1244 This is useful on machines that have only a single flag bit, and in
1245 which comparison instructions must specify the condition to test.
1247 With this technique, @code{(cc0)} may be validly used in only two
1248 contexts: as the destination of an assignment (in test and compare
1249 instructions) where the source is a comparison operator, and as the
1250 first operand of @code{if_then_else} (in a conditional branch).
1251 @end itemize
1253 @findex cc0_rtx
1254 There is only one expression object of code @code{cc0}; it is the
1255 value of the variable @code{cc0_rtx}.  Any attempt to create an
1256 expression of code @code{cc0} will return @code{cc0_rtx}.
1258 Instructions can set the condition code implicitly.  On many machines,
1259 nearly all instructions set the condition code based on the value that
1260 they compute or store.  It is not necessary to record these actions
1261 explicitly in the RTL because the machine description includes a
1262 prescription for recognizing the instructions that do so (by means of
1263 the macro @code{NOTICE_UPDATE_CC}).  @xref{Condition Code}.  Only
1264 instructions whose sole purpose is to set the condition code, and
1265 instructions that use the condition code, need mention @code{(cc0)}.
1267 On some machines, the condition code register is given a register number
1268 and a @code{reg} is used instead of @code{(cc0)}.  This is usually the
1269 preferable approach if only a small subset of instructions modify the
1270 condition code.  Other machines store condition codes in general
1271 registers; in such cases a pseudo register should be used.
1273 Some machines, such as the Sparc and RS/6000, have two sets of
1274 arithmetic instructions, one that sets and one that does not set the
1275 condition code.  This is best handled by normally generating the
1276 instruction that does not set the condition code, and making a pattern
1277 that both performs the arithmetic and sets the condition code register
1278 (which would not be @code{(cc0)} in this case).  For examples, search
1279 for @samp{addcc} and @samp{andcc} in @file{sparc.md}.
1281 @findex pc
1282 @item (pc)
1283 @cindex program counter
1284 This represents the machine's program counter.  It has no operands and
1285 may not have a machine mode.  @code{(pc)} may be validly used only in
1286 certain specific contexts in jump instructions.
1288 @findex pc_rtx
1289 There is only one expression object of code @code{pc}; it is the value
1290 of the variable @code{pc_rtx}.  Any attempt to create an expression of
1291 code @code{pc} will return @code{pc_rtx}.
1293 All instructions that do not jump alter the program counter implicitly
1294 by incrementing it, but there is no need to mention this in the RTL.
1296 @findex mem
1297 @item (mem:@var{m} @var{addr} @var{alias})
1298 This RTX represents a reference to main memory at an address
1299 represented by the expression @var{addr}.  @var{m} specifies how large
1300 a unit of memory is accessed. @var{alias} specifies an alias set for the
1301 reference. In general two items are in different alias sets if they cannot
1302 reference the same memory address.
1304 @findex addressof
1305 @item (addressof:@var{m} @var{reg})
1306 This RTX represents a request for the address of register @var{reg}.  Its mode
1307 is always @code{Pmode}.  If there are any @code{addressof}
1308 expressions left in the function after CSE, @var{reg} is forced into the
1309 stack and the @code{addressof} expression is replaced with a @code{plus}
1310 expression for the address of its stack slot.
1311 @end table
1313 @node Arithmetic
1314 @section RTL Expressions for Arithmetic
1315 @cindex arithmetic, in RTL
1316 @cindex math, in RTL
1317 @cindex RTL expressions for arithmetic
1319 Unless otherwise specified, all the operands of arithmetic expressions
1320 must be valid for mode @var{m}.  An operand is valid for mode @var{m}
1321 if it has mode @var{m}, or if it is a @code{const_int} or
1322 @code{const_double} and @var{m} is a mode of class @code{MODE_INT}.
1324 For commutative binary operations, constants should be placed in the
1325 second operand.
1327 @table @code
1328 @findex plus
1329 @cindex RTL addition
1330 @cindex RTL sum
1331 @item (plus:@var{m} @var{x} @var{y})
1332 Represents the sum of the values represented by @var{x} and @var{y}
1333 carried out in machine mode @var{m}. 
1335 @findex lo_sum
1336 @item (lo_sum:@var{m} @var{x} @var{y})
1337 Like @code{plus}, except that it represents that sum of @var{x} and the
1338 low-order bits of @var{y}.  The number of low order bits is
1339 machine-dependent but is normally the number of bits in a @code{Pmode}
1340 item minus the number of bits set by the @code{high} code
1341 (@pxref{Constants}).
1343 @var{m} should be @code{Pmode}.
1345 @findex minus
1346 @cindex RTL subtraction
1347 @cindex RTL difference
1348 @item (minus:@var{m} @var{x} @var{y})
1349 Like @code{plus} but represents subtraction.
1351 @findex ss_plus
1352 @cindex RTL addition with signed saturation
1353 @item (ss_plus:@var{m} @var{x} @var{y})
1355 Like @code{plus}, but using signed saturation in case of an overflow.
1357 @findex us_plus
1358 @cindex RTL addition with unsigned saturation
1359 @item (us_plus:@var{m} @var{x} @var{y})
1361 Like @code{plus}, but using unsigned saturation in case of an overflow.
1363 @findex ss_minus
1364 @cindex RTL addition with signed saturation
1365 @item (ss_minus:@var{m} @var{x} @var{y})
1367 Like @code{minus}, but using signed saturation in case of an overflow.
1369 @findex us_minus
1370 @cindex RTL addition with unsigned saturation
1371 @item (us_minus:@var{m} @var{x} @var{y})
1373 Like @code{minus}, but using unsigned saturation in case of an overflow.
1375 @findex compare
1376 @cindex RTL comparison
1377 @item (compare:@var{m} @var{x} @var{y})
1378 Represents the result of subtracting @var{y} from @var{x} for purposes
1379 of comparison.  The result is computed without overflow, as if with
1380 infinite precision.
1382 Of course, machines can't really subtract with infinite precision.
1383 However, they can pretend to do so when only the sign of the
1384 result will be used, which is the case when the result is stored
1385 in the condition code.   And that is the only way this kind of expression
1386 may validly be used: as a value to be stored in the condition codes.
1388 The mode @var{m} is not related to the modes of @var{x} and @var{y},
1389 but instead is the mode of the condition code value.  If @code{(cc0)}
1390 is used, it is @code{VOIDmode}.  Otherwise it is some mode in class
1391 @code{MODE_CC}, often @code{CCmode}.  @xref{Condition Code}.
1393 Normally, @var{x} and @var{y} must have the same mode.  Otherwise,
1394 @code{compare} is valid only if the mode of @var{x} is in class
1395 @code{MODE_INT} and @var{y} is a @code{const_int} or
1396 @code{const_double} with mode @code{VOIDmode}.  The mode of @var{x}
1397 determines what mode the comparison is to be done in; thus it must not
1398 be @code{VOIDmode}.
1400 If one of the operands is a constant, it should be placed in the
1401 second operand and the comparison code adjusted as appropriate.  
1403 A @code{compare} specifying two @code{VOIDmode} constants is not valid
1404 since there is no way to know in what mode the comparison is to be
1405 performed; the comparison must either be folded during the compilation
1406 or the first operand must be loaded into a register while its mode is
1407 still known.
1409 @findex neg
1410 @item (neg:@var{m} @var{x})
1411 Represents the negation (subtraction from zero) of the value represented
1412 by @var{x}, carried out in mode @var{m}.
1414 @findex mult
1415 @cindex multiplication
1416 @cindex product
1417 @item (mult:@var{m} @var{x} @var{y})
1418 Represents the signed product of the values represented by @var{x} and
1419 @var{y} carried out in machine mode @var{m}.
1421 Some machines support a multiplication that generates a product wider
1422 than the operands.  Write the pattern for this as
1424 @example
1425 (mult:@var{m} (sign_extend:@var{m} @var{x}) (sign_extend:@var{m} @var{y}))
1426 @end example
1428 where @var{m} is wider than the modes of @var{x} and @var{y}, which need
1429 not be the same.
1431 Write patterns for unsigned widening multiplication similarly using
1432 @code{zero_extend}.
1434 @findex div
1435 @cindex division
1436 @cindex signed division
1437 @cindex quotient
1438 @item (div:@var{m} @var{x} @var{y})
1439 Represents the quotient in signed division of @var{x} by @var{y},
1440 carried out in machine mode @var{m}.  If @var{m} is a floating point
1441 mode, it represents the exact quotient; otherwise, the integerized
1442 quotient.
1444 Some machines have division instructions in which the operands and
1445 quotient widths are not all the same; you should represent 
1446 such instructions using @code{truncate} and @code{sign_extend} as in,
1448 @example
1449 (truncate:@var{m1} (div:@var{m2} @var{x} (sign_extend:@var{m2} @var{y})))
1450 @end example
1452 @findex udiv
1453 @cindex unsigned division
1454 @cindex division
1455 @item (udiv:@var{m} @var{x} @var{y})
1456 Like @code{div} but represents unsigned division.
1458 @findex mod
1459 @findex umod
1460 @cindex remainder
1461 @cindex division
1462 @item (mod:@var{m} @var{x} @var{y})
1463 @itemx (umod:@var{m} @var{x} @var{y})
1464 Like @code{div} and @code{udiv} but represent the remainder instead of
1465 the quotient.
1467 @findex smin
1468 @findex smax
1469 @cindex signed minimum
1470 @cindex signed maximum
1471 @item (smin:@var{m} @var{x} @var{y})
1472 @itemx (smax:@var{m} @var{x} @var{y})
1473 Represents the smaller (for @code{smin}) or larger (for @code{smax}) of
1474 @var{x} and @var{y}, interpreted as signed integers in mode @var{m}.
1476 @findex umin
1477 @findex umax
1478 @cindex unsigned minimum and maximum
1479 @item (umin:@var{m} @var{x} @var{y})
1480 @itemx (umax:@var{m} @var{x} @var{y})
1481 Like @code{smin} and @code{smax}, but the values are interpreted as unsigned
1482 integers.
1484 @findex not
1485 @cindex complement, bitwise
1486 @cindex bitwise complement
1487 @item (not:@var{m} @var{x})
1488 Represents the bitwise complement of the value represented by @var{x},
1489 carried out in mode @var{m}, which must be a fixed-point machine mode.
1491 @findex and
1492 @cindex logical-and, bitwise
1493 @cindex bitwise logical-and
1494 @item (and:@var{m} @var{x} @var{y})
1495 Represents the bitwise logical-and of the values represented by
1496 @var{x} and @var{y}, carried out in machine mode @var{m}, which must be
1497 a fixed-point machine mode.
1499 @findex ior
1500 @cindex inclusive-or, bitwise
1501 @cindex bitwise inclusive-or
1502 @item (ior:@var{m} @var{x} @var{y})
1503 Represents the bitwise inclusive-or of the values represented by @var{x}
1504 and @var{y}, carried out in machine mode @var{m}, which must be a
1505 fixed-point mode.
1507 @findex xor
1508 @cindex exclusive-or, bitwise
1509 @cindex bitwise exclusive-or
1510 @item (xor:@var{m} @var{x} @var{y})
1511 Represents the bitwise exclusive-or of the values represented by @var{x}
1512 and @var{y}, carried out in machine mode @var{m}, which must be a
1513 fixed-point mode.
1515 @findex ashift
1516 @cindex left shift
1517 @cindex shift
1518 @cindex arithmetic shift
1519 @item (ashift:@var{m} @var{x} @var{c})
1520 Represents the result of arithmetically shifting @var{x} left by @var{c}
1521 places.  @var{x} have mode @var{m}, a fixed-point machine mode.  @var{c}
1522 be a fixed-point mode or be a constant with mode @code{VOIDmode}; which
1523 mode is determined by the mode called for in the machine description
1524 entry for the left-shift instruction.  For example, on the Vax, the mode
1525 of @var{c} is @code{QImode} regardless of @var{m}.
1527 @findex lshiftrt
1528 @cindex right shift
1529 @findex ashiftrt
1530 @item (lshiftrt:@var{m} @var{x} @var{c})
1531 @itemx (ashiftrt:@var{m} @var{x} @var{c})
1532 Like @code{ashift} but for right shift.  Unlike the case for left shift,
1533 these two operations are distinct.
1535 @findex rotate
1536 @cindex rotate 
1537 @cindex left rotate
1538 @findex rotatert
1539 @cindex right rotate
1540 @item (rotate:@var{m} @var{x} @var{c})
1541 @itemx (rotatert:@var{m} @var{x} @var{c})
1542 Similar but represent left and right rotate.  If @var{c} is a constant,
1543 use @code{rotate}.
1545 @findex abs
1546 @cindex absolute value
1547 @item (abs:@var{m} @var{x})
1548 Represents the absolute value of @var{x}, computed in mode @var{m}.
1550 @findex sqrt
1551 @cindex square root
1552 @item (sqrt:@var{m} @var{x})
1553 Represents the square root of @var{x}, computed in mode @var{m}.
1554 Most often @var{m} will be a floating point mode.
1556 @findex ffs
1557 @item (ffs:@var{m} @var{x})
1558 Represents one plus the index of the least significant 1-bit in
1559 @var{x}, represented as an integer of mode @var{m}.  (The value is
1560 zero if @var{x} is zero.)  The mode of @var{x} need not be @var{m};
1561 depending on the target machine, various mode combinations may be
1562 valid.
1563 @end table
1565 @node Comparisons
1566 @section Comparison Operations
1567 @cindex RTL comparison operations
1569 Comparison operators test a relation on two operands and are considered
1570 to represent a machine-dependent nonzero value described by, but not
1571 necessarily equal to, @code{STORE_FLAG_VALUE} (@pxref{Misc})
1572 if the relation holds, or zero if it does not.  The mode of the
1573 comparison operation is independent of the mode of the data being
1574 compared.  If the comparison operation is being tested (e.g., the first
1575 operand of an @code{if_then_else}), the mode must be @code{VOIDmode}.
1576 If the comparison operation is producing data to be stored in some
1577 variable, the mode must be in class @code{MODE_INT}.  All comparison
1578 operations producing data must use the same mode, which is
1579 machine-specific.
1581 @cindex condition codes
1582 There are two ways that comparison operations may be used.  The
1583 comparison operators may be used to compare the condition codes
1584 @code{(cc0)} against zero, as in @code{(eq (cc0) (const_int 0))}.  Such
1585 a construct actually refers to the result of the preceding instruction
1586 in which the condition codes were set.  The instruction setting the
1587 condition code must be adjacent to the instruction using the condition
1588 code; only @code{note} insns may separate them.
1590 Alternatively, a comparison operation may directly compare two data
1591 objects.  The mode of the comparison is determined by the operands; they
1592 must both be valid for a common machine mode.  A comparison with both
1593 operands constant would be invalid as the machine mode could not be
1594 deduced from it, but such a comparison should never exist in RTL due to
1595 constant folding.
1597 In the example above, if @code{(cc0)} were last set to
1598 @code{(compare @var{x} @var{y})}, the comparison operation is
1599 identical to @code{(eq @var{x} @var{y})}.  Usually only one style
1600 of comparisons is supported on a particular machine, but the combine
1601 pass will try to merge the operations to produce the @code{eq} shown
1602 in case it exists in the context of the particular insn involved.
1604 Inequality comparisons come in two flavors, signed and unsigned.  Thus,
1605 there are distinct expression codes @code{gt} and @code{gtu} for signed and
1606 unsigned greater-than.  These can produce different results for the same
1607 pair of integer values: for example, 1 is signed greater-than -1 but not
1608 unsigned greater-than, because -1 when regarded as unsigned is actually
1609 @code{0xffffffff} which is greater than 1.
1611 The signed comparisons are also used for floating point values.  Floating
1612 point comparisons are distinguished by the machine modes of the operands.
1614 @table @code
1615 @findex eq
1616 @cindex equal
1617 @item (eq:@var{m} @var{x} @var{y})
1618 1 if the values represented by @var{x} and @var{y} are equal,
1619 otherwise 0.
1621 @findex ne
1622 @cindex not equal
1623 @item (ne:@var{m} @var{x} @var{y})
1624 1 if the values represented by @var{x} and @var{y} are not equal,
1625 otherwise 0.
1627 @findex gt
1628 @cindex greater than
1629 @item (gt:@var{m} @var{x} @var{y})
1630 1 if the @var{x} is greater than @var{y}.  If they are fixed-point,
1631 the comparison is done in a signed sense.
1633 @findex gtu
1634 @cindex greater than
1635 @cindex unsigned greater than
1636 @item (gtu:@var{m} @var{x} @var{y})
1637 Like @code{gt} but does unsigned comparison, on fixed-point numbers only.
1639 @findex lt
1640 @cindex less than
1641 @findex ltu
1642 @cindex unsigned less than
1643 @item (lt:@var{m} @var{x} @var{y})
1644 @itemx (ltu:@var{m} @var{x} @var{y})
1645 Like @code{gt} and @code{gtu} but test for ``less than''.
1647 @findex ge
1648 @cindex greater than
1649 @findex geu
1650 @cindex unsigned greater than
1651 @item (ge:@var{m} @var{x} @var{y})
1652 @itemx (geu:@var{m} @var{x} @var{y})
1653 Like @code{gt} and @code{gtu} but test for ``greater than or equal''.
1655 @findex le
1656 @cindex less than or equal
1657 @findex leu
1658 @cindex unsigned less than
1659 @item (le:@var{m} @var{x} @var{y})
1660 @itemx (leu:@var{m} @var{x} @var{y})
1661 Like @code{gt} and @code{gtu} but test for ``less than or equal''.
1663 @findex if_then_else
1664 @item (if_then_else @var{cond} @var{then} @var{else})
1665 This is not a comparison operation but is listed here because it is
1666 always used in conjunction with a comparison operation.  To be
1667 precise, @var{cond} is a comparison expression.  This expression
1668 represents a choice, according to @var{cond}, between the value
1669 represented by @var{then} and the one represented by @var{else}.
1671 On most machines, @code{if_then_else} expressions are valid only
1672 to express conditional jumps.
1674 @findex cond
1675 @item (cond [@var{test1} @var{value1} @var{test2} @var{value2} @dots{}] @var{default})
1676 Similar to @code{if_then_else}, but more general.  Each of @var{test1},
1677 @var{test2}, @dots{} is performed in turn.  The result of this expression is
1678 the @var{value} corresponding to the first non-zero test, or @var{default} if
1679 none of the tests are non-zero expressions.
1681 This is currently not valid for instruction patterns and is supported only
1682 for insn attributes.  @xref{Insn Attributes}.
1683 @end table
1685 @node Bit Fields
1686 @section Bit Fields
1687 @cindex bit fields
1689 Special expression codes exist to represent bitfield instructions.
1690 These types of expressions are lvalues in RTL; they may appear
1691 on the left side of an assignment, indicating insertion of a value
1692 into the specified bit field.
1694 @table @code
1695 @findex sign_extract
1696 @cindex @code{BITS_BIG_ENDIAN}, effect on @code{sign_extract}
1697 @item (sign_extract:@var{m} @var{loc} @var{size} @var{pos})
1698 This represents a reference to a sign-extended bit field contained or
1699 starting in @var{loc} (a memory or register reference).  The bit field
1700 is @var{size} bits wide and starts at bit @var{pos}.  The compilation
1701 option @code{BITS_BIG_ENDIAN} says which end of the memory unit
1702 @var{pos} counts from.
1704 If @var{loc} is in memory, its mode must be a single-byte integer mode.
1705 If @var{loc} is in a register, the mode to use is specified by the
1706 operand of the @code{insv} or @code{extv} pattern
1707 (@pxref{Standard Names}) and is usually a full-word integer mode,
1708 which is the default if none is specified.
1710 The mode of @var{pos} is machine-specific and is also specified
1711 in the @code{insv} or @code{extv} pattern.
1713 The mode @var{m} is the same as the mode that would be used for
1714 @var{loc} if it were a register.
1716 @findex zero_extract
1717 @item (zero_extract:@var{m} @var{loc} @var{size} @var{pos})
1718 Like @code{sign_extract} but refers to an unsigned or zero-extended
1719 bit field.  The same sequence of bits are extracted, but they
1720 are filled to an entire word with zeros instead of by sign-extension.
1721 @end table
1723 @node Vector Operations
1724 @section Vector Operations
1725 @cindex vector operations
1727 All normal rtl expressions can be used with vector modes; they are
1728 interpreted as operating on each part of the vector independently.
1729 Additionally, there are a few new expressions to describe specific vector
1730 operations.
1732 @table @code
1733 @findex vec_merge
1734 @item (vec_merge:@var{m} @var{vec1} @var{vec2} @var{items})
1735 This describes a merge operation between two vectors.  The result is a vector
1736 of mode @var{m}; its elements are selected from either @var{vec1} or
1737 @var{vec2}.  Which elements are selected is described by @var{items}, which
1738 is a bit mask represented by a @code{const_int}; a zero bit indicates the
1739 corresponding element in the result vector is taken from @var{vec2} while
1740 a set bit indicates it is taken from @var{vec1}.
1742 @findex vec_select
1743 @item (vec_select:@var{m} @var{vec1} @var{selection})
1744 This describes an operation that selects parts of a vector.  @var{vec1} is
1745 the source vector, @var{selection} is a @code{parallel} that contains a
1746 @code{const_int} for each of the subparts of the result vector, giving the
1747 number of the source subpart that should be stored into it.
1749 @findex vec_concat
1750 @item (vec_concat:@var{m} @var{vec1} @var{vec2})
1751 Describes a vector concat operation.  The result is a concatenation of the
1752 vectors @var{vec1} and @var{vec2}; its length is the sum of the lengths of
1753 the two inputs.
1755 @findex vec_const
1756 @item (vec_const:@var{m} @var{subparts})
1757 This describes a constant vector.  @var{subparts} is a @code{parallel} that
1758 contains a constant for each of the subparts of the vector.
1760 @findex vec_duplicate
1761 @item (vec_duplicate:@var{m} @var{vec})
1762 This operation converts a small vector into a larger one by duplicating the
1763 input values.  The output vector mode must have the same submodes as the
1764 input vector mode, and the number of output parts must be an integer multiple
1765 of the number of input parts.
1767 @end table
1769 @node Conversions
1770 @section Conversions
1771 @cindex conversions
1772 @cindex machine mode conversions
1774 All conversions between machine modes must be represented by
1775 explicit conversion operations.  For example, an expression
1776 which is the sum of a byte and a full word cannot be written as
1777 @code{(plus:SI (reg:QI 34) (reg:SI 80))} because the @code{plus}
1778 operation requires two operands of the same machine mode.
1779 Therefore, the byte-sized operand is enclosed in a conversion
1780 operation, as in
1782 @example
1783 (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
1784 @end example
1786 The conversion operation is not a mere placeholder, because there
1787 may be more than one way of converting from a given starting mode
1788 to the desired final mode.  The conversion operation code says how
1789 to do it.
1791 For all conversion operations, @var{x} must not be @code{VOIDmode}
1792 because the mode in which to do the conversion would not be known.
1793 The conversion must either be done at compile-time or @var{x}
1794 must be placed into a register.
1796 @table @code
1797 @findex sign_extend
1798 @item (sign_extend:@var{m} @var{x})
1799 Represents the result of sign-extending the value @var{x}
1800 to machine mode @var{m}.  @var{m} must be a fixed-point mode
1801 and @var{x} a fixed-point value of a mode narrower than @var{m}.
1803 @findex zero_extend
1804 @item (zero_extend:@var{m} @var{x})
1805 Represents the result of zero-extending the value @var{x}
1806 to machine mode @var{m}.  @var{m} must be a fixed-point mode
1807 and @var{x} a fixed-point value of a mode narrower than @var{m}.
1809 @findex float_extend
1810 @item (float_extend:@var{m} @var{x})
1811 Represents the result of extending the value @var{x}
1812 to machine mode @var{m}.  @var{m} must be a floating point mode
1813 and @var{x} a floating point value of a mode narrower than @var{m}.
1815 @findex truncate
1816 @item (truncate:@var{m} @var{x})
1817 Represents the result of truncating the value @var{x}
1818 to machine mode @var{m}.  @var{m} must be a fixed-point mode
1819 and @var{x} a fixed-point value of a mode wider than @var{m}.
1821 @findex ss_truncate
1822 @item (ss_truncate:@var{m} @var{x})
1823 Represents the result of truncating the value @var{x}
1824 to machine mode @var{m}, using signed saturation in the case of
1825 overflow.  Both @var{m} and the mode of @var{x} must be fixed-point
1826 modes.
1828 @findex us_truncate
1829 @item (us_truncate:@var{m} @var{x})
1830 Represents the result of truncating the value @var{x}
1831 to machine mode @var{m}, using unsigned saturation in the case of
1832 overflow.  Both @var{m} and the mode of @var{x} must be fixed-point
1833 modes.
1835 @findex float_truncate
1836 @item (float_truncate:@var{m} @var{x})
1837 Represents the result of truncating the value @var{x}
1838 to machine mode @var{m}.  @var{m} must be a floating point mode
1839 and @var{x} a floating point value of a mode wider than @var{m}.
1841 @findex float
1842 @item (float:@var{m} @var{x})
1843 Represents the result of converting fixed point value @var{x},
1844 regarded as signed, to floating point mode @var{m}.
1846 @findex unsigned_float
1847 @item (unsigned_float:@var{m} @var{x})
1848 Represents the result of converting fixed point value @var{x},
1849 regarded as unsigned, to floating point mode @var{m}.
1851 @findex fix
1852 @item (fix:@var{m} @var{x})
1853 When @var{m} is a fixed point mode, represents the result of
1854 converting floating point value @var{x} to mode @var{m}, regarded as
1855 signed.  How rounding is done is not specified, so this operation may
1856 be used validly in compiling C code only for integer-valued operands.
1858 @findex unsigned_fix
1859 @item (unsigned_fix:@var{m} @var{x})
1860 Represents the result of converting floating point value @var{x} to
1861 fixed point mode @var{m}, regarded as unsigned.  How rounding is done
1862 is not specified.
1864 @findex fix
1865 @item (fix:@var{m} @var{x})
1866 When @var{m} is a floating point mode, represents the result of
1867 converting floating point value @var{x} (valid for mode @var{m}) to an
1868 integer, still represented in floating point mode @var{m}, by rounding
1869 towards zero.
1870 @end table
1872 @node RTL Declarations
1873 @section Declarations
1874 @cindex RTL declarations
1875 @cindex declarations, RTL
1877 Declaration expression codes do not represent arithmetic operations
1878 but rather state assertions about their operands.
1880 @table @code
1881 @findex strict_low_part
1882 @cindex @code{subreg}, in @code{strict_low_part}
1883 @item (strict_low_part (subreg:@var{m} (reg:@var{n} @var{r}) 0))
1884 This expression code is used in only one context: as the destination operand of a
1885 @code{set} expression.  In addition, the operand of this expression
1886 must be a non-paradoxical @code{subreg} expression.
1888 The presence of @code{strict_low_part} says that the part of the
1889 register which is meaningful in mode @var{n}, but is not part of
1890 mode @var{m}, is not to be altered.  Normally, an assignment to such
1891 a subreg is allowed to have undefined effects on the rest of the
1892 register when @var{m} is less than a word.
1893 @end table
1895 @node Side Effects
1896 @section Side Effect Expressions
1897 @cindex RTL side effect expressions
1899 The expression codes described so far represent values, not actions.
1900 But machine instructions never produce values; they are meaningful
1901 only for their side effects on the state of the machine.  Special
1902 expression codes are used to represent side effects.
1904 The body of an instruction is always one of these side effect codes;
1905 the codes described above, which represent values, appear only as
1906 the operands of these.
1908 @table @code
1909 @findex set
1910 @item (set @var{lval} @var{x})
1911 Represents the action of storing the value of @var{x} into the place
1912 represented by @var{lval}.  @var{lval} must be an expression
1913 representing a place that can be stored in: @code{reg} (or
1914 @code{subreg} or @code{strict_low_part}), @code{mem}, @code{pc} or
1915 @code{cc0}.@refill
1917 If @var{lval} is a @code{reg}, @code{subreg} or @code{mem}, it has a
1918 machine mode; then @var{x} must be valid for that mode.@refill
1920 If @var{lval} is a @code{reg} whose machine mode is less than the full
1921 width of the register, then it means that the part of the register
1922 specified by the machine mode is given the specified value and the
1923 rest of the register receives an undefined value.  Likewise, if
1924 @var{lval} is a @code{subreg} whose machine mode is narrower than
1925 the mode of the register, the rest of the register can be changed in
1926 an undefined way.
1928 If @var{lval} is a @code{strict_low_part} of a @code{subreg}, then the
1929 part of the register specified by the machine mode of the
1930 @code{subreg} is given the value @var{x} and the rest of the register
1931 is not changed.@refill
1933 If @var{lval} is @code{(cc0)}, it has no machine mode, and @var{x} may
1934 be either a @code{compare} expression or a value that may have any mode.
1935 The latter case represents a ``test'' instruction.  The expression
1936 @code{(set (cc0) (reg:@var{m} @var{n}))} is equivalent to
1937 @code{(set (cc0) (compare (reg:@var{m} @var{n}) (const_int 0)))}.
1938 Use the former expression to save space during the compilation.
1940 @cindex jump instructions and @code{set}
1941 @cindex @code{if_then_else} usage
1942 If @var{lval} is @code{(pc)}, we have a jump instruction, and the
1943 possibilities for @var{x} are very limited.  It may be a
1944 @code{label_ref} expression (unconditional jump).  It may be an
1945 @code{if_then_else} (conditional jump), in which case either the
1946 second or the third operand must be @code{(pc)} (for the case which
1947 does not jump) and the other of the two must be a @code{label_ref}
1948 (for the case which does jump).  @var{x} may also be a @code{mem} or
1949 @code{(plus:SI (pc) @var{y})}, where @var{y} may be a @code{reg} or a
1950 @code{mem}; these unusual patterns are used to represent jumps through
1951 branch tables.@refill
1953 If @var{lval} is neither @code{(cc0)} nor @code{(pc)}, the mode of
1954 @var{lval} must not be @code{VOIDmode} and the mode of @var{x} must be
1955 valid for the mode of @var{lval}.
1957 @findex SET_DEST
1958 @findex SET_SRC
1959 @var{lval} is customarily accessed with the @code{SET_DEST} macro and 
1960 @var{x} with the @code{SET_SRC} macro.
1962 @findex return
1963 @item (return)
1964 As the sole expression in a pattern, represents a return from the
1965 current function, on machines where this can be done with one
1966 instruction, such as Vaxes.  On machines where a multi-instruction
1967 ``epilogue'' must be executed in order to return from the function,
1968 returning is done by jumping to a label which precedes the epilogue, and
1969 the @code{return} expression code is never used.
1971 Inside an @code{if_then_else} expression, represents the value to be
1972 placed in @code{pc} to return to the caller.
1974 Note that an insn pattern of @code{(return)} is logically equivalent to
1975 @code{(set (pc) (return))}, but the latter form is never used.
1977 @findex call
1978 @item (call @var{function} @var{nargs})
1979 Represents a function call.  @var{function} is a @code{mem} expression
1980 whose address is the address of the function to be called.
1981 @var{nargs} is an expression which can be used for two purposes: on
1982 some machines it represents the number of bytes of stack argument; on
1983 others, it represents the number of argument registers.
1985 Each machine has a standard machine mode which @var{function} must
1986 have.  The machine description defines macro @code{FUNCTION_MODE} to
1987 expand into the requisite mode name.  The purpose of this mode is to
1988 specify what kind of addressing is allowed, on machines where the
1989 allowed kinds of addressing depend on the machine mode being
1990 addressed.
1992 @findex clobber
1993 @item (clobber @var{x})
1994 Represents the storing or possible storing of an unpredictable,
1995 undescribed value into @var{x}, which must be a @code{reg},
1996 @code{scratch} or @code{mem} expression.
1998 One place this is used is in string instructions that store standard
1999 values into particular hard registers.  It may not be worth the
2000 trouble to describe the values that are stored, but it is essential to
2001 inform the compiler that the registers will be altered, lest it
2002 attempt to keep data in them across the string instruction.
2004 If @var{x} is @code{(mem:BLK (const_int 0))}, it means that all memory
2005 locations must be presumed clobbered.
2007 Note that the machine description classifies certain hard registers as
2008 ``call-clobbered''.  All function call instructions are assumed by
2009 default to clobber these registers, so there is no need to use
2010 @code{clobber} expressions to indicate this fact.  Also, each function
2011 call is assumed to have the potential to alter any memory location,
2012 unless the function is declared @code{const}.
2014 If the last group of expressions in a @code{parallel} are each a
2015 @code{clobber} expression whose arguments are @code{reg} or
2016 @code{match_scratch} (@pxref{RTL Template}) expressions, the combiner
2017 phase can add the appropriate @code{clobber} expressions to an insn it
2018 has constructed when doing so will cause a pattern to be matched.
2020 This feature can be used, for example, on a machine that whose multiply
2021 and add instructions don't use an MQ register but which has an
2022 add-accumulate instruction that does clobber the MQ register.  Similarly,
2023 a combined instruction might require a temporary register while the
2024 constituent instructions might not.
2026 When a @code{clobber} expression for a register appears inside a
2027 @code{parallel} with other side effects, the register allocator
2028 guarantees that the register is unoccupied both before and after that
2029 insn.  However, the reload phase may allocate a register used for one of
2030 the inputs unless the @samp{&} constraint is specified for the selected
2031 alternative (@pxref{Modifiers}).  You can clobber either a specific hard
2032 register, a pseudo register, or a @code{scratch} expression; in the
2033 latter two cases, GNU CC will allocate a hard register that is available
2034 there for use as a temporary.
2036 For instructions that require a temporary register, you should use
2037 @code{scratch} instead of a pseudo-register because this will allow the
2038 combiner phase to add the @code{clobber} when required.  You do this by
2039 coding (@code{clobber} (@code{match_scratch} @dots{})).  If you do
2040 clobber a pseudo register, use one which appears nowhere else---generate
2041 a new one each time.  Otherwise, you may confuse CSE.
2043 There is one other known use for clobbering a pseudo register in a
2044 @code{parallel}: when one of the input operands of the insn is also
2045 clobbered by the insn.  In this case, using the same pseudo register in
2046 the clobber and elsewhere in the insn produces the expected results.
2048 @findex use
2049 @item (use @var{x})
2050 Represents the use of the value of @var{x}.  It indicates that the
2051 value in @var{x} at this point in the program is needed, even though
2052 it may not be apparent why this is so.  Therefore, the compiler will
2053 not attempt to delete previous instructions whose only effect is to
2054 store a value in @var{x}.  @var{x} must be a @code{reg} expression.
2056 During the reload phase, an insn that has a @code{use} as pattern
2057 can carry a reg_equal note.  These @code{use} insns will be deleted
2058 before the reload phase exits.
2060 During the delayed branch scheduling phase, @var{x} may be an insn.
2061 This indicates that @var{x} previously was located at this place in the
2062 code and its data dependencies need to be taken into account.  These
2063 @code{use} insns will be deleted before the delayed branch scheduling
2064 phase exits.
2066 @findex parallel
2067 @item (parallel [@var{x0} @var{x1} @dots{}])
2068 Represents several side effects performed in parallel.  The square
2069 brackets stand for a vector; the operand of @code{parallel} is a
2070 vector of expressions.  @var{x0}, @var{x1} and so on are individual
2071 side effect expressions---expressions of code @code{set}, @code{call},
2072 @code{return}, @code{clobber} or @code{use}.@refill
2074 ``In parallel'' means that first all the values used in the individual
2075 side-effects are computed, and second all the actual side-effects are
2076 performed.  For example,
2078 @example
2079 (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
2080            (set (mem:SI (reg:SI 1)) (reg:SI 1))])
2081 @end example
2083 @noindent
2084 says unambiguously that the values of hard register 1 and the memory
2085 location addressed by it are interchanged.  In both places where
2086 @code{(reg:SI 1)} appears as a memory address it refers to the value
2087 in register 1 @emph{before} the execution of the insn.
2089 It follows that it is @emph{incorrect} to use @code{parallel} and
2090 expect the result of one @code{set} to be available for the next one.
2091 For example, people sometimes attempt to represent a jump-if-zero
2092 instruction this way:
2094 @example
2095 (parallel [(set (cc0) (reg:SI 34))
2096            (set (pc) (if_then_else
2097                         (eq (cc0) (const_int 0))
2098                         (label_ref @dots{})
2099                         (pc)))])
2100 @end example
2102 @noindent
2103 But this is incorrect, because it says that the jump condition depends
2104 on the condition code value @emph{before} this instruction, not on the
2105 new value that is set by this instruction.
2107 @cindex peephole optimization, RTL representation
2108 Peephole optimization, which takes place together with final assembly
2109 code output, can produce insns whose patterns consist of a @code{parallel}
2110 whose elements are the operands needed to output the resulting
2111 assembler code---often @code{reg}, @code{mem} or constant expressions.
2112 This would not be well-formed RTL at any other stage in compilation,
2113 but it is ok then because no further optimization remains to be done.
2114 However, the definition of the macro @code{NOTICE_UPDATE_CC}, if
2115 any, must deal with such insns if you define any peephole optimizations.
2117 @findex sequence
2118 @item (sequence [@var{insns} @dots{}])
2119 Represents a sequence of insns.  Each of the @var{insns} that appears
2120 in the vector is suitable for appearing in the chain of insns, so it
2121 must be an @code{insn}, @code{jump_insn}, @code{call_insn},
2122 @code{code_label}, @code{barrier} or @code{note}.
2124 A @code{sequence} RTX is never placed in an actual insn during RTL
2125 generation.  It represents the sequence of insns that result from a
2126 @code{define_expand} @emph{before} those insns are passed to
2127 @code{emit_insn} to insert them in the chain of insns.  When actually
2128 inserted, the individual sub-insns are separated out and the
2129 @code{sequence} is forgotten.
2131 After delay-slot scheduling is completed, an insn and all the insns that
2132 reside in its delay slots are grouped together into a @code{sequence}.
2133 The insn requiring the delay slot is the first insn in the vector;
2134 subsequent insns are to be placed in the delay slot.
2136 @code{INSN_ANNULLED_BRANCH_P} is set on an insn in a delay slot to
2137 indicate that a branch insn should be used that will conditionally annul
2138 the effect of the insns in the delay slots.  In such a case,
2139 @code{INSN_FROM_TARGET_P} indicates that the insn is from the target of
2140 the branch and should be executed only if the branch is taken; otherwise
2141 the insn should be executed only if the branch is not taken.
2142 @xref{Delay Slots}.
2143 @end table
2145 These expression codes appear in place of a side effect, as the body of
2146 an insn, though strictly speaking they do not always describe side
2147 effects as such:
2149 @table @code
2150 @findex asm_input
2151 @item (asm_input @var{s})
2152 Represents literal assembler code as described by the string @var{s}.
2154 @findex unspec
2155 @findex unspec_volatile
2156 @item (unspec [@var{operands} @dots{}] @var{index})
2157 @itemx (unspec_volatile [@var{operands} @dots{}] @var{index})
2158 Represents a machine-specific operation on @var{operands}.  @var{index}
2159 selects between multiple machine-specific operations.
2160 @code{unspec_volatile} is used for volatile operations and operations
2161 that may trap; @code{unspec} is used for other operations.
2163 These codes may appear inside a @code{pattern} of an
2164 insn, inside a @code{parallel}, or inside an expression.
2166 @findex addr_vec
2167 @item (addr_vec:@var{m} [@var{lr0} @var{lr1} @dots{}])
2168 Represents a table of jump addresses.  The vector elements @var{lr0},
2169 etc., are @code{label_ref} expressions.  The mode @var{m} specifies
2170 how much space is given to each address; normally @var{m} would be
2171 @code{Pmode}.
2173 @findex addr_diff_vec
2174 @item (addr_diff_vec:@var{m} @var{base} [@var{lr0} @var{lr1} @dots{}] @var{min} @var{max} @var{flags})
2175 Represents a table of jump addresses expressed as offsets from
2176 @var{base}.  The vector elements @var{lr0}, etc., are @code{label_ref}
2177 expressions and so is @var{base}.  The mode @var{m} specifies how much
2178 space is given to each address-difference.  @var{min} and @var{max}
2179 are set up by branch shortening and hold a label with a minimum and a
2180 maximum address, respectively.  @var{flags} indicates the relative
2181 position of @var{base}, @var{min} and @var{max} to the cointaining insn
2182 and of @var{min} and @var{max} to @var{base}.  See rtl.def for details.@refill
2183 @end table
2185 @node Incdec
2186 @section Embedded Side-Effects on Addresses
2187 @cindex RTL preincrement
2188 @cindex RTL postincrement
2189 @cindex RTL predecrement
2190 @cindex RTL postdecrement
2192 Six special side-effect expression codes appear as memory addresses.
2194 @table @code
2195 @findex pre_dec
2196 @item (pre_dec:@var{m} @var{x})
2197 Represents the side effect of decrementing @var{x} by a standard
2198 amount and represents also the value that @var{x} has after being
2199 decremented.  @var{x} must be a @code{reg} or @code{mem}, but most
2200 machines allow only a @code{reg}.  @var{m} must be the machine mode
2201 for pointers on the machine in use.  The amount @var{x} is decremented
2202 by is the length in bytes of the machine mode of the containing memory
2203 reference of which this expression serves as the address.  Here is an
2204 example of its use:@refill
2206 @example
2207 (mem:DF (pre_dec:SI (reg:SI 39)))
2208 @end example
2210 @noindent
2211 This says to decrement pseudo register 39 by the length of a @code{DFmode}
2212 value and use the result to address a @code{DFmode} value.
2214 @findex pre_inc
2215 @item (pre_inc:@var{m} @var{x})
2216 Similar, but specifies incrementing @var{x} instead of decrementing it.
2218 @findex post_dec
2219 @item (post_dec:@var{m} @var{x})
2220 Represents the same side effect as @code{pre_dec} but a different
2221 value.  The value represented here is the value @var{x} has @i{before}
2222 being decremented.
2224 @findex post_inc
2225 @item (post_inc:@var{m} @var{x})
2226 Similar, but specifies incrementing @var{x} instead of decrementing it.
2228 @findex post_modify
2229 @item (post_modify:@var{m} @var{x} @var{y})
2231 Represents the side effect of setting @var{x} to @var{y} and
2232 represents @var{x} before @var{x} is modified.  @var{x} must be a
2233 @code{reg} or @code{mem}, but most machines allow only a @code{reg}.
2234 @var{m} must be the machine mode for pointers on the machine in use.
2235 The amount @var{x} is decremented by is the length in bytes of the
2236 machine mode of the containing memory reference of which this expression
2237 serves as the address.  Note that this is not currently implemented.
2239 The expression @var{y} must be one of three forms:
2240 @table @code
2241 @code{(plus:@var{m} @var{x} @var{z})},
2242 @code{(minus:@var{m} @var{x} @var{z})}, or
2243 @code{(plus:@var{m} @var{x} @var{i})},
2244 @end table
2245 where @var{z} is an index register and @var{i} is a constant.
2247 Here is an example of its use:@refill
2249 @example
2250 (mem:SF (post_modify:SI (reg:SI 42) (plus (reg:SI 42) (reg:SI 48))))
2251 @end example
2253 This says to modify pseudo register 42 by adding the contents of pseudo
2254 register 48 to it, after the use of what ever 42 points to.
2256 @findex post_modify
2257 @item (pre_modify:@var{m} @var{x} @var{expr})
2258 Similar except side effects happen before the use.
2259 @end table
2261 These embedded side effect expressions must be used with care.  Instruction
2262 patterns may not use them.  Until the @samp{flow} pass of the compiler,
2263 they may occur only to represent pushes onto the stack.  The @samp{flow}
2264 pass finds cases where registers are incremented or decremented in one
2265 instruction and used as an address shortly before or after; these cases are
2266 then transformed to use pre- or post-increment or -decrement.
2268 If a register used as the operand of these expressions is used in
2269 another address in an insn, the original value of the register is used.
2270 Uses of the register outside of an address are not permitted within the
2271 same insn as a use in an embedded side effect expression because such
2272 insns behave differently on different machines and hence must be treated
2273 as ambiguous and disallowed.
2275 An instruction that can be represented with an embedded side effect
2276 could also be represented using @code{parallel} containing an additional
2277 @code{set} to describe how the address register is altered.  This is not
2278 done because machines that allow these operations at all typically
2279 allow them wherever a memory address is called for.  Describing them as
2280 additional parallel stores would require doubling the number of entries
2281 in the machine description.
2283 @node Assembler
2284 @section Assembler Instructions as Expressions
2285 @cindex assembler instructions in RTL
2287 @cindex @code{asm_operands}, usage
2288 The RTX code @code{asm_operands} represents a value produced by a
2289 user-specified assembler instruction.  It is used to represent
2290 an @code{asm} statement with arguments.  An @code{asm} statement with
2291 a single output operand, like this:
2293 @smallexample
2294 asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
2295 @end smallexample
2297 @noindent
2298 is represented using a single @code{asm_operands} RTX which represents
2299 the value that is stored in @code{outputvar}:
2301 @smallexample
2302 (set @var{rtx-for-outputvar}
2303      (asm_operands "foo %1,%2,%0" "a" 0
2304                    [@var{rtx-for-addition-result} @var{rtx-for-*z}]
2305                    [(asm_input:@var{m1} "g")
2306                     (asm_input:@var{m2} "di")]))
2307 @end smallexample
2309 @noindent
2310 Here the operands of the @code{asm_operands} RTX are the assembler
2311 template string, the output-operand's constraint, the index-number of the
2312 output operand among the output operands specified, a vector of input
2313 operand RTX's, and a vector of input-operand modes and constraints.  The
2314 mode @var{m1} is the mode of the sum @code{x+y}; @var{m2} is that of
2315 @code{*z}.
2317 When an @code{asm} statement has multiple output values, its insn has
2318 several such @code{set} RTX's inside of a @code{parallel}.  Each @code{set}
2319 contains a @code{asm_operands}; all of these share the same assembler
2320 template and vectors, but each contains the constraint for the respective
2321 output operand.  They are also distinguished by the output-operand index
2322 number, which is 0, 1, @dots{} for successive output operands.
2324 @node Insns
2325 @section Insns
2326 @cindex insns
2328 The RTL representation of the code for a function is a doubly-linked
2329 chain of objects called @dfn{insns}.  Insns are expressions with
2330 special codes that are used for no other purpose.  Some insns are
2331 actual instructions; others represent dispatch tables for @code{switch}
2332 statements; others represent labels to jump to or various sorts of
2333 declarative information.
2335 In addition to its own specific data, each insn must have a unique
2336 id-number that distinguishes it from all other insns in the current
2337 function (after delayed branch scheduling, copies of an insn with the
2338 same id-number may be present in multiple places in a function, but
2339 these copies will always be identical and will only appear inside a
2340 @code{sequence}), and chain pointers to the preceding and following
2341 insns.  These three fields occupy the same position in every insn,
2342 independent of the expression code of the insn.  They could be accessed
2343 with @code{XEXP} and @code{XINT}, but instead three special macros are
2344 always used:
2346 @table @code
2347 @findex INSN_UID
2348 @item INSN_UID (@var{i})
2349 Accesses the unique id of insn @var{i}.
2351 @findex PREV_INSN
2352 @item PREV_INSN (@var{i})
2353 Accesses the chain pointer to the insn preceding @var{i}.
2354 If @var{i} is the first insn, this is a null pointer.
2356 @findex NEXT_INSN
2357 @item NEXT_INSN (@var{i})
2358 Accesses the chain pointer to the insn following @var{i}.
2359 If @var{i} is the last insn, this is a null pointer.
2360 @end table
2362 @findex get_insns
2363 @findex get_last_insn
2364 The first insn in the chain is obtained by calling @code{get_insns}; the
2365 last insn is the result of calling @code{get_last_insn}.  Within the
2366 chain delimited by these insns, the @code{NEXT_INSN} and
2367 @code{PREV_INSN} pointers must always correspond: if @var{insn} is not
2368 the first insn,
2370 @example
2371 NEXT_INSN (PREV_INSN (@var{insn})) == @var{insn}
2372 @end example
2374 @noindent
2375 is always true and if @var{insn} is not the last insn,
2377 @example
2378 PREV_INSN (NEXT_INSN (@var{insn})) == @var{insn}
2379 @end example
2381 @noindent
2382 is always true.
2384 After delay slot scheduling, some of the insns in the chain might be
2385 @code{sequence} expressions, which contain a vector of insns.  The value
2386 of @code{NEXT_INSN} in all but the last of these insns is the next insn
2387 in the vector; the value of @code{NEXT_INSN} of the last insn in the vector
2388 is the same as the value of @code{NEXT_INSN} for the @code{sequence} in
2389 which it is contained.  Similar rules apply for @code{PREV_INSN}.
2391 This means that the above invariants are not necessarily true for insns
2392 inside @code{sequence} expressions.  Specifically, if @var{insn} is the
2393 first insn in a @code{sequence}, @code{NEXT_INSN (PREV_INSN (@var{insn}))}
2394 is the insn containing the @code{sequence} expression, as is the value
2395 of @code{PREV_INSN (NEXT_INSN (@var{insn}))} is @var{insn} is the last
2396 insn in the @code{sequence} expression.  You can use these expressions
2397 to find the containing @code{sequence} expression.@refill
2399 Every insn has one of the following six expression codes:
2401 @table @code
2402 @findex insn
2403 @item insn
2404 The expression code @code{insn} is used for instructions that do not jump
2405 and do not do function calls.  @code{sequence} expressions are always
2406 contained in insns with code @code{insn} even if one of those insns
2407 should jump or do function calls.
2409 Insns with code @code{insn} have four additional fields beyond the three
2410 mandatory ones listed above.  These four are described in a table below.
2412 @findex jump_insn
2413 @item jump_insn
2414 The expression code @code{jump_insn} is used for instructions that may
2415 jump (or, more generally, may contain @code{label_ref} expressions).  If
2416 there is an instruction to return from the current function, it is
2417 recorded as a @code{jump_insn}.
2419 @findex JUMP_LABEL
2420 @code{jump_insn} insns have the same extra fields as @code{insn} insns,
2421 accessed in the same way and in addition contain a field
2422 @code{JUMP_LABEL} which is defined once jump optimization has completed.
2424 For simple conditional and unconditional jumps, this field contains the
2425 @code{code_label} to which this insn will (possibly conditionally)
2426 branch.  In a more complex jump, @code{JUMP_LABEL} records one of the
2427 labels that the insn refers to; the only way to find the others
2428 is to scan the entire body of the insn.
2430 Return insns count as jumps, but since they do not refer to any labels,
2431 they have zero in the @code{JUMP_LABEL} field.
2433 @findex call_insn
2434 @item call_insn
2435 The expression code @code{call_insn} is used for instructions that may do
2436 function calls.  It is important to distinguish these instructions because
2437 they imply that certain registers and memory locations may be altered
2438 unpredictably.
2440 @findex CALL_INSN_FUNCTION_USAGE
2441 @code{call_insn} insns have the same extra fields as @code{insn} insns,
2442 accessed in the same way and in addition contain a field
2443 @code{CALL_INSN_FUNCTION_USAGE}, which contains a list (chain of
2444 @code{expr_list} expressions) containing @code{use} and @code{clobber}
2445 expressions that denote hard registers used or clobbered by the called
2446 function.  A register specified in a @code{clobber} in this list is
2447 modified @emph{after} the execution of the @code{call_insn}, while a
2448 register in a @code{clobber} in the body of the @code{call_insn} is
2449 clobbered before the insn completes execution.  @code{clobber}
2450 expressions in this list augment registers specified in
2451 @code{CALL_USED_REGISTERS} (@pxref{Register Basics}).
2453 @findex code_label
2454 @findex CODE_LABEL_NUMBER
2455 @item code_label
2456 A @code{code_label} insn represents a label that a jump insn can jump
2457 to.  It contains two special fields of data in addition to the three
2458 standard ones.  @code{CODE_LABEL_NUMBER} is used to hold the @dfn{label
2459 number}, a number that identifies this label uniquely among all the
2460 labels in the compilation (not just in the current function).
2461 Ultimately, the label is represented in the assembler output as an
2462 assembler label, usually of the form @samp{L@var{n}} where @var{n} is
2463 the label number.
2465 When a @code{code_label} appears in an RTL expression, it normally
2466 appears within a @code{label_ref} which represents the address of
2467 the label, as a number.
2469 @findex LABEL_NUSES
2470 The field @code{LABEL_NUSES} is only defined once the jump optimization
2471 phase is completed and contains the number of times this label is
2472 referenced in the current function.
2474 @findex LABEL_ALTERNATE_NAME
2475 The field @code{LABEL_ALTERNATE_NAME} is used to associate a name with
2476 a @code{code_label}.  If this field is defined, the alternate name will
2477 be emitted instead of an internally generated label name.
2479 @findex barrier
2480 @item barrier
2481 Barriers are placed in the instruction stream when control cannot flow
2482 past them.  They are placed after unconditional jump instructions to
2483 indicate that the jumps are unconditional and after calls to
2484 @code{volatile} functions, which do not return (e.g., @code{exit}).
2485 They contain no information beyond the three standard fields.
2487 @findex note
2488 @findex NOTE_LINE_NUMBER
2489 @findex NOTE_SOURCE_FILE
2490 @item note
2491 @code{note} insns are used to represent additional debugging and
2492 declarative information.  They contain two nonstandard fields, an
2493 integer which is accessed with the macro @code{NOTE_LINE_NUMBER} and a
2494 string accessed with @code{NOTE_SOURCE_FILE}.
2496 If @code{NOTE_LINE_NUMBER} is positive, the note represents the
2497 position of a source line and @code{NOTE_SOURCE_FILE} is the source file name
2498 that the line came from.  These notes control generation of line
2499 number data in the assembler output.
2501 Otherwise, @code{NOTE_LINE_NUMBER} is not really a line number but a
2502 code with one of the following values (and @code{NOTE_SOURCE_FILE}
2503 must contain a null pointer):
2505 @table @code
2506 @findex NOTE_INSN_DELETED
2507 @item NOTE_INSN_DELETED
2508 Such a note is completely ignorable.  Some passes of the compiler
2509 delete insns by altering them into notes of this kind.
2511 @findex NOTE_INSN_BLOCK_BEG
2512 @findex NOTE_INSN_BLOCK_END
2513 @item NOTE_INSN_BLOCK_BEG
2514 @itemx NOTE_INSN_BLOCK_END
2515 These types of notes indicate the position of the beginning and end
2516 of a level of scoping of variable names.  They control the output
2517 of debugging information.
2519 @findex NOTE_INSN_EH_REGION_BEG
2520 @findex NOTE_INSN_EH_REGION_END
2521 @item NOTE_INSN_EH_REGION_BEG
2522 @itemx NOTE_INSN_EH_REGION_END
2523 These types of notes indicate the position of the beginning and end of a
2524 level of scoping for exception handling.  @code{NOTE_BLOCK_NUMBER}
2525 identifies which @code{CODE_LABEL} is associated with the given region.
2527 @findex NOTE_INSN_LOOP_BEG
2528 @findex NOTE_INSN_LOOP_END
2529 @item NOTE_INSN_LOOP_BEG
2530 @itemx NOTE_INSN_LOOP_END
2531 These types of notes indicate the position of the beginning and end
2532 of a @code{while} or @code{for} loop.  They enable the loop optimizer
2533 to find loops quickly.
2535 @findex NOTE_INSN_LOOP_CONT
2536 @item NOTE_INSN_LOOP_CONT
2537 Appears at the place in a loop that @code{continue} statements jump to.
2539 @findex NOTE_INSN_LOOP_VTOP
2540 @item NOTE_INSN_LOOP_VTOP
2541 This note indicates the place in a loop where the exit test begins for
2542 those loops in which the exit test has been duplicated.  This position
2543 becomes another virtual start of the loop when considering loop
2544 invariants. 
2546 @findex NOTE_INSN_FUNCTION_END
2547 @item NOTE_INSN_FUNCTION_END
2548 Appears near the end of the function body, just before the label that
2549 @code{return} statements jump to (on machine where a single instruction
2550 does not suffice for returning).  This note may be deleted by jump
2551 optimization.
2553 @findex NOTE_INSN_SETJMP
2554 @item NOTE_INSN_SETJMP
2555 Appears following each call to @code{setjmp} or a related function.
2556 @end table
2558 These codes are printed symbolically when they appear in debugging dumps.
2559 @end table
2561 @cindex @code{TImode}, in @code{insn}
2562 @cindex @code{HImode}, in @code{insn}
2563 @cindex @code{QImode}, in @code{insn}
2564 The machine mode of an insn is normally @code{VOIDmode}, but some
2565 phases use the mode for various purposes. 
2567 The common subexpression elimination pass sets the mode of an insn to
2568 @code{QImode} when it is the first insn in a block that has already
2569 been processed.
2571 The second Haifa scheduling pass, for targets that can multiple issue,
2572 sets the mode of an insn to @code{TImode} when it is believed that the
2573 instruction begins an issue group.  That is, when the instruction 
2574 cannot issue simultaneously with the previous.  This may be relied on
2575 by later passes, in particular machine-dependant reorg.
2577 Here is a table of the extra fields of @code{insn}, @code{jump_insn}
2578 and @code{call_insn} insns:
2580 @table @code
2581 @findex PATTERN
2582 @item PATTERN (@var{i})
2583 An expression for the side effect performed by this insn.  This must be
2584 one of the following codes: @code{set}, @code{call}, @code{use},
2585 @code{clobber}, @code{return}, @code{asm_input}, @code{asm_output},
2586 @code{addr_vec}, @code{addr_diff_vec}, @code{trap_if}, @code{unspec},
2587 @code{unspec_volatile}, @code{parallel}, or @code{sequence}.  If it is a @code{parallel},
2588 each element of the @code{parallel} must be one these codes, except that
2589 @code{parallel} expressions cannot be nested and @code{addr_vec} and
2590 @code{addr_diff_vec} are not permitted inside a @code{parallel} expression.
2592 @findex INSN_CODE
2593 @item INSN_CODE (@var{i})
2594 An integer that says which pattern in the machine description matches
2595 this insn, or -1 if the matching has not yet been attempted.
2597 Such matching is never attempted and this field remains -1 on an insn
2598 whose pattern consists of a single @code{use}, @code{clobber},
2599 @code{asm_input}, @code{addr_vec} or @code{addr_diff_vec} expression.
2601 @findex asm_noperands
2602 Matching is also never attempted on insns that result from an @code{asm}
2603 statement.  These contain at least one @code{asm_operands} expression.
2604 The function @code{asm_noperands} returns a non-negative value for
2605 such insns.
2607 In the debugging output, this field is printed as a number followed by
2608 a symbolic representation that locates the pattern in the @file{md}
2609 file as some small positive or negative offset from a named pattern.
2611 @findex LOG_LINKS
2612 @item LOG_LINKS (@var{i})
2613 A list (chain of @code{insn_list} expressions) giving information about
2614 dependencies between instructions within a basic block.  Neither a jump
2615 nor a label may come between the related insns.
2617 @findex REG_NOTES
2618 @item REG_NOTES (@var{i})
2619 A list (chain of @code{expr_list} and @code{insn_list} expressions)
2620 giving miscellaneous information about the insn.  It is often
2621 information pertaining to the registers used in this insn.
2622 @end table
2624 The @code{LOG_LINKS} field of an insn is a chain of @code{insn_list}
2625 expressions.  Each of these has two operands: the first is an insn,
2626 and the second is another @code{insn_list} expression (the next one in
2627 the chain).  The last @code{insn_list} in the chain has a null pointer
2628 as second operand.  The significant thing about the chain is which
2629 insns appear in it (as first operands of @code{insn_list}
2630 expressions).  Their order is not significant.
2632 This list is originally set up by the flow analysis pass; it is a null
2633 pointer until then.  Flow only adds links for those data dependencies
2634 which can be used for instruction combination.  For each insn, the flow
2635 analysis pass adds a link to insns which store into registers values
2636 that are used for the first time in this insn.  The instruction
2637 scheduling pass adds extra links so that every dependence will be
2638 represented.  Links represent data dependencies, antidependencies and
2639 output dependencies; the machine mode of the link distinguishes these
2640 three types: antidependencies have mode @code{REG_DEP_ANTI}, output
2641 dependencies have mode @code{REG_DEP_OUTPUT}, and data dependencies have
2642 mode @code{VOIDmode}.
2644 The @code{REG_NOTES} field of an insn is a chain similar to the
2645 @code{LOG_LINKS} field but it includes @code{expr_list} expressions in
2646 addition to @code{insn_list} expressions.  There are several kinds of
2647 register notes, which are distinguished by the machine mode, which in a
2648 register note is really understood as being an @code{enum reg_note}.
2649 The first operand @var{op} of the note is data whose meaning depends on
2650 the kind of note.
2652 @findex REG_NOTE_KIND
2653 @findex PUT_REG_NOTE_KIND
2654 The macro @code{REG_NOTE_KIND (@var{x})} returns the kind of
2655 register note.  Its counterpart, the macro @code{PUT_REG_NOTE_KIND
2656 (@var{x}, @var{newkind})} sets the register note type of @var{x} to be
2657 @var{newkind}.
2659 Register notes are of three classes: They may say something about an
2660 input to an insn, they may say something about an output of an insn, or
2661 they may create a linkage between two insns.  There are also a set
2662 of values that are only used in @code{LOG_LINKS}.
2664 These register notes annotate inputs to an insn:
2666 @table @code
2667 @findex REG_DEAD 
2668 @item REG_DEAD
2669 The value in @var{op} dies in this insn; that is to say, altering the
2670 value immediately after this insn would not affect the future behavior
2671 of the program.  
2673 This does not necessarily mean that the register @var{op} has no useful
2674 value after this insn since it may also be an output of the insn.  In
2675 such a case, however, a @code{REG_DEAD} note would be redundant and is
2676 usually not present until after the reload pass, but no code relies on
2677 this fact.
2679 @findex REG_INC
2680 @item REG_INC
2681 The register @var{op} is incremented (or decremented; at this level
2682 there is no distinction) by an embedded side effect inside this insn.
2683 This means it appears in a @code{post_inc}, @code{pre_inc},
2684 @code{post_dec} or @code{pre_dec} expression.
2686 @findex REG_NONNEG
2687 @item REG_NONNEG
2688 The register @var{op} is known to have a nonnegative value when this
2689 insn is reached.  This is used so that decrement and branch until zero
2690 instructions, such as the m68k dbra, can be matched.
2692 The @code{REG_NONNEG} note is added to insns only if the machine
2693 description has a @samp{decrement_and_branch_until_zero} pattern.
2695 @findex REG_NO_CONFLICT
2696 @item REG_NO_CONFLICT
2697 This insn does not cause a conflict between @var{op} and the item
2698 being set by this insn even though it might appear that it does.
2699 In other words, if the destination register and @var{op} could
2700 otherwise be assigned the same register, this insn does not
2701 prevent that assignment.
2703 Insns with this note are usually part of a block that begins with a
2704 @code{clobber} insn specifying a multi-word pseudo register (which will
2705 be the output of the block), a group of insns that each set one word of
2706 the value and have the @code{REG_NO_CONFLICT} note attached, and a final
2707 insn that copies the output to itself with an attached @code{REG_EQUAL}
2708 note giving the expression being computed.  This block is encapsulated
2709 with @code{REG_LIBCALL} and @code{REG_RETVAL} notes on the first and
2710 last insns, respectively.
2712 @findex REG_LABEL
2713 @item REG_LABEL
2714 This insn uses @var{op}, a @code{code_label}, but is not a
2715 @code{jump_insn}.  The presence of this note allows jump optimization to
2716 be aware that @var{op} is, in fact, being used.
2717 @end table
2719 The following notes describe attributes of outputs of an insn:
2721 @table @code
2722 @findex REG_EQUIV
2723 @findex REG_EQUAL
2724 @item REG_EQUIV
2725 @itemx REG_EQUAL
2726 This note is only valid on an insn that sets only one register and
2727 indicates that that register will be equal to @var{op} at run time; the
2728 scope of this equivalence differs between the two types of notes.  The
2729 value which the insn explicitly copies into the register may look
2730 different from @var{op}, but they will be equal at run time.  If the
2731 output of the single @code{set} is a @code{strict_low_part} expression,
2732 the note refers to the register that is contained in @code{SUBREG_REG}
2733 of the @code{subreg} expression.
2735 For @code{REG_EQUIV}, the register is equivalent to @var{op} throughout
2736 the entire function, and could validly be replaced in all its
2737 occurrences by @var{op}.  (``Validly'' here refers to the data flow of
2738 the program; simple replacement may make some insns invalid.)  For
2739 example, when a constant is loaded into a register that is never
2740 assigned any other value, this kind of note is used.
2742 When a parameter is copied into a pseudo-register at entry to a function,
2743 a note of this kind records that the register is equivalent to the stack
2744 slot where the parameter was passed.  Although in this case the register
2745 may be set by other insns, it is still valid to replace the register
2746 by the stack slot throughout the function.
2748 A @code{REG_EQUIV} note is also used on an instruction which copies a
2749 register parameter into a pseudo-register at entry to a function, if
2750 there is a stack slot where that parameter could be stored.  Although
2751 other insns may set the pseudo-register, it is valid for the compiler to
2752 replace the pseudo-register by stack slot throughout the function,
2753 provided the compiler ensures that the stack slot is properly
2754 initialized by making the replacement in the initial copy instruction as
2755 well.  This is used on machines for which the calling convention
2756 allocates stack space for register parameters.  See
2757 @code{REG_PARM_STACK_SPACE} in @ref{Stack Arguments}.
2759 In the case of @code{REG_EQUAL}, the register that is set by this insn
2760 will be equal to @var{op} at run time at the end of this insn but not
2761 necessarily elsewhere in the function.  In this case, @var{op}
2762 is typically an arithmetic expression.  For example, when a sequence of
2763 insns such as a library call is used to perform an arithmetic operation,
2764 this kind of note is attached to the insn that produces or copies the
2765 final value.
2767 These two notes are used in different ways by the compiler passes.
2768 @code{REG_EQUAL} is used by passes prior to register allocation (such as
2769 common subexpression elimination and loop optimization) to tell them how
2770 to think of that value.  @code{REG_EQUIV} notes are used by register
2771 allocation to indicate that there is an available substitute expression
2772 (either a constant or a @code{mem} expression for the location of a
2773 parameter on the stack) that may be used in place of a register if
2774 insufficient registers are available.
2776 Except for stack homes for parameters, which are indicated by a
2777 @code{REG_EQUIV} note and are not useful to the early optimization
2778 passes and pseudo registers that are equivalent to a memory location
2779 throughout there entire life, which is not detected until later in
2780 the compilation, all equivalences are initially indicated by an attached
2781 @code{REG_EQUAL} note.  In the early stages of register allocation, a
2782 @code{REG_EQUAL} note is changed into a @code{REG_EQUIV} note if
2783 @var{op} is a constant and the insn represents the only set of its
2784 destination register.
2786 Thus, compiler passes prior to register allocation need only check for
2787 @code{REG_EQUAL} notes and passes subsequent to register allocation
2788 need only check for @code{REG_EQUIV} notes.
2790 @findex REG_UNUSED
2791 @item REG_UNUSED
2792 The register @var{op} being set by this insn will not be used in a
2793 subsequent insn.  This differs from a @code{REG_DEAD} note, which
2794 indicates that the value in an input will not be used subsequently.
2795 These two notes are independent; both may be present for the same
2796 register.
2798 @findex REG_WAS_0
2799 @item REG_WAS_0
2800 The single output of this insn contained zero before this insn.
2801 @var{op} is the insn that set it to zero.  You can rely on this note if
2802 it is present and @var{op} has not been deleted or turned into a @code{note};
2803 its absence implies nothing.
2804 @end table
2806 These notes describe linkages between insns.  They occur in pairs: one
2807 insn has one of a pair of notes that points to a second insn, which has
2808 the inverse note pointing back to the first insn.
2810 @table @code
2811 @findex REG_RETVAL
2812 @item REG_RETVAL
2813 This insn copies the value of a multi-insn sequence (for example, a
2814 library call), and @var{op} is the first insn of the sequence (for a
2815 library call, the first insn that was generated to set up the arguments
2816 for the library call).
2818 Loop optimization uses this note to treat such a sequence as a single
2819 operation for code motion purposes and flow analysis uses this note to
2820 delete such sequences whose results are dead.
2822 A @code{REG_EQUAL} note will also usually be attached to this insn to 
2823 provide the expression being computed by the sequence.
2825 These notes will be deleted after reload, since they are no longer
2826 accurate or useful.
2828 @findex REG_LIBCALL
2829 @item REG_LIBCALL
2830 This is the inverse of @code{REG_RETVAL}: it is placed on the first
2831 insn of a multi-insn sequence, and it points to the last one.
2833 These notes are deleted after reload, since they are no longer useful or 
2834 accurate.
2836 @findex REG_CC_SETTER
2837 @findex REG_CC_USER
2838 @item REG_CC_SETTER
2839 @itemx REG_CC_USER
2840 On machines that use @code{cc0}, the insns which set and use @code{cc0}
2841 set and use @code{cc0} are adjacent.  However, when branch delay slot
2842 filling is done, this may no longer be true.  In this case a
2843 @code{REG_CC_USER} note will be placed on the insn setting @code{cc0} to
2844 point to the insn using @code{cc0} and a @code{REG_CC_SETTER} note will
2845 be placed on the insn using @code{cc0} to point to the insn setting
2846 @code{cc0}.@refill
2847 @end table
2849 These values are only used in the @code{LOG_LINKS} field, and indicate
2850 the type of dependency that each link represents.  Links which indicate
2851 a data dependence (a read after write dependence) do not use any code,
2852 they simply have mode @code{VOIDmode}, and are printed without any
2853 descriptive text.
2855 @table @code
2856 @findex REG_DEP_ANTI
2857 @item REG_DEP_ANTI
2858 This indicates an anti dependence (a write after read dependence).
2860 @findex REG_DEP_OUTPUT
2861 @item REG_DEP_OUTPUT
2862 This indicates an output dependence (a write after write dependence).
2863 @end table
2865 These notes describe information gathered from gcov profile data.  They
2866 are stored in the @code{REG_NOTES} field of an insn as an
2867 @code{expr_list}.
2869 @table @code
2870 @findex REG_EXEC_COUNT
2871 @item REG_EXEC_COUNT
2872 This is used to indicate the number of times a basic block was executed
2873 according to the profile data.  The note is attached to the first insn in
2874 the basic block.
2876 @findex REG_BR_PROB
2877 @item REG_BR_PROB
2878 This is used to specify the ratio of branches to non-branches of a
2879 branch insn according to the profile data.  The value is stored as a
2880 value between 0 and REG_BR_PROB_BASE; larger values indicate a higher
2881 probability that the branch will be taken.
2883 @findex REG_BR_PRED
2884 @item REG_BR_PRED
2885 These notes are found in JUMP insns after delayed branch scheduling
2886 has taken place.  They indicate both the direction and the likelyhood
2887 of the JUMP.  The format is a bitmask of ATTR_FLAG_* values.
2889 @findex REG_FRAME_RELATED_EXPR
2890 @item REG_FRAME_RELATED_EXPR
2891 This is used on an RTX_FRAME_RELATED_P insn wherein the attached expression
2892 is used in place of the actual insn pattern.  This is done in cases where
2893 the pattern is either complex or misleading.
2894 @end table
2896 For convenience, the machine mode in an @code{insn_list} or
2897 @code{expr_list} is printed using these symbolic codes in debugging dumps.
2899 @findex insn_list
2900 @findex expr_list
2901 The only difference between the expression codes @code{insn_list} and
2902 @code{expr_list} is that the first operand of an @code{insn_list} is
2903 assumed to be an insn and is printed in debugging dumps as the insn's
2904 unique id; the first operand of an @code{expr_list} is printed in the
2905 ordinary way as an expression.
2907 @node Calls
2908 @section RTL Representation of Function-Call Insns
2909 @cindex calling functions in RTL
2910 @cindex RTL function-call insns
2911 @cindex function-call insns
2913 Insns that call subroutines have the RTL expression code @code{call_insn}.
2914 These insns must satisfy special rules, and their bodies must use a special
2915 RTL expression code, @code{call}.
2917 @cindex @code{call} usage
2918 A @code{call} expression has two operands, as follows:
2920 @example
2921 (call (mem:@var{fm} @var{addr}) @var{nbytes})
2922 @end example
2924 @noindent
2925 Here @var{nbytes} is an operand that represents the number of bytes of
2926 argument data being passed to the subroutine, @var{fm} is a machine mode
2927 (which must equal as the definition of the @code{FUNCTION_MODE} macro in
2928 the machine description) and @var{addr} represents the address of the
2929 subroutine.
2931 For a subroutine that returns no value, the @code{call} expression as
2932 shown above is the entire body of the insn, except that the insn might
2933 also contain @code{use} or @code{clobber} expressions.
2935 @cindex @code{BLKmode}, and function return values
2936 For a subroutine that returns a value whose mode is not @code{BLKmode},
2937 the value is returned in a hard register.  If this register's number is
2938 @var{r}, then the body of the call insn looks like this:
2940 @example
2941 (set (reg:@var{m} @var{r})
2942      (call (mem:@var{fm} @var{addr}) @var{nbytes}))
2943 @end example
2945 @noindent
2946 This RTL expression makes it clear (to the optimizer passes) that the
2947 appropriate register receives a useful value in this insn.
2949 When a subroutine returns a @code{BLKmode} value, it is handled by
2950 passing to the subroutine the address of a place to store the value.
2951 So the call insn itself does not ``return'' any value, and it has the
2952 same RTL form as a call that returns nothing.
2954 On some machines, the call instruction itself clobbers some register,
2955 for example to contain the return address.  @code{call_insn} insns
2956 on these machines should have a body which is a @code{parallel}
2957 that contains both the @code{call} expression and @code{clobber}
2958 expressions that indicate which registers are destroyed.  Similarly,
2959 if the call instruction requires some register other than the stack
2960 pointer that is not explicitly mentioned it its RTL, a @code{use}
2961 subexpression should mention that register.
2963 Functions that are called are assumed to modify all registers listed in
2964 the configuration macro @code{CALL_USED_REGISTERS} (@pxref{Register
2965 Basics}) and, with the exception of @code{const} functions and library
2966 calls, to modify all of memory.
2968 Insns containing just @code{use} expressions directly precede the
2969 @code{call_insn} insn to indicate which registers contain inputs to the
2970 function.  Similarly, if registers other than those in
2971 @code{CALL_USED_REGISTERS} are clobbered by the called function, insns
2972 containing a single @code{clobber} follow immediately after the call to
2973 indicate which registers.
2975 @node Sharing
2976 @section Structure Sharing Assumptions
2977 @cindex sharing of RTL components
2978 @cindex RTL structure sharing assumptions
2980 The compiler assumes that certain kinds of RTL expressions are unique;
2981 there do not exist two distinct objects representing the same value.
2982 In other cases, it makes an opposite assumption: that no RTL expression
2983 object of a certain kind appears in more than one place in the
2984 containing structure.
2986 These assumptions refer to a single function; except for the RTL
2987 objects that describe global variables and external functions,
2988 and a few standard objects such as small integer constants,
2989 no RTL objects are common to two functions.
2991 @itemize @bullet
2992 @cindex @code{reg}, RTL sharing
2993 @item
2994 Each pseudo-register has only a single @code{reg} object to represent it,
2995 and therefore only a single machine mode.
2997 @cindex symbolic label
2998 @cindex @code{symbol_ref}, RTL sharing
2999 @item
3000 For any symbolic label, there is only one @code{symbol_ref} object
3001 referring to it.
3003 @cindex @code{const_int}, RTL sharing
3004 @item
3005 All @code{const_int} expressions with equal values are shared.
3007 @cindex @code{pc}, RTL sharing
3008 @item
3009 There is only one @code{pc} expression.
3011 @cindex @code{cc0}, RTL sharing
3012 @item
3013 There is only one @code{cc0} expression.
3015 @cindex @code{const_double}, RTL sharing
3016 @item
3017 There is only one @code{const_double} expression with value 0 for
3018 each floating point mode.  Likewise for values 1 and 2.
3020 @cindex @code{label_ref}, RTL sharing
3021 @cindex @code{scratch}, RTL sharing
3022 @item
3023 No @code{label_ref} or @code{scratch} appears in more than one place in
3024 the RTL structure; in other words, it is safe to do a tree-walk of all
3025 the insns in the function and assume that each time a @code{label_ref}
3026 or @code{scratch} is seen it is distinct from all others that are seen.
3028 @cindex @code{mem}, RTL sharing
3029 @item
3030 Only one @code{mem} object is normally created for each static
3031 variable or stack slot, so these objects are frequently shared in all
3032 the places they appear.  However, separate but equal objects for these
3033 variables are occasionally made.
3035 @cindex @code{asm_operands}, RTL sharing
3036 @item
3037 When a single @code{asm} statement has multiple output operands, a
3038 distinct @code{asm_operands} expression is made for each output operand.
3039 However, these all share the vector which contains the sequence of input
3040 operands.  This sharing is used later on to test whether two
3041 @code{asm_operands} expressions come from the same statement, so all
3042 optimizations must carefully preserve the sharing if they copy the
3043 vector at all.
3045 @item
3046 No RTL object appears in more than one place in the RTL structure
3047 except as described above.  Many passes of the compiler rely on this
3048 by assuming that they can modify RTL objects in place without unwanted
3049 side-effects on other insns.
3051 @findex unshare_all_rtl
3052 @item
3053 During initial RTL generation, shared structure is freely introduced.
3054 After all the RTL for a function has been generated, all shared
3055 structure is copied by @code{unshare_all_rtl} in @file{emit-rtl.c},
3056 after which the above rules are guaranteed to be followed.
3058 @findex copy_rtx_if_shared
3059 @item
3060 During the combiner pass, shared structure within an insn can exist
3061 temporarily.  However, the shared structure is copied before the
3062 combiner is finished with the insn.  This is done by calling
3063 @code{copy_rtx_if_shared}, which is a subroutine of
3064 @code{unshare_all_rtl}.
3065 @end itemize
3067 @node Reading RTL
3068 @section Reading RTL
3070 To read an RTL object from a file, call @code{read_rtx}.  It takes one
3071 argument, a stdio stream, and returns a single RTL object.
3073 Reading RTL from a file is very slow.  This is not currently a
3074 problem since reading RTL occurs only as part of building the
3075 compiler.
3077 People frequently have the idea of using RTL stored as text in a file as
3078 an interface between a language front end and the bulk of GNU CC.  This
3079 idea is not feasible.
3081 GNU CC was designed to use RTL internally only.  Correct RTL for a given
3082 program is very dependent on the particular target machine.  And the RTL
3083 does not contain all the information about the program.
3085 The proper way to interface GNU CC to a new language front end is with
3086 the ``tree'' data structure.  There is no manual for this data
3087 structure, but it is described in the files @file{tree.h} and
3088 @file{tree.def}.