[Mesa-dev] [PATCH] nv50/ir: we can't replace 0x0 with zero reg for SHLADD

Karol Herbst karolherbst at gmail.com
Sat Apr 29 15:53:30 UTC 2017


2017-04-29 17:18 GMT+02:00 Ilia Mirkin <imirkin at alum.mit.edu>:
> On Sat, Apr 29, 2017 at 10:41 AM, Karol Herbst <karolherbst at gmail.com> wrote:
>> fixes a crash in Alien Isolation
>
> What crash?

assertion, because shladd requires an immediate, there can't be a reg at src1

"shladd u32 $r0 $r0 $r63 $r36" is invalid for the emiter so we have to
use 0x0 here

> How did the zero get there?

by replaceZero

> Does this only happen if you do your optimization loop thing?

no, it happens on master and the stable branches without any modifications

>
> In either case, we still want the replaceZero() logic. However that
> logic should be aware that the middle argument of a SHLADD is not to
> be touched. Otherwise we could end up with an un-emittable
> instruction.

ohh right, you mean for the other args... true.

>
>>
>> Signed-off-by: Karol Herbst <karolherbst at gmail.com>
>> ---
>>  src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
>> index 732e1a93b4..4815d6df07 100644
>> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
>> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_lowering_nvc0.cpp
>> @@ -740,7 +740,7 @@ NVC0LegalizePostRA::visit(BasicBlock *bb)
>>                 next = hi;
>>           }
>>
>> -         if (i->op != OP_MOV && i->op != OP_PFETCH)
>> +         if (i->op != OP_MOV && i->op != OP_PFETCH && i->op != OP_SHLADD)
>>              replaceZero(i);
>>        }
>>     }
>> --
>> 2.12.2
>>


More information about the mesa-dev mailing list