# math.R - basic maths functions
library(RLLVMCompile)
t1 <- function(x, y) {
return(x + y)
}
t1.c <- compileFunction(t1, DoubleType, list(x=DoubleType, y=DoubleType), asList=TRUE, optimize=FALSE)
stopifnot(verifyModule(t1.c$mod))
# Type mixing in arithmetic; should coerce to double using
# CreateSIntToFPInst
t2 <- function(x, y) {
a <- x + y
return(a)
}
t2.c <- compileFunction(t2, DoubleType, list(x=Int32Type, y=DoubleType), asList=TRUE, optimize=FALSE)
stopifnot(verifyModule(t2.c$mod))
# Currently Rllvm is doing casts but not storing the results in an
# environment. If repeated casting is done on the same variable, does
# Rllvm optimize this away and create an intermediate variable?
t3 <- function(x) {
a <- x + 3.1
b <- x + 2.1
c <- a + b
return(c)
}
t3.c <- compileFunction(t3, DoubleType, list(x=Int32Type), asList=TRUE, optimize=FALSE)
stopifnot(verifyModule(t3.c$mod))
# Type coersion of return type
t4 <- function(x, y) {
a <- x + y
return(a)
}
t4.c <- compileFunction(t4, Int32Type, list(x=Int32Type, y=DoubleType), asList=TRUE, optimize=FALSE)
# unary operators
t5 <- function(x) {
y <- -x
return(y)
}
t5.c <- compileFunction(t5, DoubleType, list(x=DoubleType), asList=TRUE, optimize=FALSE)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.