an approximate compiler
C++ Python C Makefile Other
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
accept
bin
checker
checkerlib Inline checkerlib submodule Sep 18, 2014
clang @ 45fba79
docs
include
pass
rt
test
.gitignore
.gitmodules
.syntastic_cpp_config
CMakeLists.txt
LICENSE
Makefile
README.md
accept.mk
activate.sh
mkdocs.yml
requirements.txt

README.md

ACCEPT

This is the ACCEPT approximate compiler project from the University of Washington.

Documentation

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 and 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 llvm/tools/clang.
  • 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 enerclang script.
  • 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 ./bin/runtests.sh.
  • 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.

License

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.