Features
From LibFirm
- works exclusively on a graph-based SSA representation ("sea of nodes") until assembler code emission. Based on the work of C. Click and M. Trapp
- written in portable C. Known to run on MSVC 6-8 Win32, gcc on Linux, FreeBSD, Cygwin
- includes doxygen documentation
- support for object oriented type hierarchies
- Analyses:
- dominance
- loop tree
- execution frequency
- control dependencies
- inter-procedural call graph
- rapid type
- def-use
- alias analysis
- class hierarchy analysis
- Optimisations:
- dead code elimination (happens implicitly)
- constant folding (happens on the fly)
- local common subexpression elimination (happens on the fly)
- arithmetic identities (happens on the fly)
- unreachable code elimination
- global common subexpression elimination
- code placement
- operator strength reduction
- scalar replacement
- load/store optimisation
- control flow optimisations
- if-conversion
- partial condition evaluation
- reassociation
- tail recursion elimination
- inlining
- procedure cloning
- extensive checkers
- enhanced debugging support: breakpoints on node creation, entity creation, graph dumping, visual studio debug extension
- lowering of intrinsics, double word arithmetics, bitfields
- generic backend features:
- novel SSA based register allocator
- several spilling algorithms
- several SSA copy coalescing algorithms
- algorithms for instruction and basic block scheduling
- ABI handling helpers
- working ia32 backend with support for x87 and SSE2 floating point
- unfinished backends for MIPS, ARM, PPC32
- connections to the Edison Design Group C and Java frontends available.