This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [02/nn] Add more vec_duplicate simplifications


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]