Richard Biener <richard.guent...@gmail.com> writes: > On Mon, Sep 18, 2017 at 1:58 PM, Richard Sandiford > <richard.sandif...@linaro.org> wrote: >> The vectoriser aligned vectors to TYPE_ALIGN unconditionally, although >> there was also a hard-coded assumption that this was equal to the type >> size. This was inconvenient for SVE for two reasons: >> >> - When compiling for a specific power-of-2 SVE vector length, we might >> want to align to a full vector. However, the TYPE_ALIGN is governed >> by the ABI alignment, which is 128 bits regardless of size. >> >> - For vector-length-agnostic code it doesn't usually make sense to align, >> since the runtime vector length might not be a power of two. Even for >> power of two sizes, there's no guarantee that aligning to the previous >> 16 bytes will be an improveent. >> >> This patch therefore adds a target hook to control the preferred >> vectoriser (as opposed to ABI) alignment. >> >> Tested on aarch64-linux-gnu, x86_64-linux-gnu and powerpc64le-linux-gnu. >> Also tested by comparing the testsuite assembly output on at least one >> target per CPU directory. OK to install? > > Did you specifically choose to pass the hook a vector type rather than > a mode?
It seemed like the safest thing to do for the default implementation, e.g. in case we're vectorising "without SIMD" and thus without an underlying vector mode. I agree it probably doesn't make much difference for non-default implementations. > I suppose in peeling for alignment the target should be able to > prevent peeling by returning element alignment from the hook? Yeah. This is what the SVE port does in the default vector-length agnostic mode, and might also make sense in fixed-length mode. Maybe it would be useful for other targets too, if unaligned accesses have a negligible penalty for them. Thanks, Richard > Ok. > > Thanks, > Richard.