[Mesa-dev] [Mesa-stable] [PATCH] i965/vec4: Fix null destination register in 3-source instructions
Tapani Pälli
tapani.palli at intel.com
Wed Apr 11 10:00:13 UTC 2018
On 04/11/2018 11:02 AM, Tapani Pälli wrote:
>
> On 04/11/2018 10:42 AM, Juan A. Suarez Romero wrote:
>> On Fri, 2018-03-23 at 13:54 -0700, Ian Romanick wrote:
>>> From: Ian Romanick <ian.d.romanick at intel.com>
>>>
>>> A recent commit (see below) triggered some cases where conditional
>>> modifier propagation and dead code elimination would cause a MAD
>>> instruction like the following to be generated:
>>>
>>> mad.l.f0 null, ...
>>>
>>> Matt pointed out that fs_visitor::fixup_3src_null_dest() fixes cases
>>> like this in the scalar backend. This commit basically ports that code
>>> to the vec4 backend.
>>>
>>> NOTE: I have sent a couple tests to the piglit list that reproduce this
>>> bug *without* the commit mentioned below. This commit fixes those
>>> tests.
>>>
>>> Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
>>> Cc: Tapani Pälli <tapani.palli at intel.com>
>>> Cc: Matt Turner <mattst88 at gmail.com>
>>> Cc: mesa-stable at lists.freedesktop.org
>>> Fixes: ee63933a7 ("nir: Distribute binary operations with constants
>>> into bcsel")
>>> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105704
>>
>>
>> I need a clarification with this commit for inclusion on next 18.0 stable
>> release.
>>
>> The commit was nominated for stable, but at the same time it has a
>> "Fixes" tag.
>>
>> The commit applies cleanly in the stable branch, but the commit it fixes
>> (ee63933a7) was not landed in branch.
>>
>>
>> So I'd like to know if this patch should be included in stable or not.
>
> Yes it should, it will make some Piglit tests pass (see Piglit
> 5194fc31b). It fixes existing issue that got exposed by Mesa commit
> ee63933a7.
What I meant to say is 'more exposed', the issue is already triggered
without that Mesa commit so this patch fixes existing issue.
>
>>
>> J.A.
>>
>>
>>
>>> ---
>>> src/intel/compiler/brw_vec4.cpp | 26 ++++++++++++++++++++++++++
>>> src/intel/compiler/brw_vec4.h | 1 +
>>> 2 files changed, 27 insertions(+)
>>>
>>> diff --git a/src/intel/compiler/brw_vec4.cpp
>>> b/src/intel/compiler/brw_vec4.cpp
>>> index e483814..fb8ffee 100644
>>> --- a/src/intel/compiler/brw_vec4.cpp
>>> +++ b/src/intel/compiler/brw_vec4.cpp
>>> @@ -1945,6 +1945,30 @@ is_align1_df(vec4_instruction *inst)
>>> }
>>> }
>>> +/**
>>> + * Three source instruction must have a GRF/MRF destination register.
>>> + * ARF NULL is not allowed. Fix that up by allocating a temporary GRF.
>>> + */
>>> +void
>>> +vec4_visitor::fixup_3src_null_dest()
>>> +{
>>> + bool progress = false;
>>> +
>>> + foreach_block_and_inst_safe (block, vec4_instruction, inst, cfg) {
>>> + if (inst->is_3src(devinfo) && inst->dst.is_null()) {
>>> + const unsigned size_written = type_sz(inst->dst.type);
>>> + const unsigned num_regs = DIV_ROUND_UP(size_written,
>>> REG_SIZE);
>>> +
>>> + inst->dst = retype(dst_reg(VGRF, alloc.allocate(num_regs)),
>>> + inst->dst.type);
>>> + progress = true;
>>> + }
>>> + }
>>> +
>>> + if (progress)
>>> + invalidate_live_intervals();
>>> +}
>>> +
>>> void
>>> vec4_visitor::convert_to_hw_regs()
>>> {
>>> @@ -2696,6 +2720,8 @@ vec4_visitor::run()
>>> OPT(scalarize_df);
>>> }
>>> + fixup_3src_null_dest();
>>> +
>>> bool allocated_without_spills = reg_allocate();
>>> if (!allocated_without_spills) {
>>> diff --git a/src/intel/compiler/brw_vec4.h
>>> b/src/intel/compiler/brw_vec4.h
>>> index 39ce51c..71880db 100644
>>> --- a/src/intel/compiler/brw_vec4.h
>>> +++ b/src/intel/compiler/brw_vec4.h
>>> @@ -158,6 +158,7 @@ public:
>>> void opt_set_dependency_control();
>>> void opt_schedule_instructions();
>>> void convert_to_hw_regs();
>>> + void fixup_3src_null_dest();
>>> bool is_supported_64bit_region(vec4_instruction *inst, unsigned
>>> arg);
>>> bool lower_simd_width();
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/mesa-dev
More information about the mesa-dev
mailing list