From 33360a707e16c3349fde9dd43fee8e38bae9e7f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Thu, 2 Sep 2010 10:21:52 +0200 Subject: [PATCH] r300/compiler: fix handling of indexed temporaries in peephole --- src/mesa/drivers/dri/r300/compiler/radeon_optimize.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c index a9be30706bb..8e994671064 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));