<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><div>-unfold_nested_procs is what I'm referring to.</div><div><br></div><div>Sorry, I comprehend better now -- "procs" vs. "calls".</div><div><br></div><div><br></div><div>nested call:</div><div><br></div><div>foo(bar())</div><div><br></div><div>unnested call:</div><div> temp = bar() </div><div> foo(temp)</div><div><br></div><div><br></div><div>nested proc:</div><div><br></div><div>void foo()</div><div>{<br>  void bar() { }</div><div>}</div><div><br></div><div>unnested proc:</div><div><br></div><div>void foo()</div><div>{<br>}</div><div><br></div><div>void bar()</div><div>{</div><div>}</div><div><br></div><div>And then everything I said. :)</div><div>I want fewer variables and more constants. :)</div><div>I want one (or fewer) persisted form of the IR and an ability for a backend to easily transform.</div><div>I need to push the M3CG_MultiPass stuff around more I think.</div><div>Then again, the IR doesn't tend to live long and there isn't likely a cause for it to, so variation is ok.</div><div>The only time it lives long is when iterating tightly on a backend.</div><div>It could be useful for bootstrapping perhaps, but I think we have a better option already -- C/C++.</div><div><br></div><div> - Jay<br><br><br></div><div>> Date: Fri, 4 Sep 2015 16:48:42 -0500<br>> From: rodney_bates@lcwb.coop<br>> To: jay.krell@cornell.edu<br>> CC: m3devel@elegosoft.com; m3commit@elegosoft.com<br>> Subject: Re: [M3devel] [M3commit] [modula3/cm3] e7a87c: Comment no nested calls occur in cm3 IR.<br>> <br>> Hmm.  As near as I remember, I assumed the front end was unnesting calls just because it<br>> did it on one example (using m3cc).  Looking at the code, I see command line options<br>> -nested_calls and -no_nested_calls (the default).  However, the only use of this I can<br>> find affects whether an independent check by a M3CG_Check.T instance verifies that<br>> there is no nesting.  So it looks like it's actually unconditional after all.  I'll<br>> leave the comments as they are unless this changes.<br>> <br>> I would expect a back end not to have to cope with them, unless it was generating<br>> final code for a bytecode or stack-like machine that could directly handle them nested.<br>> <br>> On 09/03/2015 05:38 PM, Jay wrote:<br>> > I believe the lack of nested calls is optional. M3front has an option. Different backends have different requirements. The in-process backends could/should set the flag. There should be an M3CG pass or two to transform from either form to the other (or have m3front output one way, and optionally transform to the other).<br>> ><br>> >   - Jay<br>> ><br>> > On Sep 3, 2015, at 12:17 PM, Rodney Bates <rodney.m.bates@acm.org> wrote:<br>> ><br>> >>   Branch: refs/heads/master<br>> >>   Home:   https://github.com/modula3/cm3<br>> >>   Commit: e7a87c74bd1b88d284408b760b22409459640d46<br>> >>       https://github.com/modula3/cm3/commit/e7a87c74bd1b88d284408b760b22409459640d46<br>> >>   Author: Rodney Bates <rodney.m.bates@acm.org><br>> >>   Date:   2015-09-03 (Thu, 03 Sep 2015)<br>> >><br>> >>   Changed paths:<br>> >>     M m3-sys/m3middle/src/M3CG_Ops.i3<br>> >><br>> >>   Log Message:<br>> >>   -----------<br>> >>   Comment no nested calls occur in cm3 IR.<br>> >><br>> >> Comment the fact that nested calls in source code are unnested in<br>> >> cm3 intermediate representation.  This is an essential invariant<br>> >> to both producers and consumers of this IR.<br>> >><br>> >> Changes to be committed:<br>> >><br>> >>     modified:   src/M3CG_Ops.i3<br>> >><br>> >><br>> >>   Commit: 8bcccbb7ccaa0af0879c80014215daa571f95174<br>> >>       https://github.com/modula3/cm3/commit/8bcccbb7ccaa0af0879c80014215daa571f95174<br>> >>   Author: Rodney Bates <rodney.m.bates@acm.org><br>> >>   Date:   2015-09-03 (Thu, 03 Sep 2015)<br>> >><br>> >>   Changed paths:<br>> >>     M m3-sys/llvm3.6.1/src/M3CG_LLVM.m3<br>> >><br>> >>   Log Message:<br>> >>   -----------<br>> >>   Revert an incorrect fix due to misdiagnosis.<br>> >><br>> >> The actual problem here was not a lack of a set_source_file,<br>> >> it was reading binary cm3 IR with the ascii reader.<br>> >><br>> >> Changes to be committed:<br>> >><br>> >>     modified:   M3CG_LLVM.m3<br>> >><br>> >><br>> >>   Commit: 379f750aa7e5fac4948be06d5bd7a748a7d85350<br>> >>       https://github.com/modula3/cm3/commit/379f750aa7e5fac4948be06d5bd7a748a7d85350<br>> >>   Author: Rodney Bates <rodney.m.bates@acm.org><br>> >>   Date:   2015-09-03 (Thu, 03 Sep 2015)<br>> >><br>> >>   Changed paths:<br>> >>     M m3-sys/llvm3.6.1/src/M3CG_LLVM.m3<br>> >><br>> >>   Log Message:<br>> >>   -----------<br>> >>   Big merge of changes to M3CG_LLVM.m3 from package llvm into package llvm3.6.1<br>> >><br>> >> Lots of changes happened to this file in package llvm, while the version<br>> >> in package llvm3.6.1 has been undergoing integration with the greatly<br>> >> altered llvm interfaces in llvm 3.6.1.  Merge these into the  M3CG_LLVM.m3<br>> >> found in package llvm3.6.1.  Also some random manual review and fixes.<br>> >><br>> >> Compiles and runs to completion, with superficially believable output,<br>> >> on one small test case involving separate temporaries in and out of<br>> >> a FINALLY procedure.<br>> >><br>> >> Works with cm3 command, when its executable m3llvm has been shipped.<br>> >><br>> >> The test compile fails to link, not finding alloca.  m3llvm needs to<br>> >> detect calls on alloca and translate internally into llvm alloca<br>> >> instructions, rather than letting them through to be linked in.<br>> >><br>> >> Changes to be committed:<br>> >><br>> >>     modified:   M3CG_LLVM.m3<br>> >><br>> >><br>> >> Compare: https://github.com/modula3/cm3/compare/909637def4c4...379f750aa7e5<br>> >> _______________________________________________<br>> >> M3commit mailing list<br>> >> M3commit@elegosoft.com<br>> >> https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3commit<br>> ><br>> <br>> -- <br>> Rodney Bates<br>> rodney.m.bates@acm.org<br>> _______________________________________________<br>> M3devel mailing list<br>> M3devel@elegosoft.com<br>> https://mail.elegosoft.com/cgi-bin/mailman/listinfo/m3devel<br></div>                                           </div></body>
</html>