summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarek Olšák <maraeo@gmail.com>2010-09-02 10:21:52 +0200
committerMarek Olšák <maraeo@gmail.com>2010-09-04 18:56:22 +0200
commit33360a707e16c3349fde9dd43fee8e38bae9e7f0 (patch)
treebaeecd6d8fc64b1fc09e748c235a1af41023de8d
parentaa554d508b03ee54f2553200d0d43c78b3982e44 (diff)
r300/compiler: fix handling of indexed temporaries in peephole
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_optimize.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
index a9be30706b..8e99467106 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
@@ -89,6 +89,12 @@ static void peephole_scan_read(void * data, struct rc_instruction * inst,
{
struct peephole_state * s = data;
+ /* XXX This could probably be handled better. */
+ if (file == RC_FILE_ADDRESS) {
+ s->Conflict = 1;
+ return;
+ }
+
if (file != RC_FILE_TEMPORARY || index != s->Mov->U.I.DstReg.Index)
return;
@@ -144,7 +150,9 @@ static void peephole(struct radeon_compiler * c, struct rc_instruction * inst_mo
{
struct peephole_state s;
- if (inst_mov->U.I.DstReg.File != RC_FILE_TEMPORARY || inst_mov->U.I.WriteALUResult)
+ if (inst_mov->U.I.DstReg.File != RC_FILE_TEMPORARY ||
+ inst_mov->U.I.DstReg.RelAddr ||
+ inst_mov->U.I.WriteALUResult)
return;
memset(&s, 0, sizeof(s));