On Sat, Nov 30, 2019 at 11:23:52PM +0300, Pavel Begunkov wrote: > bvec_iter_advance() is quite popular, but compilers fail to do proper > alias analysis and optimise it good enough. The assembly is checked > for gcc 9.2, x86-64. > > - remove @iter->bi_size from min(...), as it's always less than @bytes. > Modify at the beginning and forget about it. > > - the compiler isn't able to collapse memory dependencies and remove > writes in the loop. Help it by explicitely using local vars. > > Signed-off-by: Pavel Begunkov <asml.silence@xxxxxxxxx> > --- > > v2: simplify code (Arvind Sankar) > Thanks :) Signed-off-by: Arvind Sankar <nivedita@xxxxxxxxxxxx> Btw, I discovered that gcc 9.2 doesn't optimize away the second comparison in something like m = min(a,b); return m>a; So the WARN_ONCE bit doesn't get optimized away even in cases like bio_for_each_bvec where it's guaranteed at compile-time to not trigger.