intel/compiler: Heap-allocate temporary storage

Shaders containing software implementations of double-precision
operations can be very large such that we cannot stack-allocate
an array of grf_count*16.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
This commit is contained in:
Matt Turner 2018-12-10 11:50:55 -08:00
parent 622d429128
commit 18b4e87370

View file

@ -973,7 +973,7 @@ fs_instruction_scheduler::calculate_deps()
* After register allocation, reg_offsets are gone and we track individual * After register allocation, reg_offsets are gone and we track individual
* GRF registers. * GRF registers.
*/ */
schedule_node *last_grf_write[grf_count * 16]; schedule_node **last_grf_write;
schedule_node *last_mrf_write[BRW_MAX_MRF(v->devinfo->gen)]; schedule_node *last_mrf_write[BRW_MAX_MRF(v->devinfo->gen)];
schedule_node *last_conditional_mod[8] = {}; schedule_node *last_conditional_mod[8] = {};
schedule_node *last_accumulator_write = NULL; schedule_node *last_accumulator_write = NULL;
@ -984,7 +984,7 @@ fs_instruction_scheduler::calculate_deps()
*/ */
schedule_node *last_fixed_grf_write = NULL; schedule_node *last_fixed_grf_write = NULL;
memset(last_grf_write, 0, sizeof(last_grf_write)); last_grf_write = (schedule_node **)calloc(sizeof(schedule_node *), grf_count * 16);
memset(last_mrf_write, 0, sizeof(last_mrf_write)); memset(last_mrf_write, 0, sizeof(last_mrf_write));
/* top-to-bottom dependencies: RAW and WAW. */ /* top-to-bottom dependencies: RAW and WAW. */
@ -1111,7 +1111,7 @@ fs_instruction_scheduler::calculate_deps()
} }
/* bottom-to-top dependencies: WAR */ /* bottom-to-top dependencies: WAR */
memset(last_grf_write, 0, sizeof(last_grf_write)); memset(last_grf_write, 0, sizeof(schedule_node *) * grf_count * 16);
memset(last_mrf_write, 0, sizeof(last_mrf_write)); memset(last_mrf_write, 0, sizeof(last_mrf_write));
memset(last_conditional_mod, 0, sizeof(last_conditional_mod)); memset(last_conditional_mod, 0, sizeof(last_conditional_mod));
last_accumulator_write = NULL; last_accumulator_write = NULL;
@ -1227,6 +1227,8 @@ fs_instruction_scheduler::calculate_deps()
last_accumulator_write = n; last_accumulator_write = n;
} }
} }
free(last_grf_write);
} }
void void