diff -r b84e794b9e88 -r 0b4a34ebd574 progs/fun/fun_llvm.sc --- a/progs/fun/fun_llvm.sc Thu Dec 11 12:34:03 2025 +0000 +++ b/progs/fun/fun_llvm.sc Mon Dec 15 18:32:26 2025 +0000 @@ -1,3 +1,28 @@ + +env = [i => 0, i => 1] + + +def time_needed[T](code: => T) = { + val start = System.nanoTime() + code + val end = System.nanoTime() + (end - start)/(1.0e9) +} + +time_needed(1, 1 + 2) + +def time_needed[T](f: T => T, arg: T) = { + val start = System.nanoTime() + f(arg) + val end = System.nanoTime() + (end - start)/(1.0e9) +} + + + + + + // A Small LLVM Compiler for a Simple Functional Language // (includes a lexer and parser) // @@ -103,9 +128,9 @@ // val k1 = KVar("foo") // val k2 = KNum(1) -// val k3 = Kop("-", Kop("+", k1, k2), KNum(2)) -// println(draw(k3).mkString) -// println(draw(KCall("bar", List(k1,k2,k3,k2,k1))).mkString) +// val k3 = Kop("-", Kop("+", k1, k2), KNum(2)) // not in SSA-form +// println(draw(k3)) +// println(draw(KCall("bar", List(k1,k2,k3,k2,k1)))) // CPS translation from Exps to KExps using a @@ -143,9 +168,10 @@ } //initial continuation -def CPSi(e: Exp) = CPS(e)(KReturn(_)) +def CPSi(e: Exp) = CPS(e)(x => KReturn(x)) - +//write (1 + a) +println(CPSi(Write(Aop("+", Num(1), Var("a")))).toString) //some testcases: // (1 + 2) * 3