diff --git a/src/amd/compiler/aco_ir.cpp b/src/amd/compiler/aco_ir.cpp index 9cfa5b8b230..46ccc5201b5 100644 --- a/src/amd/compiler/aco_ir.cpp +++ b/src/amd/compiler/aco_ir.cpp @@ -143,13 +143,13 @@ init_program(Program* program, Stage stage, const struct aco_shader_info* info, program->dev.scratch_alloc_granule = gfx_level >= GFX11 ? 256 : 1024; - program->dev.max_wave64_per_simd = 10; + program->dev.max_waves_per_simd = 10; if (program->gfx_level >= GFX10_3) - program->dev.max_wave64_per_simd = 16; + program->dev.max_waves_per_simd = 16; else if (program->gfx_level == GFX10) - program->dev.max_wave64_per_simd = 20; + program->dev.max_waves_per_simd = 20; else if (program->family >= CHIP_POLARIS10 && program->family <= CHIP_VEGAM) - program->dev.max_wave64_per_simd = 8; + program->dev.max_waves_per_simd = 8; program->dev.simd_per_cu = program->gfx_level >= GFX10 ? 2 : 4; @@ -1353,8 +1353,7 @@ dealloc_vgprs(Program* program) return false; /* skip if deallocating VGPRs won't increase occupancy */ - uint16_t max_waves = program->dev.max_wave64_per_simd * (64 / program->wave_size); - max_waves = max_suitable_waves(program, max_waves); + uint16_t max_waves = max_suitable_waves(program, program->dev.max_waves_per_simd); if (program->max_reg_demand.vgpr <= get_addr_vgpr_from_waves(program, max_waves)) return false; diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index 2fc50c2d119..b0741be1d9c 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -2020,7 +2020,7 @@ struct DeviceInfo { uint16_t sgpr_alloc_granule; uint16_t vgpr_alloc_granule; unsigned scratch_alloc_granule; - unsigned max_wave64_per_simd; + uint16_t max_waves_per_simd; unsigned simd_per_cu; bool has_fast_fma32 = false; bool has_mac_legacy32 = false; diff --git a/src/amd/compiler/aco_live_var_analysis.cpp b/src/amd/compiler/aco_live_var_analysis.cpp index ee1455f58be..f894dd31b74 100644 --- a/src/amd/compiler/aco_live_var_analysis.cpp +++ b/src/amd/compiler/aco_live_var_analysis.cpp @@ -464,8 +464,7 @@ update_vgpr_sgpr_demand(Program* program, const RegisterDemand new_demand) get_vgpr_alloc(program, new_demand.vgpr) + program->config->num_shared_vgprs / 2; program->num_waves = std::min(program->num_waves, program->dev.physical_vgprs / vgpr_demand); - uint16_t max_waves = program->dev.max_wave64_per_simd * (64 / program->wave_size); - program->num_waves = std::min(program->num_waves, max_waves); + program->num_waves = std::min(program->num_waves, program->dev.max_waves_per_simd); /* Adjust for LDS and workgroup multiples and calculate max_reg_demand */ program->num_waves = max_suitable_waves(program, program->num_waves);