Check this out! I just got the standard felix optimizations working.

    :::felix
    type int = "%i32";
    typedef bool = 2;
    fun add : int*int -> int = "%add";
    fun sub : int*int -> int = "%sub";
    fun eq : int*int -> bool = "%eq";
    fun lnot : bool -> bool = "%lnot";
    proc exit : int = "exit";
 
    fun foo (x:int) = {
      if x == 0 do
        return 10;
      done;
 
      return foo (x - 1);
    }
  
    exit $ foo 2;

Which compiles down to this code:

    :::llvm
    declare void @exit(i32)
    
    define i32 @foo(i32 %x) {
    entry:
      %foo.x = alloca i32                             ; <i32*> [#uses=4]
      store i32 %x, i32* %foo.x
      br label %start_21
    
    start_21:                                         ; preds = %_ifdoend_1, 
%entry
      %0 = load i32* %foo.x                           ; <i32> [#uses=1]
      %1 = icmp eq i32 %0, 0                          ; <i1> [#uses=1]
      %2 = icmp eq i1 %1, false                       ; <i1> [#uses=1]
      br i1 %2, label %_ifdoend_1, label %else
    
    _ifdoend_1:                                       ; preds = %start_21
      %3 = load i32* %foo.x                           ; <i32> [#uses=1]
      %4 = sub i32 %3, 1                              ; <i32> [#uses=1]
      store i32 %4, i32* %foo.x
      br label %start_21
    
    else:                                             ; preds = %start_21
      ret i32 10
    }
    
    define void @0() {
    entry:
      %0 = call i32 @foo(i32 2)                       ; <i32> [#uses=1]
      call void @exit(i32 %0)
      ret void
    }
    

------------------------------------------------------------------------------
Come build with us! The BlackBerry&reg; Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9&#45;12, 2009. Register now&#33;
http://p.sf.net/sfu/devconf
_______________________________________________
Felix-language mailing list
Felix-language@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/felix-language

Reply via email to