aco: always use p_parallelcopy for pre-RA copies
Most fossil-db changes are because literals are applied earlier (in label_instruction), so use counts are more accurate and more literals are applied. fossil-db (Navi): Totals from 79551 (57.89% of 137413) affected shaders: SGPRs: 4549610 -> 4542802 (-0.15%); split: -0.19%, +0.04% VGPRs: 3326764 -> 3324172 (-0.08%); split: -0.10%, +0.03% SpillSGPRs: 38886 -> 34562 (-11.12%); split: -11.14%, +0.02% CodeSize: 240143456 -> 240001008 (-0.06%); split: -0.11%, +0.05% MaxWaves: 1078919 -> 1079281 (+0.03%); split: +0.04%, -0.01% Instrs: 46627073 -> 46528490 (-0.21%); split: -0.22%, +0.01% fossil-db (Polaris): Totals from 98463 (70.90% of 138881) affected shaders: SGPRs: 5164689 -> 5164353 (-0.01%); split: -0.02%, +0.01% VGPRs: 3920936 -> 3921856 (+0.02%); split: -0.00%, +0.03% SpillSGPRs: 56298 -> 52259 (-7.17%); split: -7.22%, +0.04% CodeSize: 258680092 -> 258692712 (+0.00%); split: -0.02%, +0.03% MaxWaves: 620863 -> 620823 (-0.01%); split: +0.00%, -0.01% Instrs: 50776289 -> 50757577 (-0.04%); split: -0.04%, +0.00% Signed-off-by: Rhys Perry <pendingchaos02@gmail.com> Reviewed-by: Timur Kristóf <timur.kristof@gmail.com> Reviewed-by: Daniel Schürmann <daniel@schuermann.dev> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7216>
This commit is contained in:
@@ -853,7 +853,8 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr<Instruction>& instr)
|
||||
case aco_opcode::p_create_vector:
|
||||
case aco_opcode::p_split_vector:
|
||||
case aco_opcode::p_extract_vector:
|
||||
case aco_opcode::p_phi: {
|
||||
case aco_opcode::p_phi:
|
||||
case aco_opcode::p_parallelcopy: {
|
||||
const bool all_vgpr = std::none_of(instr->definitions.begin(), instr->definitions.end(),
|
||||
[] (const Definition& def) { return def.getTemp().type() != RegType::vgpr;});
|
||||
if (all_vgpr) {
|
||||
@@ -1212,6 +1213,7 @@ void label_instruction(opt_ctx &ctx, Block& block, aco_ptr<Instruction>& instr)
|
||||
case aco_opcode::s_mov_b32: /* propagate */
|
||||
case aco_opcode::s_mov_b64:
|
||||
case aco_opcode::v_mov_b32:
|
||||
case aco_opcode::p_parallelcopy:
|
||||
if (instr->operands[0].isTemp() && ctx.info[instr->operands[0].tempId()].is_vec() &&
|
||||
instr->operands[0].regClass() != instr->definitions[0].regClass()) {
|
||||
/* We might not be able to copy-propagate if it's a SGPR->VGPR copy, so
|
||||
|
||||
Reference in New Issue
Block a user