On Sat, Aug 13, 2016 at 6:02 AM, Karol Herbst <karolher...@gmail.com> wrote: > no changes without a dual_issue pass > > changes with for ./GpuTest /test=pixmark_piano /benchmark /no_scorebox /msaa=0 > /benchmark_duration_ms=60000 /width=1024 /height=640: > > inst_executed: 1.03G > inst_issued1: 538M -> 535M > inst_issued2: 251M -> 254M > > score: 1038 -> 1052 > > Signed-off-by: Karol Herbst <karolher...@gmail.com> > --- > src/gallium/drivers/nouveau/codegen/nv50_ir.cpp | 11 +++++++++-- > src/gallium/drivers/nouveau/codegen/nv50_ir.h | 1 + > src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp | 4 ++++ > 3 files changed, 14 insertions(+), 2 deletions(-) > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp > index 179ad0b..7a90cb7 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.cpp > @@ -893,12 +893,19 @@ insnCheckCommutationDefDef(const Instruction *a, const > Instruction *b) > bool > Instruction::isCommutationLegal(const Instruction *i) const > { > - bool ret = insnCheckCommutationDefDef(this, i); > - ret = ret && insnCheckCommutationDefSrc(this, i); > + bool ret = !i->dependsOn(this); > ret = ret && insnCheckCommutationDefSrc(i, this);
This condition is covered by your new dependsOn() call. Did you mean dependsOn to have something different? I haven't really thought carefully about this yet. > return ret; > } > > +bool > +Instruction::dependsOn(const Instruction *i) const > +{ > + bool ret = insnCheckCommutationDefDef(this, i); > + ret = ret && insnCheckCommutationDefSrc(i, this); > + return !ret; > +} > + > TexInstruction::TexInstruction(Function *fn, operation op) > : Instruction(fn, op, TYPE_F32) > { > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h > b/src/gallium/drivers/nouveau/codegen/nv50_ir.h > index 6d2ee8b..d81fca9 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h > @@ -831,6 +831,7 @@ public: > bool isDead() const; > bool isNop() const; > bool isCommutationLegal(const Instruction *) const; // must be adjacent ! > + bool dependsOn(const Instruction *) const; // weaker form of > isCommutationLegal > bool isActionEqual(const Instruction *) const; > bool isResultEqual(const Instruction *) const; > > diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp > b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp > index faf2121..8ce8c19 100644 > --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp > +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_target_nvc0.cpp > @@ -620,6 +620,10 @@ bool TargetNVC0::canDualIssue(const Instruction *a, > const Instruction *b) const > // not if the 2nd instruction isn't necessarily executed > if (clA == OPCLASS_TEXTURE || clA == OPCLASS_FLOW) > return false; > + > + if (b->dependsOn(a)) > + return false; > + > // anything with MOV > if (a->op == OP_MOV || b->op == OP_MOV) > return true; > -- > 2.9.2 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev