GCC Middle and Back End API Reference
address_info Struct Reference

#include <rtl.h>

Collaboration diagram for address_info:

Data Fields

enum machine_mode mode
addr_space_t as
rtxouter
rtxinner
rtxsegment
rtxbase
rtxindex
rtxdisp
rtxsegment_term
rtxbase_term
rtxindex_term
rtxdisp_term
rtxbase_term2
enum rtx_code addr_outer_code
enum rtx_code base_outer_code
bool autoinc_p

Detailed Description

Information about an address. This structure is supposed to be able to represent all supported target addresses. Please extend it if it is not yet general enough.


Field Documentation

enum rtx_code address_info::addr_outer_code

ADDRESS if this structure describes an address operand, MEM if it describes a MEM address.

Referenced by lsb_bitfield_op_p().

addr_space_t address_info::as

The address space.

Referenced by lsb_bitfield_op_p().

bool address_info::autoinc_p

True if this is an RTX_AUTOINC address.

rtx* address_info::base
enum rtx_code address_info::base_outer_code

If BASE is nonnull, this is the code of the rtx that contains it.

rtx* address_info::base_term
rtx* address_info::base_term2

In a {PRE,POST}_MODIFY address, this points to a second copy of BASE_TERM, otherwise it is null.

Referenced by base_plus_disp_to_reg().

rtx* address_info::disp
rtx* address_info::disp_term
rtx* address_info::index
rtx* address_info::index_term
rtx* address_info::inner

A pointer to the inner address, after all address mutations have been stripped from the top-level address. It can be one of the following:

  • A {PRE,POST}_{INC,DEC} of *BASE. SEGMENT, INDEX and DISP are null.
  • A {PRE,POST}_MODIFY of *BASE. In this case either INDEX or DISP points to the step value, depending on whether the step is variable or constant respectively. SEGMENT is null.
  • A plain sum of the form SEGMENT + BASE + INDEX + DISP, with null fields evaluating to 0.
enum machine_mode address_info::mode

The mode of the value being addressed, or VOIDmode if this is a load-address operation with no known address mode.

Referenced by lsb_bitfield_op_p(), and process_alt_operands().

rtx* address_info::outer

A pointer to the top-level address.

Referenced by lsb_bitfield_op_p(), and valid_address_p().

rtx* address_info::segment

Components that make up *INNER. Each one may be null or nonnull. When nonnull, their meanings are as follows:

  • *SEGMENT is the "segment" of memory to which the address refers. This value is entirely target-specific and is only called a "segment" because that's its most typical use. It contains exactly one UNSPEC, pointed to by SEGMENT_TERM. The contents of *SEGMENT do not need reloading.
  • *BASE is a variable expression representing a base address. It contains exactly one REG, SUBREG or MEM, pointed to by BASE_TERM.
  • *INDEX is a variable expression representing an index value. It may be a scaled expression, such as a MULT. It has exactly one REG, SUBREG or MEM, pointed to by INDEX_TERM.
  • *DISP is a constant, possibly mutated. DISP_TERM points to the unmutated RTX_CONST_OBJ.
rtx* address_info::segment_term

The documentation for this struct was generated from the following file: