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 | |