[MLton] modifying flatten.fun to always flatten

Lukasz S Ziarek lziarek@cs.purdue.edu
Tue, 20 Jan 2004 10:18:58 -0500 (EST)


I ran into acouple problems adopting the first approach, so I have
implimented the second approach. It seems to be doing what I need it to do
and the compiler fixpoints. I would like to know if there is a way to
print the ssa tree to a file before and after the flatten pass. Bassically
I just want to double check I am correctly flattening all tupples.


For any who are curious, the change was acomplished via this code:


    fun flattenALL(Statement.T {var, ty, exp}) =
             case exp of
                  Tuple xs => Option.app
	                (var, fn var =>
                              setVarInfo(var, {rep=Rep.new(),
                                               tuple = ref (SOME xs)}))
                | _ =>  Option.app
	                (var, fn var =>
                              setVarInfo(var, {rep= let val r = Rep.new()
                                             in Rep.tuplize r; r
                                             end,
                                        tuple = ref NONE}))
      val _ = List.foreach(functions, fn f =>
                  Function.dfs
	            (f, fn b as Block.T {label, args, statements, transfer} =>
                                let val _ = Vector.foreach(statements, fn s =>
                                                flattenALL(s))
				in fn () => ()
				end))
      val _ = Vector.foreach(globals, flattenALL)


The only slight problem I ran into with this approach was the fact that I
needed to run my flattenALL function on the globals and as such
doitStatement needed to be modified to no longer setVarInfo. As of now I
have not detected any potential problems from PrimApps. It seems like the
flatten all saga is very much closer to completion, still need to add a
boolean to allow for a user defined flattening scheme.

Luke