This repository contains LLVM compiler passes (for now) to convert a C/C++ program to PDM (a synthesizable dataflow intermediate represnetation)
C++ C Makefile
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
programs
.gitignore
DFGWriter.h
LICENSE
Makefile
README.md
dataflow.hpp
dataflowPass.cpp
waves.cpp
waves.hpp
wavesPass.cpp

README.md

spatial-computing

This repository contains the LLVM compiler passes that are used to convert a program written in C/C++ to a synthesizable dataflow intermediate representation, called Program Dependence Mesh (PDM). PDM is our own intermediate representation based on Program Dependence Web (PDW), Program Dependence Graph (PDG), etc. It is a synthesizable representation unlike others.

The target of the PDM is a unified platform that can be used as an ASIC, a CPU, or a CGRA.

We use the concept of waves, taken from WaveScalar Architecture, to solve synchronization problems, especially in nested loops and recursion. This compiler pass outputs the PDM in .dot format which can be easily converted to an image and parsed by SystemC for architectural exploration and analysis of the project.

Using LLVM format is quite helpful here since it provides front end for many languages and convert all of them into a Common Intermediate representation (IR). Having said that, the pass should be able to get PDM from any language which has a LLVM frontend; though, this is not something I have tried.

You can read this blog post giving an overview of the project.