On Wed, Sep 10, 2014 at 3:12 PM, Kirill Yukhin <[email protected]> wrote:
> Hello,
> Patch in the bottom extends gather instructions support.
>
> Bootstrapped.
> AVX-512* tests on top of patch-set all pass
> under simulator.
>
> Is it ok for trunk?
>
> gcc/
> * config/i386/sse.md
> (define_expand "<avx512>_gathersi<mode>"): Rename from
> "avx512f_gathersi<mode>".
> (define_insn "*avx512f_gathersi<mode>"): Use VI48F.
> (define_insn "*avx512f_gathersi<mode>_2"): Ditto.
> (define_expand "<avx512>_gatherdi<mode>"): Rename from
> "avx512f_gatherdi<mode>".
> (define_insn "*avx512f_gatherdi<mode>"): Use VI48F.
> (define_insn "*avx512f_gatherdi<mode>_2"): Use VI48F, add 128/256-bit
> wide versions.
> (define_expand "<avx512>_scattersi<mode>"): Rename from
> "avx512f_scattersi<mode>".
> (define_insn "*avx512f_scattersi<mode>"): Use VI48F.
> (define_expand "<avx512>_scatterdi<mode>"): Rename from
> "avx512f_scatterdi<mode>".
> (define_insn "*avx512f_scatterdi<mode>"): Use VI48F.
>
...
> (define_insn "*avx512f_gatherdi<mode>_2"
> - [(set (match_operand:VI48F_512 0 "register_operand" "=&v")
> - (unspec:VI48F_512
> + [(set (match_operand:VI48F 0 "register_operand" "=&v")
> + (unspec:VI48F
> [(pc)
> (match_operand:QI 6 "register_operand" "1")
> (match_operator:<ssescalarmode> 5 "vsib_mem_operator"
> @@ -16762,22 +16762,27 @@
> "TARGET_AVX512F"
> {
> if (<MODE>mode != <VEC_GATHER_SRCDI>mode)
> - return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %t0%{%1%}|%t0%{%1%},
> %g5}";
> + {
> + if (GET_MODE_SIZE (<MODE>mode) != 64)
Something is wrong here. Mode iterator is VI48F that always has mode
size != 64, so the condition is always true.
> + return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5,
> %x0%{%1%}|%t0%{%1%}, %g5}";
> + else
> + return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5,
> %t0%{%1%}|%t0%{%1%}, %g5}";
> + }
> return "v<sseintprefix>gatherq<ssemodesuffix>\t{%5, %0%{%1%}|%0%{%1%},
> %g5}";
Uros.