

===================== parser output ===============================

let rec two  x y = 
   let rec offset  z = (z + y)
   in (offset x)
in (print_int (two 7 9))

===================== typing output ===============================

let rec two  : (int, int) -> int x : int y : int = 
   let rec offset  : (int) -> int z : int = (z + y)
   in (offset x)
in (print_int (two 7 9))

===================== knormal output ===============================

let two  : (int, int) -> intx : int y : int = 
   let offset  : (int) -> intz : int = (z + y)
   in (offset x)
in 
   let Ti3  : int = let Ti1  : int = 7 in
   
   let Ti2  : int = 9 in
   (two Ti1 Ti2) in
   EXTERN(print_int Ti3)

===================== alpha output ===============================

let two_4  : (int, int) -> intx_5 : int y_6 : int = 
   let offset_10  : (int) -> intz_11 : int = (z_11 + y_6)
   in (offset_10 x_5)
in 
   let Ti3_7  : int = let Ti1_8  : int = 7 in
   
   let Ti2_9  : int = 9 in
   (two_4 Ti1_8 Ti2_9) in
   EXTERN(print_int Ti3_7)

===================== simplify output ===============================

let two_4  : (int, int) -> intx_5 : int y_6 : int = 
   let offset_10  : (int) -> intz_11 : int = (z_11 + y_6)
   in (offset_10 x_5)
in 
   let Ti1_8  : int = 7 in
   
   let Ti2_9  : int = 9 in
   
   let Ti3_7  : int = (two_4 Ti1_8 Ti2_9) in
   EXTERN(print_int Ti3_7)

===================== closure output ===============================
let LABEL(offset_10) [y_6 : int] z_11 : int = (z_11 + y_6)
in

let LABEL(two_4) [] x_5 : int, y_6 : int = 
   let closure offset_10  : (int) -> int = ( LABEL(offset_10); [y_6] )
   in APPLY_CLOSURE(offset_10 x_5)
in

let Ti1_8  : int = 7 in

let Ti2_9  : int = 9 in

let Ti3_7  : int = APPLY_DIRECT(LABEL(two_4) Ti1_8 Ti2_9) in
APPLY_DIRECT(LABEL(min_caml_print_int) Ti3_7)

===================== virtual  output ===============================
==== Data Segment =======
==== Function Declarations =======

LABEL(offset_10) (arg=(z_11), farg=())

LET(y_6, ld(%o5, 4), 
   ANSWER(add(z_11, y_6)))

LABEL(two_4) (arg=(x_5, y_6), farg=())

LET(offset_10, mov(%i1), 
   LET(%i1, add(%i1, 8), 
      LET(l_13, set(LABEL(offset_10)), 
         LET(Tu14, st(l_13, offset_10, 0), 
            LET(Tu12, st(y_6, offset_10, 4), 
               ANSWER(CallClosure(offset_10, args=(x_5), farg=())))))))
==== Expression =======

LET(Ti1_8, set(7), 
   LET(Ti2_9, set(9), 
      LET(Ti3_7, CallDirect(LABEL(two_4), args=(Ti1_8, Ti2_9), farg=()), 
         ANSWER(CallDirect(LABEL(min_caml_print_int), args=(Ti3_7), farg=())))))


=====================  simm13  output ===============================
==== Data Segment =======
==== Function Declarations =======

LABEL(offset_10) (arg=(z_11), farg=())

LET(y_6, ld(%o5, 4), 
   ANSWER(add(z_11, y_6)))

LABEL(two_4) (arg=(x_5, y_6), farg=())

LET(offset_10, mov(%i1), 
   LET(%i1, add(%i1, 8), 
      LET(l_13, set(LABEL(offset_10)), 
         LET(Tu14, st(l_13, offset_10, 0), 
            LET(Tu12, st(y_6, offset_10, 4), 
               ANSWER(CallClosure(offset_10, args=(x_5), farg=())))))))
==== Expression =======

LET(Ti1_8, set(7), 
   LET(Ti2_9, set(9), 
      LET(Ti3_7, CallDirect(LABEL(two_4), args=(Ti1_8, Ti2_9), farg=()), 
         ANSWER(CallDirect(LABEL(min_caml_print_int), args=(Ti3_7), farg=())))))


===================== RegAlloc output ===============================
==== Data Segment =======
==== Function Declarations =======

LABEL(offset_10) (arg=(%i2), farg=())

LET(%i3, ld(%o5, 4), 
   ANSWER(add(%i2, %i3)))

LABEL(two_4) (arg=(%i2, %i3), farg=())

LET(%o5, mov(%i1), 
   LET(%i1, add(%i1, 8), 
      LET(%i4, set(LABEL(offset_10)), 
         LET(%g0, st(%i4, %o5, 0), 
            LET(%g0, st(%i3, %o5, 4), 
               ANSWER(CallClosure(%o5, args=(%i2), farg=())))))))
==== Expression =======

LET(%i2, set(7), 
   LET(%i3, set(9), 
      LET(%i2, CallDirect(LABEL(two_4), args=(%i2, %i3), farg=()), 
         ANSWER(CallDirect(LABEL(min_caml_print_int), args=(%i2), farg=())))))


===================== Emit output ===============================
.section	".rodata"
.align	8
.section	".text"
offset_10:
	ld	[%o5 + 4], %i3
	add	%i2, %i3, %i2
	retl
	nop
two_4:
	mov	%i1, %o5
	add	%i1, 8, %i1
	set	offset_10, %i4
	st	%i4, [%o5 + 0]
	st	%i3, [%o5 + 4]
	ld	[%o5 + 0], %o4
	jmp	%o4
	nop
.global	min_caml_start
min_caml_start:
	save	%sp, -112, %sp
	set	7, %i2
	set	9, %i3
	st	%o7, [%i0 + 4]
	call	two_4
	add	%i0, 8, %i0	! delay slot
	sub	%i0, 8, %i0
	ld	[%i0 + 4], %o7
	st	%o7, [%i0 + 4]
	call	min_caml_print_int
	add	%i0, 8, %i0	! delay slot
	sub	%i0, 8, %i0
	ld	[%i0 + 4], %o7
	ret
	restore
