home *** CD-ROM | disk | FTP | other *** search
/ Media Share 9 / MEDIASHARE_09.ISO / cprog / gccdoc2.zip / RTL.TXT < prev    next >
Text File  |  1992-05-22  |  131KB  |  3,367 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.                 INTERNALS
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.           1.  RTL Representation
  75.  
  76.                Most of the work of the compiler is done on  an  inter-
  77.           mediate  representation  called  register transfer language.
  78.           In  this  language,  the  instructions  to  be  output   are
  79.           described, pretty much one by one, in an algebraic form that
  80.           describes what the instruction does.
  81.  
  82.                RTL is inspired by Lisp lists.  It has both an internal
  83.           form,  made up of structures that point at other structures,
  84.           and a textual form that is used in the  machine  description
  85.           and  in  printed  debugging  dumps.   The  textual form uses
  86.           nested parentheses to indicate the pointers in the  internal
  87.           form.
  88.  
  89.  
  90.  
  91.           1.1.  RTL Object Types
  92.  
  93.                RTL uses four kinds of objects: expressions,  integers,
  94.           strings  and  vectors.   Expressions  are the most important
  95.           ones.  An RTL expression (``RTX'', for short) is a C  struc-
  96.           ture,  but  it is usually referred to with a pointer; a type
  97.           that is given the typedef name rtx.
  98.  
  99.                An integer is simply an int; their  written  form  uses
  100.           decimal digits.
  101.  
  102.                A string is a sequence of characters.  In  core  it  is
  103.           represented  as a char * in usual C fashion, and it is writ-
  104.           ten in C syntax as well.  However, strings in RTL may  never
  105.           be null.  If you write an empty string in a machine descrip-
  106.           tion, it is represented in core as  a  null  pointer  rather
  107.           than as a pointer to a null character.  In certain contexts,
  108.           these null pointers instead of strings  are  valid.   Within
  109.           RTL  code, strings are most commonly found inside symbol_ref
  110.           expressions, but they appear in other contexts  in  the  RTL
  111.           expressions that make up machine descriptions.
  112.  
  113.                A vector contains an arbitrary number  of  pointers  to
  114.           expressions.  The number of elements in the vector is expli-
  115.           citly present in the vector.  The written form of  a  vector
  116.           consists  of  square brackets (`[...]') surrounding the ele-
  117.           ments, in sequence  and  with  whitespace  separating  them.
  118.           Vectors  of  length  zero are not created; null pointers are
  119.           used instead.
  120.  
  121.                Expressions are classified by  expression  codes  (also
  122.           called RTX codes).  The expression code is a name defined in
  123.           `rtl.def', which is also (in upper  case)  a  C  enumeration
  124.           constant.   The possible expression codes and their meanings
  125.           are  machine-independent.   The  code  of  an  RTX  can   be
  126.           extracted  with  the  macro  GET_CODE  (x)  and altered with
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.  
  135.  
  136.  
  137.  
  138.  
  139.  
  140.           PUT_CODE (x, newcode).
  141.  
  142.                The expression code determines how  many  operands  the
  143.           expression contains, and what kinds of objects they are.  In
  144.           RTL, unlike Lisp, you cannot tell by looking at  an  operand
  145.           what  kind of object it is.  Instead, you must know from its
  146.           context---from the expression code of the containing expres-
  147.           sion.   For  example,  in  an expression of code subreg, the
  148.           first operand is to be regarded as  an  expression  and  the
  149.           second  operand  as  an  integer.   In an expression of code
  150.           plus, there are two  operands,  both  of  which  are  to  be
  151.           regarded  as expressions.  In a symbol_ref expression, there
  152.           is one operand, which is to be regarded as a string.
  153.  
  154.                Expressions are written as parentheses  containing  the
  155.           name  of  the expression type, its flags and machine mode if
  156.           any, and then the operands of the expression  (separated  by
  157.           spaces).
  158.  
  159.                Expression code names in the `md' file are  written  in
  160.           lower  case, but when they appear in C code they are written
  161.           in upper case.  In this manual, they are shown  as  follows:
  162.           const_int.
  163.  
  164.                In a few contexts a null  pointer  is  valid  where  an
  165.           expression  is normally wanted.  The written form of this is
  166.           (nil).
  167.  
  168.           1.2.  Access to Operands
  169.  
  170.                For each expression type `rtl.def' specifies the number
  171.           of  contained  objects and their kinds, with four possibili-
  172.           ties: `e' for expression (actually a pointer to  an  expres-
  173.           sion),  `i'  for integer, `s' for string, and `E' for vector
  174.           of expressions.  The sequence of letters for  an  expression
  175.           code  is  called  its format.  Thus, the format of subreg is
  176.           `ei'.
  177.  
  178.                A few other format characters are used occasionally:
  179.  
  180.                u    `u' is equivalent to `e' except that it is printed
  181.                     differently  in  debugging  dumps.  It is used for
  182.                     pointers to insns.
  183.  
  184.                n    `n' is equivalent to `i' except that it is printed
  185.                     differently  in  debugging  dumps.  It is used for
  186.                     the line number or code number of a note insn.
  187.  
  188.                S    `S' indicates a string which is optional.  In  the
  189.                     RTL objects in core, `S' is equivalent to `s', but
  190.                     when the object is read, from an  `md'  file,  the
  191.                     string  value  of this operand may be omitted.  An
  192.                     omitted string is taken to be the null string.
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.                V    `V' indicates a vector which is optional.  In  the
  207.                     RTL objects in core, `V' is equivalent to `E', but
  208.                     when the object is read from  an  `md'  file,  the
  209.                     vector  value  of this operand may be omitted.  An
  210.                     omitted vector is effectively the same as a vector
  211.                     of no elements.
  212.  
  213.                0    `0' means a slot whose contents  do  not  fit  any
  214.                     normal category.  `0' slots are not printed at all
  215.                     in dumps, and are often used in  special  ways  by
  216.                     small parts of the compiler.
  217.  
  218.  
  219.                There are macros to get the  number  of  operands,  the
  220.           format, and the class of an expression code:
  221.  
  222.                GET_RTX_LENGTH (code)
  223.                     Number of operands of an RTX of code code.
  224.  
  225.                GET_RTX_FORMAT (code)
  226.                     The format of an RTX of code code, as a C string.
  227.  
  228.                GET_RTX_CLASS (code)
  229.                     A single character representing the  type  of  RTX
  230.                     operation that code code performs.
  231.  
  232.                     The following classes are defined:
  233.  
  234.                     o    An RTX code that represents an actual object,
  235.                          such  as  reg  or mem.  subreg is not in this
  236.                          class.
  237.  
  238.                     <    An RTX code for a comparison.  The  codes  in
  239.                          this  class  are NE, EQ, LE, LT, GE, GT, LEU,
  240.                          LTU, GEU, GTU.
  241.  
  242.                     1    An RTX code for a unary arithmetic operation,
  243.                          such as neg.
  244.  
  245.                     c    An RTX code for a commutative  binary  opera-
  246.                          tion,  other than NE and EQ (which have class
  247.                          `<').
  248.  
  249.                     2    An  RTX  code  for  a  noncommutative  binary
  250.                          operation, such as MINUS.
  251.  
  252.                     b    An  RTX  code  for   a   bitfield   operation
  253.                          (ZERO_EXTRACT and SIGN_EXTRACT).
  254.  
  255.                     3    An RTX code for other three input operations,
  256.                          such as IF_THEN_ELSE.
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.                     i    An  RTX  code  for  a  machine  insn   (INSN,
  273.                          JUMP_INSN, and CALL_INSN).
  274.  
  275.                     m    An RTX code for  something  that  matches  in
  276.                          insns, such as MATCH_DUP.
  277.  
  278.                     x    All other RTX codes.
  279.  
  280.  
  281.  
  282.                Operands of expressions are accessed using  the  macros
  283.           XEXP,  XINT  and XSTR.  Each of these macros takes two argu-
  284.           ments: an expression-pointer (RTX)  and  an  operand  number
  285.           (counting from zero).  Thus,
  286.  
  287.  
  288.               XEXP (x, 2)
  289.  
  290.  
  291.  
  292.           accesses operand 2 of expression x, as an expression.
  293.  
  294.  
  295.               XINT (x, 2)
  296.  
  297.  
  298.  
  299.           accesses the same operand as an integer.  XSTR, used in  the
  300.           same fashion, would access it as a string.
  301.  
  302.                Any operand can  be  accessed  as  an  integer,  as  an
  303.           expression  or  as  a  string.   You must choose the correct
  304.           method of access for the kind of value  actually  stored  in
  305.           the operand.  You would do this based on the expression code
  306.           of the containing expression.  That is also  how  you  would
  307.           know how many operands there are.
  308.  
  309.                For example, if x is a subreg expression, you know that
  310.           it  has two operands which can be correctly accessed as XEXP
  311.           (x, 0) and XINT (x, 1).  If you did XINT (x, 0),  you  would
  312.           get  the  address  of  the expression operand but cast as an
  313.           integer; that might occasionally be useful, but it would  be
  314.           cleaner  to write (int) XEXP (x, 0).  XEXP (x, 1) would also
  315.           compile without error, and would return the second,  integer
  316.           operand  cast as an expression pointer, which would probably
  317.           result in a crash when accessed.   Nothing  stops  you  from
  318.           writing  XEXP  (x,  28)  either, but this will access memory
  319.           past the end of the expression with unpredictable results.
  320.  
  321.                Access to operands which are vectors  is  more  compli-
  322.           cated.  You can use the macro XVEC to get the vector-pointer
  323.           itself, or the macros XVECEXP and XVECLEN to access the ele-
  324.           ments and length of a vector.
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.  
  333.  
  334.  
  335.  
  336.  
  337.  
  338.                XVEC (exp, idx)
  339.                     Access the vector-pointer which is operand  number
  340.                     idx in exp.
  341.  
  342.                XVECLEN (exp, idx)
  343.                     Access the length (number of elements) in the vec-
  344.                     tor  which  is in operand number idx in exp.  This
  345.                     value is an int.
  346.  
  347.                XVECEXP (exp, idx, eltnum)
  348.                     Access element number eltnum in the  vector  which
  349.                     is in operand number idx in exp.  This value is an
  350.                     RTX.
  351.  
  352.                     It is up to you to make sure that  eltnum  is  not
  353.                     negative and is less than XVECLEN (exp, idx).
  354.  
  355.  
  356.                All the macros defined  in  this  section  expand  into
  357.           lvalues  and  therefore  can be used to assign the operands,
  358.           lengths and vector elements as well as to access them.
  359.  
  360.           1.3.  Flags in an RTL Expression
  361.  
  362.                RTL expressions contain  several  flags  (one-bit  bit-
  363.           fields)  that are used in certain types of expression.  Most
  364.           often they are accessed with the following macros:
  365.  
  366.                MEM_VOLATILE_P (x)
  367.                     In mem expressions, nonzero  for  volatile  memory
  368.                     references.   Stored  in  the  volatil  field  and
  369.                     printed as `/v'.
  370.  
  371.                MEM_IN_STRUCT_P (x)
  372.                     In mem expressions, nonzero for  reference  to  an
  373.                     entire  structure,  union  or  array, or to a com-
  374.                     ponent of one.  Zero for references  to  a  scalar
  375.                     variable or through a pointer to a scalar.  Stored
  376.                     in the in_struct field and printed as `/s'.
  377.  
  378.                REG_LOOP_TEST_P
  379.                     In reg expressions, nonzero if this register's en-
  380.                     tire  life  is contained in the exit test code for
  381.                     some loop.  Stored  in  the  in_struct  field  and
  382.                     printed as `/s'.
  383.  
  384.                REG_USERVAR_P (x)
  385.                     In a reg, nonzero if it corresponds to a  variable
  386.                     present  in the user's source code.  Zero for tem-
  387.                     poraries generated  internally  by  the  compiler.
  388.                     Stored in the volatil field and printed as `/v'.
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.                REG_FUNCTION_VALUE_P (x)
  405.                     Nonzero in a reg if it is the place in which  this
  406.                     function's  value  is going to be returned.  (This
  407.                     happens only in a hard register.)  Stored  in  the
  408.                     integrated field and printed as `/i'.
  409.  
  410.                     The same hard register may be used also  for  col-
  411.                     lecting  the  values  of  functions called by this
  412.                     one, but REG_FUNCTION_VALUE_P is zero in this kind
  413.                     of use.
  414.  
  415.                RTX_UNCHANGING_P (x)
  416.                     Nonzero in a reg  or  mem  if  the  value  is  not
  417.                     changed.   (This flag is not set for memory refer-
  418.                     ences via pointers to  constants.   Such  pointers
  419.                     only guarantee that the object will not be changed
  420.                     explicitly by the current  function.   The  object
  421.                     might  be  changed by other functions or by alias-
  422.                     ing.)  Stored in the unchanging field and  printed
  423.                     as `/u'.
  424.  
  425.                RTX_INTEGRATED_P (insn)
  426.                     Nonzero in an insn if it resulted from an  in-line
  427.                     function call.  Stored in the integrated field and
  428.                     printed as `/i'.  This  may  be  deleted;  nothing
  429.                     currently depends on it.
  430.  
  431.                SYMBOL_REF_USED (x)
  432.                     In a symbol_ref, indicates that x has  been  used.
  433.                     This  is  normally  only  used to ensure that x is
  434.                     only declared external once.  Stored in  the  used
  435.                     field.
  436.  
  437.                SYMBOL_REF_FLAG (x)
  438.                     In a symbol_ref,  this  is  used  as  a  flag  for
  439.                     machine-specific  purposes.  Stored in the volatil
  440.                     field and printed as `/v'.
  441.  
  442.                LABEL_OUTSIDE_LOOP_P
  443.                     In label_ref expressions, nonzero  if  this  is  a
  444.                     reference to a label that is outside the innermost
  445.                     loop  containing  the  reference  to  the   label.
  446.                     Stored in the in_struct field and printed as `/s'.
  447.  
  448.                INSN_DELETED_P (insn)
  449.                     In an insn, nonzero if the insn has been  deleted.
  450.                     Stored in the volatil field and printed as `/v'.
  451.  
  452.                INSN_ANNULLED_BRANCH_P (insn)
  453.                     In an insn in the delay slot of a branch insn, in-
  454.                     dicates  that  an annulling branch should be used.
  455.                     See the discussion under sequence  below.   Stored
  456.                     in the unchanging field and printed as `/u'.
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.                INSN_FROM_TARGET_P (insn)
  471.                     In an insn in a delay slot of a branch,  indicates
  472.                     that  the  insn  is from the target of the branch.
  473.                     If the branch insn has INSN_ANNULLED_BRANCH_P set,
  474.                     this insn should only be executed if the branch is
  475.                     taken.  For annulled branches with this bit clear,
  476.                     the  insn should be executed only if the branch is
  477.                     not taken.  Stored  in  the  in_struct  field  and
  478.                     printed as `/s'.
  479.  
  480.                CONSTANT_POOL_ADDRESS_P (x)
  481.                     Nonzero in a symbol_ref if it refers  to  part  of
  482.                     the  current function's ``constants pool''.  These
  483.                     are addresses close to the beginning of the  func-
  484.                     tion,  and  GNU  CC  assumes they can be addressed
  485.                     directly (perhaps with the  help  of  base  regis-
  486.                     ters).  Stored in the unchanging field and printed
  487.                     as `/u'.
  488.  
  489.                CONST_CALL_P (x)
  490.                     In a call_insn, indicates that the insn represents
  491.                     a  call  to  a  const function.  Stored in the un-
  492.                     changing field and printed as `/u'.
  493.  
  494.                LABEL_PRESERVE_P (x)
  495.                     In a code_label, indicates that the label can nev-
  496.                     er be deleted.  Labels referenced by a a non-local
  497.                     goto will  have  this  bit  set.   Stored  in  the
  498.                     in_struct field and printed as `/s'.
  499.  
  500.                SCHED_GROUP_P (insn)
  501.                     During instruction scheduling, in an  insn,  indi-
  502.                     cates that the previous insn must be scheduled to-
  503.                     gether with this insn.  This  is  used  to  ensure
  504.                     that  certain  groups  of instructions will not be
  505.                     split up by the instruction scheduling  pass,  for
  506.                     example,  use  insns before a call_insn may not be
  507.                     separated  from  the  call_insn.   Stored  in  the
  508.                     in_struct field and printed as `/s'.
  509.  
  510.  
  511.                These are the fields which the above macros refer to:
  512.  
  513.                used
  514.                     Normally, this flag is used only  momentarily,  at
  515.                     the end of RTL generation for a function, to count
  516.                     the number  of  times  an  expression  appears  in
  517.                     insns.  Expressions that appear more than once are
  518.                     copied, according to the rules for  shared  struc-
  519.                     ture (see section  Sharing).
  520.  
  521.                     In a symbol_ref, it indicates that an external de-
  522.                     claration for the symbol has already been written.
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.                     In  a  reg,  it  is  used  by  the  leaf  register
  537.                     renumbering  code  to ensure that each register is
  538.                     only renumbered once.
  539.  
  540.                volatil
  541.                     This flag is used in mem,symbol_ref  and  reg  ex-
  542.                     pressions  and in insns.  In RTL dump files, it is
  543.                     printed as `/v'.
  544.  
  545.                     In a mem expression, it is 1 if the memory  refer-
  546.                     ence  is volatile.  Volatile memory references may
  547.                     not be deleted, reordered or combined.
  548.  
  549.                     In  a  symbol_ref  expression,  it  is  used   for
  550.                     machine-specific purposes.
  551.  
  552.                     In a reg expression, it is 1 if  the  value  is  a
  553.                     user-level variable.  0 indicates an internal com-
  554.                     piler temporary.
  555.  
  556.                     In an insn, 1 means the insn has been deleted.
  557.  
  558.                in_struct
  559.                     In mem expressions, it is 1 if  the  memory  datum
  560.                     referred  to  is all or part of a structure or ar-
  561.                     ray; 0 if it is (or might be) a  scalar  variable.
  562.                     A  reference through a C pointer has 0 because the
  563.                     pointer might point to a  scalar  variable.   This
  564.                     information allows the compiler to determine some-
  565.                     thing about possible cases of aliasing.
  566.  
  567.                     In an insn in the delay slot of a branch, 1  means
  568.                     that this insn is from the target of the branch.
  569.  
  570.                     During instruction scheduling, in an insn, 1 means
  571.                     that  this  insn  must  be  scheduled as part of a
  572.                     group together with the previous insn.
  573.  
  574.                     In reg expressions, it is 1 if  the  register  has
  575.                     its  entire life contained within the test expres-
  576.                     sion of some loopl.
  577.  
  578.                     In label_ref expressions, 1 means that the  refer-
  579.                     enced label is outside the innermost loop contain-
  580.                     ing the insn in which the label_ref was found.
  581.  
  582.                     In code_label expressions, it is 1  if  the  label
  583.                     may  never  be  deleted.   This is used for labels
  584.                     which are the target of non-local gotos.
  585.  
  586.                     In an RTL dump, this flag is represented as `/s'.
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.  
  600.  
  601.  
  602.                unchanging
  603.                     In reg and mem expressions, 1 means that the value
  604.                     of the expression never changes.
  605.  
  606.                     In an insn, 1 means  that  this  is  an  annulling
  607.                     branch.
  608.  
  609.                     In a symbol_ref expression, 1 means that this sym-
  610.                     bol  addresses  something in the per-function con-
  611.                     stants pool.
  612.  
  613.                     In a call_insn, 1 means that this instruction is a
  614.                     call to a const function.
  615.  
  616.                     In an RTL dump, this flag is represented as `/u'.
  617.  
  618.                integrated
  619.                     In some kinds  of  expressions,  including  insns,
  620.                     this  flag means the rtl was produced by procedure
  621.                     integration.
  622.  
  623.                     In a reg expression, this flag indicates  the  re-
  624.                     gister  containing the value to be returned by the
  625.                     current function.  On machines that  pass  parame-
  626.                     ters in registers, the same register number may be
  627.                     used for parameters as well, but this flag is  not
  628.                     set on such uses.
  629.  
  630.  
  631.           1.4.  Machine Modes
  632.  
  633.                A machine mode describes a size of data object and  the
  634.           representation  used  for  it.  In the C code, machine modes
  635.           are represented by an enumeration type,  enum  machine_mode,
  636.           defined in `machmode.def'.  Each RTL expression has room for
  637.           a machine mode and so do certain kinds of  tree  expressions
  638.           (declarations and types, to be precise).
  639.  
  640.                In  debugging  dumps  and  machine  descriptions,   the
  641.           machine  mode  of  an  RTL  expression  is written after the
  642.           expression code with a colon to separate them.  The  letters
  643.           `mode' which appear at the end of each machine mode name are
  644.           omitted.  For example, (reg:SI 38) is a reg expression  with
  645.           machine  mode  SImode.   If  the mode is VOIDmode, it is not
  646.           written at all.
  647.  
  648.                Here is a table of machine modes.   The  term  ``byte''
  649.           below refers to an object of BITS_PER_UNIT bits (see section
  650.           Storage Layout).
  651.  
  652.                QImode
  653.                     ``Quarter-Integer'' mode represents a single  byte
  654.                     treated as an integer.
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.  
  663.  
  664.  
  665.  
  666.  
  667.  
  668.                HImode
  669.                     ``Half-Integer'' mode represents  a  two-byte  in-
  670.                     teger.
  671.  
  672.                PSImode
  673.                     ``Partial Single Integer'' mode represents an  in-
  674.                     teger  which occupies four bytes but which doesn't
  675.                     really use all four.  On some  machines,  this  is
  676.                     the right mode to use for pointers.
  677.  
  678.                SImode
  679.                     ``Single Integer'' mode represents a four-byte in-
  680.                     teger.
  681.  
  682.                PDImode
  683.                     ``Partial Double Integer'' mode represents an  in-
  684.                     teger which occupies eight bytes but which doesn't
  685.                     really use all eight.  On some machines,  this  is
  686.                     the right mode to use for certain pointers.
  687.  
  688.                DImode
  689.                     ``Double Integer'' mode represents  an  eight-byte
  690.                     integer.
  691.  
  692.                TImode
  693.                     ``Tetra Integer'' (?) mode represents  a  sixteen-
  694.                     byte integer.
  695.  
  696.                SFmode
  697.                     ``Single  Floating''  mode  represents  a  single-
  698.                     precision (four byte) floating point number.
  699.  
  700.                DFmode
  701.                     ``Double  Floating''  mode  represents  a  double-
  702.                     precision (eight byte) floating point number.
  703.  
  704.                XFmode
  705.                     ``Extended Floating'' mode  represents  a  triple-
  706.                     precision  (twelve  byte)  floating  point number.
  707.                     This mode  is  used  for  IEEE  extended  floating
  708.                     point.
  709.  
  710.                TFmode
  711.                     ``Tetra Floating'' mode  represents  a  quadruple-
  712.                     precision (sixteen byte) floating point number.
  713.  
  714.                CCmode
  715.                     ``Condition Code'' mode represents the value of  a
  716.                     condition code, which is a machine-specific set of
  717.                     bits used to represent the result of a  comparison
  718.                     operation.   Other machine-specific modes may also
  719.                     be used for the condition code.  These  modes  are
  720.                     not used on machines that use cc0 (see see section
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.  
  729.  
  730.  
  731.  
  732.  
  733.  
  734.                     Condition Code).
  735.  
  736.                BLKmode
  737.                     ``Block'' mode represents values that  are  aggre-
  738.                     gates  to which none of the other modes apply.  In
  739.                     RTL, only memory references can  have  this  mode,
  740.                     and  only  if they appear in string-move or vector
  741.                     instructions.  On machines which have no such  in-
  742.                     structions, BLKmode will not appear in RTL.
  743.  
  744.                VOIDmode
  745.                     Void mode means the absence of a mode  or  an  un-
  746.                     specified  mode.   For example, RTL expressions of
  747.                     code const_int have mode VOIDmode because they can
  748.                     be  taken  to  have  whatever mode the context re-
  749.                     quires.  In debugging dumps of  RTL,  VOIDmode  is
  750.                     expressed by the absence of any mode.
  751.  
  752.                SCmode, DCmode, XCmode, TCmode
  753.                     These modes stand for a complex number represented
  754.                     as  a  pair  of floating point values.  The values
  755.                     are in SFmode, DFmode, XFmode, and TFmode, respec-
  756.                     tively.  Since C does not support complex numbers,
  757.                     these machine modes are only partially  implement-
  758.                     ed.
  759.  
  760.  
  761.                The machine description defines  Pmode  as  a  C  macro
  762.           which  expands  into  the  machine  mode used for addresses.
  763.           Normally this is  the  mode  whose  size  is  BITS_PER_WORD,
  764.           SImode on 32-bit machines.
  765.  
  766.                The only modes which a machine description must support
  767.           are  QImode,  and  the modes corresponding to BITS_PER_WORD,
  768.           FLOAT_TYPE_SIZE and  DOUBLE_TYPE_SIZE.   The  compiler  will
  769.           attempt  to use DImode for 8-byte structures and unions, but
  770.           this can  be  prevented  by  overriding  the  definition  of
  771.           MAX_FIXED_MODE_SIZE.   Alternatively,  you can have the com-
  772.           piler use TImode for 16-byte structures and  unions.   Like-
  773.           wise,  you  can  arrange  for  the C type short int to avoid
  774.           using HImode.
  775.  
  776.                Very few explicit references to machine modes remain in
  777.           the  compiler and these few references will soon be removed.
  778.           Instead, the machine modes are divided  into  mode  classes.
  779.           These   are   represented   by  the  enumeration  type  enum
  780.           mode_class  defined  in  `machmode.h'.   The  possible  mode
  781.           classes are:
  782.  
  783.                MODE_INT
  784.                     Integer  modes.   By  default  these  are  QImode,
  785.                     HImode, SImode, DImode, and TImode.
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.                MODE_PARTIAL_INT
  801.                     The ``partial integer'' modes,  PSImode  and  PDI-
  802.                     mode.
  803.  
  804.                MODE_FLOAT
  805.                     floating  point  modes.   By  default  these   are
  806.                     SFmode, DFmode, XFmode and TFmode.
  807.  
  808.                MODE_COMPLEX_INT
  809.                     Complex integer modes.  (These are  not  currently
  810.                     implemented).
  811.  
  812.                MODE_COMPLEX_FLOAT
  813.                     Complex floating point modes.   By  default  these
  814.                     are SCmode, DCmode, XCmode, and TCmode.
  815.  
  816.                MODE_FUNCTION
  817.                     Algol or Pascal  function  variables  including  a
  818.                     static chain.  (These are not currently implement-
  819.                     ed).
  820.  
  821.                MODE_CC
  822.                     Modes representing condition code  values.   These
  823.                     are   CCmode   plus   any   modes  listed  in  the
  824.                     EXTRA_CC_MODES macro.  See section Jump  Patterns,
  825.                     also see `Condition Code'.
  826.  
  827.                MODE_RANDOM
  828.                     This is a catchall  mode  class  for  modes  which
  829.                     don't fit into the above classes.  Currently VOID-
  830.                     mode and BLKmode are in MODE_RANDOM.
  831.  
  832.  
  833.                Here are some C macros that relate to machine modes:
  834.  
  835.                GET_MODE (x)
  836.                     Returns the machine mode of the RTX x.
  837.  
  838.                PUT_MODE (x, newmode)
  839.                     Alters the  machine  mode  of  the  RTX  x  to  be
  840.                     newmode.
  841.  
  842.                NUM_MACHINE_MODES
  843.                     Stands for the number of machine  modes  available
  844.                     on  the  target machine.  This is one greater than
  845.                     the largest numeric value of any machine mode.
  846.  
  847.                GET_MODE_NAME (m)
  848.                     Returns the name of mode m as a string.
  849.  
  850.                GET_MODE_CLASS (m)
  851.                     Returns the mode class of mode m.
  852.  
  853.  
  854.  
  855.  
  856.  
  857.  
  858.  
  859.  
  860.  
  861.  
  862.  
  863.  
  864.  
  865.  
  866.                GET_MODE_WIDER_MODE (m)
  867.                     Returns  the  next  wider  natural  mode.    E.g.,
  868.                     GET_WIDER_MODE(QImode) returns HImode.
  869.  
  870.                GET_MODE_SIZE (m)
  871.                     Returns the size in bytes of a datum of mode m.
  872.  
  873.                GET_MODE_BITSIZE (m)
  874.                     Returns the size in bits of a datum of mode m.
  875.  
  876.                GET_MODE_MASK (m)
  877.                     Returns a bitmask containing 1 for all bits  in  a
  878.                     word  that fit within mode m.  This macro can only
  879.                     be used for modes whose bitsize is  less  than  or
  880.                     equal to HOST_BITS_PER_INT.
  881.  
  882.                GET_MODE_ALIGNMENT (m))
  883.                     Return the required alignment, in bits, for an ob-
  884.                     ject of mode m.
  885.  
  886.                GET_MODE_UNIT_SIZE (m)
  887.                     Returns the size in bytes of the subunits of a da-
  888.                     tum  of mode m.  This is the same as GET_MODE_SIZE
  889.                     except in the case of complex  modes.   For  them,
  890.                     the unit size is the size of the real or imaginary
  891.                     part.
  892.  
  893.                GET_MODE_NUNITS (m)
  894.                     Returns the number of units contained in  a  mode,
  895.                     i.e., GET_MODE_SIZE divided by GET_MODE_UNIT_SIZE.
  896.  
  897.                GET_CLASS_NARROWEST_MODE (c)
  898.                     Returns the narrowest mode in mode class c.
  899.  
  900.  
  901.                The global variables byte_mode  and  word_mode  contain
  902.           modes  whose  classes  are  MODE_INT  and whose bitsizes are
  903.           BITS_PER_UNIT or  BITS_PER_WORD,  respectively.   On  32-bit
  904.           machines, these are QImode and SImode, respectively.
  905.  
  906.           1.5.  Constant Expression Types
  907.  
  908.                The simplest RTL expressions are those  that  represent
  909.           constant values.
  910.  
  911.                (const_int i)
  912.                     This type of  expression  represents  the  integer
  913.                     value i.  i is customarily accessed with the macro
  914.                     INTVAL as in INTVAL (exp), which is equivalent  to
  915.                     XINT (exp, 0).
  916.  
  917.                     Keep in mind that the result of INTVAL is  an  in-
  918.                     teger  on  the  host machine.  If the host machine
  919.  
  920.  
  921.  
  922.  
  923.  
  924.  
  925.  
  926.  
  927.  
  928.  
  929.  
  930.  
  931.  
  932.                     has more bits in an int than  the  target  machine
  933.                     has  in  the  mode  in  which the constant will be
  934.                     used, then some of the bits you  get  from  INTVAL
  935.                     will  be  superfluous.   In many cases, for proper
  936.                     results, you must carefully disregard  the  values
  937.                     of those bits.
  938.  
  939.                     There is only one expression object  for  the  in-
  940.                     teger  value zero; it is the value of the variable
  941.                     const0_rtx.  Likewise, the only expression for in-
  942.                     teger  value  one is found in const1_rtx, the only
  943.                     expression for  integer  value  two  is  found  in
  944.                     const2_rtx,  and  the  only expression for integer
  945.                     value negative one is found in  constm1_rtx.   Any
  946.                     attempt  to create an expression of code const_int
  947.                     and value zero, one, two or negative one will  re-
  948.                     turn   const0_rtx,   const1_rtx,   const2_rtx   or
  949.                     constm1_rtx as appropriate.
  950.  
  951.                     Similarly, there is only one object  for  the  in-
  952.                     teger  whose  value  is  STORE_FLAG_VALUE.   It is
  953.                     found in const_true_rtx.  If  STORE_FLAG_VALUE  is
  954.                     one,  const_true_rtx  and const1_rtx will point to
  955.                     the  same  object.   If  STORE_FLAG_VALUE  is  -1,
  956.                     const_true_rtx  and  constm1_rtx will point to the
  957.                     same object.
  958.  
  959.                (const_double:m addr i0 i1 ...)
  960.                     Represents either  a  floating-point  constant  of
  961.                     mode m or an integer constant that is too large to
  962.                     fit into HOST_BITS_PER_INT bits but  small  enough
  963.                     to  fit  within  twice that number of bits (GNU CC
  964.                     does not provide a  mechanism  to  represent  even
  965.                     larger  constants).  In the latter case, m will be
  966.                     VOIDmode.
  967.  
  968.                     addr is used to contain the  mem  expression  that
  969.                     corresponds  to  the  location  in  memory that at
  970.                     which the constant can be found.  If  it  has  not
  971.                     been  allocated  a  memory location, but is on the
  972.                     chain of all const_double expressions in this com-
  973.                     pilation  (maintained using an undisplayed field),
  974.                     addr contains const0_rtx.  If it  is  not  on  the
  975.                     chain, addr contains cc0_rtx.  addr is customarily
  976.                     accessed with the macro CONST_DOUBLE_MEM  and  the
  977.                     chain field via CONST_DOUBLE_CHAIN.
  978.  
  979.                     If m is VOIDmode, the bit of the value are  stored
  980.                     in i0 and i1.  i0 is customarily accessed with the
  981.                     macro     CONST_DOUBLE_LOW     and     i1     with
  982.                     CONST_DOUBLE_HIGH.
  983.  
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.                     If the constant is floating point  (either  single
  999.                     or  double precision), then the number of integers
  1000.                     used to store the value depends  on  the  size  of
  1001.                     REAL_VALUE_TYPE  (see section  Cross-compilation).
  1002.                     The integers represent a double.  To convert  them
  1003.                     to a double, do
  1004.  
  1005.  
  1006.                         union real_extract u;
  1007.                         bcopy (&CONST_DOUBLE_LOW (x), &u, sizeof u);
  1008.  
  1009.  
  1010.  
  1011.                and then refer to u.d.
  1012.  
  1013.                     The macro CONST0_RTX (mode) refers to  an  ex-
  1014.                     pression  with  value  0 in mode mode. If mode
  1015.                     mode is of mode  class  MODE_INT,  it  returns
  1016.                     const0_rtx.     Otherwise,    it   returns   a
  1017.                     CONST_DOUBLE expression in mode  mode.   Simi-
  1018.                     larly,  the  macro CONST1_RTX (mode) refers to
  1019.                     an expression with value 1 in  mode  mode  and
  1020.                     similarly for CONST2_RTX.
  1021.  
  1022.                (const_string str)
  1023.                     Represents a constant string with  value  str.
  1024.                     Currently  this  is  used only for insn attri-
  1025.                     butes (see  section   Insn  Attributes)  since
  1026.                     constant strings in C are placed in memory.
  1027.  
  1028.                (symbol_ref symbol)
  1029.                     Represents the value of an assembler label for
  1030.                     data.   symbol  is a string that describes the
  1031.                     name of the assembler  label.   If  it  starts
  1032.                     with  a  `*',  the label is the rest of symbol
  1033.                     not including the `*'.  Otherwise,  the  label
  1034.                     is symbol, usually prefixed with `_'.
  1035.  
  1036.                (label_ref label)
  1037.                     Represents the value of an assembler label for
  1038.                     code.  It contains one operand, an expression,
  1039.                     which must be a code_label that appears in the
  1040.                     instruction  sequence  to  identify  the place
  1041.                     where the label should go.
  1042.  
  1043.                     The reason for  using  a  distinct  expression
  1044.                     type for code label references is so that jump
  1045.                     optimization can distinguish them.
  1046.  
  1047.                (const:m exp)
  1048.                     Represents a constant that is the result of an
  1049.                     assembly-time   arithmetic  computation.   The
  1050.                     operand, exp, is an expression  that  contains
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060.  
  1061.  
  1062.  
  1063.  
  1064.                     only   constants  (const_int,  symbol_ref  and
  1065.                     label_ref expressions) combined with plus  and
  1066.                     minus.   However,  not  all  combinations  are
  1067.                     valid, since the assembler cannot do arbitrary
  1068.                     arithmetic on relocatable symbols.
  1069.  
  1070.                     m should be Pmode.
  1071.  
  1072.                (high:m exp)
  1073.                     Represents the high-order bits of exp, usually
  1074.                     a  symbol_ref.  The number of bits is machine-
  1075.                     dependent and is normally the number  of  bits
  1076.                     specified  in  an instruction that initializes
  1077.                     the high order bits of a register.  It is used
  1078.                     with  lo_sum  to  represent  the  typical two-
  1079.                     instruction sequence used in RISC machines  to
  1080.                     reference a global memory location.
  1081.  
  1082.                     m should be Pmode.
  1083.  
  1084.  
  1085.           1.6.  Registers and Memory
  1086.  
  1087.                Here are the RTL expression types for describing access
  1088.           to machine registers and to main memory.
  1089.  
  1090.                (reg:m n)
  1091.                     For small values  of  the  integer  n  (less  than
  1092.                     FIRST_PSEUDO_REGISTER),  this  stands for a refer-
  1093.                     ence to machine register number n: a  hard  regis-
  1094.                     ter.  For larger values of n, it stands for a tem-
  1095.                     porary value or pseudo register.   The  compiler's
  1096.                     strategy is to generate code assuming an unlimited
  1097.                     number of such pseudo registers, and later convert
  1098.                     them  into  hard  registers  or into memory refer-
  1099.                     ences.
  1100.  
  1101.                     m is the machine mode of  the  reference.   It  is
  1102.                     necessary  because machines can generally refer to
  1103.                     each register in more than one mode.  For example,
  1104.                     a  register  may contain a full word but there may
  1105.                     be instructions to refer to it as a half  word  or
  1106.                     as a single byte, as well as instructions to refer
  1107.                     to it as a floating point number of various preci-
  1108.                     sions.
  1109.  
  1110.                     Even for a register that the machine can access in
  1111.                     only one mode, the mode must always be specified.
  1112.  
  1113.                     The symbol FIRST_PSEUDO_REGISTER is defined by the
  1114.                     machine  description, since the number of hard re-
  1115.                     gisters on the machine  is  an  invariant  charac-
  1116.                     teristic  of the machine.  Note, however, that not
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127.  
  1128.  
  1129.  
  1130.                     all of the machine registers must be  general  re-
  1131.                     gisters.   All  the  machine registers that can be
  1132.                     used for storage of data are given  hard  register
  1133.                     numbers,  even those that can be used only in cer-
  1134.                     tain instructions or can hold only  certain  types
  1135.                     of data.
  1136.  
  1137.                     A hard register may be accessed in  various  modes
  1138.                     throughout  one function, but each pseudo register
  1139.                     is given a natural mode and is  accessed  only  in
  1140.                     that  mode.   When  it is necessary to describe an
  1141.                     access to a pseudo  register  using  a  nonnatural
  1142.                     mode, a subreg expression is used.
  1143.  
  1144.                     A reg expression with a machine mode  that  speci-
  1145.                     fies more than one word of data may actually stand
  1146.                     for several consecutive registers.  If in addition
  1147.                     the register number specifies a hardware register,
  1148.                     then it actually  represents  several  consecutive
  1149.                     hardware  registers  starting  with  the specified
  1150.                     one.
  1151.  
  1152.                     Each pseudo register number used in  a  function's
  1153.                     RTL  code  is  represented by a unique reg expres-
  1154.                     sion.
  1155.  
  1156.                     Some pseudo register  numbers,  those  within  the
  1157.                     range       of      FIRST_VIRTUAL_REGISTER      to
  1158.                     LAST_VIRTUAL_REGISTER only appear during  the  RTL
  1159.                     generation phase and are eliminated before the op-
  1160.                     timization phases.  These represent  locations  in
  1161.                     the  stack  frame  that cannot be determined until
  1162.                     RTL generation for the function has been  complet-
  1163.                     ed.   The  following  virtual register numbers are
  1164.                     defined:
  1165.  
  1166.                     VIRTUAL_INCOMING_ARGS_REGNUM
  1167.                          This points to the first word of the incoming
  1168.                          arguments  passed  on  the  stack.   Normally
  1169.                          these arguments are placed there by the call-
  1170.                          er, but the callee may have pushed some argu-
  1171.                          ments that were previously passed  in  regis-
  1172.                          ters.
  1173.  
  1174.                          When RTL generation is complete, this virtual
  1175.                          register is replaced by the sum of the regis-
  1176.                          ter given by ARG_POINTER_REGNUM and the value
  1177.                          of FIRST_PARM_OFFSET.
  1178.  
  1179.                     VIRTUAL_STACK_VARS_REGNUM
  1180.                          If  FRAME_GROWS_DOWNWARDS  is  defined,  this
  1181.                          points  to  immediately above the first vari-
  1182.                          able on the stack.  Otherwise, it  points  to
  1183.  
  1184.  
  1185.  
  1186.  
  1187.  
  1188.  
  1189.  
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.                          the first variable on the stack.
  1197.  
  1198.                          It is replaced with the sum of  the  register
  1199.                          given  by  FRAME_POINTER_REGNUM and the value
  1200.                          STARTING_FRAME_OFFSET.
  1201.  
  1202.                     VIRTUAL_STACK_DYNAMIC_REGNUM
  1203.                          This points to the  location  of  dynamically
  1204.                          allocated  memory  on  the  stack immediately
  1205.                          after the stack pointer has been adjusted  by
  1206.                          the amount of memory desired.
  1207.  
  1208.                          It is replaced by the  sum  of  the  register
  1209.                          given  by  STACK_POINTER_REGNUM and the value
  1210.                          STACK_DYNAMIC_OFFSET.
  1211.  
  1212.                     VIRTUAL_OUTGOING_ARGS_REGNUM
  1213.                          This points to the location in the  stack  at
  1214.                          which  outgoing  arguments  should be written
  1215.                          when  the  stack  is  pre-pushed   (arguments
  1216.                          pushed  using  push  insns  should always use
  1217.                          STACK_POINTER_REGNUM).
  1218.  
  1219.                          It is replaced by the  sum  of  the  register
  1220.                          given  by  STACK_POINTER_REGNUM and the value
  1221.                          STACK_POINTER_OFFSET.
  1222.  
  1223.  
  1224.                (subreg:m reg wordnum)
  1225.                     subreg expressions are used to refer to a register
  1226.                     in  a  machine mode other than its natural one, or
  1227.                     to refer to one register of a multi-word reg  that
  1228.                     actually refers to several registers.
  1229.  
  1230.                     Each pseudo-register has a natural mode.  If it is
  1231.                     necessary  to operate on it in a different mode---
  1232.                     for example, to perform a fullword  move  instruc-
  1233.                     tion  on  a pseudo-register that contains a single
  1234.                     byte---the pseudo-register must be enclosed  in  a
  1235.                     subreg.  In such a case, wordnum is zero.
  1236.  
  1237.                     Usually m is at least as narrow  as  the  mode  of
  1238.                     reg, in which case it is restricting consideration
  1239.                     to only the bits of reg that are in  m.   However,
  1240.                     sometimes  m is wider than the mode of reg.  These
  1241.                     subreg expressions are often  called  paradoxical.
  1242.                     They  are  used in cases where we want to refer to
  1243.                     an object in a wider mode but  do  not  care  what
  1244.                     value  the  additional bits have.  The reload pass
  1245.                     ensures that paradoxical references are only  made
  1246.                     to hard registers.
  1247.  
  1248.  
  1249.  
  1250.  
  1251.  
  1252.  
  1253.  
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.                     The other use of subreg is to extract the  indivi-
  1263.                     dual registers of a multi-register value.  Machine
  1264.                     modes such  as  DImode  and  TImode  can  indicate
  1265.                     values  longer  than  a word, values which usually
  1266.                     require two or more consecutive registers.  To ac-
  1267.                     cess  one of the registers, use a subreg with mode
  1268.                     SImode and a wordnum that says which register.
  1269.  
  1270.                     The compilation parameter WORDS_BIG_ENDIAN, if set
  1271.                     to  1, says that word number zero is the most sig-
  1272.                     nificant part; otherwise, it is the least signifi-
  1273.                     cant part.
  1274.  
  1275.                     Between the combiner pass and the reload pass,  it
  1276.                     is  possible  to  have  a paradoxical subreg which
  1277.                     contains a mem instead  of  a  reg  as  its  first
  1278.                     operand.  After the reload pass, it is also possi-
  1279.                     ble to have a non-paradoxical  subreg  which  con-
  1280.                     tains a mem; this usually occurs when the mem is a
  1281.                     stack slot which replaced a pseudo register.
  1282.  
  1283.                     Note that it is not valid to access a DFmode value
  1284.                     in  SFmode  using  a subreg.  On some machines the
  1285.                     most significant part of a DFmode value  does  not
  1286.                     have  the same format as a single-precision float-
  1287.                     ing value.
  1288.  
  1289.                     It is also not valid to access a single word of  a
  1290.                     multi-word  value in a hard register when less re-
  1291.                     gisters can hold the value than would be  expected
  1292.                     from  its size.  For example, some 32-bit machines
  1293.                     have floating-point registers that can hold an en-
  1294.                     tire DFmode value.  If register 10 were such a re-
  1295.                     gister (subreg:SI (reg:DF 10) 1) would be  invalid
  1296.                     because  there is no way to convert that reference
  1297.                     to a single machine  register.   The  reload  pass
  1298.                     prevents subreg expressions such as these from be-
  1299.                     ing formed.
  1300.  
  1301.                     The first operand of a subreg expression  is  cus-
  1302.                     tomarily  accessed  with  the SUBREG_REG macro and
  1303.                     the second operand is  customarily  accessed  with
  1304.                     the SUBREG_WORD macro.
  1305.  
  1306.                (scratch:m)
  1307.                     This represents a scratch register  that  will  be
  1308.                     required for the execution of a single instruction
  1309.                     and not used subsequently.  It is converted into a
  1310.                     reg  by either the local register allocator or the
  1311.                     reload pass.
  1312.  
  1313.                     scratch is usually present inside a clobber opera-
  1314.                     tion (see section  Side Effects).
  1315.  
  1316.  
  1317.  
  1318.  
  1319.  
  1320.  
  1321.  
  1322.  
  1323.  
  1324.  
  1325.  
  1326.  
  1327.  
  1328.                (cc0)
  1329.                     This refers to the machine's condition code regis-
  1330.                     ter.   It  has  no  operands  and  may  not have a
  1331.                     machine mode.  There are two ways to use it:
  1332.  
  1333.                     o+    To stand for a complete set of condition code
  1334.                          flags.   This is best on most machines, where
  1335.                          each comparison sets  the  entire  series  of
  1336.                          flags.
  1337.  
  1338.                          With this technique,  (cc0)  may  be  validly
  1339.                          used in only two contexts: as the destination
  1340.                          of an assignment (in  test  and  compare  in-
  1341.                          structions)  and in comparison operators com-
  1342.                          paring against  zero  (const_int  with  value
  1343.                          zero; that is to say, const0_rtx).
  1344.  
  1345.                     o+    To stand for a single flag that is the result
  1346.                          of  a  single  condition.   This is useful on
  1347.                          machines that have only a  single  flag  bit,
  1348.                          and  in  which  comparison  instructions must
  1349.                          specify the condition to test.
  1350.  
  1351.                          With this technique,  (cc0)  may  be  validly
  1352.                          used in only two contexts: as the destination
  1353.                          of an assignment (in  test  and  compare  in-
  1354.                          structions)  where the source is a comparison
  1355.                          operator,  and  as  the  first   operand   of
  1356.                          if_then_else (in a conditional branch).
  1357.  
  1358.  
  1359.                     There is only one expression object of  code  cc0;
  1360.                     it  is the value of the variable cc0_rtx.  Any at-
  1361.                     tempt to create an expression of code cc0 will re-
  1362.                     turn cc0_rtx.
  1363.  
  1364.                     Instructions can set the condition code  implicit-
  1365.                     ly.  On many machines, nearly all instructions set
  1366.                     the condition code based on the  value  that  they
  1367.                     compute  or  store.  It is not necessary to record
  1368.                     these actions explicitly in the  RTL  because  the
  1369.                     machine  description  includes  a prescription for
  1370.                     recognizing the instructions that do so (by  means
  1371.                     of  the macro NOTICE_UPDATE_CC).  See section Con-
  1372.                     dition Code.  Only instructions whose sole purpose
  1373.                     is  to  set  the  condition code, and instructions
  1374.                     that use the condition code, need mention (cc0).
  1375.  
  1376.                     On some machines, the condition code  register  is
  1377.                     given  a register number and a reg is used instead
  1378.                     of (cc0).  This is usually the preferable approach
  1379.                     if  only a small subset of instructions modify the
  1380.                     condition code.  Other  machines  store  condition
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.                     codes in general registers; in such cases a pseudo
  1395.                     register should be used.
  1396.  
  1397.                     Some machines, such as the Sparc and RS/6000, have
  1398.                     two sets of arithmetic instructions, one that sets
  1399.                     and one that does  not  set  the  condition  code.
  1400.                     This  is  best  handled by normally generating the
  1401.                     instruction that does not set the condition  code,
  1402.                     and making a pattern that both performs the arith-
  1403.                     metic and sets the condition code register  (which
  1404.                     would  not  be (cc0) in this case).  For examples,
  1405.                     search for `addcc' and `andcc' in `sparc.md'.
  1406.  
  1407.                (pc)
  1408.                     This represents the machine's program counter.  It
  1409.                     has  no  operands and may not have a machine mode.
  1410.                     (pc) may be validly used only in certain  specific
  1411.                     contexts in jump instructions.
  1412.  
  1413.                     There is only one expression object of code pc; it
  1414.                     is  the value of the variable pc_rtx.  Any attempt
  1415.                     to create an expression of  code  pc  will  return
  1416.                     pc_rtx.
  1417.  
  1418.                     All instructions that do not jump alter  the  pro-
  1419.                     gram  counter  implicitly  by incrementing it, but
  1420.                     there is no need to mention this in the RTL.
  1421.  
  1422.                (mem:m addr)
  1423.                     This RTX represents a reference to main memory  at
  1424.                     an  address represented by the expression addr.  m
  1425.                     specifies how large a unit of memory is accessed.
  1426.  
  1427.  
  1428.           1.7.  RTL Expressions for Arithmetic
  1429.  
  1430.                Unless otherwise specified, all the operands of  arith-
  1431.           metic  expressions  must be valid for mode m.  An operand is
  1432.           valid for mode m if it has mode m, or if it is  a  const_int
  1433.           or const_double and m is a mode of class MODE_INT.
  1434.  
  1435.                For commutative binary operations, constants should  be
  1436.           placed in the second operand.
  1437.  
  1438.                (plus:m x y)
  1439.                     Represents the sum of the values represented by  x
  1440.                     and y carried out in machine mode m.
  1441.  
  1442.                (lo_sum:m x y)
  1443.                     Like plus, except that it represents that sum of x
  1444.                     and  the  low-order  bits of y.  The number of low
  1445.                     order bits is machine-dependent  but  is  normally
  1446.                     the  number  of  bits  in  a  Pmode item minus the
  1447.  
  1448.  
  1449.  
  1450.  
  1451.  
  1452.  
  1453.  
  1454.  
  1455.  
  1456.  
  1457.  
  1458.  
  1459.  
  1460.                     number of bits set by the high code  (see  section
  1461.                     Constants).
  1462.  
  1463.                     m should be Pmode.
  1464.  
  1465.                (minus:m x y)
  1466.                     Like plus but represents subtraction.
  1467.  
  1468.                (compare:m x y)
  1469.                     Represents the result of subtracting y from x  for
  1470.                     purposes  of  comparison.   The result is computed
  1471.                     without overflow, as if with infinite precision.
  1472.  
  1473.                     Of course, machines can't really subtract with in-
  1474.                     finite precision.  However, they can pretend to do
  1475.                     so when only the sign of the result will be  used,
  1476.                     which is the case when the result is stored in the
  1477.                     condition code.   And that is the  only  way  this
  1478.                     kind of expression may validly be used: as a value
  1479.                     to be stored in the condition codes.
  1480.  
  1481.                     The mode m is not related to the modes of x and y,
  1482.                     but  instead  is  the  mode  of the condition code
  1483.                     value.  If (cc0) is used, it is VOIDmode.   Other-
  1484.                     wise  it  is  some  mode  in  class MODE_CC, often
  1485.                     CCmode.  See section Condition Code.
  1486.  
  1487.                     Normally, x and y must have the same mode.  Other-
  1488.                     wise, compare is valid only if the mode of x is in
  1489.                     class  MODE_INT  and   y   is   a   const_int   or
  1490.                     const_double  with  mode  VOIDmode.  The mode of x
  1491.                     determines what mode the comparison is to be  done
  1492.                     in; thus it must not be VOIDmode.
  1493.  
  1494.                     If one of the operands is a constant, it should be
  1495.                     placed  in  the  second operand and the comparison
  1496.                     code adjusted as appropriate.
  1497.  
  1498.                     A compare specifying two VOIDmode constants is not
  1499.                     valid  since  there is no way to know in what mode
  1500.                     the comparison is to be performed; the  comparison
  1501.                     must  either  be  folded during the compilation or
  1502.                     the first operand must be loaded into  a  register
  1503.                     while its mode is still known.
  1504.  
  1505.                (neg:m x)
  1506.                     Represents the negation (subtraction from zero) of
  1507.                     the value represented by x, carried out in mode m.
  1508.  
  1509.                (mult:m x y)
  1510.                     Represents  the  signed  product  of  the   values
  1511.                     represented by x and y carried out in machine mode
  1512.                     m.
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.                     Some machines support a multiplication  that  gen-
  1527.                     erates  a  product wider than the operands.  Write
  1528.                     the pattern for this as
  1529.  
  1530.  
  1531.                         (mult:m (sign_extend:m x) (sign_extend:m y))
  1532.  
  1533.  
  1534.  
  1535.                     where m is wider than the modes of  x  and  y,
  1536.                     which need not be the same.
  1537.  
  1538.                     Write patterns for unsigned widening multipli-
  1539.                     cation similarly using zero_extend.
  1540.  
  1541.                (div:m x y)
  1542.                     Represents the quotient in signed division  of
  1543.                     x  by  y, carried out in machine mode m.  If m
  1544.                     is a floating point mode,  it  represents  the
  1545.                     exact  quotient;  otherwise,  the  integerized
  1546.                     quotient.
  1547.  
  1548.                     Some machines have  division  instructions  in
  1549.                     which the operands and quotient widths are not
  1550.                     all the same; you should  represent  such  in-
  1551.                     structions  using  truncate and sign_extend as
  1552.                     in,
  1553.  
  1554.  
  1555.                         (truncate:m1 (div:m2 x (sign_extend:m2 y)))
  1556.  
  1557.  
  1558.  
  1559.                (udiv:m x y)
  1560.                     Like div but represents unsigned division.
  1561.  
  1562.                (mod:m x y)
  1563.  
  1564.                (umod:m x y)
  1565.                     Like div and udiv but represent the  remainder
  1566.                     instead of the quotient.
  1567.  
  1568.                (smin:m x y)
  1569.  
  1570.                (smax:m x y)
  1571.                     Represents the smaller (for  smin)  or  larger
  1572.                     (for  smax)  of x and y, interpreted as signed
  1573.                     integers in mode m.
  1574.  
  1575.                (umin:m x y)
  1576.  
  1577.                (umax:m x y)
  1578.                     Like smin and smax, but the values are  inter-
  1579.  
  1580.  
  1581.  
  1582.  
  1583.  
  1584.  
  1585.  
  1586.  
  1587.  
  1588.  
  1589.  
  1590.  
  1591.  
  1592.                     preted as unsigned integers.
  1593.  
  1594.                (not:m x)
  1595.                     Represents the bitwise complement of the value
  1596.                     represented by x, carried out in mode m, which
  1597.                     must be a fixed-point machine mode.
  1598.  
  1599.                (and:m x y)
  1600.                     Represents  the  bitwise  logical-and  of  the
  1601.                     values  represented by x and y, carried out in
  1602.                     machine mode m, which must  be  a  fixed-point
  1603.                     machine mode.
  1604.  
  1605.                (ior:m x y)
  1606.                     Represents the  bitwise  inclusive-or  of  the
  1607.                     values  represented by x and y, carried out in
  1608.                     machine mode m, which must  be  a  fixed-point
  1609.                     mode.
  1610.  
  1611.                (xor:m x y)
  1612.                     Represents the  bitwise  exclusive-or  of  the
  1613.                     values  represented by x and y, carried out in
  1614.                     machine mode m, which must  be  a  fixed-point
  1615.                     mode.
  1616.  
  1617.                (ashift:m x c)
  1618.                     Represents the result of arithmetically shift-
  1619.                     ing  x  left  by  c  places.  x have mode m, a
  1620.                     fixed-point machine mode.  c be a  fixed-point
  1621.                     mode  or  be  a  constant  with mode VOIDmode;
  1622.                     which mode is determined by  the  mode  called
  1623.                     for  in  the machine description entry for the
  1624.                     left-shift instruction.  For example,  on  the
  1625.                     Vax, the mode of c is QImode regardless of m.
  1626.  
  1627.                (lshift:m x c)
  1628.                     Like lshift but  for  arithmetic  left  shift.
  1629.                     ashift and lshift are identical operations; we
  1630.                     customarily use ashift for both.
  1631.  
  1632.                (lshiftrt:m x c)
  1633.  
  1634.                (ashiftrt:m x c)
  1635.                     Like lshift and ashift but  for  right  shift.
  1636.                     Unlike  the  case  for  left  shift, these two
  1637.                     operations are distinct.
  1638.  
  1639.                (rotate:m x c)
  1640.  
  1641.                (rotatert:m x c)
  1642.                     Similar but represent left and  right  rotate.
  1643.                     If c is a constant, use rotate.
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.                (abs:m x)
  1659.                     Represents the absolute value of  x,  computed
  1660.                     in mode m.
  1661.  
  1662.                (sqrt:m x)
  1663.                     Represents the square root of x,  computed  in
  1664.                     mode m.  Most often m will be a floating point
  1665.                     mode.
  1666.  
  1667.                (ffs:m x)
  1668.                     Represents one plus the  index  of  the  least
  1669.                     significant  1-bit in x, represented as an in-
  1670.                     teger of mode m.  (The value is zero if  x  is
  1671.                     zero.)  The mode of x need not be m; depending
  1672.                     on the target machine, various  mode  combina-
  1673.                     tions may be valid.
  1674.  
  1675.  
  1676.           1.8.  Comparison Operations
  1677.  
  1678.                Comparison operators test a relation  on  two  operands
  1679.           and  are considered to represent a machine-dependent nonzero
  1680.           value  described  by,  but   not   necessarily   equal   to,
  1681.           STORE_FLAG_VALUE  (see section  Misc) if the relation holds,
  1682.           or zero if it does not.  The mode of the  comparison  opera-
  1683.           tion  is independent of the mode of the data being compared.
  1684.           If the comparison operation is being tested (e.g., the first
  1685.           operand  of an if_then_else), the mode must be VOIDmode.  If
  1686.           the comparison operation is producing data to be  stored  in
  1687.           some variable, the mode must be in class MODE_INT.  All com-
  1688.           parison operations producing data must use  the  same  mode,
  1689.           which is machine-specific.
  1690.  
  1691.                There are two ways that comparison  operations  may  be
  1692.           used.   The  comparison operators may be used to compare the
  1693.           condition  codes  (cc0)  against  zero,  as  in  (eq   (cc0)
  1694.           (const_int  0)).   Such  a  construct actually refers to the
  1695.           result of the preceding instruction in which  the  condition
  1696.           codes  were set.  The instructing setting the condition code
  1697.           must be adjacent to  the  instruction  using  the  condition
  1698.           code; only note insns may separate them.
  1699.  
  1700.                Alternatively, a comparison operation may directly com-
  1701.           pare two data objects.  The mode of the comparison is deter-
  1702.           mined by the operands; they must both be valid for a  common
  1703.           machine  mode.   A  comparison  with  both operands constant
  1704.           would be invalid as the machine mode could  not  be  deduced
  1705.           from it, but such a comparison should never exist in RTL due
  1706.           to constant folding.
  1707.  
  1708.                In the example above, if (cc0) were last set  to  (com-
  1709.           pare  x  y),  the comparison operation is identical to (eq x
  1710.           y).  Usually only one style of comparisons is supported on a
  1711.  
  1712.  
  1713.  
  1714.  
  1715.  
  1716.  
  1717.  
  1718.  
  1719.  
  1720.  
  1721.  
  1722.  
  1723.  
  1724.           particular  machine,  but the combine pass will try to merge
  1725.           the operations to produce the eq shown in case it exists  in
  1726.           the context of the particular insn involved.
  1727.  
  1728.                Inequality comparisons come in two flavors, signed  and
  1729.           unsigned.   Thus, there are distinct expression codes gt and
  1730.           gtu for signed and unsigned greater-than.  These can produce
  1731.           different  results  for the same pair of integer values: for
  1732.           example, 1  is  signed  greater-than  -1  but  not  unsigned
  1733.           greater-than,  because -1 when regarded as unsigned is actu-
  1734.           ally 0xffffffff which is greater than 1.
  1735.  
  1736.                The signed comparisons are also used for floating point
  1737.           values.  Floating point comparisons are distinguished by the
  1738.           machine modes of the operands.
  1739.  
  1740.                (eq:m x y)
  1741.                     1 if the values represented by x and y are  equal,
  1742.                     otherwise 0.
  1743.  
  1744.                (ne:m x y)
  1745.                     1 if the values represented by x  and  y  are  not
  1746.                     equal, otherwise 0.
  1747.  
  1748.                (gt:m x y)
  1749.                     1 if the x is greater than y.  If they are  fixed-
  1750.                     point, the comparison is done in a signed sense.
  1751.  
  1752.                (gtu:m x y)
  1753.                     Like gt but does unsigned  comparison,  on  fixed-
  1754.                     point numbers only.
  1755.  
  1756.                (lt:m x y)
  1757.  
  1758.                (ltu:m x y)
  1759.                     Like gt and gtu but test for ``less than''.
  1760.  
  1761.                (ge:m x y)
  1762.  
  1763.                (geu:m x y)
  1764.                     Like gt and gtu but test  for  ``greater  than  or
  1765.                     equal''.
  1766.  
  1767.                (le:m x y)
  1768.  
  1769.                (leu:m x y)
  1770.                     Like gt and  gtu  but  test  for  ``less  than  or
  1771.                     equal''.
  1772.  
  1773.                (if_then_else cond then else)
  1774.                     This is not a comparison operation but  is  listed
  1775.                     here because it is always used in conjunction with
  1776.                     a comparison operation.  To be precise, cond is  a
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.                     comparison expression.  This expression represents
  1791.                     a choice, according to  cond,  between  the  value
  1792.                     represented  by  then  and  the one represented by
  1793.                     else.
  1794.  
  1795.                     On most  machines,  if_then_else  expressions  are
  1796.                     valid only to express conditional jumps.
  1797.  
  1798.                (cond [test1 value1 test2 value2 ...] default)
  1799.                     Similar to if_then_else, but more  general.   Each
  1800.                     of  test1,  test2,  ... is performed in turn.  The
  1801.                     result of this expression is the value correspond-
  1802.                     ing to the first non-zero test, or default if none
  1803.                     of the tests are non-zero expressions.
  1804.  
  1805.                     This is currently not valid for  instruction  pat-
  1806.                     terns  and  is supported only for insn attributes.
  1807.                     See section Insn Attributes.
  1808.  
  1809.  
  1810.           1.9.  Bit Fields
  1811.  
  1812.                Special expression codes exist to  represent  bit-field
  1813.           instructions.   These  types  of  expressions are lvalues in
  1814.           RTL; they may appear on the  left  side  of  an  assignment,
  1815.           indicating  insertion  of  a  value  into  the specified bit
  1816.           field.
  1817.  
  1818.                (sign_extract:m loc size pos)
  1819.                     This represents a reference to a sign-extended bit
  1820.                     field  contained  or  starting in loc (a memory or
  1821.                     register reference).  The bit field is  size  bits
  1822.                     wide  and  starts at bit pos.  The compilation op-
  1823.                     tion BITS_BIG_ENDIAN says which end of the  memory
  1824.                     unit pos counts from.
  1825.  
  1826.                     If loc is in memory, its mode must  be  a  single-
  1827.                     byte  integer  mode.  If loc is in a register, the
  1828.                     mode to use is specified by  the  operand  of  the
  1829.                     insv or extv pattern (see section  Standard Names)
  1830.                     and is usually a full-word integer mode.
  1831.  
  1832.                     The mode of pos is machine-specific  and  is  also
  1833.                     specified in the insv or extv pattern.
  1834.  
  1835.                     The mode m is the same as the mode that  would  be
  1836.                     used for loc if it were a register.
  1837.  
  1838.                (zero_extract:m loc size pos)
  1839.                     Like sign_extract but refers  to  an  unsigned  or
  1840.                     zero-extended  bit  field.   The  same sequence of
  1841.                     bits are extracted, but they are filled to an  en-
  1842.                     tire word with zeros instead of by sign-extension.
  1843.  
  1844.  
  1845.  
  1846.  
  1847.  
  1848.  
  1849.  
  1850.  
  1851.  
  1852.  
  1853.  
  1854.  
  1855.  
  1856.           1.10.  Conversions
  1857.  
  1858.                All  conversions  between   machine   modes   must   be
  1859.           represented by explicit conversion operations.  For example,
  1860.           an expression which is the sum of a byte  and  a  full  word
  1861.           cannot  be  written  as  (plus:SI  (reg:QI  34) (reg:SI 80))
  1862.           because the plus operation requires two operands of the same
  1863.           machine mode.  Therefore, the byte-sized operand is enclosed
  1864.           in a conversion operation, as in
  1865.  
  1866.  
  1867.               (plus:SI (sign_extend:SI (reg:QI 34)) (reg:SI 80))
  1868.  
  1869.  
  1870.  
  1871.                The conversion operation is  not  a  mere  placeholder,
  1872.           because  there may be more than one way of converting from a
  1873.           given starting mode to the desired final mode.  The  conver-
  1874.           sion operation code says how to do it.
  1875.  
  1876.                For all conversion operations, x must not  be  VOIDmode
  1877.           because  the mode in which to do the conversion would not be
  1878.           known.  The conversion must either be done  at  compile-time
  1879.           or x must be placed into a register.
  1880.  
  1881.                (sign_extend:m x)
  1882.                     Represents the result of sign-extending the  value
  1883.                     x to machine mode m.  m must be a fixed-point mode
  1884.                     and x a fixed-point value of a mode narrower  than
  1885.                     m.
  1886.  
  1887.                (zero_extend:m x)
  1888.                     Represents the result of zero-extending the  value
  1889.                     x to machine mode m.  m must be a fixed-point mode
  1890.                     and x a fixed-point value of a mode narrower  than
  1891.                     m.
  1892.  
  1893.                (float_extend:m x)
  1894.                     Represents the result of extending the value x  to
  1895.                     machine  mode  m.  m must be a floating point mode
  1896.                     and x a floating point value of  a  mode  narrower
  1897.                     than m.
  1898.  
  1899.                (truncate:m x)
  1900.                     Represents the result of truncating the value x to
  1901.                     machine  mode m.  m must be a fixed-point mode and
  1902.                     x a fixed-point value of a mode wider than m.
  1903.  
  1904.                (float_truncate:m x)
  1905.                     Represents the result of truncating the value x to
  1906.                     machine  mode  m.  m must be a floating point mode
  1907.                     and x a floating point value of a mode wider  than
  1908.                     m.
  1909.  
  1910.  
  1911.  
  1912.  
  1913.  
  1914.  
  1915.  
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.                (float:m x)
  1923.                     Represents the result of  converting  fixed  point
  1924.                     value  x,  regarded  as  signed, to floating point
  1925.                     mode m.
  1926.  
  1927.                (unsigned_float:m x)
  1928.                     Represents the result of  converting  fixed  point
  1929.                     value  x,  regarded as unsigned, to floating point
  1930.                     mode m.
  1931.  
  1932.                (fix:m x)
  1933.                     When m is  a  fixed  point  mode,  represents  the
  1934.                     result  of  converting  floating  point value x to
  1935.                     mode m, regarded as signed.  How rounding is  done
  1936.                     is  not  specified,  so this operation may be used
  1937.                     validly in compiling  C  code  only  for  integer-
  1938.                     valued operands.
  1939.  
  1940.                (unsigned_fix:m x)
  1941.                     Represents the result of converting floating point
  1942.                     value  x  to  fixed  point mode m, regarded as un-
  1943.                     signed.  How rounding is done is not specified.
  1944.  
  1945.                (fix:m x)
  1946.                     When m is a floating point  mode,  represents  the
  1947.                     result of converting floating point value x (valid
  1948.                     for mode m) to an integer,  still  represented  in
  1949.                     floating point mode m, by rounding towards zero.
  1950.  
  1951.  
  1952.           1.11.  Declarations
  1953.  
  1954.                Declaration expression codes do  not  represent  arith-
  1955.           metic  operations  but  rather  state assertions about their
  1956.           operands.
  1957.  
  1958.                (strict_low_part (subreg:m (reg:n r) 0))
  1959.                     This expression code is used in only one  context:
  1960.                     operand  0  of a set expression.  In addition, the
  1961.                     operand  of  this  expression  must  be   a   non-
  1962.                     paradoxical subreg expression.
  1963.  
  1964.                     The presence of strict_low_part says that the part
  1965.                     of the register which is meaningful in mode n, but
  1966.                     is not part of mode m, is not to be altered.  Nor-
  1967.                     mally,  an  assignment to such a subreg is allowed
  1968.                     to have undefined effects on the rest of  the  re-
  1969.                     gister when m is less than a word.
  1970.  
  1971.  
  1972.  
  1973.  
  1974.  
  1975.  
  1976.  
  1977.  
  1978.  
  1979.  
  1980.  
  1981.  
  1982.  
  1983.  
  1984.  
  1985.  
  1986.  
  1987.  
  1988.           1.12.  Side Effect Expressions
  1989.  
  1990.                The expression codes described so far represent values,
  1991.           not actions.  But machine instructions never produce values;
  1992.           they are meaningful only for their side effects on the state
  1993.           of  the  machine.   Special  expression  codes  are  used to
  1994.           represent side effects.
  1995.  
  1996.                The body of an instruction is always one of these  side
  1997.           effect  codes;  the  codes  described above, which represent
  1998.           values, appear only as the operands of these.
  1999.  
  2000.                (set lval x)
  2001.                     Represents the action of storing the  value  of  x
  2002.                     into  the place represented by lval.  lval must be
  2003.                     an expression representing a  place  that  can  be
  2004.                     stored  in:  reg  (or  subreg or strict_low_part),
  2005.                     mem, pc or cc0.
  2006.  
  2007.                     If lval is a reg, subreg or mem, it has a  machine
  2008.                     mode; then x must be valid for that mode.
  2009.  
  2010.                     If lval is a reg whose machine mode is  less  than
  2011.                     the full width of the register, then it means that
  2012.                     the part of the register specified by the  machine
  2013.                     mode  is given the specified value and the rest of
  2014.                     the register receives an undefined  value.   Like-
  2015.                     wise,  if  lval  is a subreg whose machine mode is
  2016.                     narrower than the mode of the register,  the  rest
  2017.                     of  the  register  can  be changed in an undefined
  2018.                     way.
  2019.  
  2020.                     If lval is a strict_low_part of a subreg, then the
  2021.                     part of the register specified by the machine mode
  2022.                     of the subreg is given the value x and the rest of
  2023.                     the register is not changed.
  2024.  
  2025.                     If lval is (cc0), it has no machine  mode,  and  x
  2026.                     may be either a compare expression or a value that
  2027.                     may have any mode.  The latter case  represents  a
  2028.                     ``test''  instruction.   The expression (set (cc0)
  2029.                     (reg:m n)) is equivalent to  (set  (cc0)  (compare
  2030.                     (reg:m n) (const_int 0))).  Use the former expres-
  2031.                     sion to save space during the compilation.
  2032.  
  2033.                     If lval is (pc), we have a jump  instruction,  and
  2034.                     the  possibilities for x are very limited.  It may
  2035.                     be a label_ref  expression  (unconditional  jump).
  2036.                     It  may  be an if_then_else (conditional jump), in
  2037.                     which case either the second or the third  operand
  2038.                     must  be  (pc)  (for the case which does not jump)
  2039.                     and the other of the two must be a label_ref  (for
  2040.                     the case which does jump).  x may also be a mem or
  2041.  
  2042.  
  2043.  
  2044.  
  2045.  
  2046.  
  2047.  
  2048.  
  2049.  
  2050.  
  2051.  
  2052.  
  2053.  
  2054.                     (plus:SI (pc) y), where y may be a reg or  a  mem;
  2055.                     these unusual patterns are used to represent jumps
  2056.                     through branch tables.
  2057.  
  2058.                     If lval is neither (cc0) nor  (pc),  the  mode  of
  2059.                     lval  must  not be VOIDmode and the mode of x must
  2060.                     be valid for the mode of lval.
  2061.  
  2062.                     lval is customarily  accessed  with  the  SET_DEST
  2063.                     macro and x with the SET_SRC macro.
  2064.  
  2065.                (return)
  2066.                     As the sole expression in a pattern, represents  a
  2067.                     return  from  the  current  function,  on machines
  2068.                     where this can be done with one instruction,  such
  2069.                     as  Vaxes.   On machines where a multi-instruction
  2070.                     ``epilogue'' must be executed in order  to  return
  2071.                     from the function, returning is done by jumping to
  2072.                     a label which precedes the epilogue, and  the  re-
  2073.                     turn expression code is never used.
  2074.  
  2075.                     Inside an if_then_else expression, represents  the
  2076.                     value to be placed in pc to return to the caller.
  2077.  
  2078.                     Note that an insn pattern of (return) is logically
  2079.                     equivalent  to (set (pc) (return)), but the latter
  2080.                     form is never used.
  2081.  
  2082.                (call function nargs)
  2083.                     Represents a function call.  function is a mem ex-
  2084.                     pression whose address is the address of the func-
  2085.                     tion to be called.  nargs is an  expression  which
  2086.                     can  be used for two purposes: on some machines it
  2087.                     represents the number of bytes of stack  argument;
  2088.                     on  others,  it  represents the number of argument
  2089.                     registers.
  2090.  
  2091.                     Each machine has a  standard  machine  mode  which
  2092.                     function  must  have.  The machine description de-
  2093.                     fines macro FUNCTION_MODE to expand into  the  re-
  2094.                     quisite mode name.  The purpose of this mode is to
  2095.                     specify what kind of  addressing  is  allowed,  on
  2096.                     machines  where  the  allowed  kinds of addressing
  2097.                     depend on the machine mode being addressed.
  2098.  
  2099.                (clobber x)
  2100.                     Represents the storing or possible storing  of  an
  2101.                     unpredictable,  undescribed  value  into  x, which
  2102.                     must be a reg, scratch or mem expression.
  2103.  
  2104.                     One place this is used is in  string  instructions
  2105.                     that  store  standard  values into particular hard
  2106.                     registers.  It may not be  worth  the  trouble  to
  2107.  
  2108.  
  2109.  
  2110.  
  2111.  
  2112.  
  2113.  
  2114.  
  2115.  
  2116.  
  2117.  
  2118.  
  2119.  
  2120.                     describe  the  values  that  are stored, but it is
  2121.                     essential to inform the compiler that  the  regis-
  2122.                     ters will be altered, lest it attempt to keep data
  2123.                     in them across the string instruction.
  2124.  
  2125.                     If x is (mem:BLK (const_int 0)), it means that all
  2126.                     memory locations must be presumed clobbered.
  2127.  
  2128.                     Note that the machine description classifies  cer-
  2129.                     tain  hard  registers  as ``call-clobbered''.  All
  2130.                     function call instructions are assumed by  default
  2131.                     to clobber these registers, so there is no need to
  2132.                     use clobber expressions  to  indicate  this  fact.
  2133.                     Also,  each  function  call is assumed to have the
  2134.                     potential to alter any memory location, unless the
  2135.                     function is declared const.
  2136.  
  2137.                     If the last group of expressions in a parallel are
  2138.                     each  a clobber expression whose arguments are reg
  2139.                     or match_scratch (see section  RTL  Template)  ex-
  2140.                     pressions,  the  combiner  phase  can  add the ap-
  2141.                     propriate clobber expressions to an  insn  it  has
  2142.                     constructed  when doing so will cause a pattern to
  2143.                     be matched.
  2144.  
  2145.                     This feature  can  be  used,  for  example,  on  a
  2146.                     machine  that  whose multiply and add instructions
  2147.                     don't use an MQ register but  which  has  an  add-
  2148.                     accumulate  instruction  that  does clobber the MQ
  2149.                     register.  Similarly, a combined instruction might
  2150.                     require a temporary register while the constituent
  2151.                     instructions might not.
  2152.  
  2153.                     When a clobber expression for a  register  appears
  2154.                     inside a parallel with other side effects, the re-
  2155.                     gister allocator guarantees that the  register  is
  2156.                     unoccupied  both before and after that insn.  How-
  2157.                     ever, the reload phase  may  allocate  a  register
  2158.                     used  for  one  of  the inputs unless the `&' con-
  2159.                     straint is specified for the selected  alternative
  2160.                     (see  section  Modifiers).  You can clobber either
  2161.                     a specific hard register, a pseudo register, or  a
  2162.                     scratch  expression;  in the latter two cases, GNU
  2163.                     CC will allocate a hard register that is available
  2164.                     there for use as a temporary.
  2165.  
  2166.                     For instructions that require a  temporary  regis-
  2167.                     ter,  you  should use scratch instead of a pseudo-
  2168.                     register because  this  will  allow  the  combiner
  2169.                     phase  to  add  the clobber when required.  You do
  2170.                     this by coding (clobber (match_scratch ...)).   If
  2171.                     you  do  clobber  a pseudo register, use one which
  2172.                     appears nowhere else---generate  a  new  one  each
  2173.  
  2174.  
  2175.  
  2176.  
  2177.  
  2178.  
  2179.  
  2180.  
  2181.  
  2182.  
  2183.  
  2184.  
  2185.  
  2186.                     time.  Otherwise, you may confuse CSE.
  2187.  
  2188.                     There is one other  known  use  for  clobbering  a
  2189.                     pseudo register in a parallel: when one of the in-
  2190.                     put operands of the insn is also clobbered by  the
  2191.                     insn.   In this case, using the same pseudo regis-
  2192.                     ter in the clobber and elsewhere in the insn  pro-
  2193.                     duces the expected results.
  2194.  
  2195.                (use x)
  2196.                     Represents the use of the value of  x.   It  indi-
  2197.                     cates  that  the  value  in x at this point in the
  2198.                     program is needed, even though it may not  be  ap-
  2199.                     parent  why  this  is so.  Therefore, the compiler
  2200.                     will not attempt to delete  previous  instructions
  2201.                     whose  only  effect  is  to store a value in x.  x
  2202.                     must be a reg expression.
  2203.  
  2204.                     During the delayed branch scheduling phase, x  may
  2205.                     be  an insn.  This indicates that x previously was
  2206.                     located at this place in the  code  and  its  data
  2207.                     dependencies need to be taken into account.  These
  2208.                     use insns  will  be  deleted  before  the  delayed
  2209.                     branch scheduling phase exits.
  2210.  
  2211.                (parallel [x0 x1 ...])
  2212.                     Represents  several  side  effects  performed   in
  2213.                     parallel.  The square brackets stand for a vector;
  2214.                     the operand of parallel is  a  vector  of  expres-
  2215.                     sions.   x0,  x1 and so on are individual side ef-
  2216.                     fect expressions---expressions of code set,  call,
  2217.                     return, clobber or use.
  2218.  
  2219.                     ``In parallel'' means that first  all  the  values
  2220.                     used  in the individual side-effects are computed,
  2221.                     and second all the actual  side-effects  are  per-
  2222.                     formed.  For example,
  2223.  
  2224.  
  2225.                         (parallel [(set (reg:SI 1) (mem:SI (reg:SI 1)))
  2226.                                    (set (mem:SI (reg:SI 1)) (reg:SI 1))])
  2227.  
  2228.  
  2229.  
  2230.                says unambiguously that the values of hard register
  2231.                1  and  the memory location addressed by it are in-
  2232.                terchanged.  In both places where  (reg:SI  1)  ap-
  2233.                pears as a memory address it refers to the value in
  2234.                register 1 before the execution of the insn.
  2235.  
  2236.                     It follows that it is incorrect to use  paral-
  2237.                     lel  and  expect  the  result of one set to be
  2238.                     available for the next one.  For example, peo-
  2239.  
  2240.  
  2241.  
  2242.  
  2243.  
  2244.  
  2245.  
  2246.  
  2247.  
  2248.  
  2249.  
  2250.  
  2251.  
  2252.                     ple  sometimes attempt to represent a jump-if-
  2253.                     zero instruction this way:
  2254.  
  2255.  
  2256.                         (parallel [(set (cc0) (reg:SI 34))
  2257.                                    (set (pc) (if_then_else
  2258.                                                 (eq (cc0) (const_int 0))
  2259.                                                 (label_ref ...)
  2260.                                                 (pc)))])
  2261.  
  2262.  
  2263.  
  2264.                But this is incorrect, because  it  says  that  the
  2265.                jump  condition depends on the condition code value
  2266.                before this instruction, not on the new value  that
  2267.                is set by this instruction.
  2268.  
  2269.                     Peephole optimization, which takes  place  to-
  2270.                     gether  with  final  assembly code output, can
  2271.                     produce insns  whose  patterns  consist  of  a
  2272.                     parallel whose elements are the operands need-
  2273.                     ed to output the resulting  assembler  code---
  2274.                     often  reg, mem or constant expressions.  This
  2275.                     would not be  well-formed  RTL  at  any  other
  2276.                     stage  in  compilation,  but it is ok then be-
  2277.                     cause no further optimization  remains  to  be
  2278.                     done.   However,  the  definition of the macro
  2279.                     NOTICE_UPDATE_CC, if any, must deal with  such
  2280.                     insns  if  you  define  any peephole optimiza-
  2281.                     tions.
  2282.  
  2283.                (sequence [insns ...])
  2284.                     Represents a sequence of insns.  Each  of  the
  2285.                     insns  that  appears in the vector is suitable
  2286.                     for appearing in the chain  of  insns,  so  it
  2287.                     must   be   an   insn,  jump_insn,  call_insn,
  2288.                     code_label, barrier or note.
  2289.  
  2290.                     A sequence RTX is never placed  in  an  actual
  2291.                     insn during RTL generation.  It represents the
  2292.                     sequence  of  insns   that   result   from   a
  2293.                     define_expand before those insns are passed to
  2294.                     emit_insn to  insert  them  in  the  chain  of
  2295.                     insns.  When actually inserted, the individual
  2296.                     sub-insns are separated out and  the  sequence
  2297.                     is forgotten.
  2298.  
  2299.                     After delay-slot scheduling is  completed,  an
  2300.                     insn  and all the insns that reside in its de-
  2301.                     lay slots are  grouped  together  into  a  se-
  2302.                     quence.   The insn requiring the delay slot is
  2303.                     the first insn in the vector; subsequent insns
  2304.                     are to be placed in the delay slot.
  2305.  
  2306.  
  2307.  
  2308.  
  2309.  
  2310.  
  2311.  
  2312.  
  2313.  
  2314.  
  2315.  
  2316.  
  2317.  
  2318.                     INSN_ANNULLED_BRANCH_P is set on an insn in  a
  2319.                     delay  slot  to  indicate  that  a branch insn
  2320.                     should be used that will  conditionally  annul
  2321.                     the  effect  of  the insns in the delay slots.
  2322.                     In such a case,  INSN_FROM_TARGET_P  indicates
  2323.                     that the insn is from the target of the branch
  2324.                     and should be executed only if the  branch  is
  2325.                     taken;  otherwise  the insn should be executed
  2326.                     only if the branch is not taken.  See  section
  2327.                     Delay Slots.
  2328.  
  2329.  
  2330.                These expression  codes  appear  in  place  of  a  side
  2331.           effect,  as  the  body  of an insn, though strictly speaking
  2332.           they do not always describe side effects as such:
  2333.  
  2334.                (asm_input s)
  2335.                     Represents literal assembler code as described  by
  2336.                     the string s.
  2337.  
  2338.                (unspec [operands ...] index)
  2339.  
  2340.                (unspec [operands ...] index)
  2341.                     Represents   a   machine-specific   operation   on
  2342.                     operands.   index selects between multiple macine-
  2343.                     specific operations.  unspec_volatile is used  for
  2344.                     volatile  operations and operations that may trap;
  2345.                     unspec is used for other operations.
  2346.  
  2347.                     These codes may appear themselves inside a pattern
  2348.                     of  an  insn,  inside a parallel, or inside an ex-
  2349.                     pression.
  2350.  
  2351.                (addr_vec:m [lr0 lr1 ...])
  2352.                     Represents a table of jump addresses.  The  vector
  2353.                     elements  lr0,  etc.,  are  label_ref expressions.
  2354.                     The mode m specifies how much space  is  given  to
  2355.                     each address; normally m would be Pmode.
  2356.  
  2357.                (addr_diff_vec:m base [lr0 lr1 ...])
  2358.                     Represents a table of jump addresses expressed  as
  2359.                     offsets from base.  The vector elements lr0, etc.,
  2360.                     are label_ref expressions and  so  is  base.   The
  2361.                     mode  m  specifies how much space is given to each
  2362.                     address-difference.
  2363.  
  2364.  
  2365.           1.13.  Embedded Side-Effects on Addresses
  2366.  
  2367.                Four special side-effect  expression  codes  appear  as
  2368.           memory addresses.
  2369.  
  2370.  
  2371.  
  2372.  
  2373.  
  2374.  
  2375.  
  2376.  
  2377.  
  2378.  
  2379.  
  2380.  
  2381.  
  2382.  
  2383.  
  2384.                (pre_dec:m x)
  2385.                     Represents the side effect of decrementing x by  a
  2386.                     standard amount and represents also the value that
  2387.                     x has after being decremented.  x must be a reg or
  2388.                     mem,  but  most machines allow only a reg.  m must
  2389.                     be the machine mode for pointers on the machine in
  2390.                     use.  The amount x is decremented by is the length
  2391.                     in bytes of the machine  mode  of  the  containing
  2392.                     memory  reference  of which this expression serves
  2393.                     as the address.  Here is an example of its use:
  2394.  
  2395.  
  2396.                         (mem:DF (pre_dec:SI (reg:SI 39)))
  2397.  
  2398.  
  2399.  
  2400.                This says to decrement pseudo register  39  by  the
  2401.                length  of a DFmode value and use the result to ad-
  2402.                dress a DFmode value.
  2403.  
  2404.                (pre_inc:m x)
  2405.                     Similar, but specifies incrementing x  instead
  2406.                     of decrementing it.
  2407.  
  2408.                (post_dec:m x)
  2409.                     Represents the same side effect as pre_dec but
  2410.                     a different value.  The value represented here
  2411.                     is the value x has before being decremented.
  2412.  
  2413.                (post_inc:m x)
  2414.                     Similar, but specifies incrementing x  instead
  2415.                     of decrementing it.
  2416.  
  2417.  
  2418.                These embedded side effect  expressions  must  be  used
  2419.           with  care.   Instruction  patterns may not use them.  Until
  2420.           the `flow' pass of the compiler,  they  may  occur  only  to
  2421.           represent  pushes  onto  the  stack.   The `flow' pass finds
  2422.           cases where registers are incremented or decremented in  one
  2423.           instruction  and used as an address shortly before or after;
  2424.           these cases are  then  transformed  to  use  pre-  or  post-
  2425.           increment or -decrement.
  2426.  
  2427.                If a register used as the operand of these  expressions
  2428.           is used in another address in an insn, the original value of
  2429.           the register is used.  Uses of the register  outside  of  an
  2430.           address  are  not permitted within the same insn as a use in
  2431.           an embedded side effect expression because such insns behave
  2432.           differently  on different machines and hence must be treated
  2433.           as ambiguous and disallowed.
  2434.  
  2435.                An instruction that can be represented with an embedded
  2436.           side   effect  could  also  be  represented  using  parallel
  2437.  
  2438.  
  2439.  
  2440.  
  2441.  
  2442.  
  2443.  
  2444.  
  2445.  
  2446.  
  2447.  
  2448.  
  2449.  
  2450.           containing an additional set to  describe  how  the  address
  2451.           register is altered.  This is not done because machines that
  2452.           allow these operations at all typically allow them  wherever
  2453.           a  memory  address  is called for.  Describing them as addi-
  2454.           tional parallel stores would require doubling the number  of
  2455.           entries in the machine description.
  2456.  
  2457.           1.14.  Assembler Instructions as Expressions
  2458.  
  2459.                The RTX code asm_operands represents a  value  produced
  2460.           by  a  user-specified  assembler instruction.  It is used to
  2461.           represent an asm statement with arguments.  An asm statement
  2462.           with a single output operand, like this:
  2463.  
  2464.  
  2465.               asm ("foo %1,%2,%0" : "=a" (outputvar) : "g" (x + y), "di" (*z));
  2466.  
  2467.  
  2468.  
  2469.           is  represented  using  a  single  asm_operands  RTX   which
  2470.           represents the value that is stored in outputvar:
  2471.  
  2472.  
  2473.               (set rtx-for-outputvar
  2474.                    (asm_operands "foo %1,%2,%0" "a" 0
  2475.                                  [rtx-for-addition-result rtx-for-*z]
  2476.                                  [(asm_input:m1 "g")
  2477.                                   (asm_input:m2 "di")]))
  2478.  
  2479.  
  2480.  
  2481.           Here the operands of the asm_operands RTX are the  assembler
  2482.           template   string,   the  output-operand's  constraint,  the
  2483.           index-number of the output operand among the output operands
  2484.           specified,  a vector of input operand RTX's, and a vector of
  2485.           input-operand modes and constraints.  The  mode  m1  is  the
  2486.           mode of the sum x+y; m2 is that of *z.
  2487.  
  2488.                When an asm statement has multiple output  values,  its
  2489.           insn  has several such set RTX's inside of a parallel.  Each
  2490.           set contains a asm_operands; all of  these  share  the  same
  2491.           assembler  template  and vectors, but each contains the con-
  2492.           straint for the respective output operand.   They  are  also
  2493.           distinguished  by  the output-operand index number, which is
  2494.           0, 1, ... for successive output operands.
  2495.  
  2496.           1.15.  Insns
  2497.  
  2498.                The RTL representation of the code for a function is  a
  2499.           doubly-linked  chain  of  objects  called  insns.  Insns are
  2500.           expressions with special codes that are used  for  no  other
  2501.           purpose.    Some   insns  are  actual  instructions;  others
  2502.           represent dispatch  tables  for  switch  statements;  others
  2503.  
  2504.  
  2505.  
  2506.  
  2507.  
  2508.  
  2509.  
  2510.  
  2511.  
  2512.  
  2513.  
  2514.  
  2515.  
  2516.           represent  labels to jump to or various sorts of declarative
  2517.           information.
  2518.  
  2519.                In addition to its own specific data,  each  insn  must
  2520.           have a unique id-number that distinguishes it from all other
  2521.           insns in the current function (after delayed branch schedul-
  2522.           ing,  copies  of  an  insn  with  the  same id-number may be
  2523.           present in multiple places in a function, but  these  copies
  2524.           will  always  be  identical  and  will  only appear inside a
  2525.           sequence), and chain pointers to the preceding and following
  2526.           insns.  These three fields occupy the same position in every
  2527.           insn, independent of the expression code of the insn.   They
  2528.           could be accessed with XEXP and XINT, but instead three spe-
  2529.           cial macros are always used:
  2530.  
  2531.                INSN_UID (i)
  2532.                     Accesses the unique id of insn i.
  2533.  
  2534.                PREV_INSN (i)
  2535.                     Accesses the chain pointer to the  insn  preceding
  2536.                     i.   If  i  is  the  first  insn,  this  is a null
  2537.                     pointer.
  2538.  
  2539.                NEXT_INSN (i)
  2540.                     Accesses the chain pointer to the  insn  following
  2541.                     i.  If i is the last insn, this is a null pointer.
  2542.  
  2543.  
  2544.                The first insn in the  chain  is  obtained  by  calling
  2545.           get_insns;   the   last   insn  is  the  result  of  calling
  2546.           get_last_insn.  Within the chain delimited by  these  insns,
  2547.           the NEXT_INSN and PREV_INSN pointers must always correspond:
  2548.           if insn is not the first insn,
  2549.  
  2550.  
  2551.               NEXT_INSN (PREV_INSN (insn)) == insn
  2552.  
  2553.  
  2554.  
  2555.           is always true and if insn is not the last insn,
  2556.  
  2557.  
  2558.               PREV_INSN (NEXT_INSN (insn)) == insn
  2559.  
  2560.  
  2561.  
  2562.           is always true.
  2563.  
  2564.                After delay slot scheduling, some of the insns  in  the
  2565.           chain  might be sequence expressions, which contain a vector
  2566.           of insns.  The value of NEXT_INSN in all  but  the  last  of
  2567.           these  insns  is  the  next insn in the vector; the value of
  2568.           NEXT_INSN of the last insn in the vector is the same as  the
  2569.  
  2570.  
  2571.  
  2572.  
  2573.  
  2574.  
  2575.  
  2576.  
  2577.  
  2578.  
  2579.  
  2580.  
  2581.  
  2582.           value  of  NEXT_INSN  for  the  sequence in which it is con-
  2583.           tained.  Similar rules apply for PREV_INSN.
  2584.  
  2585.                This means that the above  invariants  are  not  neces-
  2586.           sarily true for insns inside sequence expressions.  Specifi-
  2587.           cally, if insn is the first insn in  a  sequence,  NEXT_INSN
  2588.           (PREV_INSN  (insn))  is  the  insn  containing  the sequence
  2589.           expression, as is the value of PREV_INSN (NEXT_INSN  (insn))
  2590.           is  insn  is  the last insn in the sequence expression.  You
  2591.           can use these expressions to find  the  containing  sequence
  2592.           expression.
  2593.  
  2594.                Every insn has one  of  the  following  six  expression
  2595.           codes:
  2596.  
  2597.                insn
  2598.                     The expression code insn is used for  instructions
  2599.                     that  do  not  jump  and do not do function calls.
  2600.                     sequence expressions are always contained in insns
  2601.                     with  code  insn even if one of those insns should
  2602.                     jump or do function calls.
  2603.  
  2604.                     Insns with code insn have four  additional  fields
  2605.                     beyond  the  three  mandatory  ones  listed above.
  2606.                     These four are described in a table below.
  2607.  
  2608.                jump_insn
  2609.                     The expression code jump_insn is used for instruc-
  2610.                     tions  that may jump (or, more generally, may con-
  2611.                     tain label_ref expressions).  If there is  an  in-
  2612.                     struction  to return from the current function, it
  2613.                     is recorded as a jump_insn.
  2614.  
  2615.                     jump_insn insns have the same extra fields as insn
  2616.                     insns,  accessed  in  the same way and in addition
  2617.                     contains a field JUMP_LABEL which is defined  once
  2618.                     jump optimization has completed.
  2619.  
  2620.                     For simple conditional  and  unconditional  jumps,
  2621.                     this  field  contains the code_label to which this
  2622.                     insn will (possibly conditionally) branch.   In  a
  2623.                     more  complex  jump, JUMP_LABEL records one of the
  2624.                     labels that the insn refers to; the  only  way  to
  2625.                     find  the others is to scan the entire body of the
  2626.                     insn.
  2627.  
  2628.                     Return insns count as jumps, but since they do not
  2629.                     refer  to  any  labels,  they  have  zero  in  the
  2630.                     JUMP_LABEL field.
  2631.  
  2632.                call_insn
  2633.                     The expression code call_insn is used for instruc-
  2634.                     tions that may do function calls.  It is important
  2635.  
  2636.  
  2637.  
  2638.  
  2639.  
  2640.  
  2641.  
  2642.  
  2643.  
  2644.  
  2645.  
  2646.  
  2647.  
  2648.                     to distinguish these instructions because they im-
  2649.                     ply  that  certain  registers and memory locations
  2650.                     may be altered unpredictably.
  2651.  
  2652.                     A call_insn insn may be preceeded  by  insns  that
  2653.                     contain a single use expression and be followed by
  2654.                     insns the contain a single clobber expression.  If
  2655.                     so,  these use and clobber expressions are treated
  2656.                     as being part of the function  call.   There  must
  2657.                     not  even  be a note between the call_insn and the
  2658.                     use or clobber insns for this special treatment to
  2659.                     take place.  This is somewhat of a kludge and will
  2660.                     be removed in a later version of GNU CC.
  2661.  
  2662.                     call_insn insns have the same extra fields as insn
  2663.                     insns, accessed in the same way.
  2664.  
  2665.                code_label
  2666.                     A code_label insn represents a label that  a  jump
  2667.                     insn  can jump to.  It contains two special fields
  2668.                     of data in addition to the  three  standard  ones.
  2669.                     CODE_LABEL_NUMBER   is  used  to  hold  the  label
  2670.                     number,  a  number  that  identifies  this   label
  2671.                     uniquely  among  all the labels in the compilation
  2672.                     (not just in the current  function).   Ultimately,
  2673.                     the  label  is represented in the assembler output
  2674.                     as an assembler label, usually of  the  form  `Ln'
  2675.                     where n is the label number.
  2676.  
  2677.                     When a code_label appears in an RTL expression, it
  2678.                     normally   appears   within   a   label_ref  which
  2679.                     represents the address of the label, as a number.
  2680.  
  2681.                     The field LABEL_NUSES is  only  defined  once  the
  2682.                     jump  optimization phase is completed and contains
  2683.                     the number of times this label  is  referenced  in
  2684.                     the current function.
  2685.  
  2686.                barrier
  2687.                     Barriers are placed in the instruction stream when
  2688.                     control  cannot  flow  past them.  They are placed
  2689.                     after unconditional jump instructions to  indicate
  2690.                     that  the  jumps are unconditional and after calls
  2691.                     to volatile functions, which do not return  (e.g.,
  2692.                     exit).   They  contain  no  information beyond the
  2693.                     three standard fields.
  2694.  
  2695.                note
  2696.                     note insns are used to represent additional debug-
  2697.                     ging  and  declarative  information.  They contain
  2698.                     two nonstandard fields, an integer  which  is  ac-
  2699.                     cessed  with  the  macro  NOTE_LINE_NUMBER  and  a
  2700.                     string accessed with NOTE_SOURCE_FILE.
  2701.  
  2702.  
  2703.  
  2704.  
  2705.  
  2706.  
  2707.  
  2708.  
  2709.  
  2710.  
  2711.  
  2712.  
  2713.  
  2714.                     If  NOTE_LINE_NUMBER   is   positive,   the   note
  2715.                     represents  the  position  of  a  source  line and
  2716.                     NOTE_SOURCE_FILE is the source file name that  the
  2717.                     line came from.  These notes control generation of
  2718.                     line number data in the assembler output.
  2719.  
  2720.                     Otherwise, NOTE_LINE_NUMBER is not really  a  line
  2721.                     number but a code with one of the following values
  2722.                     (and  NOTE_SOURCE_FILE   must   contain   a   null
  2723.                     pointer):
  2724.  
  2725.                     NOTE_INSN_DELETED
  2726.                          Such a note is  completely  ignorable.   Some
  2727.                          passes of the compiler delete insns by alter-
  2728.                          ing them into notes of this kind.
  2729.  
  2730.                     NOTE_INSN_BLOCK_BEG
  2731.  
  2732.                     NOTE_INSN_BLOCK_END
  2733.                          These types of notes indicate the position of
  2734.                          the  beginning  and end of a level of scoping
  2735.                          of variable names.  They control  the  output
  2736.                          of debugging information.
  2737.  
  2738.                     NOTE_INSN_LOOP_BEG
  2739.  
  2740.                     NOTE_INSN_LOOP_END
  2741.                          These types of notes indicate the position of
  2742.                          the beginning and end of a while or for loop.
  2743.                          They enable the loop optimizer to find  loops
  2744.                          quickly.
  2745.  
  2746.                     NOTE_INSN_LOOP_CONT
  2747.                          Appears at the place in a loop that  continue
  2748.                          statements jump to.
  2749.  
  2750.                     NOTE_INSN_LOOP_VTOP
  2751.                          This note indicates the place in a loop where
  2752.                          the exit test begins for those loops in which
  2753.                          the exit test has been duplicated.  This  po-
  2754.                          sition  becomes  another virtual start of the
  2755.                          loop when considering loop invariants.
  2756.  
  2757.                     NOTE_INSN_FUNCTION_END
  2758.                          Appears near the end of  the  function  body,
  2759.                          just  before the label that return statements
  2760.                          jump to (on machine where a  single  instruc-
  2761.                          tion  does  not suffice for returning).  This
  2762.                          note may be deleted by jump optimization.
  2763.  
  2764.                     NOTE_INSN_SETJMP
  2765.                          Appears following each call to  setjmp  or  a
  2766.                          related function.
  2767.  
  2768.  
  2769.  
  2770.  
  2771.  
  2772.  
  2773.  
  2774.  
  2775.  
  2776.  
  2777.  
  2778.  
  2779.  
  2780.                     These codes are printed symbolically when they ap-
  2781.                     pear in debugging dumps.
  2782.  
  2783.  
  2784.                The machine mode of an insn is normally  VOIDmode,  but
  2785.           some  phases use the mode for various purposes; for example,
  2786.           the reload pass sets it to HImode if the insn needs  reload-
  2787.           ing  but  not  register  elimination  and QImode if both are
  2788.           required.  The common subexpression  elimination  pass  sets
  2789.           the mode of an insn to QImode when it is the first insn in a
  2790.           block that has already been processed.
  2791.  
  2792.                Here is a table of the extra fields of insn,  jump_insn
  2793.           and call_insn insns:
  2794.  
  2795.                PATTERN (i)
  2796.                     An expression for the  side  effect  performed  by
  2797.                     this  insn.   This  must  be  one of the following
  2798.                     codes: set, call, use, clobber, return, asm_input,
  2799.                     asm_output,  addr_vec, addr_diff_vec, trap_if, un-
  2800.                     spec, unspec_volatile, or parallel.  If  it  is  a
  2801.                     parallel, each element of the parallel must be one
  2802.                     these codes, except that parallel expressions can-
  2803.                     not  be  nested and addr_vec and addr_diff_vec are
  2804.                     not permitted inside a parallel expression.
  2805.  
  2806.                INSN_CODE (i)
  2807.                     An integer that says which pattern in the  machine
  2808.                     description matches this insn, or -1 if the match-
  2809.                     ing has not yet been attempted.
  2810.  
  2811.                     Such matching is never attempted  and  this  field
  2812.                     remains  -1 on an insn whose pattern consists of a
  2813.                     single  use,  clobber,  asm_input,   addr_vec   or
  2814.                     addr_diff_vec expression.
  2815.  
  2816.                     Matching is also never  attempted  on  insns  that
  2817.                     result  from  an  asm statement.  These contain at
  2818.                     least one asm_operands expression.   The  function
  2819.                     asm_noperands  returns  a  non-negative  value for
  2820.                     such insns.
  2821.  
  2822.                     In the debugging output, this field is printed  as
  2823.                     a  number  followed  by  a symbolic representation
  2824.                     that locates the pattern in the `md' file as  some
  2825.                     small  positive  or  negative  offset from a named
  2826.                     pattern.
  2827.  
  2828.                LOG_LINKS (i)
  2829.                     A list (chain of insn_list expressions) giving in-
  2830.                     formation  about dependencies between instructions
  2831.                     within a basic block.  Neither a jump nor a  label
  2832.                     may come between the related insns.
  2833.  
  2834.  
  2835.  
  2836.  
  2837.  
  2838.  
  2839.  
  2840.  
  2841.  
  2842.  
  2843.  
  2844.  
  2845.  
  2846.                REG_NOTES (i)
  2847.                     A list (chain of expr_list and  insn_list  expres-
  2848.                     sions)  giving miscellaneous information about the
  2849.                     insn.  It is often information pertaining  to  the
  2850.                     registers used in this insn.
  2851.  
  2852.  
  2853.                The LOG_LINKS field of an insn is a chain of  insn_list
  2854.           expressions.   Each  of these has two operands: the first is
  2855.           an insn, and the second is another insn_list expression (the
  2856.           next one in the chain).  The last insn_list in the chain has
  2857.           a null pointer as second  operand.   The  significant  thing
  2858.           about  the  chain  is  which  insns  appear  in it (as first
  2859.           operands of insn_list expressions).  Their order is not sig-
  2860.           nificant.
  2861.  
  2862.                This list is originally set up  by  the  flow  analysis
  2863.           pass; it is a null pointer until then.  Flow only adds links
  2864.           for those data dependencies which can be used  for  instruc-
  2865.           tion  combination.   For  each  insn, the flow analysis pass
  2866.           adds a link to insns which store into registers values  that
  2867.           are  used  for the first time in this insn.  The instruction
  2868.           scheduling pass adds extra links so  that  every  dependence
  2869.           will  be  represented.   Links  represent data dependencies,
  2870.           antidependencies and output dependencies; the  machine  mode
  2871.           of  the  link distinguishes these three types: antidependen-
  2872.           cies have mode REG_DEP_ANTI, output dependencies  have  mode
  2873.           REG_DEP_OUTPUT, and data dependencies have mode VOIDmode.
  2874.  
  2875.                The REG_NOTES field of an insn is a  chain  similar  to
  2876.           the LOG_LINKS field but it includes expr_list expressions in
  2877.           addition to insn_list expressions.  There are several  kinds
  2878.           of  register  notes,  which are distinguished by the machine
  2879.           mode, which in a register note is really understood as being
  2880.           an  enum reg_note.  The first operand op of the note is data
  2881.           whose meaning depends on the kind of note.
  2882.  
  2883.                The macro REG_NOTE_KIND (x) returns  the  the  kind  of
  2884.           register note.  Its counterpart, the macro PUT_REG_NOTE_KIND
  2885.           (x, newkind) sets the register note type of x to be newkind.
  2886.  
  2887.                Register notes are of three classes: They may say some-
  2888.           thing  about  an  input  to  an insn, they may say something
  2889.           about an output of an insn, or they  may  create  a  linkage
  2890.           between  two insns.  There are also a set of values that are
  2891.           only used in LOG_LINKS.
  2892.  
  2893.                These register notes annotate inputs to an insn:
  2894.  
  2895.                REG_DEAD
  2896.                     The value in op dies in this insn; that is to say,
  2897.                     altering  the  value  immediately  after this insn
  2898.                     would not affect the future behavior of  the  pro-
  2899.  
  2900.  
  2901.  
  2902.  
  2903.  
  2904.  
  2905.  
  2906.  
  2907.  
  2908.  
  2909.  
  2910.  
  2911.  
  2912.                     gram.
  2913.  
  2914.                     This does not necessarily mean that  the  register
  2915.                     op  has  no  useful value after this insn since it
  2916.                     may also be an output of  the  insn.   In  such  a
  2917.                     case,  however, a REG_DEAD note would be redundant
  2918.                     and is usually not present until after the  reload
  2919.                     pass, but no code relies on this fact.
  2920.  
  2921.                REG_INC
  2922.                     The register op is incremented (or decremented; at
  2923.                     this level there is no distinction) by an embedded
  2924.                     side effect inside this insn.  This means  it  ap-
  2925.                     pears  in a post_inc, pre_inc, post_dec or pre_dec
  2926.                     expression.
  2927.  
  2928.                REG_NONNEG
  2929.                     The register op is known  to  have  a  nonnegative
  2930.                     value  when this insn is reached.  This is used so
  2931.                     that decrement and branch until zero instructions,
  2932.                     such as the m68k dbra, can be matched.
  2933.  
  2934.                     The REG_NONNEG note is added to insns only if  the
  2935.                     machine   description  contains  a  pattern  named
  2936.                     `decrement_and_branch_until_zero'.
  2937.  
  2938.                REG_NO_CONFLICT
  2939.                     This insn does not cause a conflict between op and
  2940.                     the  item  being  set  by this insn even though it
  2941.                     might appear that it does.  In other words, if the
  2942.                     destination register and op could otherwise be as-
  2943.                     signed the  same  register,  this  insn  does  not
  2944.                     prevent that assignment.
  2945.  
  2946.                     Insns with this note are usually part of  a  block
  2947.                     that  begins  with  a  clobber  insn  specifying a
  2948.                     multi-word pseudo register (which will be the out-
  2949.                     put  of the block), a group of insns that each set
  2950.                     one word of the value and have the REG_NO_CONFLICT
  2951.                     note  attached,  and  a final insn that copies the
  2952.                     output to itself with an attached  REG_EQUAL  note
  2953.                     giving  the expression being computed.  This block
  2954.                     is encapsulated with  REG_LIBCALL  and  REG_RETVAL
  2955.                     notes on the first and last insns, respectively.
  2956.  
  2957.                REG_LABEL
  2958.                     This insn uses op, a  code_label,  but  is  not  a
  2959.                     jump_insn.   The presence of this note allows jump
  2960.                     optimization to be aware that op is, in fact,  be-
  2961.                     ing used.
  2962.  
  2963.  
  2964.  
  2965.  
  2966.  
  2967.  
  2968.  
  2969.  
  2970.  
  2971.  
  2972.  
  2973.  
  2974.  
  2975.  
  2976.  
  2977.  
  2978.                The following notes describe attributes of  outputs  of
  2979.           an insn:
  2980.  
  2981.                REG_EQUIV
  2982.  
  2983.                REG_EQUAL
  2984.                     This note is only valid on an insn that sets  only
  2985.                     one register and indicates that that register will
  2986.                     be equal to op at run  time;  the  scope  of  this
  2987.                     equivalence  differs  between  the  two  types  of
  2988.                     notes.  The value which the insn explicitly copies
  2989.                     into  the register may look different from op, but
  2990.                     they will be equal at run time.  If the output  of
  2991.                     the  single  set  is a strict_low_part expression,
  2992.                     the note refers to the register that is  contained
  2993.                     in SUBREG_REG of the subreg expression.
  2994.  
  2995.                     For REG_EQUIV, the register is  equivalent  to  op
  2996.                     throughout  the entire function, and could validly
  2997.                     be  replaced  in  all  its  occurrences   by   op.
  2998.                     (``Validly''  here  refers to the data flow of the
  2999.                     program; simple replacement may  make  some  insns
  3000.                     invalid.)   For example, when a constant is loaded
  3001.                     into a register that is never assigned  any  other
  3002.                     value, this kind of note is used.
  3003.  
  3004.                     When a parameter is copied into a  pseudo-register
  3005.                     at  entry  to  a  function,  a  note  of this kind
  3006.                     records that the register  is  equivalent  to  the
  3007.                     stack   slot   where  the  parameter  was  passed.
  3008.                     Although in this case the register may be  set  by
  3009.                     other  insns, it is still valid to replace the re-
  3010.                     gister by the stack slot throughout the function.
  3011.  
  3012.                     In the case of REG_EQUAL, the register that is set
  3013.                     by  this  insn  will be equal to op at run time at
  3014.                     the end of this insn but not necessarily elsewhere
  3015.                     in the function.  In this case, op is typically an
  3016.                     arithmetic expression.  For example,  when  a  se-
  3017.                     quence  of insns such as a library call is used to
  3018.                     perform an arithmetic operation, this kind of note
  3019.                     is  attached  to  the insn that produces or copies
  3020.                     the final value.
  3021.  
  3022.                     These two notes are used in different ways by  the
  3023.                     compiler passes.  REG_EQUAL is used by passes pri-
  3024.                     or to register allocation (such as  common  subex-
  3025.                     pression  elimination  and  loop  optimization) to
  3026.                     tell them how to think of that  value.   REG_EQUIV
  3027.                     notes  are used by register allocation to indicate
  3028.                     that there is an available  substitute  expression
  3029.                     (either a constant or a mem expression for the lo-
  3030.                     cation of a parameter on the stack)  that  may  be
  3031.  
  3032.  
  3033.  
  3034.  
  3035.  
  3036.  
  3037.  
  3038.  
  3039.  
  3040.  
  3041.  
  3042.  
  3043.  
  3044.                     used in place of a register if insufficient regis-
  3045.                     ters are available.
  3046.  
  3047.                     Except for stack homes for parameters,  which  are
  3048.                     indicated  by  a REG_EQUIV note and are not useful
  3049.                     to the early optimization passes and pseudo regis-
  3050.                     ters  that  are  equivalent  to  a memory location
  3051.                     throughout there entire life, which is not detect-
  3052.                     ed   until   later   in   the   compilation,   all
  3053.                     equivalences are initially  indicated  by  an  at-
  3054.                     tached REG_EQUAL note.  In the early stages of re-
  3055.                     gister allocation, a  REG_EQUAL  note  is  changed
  3056.                     into  a REG_EQUIV note if op is a constant and the
  3057.                     insn represents the only set  of  its  destination
  3058.                     register.
  3059.  
  3060.                     Thus, compiler passes prior to register allocation
  3061.                     need  only  check  for  REG_EQUAL notes and passes
  3062.                     subsequent to register allocation need only  check
  3063.                     for REG_EQUIV notes.
  3064.  
  3065.                REG_UNUSED
  3066.                     The register op being set by this insn will not be
  3067.                     used  in  a  subsequent insn.  This differs from a
  3068.                     REG_DEAD note, which indicates that the  value  in
  3069.                     an input will not be used subsequently.  These two
  3070.                     notes are independent; both may be present for the
  3071.                     same register.
  3072.  
  3073.                REG_WAS_0
  3074.                     The single output of this insn contained zero  be-
  3075.                     fore  this  insn.   op  is the insn that set it to
  3076.                     zero.  You can rely on this note if it is  present
  3077.                     and op has not been deleted or turned into a note;
  3078.                     its absence implies nothing.
  3079.  
  3080.  
  3081.                These notes  describe  linkages  between  insns.   They
  3082.           occur  in  pairs:  one  insn has one of a pair of notes that
  3083.           points to a second insn, which has the inverse note pointing
  3084.           back to the first insn.
  3085.  
  3086.                REG_RETVAL
  3087.                     This insn copies the value  of  a  multi-insn  se-
  3088.                     quence  (for  example,  a library call), and op is
  3089.                     the first insn of  the  sequence  (for  a  library
  3090.                     call,  the first insn that was generated to set up
  3091.                     the arguments for the library call).
  3092.  
  3093.                     Loop optimization uses this note to treat  such  a
  3094.                     sequence  as  a  single  operation for code motion
  3095.                     purposes and  flow  analysis  uses  this  note  to
  3096.                     delete such sequences whose results are dead.
  3097.  
  3098.  
  3099.  
  3100.  
  3101.  
  3102.  
  3103.  
  3104.  
  3105.  
  3106.  
  3107.  
  3108.  
  3109.  
  3110.                     A REG_EQUAL note will also usually be attached  to
  3111.                     this insn to provide the expression being computed
  3112.                     by the sequence.
  3113.  
  3114.                REG_LIBCALL
  3115.                     This is the inverse of REG_RETVAL: it is placed on
  3116.                     the  first  insn  of a multi-insn sequence, and it
  3117.                     points to the last one.
  3118.  
  3119.                REG_CC_SETTER
  3120.  
  3121.                REG_CC_USER
  3122.                     On machines that use cc0, the insns which set  and
  3123.                     use  cc0  set  and use cc0 are adjacent.  However,
  3124.                     when branch delay slot filling is done,  this  may
  3125.                     no  longer  be  true.   In this case a REG_CC_USER
  3126.                     note will be placed on the  insn  setting  cc0  to
  3127.                     point  to  the  insn using cc0 and a REG_CC_SETTER
  3128.                     note will be placed on the insn using cc0 to point
  3129.                     to the insn setting cc0.
  3130.  
  3131.  
  3132.                These values are only used in the LOG_LINKS field,  and
  3133.           indicate  the  type of dependency that each link represents.
  3134.           Links which indicate a data dependence (a read  after  write
  3135.           dependence) do not use any code, they simply have mode VOID-
  3136.           mode, and are printed without any descriptive text.
  3137.  
  3138.                REG_DEP_ANTI
  3139.                     This indicates an anti dependence (a  write  after
  3140.                     read dependence).
  3141.  
  3142.                REG_DEP_OUTPUT
  3143.                     This indicates an output dependence (a write after
  3144.                     write dependence).
  3145.  
  3146.  
  3147.                For convenience, the machine mode in  an  insn_list  or
  3148.           expr_list is printed using these symbolic codes in debugging
  3149.           dumps.
  3150.  
  3151.                The  only  difference  between  the  expression   codes
  3152.           insn_list  and  expr_list  is  that  the first operand of an
  3153.           insn_list is assumed to be an insn and is printed in  debug-
  3154.           ging  dumps as the insn's unique id; the first operand of an
  3155.           expr_list is printed in the ordinary way as an expression.
  3156.  
  3157.           1.16.  RTL Representation of Function-Call Insns
  3158.  
  3159.                Insns that call subroutines  have  the  RTL  expression
  3160.           code call_insn.  These insns must satisfy special rules, and
  3161.           their bodies must use a special RTL expression code, call.
  3162.  
  3163.  
  3164.  
  3165.  
  3166.  
  3167.  
  3168.  
  3169.  
  3170.  
  3171.  
  3172.  
  3173.  
  3174.  
  3175.  
  3176.                A call expression has two operands, as follows:
  3177.  
  3178.  
  3179.               (call (mem:fm addr) nbytes)
  3180.  
  3181.  
  3182.  
  3183.           Here nbytes is an operand  that  represents  the  number  of
  3184.           bytes of argument data being passed to the subroutine, fm is
  3185.           a machine mode (which must equal as the  definition  of  the
  3186.           FUNCTION_MODE  macro  in  the  machine description) and addr
  3187.           represents the address of the subroutine.
  3188.  
  3189.                For a  subroutine  that  returns  no  value,  the  call
  3190.           expression  as  shown  above is the entire body of the insn,
  3191.           except that the insn  might  also  contain  use  or  clobber
  3192.           expressions.
  3193.  
  3194.                For a subroutine that returns a value whose mode is not
  3195.           BLKmode,  the value is returned in a hard register.  If this
  3196.           register's number is r, then the body of the call insn looks
  3197.           like this:
  3198.  
  3199.  
  3200.               (set (reg:m r)
  3201.                    (call (mem:fm addr) nbytes))
  3202.  
  3203.  
  3204.  
  3205.           This RTL expression makes it clear (to the optimizer passes)
  3206.           that  the  appropriate  register  receives a useful value in
  3207.           this insn.
  3208.  
  3209.                When a subroutine returns a BLKmode value, it  is  han-
  3210.           dled  by passing to the subroutine the address of a place to
  3211.           store  the  value.   So  the  call  insn  itself  does   not
  3212.           ``return'' any value, and it has the same RTL form as a call
  3213.           that returns nothing.
  3214.  
  3215.                On some machines, the call instruction itself  clobbers
  3216.           some  register,  for  example to contain the return address.
  3217.           call_insn insns on these machines should have a  body  which
  3218.           is  a  parallel  that  contains both the call expression and
  3219.           clobber expressions that indicate which registers  are  des-
  3220.           troyed.   Similarly,  if  the call instruction requires some
  3221.           register other than the stack pointer that is not explicitly
  3222.           mentioned  it  its  RTL,  a use subexpression should mention
  3223.           that register.
  3224.  
  3225.                Functions that are called are  assumed  to  modify  all
  3226.           registers     listed     in    the    configuration    macro
  3227.           CALL_USED_REGISTERS (see section  Register Basics) and, with
  3228.           the  exception  of  const  functions  and  library calls, to
  3229.  
  3230.  
  3231.  
  3232.  
  3233.  
  3234.  
  3235.  
  3236.  
  3237.  
  3238.  
  3239.  
  3240.  
  3241.  
  3242.           modify all of memory.
  3243.  
  3244.                Insns containing just use expressions directly  precede
  3245.           the  call_insn  insn  to  indicate  which  registers contain
  3246.           inputs to the function.  Similarly, if registers other  than
  3247.           those  in  CALL_USED_REGISTERS  are  clobbered by the called
  3248.           function, insns containing a single clobber  follow  immedi-
  3249.           ately after the call to indicate which registers.
  3250.  
  3251.           1.17.  Structure Sharing Assumptions
  3252.  
  3253.                The compiler assumes that certain kinds of RTL  expres-
  3254.           sions  are  unique;  there do not exist two distinct objects
  3255.           representing the same value.  In other cases,  it  makes  an
  3256.           opposite assumption: that no RTL expression object of a cer-
  3257.           tain kind appears in more than one place in  the  containing
  3258.           structure.
  3259.  
  3260.                These assumptions refer to a  single  function;  except
  3261.           for  the  RTL  objects  that  describe  global variables and
  3262.           external functions, and a few standard objects such as small
  3263.           integer  constants,  no  RTL objects are common to two func-
  3264.           tions.
  3265.  
  3266.                o+    Each pseudo-register has only a single reg  object
  3267.                     to  represent  it,  and  therefore  only  a single
  3268.                     machine mode.
  3269.  
  3270.                o+    For  any  symbolic  label,  there  is   only   one
  3271.                     symbol_ref object referring to it.
  3272.  
  3273.                o+    There is only one const_int expression with  value
  3274.                     0,  only one with value 1, and only one with value
  3275.                     -1.  Some other integer  values  are  also  stored
  3276.                     uniquely.
  3277.  
  3278.                o+    There is only one pc expression.
  3279.  
  3280.                o+    There is only one cc0 expression.
  3281.  
  3282.                o+    There is only  one  const_double  expression  with
  3283.                     value  0  for  each floating point mode.  Likewise
  3284.                     for values 1 and 2.
  3285.  
  3286.                o+    No label_ref or scratch appears in more  than  one
  3287.                     place  in the RTL structure; in other words, it is
  3288.                     safe to do a tree-walk of all  the  insns  in  the
  3289.                     function  and assume that each time a label_ref or
  3290.                     scratch is seen it is  distinct  from  all  others
  3291.                     that are seen.
  3292.  
  3293.                o+    Only one mem object is normally created  for  each
  3294.                     static  variable  or  stack slot, so these objects
  3295.  
  3296.  
  3297.  
  3298.  
  3299.  
  3300.  
  3301.  
  3302.  
  3303.  
  3304.  
  3305.  
  3306.  
  3307.  
  3308.                     are frequently shared in all the places  they  ap-
  3309.                     pear.   However,  separate  but  equal objects for
  3310.                     these variables are occasionally made.
  3311.  
  3312.                o+    When a single asm statement  has  multiple  output
  3313.                     operands,  a  distinct  asm_operands expression is
  3314.                     made for each output operand.  However, these  all
  3315.                     share  the  vector  which contains the sequence of
  3316.                     input operands.  This sharing is used later on  to
  3317.                     test  whether  two  asm_operands  expressions come
  3318.                     from the same statement, so all optimizations must
  3319.                     carefully  preserve  the  sharing if they copy the
  3320.                     vector at all.
  3321.  
  3322.                o+    No RTL object appears in more than  one  place  in
  3323.                     the RTL structure except as described above.  Many
  3324.                     passes of the compiler rely on  this  by  assuming
  3325.                     that  they can modify RTL objects in place without
  3326.                     unwanted side-effects on other insns.
  3327.  
  3328.                o+    During initial RTL generation, shared structure is
  3329.                     freely  introduced.  After all the RTL for a func-
  3330.                     tion has been generated, all shared  structure  is
  3331.                     copied  by  unshare_all_rtl in `emit-rtl.c', after
  3332.                     which the above rules are guaranteed  to  be  fol-
  3333.                     lowed.
  3334.  
  3335.                o+    During the combiner pass, shared structure  within
  3336.                     an  insn  can  exist  temporarily.   However,  the
  3337.                     shared structure is copied before the combiner  is
  3338.                     finished  with  the insn.  This is done by calling
  3339.                     copy_rtx_if_shared,  which  is  a  subroutine   of
  3340.                     unshare_all_rtl.
  3341.  
  3342.  
  3343.  
  3344.  
  3345.  
  3346.  
  3347.  
  3348.  
  3349.  
  3350.  
  3351.  
  3352.  
  3353.  
  3354.  
  3355.  
  3356.  
  3357.  
  3358.  
  3359.  
  3360.  
  3361.  
  3362.  
  3363.  
  3364.  
  3365.  
  3366.  
  3367.