Richard Biener <richard.guent...@gmail.com> writes:
> On Thu, Dec 20, 2018 at 2:43 PM Joern Wolfgang Rennecke <g...@amylaar.uk> 
> wrote:
>>
>> eSi-RISC has vector permute functionality, but no unaligned loads. We
>> see execution failures on gcc.dg/vect/slp-perm-12.c because loop
>> versioning is used to make the tptr aligned for the first loop
>> iteration, and then with a step of originally 11, 22 after
>> vectorization, and a vector alignment of 8 bytes, the second iteration
>> causes an AlignmentError exception.
>> The attached patch to tree-vect-data-refs.c suppresses attempts to align
>> data accesses where the
>> step alignment times the vectorization factor is insufficient to sustain
>> the alignment during the loop.
>> Bootstrapped and regression tested on x86_64-pc-linux-gnu .
>>
>> I have also attached a matching testsuite patch to not expect SLP
>> vectorization for slp-perm-12 when
>> no unaligned loads are available, although in terms of testing, I can
>> only say that it works for us.
>
> vect_compute_data_ref_alignment uses DR_TARGET_ALIGNMENT
> and DR_STEP_ALIGNMENT () % dr_target-alignment == 0 as check.
>
> I think it's preferable to use the same or similar values for the desired
> alignment.

Yeah, I agree testing for a multiple is better than maybe_lt,
and that we should be using DR_TARGET_ALIGNMENT rather than
TYPE_ALIGN_UNIT.

(TYPE_ALIGN_UNIT is the ABI alignment, which might be higher or lower
than the alignment the vectoriser is aiming for.  And I think the
reasons for bailing out apply whenever the vectoriser can't reach
the alignment it's aiming for, even if the alignment isn't needed
for correctness.)

Thanks,
Richard

Reply via email to