r300/compiler: fix handling of indexed temporaries in peephole
authorMarek Olšák <maraeo@gmail.com>
Thu, 2 Sep 2010 08:21:52 +0000 (10:21 +0200)
committerMarek Olšák <maraeo@gmail.com>
Sat, 4 Sep 2010 16:56:22 +0000 (18:56 +0200)
src/mesa/drivers/dri/r300/compiler/radeon_optimize.c

index a9be30706bb1e833892ff5a6856d850fb1a8f8a3..8e994671064155b899d62408ae5fec3dd50e2384 100644 (file)
@@ -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));