[Mesa-dev] [PATCH 3/3] glsl: Optimize division by two with a right shift.
Erik Faye-Lund
kusmabite at gmail.com
Mon Feb 24 15:45:17 PST 2014
On Tue, Feb 25, 2014 at 12:41 AM, Ian Romanick <idr at freedesktop.org> wrote:
> On 02/24/2014 03:36 PM, Roland Scheidegger wrote:
>>
>> Am 25.02.2014 00:00, schrieb Matt Turner:
>>>
>>> ---
>>> src/glsl/opt_algebraic.cpp | 3 +++
>>> 1 file changed, 3 insertions(+)
>>>
>>> diff --git a/src/glsl/opt_algebraic.cpp b/src/glsl/opt_algebraic.cpp
>>> index 778638c..50342ac 100644
>>> --- a/src/glsl/opt_algebraic.cpp
>>> +++ b/src/glsl/opt_algebraic.cpp
>>> @@ -421,6 +421,9 @@ ir_algebraic_visitor::handle_expression(ir_expression
>>> *ir)
>>> }
>>> if (is_vec_one(op_const[1]))
>>> return ir->operands[0];
>>> + if (is_vec_two(op_const[1]) && ir->type->is_integer()) {
>>> + return rshift(ir->operands[0], new(mem_ctx) ir_constant(1));
>>> + }
>>> break;
>>>
>>> case ir_binop_dot:
>>>
>>
>> Does glsl require any particular rounding behavior for negative numbers
>> (like c99 does, which wouldn't work with shift emulation)? A quick look
>> didn't find anything but it might be implied somewhere...
>
>
> What is a case by C99 rules where x / 2 is not the same as x >> 2?
>
-1 / 2 = 0 according to C99, but shifting will leave you with -1.
More information about the mesa-dev
mailing list