simple support for __attribute__(alias("symbol"))
[libfirm] / README.md
1 libFirm -- A graph based SSA intermediate representation
2 ========================================================
3
4 1. Introduction
5 ---------------
6
7 The Firm library implements the Firm intermediate representation (ir). An old
8 description of Firm can be found in [TLB:99].
9
10 libFirm contains algorithms for construction of the SSA form directly from the
11 attributed syntax tree. A set of analyses and optimisation phases is provided.
12 This version includes a complete backend for the IA32 architecture, as well as
13 some unfinished backends for SPARC, ARM
14
15 1.1. Features
16 -------------
17
18 - works exculsively on a graph based SSA represenation up to the code emission.
19   Based on the work of C. Click and M. Trapp
20 - written in portable C. Known to run on msvc 6-8 Win32, gcc on Linux, FreeBSD,
21   Cygwin
22 - includes doxygen documentation
23 - support for object oriented type hierarchies
24 - Analyses: dominance, loop tree, execution frequency, control dependencies,
25             inter procedural call graph, rapid type, def-use, alias analysis,
26             class hierarchy analysis, ...
27 - Optimisations: constant folding, local common subexpression elimination,
28                  global common subexpression elimination, code placement,
29                  operator strength reduction, scalar replacement, load/store,
30                  control flow optimisations, if-conversion, partial condition
31                  evaluation, reassociation, tail recursion elimination,
32                  inlining, procedure cloning, dead code elimination, ...
33 - local common subexpression eliminiation, constant folding,
34   constant propagatation, arithmetic identities happen implicitely
35 - extensive checkers
36 - enhanced debugging support: breakpoints on node creation, entity creation,
37             graph dumping, visual studio debug extension
38 - lowering of intrinsics, double word arithmetics, bitfields
39 - backend with SSA based register allocation including several algorithms for
40   spilling and copy coalescing. Instruction and block scheduling, support for
41   ABI handling.
42 - working ia32 backend with support for x87 and SSE2 floating point
43 - unfinished backends for SPARC, ARM
44
45 - connections to the Edison Design Group C and java frontends available.
46
47
48 2. Building and Installation
49 ----------------------------
50
51 Prerequisites for the build:
52
53 * python (>=2.4)
54 * perl
55 * an ANSI C89 compiler (gcc, msvc known to work)
56
57 Building on unix variants/cygwin:
58
59 1. Change into the directory containing libfirms source
60 2. Create a directory named build 'mkdir build'. Change into this directory
61    and execute the configure script. 'cd build ; ../configure'
62 3. Type 'make' to compile the package
63 4. You may install libfirm as super user by typing 'make install'
64
65 3. Usage
66 --------
67
68 To generate FIRM code from a compiler frontend read the documentation
69 "libFIRM: A Library for Compiler Optimization Reaserch Implementing
70 Firm", UKA tech-report 2002-5. About Firm you can learn in UKA
71 tech-report 1999-14.
72
73 4. Contact
74 ----------
75
76 You can contact us at
77         <firm@ipd.info.uni-karlsruhe.de>
78
79 There's a mailing list here:
80         <https://lists.sourceforge.net/lists/listinfo/libfirm-user>
81
82 We have a bugtracker at:
83         <http://pp.info.uni-karlsruhe.de/~firm/bugs>