Giter Club home page Giter Club logo

libfirm's Introduction

libFirm -- A graph based SSA intermediate representation

  1. Introduction

The Firm library implements the Firm intermediate representation (ir). An old description of Firm can be found in [TLB:99].

libFirm contains algorithms for construction of the SSA form directly from the attributed syntax tree. A set of analyses and optimization phases is provided. This version includes a complete backend for the IA32 architecture, as well as some unfinished backends for SPARC, ARM

1.1. Features

  • works exclusively on a graph based SSA representation up to the code emission. Based on the work of C. Click and M. Trapp
  • written in portable C99. Known to run on gcc on Linux, FreeBSD, Cygwin, clang, ICC on windows.
  • 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, ...
  • Optimizations: constant folding, local common subexpression elimination, global common subexpression elimination, code placement, operator strength reduction, scalar replacement, load/store, control flow optimizations, if-conversion, partial condition evaluation, reassociation, tail recursion elimination, inlining, procedure cloning, dead code elimination, ...
  • 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
  • unfinished backends for SPARC, ARM, AMD64
  1. Building and Installation

Prerequisites for the build:

  • python (2.6.x, 2.7.x or >=3.3 are supported)
  • perl
  • an ANSI C99 compiler (gcc, clang, icc are known to work)

Building on unix variants/cygwin:

  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'

  5. Usage


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.

  1. Contact

You can contact us at [email protected]

There's a mailing list here: https://lists.sourceforge.net/lists/listinfo/libfirm-user

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

libfirm's People

Contributors

anse1 avatar chmallon avatar fread avatar grimmick avatar jopperm avatar lu-zero avatar manuelmohr avatar matzeb avatar shack avatar syslord avatar uniqp avatar vpfautz avatar xt3firm avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.