libFirm
Code Generation

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

Modules

 Just in Time Compilation
 Provides interface to generate code and resolve symbols in memory buffers.
 

Typedefs

typedef void(* after_transform_func) (ir_graph *irg, const char *name)
 

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_SUPPORTS_ANY = ASM_CONSTRAINT_FLAG_SUPPORTS_IMMEDIATE | ASM_CONSTRAINT_FLAG_SUPPORTS_MEMOP | ASM_CONSTRAINT_FLAG_SUPPORTS_REGISTER, ASM_CONSTRAINT_FLAG_NO_SUPPORT = 1u << 3, ASM_CONSTRAINT_FLAG_MODIFIER_WRITE = 1u << 4, ASM_CONSTRAINT_FLAG_MODIFIER_READ = 1u << 5,
  ASM_CONSTRAINT_FLAG_MODIFIER_EARLYCLOBBER = 1u << 6, ASM_CONSTRAINT_FLAG_MODIFIER_COMMUTATIVE = 1u << 7, ASM_CONSTRAINT_FLAG_INVALID = 1u << 8
}
 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

void be_lower_for_target (void)
 Lowers current program for the target architecture. More...
 
void be_set_after_transform_func (after_transform_func func)
 Sets a callback that is called after each transformation step in be_lower_for_target(). More...
 
void be_main (FILE *output, const char *compilation_unit_name)
 Main interface to the frontend. More...
 
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) More...
 
int be_is_valid_clobber (const char *clobber)
 tests whether a string is a valid clobber in an ASM instruction More...
 
void be_dwarf_set_source_language (dwarf_source_language language)
 Sets source language for dwarf debug information. More...
 
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. More...
 

Detailed Description

Code Generation (backend) produces machine-code.

Typedef Documentation

◆ after_transform_func

typedef void(* after_transform_func) (ir_graph *irg, const char *name)

Definition at line 92 of file be.h.

Enumeration Type Documentation

◆ asm_constraint_flags_t

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_SUPPORTS_ANY 

input/output can be in a register, in memory or an immediate

ASM_CONSTRAINT_FLAG_NO_SUPPORT 

the constraint is not supported yet by libFirm (but valid in gcc)

ASM_CONSTRAINT_FLAG_MODIFIER_WRITE 

The input is also written to.

ASM_CONSTRAINT_FLAG_MODIFIER_READ 

the input is 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 30 of file be.h.

◆ dwarf_source_language

Dwarf source language codes.

Enumerator
DW_LANG_C89 
DW_LANG_C 
DW_LANG_Ada83 
DW_LANG_C_plus_plus 
DW_LANG_Cobol74 
DW_LANG_Cobol85 
DW_LANG_Fortran77 
DW_LANG_Fortran90 
DW_LANG_Pascal83 
DW_LANG_Modula2 
DW_LANG_Java 
DW_LANG_C99 
DW_LANG_Ada95 
DW_LANG_Fortran95 
DW_LANG_PLI 
DW_LANG_ObjC 
DW_LANG_ObjC_plus_plus 
DW_LANG_UPC 
DW_LANG_D 
DW_LANG_Python 
DW_LANG_Go 

Definition at line 57 of file be.h.

Function Documentation

◆ be_dwarf_set_compilation_directory()

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.

◆ be_dwarf_set_source_language()

void be_dwarf_set_source_language ( dwarf_source_language  language)

Sets source language for dwarf debug information.

◆ be_is_valid_clobber()

int be_is_valid_clobber ( const char *  clobber)

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

◆ be_lower_for_target()

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 optimizations before be_main.

◆ be_main()

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

Main interface to the frontend.

◆ be_parse_asm_constraints()

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)

◆ be_set_after_transform_func()

void be_set_after_transform_func ( after_transform_func  func)

Sets a callback that is called after each transformation step in be_lower_for_target().

This is typically used to run dump & verify steps to help debugging.