https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120219
Jan Hubicka <hubicka at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Depends on| |119902
--- Comment #5 from Jan Hubicka <hubicka at gcc dot gnu.org> ---
PR119919 was introduced by fixing part costs of promote/demote which disabled
vectorization of:
int a[9*9];
bool b[9];
void test()
{
for (int i = 0; i < 9; i++)
{
b[i] = a[i*9] != 0;
}
}
The underlying problem is bad costing of open-coded scatter. Cost of open-coded
scatter incorrectly assumes that offsets will be loaded as vectors and
converted to integers for address computation, while real code does all address
computations in integers, saving a lot of sse->int conversions. This is
PR119902.
My patch for pr119919 fixed other problem of costing this conversion which made
the code to barely pass the cost threshold. Later my commit
g:2c8d632d9ed4e3aeee2156ba17fe631ecbc90dbf fixed float<->int conversion costs
which made the cost test to fail again at generic tuning but not at native
tuning.
But still I am not sure how this is related to Andrew's patch and arm
performance can not be affected by these changes.
Referenced Bugs:
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119902
[Bug 119902] open-coded scatter/gather should not account vec_to_scalar cost