Mesa (master): nir/phi-builder: Set the value in the block when creating a phi

Jason Ekstrand jekstrand at kemper.freedesktop.org
Fri Dec 30 00:03:02 UTC 2016


Module: Mesa
Branch: master
Commit: 67a70889f61a374bc535286d12117780e9fbc0c3
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=67a70889f61a374bc535286d12117780e9fbc0c3

Author: Jason Ekstrand <jason.ekstrand at intel.com>
Date:   Wed Dec 14 20:25:51 2016 -0800

nir/phi-builder: Set the value in the block when creating a phi

After we figure out the value that we are going to return, we have a
loop that walks up the dominance tree and sets the value in each of the
blocks that doesn't have one yet.  In the case of the phi, the def is
set to NEEDS_PHI not NULL, so the last one where the phi node actually
goes never gets filled out.  This can lead to duplicating the phi node
unnecessarily.

---

 src/compiler/nir/nir_phi_builder.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/compiler/nir/nir_phi_builder.c b/src/compiler/nir/nir_phi_builder.c
index 6b4b693..acfc771 100644
--- a/src/compiler/nir/nir_phi_builder.c
+++ b/src/compiler/nir/nir_phi_builder.c
@@ -216,7 +216,7 @@ nir_phi_builder_value_get_block_def(struct nir_phi_builder_value *val,
                         val->bit_size, NULL);
       phi->instr.block = dom;
       exec_list_push_tail(&val->phis, &phi->instr.node);
-      def = &phi->dest.ssa;
+      def = val->defs[dom->index] = &phi->dest.ssa;
    } else {
       /* In this case, we have an actual SSA def.  It's either the result of a
        * phi node created by the case above or one passed to us through




More information about the mesa-commit mailing list