[Mesa-dev] [PATCH 07/11] glsl: Lower unconditional return statements.
Kenneth Graunke
kenneth at whitecape.org
Thu Jul 7 10:29:45 PDT 2011
On 07/07/2011 09:41 AM, Paul Berry wrote:
> On 7 July 2011 01:13, Kenneth Graunke <kenneth at whitecape.org> wrote:
>>> visit_block(&ir->body);
>>>
>>> + /* If the body ended in an unconditional return of non-void,
>>> + * then we don't need to lower it because an unconditional
>>> + * return of non-void at the end of a function is what returns
>>> + * get lowered to.
>>
>> This comment doesn't make sense to me. Are you trying to say that
>> unconditional all non-void returns were already lowered to variable
>> assignments and void returns? Or...?
>
> Hmm, let me try again in more words:
>
> When we are lowering returns in a function whose return type is void,
> the goal is to rewrite the function so that it doesn't contain any
> return instructions at all. However, when we are lowering returns in
> a function whose return type is non-void, the goal is to rewrite the
> function so that it contains a single return instruction, in canonical
> position. (A return instruction is said to be in "canonical position"
> if it is the last instruction in the function, and it's not inside any
> ifs or loops).
>
> If, after calling visit_block(&ir->body), the last instruction in the
> function is a return instruction, and the return type of the function
> is non-void, then we don't need to do anything, because the return
> instruction is already in canonical position.
>
> Let me know if that makes more sense, and I'll rewrite the comment accordingly.
Ah, of course. It's the one canonical return. That makes sense.
--Kenneth
More information about the mesa-dev
mailing list