Code Generation | Code Generation (backend) produces machine-code |
Source References | Firm requires a debugging module fulfilling this interface, else no debugging information is passed to the backend |
Analyses | |
 Callgraph | This file contains the representation of the callgraph |
 Control Dependence | |
 Basic Block Execution Frequency | Execution frequencies specify how often a basic block is expected to get executed during execution of a function |
 Node Heights | The height is a measure for the longest datadependencies path from a node to the end of a basic block |
 Dominance Information | The dominator information is stored in three fields of block nodes: |
 Dynamic Reverse Edges | |
 Loops | |
 Memory Disambiguator | A memory disambiguator checks whether 2 given SSA values representing addresses alias |
 Reverse Edges | Out-Edges are the reverse of the edges in a firm graph (also called def-use edges) |
 Value Information | Information about SSA-values (ranges, known bits, ...) |
Abstract Data Structures | This module contains abstract datatypes like lists and hashmaps |
 Arrays | |
 Linked Lists | Doubly linked lists |
 Double Ended Queue | Implementation if a double ended queue datastructure for generic pointers |
 Pointer Map | Pointer->Pointer hashmap |
 Priority Queue | A priority queue |
 Pointer Set | (Hash)sets containing pointers |
 Generic Hashset | Generic Hashset |
 Union-Find | Union-Find datastructure |
 Memory Allocation | |
Algorithms | This module contains generic algorithms like bipartite matching or solvers for linear equation systems |
 Bipartite Matching | Solved bipartite matching problem |
 Gauss Jordan Elimination | Solves a system of linear equations |
 Hash Functions | |
 Hungarian Algorithm | Solves bipartite matching problems (minimize/maximize cost function) |
Identifiers | |
Visualisation | Dumps information so it can be visualised |
 Convenience Interface | |
Procedure Graph | This struct contains all information about a procedure |
 Construction Support | |
 Traversing | Traverse graphs: |
 Nodes | Ir_node - a datatype representing a Firm node |
  Node Opcodes | This module specifies the opcodes possible for ir nodes |
  ASM node | Executes assembler fragments of the target machine |
  Add node | Returns the sum of its operands |
  Alloc node | Allocates a block of memory |
  Anchor node | Utiliy node used to "hold" nodes in a graph that might possibly not be reachable by other means or which should be reachable immediately without searching through the graph |
  And node | Returns the result of a bitwise and operation of its operands |
  Bad node | Bad nodes indicate invalid input, which is values which should never be computed |
  Block node | A basic block |
  Borrow node | Returns the borrow bit from and implied subtractions of its 2 operands |
  Bound node | Performs a bounds-check: if lower <= index < upper then return index, otherwise throw an exception |
  Builtin node | Performs a backend-specific builtin |
  Call node | Calls other code |
  Carry node | Computes the value of the carry-bit that would result when adding the 2 operands |
  Cast node | Perform a high-level type cast |
  Cmp node | Compares its two operands and checks whether a specified relation (like less or equal) is fulfilled |
  Cond node | Conditionally change control flow |
  Confirm node | Specifies constraints for a value |
  Const node | Returns a constant value |
  Conv node | Converts values between modes |
  CopyB node | Copies a block of memory with statically known size/type |
  Deleted node | Internal node which is temporary set to nodes which are already removed from the graph |
  Div node | Returns the quotient of its 2 operands |
  Dummy node | A placeholder value |
  End node | Last node of a graph |
  Eor node | Returns the result of a bitwise exclusive or operation of its operands |
  Free node | Frees a block of memory previously allocated by an Alloc node |
  IJmp node | Jumps to the code in its argument |
  Id node | Returns its operand unchanged |
  InstOf node | Tests whether an object is an instance of a class-type |
  Jmp node | Jumps to the block connected through the out-value |
  Load node | Loads a value from memory (heap or stack) |
  Minus node | Returns the additive inverse of its operand |
  Mod node | Returns the remainder of its operands from an implied division |
  Mul node | Returns the product of its operands |
  Mulh node | Returns the upper word of the product of its operands (the part which would not fit into the result mode of a normal Mul anymore) |
  Mux node | Returns the false or true operand depending on the value of the sel operand |
  NoMem node | Placeholder node for cases where you don't need any memory input |
  Not node | Returns the bitwise complement of a value |
  Or node | Returns the result of a bitwise or operation of its operands |
  Phi node | Choose a value based on control flow |
  Pin node | Pin the value of the node node in the current block |
  Proj node | Returns an entry of a tuple value |
  Raise node | Raises an exception |
  Return node | Returns from the current function |
  Rotl node | Returns its first operand bits rotated left by the amount in the 2nd operand |
  Sel node | Computes the address of a entity of a compound type given the base address of an instance of the compound type |
  Shl node | Returns its first operands bits shifted left by the amount of the 2nd operand |
  Shr node | Returns its first operands bits shifted right by the amount of the 2nd operand |
  Shrs node | Returns its first operands bits shifted right by the amount of the 2nd operand |
  Start node | The first node of a graph |
  Store node | Stores a value into memory (heap or stack) |
  Sub node | Returns the difference of its operands |
  Switch node | Change control flow |
  SymConst node | A symbolic constant |
  Sync node | The Sync operation unifies several partial memory blocks |
  Tuple node | Builds a Tuple from single values |
  Unknown node | Returns an unknown (at compile- and runtime) value |
Input and Output | |
Value Modes | This module specifies the modes that type the firm nodes |
Transformations and Optimisations | |
 Flags | Flags to customize the behavior of libfirm |
 Graph Transformations | |
 Local Optimizations | |
Program | Ir_prog keeps information about a program: |
Correctness Tests | |
 Flags | Enable/Disable automatic correctness tests |
Lowering | Lowering is the process of transforming a highlevel representation (a representation closer to the sourcecode) into a lower-level representation (something closer to the target machine) |
Statistic Events | The statistics system helps to evaluate the effects of compiler passes and transformations |
Target Machine Values | Tarvals only represent values of mode_sort: |
Entities | An entity is the representation of program known objects in Firm |
 Entity Initializers | |
Type System | Datastructure to hold type information |
 Reverse Type Edges | Trouts list all uses of types and entities |
 Type Opcodes | This module specifies the kinds of types available in firm |
 Class | If the type opcode is set to type_class the type represents class types |
 Struct | A struct type represents aggregate types that consist of a list of fields |
 Union | The union type represents union types |
 Method | A method type represents a method, function or procedure type |
 Array | The array type represents rectangular multi dimensional arrays |
 Enumeration | Enumeration types need not necessarily be represented explicitly by Firm types, as the frontend can lower them to integer constants as well |
 Pointer | Pointer types: |
 Primitive | Primitive types are types that represent atomic data values that map directly to modes |
 None | This type is an auxiliary type dedicated to support type analyses |
 Code | |
 Unknown | This type is an auxiliary type dedicated to support type analyses |
 Compound | |
  Class | If the type opcode is set to type_class the type represents class types |
  Struct | A struct type represents aggregate types that consist of a list of fields |
  Union | The union type represents union types |
 Frame | |
 Traversing | |