Rewrite more vector loads to scalar loads
authorRichard Biener <rguenther@suse.de>
Fri, 30 Jul 2021 09:06:50 +0000 (11:06 +0200)
committerRichard Biener <rguenther@suse.de>
Wed, 4 Aug 2021 10:38:03 +0000 (12:38 +0200)
commit2724d1bba6b36451404811fba3244f8897717ef3
tree82eaab401387f80c8bc760e0c1bf01d0b57102c1
parent87a0b607e40f8122c7fc45d496ef48799fe11550
Rewrite more vector loads to scalar loads

This teaches forwprop to rewrite more vector loads that are only
used in BIT_FIELD_REFs as scalar loads.  This provides the
remaining uplift to SPEC CPU 2017 510.parest_r on Zen 2 which
has CPU gathers disabled.

In particular vector load + vec_unpack + bit-field-ref is turned
into (extending) scalar loads which avoids costly XMM/GPR
transitions.  To not conflict with vector load + bit-field-ref
+ vector constructor matching to vector load + shuffle the
extended transform is only done after vector lowering.

2021-07-30  Richard Biener  <rguenther@suse.de>

* tree-ssa-forwprop.c (pass_forwprop::execute): Split
out code to decompose vector loads ...
(optimize_vector_load): ... here.  Generalize it to
handle intermediate widening and TARGET_MEM_REF loads
and apply it to loads with a supported vector mode as well.
gcc/tree-ssa-forwprop.c