http://gcc.gnu.org/bugzilla/show_bug.cgi?id=50789
Ira Rosen <irar at il dot ibm.com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |irar at il dot ibm.com --- Comment #4 from Ira Rosen <irar at il dot ibm.com> 2011-10-19 09:38:06 UTC --- (In reply to comment #3) > (In reply to comment #2) > > We have something similar for SLP: if an access is not affine we just fill > > in > > what we can. But I don't really understand what can be filled in for f3/f4. > > Well, we should be able to at least use TBAA in that case: > void > f5 (void) > { > int i; > for (i = 0; i < N; i++) > k[i] += *l[i]; > } > should be vectorizable too, as l[i] can't overlap k[i] (normal data dep) and > *l[i], being float read, can't alias with k[i] either (int). I meant that we can't decompose *l[i] any further. > With these gather accesses we can't do any runtime alias checking before the > loop, either we can prove there is no alias, or we can't vectorize. Agreed. > > > Can't we treat it as an unconditional load for the dr analysis purposes? > > For that surely, but the conditional loads have other problems for the > vectorizer, currently that means control flow within the loop. We'd need to > transform it (perhaps temporarily or using pattern recognizer) to something > without control flow that would still be clear on that the load is only > conditional. Something like this http://gcc.gnu.org/ml/gcc-patches/2010-11/msg00304.html ?