[Bug target/96827] [10/11 Regression] __m128i from _mm_set_epi32 is backwards with -O3
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Fri Aug 28 15:29:35 GMT 2020
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96827
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Last reconfirmed| |2020-08-28
Summary|__m128i from _mm_set_epi32 |[10/11 Regression] __m128i
|is backwards with -O3 |from _mm_set_epi32 is
| |backwards with -O3
Ever confirmed|0 |1
CC| |avieira at gcc dot gnu.org,
| |joel.hutton at arm dot com
Target Milestone|--- |10.3
Priority|P3 |P2
Status|UNCONFIRMED |NEW
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Ok, I can reproduce that one, started with
r10-4336-g818b3293f4545d899148810f4f7d676b81e989dd
The first difference between the commit right before that one and r10-4336 is
in slp1 pass:
_5 = dude_[3];
_6 = (int) _5;
_7 = dude_[2];
_8 = (int) _7;
_9 = dude_[1];
_10 = (int) _9;
+ vect__11.11_30 = MEM <vector(4) unsigned int> [(unsigned int *)&dude_];
_11 = dude_[0];
+ vect__12.12_40 = VIEW_CONVERT_EXPR<vector(4) int>(vect__11.11_30);
_12 = (int) _11;
- _22 = {_6, _8, _10, _12};
+ _22 = vect__12.12_40;
_28 = VIEW_CONVERT_EXPR<__m128i>(_22);
*dude_23(D) = _28;
dude_ ={v} {CLOBBER};
and that changes the element ordering in the _22 vector, previously it was
dude_[3], dude_[2], dude_[1], dude_[0], newly it is read from the memory which
is the exact opposite order. The _22 = {_6, _8, _10, _12} is what is in the IL
before slp1, so clearly this is a SLP introduced breakage.
More information about the Gcc-bugs
mailing list