Annotation of gcc/gcc.info-8, revision 1.1.1.1

1.1       root        1: This is Info file gcc.info, produced by Makeinfo-1.43 from the input
                      2: file gcc.texi.
                      3: 
                      4:    This file documents the use and the internals of the GNU compiler.
                      5: 
                      6:    Copyright (C) 1988, 1989, 1992 Free Software Foundation, Inc.
                      7: 
                      8:    Permission is granted to make and distribute verbatim copies of
                      9: this manual provided the copyright notice and this permission notice
                     10: are preserved on all copies.
                     11: 
                     12:    Permission is granted to copy and distribute modified versions of
                     13: this manual under the conditions for verbatim copying, provided also
                     14: that the section entitled "GNU General Public License" is included
                     15: exactly as in the original, and provided that the entire resulting
                     16: derived work is distributed under the terms of a permission notice
                     17: identical to this one.
                     18: 
                     19:    Permission is granted to copy and distribute translations of this
                     20: manual into another language, under the above conditions for modified
                     21: versions, except that the section entitled "GNU General Public
                     22: License" and this permission notice may be included in translations
                     23: approved by the Free Software Foundation instead of in the original
                     24: English.
                     25: 
                     26: 
                     27: File: gcc.info,  Node: Conversions,  Next: RTL Declarations,  Prev: Bit Fields,  Up: RTL
                     28: 
                     29: Conversions
                     30: ===========
                     31: 
                     32:    All conversions between machine modes must be represented by
                     33: explicit conversion operations.  For example, an expression which is
                     34: the sum of a byte and a full word cannot be written as `(plus:SI
                     35: (reg:QI 34) (reg:SI 80))' because the `plus' operation requires two
                     36: operands of the same machine mode.  Therefore, the byte-sized operand
                     37: is enclosed in a conversion operation, as in
                     38: 
                     39:      (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
                     40: 
                     41:    The conversion operation is not a mere placeholder, because there
                     42: may be more than one way of converting from a given starting mode to
                     43: the desired final mode.  The conversion operation code says how to do
                     44: it.
                     45: 
                     46:    For all conversion operations, X must not be `VOIDmode' because the
                     47: mode in which to do the conversion would not be known.  The conversion
                     48: must either be done at compile-time or X must be placed into a
                     49: register.
                     50: 
                     51: `(sign_extend:M X)'
                     52:      Represents the result of sign-extending the value X to machine
                     53:      mode M.  M must be a fixed-point mode and X a fixed-point value
                     54:      of a mode narrower than M.
                     55: 
                     56: `(zero_extend:M X)'
                     57:      Represents the result of zero-extending the value X to machine
                     58:      mode M.  M must be a fixed-point mode and X a fixed-point value
                     59:      of a mode narrower than M.
                     60: 
                     61: `(float_extend:M X)'
                     62:      Represents the result of extending the value X to machine mode M.
                     63:       M must be a floating point mode and X a floating point value of
                     64:      a mode narrower than M.
                     65: 
                     66: `(truncate:M X)'
                     67:      Represents the result of truncating the value X to machine mode
                     68:      M.  M must be a fixed-point mode and X a fixed-point value of a
                     69:      mode wider than M.
                     70: 
                     71: `(float_truncate:M X)'
                     72:      Represents the result of truncating the value X to machine mode
                     73:      M.  M must be a floating point mode and X a floating point value
                     74:      of a mode wider than M.
                     75: 
                     76: `(float:M X)'
                     77:      Represents the result of converting fixed point value X, regarded
                     78:      as signed, to floating point mode M.
                     79: 
                     80: `(unsigned_float:M X)'
                     81:      Represents the result of converting fixed point value X, regarded
                     82:      as unsigned, to floating point mode M.
                     83: 
                     84: `(fix:M X)'
                     85:      When M is a fixed point mode, represents the result of converting
                     86:      floating point value X to mode M, regarded as signed.  How
                     87:      rounding is done is not specified, so this operation may be used
                     88:      validly in compiling C code only for integer-valued operands.
                     89: 
                     90: `(unsigned_fix:M X)'
                     91:      Represents the result of converting floating point value X to
                     92:      fixed point mode M, regarded as unsigned.  How rounding is done
                     93:      is not specified.
                     94: 
                     95: `(fix:M X)'
                     96:      When M is a floating point mode, represents the result of
                     97:      converting floating point value X (valid for mode M) to an
                     98:      integer, still represented in floating point mode M, by rounding
                     99:      towards zero.
                    100: 
                    101: 
                    102: File: gcc.info,  Node: RTL Declarations,  Next: Side Effects,  Prev: Conversions,  Up: RTL
                    103: 
                    104: Declarations
                    105: ============
                    106: 
                    107:    Declaration expression codes do not represent arithmetic operations
                    108: but rather state assertions about their operands.
                    109: 
                    110: `(strict_low_part (subreg:M (reg:N R) 0))'
                    111:      This expression code is used in only one context: operand 0 of a
                    112:      `set' expression.  In addition, the operand of this expression
                    113:      must be a non-paradoxical `subreg' expression.
                    114: 
                    115:      The presence of `strict_low_part' says that the part of the
                    116:      register which is meaningful in mode N, but is not part of mode
                    117:      M, is not to be altered.  Normally, an assignment to such a
                    118:      subreg is allowed to have undefined effects on the rest of the
                    119:      register when M is less than a word.
                    120: 
                    121: 
                    122: File: gcc.info,  Node: Side Effects,  Next: Incdec,  Prev: RTL Declarations,  Up: RTL
                    123: 
                    124: Side Effect Expressions
                    125: =======================
                    126: 
                    127:    The expression codes described so far represent values, not actions. 
                    128: But machine instructions never produce values; they are meaningful
                    129: only for their side effects on the state of the machine.  Special
                    130: expression codes are used to represent side effects.
                    131: 
                    132:    The body of an instruction is always one of these side effect codes;
                    133: the codes described above, which represent values, appear only as the
                    134: operands of these.
                    135: 
                    136: `(set LVAL X)'
                    137:      Represents the action of storing the value of X into the place
                    138:      represented by LVAL.  LVAL must be an expression representing a
                    139:      place that can be stored in: `reg' (or `subreg' or
                    140:      `strict_low_part'), `mem', `pc' or `cc0'.
                    141: 
                    142:      If LVAL is a `reg', `subreg' or `mem', it has a machine mode;
                    143:      then X must be valid for that mode.
                    144: 
                    145:      If LVAL is a `reg' whose machine mode is less than the full width
                    146:      of the register, then it means that the part of the register
                    147:      specified by the machine mode is given the specified value and the
                    148:      rest of the register receives an undefined value.  Likewise, if
                    149:      LVAL is a `subreg' whose machine mode is narrower than the mode
                    150:      of the register, the rest of the register can be changed in an
                    151:      undefined way.
                    152: 
                    153:      If LVAL is a `strict_low_part' of a `subreg', then the part of
                    154:      the register specified by the machine mode of the `subreg' is
                    155:      given the value X and the rest of the register is not changed.
                    156: 
                    157:      If LVAL is `(cc0)', it has no machine mode, and X may be either a
                    158:      `compare' expression or a value that may have any mode.  The
                    159:      latter case represents a "test" instruction.  The expression
                    160:      `(set (cc0) (reg:M N))' is equivalent to `(set (cc0) (compare
                    161:      (reg:M N) (const_int 0)))'.  Use the former expression to save
                    162:      space during the compilation.
                    163: 
                    164:      If LVAL is `(pc)', we have a jump instruction, and the
                    165:      possibilities for X are very limited.  It may be a `label_ref'
                    166:      expression (unconditional jump).  It may be an `if_then_else'
                    167:      (conditional jump), in which case either the second or the third
                    168:      operand must be `(pc)' (for the case which does not jump) and the
                    169:      other of the two must be a `label_ref' (for the case which does
                    170:      jump).  X may also be a `mem' or `(plus:SI (pc) Y)', where Y may
                    171:      be a `reg' or a `mem'; these unusual patterns are used to
                    172:      represent jumps through branch tables.
                    173: 
                    174:      If LVAL is neither `(cc0)' nor `(pc)', the mode of LVAL must not
                    175:      be `VOIDmode' and the mode of X must be valid for the mode of
                    176:      LVAL.
                    177: 
                    178:      LVAL is customarily accessed with the `SET_DEST' macro and X with
                    179:      the `SET_SRC' macro.
                    180: 
                    181: `(return)'
                    182:      As the sole expression in a pattern, represents a return from the
                    183:      current function, on machines where this can be done with one
                    184:      instruction, such as Vaxes.  On machines where a multi-instruction
                    185:      "epilogue" must be executed in order to return from the function,
                    186:      returning is done by jumping to a label which precedes the
                    187:      epilogue, and the `return' expression code is never used.
                    188: 
                    189:      Inside an `if_then_else' expression, represents the value to be
                    190:      placed in `pc' to return to the caller.
                    191: 
                    192:      Note that an insn pattern of `(return)' is logically equivalent to
                    193:      `(set (pc) (return))', but the latter form is never used.
                    194: 
                    195: `(call FUNCTION NARGS)'
                    196:      Represents a function call.  FUNCTION is a `mem' expression whose
                    197:      address is the address of the function to be called.  NARGS is an
                    198:      expression which can be used for two purposes: on some machines
                    199:      it represents the number of bytes of stack argument; on others,
                    200:      it represents the number of argument registers.
                    201: 
                    202:      Each machine has a standard machine mode which FUNCTION must
                    203:      have.  The machine description defines macro `FUNCTION_MODE' to
                    204:      expand into the requisite mode name.  The purpose of this mode is
                    205:      to specify what kind of addressing is allowed, on machines where
                    206:      the allowed kinds of addressing depend on the machine mode being
                    207:      addressed.
                    208: 
                    209: `(clobber X)'
                    210:      Represents the storing or possible storing of an unpredictable,
                    211:      undescribed value into X, which must be a `reg', `scratch' or
                    212:      `mem' expression.
                    213: 
                    214:      One place this is used is in string instructions that store
                    215:      standard values into particular hard registers.  It may not be
                    216:      worth the trouble to describe the values that are stored, but it
                    217:      is essential to inform the compiler that the registers will be
                    218:      altered, lest it attempt to keep data in them across the string
                    219:      instruction.
                    220: 
                    221:      If X is `(mem:BLK (const_int 0))', it means that all memory
                    222:      locations must be presumed clobbered.
                    223: 
                    224:      Note that the machine description classifies certain hard
                    225:      registers as "call-clobbered".  All function call instructions
                    226:      are assumed by default to clobber these registers, so there is no
                    227:      need to use `clobber' expressions to indicate this fact.  Also,
                    228:      each function call is assumed to have the potential to alter any
                    229:      memory location, unless the function is declared `const'.
                    230: 
                    231:      If the last group of expressions in a `parallel' are each a
                    232:      `clobber' expression whose arguments are `reg' or `match_scratch'
                    233:      (*note RTL Template::.) expressions, the combiner phase can add
                    234:      the appropriate `clobber' expressions to an insn it has
                    235:      constructed when doing so will cause a pattern to be matched.
                    236: 
                    237:      This feature can be used, for example, on a machine that whose
                    238:      multiply and add instructions don't use an MQ register but which
                    239:      has an add-accumulate instruction that does clobber the MQ
                    240:      register.  Similarly, a combined instruction might require a
                    241:      temporary register while the constituent instructions might not.
                    242: 
                    243:      When a `clobber' expression for a register appears inside a
                    244:      `parallel' with other side effects, the register allocator
                    245:      guarantees that the register is unoccupied both before and after
                    246:      that insn.  However, the reload phase may allocate a register
                    247:      used for one of the inputs unless the `&' constraint is specified
                    248:      for the selected alternative (*note Modifiers::.).  You can
                    249:      clobber either a specific hard register, a pseudo register, or a
                    250:      `scratch' expression; in the latter two cases, GNU CC will
                    251:      allocate a hard register that is available there for use as a
                    252:      temporary.
                    253: 
                    254:      For instructions that require a temporary register, you should use
                    255:      `scratch' instead of a pseudo-register because this will allow the
                    256:      combiner phase to add the `clobber' when required.  You do this by
                    257:      coding (`clobber' (`match_scratch' ...)).  If you do clobber a
                    258:      pseudo register, use one which appears nowhere else--generate a
                    259:      new one each time.  Otherwise, you may confuse CSE.
                    260: 
                    261:      There is one other known use for clobbering a pseudo register in a
                    262:      `parallel': when one of the input operands of the insn is also
                    263:      clobbered by the insn.  In this case, using the same pseudo
                    264:      register in the clobber and elsewhere in the insn produces the
                    265:      expected results.
                    266: 
                    267: `(use X)'
                    268:      Represents the use of the value of X.  It indicates that the
                    269:      value in X at this point in the program is needed, even though it
                    270:      may not be apparent why this is so.  Therefore, the compiler will
                    271:      not attempt to delete previous instructions whose only effect is
                    272:      to store a value in X.  X must be a `reg' expression.
                    273: 
                    274:      During the delayed branch scheduling phase, X may be an insn. 
                    275:      This indicates that X previously was located at this place in the
                    276:      code and its data dependencies need to be taken into account. 
                    277:      These `use' insns will be deleted before the delayed branch
                    278:      scheduling phase exits.
                    279: 
                    280: `(parallel [X0 X1 ...])'
                    281:      Represents several side effects performed in parallel.  The square
                    282:      brackets stand for a vector; the operand of `parallel' is a
                    283:      vector of expressions.  X0, X1 and so on are individual side
                    284:      effect expressions--expressions of code `set', `call', `return',
                    285:      `clobber' or `use'.
                    286: 
                    287:      "In parallel" means that first all the values used in the
                    288:      individual side-effects are computed, and second all the actual
                    289:      side-effects are performed.  For example,
                    290: 
                    291:           (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
                    292:                      (set (mem:SI (reg:SI 1)) (reg:SI 1))])
                    293: 
                    294:      says unambiguously that the values of hard register 1 and the
                    295:      memory location addressed by it are interchanged.  In both places
                    296:      where `(reg:SI 1)' appears as a memory address it refers to the
                    297:      value in register 1 *before* the execution of the insn.
                    298: 
                    299:      It follows that it is *incorrect* to use `parallel' and expect
                    300:      the result of one `set' to be available for the next one.  For
                    301:      example, people sometimes attempt to represent a jump-if-zero
                    302:      instruction this way:
                    303: 
                    304:           (parallel [(set (cc0) (reg:SI 34))
                    305:                      (set (pc) (if_then_else
                    306:                                   (eq (cc0) (const_int 0))
                    307:                                   (label_ref ...)
                    308:                                   (pc)))])
                    309: 
                    310:      But this is incorrect, because it says that the jump condition
                    311:      depends on the condition code value *before* this instruction,
                    312:      not on the new value that is set by this instruction.
                    313: 
                    314:      Peephole optimization, which takes place together with final
                    315:      assembly code output, can produce insns whose patterns consist of
                    316:      a `parallel' whose elements are the operands needed to output the
                    317:      resulting assembler code--often `reg', `mem' or constant
                    318:      expressions.  This would not be well-formed RTL at any other
                    319:      stage in compilation, but it is ok then because no further
                    320:      optimization remains to be done.  However, the definition of the
                    321:      macro `NOTICE_UPDATE_CC', if any, must deal with such insns if
                    322:      you define any peephole optimizations.
                    323: 
                    324: `(sequence [INSNS ...])'
                    325:      Represents a sequence of insns.  Each of the INSNS that appears
                    326:      in the vector is suitable for appearing in the chain of insns, so
                    327:      it must be an `insn', `jump_insn', `call_insn', `code_label',
                    328:      `barrier' or `note'.
                    329: 
                    330:      A `sequence' RTX is never placed in an actual insn during RTL
                    331:      generation.  It represents the sequence of insns that result from
                    332:      a `define_expand' *before* those insns are passed to `emit_insn'
                    333:      to insert them in the chain of insns.  When actually inserted,
                    334:      the individual sub-insns are separated out and the `sequence' is
                    335:      forgotten.
                    336: 
                    337:      After delay-slot scheduling is completed, an insn and all the
                    338:      insns that reside in its delay slots are grouped together into a
                    339:      `sequence'.  The insn requiring the delay slot is the first insn
                    340:      in the vector; subsequent insns are to be placed in the delay
                    341:      slot.
                    342: 
                    343:      `INSN_ANNULLED_BRANCH_P' is set on an insn in a delay slot to
                    344:      indicate that a branch insn should be used that will
                    345:      conditionally annul the effect of the insns in the delay slots. 
                    346:      In such a case, `INSN_FROM_TARGET_P' indicates that the insn is
                    347:      from the target of the branch and should be executed only if the
                    348:      branch is taken; otherwise the insn should be executed only if
                    349:      the branch is not taken.  *Note Delay Slots::.
                    350: 
                    351:    These expression codes appear in place of a side effect, as the
                    352: body of an insn, though strictly speaking they do not always describe
                    353: side effects as such:
                    354: 
                    355: `(asm_input S)'
                    356:      Represents literal assembler code as described by the string S.
                    357: 
                    358: `(unspec [OPERANDS ...] INDEX)'
                    359: `(unspec [OPERANDS ...] INDEX)'
                    360:      Represents a machine-specific operation on OPERANDS.  INDEX
                    361:      selects between multiple macine-specific operations. 
                    362:      `unspec_volatile' is used for volatile operations and operations
                    363:      that may trap; `unspec' is used for other operations.
                    364: 
                    365:      These codes may appear themselves inside a `pattern' of an insn,
                    366:      inside a `parallel', or inside an expression.
                    367: 
                    368: `(addr_vec:M [LR0 LR1 ...])'
                    369:      Represents a table of jump addresses.  The vector elements LR0,
                    370:      etc., are `label_ref' expressions.  The mode M specifies how much
                    371:      space is given to each address; normally M would be `Pmode'.
                    372: 
                    373: `(addr_diff_vec:M BASE [LR0 LR1 ...])'
                    374:      Represents a table of jump addresses expressed as offsets from
                    375:      BASE.  The vector elements LR0, etc., are `label_ref' expressions
                    376:      and so is BASE.  The mode M specifies how much space is given to
                    377:      each address-difference.
                    378: 
                    379: 
                    380: File: gcc.info,  Node: Incdec,  Next: Assembler,  Prev: Side Effects,  Up: RTL
                    381: 
                    382: Embedded Side-Effects on Addresses
                    383: ==================================
                    384: 
                    385:    Four special side-effect expression codes appear as memory
                    386: addresses.
                    387: 
                    388: `(pre_dec:M X)'
                    389:      Represents the side effect of decrementing X by a standard amount
                    390:      and represents also the value that X has after being decremented.
                    391:       X must be a `reg' or `mem', but most machines allow only a
                    392:      `reg'.  M must be the machine mode for pointers on the machine in
                    393:      use.  The amount X is decremented by is the length in bytes of
                    394:      the machine mode of the containing memory reference of which this
                    395:      expression serves as the address.  Here is an example of its use:
                    396: 
                    397:           (mem:DF (pre_dec:SI (reg:SI 39)))
                    398: 
                    399:      This says to decrement pseudo register 39 by the length of a
                    400:      `DFmode' value and use the result to address a `DFmode' value.
                    401: 
                    402: `(pre_inc:M X)'
                    403:      Similar, but specifies incrementing X instead of decrementing it.
                    404: 
                    405: `(post_dec:M X)'
                    406:      Represents the same side effect as `pre_dec' but a different
                    407:      value.  The value represented here is the value X has before
                    408:      being decremented.
                    409: 
                    410: `(post_inc:M X)'
                    411:      Similar, but specifies incrementing X instead of decrementing it.
                    412: 
                    413:    These embedded side effect expressions must be used with care. 
                    414: Instruction patterns may not use them.  Until the `flow' pass of the
                    415: compiler, they may occur only to represent pushes onto the stack.  The
                    416: `flow' pass finds cases where registers are incremented or decremented
                    417: in one instruction and used as an address shortly before or after;
                    418: these cases are then transformed to use pre- or post-increment or
                    419: -decrement.
                    420: 
                    421:    If a register used as the operand of these expressions is used in
                    422: another address in an insn, the original value of the register is used. 
                    423: Uses of the register outside of an address are not permitted within the
                    424: same insn as a use in an embedded side effect expression because such
                    425: insns behave differently on different machines and hence must be
                    426: treated as ambiguous and disallowed.
                    427: 
                    428:    An instruction that can be represented with an embedded side effect
                    429: could also be represented using `parallel' containing an additional
                    430: `set' to describe how the address register is altered.  This is not
                    431: done because machines that allow these operations at all typically
                    432: allow them wherever a memory address is called for.  Describing them as
                    433: additional parallel stores would require doubling the number of entries
                    434: in the machine description.
                    435: 
                    436: 
                    437: File: gcc.info,  Node: Assembler,  Next: Insns,  Prev: IncDec,  Up: RTL
                    438: 
                    439: Assembler Instructions as Expressions
                    440: =====================================
                    441: 
                    442:    The RTX code `asm_operands' represents a value produced by a
                    443: user-specified assembler instruction.  It is used to represent an
                    444: `asm' statement with arguments.  An `asm' statement with a single
                    445: output operand, like this:
                    446: 
                    447:      asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
                    448: 
                    449: is represented using a single `asm_operands' RTX which represents the
                    450: value that is stored in `outputvar':
                    451: 
                    452:      (set RTX-FOR-OUTPUTVAR
                    453:           (asm_operands "foo %1,%2,%0" "a" 0
                    454:                         [RTX-FOR-ADDITION-RESULT RTX-FOR-*Z]
                    455:                         [(asm_input:M1 "g")
                    456:                          (asm_input:M2 "di")]))
                    457: 
                    458: Here the operands of the `asm_operands' RTX are the assembler template
                    459: string, the output-operand's constraint, the index-number of the
                    460: output operand among the output operands specified, a vector of input
                    461: operand RTX's, and a vector of input-operand modes and constraints. 
                    462: The mode M1 is the mode of the sum `x+y'; M2 is that of `*z'.
                    463: 
                    464:    When an `asm' statement has multiple output values, its insn has
                    465: several such `set' RTX's inside of a `parallel'.  Each `set' contains
                    466: a `asm_operands'; all of these share the same assembler template and
                    467: vectors, but each contains the constraint for the respective output
                    468: operand.  They are also distinguished by the output-operand index
                    469: number, which is 0, 1, ... for successive output operands.
                    470: 
                    471: 
                    472: File: gcc.info,  Node: Insns,  Next: Calls,  Prev: Assembler,  Up: RTL
                    473: 
                    474: Insns
                    475: =====
                    476: 
                    477:    The RTL representation of the code for a function is a doubly-linked
                    478: chain of objects called "insns".  Insns are expressions with special
                    479: codes that are used for no other purpose.  Some insns are actual
                    480: instructions; others represent dispatch tables for `switch'
                    481: statements; others represent labels to jump to or various sorts of
                    482: declarative information.
                    483: 
                    484:    In addition to its own specific data, each insn must have a unique
                    485: id-number that distinguishes it from all other insns in the current
                    486: function (after delayed branch scheduling, copies of an insn with the
                    487: same id-number may be present in multiple places in a function, but
                    488: these copies will always be identical and will only appear inside a
                    489: `sequence'), and chain pointers to the preceding and following insns. 
                    490: These three fields occupy the same position in every insn, independent
                    491: of the expression code of the insn.  They could be accessed with
                    492: `XEXP' and `XINT', but instead three special macros are always used:
                    493: 
                    494: `INSN_UID (I)'
                    495:      Accesses the unique id of insn I.
                    496: 
                    497: `PREV_INSN (I)'
                    498:      Accesses the chain pointer to the insn preceding I.  If I is the
                    499:      first insn, this is a null pointer.
                    500: 
                    501: `NEXT_INSN (I)'
                    502:      Accesses the chain pointer to the insn following I.  If I is the
                    503:      last insn, this is a null pointer.
                    504: 
                    505:    The first insn in the chain is obtained by calling `get_insns'; the
                    506: last insn is the result of calling `get_last_insn'.  Within the chain
                    507: delimited by these insns, the `NEXT_INSN' and `PREV_INSN' pointers
                    508: must always correspond: if INSN is not the first insn,
                    509: 
                    510:      NEXT_INSN (PREV_INSN (INSN)) == INSN
                    511: 
                    512: is always true and if INSN is not the last insn,
                    513: 
                    514:      PREV_INSN (NEXT_INSN (INSN)) == INSN
                    515: 
                    516: is always true.
                    517: 
                    518:    After delay slot scheduling, some of the insns in the chain might be
                    519: `sequence' expressions, which contain a vector of insns.  The value of
                    520: `NEXT_INSN' in all but the last of these insns is the next insn in the
                    521: vector; the value of `NEXT_INSN' of the last insn in the vector is the
                    522: same as the value of `NEXT_INSN' for the `sequence' in which it is
                    523: contained.  Similar rules apply for `PREV_INSN'.
                    524: 
                    525:    This means that the above invariants are not necessarily true for
                    526: insns inside `sequence' expressions.  Specifically, if INSN is the
                    527: first insn in a `sequence', `NEXT_INSN (PREV_INSN (INSN))' is the insn
                    528: containing the `sequence' expression, as is the value of `PREV_INSN
                    529: (NEXT_INSN (INSN))' is INSN is the last insn in the `sequence'
                    530: expression.  You can use these expressions to find the containing
                    531: `sequence' expression.
                    532: 
                    533:    Every insn has one of the following six expression codes:
                    534: 
                    535: `insn'
                    536:      The expression code `insn' is used for instructions that do not
                    537:      jump and do not do function calls.  `sequence' expressions are
                    538:      always contained in insns with code `insn' even if one of those
                    539:      insns should jump or do function calls.
                    540: 
                    541:      Insns with code `insn' have four additional fields beyond the
                    542:      three mandatory ones listed above.  These four are described in a
                    543:      table below.
                    544: 
                    545: `jump_insn'
                    546:      The expression code `jump_insn' is used for instructions that may
                    547:      jump (or, more generally, may contain `label_ref' expressions). 
                    548:      If there is an instruction to return from the current function,
                    549:      it is recorded as a `jump_insn'.
                    550: 
                    551:      `jump_insn' insns have the same extra fields as `insn' insns,
                    552:      accessed in the same way and in addition contains a field
                    553:      `JUMP_LABEL' which is defined once jump optimization has
                    554:      completed.
                    555: 
                    556:      For simple conditional and unconditional jumps, this field
                    557:      contains the `code_label' to which this insn will (possibly
                    558:      conditionally) branch.  In a more complex jump, `JUMP_LABEL'
                    559:      records one of the labels that the insn refers to; the only way
                    560:      to find the others is to scan the entire body of the insn.
                    561: 
                    562:      Return insns count as jumps, but since they do not refer to any
                    563:      labels, they have zero in the `JUMP_LABEL' field.
                    564: 
                    565: `call_insn'
                    566:      The expression code `call_insn' is used for instructions that may
                    567:      do function calls.  It is important to distinguish these
                    568:      instructions because they imply that certain registers and memory
                    569:      locations may be altered unpredictably.
                    570: 
                    571:      A `call_insn' insn may be preceeded by insns that contain a single
                    572:      `use' expression and be followed by insns the contain a single
                    573:      `clobber' expression.  If so, these `use' and `clobber'
                    574:      expressions are treated as being part of the function call. 
                    575:      There must not even be a `note' between the `call_insn' and the
                    576:      `use' or `clobber' insns for this special treatment to take
                    577:      place.  This is somewhat of a kludge and will be removed in a
                    578:      later version of GNU CC.
                    579: 
                    580:      `call_insn' insns have the same extra fields as `insn' insns,
                    581:      accessed in the same way.
                    582: 
                    583: `code_label'
                    584:      A `code_label' insn represents a label that a jump insn can jump
                    585:      to.  It contains two special fields of data in addition to the
                    586:      three standard ones.  `CODE_LABEL_NUMBER' is used to hold the
                    587:      "label number", a number that identifies this label uniquely
                    588:      among all the labels in the compilation (not just in the current
                    589:      function).  Ultimately, the label is represented in the assembler
                    590:      output as an assembler label, usually of the form `LN' where N is
                    591:      the label number.
                    592: 
                    593:      When a `code_label' appears in an RTL expression, it normally
                    594:      appears within a `label_ref' which represents the address of the
                    595:      label, as a number.
                    596: 
                    597:      The field `LABEL_NUSES' is only defined once the jump optimization
                    598:      phase is completed and contains the number of times this label is
                    599:      referenced in the current function.
                    600: 
                    601: `barrier'
                    602:      Barriers are placed in the instruction stream when control cannot
                    603:      flow past them.  They are placed after unconditional jump
                    604:      instructions to indicate that the jumps are unconditional and
                    605:      after calls to `volatile' functions, which do not return (e.g.,
                    606:      `exit').  They contain no information beyond the three standard
                    607:      fields.
                    608: 
                    609: `note'
                    610:      `note' insns are used to represent additional debugging and
                    611:      declarative information.  They contain two nonstandard fields, an
                    612:      integer which is accessed with the macro `NOTE_LINE_NUMBER' and a
                    613:      string accessed with `NOTE_SOURCE_FILE'.
                    614: 
                    615:      If `NOTE_LINE_NUMBER' is positive, the note represents the
                    616:      position of a source line and `NOTE_SOURCE_FILE' is the source
                    617:      file name that the line came from.  These notes control
                    618:      generation of line number data in the assembler output.
                    619: 
                    620:      Otherwise, `NOTE_LINE_NUMBER' is not really a line number but a
                    621:      code with one of the following values (and `NOTE_SOURCE_FILE'
                    622:      must contain a null pointer):
                    623: 
                    624:     `NOTE_INSN_DELETED'
                    625:           Such a note is completely ignorable.  Some passes of the
                    626:           compiler delete insns by altering them into notes of this
                    627:           kind.
                    628: 
                    629:     `NOTE_INSN_BLOCK_BEG'
                    630:     `NOTE_INSN_BLOCK_END'
                    631:           These types of notes indicate the position of the beginning
                    632:           and end of a level of scoping of variable names.  They
                    633:           control the output of debugging information.
                    634: 
                    635:     `NOTE_INSN_LOOP_BEG'
                    636:     `NOTE_INSN_LOOP_END'
                    637:           These types of notes indicate the position of the beginning
                    638:           and end of a `while' or `for' loop.  They enable the loop
                    639:           optimizer to find loops quickly.
                    640: 
                    641:     `NOTE_INSN_LOOP_CONT'
                    642:           Appears at the place in a loop that `continue' statements
                    643:           jump to.
                    644: 
                    645:     `NOTE_INSN_LOOP_VTOP'
                    646:           This note indicates the place in a loop where the exit test
                    647:           begins for those loops in which the exit test has been
                    648:           duplicated.  This position becomes another virtual start of
                    649:           the loop when considering loop invariants.
                    650: 
                    651:     `NOTE_INSN_FUNCTION_END'
                    652:           Appears near the end of the function body, just before the
                    653:           label that `return' statements jump to (on machine where a
                    654:           single instruction does not suffice for returning).  This
                    655:           note may be deleted by jump optimization.
                    656: 
                    657:     `NOTE_INSN_SETJMP'
                    658:           Appears following each call to `setjmp' or a related
                    659:           function.
                    660: 
                    661:      These codes are printed symbolically when they appear in
                    662:      debugging dumps.
                    663: 
                    664:    The machine mode of an insn is normally `VOIDmode', but some phases
                    665: use the mode for various purposes; for example, the reload pass sets
                    666: it to `HImode' if the insn needs reloading but not register
                    667: elimination and `QImode' if both are required.  The common
                    668: subexpression elimination pass sets the mode of an insn to `QImode'
                    669: when it is the first insn in a block that has already been processed.
                    670: 
                    671:    Here is a table of the extra fields of `insn', `jump_insn' and
                    672: `call_insn' insns:
                    673: 
                    674: `PATTERN (I)'
                    675:      An expression for the side effect performed by this insn.  This
                    676:      must be one of the following codes: `set', `call', `use',
                    677:      `clobber', `return', `asm_input', `asm_output', `addr_vec',
                    678:      `addr_diff_vec', `trap_if', `unspec', `unspec_volatile', or
                    679:      `parallel'.  If it is a `parallel', each element of the
                    680:      `parallel' must be one these codes, except that `parallel'
                    681:      expressions cannot be nested and `addr_vec' and `addr_diff_vec'
                    682:      are not permitted inside a `parallel' expression.
                    683: 
                    684: `INSN_CODE (I)'
                    685:      An integer that says which pattern in the machine description
                    686:      matches this insn, or -1 if the matching has not yet been
                    687:      attempted.
                    688: 
                    689:      Such matching is never attempted and this field remains -1 on an
                    690:      insn whose pattern consists of a single `use', `clobber',
                    691:      `asm_input', `addr_vec' or `addr_diff_vec' expression.
                    692: 
                    693:      Matching is also never attempted on insns that result from an
                    694:      `asm' statement.  These contain at least one `asm_operands'
                    695:      expression.  The function `asm_noperands' returns a non-negative
                    696:      value for such insns.
                    697: 
                    698:      In the debugging output, this field is printed as a number
                    699:      followed by a symbolic representation that locates the pattern in
                    700:      the `md' file as some small positive or negative offset from a
                    701:      named pattern.
                    702: 
                    703: `LOG_LINKS (I)'
                    704:      A list (chain of `insn_list' expressions) giving information about
                    705:      dependencies between instructions within a basic block.  Neither
                    706:      a jump nor a label may come between the related insns.
                    707: 
                    708: `REG_NOTES (I)'
                    709:      A list (chain of `expr_list' and `insn_list' expressions) giving
                    710:      miscellaneous information about the insn.  It is often information
                    711:      pertaining to the registers used in this insn.
                    712: 
                    713:    The `LOG_LINKS' field of an insn is a chain of `insn_list'
                    714: expressions.  Each of these has two operands: the first is an insn,
                    715: and the second is another `insn_list' expression (the next one in the
                    716: chain).  The last `insn_list' in the chain has a null pointer as
                    717: second operand.  The significant thing about the chain is which insns
                    718: appear in it (as first operands of `insn_list' expressions).  Their
                    719: order is not significant.
                    720: 
                    721:    This list is originally set up by the flow analysis pass; it is a
                    722: null pointer until then.  Flow only adds links for those data
                    723: dependencies which can be used for instruction combination.  For each
                    724: insn, the flow analysis pass adds a link to insns which store into
                    725: registers values that are used for the first time in this insn.  The
                    726: instruction scheduling pass adds extra links so that every dependence
                    727: will be represented.  Links represent data dependencies,
                    728: antidependencies and output dependencies; the machine mode of the link
                    729: distinguishes these three types: antidependencies have mode
                    730: `REG_DEP_ANTI', output dependencies have mode `REG_DEP_OUTPUT', and
                    731: data dependencies have mode `VOIDmode'.
                    732: 
                    733:    The `REG_NOTES' field of an insn is a chain similar to the
                    734: `LOG_LINKS' field but it includes `expr_list' expressions in addition
                    735: to `insn_list' expressions.  There are several kinds of register
                    736: notes, which are distinguished by the machine mode, which in a
                    737: register note is really understood as being an `enum reg_note'.  The
                    738: first operand OP of the note is data whose meaning depends on the kind
                    739: of note.
                    740: 
                    741:    The macro `REG_NOTE_KIND (X)' returns the the kind of register
                    742: note.  Its counterpart, the macro `PUT_REG_NOTE_KIND (X, NEWKIND)'
                    743: sets the register note type of X to be NEWKIND.
                    744: 
                    745:    Register notes are of three classes: They may say something about an
                    746: input to an insn, they may say something about an output of an insn, or
                    747: they may create a linkage between two insns.  There are also a set of
                    748: values that are only used in `LOG_LINKS'.
                    749: 
                    750:    These register notes annotate inputs to an insn:
                    751: 
                    752: `REG_DEAD'
                    753:      The value in OP dies in this insn; that is to say, altering the
                    754:      value immediately after this insn would not affect the future
                    755:      behavior of the program.
                    756: 
                    757:      This does not necessarily mean that the register OP has no useful
                    758:      value after this insn since it may also be an output of the insn.
                    759:       In such a case, however, a `REG_DEAD' note would be redundant
                    760:      and is usually not present until after the reload pass, but no
                    761:      code relies on this fact.
                    762: 
                    763: `REG_INC'
                    764:      The register OP is incremented (or decremented; at this level
                    765:      there is no distinction) by an embedded side effect inside this
                    766:      insn.  This means it appears in a `post_inc', `pre_inc',
                    767:      `post_dec' or `pre_dec' expression.
                    768: 
                    769: `REG_NONNEG'
                    770:      The register OP is known to have a nonnegative value when this
                    771:      insn is reached.  This is used so that decrement and branch until
                    772:      zero instructions, such as the m68k dbra, can be matched.
                    773: 
                    774:      The `REG_NONNEG' note is added to insns only if the machine
                    775:      description contains a pattern named
                    776:      `decrement_and_branch_until_zero'.
                    777: 
                    778: `REG_NO_CONFLICT'
                    779:      This insn does not cause a conflict between OP and the item being
                    780:      set by this insn even though it might appear that it does.  In
                    781:      other words, if the destination register and OP could otherwise
                    782:      be assigned the same register, this insn does not prevent that
                    783:      assignment.
                    784: 
                    785:      Insns with this note are usually part of a block that begins with
                    786:      a `clobber' insn specifying a multi-word pseudo register (which
                    787:      will be the output of the block), a group of insns that each set
                    788:      one word of the value and have the `REG_NO_CONFLICT' note
                    789:      attached, and a final insn that copies the output to itself with
                    790:      an attached `REG_EQUAL' note giving the expression being
                    791:      computed.  This block is encapsulated with `REG_LIBCALL' and
                    792:      `REG_RETVAL' notes on the first and last insns, respectively.
                    793: 
                    794: `REG_LABEL'
                    795:      This insn uses OP, a `code_label', but is not a `jump_insn'.  The
                    796:      presence of this note allows jump optimization to be aware that
                    797:      OP is, in fact, being used.
                    798: 
                    799:    The following notes describe attributes of outputs of an insn:
                    800: 
                    801: `REG_EQUIV'
                    802: `REG_EQUAL'
                    803:      This note is only valid on an insn that sets only one register and
                    804:      indicates that that register will be equal to OP at run time; the
                    805:      scope of this equivalence differs between the two types of notes.
                    806:       The value which the insn explicitly copies into the register may
                    807:      look different from OP, but they will be equal at run time.  If
                    808:      the output of the single `set' is a `strict_low_part' expression,
                    809:      the note refers to the register that is contained in `SUBREG_REG'
                    810:      of the `subreg' expression.
                    811: 
                    812:      For `REG_EQUIV', the register is equivalent to OP throughout the
                    813:      entire function, and could validly be replaced in all its
                    814:      occurrences by OP.  ("Validly" here refers to the data flow of
                    815:      the program; simple replacement may make some insns invalid.)  For
                    816:      example, when a constant is loaded into a register that is never
                    817:      assigned any other value, this kind of note is used.
                    818: 
                    819:      When a parameter is copied into a pseudo-register at entry to a
                    820:      function, a note of this kind records that the register is
                    821:      equivalent to the stack slot where the parameter was passed. 
                    822:      Although in this case the register may be set by other insns, it
                    823:      is still valid to replace the register by the stack slot
                    824:      throughout the function.
                    825: 
                    826:      In the case of `REG_EQUAL', the register that is set by this insn
                    827:      will be equal to OP at run time at the end of this insn but not
                    828:      necessarily elsewhere in the function.  In this case, OP is
                    829:      typically an arithmetic expression.  For example, when a sequence
                    830:      of insns such as a library call is used to perform an arithmetic
                    831:      operation, this kind of note is attached to the insn that
                    832:      produces or copies the final value.
                    833: 
                    834:      These two notes are used in different ways by the compiler passes. 
                    835:      `REG_EQUAL' is used by passes prior to register allocation (such
                    836:      as common subexpression elimination and loop optimization) to
                    837:      tell them how to think of that value.  `REG_EQUIV' notes are used
                    838:      by register allocation to indicate that there is an available
                    839:      substitute expression (either a constant or a `mem' expression
                    840:      for the location of a parameter on the stack) that may be used in
                    841:      place of a register if insufficient registers are available.
                    842: 
                    843:      Except for stack homes for parameters, which are indicated by a
                    844:      `REG_EQUIV' note and are not useful to the early optimization
                    845:      passes and pseudo registers that are equivalent to a memory
                    846:      location throughout there entire life, which is not detected
                    847:      until later in the compilation, all equivalences are initially
                    848:      indicated by an attached `REG_EQUAL' note.  In the early stages
                    849:      of register allocation, a `REG_EQUAL' note is changed into a
                    850:      `REG_EQUIV' note if OP is a constant and the insn represents the
                    851:      only set of its destination register.
                    852: 
                    853:      Thus, compiler passes prior to register allocation need only
                    854:      check for `REG_EQUAL' notes and passes subsequent to register
                    855:      allocation need only check for `REG_EQUIV' notes.
                    856: 
                    857: `REG_UNUSED'
                    858:      The register OP being set by this insn will not be used in a
                    859:      subsequent insn.  This differs from a `REG_DEAD' note, which
                    860:      indicates that the value in an input will not be used
                    861:      subsequently.  These two notes are independent; both may be
                    862:      present for the same register.
                    863: 
                    864: `REG_WAS_0'
                    865:      The single output of this insn contained zero before this insn. 
                    866:      OP is the insn that set it to zero.  You can rely on this note if
                    867:      it is present and OP has not been deleted or turned into a `note';
                    868:      its absence implies nothing.
                    869: 
                    870:    These notes describe linkages between insns.  They occur in pairs:
                    871: one insn has one of a pair of notes that points to a second insn,
                    872: which has the inverse note pointing back to the first insn.
                    873: 
                    874: `REG_RETVAL'
                    875:      This insn copies the value of a multi-insn sequence (for example,
                    876:      a library call), and OP is the first insn of the sequence (for a
                    877:      library call, the first insn that was generated to set up the
                    878:      arguments for the library call).
                    879: 
                    880:      Loop optimization uses this note to treat such a sequence as a
                    881:      single operation for code motion purposes and flow analysis uses
                    882:      this note to delete such sequences whose results are dead.
                    883: 
                    884:      A `REG_EQUAL' note will also usually be attached to this insn to
                    885:      provide the expression being computed by the sequence.
                    886: 
                    887: `REG_LIBCALL'
                    888:      This is the inverse of `REG_RETVAL': it is placed on the first
                    889:      insn of a multi-insn sequence, and it points to the last one.
                    890: 
                    891: `REG_CC_SETTER'
                    892: `REG_CC_USER'
                    893:      On machines that use `cc0', the insns which set and use `cc0' set
                    894:      and use `cc0' are adjacent.  However, when branch delay slot
                    895:      filling is done, this may no longer be true.  In this case a
                    896:      `REG_CC_USER' note will be placed on the insn setting `cc0' to
                    897:      point to the insn using `cc0' and a `REG_CC_SETTER' note will be
                    898:      placed on the insn using `cc0' to point to the insn setting `cc0'.
                    899: 
                    900:    These values are only used in the `LOG_LINKS' field, and indicate
                    901: the type of dependency that each link represents.  Links which indicate
                    902: a data dependence (a read after write dependence) do not use any code,
                    903: they simply have mode `VOIDmode', and are printed without any
                    904: descriptive text.
                    905: 
                    906: `REG_DEP_ANTI'
                    907:      This indicates an anti dependence (a write after read dependence).
                    908: 
                    909: `REG_DEP_OUTPUT'
                    910:      This indicates an output dependence (a write after write
                    911:      dependence).
                    912: 
                    913:    For convenience, the machine mode in an `insn_list' or `expr_list'
                    914: is printed using these symbolic codes in debugging dumps.
                    915: 
                    916:    The only difference between the expression codes `insn_list' and
                    917: `expr_list' is that the first operand of an `insn_list' is assumed to
                    918: be an insn and is printed in debugging dumps as the insn's unique id;
                    919: the first operand of an `expr_list' is printed in the ordinary way as
                    920: an expression.
                    921: 
                    922: 
                    923: File: gcc.info,  Node: Calls,  Next: Sharing,  Prev: Insns,  Up: RTL
                    924: 
                    925: RTL Representation of Function-Call Insns
                    926: =========================================
                    927: 
                    928:    Insns that call subroutines have the RTL expression code
                    929: `call_insn'.  These insns must satisfy special rules, and their bodies
                    930: must use a special RTL expression code, `call'.
                    931: 
                    932:    A `call' expression has two operands, as follows:
                    933: 
                    934:      (call (mem:FM ADDR) NBYTES)
                    935: 
                    936: Here NBYTES is an operand that represents the number of bytes of
                    937: argument data being passed to the subroutine, FM is a machine mode
                    938: (which must equal as the definition of the `FUNCTION_MODE' macro in
                    939: the machine description) and ADDR represents the address of the
                    940: subroutine.
                    941: 
                    942:    For a subroutine that returns no value, the `call' expression as
                    943: shown above is the entire body of the insn, except that the insn might
                    944: also contain `use' or `clobber' expressions.
                    945: 
                    946:    For a subroutine that returns a value whose mode is not `BLKmode',
                    947: the value is returned in a hard register.  If this register's number is
                    948: R, then the body of the call insn looks like this:
                    949: 
                    950:      (set (reg:M R)
                    951:           (call (mem:FM ADDR) NBYTES))
                    952: 
                    953: This RTL expression makes it clear (to the optimizer passes) that the
                    954: appropriate register receives a useful value in this insn.
                    955: 
                    956:    When a subroutine returns a `BLKmode' value, it is handled by
                    957: passing to the subroutine the address of a place to store the value. 
                    958: So the call insn itself does not "return" any value, and it has the
                    959: same RTL form as a call that returns nothing.
                    960: 
                    961:    On some machines, the call instruction itself clobbers some
                    962: register, for example to contain the return address.  `call_insn' insns
                    963: on these machines should have a body which is a `parallel' that
                    964: contains both the `call' expression and `clobber' expressions that
                    965: indicate which registers are destroyed.  Similarly, if the call
                    966: instruction requires some register other than the stack pointer that
                    967: is not explicitly mentioned it its RTL, a `use' subexpression should
                    968: mention that register.
                    969: 
                    970:    Functions that are called are assumed to modify all registers
                    971: listed in the configuration macro `CALL_USED_REGISTERS' (*note
                    972: Register Basics::.) and, with the exception of `const' functions and
                    973: library calls, to modify all of memory.
                    974: 
                    975:    Insns containing just `use' expressions directly precede the
                    976: `call_insn' insn to indicate which registers contain inputs to the
                    977: function.  Similarly, if registers other than those in
                    978: `CALL_USED_REGISTERS' are clobbered by the called function, insns
                    979: containing a single `clobber' follow immediately after the call to
                    980: indicate which registers.
                    981: 
                    982: 
                    983: File: gcc.info,  Node: Sharing,  Prev: Calls,  Up: RTL
                    984: 
                    985: Structure Sharing Assumptions
                    986: =============================
                    987: 
                    988:    The compiler assumes that certain kinds of RTL expressions are
                    989: unique; there do not exist two distinct objects representing the same
                    990: value.  In other cases, it makes an opposite assumption: that no RTL
                    991: expression object of a certain kind appears in more than one place in
                    992: the containing structure.
                    993: 
                    994:    These assumptions refer to a single function; except for the RTL
                    995: objects that describe global variables and external functions, and a
                    996: few standard objects such as small integer constants, no RTL objects
                    997: are common to two functions.
                    998: 
                    999:    * Each pseudo-register has only a single `reg' object to represent
                   1000:      it, and therefore only a single machine mode.
                   1001: 
                   1002:    * For any symbolic label, there is only one `symbol_ref' object
                   1003:      referring to it.
                   1004: 
                   1005:    * There is only one `const_int' expression with value 0, only one
                   1006:      with value 1, and only one with value -1.  Some other integer
                   1007:      values are also stored uniquely.
                   1008: 
                   1009:    * There is only one `pc' expression.
                   1010: 
                   1011:    * There is only one `cc0' expression.
                   1012: 
                   1013:    * There is only one `const_double' expression with value 0 for each
                   1014:      floating point mode.  Likewise for values 1 and 2.
                   1015: 
                   1016:    * No `label_ref' or `scratch' appears in more than one place in the
                   1017:      RTL structure; in other words, it is safe to do a tree-walk of all
                   1018:      the insns in the function and assume that each time a `label_ref'
                   1019:      or `scratch' is seen it is distinct from all others that are seen.
                   1020: 
                   1021:    * Only one `mem' object is normally created for each static
                   1022:      variable or stack slot, so these objects are frequently shared in
                   1023:      all the places they appear.  However, separate but equal objects
                   1024:      for these variables are occasionally made.
                   1025: 
                   1026:    * When a single `asm' statement has multiple output operands, a
                   1027:      distinct `asm_operands' expression is made for each output
                   1028:      operand.  However, these all share the vector which contains the
                   1029:      sequence of input operands.  This sharing is used later on to
                   1030:      test whether two `asm_operands' expressions come from the same
                   1031:      statement, so all optimizations must carefully preserve the
                   1032:      sharing if they copy the vector at all.
                   1033: 
                   1034:    * No RTL object appears in more than one place in the RTL structure
                   1035:      except as described above.  Many passes of the compiler rely on
                   1036:      this by assuming that they can modify RTL objects in place
                   1037:      without unwanted side-effects on other insns.
                   1038: 
                   1039:    * During initial RTL generation, shared structure is freely
                   1040:      introduced.  After all the RTL for a function has been generated,
                   1041:      all shared structure is copied by `unshare_all_rtl' in
                   1042:      `emit-rtl.c', after which the above rules are guaranteed to be
                   1043:      followed.
                   1044: 
                   1045:    * During the combiner pass, shared structure within an insn can
                   1046:      exist temporarily.  However, the shared structure is copied
                   1047:      before the combiner is finished with the insn.  This is done by
                   1048:      calling `copy_rtx_if_shared', which is a subroutine of
                   1049:      `unshare_all_rtl'.
                   1050: 
                   1051: 
                   1052: File: gcc.info,  Node: Machine Desc,  Next: Machine Macros,  Prev: RTL,  Up: Top
                   1053: 
                   1054: Machine Descriptions
                   1055: ********************
                   1056: 
                   1057:    A machine description has two parts: a file of instruction patterns
                   1058: (`.md' file) and a C header file of macro definitions.
                   1059: 
                   1060:    The `.md' file for a target machine contains a pattern for each
                   1061: instruction that the target machine supports (or at least each
                   1062: instruction that is worth telling the compiler about).  It may also
                   1063: contain comments.  A semicolon causes the rest of the line to be a
                   1064: comment, unless the semicolon is inside a quoted string.
                   1065: 
                   1066:    See the next chapter for information on the C header file.
                   1067: 
                   1068: * Menu:
                   1069: 
                   1070: * Patterns::            How to write instruction patterns.
                   1071: * Example::             An explained example of a `define_insn' pattern.
                   1072: * RTL Template::        The RTL template defines what insns match a pattern.
                   1073: * Output Template::     The output template says how to make assembler code
                   1074:                           from such an insn.
                   1075: * Output Statement::    For more generality, write C code to output
                   1076:                           the assembler code.
                   1077: * Constraints::         When not all operands are general operands.
                   1078: * Standard Names::      Names mark patterns to use for code generation.
                   1079: * Pattern Ordering::    When the order of patterns makes a difference.
                   1080: * Dependent Patterns::  Having one pattern may make you need another.
                   1081: * Jump Patterns::       Special considerations for patterns for jump insns.
                   1082: * Insn Canonicalizations::Canonicalization of Instructions
                   1083: * Peephole Definitions::Defining machine-specific peephole optimizations.
                   1084: * Expander Definitions::Generating a sequence of several RTL insns
                   1085:                          for a standard operation.
                   1086: * Insn Splitting::    Splitting Instructions into Multiple Instructions
                   1087: * Insn Attributes::     Specifying the value of attributes for generated insns.
                   1088: 
                   1089: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.