README.md 3.11 KB
Newer Older
1
2
libFirm -- A graph based SSA intermediate representation
========================================================
Götz Lindenmaier's avatar
Götz Lindenmaier committed
3

Matthias Braun's avatar
Matthias Braun committed
4
1. Introduction
5
---------------
Götz Lindenmaier's avatar
Götz Lindenmaier committed
6

Matthias Braun's avatar
Matthias Braun committed
7
8
The Firm library implements the Firm intermediate representation (ir). An old
description of Firm can be found in [TLB:99].
Götz Lindenmaier's avatar
Götz Lindenmaier committed
9

Matthias Braun's avatar
Matthias Braun committed
10
libFirm contains algorithms for construction of the SSA form directly from the
yb9976's avatar
yb9976 committed
11
attributed syntax tree. A set of analyses and optimization phases is provided.
Matthias Braun's avatar
Matthias Braun committed
12
This version includes a complete backend for the IA32 architecture, as well as
13
some unfinished backends for SPARC, ARM
Matthias Braun's avatar
Matthias Braun committed
14
15

1.1. Features
16
-------------
Matthias Braun's avatar
Matthias Braun committed
17

Luca Barbato's avatar
Luca Barbato committed
18
- works exclusively on a graph based SSA representation up to the code emission.
Matthias Braun's avatar
Matthias Braun committed
19
  Based on the work of C. Click and M. Trapp
Matthias Braun's avatar
Matthias Braun committed
20
21
- written in portable C99. Known to run on gcc on Linux, FreeBSD, Cygwin, clang,
  ICC on windows.
Matthias Braun's avatar
Matthias Braun committed
22
23
24
25
26
- 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, ...
yb9976's avatar
yb9976 committed
27
- Optimizations: constant folding, local common subexpression elimination,
Matthias Braun's avatar
Matthias Braun committed
28
29
                 global common subexpression elimination, code placement,
                 operator strength reduction, scalar replacement, load/store,
yb9976's avatar
yb9976 committed
30
                 control flow optimizations, if-conversion, partial condition
Matthias Braun's avatar
Matthias Braun committed
31
                 evaluation, reassociation, tail recursion elimination,
Matthias Braun's avatar
Matthias Braun committed
32
                 inlining, procedure cloning, dead code elimination, ...
Matthias Braun's avatar
Matthias Braun committed
33
34
35
36
37
38
39
40
41
42
- local common subexpression eliminiation, constant folding,
  constant propagatation, arithmetic identities happen implicitely
- extensive checkers
- enhanced debugging support: breakpoints on node creation, entity creation,
            graph dumping, visual studio debug extension
- lowering of intrinsics, double word arithmetics, bitfields
- backend with SSA based register allocation including several algorithms for
  spilling and copy coalescing. Instruction and block scheduling, support for
  ABI handling.
- working ia32 backend with support for x87 and SSE2 floating point
Luca Barbato's avatar
Luca Barbato committed
43
- unfinished backends for SPARC, ARM, AMD64
Matthias Braun's avatar
Matthias Braun committed
44
45
46


2. Building and Installation
47
----------------------------
48

49
Prerequisites for the build:
50

51
* python (2.6.x, 2.7.x or >=3.3 are supported)
52
* perl
Matthias Braun's avatar
Matthias Braun committed
53
* an ANSI C99 compiler (gcc, clang, icc are known to work)
Matthias Braun's avatar
Matthias Braun committed
54

55
Building on unix variants/cygwin:
Matthias Braun's avatar
Matthias Braun committed
56

57
58
59
60
61
1. Change into the directory containing libfirms source
2. Create a directory named build 'mkdir build'. Change into this directory
   and execute the configure script. 'cd build ; ../configure'
3. Type 'make' to compile the package
4. You may install libfirm as super user by typing 'make install'
Matthias Braun's avatar
Matthias Braun committed
62
63

3. Usage
64
--------
Matthias Braun's avatar
Matthias Braun committed
65
66
67
68
69

To generate FIRM code from a compiler frontend read the documentation
"libFIRM: A Library for Compiler Optimization Reaserch Implementing
Firm", UKA tech-report 2002-5. About Firm you can learn in UKA
tech-report 1999-14.
70

Matthias Braun's avatar
Matthias Braun committed
71
4. Contact
72
----------
73

Matthias Braun's avatar
Matthias Braun committed
74
You can contact us at
75
	<firm@ipd.info.uni-karlsruhe.de>
Matthias Braun's avatar
Matthias Braun committed
76
77

There's a mailing list here:
78
	<https://lists.sourceforge.net/lists/listinfo/libfirm-user>
Matthias Braun's avatar
Matthias Braun committed
79
80

We have a bugtracker at:
81
	<http://pp.info.uni-karlsruhe.de/~firm/bugs>