[MLton-devel] -profile time and the native codegen

Stephen Weeks MLton@mlton.org
Sat, 18 Jan 2003 17:12:04 -0800


> I'm pretty sure that the only new blocks created by the native-codegen are
> register allocation compensation blocks (which essentially do nothing more
> than shuffle values around).  This didn't used to be the case before
> Arith, Runtime, and CCalls were transfers.

Great.  I figured it wasn't too bad these days.

> > How difficult would it be
> > to add a ProfileLabel to such blocks (and modify the labels in
> > profileInfo)?
> 
> I don't know.  For each new block I create, I can identify a block that
> it's profile info should be equivalent to (i.e., I should be able to
> extract an existing ProfileLabel).  You would know better than I how
> difficult it is to modify an existing ProfileInfo to include a new
> ProfileLabel equivalent to an existing one.

It's trivial.  You just add a new pair to

		     labels: {label: ProfileLabel.t,
			      sourceSeqsIndex: int} vector

> The down side is that we won't know all the new ProfileLabel's until after
> generating all the asm, which delays producing the C stub.

It seems worth doing to me.

The easiest way that I see would be to keep a list ref accumulator of
all the new pairs.  Whenever you need to generate a new block, extract
the ProfileLabel from the "source" block (note that there may be
ProfileLabels in the middle of a block), lookup it's sourceSeqsIndex,
create a new profileLabel, and push a new pair on the list.  After all
the assembly has been generated, convert the accumulator to a vector
and append to the labels.

Since there can be many profile labels, you need to store the
sourceSeqsIndex as a property, for constant-time lookup.

I would think the whole mess could be abstracted into a function like

	val newProfileLabel: ProfileLabel.t -> ProfileLabel.t

that is passed down as part of the transinfo.

Make sense?


-------------------------------------------------------
This SF.NET email is sponsored by: Thawte.com - A 128-bit supercerts will
allow you to extend the highest allowed 128 bit encryption to all your 
clients even if they use browsers that are limited to 40 bit encryption. 
Get a guide here:http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0030en
_______________________________________________
MLton-devel mailing list
MLton-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mlton-devel