summaryrefslogtreecommitdiffstats
path: root/src/amd/compiler/aco_spill.cpp
diff options
context:
space:
mode:
authorDaniel Schürmann <[email protected]>2019-10-31 13:25:44 +0100
committerDaniel Schürmann <[email protected]>2019-11-04 20:14:14 +0100
commitd97c0bdd5558e4e00ede38afac879606aff5f04b (patch)
tree32dcb04c207f350a3d50221e27d2430f9297a537 /src/amd/compiler/aco_spill.cpp
parentee6fbb95a74d0dfc00fe77778828c73e6a1447fb (diff)
aco: fix immediate offset for spills if scratch is used
Fixes: 86786999189c43b4a2c8e1c1a18b55cd2f369fff "aco: implement VGPR spilling" Reviewed-by: Rhys Perry <[email protected]>
Diffstat (limited to 'src/amd/compiler/aco_spill.cpp')
-rw-r--r--src/amd/compiler/aco_spill.cpp12
1 files changed, 6 insertions, 6 deletions
diff --git a/src/amd/compiler/aco_spill.cpp b/src/amd/compiler/aco_spill.cpp
index 1f3f5ea3b52..9f687da4b98 100644
--- a/src/amd/compiler/aco_spill.cpp
+++ b/src/amd/compiler/aco_spill.cpp
@@ -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,