https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120164
--- Comment #9 from Tamar Christina <tnfchris at gcc dot gnu.org> --- (In reply to rguent...@suse.de from comment #8) > On Thu, 8 May 2025, tnfchris at gcc dot gnu.org wrote: > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=120164 > > > > --- Comment #7 from Tamar Christina <tnfchris at gcc dot gnu.org> --- > > (In reply to Richard Biener from comment #6) > > > (In reply to Tamar Christina from comment #5) > > > > The given example is an easy one to drop, but I wonder what would > > > > happen if > > > > the block had other instructions too > > > > > > > > void foo(double * restrict a, double * restrict b, int n){ > > > > int i; > > > > for(i=0; i<n; ++i){ > > > > if (i % 1024 == 0) > > > > { > > > > __builtin_prefetch(&(b[i+1024])); > > > > a[i] = a[i] + b[i]; > > > > } > > > > } > > > > } > > > > > > > > would block if-conversion if we don't drop it early enough. > > > > > > I'd simply ignore prefetches during if-conversion analysis and drop them > > > during transform. > > > > Yeah that's what we did in > > r15-1211-gadcc815a01ae009d2768b6afb546e357bd37bbd2 > > though. So I guess this is just a missing case during analysis. > > That didn't touch if-conversion at all. Oh, indeed, my bad. I had confused the change for the masked SIMD calls with that one in my head :)