-(* L1 Compiler
+(* L3 Compiler
* Temporaries
* Author: Kaustuv Chaudhuri <kaustuv+@cs.cmu.edu>
* Modified: Alex Vaynberg <alv@andrew.cmu.edu>
type temp
val reset : unit -> unit (* resets temp numbering *)
- val new : unit -> temp (* returns a unique new temp *)
+ val new : string -> int -> temp (* returns a unique new temp *)
val name : temp -> string (* returns the name of a temp *)
+ val size : temp -> int (* returns the size of a temp *)
val compare : temp * temp -> order (* comparison function *)
+ val eq : temp * temp -> bool
end
structure Temp :> TEMP =
struct
- type temp = int
+ type temp = int * string * int
local
val counter = ref 1
in
(* warning: calling reset() may jeopardize uniqueness of temps! *)
fun reset () = ( counter := 1 )
- fun new () = !counter before ( counter := !counter + 1 )
+ fun new str size = (!counter, str, size) before ( counter := !counter + 1 )
end
- fun name t = "+t" ^ Int.toString t
-
- fun compare (t1,t2) = Int.compare (t1,t2)
+ fun name (t,s, sz) = "+t" ^ Int.toString t ^ "[" ^ s ^ "]"
+ fun size (t, s, sz) = sz
+ fun compare ((t1,_,_),(t2,_,_)) = Int.compare (t1,t2)
+
+ fun eq ((t1,_,_), (t2,_,_)) = t1 = t2
end