vect: Teach vectorizer how to handle bitfield accesses
authorAndre Vieira <andre.simoesdiasvieira@arm.com>
Tue, 11 Oct 2022 09:49:27 +0000 (10:49 +0100)
committerAndre Vieira <andre.simoesdiasvieira@arm.com>
Tue, 11 Oct 2022 09:49:27 +0000 (10:49 +0100)
commit25413fdb2ac24933214123e24ba165026452a6f2
treebebdf25b6e50f3f7da4fa924f74ad060dd0395f1
parent498ad738690b3c464f901d63dcd4d0f49a50dd00
vect: Teach vectorizer how to handle bitfield accesses

gcc/ChangeLog:

* tree-if-conv.cc (if_convertible_loop_p_1): Move ordering of loop bb's from
here...
(tree_if_conversion): ... to here.  Also call bitfield lowering when
appropriate.
(version_loop_for_if_conversion): Adapt to enable loop versioning when we only
need to lower bitfields.
(ifcvt_split_critical_edges): Relax condition of expected loop form as this is
checked earlier.
(get_bitfield_rep): New function.
(lower_bitfield): Likewise.
(bitfields_to_lower_p): Likewise.
(need_to_lower_bitfields): New global boolean.
(need_to_ifcvt): Likewise.
* tree-vect-data-refs.cc (vect_find_stmt_data_reference): Improve diagnostic
message.
* tree-vect-patterns.cc (vect_recog_temp_ssa_var): Add default value for last
parameter.
(vect_recog_bitfield_ref_pattern): New.
(vect_recog_bit_insert_pattern): New.

gcc/testsuite/ChangeLog:

* gcc.dg/vect/vect-bitfield-read-1.c: New test.
* gcc.dg/vect/vect-bitfield-read-2.c: New test.
* gcc.dg/vect/vect-bitfield-read-3.c: New test.
* gcc.dg/vect/vect-bitfield-read-4.c: New test.
* gcc.dg/vect/vect-bitfield-read-5.c: New test.
* gcc.dg/vect/vect-bitfield-read-6.c: New test.
* gcc.dg/vect/vect-bitfield-write-1.c: New test.
* gcc.dg/vect/vect-bitfield-write-2.c: New test.
* gcc.dg/vect/vect-bitfield-write-3.c: New test.
* gcc.dg/vect/vect-bitfield-write-4.c: New test.
* gcc.dg/vect/vect-bitfield-write-5.c: New test.
14 files changed:
gcc/testsuite/gcc.dg/vect/vect-bitfield-read-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-read-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-read-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-read-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-read-5.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-read-6.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-write-1.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-write-2.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-write-3.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-write-4.c [new file with mode: 0644]
gcc/testsuite/gcc.dg/vect/vect-bitfield-write-5.c [new file with mode: 0644]
gcc/tree-if-conv.cc
gcc/tree-vect-data-refs.cc
gcc/tree-vect-patterns.cc