r600g: Fix instruction group merge when there are predicated insts.
authorVincent Lejeune <vljn@ovi.com>
Wed, 1 Aug 2012 20:52:54 +0000 (22:52 +0200)
committerTom Stellard <thomas.stellard@amd.com>
Wed, 15 Aug 2012 21:07:13 +0000 (21:07 +0000)
Signed-off-by: Tom Stellard <thomas.stellard@amd.com>
src/gallium/drivers/r600/r600_asm.c

index 0f2882403e987592a9b876db9d7170f86200dea1..f01de41e129360807f457f13cbca44a6898d4ccf 100644 (file)
@@ -1047,9 +1047,27 @@ static int merge_inst_groups(struct r600_bytecode *bc, struct r600_bytecode_alu
        if (r)
                return r;
 
+       for (i = 0; i < max_slots; ++i) {
+               if (prev[i]) {
+                     if (prev[i]->pred_sel)
+                             return 0;
+                     if (is_alu_once_inst(bc, prev[i]))
+                             return 0;
+               }
+               if (slots[i]) {
+                       if (slots[i]->pred_sel)
+                               return 0;
+                       if (is_alu_once_inst(bc, slots[i]))
+                               return 0;
+               }
+       }
+
        for (i = 0; i < max_slots; ++i) {
                struct r600_bytecode_alu *alu;
 
+               if (num_once_inst > 0)
+                  return 0;
+
                /* check number of literals */
                if (prev[i]) {
                        if (r600_bytecode_alu_nliterals(bc, prev[i], literal, &nliteral))