On Fri, Aug 30, 2013 at 1:28 AM, Xinliang David Li <davi...@google.com> wrote: > I was debugging a runtime failure of SPEC06 xalancbmk built with LIPO. > Using -fdisable-<pass> option pinpoints the problem in slp vectorize > pass on a particular function. dbgcnt support is added to to track > down the individual BB, but it fails even when the dbg count is set > to 0. > > It turns out that no BB was actually vectorized for that function, but > turning on/off slp-vectorize does make a difference in generated code > -- the only difference between the good and bad case is stack layout. > The problem is in the alignment analysis phase -- which > speculatively changes the base declaration's alignment regardless > whether the vectorization transformation will be performed or not > later. > > The attached patch fixes the problem. Testing is ok. Ok for trunk?
Not in this form. I'd rather not put extra fields in the data-refs this way. (As for the xalancbmk runtime problem - doesn't this patch just paper over the real issue?) For BB SLP you still adjust DR bases that do not take part in vectorization - the DR vector contains all refs in the BB, not just those in the SLP instances we are going to vectorize. So the commit of the re-aligning decision should be done from where we vectorize the DR, in vectorizable_load/store in its transform phase. If we decide to integrate the fields into the data-ref then the analysis and commit parts should go into the data-ref machinery as well. Otherwise the vectorizer should use data-ref->aux or some other way to hang off its private data. Other than that, modifying alignment of variables that are not vectorized is indeed a bug worth fixing. Richard. > thanks, > > David