http://gcc.gnu.org/bugzilla/show_bug.cgi?id=57275
--- Comment #4 from Andrey Turetskiy <andrey.turetskiy at gmail dot com> --- > - return false; > + return true; Isn't it too strong? Shouldn't it be like this: return !(DR_IS_READ (dra) && DR_IS_READ (drb)); Gather is a load operation. If another statement is load too, I think the loop still can be vectorized.