[Bug tree-optimization/21998] (cond ? result1 : result2) is vectorized, where equivalent if-syntax isn't (store)

2023-08-04 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=21998

--- Comment #7 from Andrew Pinski  ---
We can vectorize test2 using mask stores 

[Bug tree-optimization/21998] (cond ? result1 : result2) is vectorized, where equivalent if-syntax isn't (store)

2013-03-27 Thread rguenth at gcc dot gnu.org


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21998



--- Comment #6 from Richard Biener  2013-03-27 
11:32:19 UTC ---

Note that the concern is also that a1 may be mapped to a read-only segment,

so introducing a store data-race may trap.  That's probably out of the C99

language standards scope, but the middle-end has to care about this

possibility.


[Bug tree-optimization/21998] (cond ? result1 : result2) is vectorized, where equivalent if-syntax isn't (store)

2012-07-13 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21998

--- Comment #5 from Richard Guenther  2012-07-13 
11:28:45 UTC ---
We have two related flags here, -ftree-loop-if-convert-stores, and
--param allow-store-data-races.  We can adjust the former to honor the
latter if specified and then eventually vectorize this, too.


[Bug tree-optimization/21998] (cond ? result1 : result2) is vectorized, where equivalent if-syntax isn't (store)

2012-07-13 Thread steven at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21998

Steven Bosscher  changed:

   What|Removed |Added

 CC||steven at gcc dot gnu.org

--- Comment #4 from Steven Bosscher  2012-07-13 
11:04:13 UTC ---
(In reply to comment #1)
> They are not equivalent to GCC, the first always stores, the second has a
> conditional store.

Just to clarify, 7 years later: To GCC the two procedures are not equivalent.

In the first procedure,
 a1[i] = (a1[i] == v1 ? v2 : a1[i]);

expands as:

  if (a1[i] == v1)
a1[i] = v2;
  else
a1[i] = a1[i];

while the second procedure expands just as-is:
  if (a1[i] == v1)
a1[i] = v2;

In the first case, there will always be a store to a1[i], in the second example
this is not the case. Introducing new stores is not allowed, to avoid
introducing data races, see http://gcc.gnu.org/wiki/Atomic/GCCMM/DataRaces.

I'm not sure how GCC should transform the second procedure to allow the loop to
be vectorized.


[Bug tree-optimization/21998] (cond ? result1 : result2) is vectorized, where equivalent if-syntax isn't (store)

2012-07-13 Thread rguenth at gcc dot gnu.org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21998

Richard Guenther  changed:

   What|Removed |Added

 Blocks||53947

--- Comment #3 from Richard Guenther  2012-07-13 
08:54:14 UTC ---
Link to vectorizer missed-optimization meta-bug.


[Bug tree-optimization/21998] (cond ? result1 : result2) is vectorized, where equivalent if-syntax isn't (store)

2005-06-19 Thread pinskia at gcc dot gnu dot org

--- Additional Comments From pinskia at gcc dot gnu dot org  2005-06-19 
14:24 ---
Confirmed.

-- 
   What|Removed |Added

 Status|UNCONFIRMED |NEW
 Ever Confirmed||1
   Last reconfirmed|-00-00 00:00:00 |2005-06-19 14:24:25
   date||
Summary|(cond ? result1 : result2)  |(cond ? result1 : result2)
   |is vectorized, where|is vectorized, where
   |equivalent if-syntax isn't  |equivalent if-syntax isn't
   ||(store)


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21998