[Mesa-dev] [PATCH 10/16] mesa: Remove REG_ALLOCATE_MAX_PROGRAM_TEMPS from global dead code.

Eric Anholt eric at anholt.net
Wed May 28 11:37:41 PDT 2014


---
 src/mesa/program/prog_optimize.c | 23 +++++++++++++----------
 1 file changed, 13 insertions(+), 10 deletions(-)

diff --git a/src/mesa/program/prog_optimize.c b/src/mesa/program/prog_optimize.c
index ce53937..f0d279b 100644
--- a/src/mesa/program/prog_optimize.c
+++ b/src/mesa/program/prog_optimize.c
@@ -248,11 +248,13 @@ replace_regs(struct gl_program *prog, gl_register_file file, const GLint map[])
 static GLboolean
 _mesa_remove_dead_code_global(struct gl_program *prog)
 {
-   GLboolean tempRead[REG_ALLOCATE_MAX_PROGRAM_TEMPS][4];
+   bool *tempRead;
    GLboolean *removeInst; /* per-instruction removal flag */
    GLuint i, rem = 0, comp;
 
-   memset(tempRead, 0, sizeof(tempRead));
+   tempRead = calloc(prog->NumTemporaries, 4 * sizeof(bool));
+   if (!tempRead)
+      return false;
 
    if (dbg) {
       fprintf(stderr, "Optimize: Begin dead code removal\n");
@@ -273,7 +275,7 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
          if (inst->SrcReg[j].File == PROGRAM_TEMPORARY) {
             const GLuint index = inst->SrcReg[j].Index;
             GLuint read_mask;
-            ASSERT(index < REG_ALLOCATE_MAX_PROGRAM_TEMPS);
+            ASSERT(index < prog->NumTemporaries);
 	    read_mask = get_src_arg_mask(inst, j, NO_MASK);
 
             if (inst->SrcReg[j].RelAddr) {
@@ -288,7 +290,7 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
                if ((read_mask & (1 << swz)) == 0)
 		  continue;
                if (swz <= SWIZZLE_W)
-                  tempRead[index][swz] = GL_TRUE;
+                  tempRead[index * 4 + swz] = GL_TRUE;
 	    }
          }
       }
@@ -296,7 +298,7 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
       /* check dst reg */
       if (inst->DstReg.File == PROGRAM_TEMPORARY) {
          const GLuint index = inst->DstReg.Index;
-         ASSERT(index < REG_ALLOCATE_MAX_PROGRAM_TEMPS);
+         ASSERT(index < prog->NumTemporaries);
 
          if (inst->DstReg.RelAddr) {
             if (dbg)
@@ -309,10 +311,10 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
              * codes we cannot remove the instruction.  Prevent removal
              * by setting the 'read' flag.
              */
-            tempRead[index][0] = GL_TRUE;
-            tempRead[index][1] = GL_TRUE;
-            tempRead[index][2] = GL_TRUE;
-            tempRead[index][3] = GL_TRUE;
+            tempRead[index * 4 + 0] = GL_TRUE;
+            tempRead[index * 4 + 1] = GL_TRUE;
+            tempRead[index * 4 + 2] = GL_TRUE;
+            tempRead[index * 4 + 3] = GL_TRUE;
          }
       }
    }
@@ -326,7 +328,7 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
          GLint chan, index = inst->DstReg.Index;
 
 	 for (chan = 0; chan < 4; chan++) {
-	    if (!tempRead[index][chan] &&
+	    if (!tempRead[index * 4 + chan] &&
 		inst->DstReg.WriteMask & (1 << chan)) {
 	       if (dbg) {
                   fprintf(stderr, "Remove writemask on %u.%c\n", i,
@@ -357,6 +359,7 @@ _mesa_remove_dead_code_global(struct gl_program *prog)
    }
 
 done:
+   free(tempRead);
    free(removeInst);
    return rem != 0;
 }
-- 
2.0.0.rc2



More information about the mesa-dev mailing list