https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104582
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |jakub at gcc dot gnu.org
Summary|Unoptimal code for __negdi2 |[11/12 Regression]
|(and others) from libgcc2 |Unoptimal code for __negdi2
|due to unwanted |(and others) from libgcc2
|vectorization |due to unwanted
| |vectorization
Priority|P3 |P2
Target Milestone|--- |11.3
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
With -O3 started with
r11-3204-gc9de716a59c873859df3b3e1fbb993200fce5a73
With -O2 most likely with
r12-4240-g2b8453c401b699ed93c085d0413ab4b5030bcdb8
Not sure if it is better not to vectorize it or be able to undo the
vectorization.
In particular in this case, *.optimized dump has:
_14 = {_1, _5};
_8 = VIEW_CONVERT_EXPR<__int128>(_14);
where
vector(2) long int _14;
I guess it depends on how _8 is then used, if it is going to be used in some
vector context, perhaps the above can be a win, but when the __int128 is
returned as __int128, on targets that return in a pair of registers that is
never beneficial, I bet if it is stored into memory, it will be hardly ever
beneficial etc.