From 27cf11dc8a8d722ad1c556f33e6c3be9f10517bf Mon Sep 17 00:00:00 2001 From: Georg Lehmann Date: Fri, 13 Sep 2024 20:19:44 +0200 Subject: [PATCH] aco: remove per block inf/nan/sz control Reviewed-by: Rhys Perry Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 10 ++-------- src/amd/compiler/aco_ir.cpp | 2 -- src/amd/compiler/aco_ir.h | 8 +------- src/amd/compiler/tests/test_optimizer.cpp | 2 -- 4 files changed, 3 insertions(+), 19 deletions(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 2a27d5bb971..b0c662ef78c 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -3658,7 +3658,7 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr) tmp0->valu().abs[0] = true; denorm_zero = tmp0->definitions[0].getTemp(); } - if (ctx->block->fp_mode.preserve_signed_zero_inf_nan32) { + if (nir_alu_instr_is_signed_zero_preserve(instr)) { Temp copysign_0 = bld.vop2(aco_opcode::v_mul_f32, bld.def(v1), Operand::zero(), as_vgpr(ctx, src)); bld.vop2(aco_opcode::v_cndmask_b32, Definition(dst), f32, copysign_0, denorm_zero); @@ -3681,7 +3681,7 @@ visit_alu_instr(isel_context* ctx, nir_alu_instr* instr) Temp abs = bld.sop2(aco_opcode::s_and_b32, bld.def(s1), bld.def(s1, scc), f32, abs_mask); Operand sign; - if (ctx->block->fp_mode.preserve_signed_zero_inf_nan32) { + if (nir_alu_instr_is_signed_zero_preserve(instr)) { sign = bld.sop2(aco_opcode::s_andn2_b32, bld.def(s1), bld.def(s1, scc), f32, abs_mask); } else { @@ -11495,12 +11495,6 @@ setup_fp_mode(isel_context* ctx, nir_shader* shader) unsigned float_controls = shader->info.float_controls_execution_mode; - program->next_fp_mode.preserve_signed_zero_inf_nan32 = - float_controls & FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP32; - program->next_fp_mode.preserve_signed_zero_inf_nan16_64 = - float_controls & (FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP16 | - FLOAT_CONTROLS_SIGNED_ZERO_INF_NAN_PRESERVE_FP64); - program->next_fp_mode.must_flush_denorms32 = float_controls & FLOAT_CONTROLS_DENORM_FLUSH_TO_ZERO_FP32; program->next_fp_mode.must_flush_denorms16_64 = diff --git a/src/amd/compiler/aco_ir.cpp b/src/amd/compiler/aco_ir.cpp index c3c76f3e3cc..248caf0cf8d 100644 --- a/src/amd/compiler/aco_ir.cpp +++ b/src/amd/compiler/aco_ir.cpp @@ -199,8 +199,6 @@ init_program(Program* program, Stage stage, const struct aco_shader_info* info, program->progress = CompilationProgress::after_isel; - program->next_fp_mode.preserve_signed_zero_inf_nan32 = false; - program->next_fp_mode.preserve_signed_zero_inf_nan16_64 = false; program->next_fp_mode.must_flush_denorms32 = false; program->next_fp_mode.must_flush_denorms16_64 = false; program->next_fp_mode.care_about_round32 = false; diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h index ca97edb784e..a56d5e98ee3 100644 --- a/src/amd/compiler/aco_ir.h +++ b/src/amd/compiler/aco_ir.h @@ -151,9 +151,6 @@ struct float_mode { }; uint8_t val = 0; }; - /* if false, optimizations which may remove infs/nan/-0.0 can be done */ - bool preserve_signed_zero_inf_nan32 : 1; - bool preserve_signed_zero_inf_nan16_64 : 1; /* if false, optimizations which may remove denormal flushing can be done */ bool must_flush_denorms32 : 1; bool must_flush_denorms16_64 : 1; @@ -164,10 +161,7 @@ struct float_mode { * current one instead. */ bool canReplace(float_mode other) const noexcept { - return val == other.val && - (preserve_signed_zero_inf_nan32 || !other.preserve_signed_zero_inf_nan32) && - (preserve_signed_zero_inf_nan16_64 || !other.preserve_signed_zero_inf_nan16_64) && - (must_flush_denorms32 || !other.must_flush_denorms32) && + return val == other.val && (must_flush_denorms32 || !other.must_flush_denorms32) && (must_flush_denorms16_64 || !other.must_flush_denorms16_64) && (care_about_round32 || !other.care_about_round32) && (care_about_round16_64 || !other.care_about_round16_64); diff --git a/src/amd/compiler/tests/test_optimizer.cpp b/src/amd/compiler/tests/test_optimizer.cpp index 971005c5dfd..d52654cf3eb 100644 --- a/src/amd/compiler/tests/test_optimizer.cpp +++ b/src/amd/compiler/tests/test_optimizer.cpp @@ -222,8 +222,6 @@ BEGIN_TEST(optimize.output_modifiers) //! /* logical preds: BB2, / linear preds: BB2, / kind: uniform, */ program->next_fp_mode.denorm32 = fp_denorm_keep; program->next_fp_mode.denorm16_64 = fp_denorm_keep; - program->next_fp_mode.preserve_signed_zero_inf_nan32 = true; - program->next_fp_mode.preserve_signed_zero_inf_nan16_64 = true; bld.reset(program->create_and_insert_block()); bld.is_sz_preserve = true; program->blocks[2].linear_succs.push_back(3);