gccint: Storage References

1 
1 11.6.2 References to storage
1 ----------------------------
1 
1 'ARRAY_REF'
1      These nodes represent array accesses.  The first operand is the
1      array; the second is the index.  To calculate the address of the
1      memory accessed, you must scale the index by the size of the type
1      of the array elements.  The type of these expressions must be the
1      type of a component of the array.  The third and fourth operands
1      are used after gimplification to represent the lower bound and
1      component size but should not be used directly; call
1      'array_ref_low_bound' and 'array_ref_element_size' instead.
1 
1 'ARRAY_RANGE_REF'
1      These nodes represent access to a range (or "slice") of an array.
1      The operands are the same as that for 'ARRAY_REF' and have the same
1      meanings.  The type of these expressions must be an array whose
1      component type is the same as that of the first operand.  The range
1      of that array type determines the amount of data these expressions
1      access.
1 
1 'TARGET_MEM_REF'
1      These nodes represent memory accesses whose address directly map to
1      an addressing mode of the target architecture.  The first argument
1      is 'TMR_SYMBOL' and must be a 'VAR_DECL' of an object with a fixed
1      address.  The second argument is 'TMR_BASE' and the third one is
1      'TMR_INDEX'.  The fourth argument is 'TMR_STEP' and must be an
1      'INTEGER_CST'.  The fifth argument is 'TMR_OFFSET' and must be an
1      'INTEGER_CST'.  Any of the arguments may be NULL if the appropriate
1      component does not appear in the address.  Address of the
1      'TARGET_MEM_REF' is determined in the following way.
1 
1           &TMR_SYMBOL + TMR_BASE + TMR_INDEX * TMR_STEP + TMR_OFFSET
1 
1      The sixth argument is the reference to the original memory access,
1      which is preserved for the purposes of the RTL alias analysis.  The
1      seventh argument is a tag representing the results of tree level
1      alias analysis.
1 
1 'ADDR_EXPR'
1      These nodes are used to represent the address of an object.  (These
1      expressions will always have pointer or reference type.)  The
1      operand may be another expression, or it may be a declaration.
1 
1      As an extension, GCC allows users to take the address of a label.
1      In this case, the operand of the 'ADDR_EXPR' will be a
1      'LABEL_DECL'.  The type of such an expression is 'void*'.
1 
1      If the object addressed is not an lvalue, a temporary is created,
1      and the address of the temporary is used.
1 
1 'INDIRECT_REF'
1      These nodes are used to represent the object pointed to by a
1      pointer.  The operand is the pointer being dereferenced; it will
1      always have pointer or reference type.
1 
1 'MEM_REF'
1      These nodes are used to represent the object pointed to by a
1      pointer offset by a constant.  The first operand is the pointer
1      being dereferenced; it will always have pointer or reference type.
1      The second operand is a pointer constant.  Its type is specifying
1      the type to be used for type-based alias analysis.
1 
1 'COMPONENT_REF'
1      These nodes represent non-static data member accesses.  The first
1      operand is the object (rather than a pointer to it); the second
1      operand is the 'FIELD_DECL' for the data member.  The third operand
1      represents the byte offset of the field, but should not be used
1      directly; call 'component_ref_field_offset' instead.
1