libFirm
Code Generation

Code Generation (backend) produces machine-code. More...

Data Structures

struct  backend_params
 This structure contains parameters that should be propagated to the libFirm parameter set. More...

Typedefs

typedef ir_node *( create_trampoline_fkt )(ir_node *block, ir_node *mem, ir_node *trampoline, ir_node *env, ir_node *callee)
 Build a Trampoline for the closure.
typedef struct arch_irn_ops_t arch_irn_ops_t
 Target Architecture specific node operations.

Enumerations

enum  asm_constraint_flags_t {
  ASM_CONSTRAINT_FLAG_NONE = 0, ASM_CONSTRAINT_FLAG_SUPPORTS_REGISTER = 1u << 0, ASM_CONSTRAINT_FLAG_SUPPORTS_MEMOP = 1u << 1, ASM_CONSTRAINT_FLAG_SUPPORTS_IMMEDIATE = 1u << 2,
  ASM_CONSTRAINT_FLAG_NO_SUPPORT = 1u << 3, ASM_CONSTRAINT_FLAG_MODIFIER_WRITE = 1u << 4, ASM_CONSTRAINT_FLAG_MODIFIER_NO_WRITE = 1u << 5, ASM_CONSTRAINT_FLAG_MODIFIER_READ = 1u << 6,
  ASM_CONSTRAINT_FLAG_MODIFIER_NO_READ = 1u << 7, ASM_CONSTRAINT_FLAG_MODIFIER_EARLYCLOBBER = 1u << 8, ASM_CONSTRAINT_FLAG_MODIFIER_COMMUTATIVE = 1u << 9, ASM_CONSTRAINT_FLAG_INVALID = 1u << 10
}
 flags categorizing assembler constraint specifications More...
enum  dwarf_source_language {
  DW_LANG_C89 = 0x0001, DW_LANG_C = 0x0002, DW_LANG_Ada83 = 0x0003, DW_LANG_C_plus_plus = 0x0004,
  DW_LANG_Cobol74 = 0x0005, DW_LANG_Cobol85 = 0x0006, DW_LANG_Fortran77 = 0x0007, DW_LANG_Fortran90 = 0x0008,
  DW_LANG_Pascal83 = 0x0009, DW_LANG_Modula2 = 0x000a, DW_LANG_Java = 0x000b, DW_LANG_C99 = 0x000c,
  DW_LANG_Ada95 = 0x000d, DW_LANG_Fortran95 = 0x000e, DW_LANG_PLI = 0x000f, DW_LANG_ObjC = 0x0010,
  DW_LANG_ObjC_plus_plus = 0x0011, DW_LANG_UPC = 0x0012, DW_LANG_D = 0x0013, DW_LANG_Python = 0x0014,
  DW_LANG_Go = 0x0016
}
 Dwarf source language codes. More...

Functions

int be_parse_arg (const char *arg)
 Parse one backend argument.
int be_is_big_endian (void)
 Returns 1 if the backend uses big-endian byte ordering and 0 for little-endian.
unsigned be_get_machine_size (void)
 Returns size of machine words.
ir_modebe_get_mode_float_arithmetic (void)
 Returns supported float arithmetic mode or NULL if mode_D and mode_F are supported natively.
ir_typebe_get_type_long_long (void)
 Returns type used for long long or NULL if none available.
ir_typebe_get_type_unsigned_long_long (void)
 Returns type used for unsigned long long or NULL if none available.
ir_typebe_get_type_long_double (void)
 Returns type used for long double or NULL if none available.
const backend_paramsbe_get_backend_param (void)
 Returns the backend configuration parameter.
void be_lower_for_target (void)
 Lowers current program for the target architecture.
ir_prog_pass_tlower_for_target_pass (const char *name)
 Creates an ir_prog pass which performs lowerings necessary for the target architecture.
void be_main (FILE *output, const char *compilation_unit_name)
 Main interface to the frontend.
asm_constraint_flags_t be_parse_asm_constraints (const char *constraints)
 parse assembler constraint strings and returns flags (so the frontend knows which operands are inputs/outputs and whether memory is required)
int be_is_valid_clobber (const char *clobber)
 tests whether a string is a valid clobber in an ASM instruction
void be_dwarf_set_source_language (dwarf_source_language language)
 Sets source language for dwarf debug information.
void be_dwarf_set_compilation_directory (const char *directory)
 Sets working directory of the compiler (or directory where the compiler searched for sources) for dwarf debug information.

Detailed Description

Code Generation (backend) produces machine-code.

Typedef Documentation

Target Architecture specific node operations.

Definition at line 102 of file firm_types.h.

typedef ir_node*( create_trampoline_fkt)(ir_node *block, ir_node *mem, ir_node *trampoline, ir_node *env, ir_node *callee)

Build a Trampoline for the closure.

Parameters
blockthe block where to build the trampoline
memmemory
trampolineaddress of a trampoline region
envaddress of the environment
calleeaddress of the function to call
Returns
modified memory

Definition at line 107 of file be.h.

Enumeration Type Documentation

flags categorizing assembler constraint specifications

Enumerator:
ASM_CONSTRAINT_FLAG_NONE 

no constraints

ASM_CONSTRAINT_FLAG_SUPPORTS_REGISTER 

input/output can be in a register

ASM_CONSTRAINT_FLAG_SUPPORTS_MEMOP 

input/output can be read/written to/from a memory address

ASM_CONSTRAINT_FLAG_SUPPORTS_IMMEDIATE 

input can be encoded as an immediate number

ASM_CONSTRAINT_FLAG_NO_SUPPORT 

the constraint is not supported yet by libFirm

ASM_CONSTRAINT_FLAG_MODIFIER_WRITE 

The input is also written to.

ASM_CONSTRAINT_FLAG_MODIFIER_NO_WRITE 

the input is not written to

ASM_CONSTRAINT_FLAG_MODIFIER_READ 

the input is read

ASM_CONSTRAINT_FLAG_MODIFIER_NO_READ 

the input is not read

ASM_CONSTRAINT_FLAG_MODIFIER_EARLYCLOBBER 

the value is modified before all inputs to the asm block are handled.

ASM_CONSTRAINT_FLAG_MODIFIER_COMMUTATIVE 

This operand and the following operand are commutative.

ASM_CONSTRAINT_FLAG_INVALID 

invalid constraint (due to parse error)

Definition at line 44 of file be.h.

Dwarf source language codes.

Definition at line 73 of file be.h.

Function Documentation

void be_dwarf_set_compilation_directory ( const char *  directory)

Sets working directory of the compiler (or directory where the compiler searched for sources) for dwarf debug information.

void be_dwarf_set_source_language ( dwarf_source_language  language)

Sets source language for dwarf debug information.

const backend_params* be_get_backend_param ( void  )

Returns the backend configuration parameter.

Returns
libFirm configuration parameters for the selected backend
unsigned be_get_machine_size ( void  )

Returns size of machine words.

This is usually the size of the general purpose integer registers.

ir_mode* be_get_mode_float_arithmetic ( void  )

Returns supported float arithmetic mode or NULL if mode_D and mode_F are supported natively.

Some backends like x87 can only do arithmetic in a specific float mode (load/store are still done in the "normal" float/double modes).

ir_type* be_get_type_long_double ( void  )

Returns type used for long double or NULL if none available.

ir_type* be_get_type_long_long ( void  )

Returns type used for long long or NULL if none available.

ir_type* be_get_type_unsigned_long_long ( void  )

Returns type used for unsigned long long or NULL if none available.

int be_is_big_endian ( void  )

Returns 1 if the backend uses big-endian byte ordering and 0 for little-endian.

int be_is_valid_clobber ( const char *  clobber)

tests whether a string is a valid clobber in an ASM instruction

void be_lower_for_target ( void  )

Lowers current program for the target architecture.

This must be run once before using be_main. The idea here is that the backend can perform lowerings like doubleword-lowering, ABI adjustments or implementation of boolean values, if-conversion, with target specific settings. The resulting graph is still a "normal" firm-graph on which you can and should perform further architecture-neutral optimisations before be_main.

void be_main ( FILE *  output,
const char *  compilation_unit_name 
)

Main interface to the frontend.

int be_parse_arg ( const char *  arg)

Parse one backend argument.

asm_constraint_flags_t be_parse_asm_constraints ( const char *  constraints)

parse assembler constraint strings and returns flags (so the frontend knows which operands are inputs/outputs and whether memory is required)

ir_prog_pass_t* lower_for_target_pass ( const char *  name)

Creates an ir_prog pass which performs lowerings necessary for the target architecture.

(Calling backend_params->lower_for_target)