[Mesa-dev] [PATCH 4/6] i965/fs: Optimize IF/MOV/ELSE/MOV/ENDIF to SEL when possible.

Matt Turner mattst88 at gmail.com
Tue Aug 6 10:19:55 PDT 2013


On Tue, Aug 6, 2013 at 4:14 AM, Christoph Bumiller
<e0425955 at student.tuwien.ac.at> wrote:
> On 06.08.2013 03:28, Kenneth Graunke wrote:
>> Many GLSL shaders contain code of the form:
>>
>>    x = condition ? foo : bar
>>
>> The compiler emits an ir_if tree for this, since each subexpression
>> might be a complex tree that could have side-effects and short-circuit
>> logic operations.
>>
>> However, the common case is to simply pick one of two constants or
>> variable's values---which is exactly what SEL is for.  Replacing IF/ELSE
>> with SEL also simplifies the control flow graph, making optimization
>> passes which work on basic blocks more effective.
>>
>
> Don't you think something like that should be implemented in common code
> so that all drivers can profit ?

We would love that. As part of an work in progress, I'm adding
conditional-select to the GLSL IR. We planned a few months ago to do
this as a step toward SSA at the IR level, but have only laid a little
bit of groundwork in that direction (Ian's vector insert/extract
series).

Looks like your backend already does SSA. Shouldn't that be
implemented in common code? :)

> It would be really nice to have more, useful device-independent
> optimizations or simplifications like this already done instead of
> requiring each driver to re-implement them (or use llvm).

Yes, it definitely would.


More information about the mesa-dev mailing list