diff --git a/src/amd/compiler/aco_optimizer.cpp b/src/amd/compiler/aco_optimizer.cpp index 8492fcac6c1..a48988c0029 100644 --- a/src/amd/compiler/aco_optimizer.cpp +++ b/src/amd/compiler/aco_optimizer.cpp @@ -3694,7 +3694,8 @@ apply_output_impl(opt_ctx& ctx, aco_ptr& instr, Instruction* parent else if (instr->opcode == aco_opcode::v_mul_f64 || instr->opcode == aco_opcode::v_mul_f64_e64 || instr->opcode == aco_opcode::v_mul_f32 || instr->opcode == aco_opcode::v_mul_f16 || instr->opcode == aco_opcode::v_pk_mul_f16 || - instr->opcode == aco_opcode::v_mul_legacy_f32) + instr->opcode == aco_opcode::v_mul_legacy_f32 || + instr->opcode == aco_opcode::s_mul_f32 || instr->opcode == aco_opcode::s_mul_f16) return apply_output_mul(ctx, instr, parent); else if (instr->opcode == aco_opcode::v_cvt_f16_f32) return apply_f2f16(ctx, instr, parent); @@ -3722,6 +3723,8 @@ apply_output(opt_ctx& ctx, aco_ptr& instr) case aco_opcode::v_mul_f16: case aco_opcode::v_pk_mul_f16: case aco_opcode::v_mul_legacy_f32: + case aco_opcode::s_mul_f32: + case aco_opcode::s_mul_f16: case aco_opcode::v_cvt_f16_f32: case aco_opcode::v_med3_f32: case aco_opcode::v_med3_f16: break; diff --git a/src/amd/compiler/tests/test_optimizer.cpp b/src/amd/compiler/tests/test_optimizer.cpp index 8abea38fc68..2906547f708 100644 --- a/src/amd/compiler/tests/test_optimizer.cpp +++ b/src/amd/compiler/tests/test_optimizer.cpp @@ -2040,7 +2040,7 @@ BEGIN_TEST(optimizer.trans_inline_constant) finish_opt_test(); END_TEST -BEGIN_TEST(optimizer.trans_no_omod) +BEGIN_TEST(optimizer.trans_omod) //>> s1: %a:s[0] = p_startpgm if (!setup_cs("s1", GFX12)) return; @@ -2052,6 +2052,12 @@ BEGIN_TEST(optimizer.trans_no_omod) writeout(0, bld.vop2(aco_opcode::v_mul_legacy_f32, bld.def(v1), dst, bld.copy(bld.def(v1), Operand::c32(0x3f000000)))); + //! s1: %res1 = v_s_rcp_f32 -%a *0.5 + //! p_unit_test 1, %res1 + dst = bld.vop3(aco_opcode::v_s_rcp_f32, bld.def(s1), inputs[0]); + writeout(1, bld.sop2(aco_opcode::s_mul_f32, bld.def(s1), dst, + bld.copy(bld.def(s1), Operand::c32(0xbf000000)))); + finish_opt_test(); END_TEST