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 Signed-off-by: Karol Herbst <karolherbst at gmail.com> --- src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 5 +++++ 1 file changed, 5 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..a2446e4df8 100644 --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp @@ -1284,6 +1284,11 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) case OP_SHL: { + if (s == 1 && imm0.isInteger(0)) { + i->op = OP_MOV; + i->setSrc(1, NULL); + break; + } if (s != 1 || i->src(0).mod != Modifier(0)) break; // try to concatenate shifts -- 2.12.2
"optimmize" ? No need to resend just for that though. Reviewed-by: Samuel Pitoiset <samuel.pitoiset at gmail.com> On 04/29/2017 06:46 PM, Karol Herbst 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 > > Signed-off-by: Karol Herbst <karolherbst at gmail.com> > --- > src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 5 +++++ > 1 file changed, 5 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..a2446e4df8 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > @@ -1284,6 +1284,11 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) > > case OP_SHL: > { > + if (s == 1 && imm0.isInteger(0)) { > + i->op = OP_MOV; > + i->setSrc(1, NULL); > + break; > + } > if (s != 1 || i->src(0).mod != Modifier(0)) > break; > // try to concatenate shifts >
On Sat, Apr 29, 2017 at 12:46 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 > > Signed-off-by: Karol Herbst <karolherbst at gmail.com> > --- > src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 5 +++++ > 1 file changed, 5 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..a2446e4df8 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp > @@ -1284,6 +1284,11 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) > > case OP_SHL: > { > + if (s == 1 && imm0.isInteger(0)) { > + i->op = OP_MOV; > + i->setSrc(1, NULL); > + break; > + } > if (s != 1 || i->src(0).mod != Modifier(0)) > break;Interesting. This suggests that src(0) may have modifiers, although I can't imagine what that'd be. Perhaps it can take a neg? In that case, you need to fix the OP_MOV above -- should probably do it anyways, i.e. i->op = i->src(0).mod.getOp() or something. With that, this is Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu> Separately, I just noticed that we don't appear to have any 0 << x or 0 >> y or EXTBF or anything like that. I doubt it comes up too often though.> // try to concatenate shifts > -- > 2.12.2 >
2017-04-29 21:03 GMT+02:00 Ilia Mirkin <imirkin at alum.mit.edu>:> On Sat, Apr 29, 2017 at 12:46 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 >> >> Signed-off-by: Karol Herbst <karolherbst at gmail.com> >> --- >> src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp | 5 +++++ >> 1 file changed, 5 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..a2446e4df8 100644 >> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp >> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp >> @@ -1284,6 +1284,11 @@ ConstantFolding::opnd(Instruction *i, ImmediateValue &imm0, int s) >> >> case OP_SHL: >> { >> + if (s == 1 && imm0.isInteger(0)) { >> + i->op = OP_MOV; >> + i->setSrc(1, NULL); >> + break; >> + } >> if (s != 1 || i->src(0).mod != Modifier(0)) >> break; > > Interesting. This suggests that src(0) may have modifiers, although I > can't imagine what that'd be. Perhaps it can take a neg? In that case, > you need to fix the OP_MOV above -- should probably do it anyways, > i.e. i->op = i->src(0).mod.getOp() or something. With that, this is >I looked through the emitter and there seem to be no flags. Envydis and nvdisasm seem to think the same. Will fix it up nethertheless.> Reviewed-by: Ilia Mirkin <imirkin at alum.mit.edu> > > Separately, I just noticed that we don't appear to have any 0 << x or > 0 >> y or EXTBF or anything like that. I doubt it comes up too often > though. > >> // try to concatenate shifts >> -- >> 2.12.2 >>