[Mesa-dev] [PATCH v2] nv50/ir: optimize shl(a, 0) to a

Karol Herbst karolherbst at gmail.com
Sun Apr 30 12:14:16 UTC 2017


2017-04-30 2:28 GMT+02:00 Ilia Mirkin <imirkin at alum.mit.edu>:
> Maybe in a separate change. I'd want to double check on all gens. I think
> the thing I suggested is sufficient.
>

well, if I just fixup the op, I kind of have to fix the mod as well.
And if I use getOp, it could also return a OP_CVT, so I have to do the
check.

I don't see how I can only use getOp, but not fixing the mod?

> On Apr 29, 2017 8:09 PM, "Karol Herbst" <karolherbst at gmail.com> wrote:
>
> 2017-04-30 0:28 GMT+02:00 Ilia Mirkin <imirkin at alum.mit.edu>:
>> On Sat, Apr 29, 2017 at 6:09 PM, Karol Herbst <karolherbst at gmail.com>
>> wrote:
>>> helps two alien isolation shaders
>>>
>>> shader-db:
>>> total instructions in shared programs : 4251497 -> 4251494 (-0.00%)
>>> total gprs used in shared programs    : 513962 -> 513962 (0.00%)
>>> total local used in shared programs   : 29797 -> 29797 (0.00%)
>>> total bytes used in shared programs   : 38960264 -> 38960232 (-0.00%)
>>>
>>>                 local        gpr       inst      bytes
>>>     helped           0           0           2           2
>>>       hurt           0           0           0           0
>>>
>>> v2: handle potential mods on src0
>>>
>>> Signed-off-by: Karol Herbst <karolherbst at gmail.com>
>>> Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com>
>>> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu>
>>> ---
>>>  src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 7 +++++++
>>>  1 file changed, 7 insertions(+)
>>>
>>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
>>> b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
>>> index 015def0391..82da0d3e48 100644
>>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
>>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
>>> @@ -1284,6 +1284,13 @@ ConstantFolding::opnd(Instruction *i,
>>> ImmediateValue &imm0, int s)
>>>
>>>     case OP_SHL:
>>>     {
>>> +      if (s == 1 && imm0.isInteger(0)) {
>>> +         i->op = i->src(0).mod.getOp();
>>> +         if (i->op != OP_CVT)
>>> +            i->src(0).mod = 0;
>>
>> Is this necessary? Presumably if the op != 0, then op == OP_CVT...
>>
>
> yeah, no idea. I just thought I do it right when I actually depend on
> the getOp magic. But we can't emit any mods to begin with, so maybe we
> should just drop the mod handling and be done with it?
>
>>> +         i->setSrc(1, NULL);
>>> +         break;
>>> +      }
>>>        if (s != 1 || i->src(0).mod != Modifier(0))
>>>           break;
>>>        // try to concatenate shifts
>>> --
>>> 2.12.2
>>>
>
>


More information about the mesa-dev mailing list