[M3devel] deeper meaning of in_memory?

Jay K jay.krell at cornell.edu
Sat Sep 29 00:47:27 CEST 2012


I don't know. It makes me nervous.I though we effectively turn off TBAA in m3cc, and I can imagine what our trees looke like in C, and it seems my C code might look about the same. As well, you know..it seems like a bug in gcc, at which point, your system of thinking about things breaks down and we have to understand the actual buggy behavior instead of the expected reasonable behavior. For now I'm not passing any optimizer flags to the C compiler. I don't remember if I tried that yet.  I have to keep in mind priorities:     support uplevel locals in sub-blocks -- so m3-tk compiles      reorder stuff so module data is initialized, or at least fully declared, up front -- so the code is valid C++ -- I currently run afoul of a corner case and generate valid C that isn't valid C++    maybe only output helper functions that are used -- i.e. work on gcc -Wall -- this is easy with the multipass support    move all imports/declarations up front, instead of at arbitrary places -- just slight cleanliess -- easy with the multipass support   only declare frame types when needed -- easy now too, slightly cleaner code   Work on getting structs/records declared strongly typed -- should be easy.Work on making loads/stores be field access -- slightly challenging to do this efficiently, since we have to map offset/sizes to fields. Somewhere along the line also, I have to stop producing all these temporary strings and produce a proper typed hiearchical representation -- like an "expression", a "plus node" with two sub expressions. So for example, I don't cast same type to same type. It will actually likely resemble the gcc trees!  Sprinkling volatile on every variable declaration (but not access) is not a big deal right now.And volatile might be a good idea -- separate mail on this.   - Jay
 


 Subject: Re: [M3devel] deeper meaning of in_memory?
From: hosking at cs.purdue.edu
Date: Fri, 28 Sep 2012 18:27:30 -0400
CC: m3devel at elegosoft.com
To: jay.krell at cornell.edu

Good question.  But if you are good about making the structs anonymous and taking their address then TBAA in C should not give you problems.


On Sep 28, 2012, at 3:31 PM, Jay K <jay.krell at cornell.edu> wrote:> structs volatile

Mainly paranoia.But I do wonder if the breakage I saw in gcc's "sra" optimization pass (structure replaced by aggregate) by feeding it trees can be reproduced from C. I should look into that...

 - Jay

Subject: Re: [M3devel] deeper meaning of in_memory?
From: hosking at cs.purdue.edu
Date: Fri, 28 Sep 2012 10:11:49 -0400
CC: m3devel at elegosoft.com
To: jay.krell at cornell.edu

in_memory does not mean volatile.  It is simply a sign that its address is needed.So, yes, taking its address is good enough.An example of a local in memory is something passed by VAR.
So, NOT VOLATILE.
Why do structs need to be C volatile?

On Sep 27, 2012, at 10:57 PM, Jay K <jay.krell at cornell.edu> wrote:In M3CG, what is the deeper meaning of in_memory?I know it means -- "put the thing in memory".But why and exactly what?
Presumably it can also be in a register, just that the in-memory value must be kept up to date.Like, stores should be volatile, but reads don't have to be?Does it mean the value will be used in an exception/finally handler?Maybe reads do need to be volatile? Maybe it is accessed by another thread w/o a lock?

If I take the address of something, is that good enough?

I should just look where m3front uses it, I know.For now I'll probably take it to mean "volatile".I already mark all structs as volatile. But I don't make everything volatile (like how m3cc long did).

Thanks, - Jay
 		 	   		  
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://m3lists.elegosoft.com/pipermail/m3devel/attachments/20120928/2d7d3246/attachment-0002.html>


More information about the M3devel mailing list