74a4e7dd4b
Fixes: b605f76b2a ("brw/algebraic: Constant fold multiplicands of MAD")
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36867>
79 lines
1.8 KiB
C++
79 lines
1.8 KiB
C++
/*
|
|
* Copyright 2025 Intel Corporation
|
|
* SPDX-License-Identifier: MIT
|
|
*/
|
|
|
|
#include "test_helpers.h"
|
|
#include "brw_builder.h"
|
|
|
|
class algebraic_test : public brw_shader_pass_test {};
|
|
|
|
TEST_F(algebraic_test, imax_a_a)
|
|
{
|
|
brw_builder bld = make_shader(MESA_SHADER_FRAGMENT, 16);
|
|
brw_builder exp = make_shader(MESA_SHADER_FRAGMENT, 16);
|
|
|
|
brw_reg dst0 = vgrf(bld, exp, BRW_TYPE_D);
|
|
brw_reg src0 = vgrf(bld, exp, BRW_TYPE_D);
|
|
|
|
bld.emit_minmax(dst0, src0, src0, BRW_CONDITIONAL_GE);
|
|
|
|
EXPECT_PROGRESS(brw_opt_algebraic, bld);
|
|
|
|
exp.MOV(dst0, src0);
|
|
|
|
EXPECT_SHADERS_MATCH(bld, exp);
|
|
}
|
|
|
|
TEST_F(algebraic_test, sel_a_a)
|
|
{
|
|
brw_builder bld = make_shader(MESA_SHADER_FRAGMENT, 16);
|
|
brw_builder exp = make_shader(MESA_SHADER_FRAGMENT, 16);
|
|
|
|
brw_reg dst0 = vgrf(bld, exp, BRW_TYPE_D);
|
|
brw_reg src0 = vgrf(bld, exp, BRW_TYPE_D);
|
|
|
|
bld.SEL(dst0, src0, src0)
|
|
->predicate = BRW_PREDICATE_NORMAL;
|
|
|
|
EXPECT_PROGRESS(brw_opt_algebraic, bld);
|
|
|
|
exp.MOV(dst0, src0);
|
|
|
|
EXPECT_SHADERS_MATCH(bld, exp);
|
|
}
|
|
|
|
TEST_F(algebraic_test, fmax_a_a)
|
|
{
|
|
brw_builder bld = make_shader(MESA_SHADER_FRAGMENT, 16);
|
|
|
|
brw_reg dst0 = vgrf(bld, BRW_TYPE_F);
|
|
brw_reg src0 = vgrf(bld, BRW_TYPE_F);
|
|
|
|
bld.emit_minmax(dst0, src0, src0, BRW_CONDITIONAL_GE);
|
|
|
|
/* SEL.GE may flush denorms to zero. We don't have enough information at
|
|
* this point in compilation to know whether or not it is safe to remove
|
|
* that.
|
|
*/
|
|
EXPECT_NO_PROGRESS(brw_opt_algebraic, bld);
|
|
}
|
|
|
|
TEST_F(algebraic_test, mad_with_all_immediates)
|
|
{
|
|
brw_builder bld = make_shader();
|
|
brw_builder exp = make_shader();
|
|
|
|
brw_reg dst = vgrf(bld, exp, BRW_TYPE_UD);
|
|
|
|
bld.MAD(dst, brw_imm_ud(2), brw_imm_ud(3), brw_imm_ud(4));
|
|
|
|
EXPECT_PROGRESS(brw_opt_algebraic, bld);
|
|
|
|
exp.MOV(dst, brw_imm_ud(14));
|
|
|
|
EXPECT_SHADERS_MATCH(bld, exp);
|
|
}
|
|
|
|
|