aco: fix immediate offset for spills if scratch is used
Fixes: 8678699918
"aco: implement VGPR spilling"
Reviewed-by: Rhys Perry <pendingchaos02@gmail.com>
This commit is contained in:
parent
ee6fbb95a7
commit
d97c0bdd55
|
@ -1530,12 +1530,12 @@ void assign_spill_slots(spill_ctx& ctx, unsigned spills_to_vgpr) {
|
|||
/* spill vgpr */
|
||||
ctx.program->config->spilled_vgprs += (*it)->operands[0].size();
|
||||
uint32_t spill_slot = vgpr_slot[spill_id];
|
||||
bool add_offset = ctx.program->config->scratch_bytes_per_wave + vgpr_spill_slots * 4 > 4096;
|
||||
unsigned base_offset = add_offset ? 0 : ctx.program->config->scratch_bytes_per_wave;
|
||||
bool add_offset_to_sgpr = ctx.program->config->scratch_bytes_per_wave / ctx.program->wave_size + vgpr_spill_slots * 4 > 4096;
|
||||
unsigned base_offset = add_offset_to_sgpr ? 0 : ctx.program->config->scratch_bytes_per_wave / ctx.program->wave_size;
|
||||
|
||||
/* check if the scratch resource descriptor already exists */
|
||||
if (scratch_rsrc == Temp()) {
|
||||
unsigned offset = ctx.program->config->scratch_bytes_per_wave - base_offset;
|
||||
unsigned offset = add_offset_to_sgpr ? ctx.program->config->scratch_bytes_per_wave : 0;
|
||||
scratch_rsrc = load_scratch_resource(ctx, scratch_offset,
|
||||
last_top_level_block_idx == block.index ?
|
||||
instructions : ctx.program->blocks[last_top_level_block_idx].instructions,
|
||||
|
@ -1615,12 +1615,12 @@ void assign_spill_slots(spill_ctx& ctx, unsigned spills_to_vgpr) {
|
|||
if (vgpr_slot.find(spill_id) != vgpr_slot.end()) {
|
||||
/* reload vgpr */
|
||||
uint32_t spill_slot = vgpr_slot[spill_id];
|
||||
bool add_offset = ctx.program->config->scratch_bytes_per_wave + vgpr_spill_slots * 4 > 4096;
|
||||
unsigned base_offset = add_offset ? 0 : ctx.program->config->scratch_bytes_per_wave;
|
||||
bool add_offset_to_sgpr = ctx.program->config->scratch_bytes_per_wave / ctx.program->wave_size + vgpr_spill_slots * 4 > 4096;
|
||||
unsigned base_offset = add_offset_to_sgpr ? 0 : ctx.program->config->scratch_bytes_per_wave / ctx.program->wave_size;
|
||||
|
||||
/* check if the scratch resource descriptor already exists */
|
||||
if (scratch_rsrc == Temp()) {
|
||||
unsigned offset = ctx.program->config->scratch_bytes_per_wave - base_offset;
|
||||
unsigned offset = add_offset_to_sgpr ? ctx.program->config->scratch_bytes_per_wave : 0;
|
||||
scratch_rsrc = load_scratch_resource(ctx, scratch_offset,
|
||||
last_top_level_block_idx == block.index ?
|
||||
instructions : ctx.program->blocks[last_top_level_block_idx].instructions,
|
||||
|
|
Loading…
Reference in New Issue