diff --git a/.pick_status.json b/.pick_status.json index 6c70329ec72..11a3f7105a6 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -2954,7 +2954,7 @@ "description": "brw: Use brw_reg_is_arf in update_for_reads", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "0d144821f0f7647ab377e629599b17dd24a2fe13", "notes": null diff --git a/src/intel/compiler/brw/brw_analysis_def.cpp b/src/intel/compiler/brw/brw_analysis_def.cpp index ae94219e9a9..ba7bb478f8a 100644 --- a/src/intel/compiler/brw/brw_analysis_def.cpp +++ b/src/intel/compiler/brw/brw_analysis_def.cpp @@ -61,9 +61,9 @@ brw_def_analysis::update_for_reads(const brw_idom_tree &idom, * and flags make the destination not a def, as we don't track those. */ if (inst->src[i].file == ARF && - (nr == BRW_ARF_ADDRESS || - nr == BRW_ARF_ACCUMULATOR || - nr == BRW_ARF_FLAG)) + (brw_reg_is_arf(inst->src[i], BRW_ARF_ADDRESS) || + brw_reg_is_arf(inst->src[i], BRW_ARF_ACCUMULATOR) || + brw_reg_is_arf(inst->src[i], BRW_ARF_FLAG))) mark_invalid(inst->dst); continue; diff --git a/src/intel/compiler/brw/test_def_analysis.cpp b/src/intel/compiler/brw/test_def_analysis.cpp index f2da188543c..34d6715b8da 100644 --- a/src/intel/compiler/brw/test_def_analysis.cpp +++ b/src/intel/compiler/brw/test_def_analysis.cpp @@ -67,3 +67,27 @@ TEST_F(defs_test, dst_and_src_are_acc0) EXPECT_EQ(inst, defs.get(dst0)); } + +TEST_F(defs_test, src_is_acc2) +{ + set_gfx_verx10(125); + + 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); + brw_reg acc2 = retype(brw_acc_reg(16), BRW_TYPE_F); + + acc2.nr = BRW_ARF_ACCUMULATOR + 2; + + bld.MOV(src0, brw_imm_f(1.0)); + bld.MOV(acc2, brw_imm_f(2.0)); + bld.MUL(dst0, src0, acc2); + + brw_calculate_cfg(*bld.shader); + brw_validate(*bld.shader); + + const brw_def_analysis &defs = bld.shader->def_analysis.require(); + + EXPECT_EQ(NULL, defs.get(dst0)); +}