Mesa (master): r300/compiler: KILP may not always be inside an IF statement .

Tom Stellard tstellar at kemper.freedesktop.org
Wed Aug 4 04:03:12 UTC 2010


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

Author: Tom Stellard <tstellar at gmail.com>
Date:   Sun Aug  1 20:06:53 2010 -0700

r300/compiler: KILP may not always be inside an IF statement.

---

 .../drivers/dri/r300/compiler/radeon_program_alu.c |   23 ++++++++++++-------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c b/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
index 3cc2897..857aae5 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_program_alu.c
@@ -988,17 +988,22 @@ void radeonTransformKILP(struct radeon_compiler * c)
 	for (inst = c->Program.Instructions.Next;
 			inst != &c->Program.Instructions; inst = inst->Next) {
 
-		if (inst->U.I.Opcode != RC_OPCODE_KILP
-			|| inst->Prev->U.I.Opcode != RC_OPCODE_IF
-			|| inst->Next->U.I.Opcode != RC_OPCODE_ENDIF) {
+		if (inst->U.I.Opcode != RC_OPCODE_KILP)
 			continue;
-		}
+
 		inst->U.I.Opcode = RC_OPCODE_KIL;
-		inst->U.I.SrcReg[0] = negate(absolute(inst->Prev->U.I.SrcReg[0]));
 
-		/* Remove IF */
-		rc_remove_instruction(inst->Prev);
-		/* Remove ENDIF */
-		rc_remove_instruction(inst->Next);
+		if (inst->Prev->U.I.Opcode != RC_OPCODE_IF
+				|| inst->Next->U.I.Opcode != RC_OPCODE_ENDIF) {
+			inst->U.I.SrcReg[0] = negate(builtin_one);
+		} else {
+
+			inst->U.I.SrcReg[0] =
+				negate(absolute(inst->Prev->U.I.SrcReg[0]));
+			/* Remove IF */
+			rc_remove_instruction(inst->Prev);
+			/* Remove ENDIF */
+			rc_remove_instruction(inst->Next);
+		}
 	}
 }




More information about the mesa-commit mailing list