This is the ACCEPT approximate compiler project from the University of Washington.
The project's documentation includes instructions for building the tool and using it to optimize approximate programs.
What Is All This?
This repository includes lots of stuff:
bin/: Helpful scripts for developing EnerC as well as the front-end scripts
enerclang++, which act as C and C++ compiler executables.
clang/: This git subrepository contains our version of Clang, which is hacked to support type qualifiers. After running
fetch_llvm.sh, there will be a symlink to this directory at
checker/: The Clang plugin that checks the EnerC type system and emits annotated LLVM bitcode.
checkerlib/: This small library supports the writing of modular type checkers for Clang like the one above.
pass/: The LLVM compiler pass that analyzes annotated bitcode and performs instrumentation/transformation.
include/: A header file that EnerC programs should use (via
#include <enerc.h>) to get the necessary type qualifiers and endorsement macros. This directory is automatically added as an include directory when you run the
rt/: A runtime library that is linked into EnerC programs for dynamic analysis.
test/: Some tests for the frontend (type errors and bitcode emission). This uses LLVM's LIT testing infrastructure. To run the tests, just type
accept/: The high-level profile-guided feedback loop used to drive a full compilation. This Python package also scripts the experiments that generate the results used in the (eventual) paper.
docs/: The Markdown-formatted documentation. This can be built with the MkDocs tool.
Building the Docs
The documentation can be translated into a nice HTML representation using MkDocs. Install it and the SmartyPants Markdown extension with:
$ pip install mkdocs $ pip install mdx_smartypants
To view the docs locally, type
mkdocs serve and go to the indicated URL.
If you have the appropriate permissions, type
make deploydocs to upload the HTML files to our servers.
ACCEPT is a project of the Sampa group at UW CSE. It was written by Adrian Sampson, Ben Ransford, Andre Baixo, Thierry Moreau, and Joshua Yip. The project is advised by Luis Ceze and Mark Oskin. The code is made available under the MIT license.