LLVM backend for an abstract machine

This project received 6 bids from talented freelancers with an average bid price of €972 EUR.

Get free quotes for a project like this
Project Budget
€250 - €750 EUR
Total Bids
Project Description

We are in urgent need of an LLVM developer/specialist/guru for a specific short term, full-time commercial project.

The task is to develop an LLVM backend for our in-house typed-assembly language named NAC (N-Address Code). The backend should be able to translate LLVM IR to NAC. NAC is both an abstract machine as well as an intermediate representation for most of our in-house tools. A manual of the NAC programming language is attached in addition to other helpful materials.

The developer will be required to:

1) Develop the backend as part of the LLVM 3.3 version (latest release) or the current mainline (which ever is deemed more appropriate). You will be requested to not disclose the code to any third party or reuse it for your own projects. Further, you will be requested to not use any code repository allowing public access.

2) Translate valid LLVM IR to NAC. Please note that NAC: a) does not support structs and unions, b) arrays are single-dimensional. For this reason you will need to use the LLVM infrastructure for struct/union decomposition and array flattening. This is also the situation for classic hardware targets, e.g. RISC machines. On the other side, NAC supports custom floating-point arithmetic, so both float and double arithmetic should be supported (long doubles is not an immediate priority).

3) We expect that the working NAC backend will be able to process realistic, large-scale ANSI/ISO C codes. We suggest that you use the CHStone test suite [url removed, login to view] for evaluation; all these codes should produce valid NAC. Please use clang for C-to-LLVM translation.

You may choose to use the tblgen tool for backend development. Among the existing LLVM backends in the official release, the PTX backend may be considered somewhat close to NAC since it is an "abstract" machine as well. On the other side, the approach used by the LLVM 3.0 C backend (custom backend not using tblgen) or the up-to-date C++ (Cpp) backend may also be viable.

You will also be required to develop an abstract machine simulator for NAC (in C, C++ or awk, preferably) in order to simulate the behavior of the generated NAC programs.

Looking to make some money?

  • Set your budget and the timeframe
  • Outline your proposal
  • Get paid for your work

Hire Freelancers who also bid on this project

    • Forbes
    • The New York Times
    • Time
    • Wall Street Journal
    • Times Online