Commentary Cmm page (Observations and Areas for Improvement)

Peter Tanski p.tanski at gmail.com
Thu Nov 23 13:18:59 EST 2006


On Nov 22, 2006, at 11:52 AM, Simon Peyton-Jones wrote:

> Peter Tanski wrote:
>> There is no difference: all calls are "foreign" to the caller.
>
> Again I'm confused.  The form
>         x = %%foo( p, q )
> in the C-- spec has *nothing* to do with foreign calls. Not a  
> thing!  Nor, does it necessarily have anything to do with *calls*.   
> It might be implemented by a single inline machine instruction.

I am reading too much into the call syntax (sections 5.4 and 6.8.1)  
and the 'foreign "C--"' terminology in the C-- Spec.  Thanks for  
clarifying :)

>> This is is where the Cmm implementation details come up: would the  
>> caller state *always* save (conversely, the %%op would generate a  
>> call) when the %%op contains code that might change the control  
>> flow?  That would depend on how the control flow might change, as  
>> suggested in section 4.4 of your "C-- Extension..." paper,  
>> "Informing the optimiser."  Does this sound correct?
>
> I think I'm misunderstanding your question.  Let me try again

I was trying to determine the grounds for when a side-effecting  
primop would be inlined and when it would be coded as a separate  
procedure.

> *  The primops in a C-- *expressions* have no side effects, and  
> it's unspecified what order they are done in.
> * A %% op in a C-- *statement* (no more than one in one statement!)  
> can have side effects.  The order in which C-- statements are  
> executed is completely specified by the control flow.

Got it.  Well stated.

Cheers,
Pete


More information about the Cvs-ghc mailing list