summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Stellard <tstellar@gmail.com>2011-01-30 15:29:29 -0800
committerTom Stellard <tstellar@gmail.com>2011-01-30 15:29:29 -0800
commita82cfb6229ca5d63c0eb9469157eeb13e2c24e53 (patch)
treea10b2f8244bbd0cb09af9fa0de4d3bf768ff98b8
parent4d3d9ac2759c892a972a8fd196f8f447df70f198 (diff)
Add exit on abort flag.
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c6
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h3
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_optimize.c2
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c1
-rw-r--r--src/mesa/drivers/dri/r300/compiler/radeon_rename_regs.c1
5 files changed, 10 insertions, 3 deletions
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
index 62af457ecda..a7eae077ada 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.c
@@ -594,7 +594,7 @@ static void get_readers_pair_read_callback(
if (d->ReadPairCB)
d->ReadPairCB(d->ReaderData, inst, arg, src);
- if (d->ReaderData->Abort)
+ if (d->ReaderData->ExitOnAbort && d->ReaderData->Abort)
return;
add_reader(&d->C->Pool, d->ReaderData, inst, shared_mask, arg);
@@ -622,7 +622,7 @@ static void get_readers_normal_read_callback(
if (d->ReadNormalCB)
d->ReadNormalCB(d->ReaderData, inst, src);
- if (d->ReaderData->Abort)
+ if (d->ReaderData->ExitOnAbort && d->ReaderData->Abort)
return;
add_reader(&d->C->Pool, d->ReaderData, inst, shared_mask, src);
@@ -781,7 +781,7 @@ static void get_readers_for_single_write(
}
rc_for_all_writes_mask(tmp, get_readers_write_callback, d);
- if (d->ReaderData->Abort)
+ if (d->ReaderData->ExitOnAbort && d->ReaderData->Abort)
return;
if (branch_depth == 0 && !d->AliveWriteMask)
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h
index ef971c5b234..2b5d3dda733 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_dataflow.h
@@ -89,6 +89,9 @@ struct rc_reader_data {
unsigned int ReadersReserved;
struct rc_reader * Readers;
+ /* If this flag is enabled, rc_get_readers will exit as soon possbile
+ * after the Abort flag is set.*/
+ unsigned int ExitOnAbort;
void * CbData;
};
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
index 5caff91b00e..6a16bf6f1c7 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_optimize.c
@@ -144,6 +144,7 @@ static void copy_propagate(struct radeon_compiler * c, struct rc_instruction * i
return;
/* Get a list of all the readers of this MOV instruction. */
+ reader_data.ExitOnAbort = 1;
rc_get_readers(c, inst_mov, &reader_data,
copy_propagate_scan_read, NULL,
is_src_clobbered_scan_write);
@@ -442,6 +443,7 @@ static int presub_helper(
rc_presubtract_op cb_op = presub_opcode;
reader_data.CbData = &cb_op;
+ reader_data.ExitOnAbort = 1;
rc_get_readers(c, inst_add, &reader_data, presub_scan_read, NULL,
is_src_clobbered_scan_write);
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
index 0d8bf8e17b8..29c2734e421 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_pair_schedule.c
@@ -959,6 +959,7 @@ static void schedule_block(struct r300_fragment_program_compiler * c,
instruction_ready(&s, s.Current);
/* Get global readers for possible RGB->Alpha conversion. */
+ s.Current->GlobalReaders.ExitOnAbort = 1;
rc_get_readers(s.C, inst, &s.Current->GlobalReaders,
is_rgb_to_alpha_possible_normal,
is_rgb_to_alpha_possible, NULL);
diff --git a/src/mesa/drivers/dri/r300/compiler/radeon_rename_regs.c b/src/mesa/drivers/dri/r300/compiler/radeon_rename_regs.c
index 5bd19c0b9c6..8ad4fc82163 100644
--- a/src/mesa/drivers/dri/r300/compiler/radeon_rename_regs.c
+++ b/src/mesa/drivers/dri/r300/compiler/radeon_rename_regs.c
@@ -71,6 +71,7 @@ void rc_rename_regs(struct radeon_compiler *c, void *user)
if (inst->U.I.DstReg.File != RC_FILE_TEMPORARY)
continue;
+ reader_data.ExitOnAbort = 1;
rc_get_readers(c, inst, &reader_data, NULL, NULL, NULL);
if (reader_data.Abort || reader_data.ReaderCount == 0)