Hi Kyrill,

On 7 October 2016 at 17:00, Kyrill Tkachov <kyrylo.tkac...@foss.arm.com> wrote:
> Hi Christophe,
>
>
> On 07/09/16 21:05, Christophe Lyon wrote:
>>
>> Hi,
>>
>> The attached patch is a first part to solve PR 67591: it removes
>> several occurrences of "IT blocks containing 32-bit Thumb
>> instructions are deprecated in ARMv8" messages in the
>> gcc/g++/libstdc++/fortran testsuites.
>>
>> It does not remove them all yet. This patch only modifies the
>> *cmp_and, *cmp_ior, *ior_scc_scc, *ior_scc_scc_cmp,
>> *and_scc_scc and *and_scc_scc_cmp patterns.
>> Additional work is required in sub_shiftsi etc, at least.
>> I've started looking at these, but I decided I could already
>> post this self-contained patch to check if this implementation
>> is OK.
>>
>> Regarding *cmp_and and *cmp_ior patterns, the addition of the
>> enabled_for_depr_it attribute is aggressive in the sense that it keeps
>> only the alternatives with 'l' and 'Py' constraints, while in some
>> cases the constraints could be relaxed. Indeed, these 2 patterns can
>> swap their input comparisons, meaning that any of them can be emitted
>> in the IT-block, and is thus subject to the ARMv8 deprecation.
>> The generated code is possibly suboptimal in the cases where the
>> operands are not swapped, since 'r' could be used.
>>
>> Cross-tested on arm-none-linux-gnueabihf with -mthumb/-march=armv8-a
>> and --with-cpu=cortex-a57 --with-mode=thumb, showing only improvements:
>>
>> http://people.linaro.org/~christophe.lyon/cross-validation/gcc-test-patches/239850-depr-it-4/report-build-info.html
>>
>> Bootstrapped OK on armv8l HW.
>>
>> Is this OK?
>>
>> Thanks,
>>
>> Christophe
>
>
>  (define_insn_and_split "*ior_scc_scc"
> -  [(set (match_operand:SI 0 "s_register_operand" "=Ts")
> +  [(set (match_operand:SI 0 "s_register_operand" "=Ts,Ts")
>         (ior:SI (match_operator:SI 3 "arm_comparison_operator"
> -                [(match_operand:SI 1 "s_register_operand" "r")
> -                 (match_operand:SI 2 "arm_add_operand" "rIL")])
> +                [(match_operand:SI 1 "s_register_operand" "r,l")
> +                 (match_operand:SI 2 "arm_add_operand" "rIL,lPy")])
>                 (match_operator:SI 6 "arm_comparison_operator"
> -                [(match_operand:SI 4 "s_register_operand" "r")
> -                 (match_operand:SI 5 "arm_add_operand" "rIL")])))
> +                [(match_operand:SI 4 "s_register_operand" "r,l")
> +                 (match_operand:SI 5 "arm_add_operand" "rIL,lPy")])))
>
> Can you please put the more restrictive alternatives (lPy) first?
> Same with the other patterns your patch touches.
> Ok with that change if a rebased testing run is ok.
> Sorry for the delay in reviewing.
>

OK, I will update my patch accordingly.

However, when I discussed this with Ramana during the Cauldron,
he requested benchmark results. So far, I was able to run spec2006
on an APM machine, and I'm seeing performance changes in the
range 11% improvement (465.tonto) to 7% degradation (433.milc).

Would that be acceptable?

The number of warnings (IT blocks containing 32-bit Thumb instructions
are deprecated in ARMv8)
was 712 without my patch and 122 with it. (using the hosts's binutils
2.24/ubuntu).
I expected some warning, since as I said earlier other patterns need
to be updated.

Christophe


> Thanks for improving this area!
> Kyrill
>

Reply via email to