On Fri, Nov 22, 2013 at 11:03:22AM +0000, Bingfeng Mei wrote: > Well, in your modified example, it is still due to jump threading that produce > code of bad control flow that cannot be if-converted and vectorized, though in > tree-vrp pass this time. > > Try this > ~/install-4.8/bin/gcc vect-ifconv-2.c -O2 -fdump-tree-ifcvt-details > -ftree-vectorize -save-temps -fno-tree-vrp > > The code can be vectorized. > > Grep "threading" in gcc, it seems that dom and vrp passes are two places that > apply > jump threading. Any other place? I think we need an target hook to control > it. >
You can effectively disable jump-threading using: --param max-jump-thread-duplication-stmts=0 (grep dump files for "Jumps threaded") I don't see Andrew's code vectorized even with jump-threading disabled so I think Andrew is correct and this is some other missed optimization. James