README.md 3.13 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
Matthias Braun's avatar
Matthias Braun committed
11
attributed syntax tree. A set of analyses and optimisation 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
18
19
20
21
22
23
24
25
26
27
28
29
30
31

- works exculsively on a graph based SSA represenation up to the 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: constant folding, local common subexpression elimination,
                 global common subexpression elimination, code placement,
                 operator strength reduction, scalar replacement, load/store,
                 control flow optimisations, if-conversion, partial condition
                 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
43
- unfinished backends for SPARC, ARM
Matthias Braun's avatar
Matthias Braun committed
44
45
46
47
48

- connections to the Edison Design Group C and java frontends available.


2. Building and Installation
49
----------------------------
50

51
Prerequisites for the build:
52

53
54
55
* python (>=2.4)
* perl
* an ANSI C89 compiler (gcc, msvc known to work)
Matthias Braun's avatar
Matthias Braun committed
56

57
Building on unix variants/cygwin:
Matthias Braun's avatar
Matthias Braun committed
58

59
60
61
62
63
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
64
65

3. Usage
66
--------
Matthias Braun's avatar
Matthias Braun committed
67
68
69
70
71

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

Matthias Braun's avatar
Matthias Braun committed
73
4. Contact
74
----------
75

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

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

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