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