libFirm 1.20
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...

Functions

int be_parse_arg (const char *arg)
 Parse one backend argument.
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

Detailed Description

Code Generation (backend) produces machine-code.


Typedef Documentation

Target Architecture specific node operations.

Definition at line 107 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 82 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.


Function Documentation

const backend_params* be_get_backend_param ( void  )

Returns the backend configuration parameter.

Returns:
libFirm configuration parameters for the selected backend
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)