On Fri, Nov 22, 2013 at 6:13 PM, Bingfeng Mei <b...@broadcom.com> wrote: > So if we are about to fix this in if-conversion, we need to do both in tree & > rtl as both ifcvt & ce passes cannot handle it. > > I am still not convinced jump threading is good for target with predicated > execution (assuming no fix for if-conversion). I am doing benchmarking on our > target now.
Note that the GIMPLE if-conversion issue is simply a stupidity in its implementation (not a trivial change to fix unless you want to split critical edges just for sake of its analysis(!) phase). Richard. > Bingfeng > > -----Original Message----- > From: Jeff Law [mailto:l...@redhat.com] > Sent: 22 November 2013 16:58 > To: Bingfeng Mei; Andrew Pinski > Cc: gcc@gcc.gnu.org > Subject: Re: Jump threading in tree dom pass prevents if-conversion & > following vectorization > > On 11/22/13 04:03, 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. > No no. The right thing to do is fix if-conversion. > > jeff > >