diff options
| author | Marek Olšák <maraeo@gmail.com> | 2010-09-02 10:21:52 +0200 | 
|---|---|---|
| committer | Marek Olšák <maraeo@gmail.com> | 2010-09-04 18:56:22 +0200 | 
| commit | 33360a707e16c3349fde9dd43fee8e38bae9e7f0 (patch) | |
| tree | baeecd6d8fc64b1fc09e748c235a1af41023de8d /src/mesa | |
| parent | aa554d508b03ee54f2553200d0d43c78b3982e44 (diff) | |
r300/compiler: fix handling of indexed temporaries in peephole
Diffstat (limited to 'src/mesa')
| -rw-r--r-- | src/mesa/drivers/dri/r300/compiler/radeon_optimize.c | 10 | 
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)); | 
