RSSA

Matthew Fluet fluet@CS.Cornell.EDU
Sat, 22 Dec 2001 12:58:43 -0500 (EST)


> I started to work on translating SSA to RSSA and found a few problems
> with my last proposal.  Here's the latest.  Hopefully, I'll finish the
> SSA -> RSSA translation tomorrow.

It looks alright.

What is the intuitive distinction between Operand.t and Var.t?  There just
seem to be a number of places where you require Var.t that would seem to
work equally well with Operand.t.

> 	     | Offset of {base: Var.t,
> 			  bytes: int}
> 	     | OffsetScale of {base: Var.t,
> 			       index: Var.t,
> 			       scale: int}

If you look at MemLoc.t in x86.fun, you can see where I wrap these two
together into one operand.  I don't know if it is worth doing here.

> 	       Array of {dst: Var.t,
> 			 numBytesNonPointers: int,
> 			 numElts: Var.t,
> 			 numPointers: int}

I'd still like to shoot for some future point where Array's aren' as
privileged.

> 	     | Object of {dst: Var.t,
> 			  numPointers: int,
> 			  numWordsNonPointers: int,
> 			  stores: {offset: int, (* bytes *)
> 				   value: Operand.t} vector}

Why do we need numPointers and numWordsNonPointes here?  I know we
eventually need them for the header word, but why not just put a Word.t
here?

> 	     | LimitCheck of {kind: LimitCheck.t,
> 			      return: Label.t}

I know the LimitCheck.t kind is encoding a lot, but it might be simpler to
make the limit check a Runtim transfer with appropriate argument
encodings.