On 11/30/20 8:29 AM, Richard Sandiford via Gcc-patches wrote:
> dse.c:find_shift_sequence tries to represent a store and load
> back as a shift right followed by a truncation.  It therefore
> needs to find an integer mode in which to do the shift right.
> The loop it uses has the form:
>
>   FOR_EACH_MODE_FROM (new_mode_iter,
>                     smallest_int_mode_for_size (GET_MODE_BITSIZE (read_mode)))
>
> which implicitly assumes that read_mode has an equivalent integer mode.
> As shown in the testcase, not all modes have such an integer mode.
>
> This patch just makes the code start from the smallest integer mode and
> skip modes that are too small.  The loop already breaks at the first
> mode wider than word_mode.
>
> Tested on aarch64-linux-gnu and x86_64-linux-gnu.  OK for trunk and
> GCC 10 branch?
>
> Richard
>
>
> gcc/
>       PR rtl-optimization/98037
>       * dse.c (find_shift_sequence): Iterate over all integers and
>       skip modes that are too small.
>
> gcc/testsuite/
>       PR rtl-optimization/98037
>       * gcc.target/aarch64/sve/acle/general/pr98037.c: New test.
OK
jeff

Reply via email to