LLVM-based compiler for R code
A prototype for a compiler for R code that uses LLVM to generate machine code.
RLLVMCompile is an experimental R compiler that uses LLVM through RLLVM, currently being developed by Duncan Temple Lang.
We might compile the same code in different ways for different contexts. As a result, a single one-size-fits-all approach to compiling R is probably too restrictive. Furthermore, we want to be able to explore new approaches easily w/o having to recompile all of R or learn a new compilation framework tha is specific to R.
One of the strengths of LLVM is that it embeddable and extensible and provides a user-level API. A compiler for R should also do the same. We have learned that a centralized code source that requires a core group to make all "official" and "distributed" changes limits innovation (but does improve stability).
Vince Buffalo and I started this package several years ago (late 2010) after the development of the Rllvm package. Unfortunately, I had other committments (the book XML and Web Technologies with R, and another "Data Science in R: A Case Studies Approach to Computational Reasoning and Problem Solving"). I am now getting back to this project and hope to push it forward quite a bit by early 2015.
Functions in RLLVMCompile
|getCompilerHandlers||Retrieve list of compiler handler functions|
|insertReturn||Insert explicit calls to return|
|rewriteRNGCalls||Rewrite R language objects for Random Number Generation and assignments of an if statement|
|RTypes||Types describing R data structures|
|ANYSXP||Enumerated constants for R data types|
|getSymbolInfoMetadata||Query the meta-data about native routines in an LLVM module|
|createProxy||Create an R function to call a native routine|
|compileGPUKernel||Compile an R function as a GPU kernel|
|compileFunction||Compile an R function to native machine code via LLVM|
|getBuiltInRoutines||Specify list of Available Compiled Routines|
|traverseExpressions||General mechanism to process an R language object recursively and process each call object|
|vectorizeFunction||Create a vectorized version of a scalar function|
|License||BSD_3_clause + file LICENSE|
|Comment||Need to depend on Rllvm as variables such as Int32Type are defined at load time, not in the code for the package directly.|
|xCollate||createLoop.R expressions.R guessType.R vectorize.R while.R compile.R compiler.R|
Include our badge in your README