Abstract Data Structures | This module contains abstract datatypes like lists and hashmaps |
Arrays | |
Double Ended Queue | Implementation if a double ended queue data structure for generic pointers |
Generic Hashset | Generic Hashset |
Linked Lists | Doubly linked lists |
Memory Allocation | |
Pointer Map | Pointer->Pointer hashmap |
Pointer Set | (Hash)sets containing pointers |
Priority Queue | A priority queue |
Union-Find | Union-Find data structure |
pointer lists (deprecated) | |
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) |
Analyses | |
Basic Block Execution Frequency | Execution frequencies specify how often a basic block is expected to get executed during execution of a function |
Callgraph | This file contains the representation of the callgraph |
Control Dependence | |
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 |
Node Heights | The height is a measure for the longest data dependency path from a node to the end of a basic block |
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, ...) |
Code Generation | Code Generation (backend) produces machine-code |
Correctness Tests | |
Entities | An entity is the representation of program known objects in Firm |
Entity Initializers | |
Identifiers | |
Input and Output | |
Library Initialization | The functions in this section deal with initialization and deinitalization of the libFirm library |
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) |
Printing and Visualisation | This module contains functions for printing and visualizing libfirm data structures like programs, graphs and nodes for humans |
String Formatting | These functions allow printing of formated strings with support for printing firm objects in a human readable form |
Visualisation | Dumps information so it can be visualised |
Convenience Interface | |
Procedure Graph | This struct contains all information about a procedure |
Construction Support | |
Nodes | Ir_node - a datatype representing a Firm node |
ASM node | Executes assembler fragments of the target machine |
Add node | Returns the sum of its operands |
Address node | Symbolic constant that represents the address of an entity (variable or method) |
Align node | A symbolic constant that represents the alignment of a type |
Alloc node | Allocates a block of memory on the stack |
Anchor node | Utility 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 |
Bitcast node | Converts a value between modes with different arithmetics but same number of bits by reinterpreting the bits in the new mode |
Block node | A basic block |
Builtin node | Performs a backend-specific builtin |
Call node | Calls other code |
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 |
Jmp node | Jumps to the block connected through the out-value |
Load node | Loads a value from memory (heap or stack) |
Member node | Computes the address of a compound type member given the base address of an instance of the compound type |
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 |
Node Opcodes | This module specifies the opcodes for ir nodes |
Not node | Returns the bitwise complement of a value |
Offset node | Symbolic constant that represents the offset of an entity in its owner type |
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 |
Sel node | Computes the address of an array element from the array base pointer and an index |
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 |
Size node | A symbolic constant that represents the size of a type |
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 |
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 |
Traversing | Traverse graphs: |
Program | Ir_prog keeps information about a program: |
Source References | Firm requires a debugging module fulfilling this interface, else no debugging information is passed to the backend |
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: |
Transformations and Optimizations | |
Flags | Flags to customize the behavior of libfirm |
Graph Transformations | |
Local Optimizations | |
Type System | Datastructure to hold type information |
Array | The array type represents linear arrangement of objects of the same type |
Class | If the type opcode is set to type_class the type represents class types |
Code | |
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 | |
Method | A method type represents a method, function or procedure type |
Pointer | Pointer types: |
Primitive | Primitive types are types that represent atomic data values that map directly to modes |
Segment | Segment types represent segments in the object file |
Struct | A struct type represents aggregate types that consist of a list of fields |
Traversing | |
Union | The union type represents union types |
Unknown | This type is an auxiliary type dedicated to support type analyses |
Value Modes | This module specifies the modes that type the firm nodes |