[Mesa-dev] [PATCH 3/6] nv50/ir: replace post_ra_dead by Instruction::isDead
Samuel Pitoiset
samuel.pitoiset at gmail.com
Sat Oct 8 16:39:41 UTC 2016
On 10/08/2016 05:43 PM, Karol Herbst wrote:
> Signed-off-by: Karol Herbst <karolherbst at gmail.com>
> ---
> src/gallium/drivers/nouveau/codegen/nv50_ir.h | 2 +-
> .../drivers/nouveau/codegen/nv50_ir_peephole.cpp | 20 +++++++-------------
> 2 files changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir.h b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
> index bedbdcc..9d1a72f 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir.h
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir.h
> @@ -829,7 +829,7 @@ public:
> }
>
> inline bool isPseudo() const { return op < OP_MOV; }
> - bool isDead() const;
> + bool isDead(bool postRA = false) const;
> bool isNop() const;
> bool isCommutationLegal(const Instruction *) const; // must be adjacent !
> bool isActionEqual(const Instruction *) const;
> diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> index 780820f..3fcadd9 100644
> --- a/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> +++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_peephole.cpp
> @@ -61,7 +61,7 @@ Instruction::isNop() const
> return false;
> }
>
> -bool Instruction::isDead() const
> +bool Instruction::isDead(bool postRA) const
> {
You might want to do :
if (postRA)
return post_ra_dead(this);
which doesn't require any changes above.
> if (op == OP_STORE ||
> op == OP_EXPORT ||
> @@ -70,8 +70,11 @@ bool Instruction::isDead() const
> op == OP_WRSV)
> return false;
>
> + if (postRA && op == OP_MOV && subOp == NV50_IR_SUBOP_MOV_FINAL)
> + return false;
Why do you need that specific case?
> +
> for (int d = 0; defExists(d); ++d)
> - if (getDef(d)->refCount() || getDef(d)->reg.data.id >= 0)
> + if (getDef(d)->refCount() || (!postRA && getDef(d)->reg.data.id >= 0))
> return false;
>
> if (terminator || asFlow())
> @@ -2959,15 +2962,6 @@ private:
> virtual bool visit(BasicBlock *);
> };
>
> -static bool
> -post_ra_dead(Instruction *i)
> -{
> - for (int d = 0; i->defExists(d); ++d)
> - if (i->getDef(d)->refCount())
> - return false;
> - return true;
> -}
> -
> bool
> NV50PostRaConstantFolding::visit(BasicBlock *bb)
> {
> @@ -3014,13 +3008,13 @@ NV50PostRaConstantFolding::visit(BasicBlock *bb)
> /* There's no post-RA dead code elimination, so do it here
> * XXX: if we add more code-removing post-RA passes, we might
> * want to create a post-RA dead-code elim pass */
> - if (post_ra_dead(vtmp->getInsn())) {
> + if (vtmp->getInsn()->isDead(true)) {
> Value *src = vtmp->getInsn()->getSrc(0);
> // Careful -- splits will have already been removed from the
> // functions. Don't double-delete.
> if (vtmp->getInsn()->bb)
> delete_Instruction(prog, vtmp->getInsn());
> - if (src->getInsn() && post_ra_dead(src->getInsn()))
> + if (src->getInsn() && src->getInsn()->isDead(true))
> delete_Instruction(prog, src->getInsn());
> }
>
>
More information about the mesa-dev
mailing list