PREV UP NEXT Using and Porting GNU CC

Chapter 14: RTL Representation

Most of the work of the compiler is done on an intermediate representation called register transfer language. In this language, the instructions to be output are described, pretty much one by one, in an algebraic form that describes what the instruction does.

RTL is inspired by Lisp lists. It has both an internal form, made up of structures that point at other structures, and a textual form that is used in the machine description and in printed debugging dumps. The textual form uses nested parentheses to indicate the pointers in the internal form.

  • RTL Objects Expressions vs vectors vs strings vs integers.
  • Accessors Macros to access expression operands or vector elts.
  • Flags Other flags in an RTL expression.
  • Machine Modes Describing the size and format of a datum.
  • Constants Expressions with constant values.
  • Regs and Memory Expressions representing register contents or memory.
  • Arithmetic Expressions representing arithmetic on other expressions.
  • Comparisons Expressions representing comparison of expressions.
  • Bit Fields Expressions representing bitfields in memory or reg.
  • Conversions Extending, truncating, floating or fixing.
  • RTL Declarations Declaring volatility, constancy, etc.
  • Side Effects Expressions for storing in registers, etc.
  • Incdec Embedded side-effects for autoincrement addressing.
  • Assembler Representing asm with operands.
  • Insns Expression types for entire insns.
  • Calls RTL representation of function call insns.
  • Sharing Some expressions are unique; others *must* be copied.
  • Reading RTL Reading textual RTL from a file.