This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [02/nn] Add more vec_duplicate simplifications
- From: Christophe Lyon <christophe dot lyon at linaro dot org>
- To: Jeff Law <law at redhat dot com>
- Cc: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Richard Sandiford <richard dot sandiford at linaro dot org>
- Date: Fri, 10 Nov 2017 10:38:52 +0100
- Subject: Re: [02/nn] Add more vec_duplicate simplifications
- Authentication-results: sourceware.org; auth=none
- References: <87wp3mxgir.fsf@linaro.org> <87o9oyxgdf.fsf@linaro.org> <fa040c52-37c5-cd6d-a99f-c5dbbe696506@redhat.com>
On 25 October 2017 at 18:29, Jeff Law <law@redhat.com> wrote:
> On 10/23/2017 05:17 AM, Richard Sandiford wrote:
>> This patch adds a vec_duplicate_p helper that tests for constant
>> or non-constant vector duplicates. Together with the existing
>> const_vec_duplicate_p, this complements the gen_vec_duplicate
>> and gen_const_vec_duplicate added by a previous patch.
>>
>> The patch uses the new routines to add more rtx simplifications
>> involving vector duplicates. These mirror simplifications that
>> we already do for CONST_VECTOR broadcasts and are needed for
>> variable-length SVE, which uses:
>>
>> (const:M (vec_duplicate:M X))
>>
>> to represent constant broadcasts instead. The simplifications do
>> trigger on the testsuite for variable duplicates too, and in each
>> case I saw the change was an improvement. E.g.:
>>
> [ snip ]
>
>>
>> The best way of testing the new simplifications seemed to be
>> via selftests. The patch cribs part of David's patch here:
>> https://gcc.gnu.org/ml/gcc-patches/2016-07/msg00270.html .
> Cool. I really wish I had more time to promote David's work by adding
> selftests to various things. There's certainly cases where it's the
> most direct and useful way to test certain bits of lower level
> infrastructure we have. Glad to see you found it useful here.
>
>
>
>>
>>
>> 2017-10-23 Richard Sandiford <richard.sandiford@linaro.org>
>> David Malcolm <dmalcolm@redhat.com>
>> Alan Hayward <alan.hayward@arm.com>
>> David Sherwood <david.sherwood@arm.com>
>>
>> gcc/
>> * rtl.h (vec_duplicate_p): New function.
>> * selftest-rtl.c (assert_rtx_eq_at): New function.
>> * selftest-rtl.h (ASSERT_RTX_EQ): New macro.
>> (assert_rtx_eq_at): Declare.
>> * selftest.h (selftest::simplify_rtx_c_tests): Declare.
>> * selftest-run-tests.c (selftest::run_tests): Call it.
>> * simplify-rtx.c: Include selftest.h and selftest-rtl.h.
>> (simplify_unary_operation_1): Recursively handle vector duplicates.
>> (simplify_binary_operation_1): Likewise. Handle VEC_SELECTs of
>> vector duplicates.
>> (simplify_subreg): Handle subregs of vector duplicates.
>> (make_test_reg, test_vector_ops_duplicate, test_vector_ops)
>> (selftest::simplify_rtx_c_tests): New functions.
Hi Richard,
I've noticed that this patch (r254294) causes
FAIL: gcc.dg/vect/vect-126.c (internal compiler error)
FAIL: gcc.dg/vect/vect-126.c -flto -ffat-lto-objects (internal compiler error)
on arm* targets.
Sorry if this has been reported before, I've restarted validations
only recently,
so the process is still catching up.
gcc.log has this:
spawn -ignore SIGHUP
/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabihf/gcc3/gcc/xgcc
-B/aci-gcc-fsf/builds/gcc-fsf-gccsrc/obj-arm-none-linux-gnueabihf/gcc3/gcc/
/gcc/testsuite/gcc.dg/vect/vect-126.c -fno-diagnostics-show-caret
-fdiagnostics-color=never -ffast-math -ftree-vectorize
-fno-vect-cost-model -fno-common -O2 -fdump-tree-vect-details -S -o
vect-126.s
during RTL pass: combine
/gcc/testsuite/gcc.dg/vect/vect-126.c: In function 'f5':
/gcc/testsuite/gcc.dg/vect/vect-126.c:53:1: internal compiler error:
in neon_valid_immediate, at config/arm/arm.c:11850
0xf3e6c8 neon_valid_immediate
/gcc/config/arm/arm.c:11850
0xf3ea9a neon_immediate_valid_for_move(rtx_def*, machine_mode, rtx_def**, int*)
/gcc/config/arm/arm.c:11968
0xf40a20 arm_rtx_costs_internal
/gcc/config/arm/arm.c:10695
0xf40a20 arm_rtx_costs
/gcc/config/arm/arm.c:10946
0xb113ef rtx_cost(rtx_def*, machine_mode, rtx_code, int, bool)
/gcc/rtlanal.c:4187
0xb1169f set_src_cost
/gcc/rtl.h:2700
0xb1169f pattern_cost(rtx_def*, bool)
/gcc/rtlanal.c:5315
0x128bb3b combine_validate_cost
/gcc/combine.c:893
0x128bb3b try_combine
/gcc/combine.c:4113
0x12923d5 combine_instructions
/gcc/combine.c:1452
0x12926ed rest_of_handle_combine
/gcc/combine.c:14795
0x12926ed execute
/gcc/combine.c:14840
Please submit a full bug report,
Thanks,
Christophe
> Thanks for the examples of how this affects various targets. Seems like
> it ought to be a consistent win when they trigger.
>
> jeff