PATCH: PR target/44615: -mtune=atom failed on sse2-vec-2.c and amd64-abi-3.c

Uros Bizjak ubizjak@gmail.com
Mon Jun 21 18:43:00 GMT 2010


On Mon, Jun 21, 2010 at 7:17 PM, H.J. Lu <hongjiu.lu@intel.com> wrote:
> When --with-cpu=atom is used to configure gcc, -mtune=atom is used by
> default. I got
>
> FAIL: gcc.target/i386/amd64-abi-3.c scan-assembler subq[\\t ]*\\$88,[\\t ]*%rsp
>
> This is due to -mtune=atom generates:
>
>        leaq    -88(%rsp), %rsp
>
> instead of
>
>        subq    $88, %rsp
>
> also
>
> /export/build/gnu/gcc-atom/build-x86_64-linux/gcc/xgcc
> -B/export/build/gnu/gcc-atom/build-x86_64-linux/gcc/
> /export/gnu/import/git/gcc/gcc/testsuite/gcc.target/i386/sse2-vec-2.c
> -O2
> -msse2 -mtune=atom
> In file included from
> /export/gnu/import/git/gcc/gcc/testsuite/gcc.target/i386/sse2-vec-2.c:5:0:
> /export/gnu/import/git/gcc/gcc/testsuite/gcc.target/i386/sse2-check.h:
> In
> function ‘do_test’:
> /export/gnu/import/git/gcc/gcc/testsuite/gcc.target/i386/sse2-check.h:12:1:
> internal compiler error: Segmentation fault
> Please submit a full bug report,
> with preprocessed source if appropriate.
> See <http://gcc.gnu.org/bugs.html> for instructions.
>
> The problem is
>
> ;; if palignr or psrldq
> (define_insn_reservation  "atom_sseishft_2" 1
>  (and (eq_attr "cpu" "atom")
>       (and (eq_attr "type" "sseishft")
>            (and (eq_attr "atom_unit" "sishuf")
>                 (match_operand 2 "immediate_operand"))))
>  "atom-simple-0")
>
> ;; if reg/mem op
> (define_insn_reservation  "atom_sseishft_3" 2
>  (and (eq_attr "cpu" "atom")
>       (and (eq_attr "type" "sseishft")
>            (not (match_operand 2 "immediate_operand"))))
>  "atom-complex, atom-all-eu")
>
> in atom.md. Some sseishft patterns, which generate psrldq, don't
> have the 3rd operand as shift count.
>
> This patch fixes amd64-abi-3.c by adding -mtune=k8 to generate subq
> instead of leaq. For sse2-vec-2.c, I added a new type for psrldq.
> There is no need to check for psrldq when it is the only alternative.
> OK for trunk if no regressions and 4.4/4.5 after a few days?
>
> Thanks.
>
>
> H.J.
> ---
> gcc/
>
> 2010-06-21  H.J. Lu  <hongjiu.lu@intel.com>
>
>        PR target/44615
>        * config/i386/atom.md (atom_psrldq): New.
>
>        * config/i386/i386.md (type): Add psrldq.
>
>        * config/i386/ppro_insn (ppro_insn): Also check psrldq.
>        (ppro_insn_load): Likewise.
>        (ppro_insn_store): Likewise.
>        (ppro_insn_both): Likewise.
>
>        * config/i386/sse.md (avx_lshrv1ti3): Replace sseishft with
>        psrldq for type.
>        (sse2_lshrv1ti3): Likewise.
>        (*vec_extractv2di_1_rex64_avx): Likewise.
>        (*vec_extractv2di_1_avx): Likewise.
>        (*vec_extractv2di_1_rex64): Replace sseishft with psrldq for
>        type.  Remove atom_unit.
>        (*vec_extractv2di_1_sse2): Likewise.
>
> gcc/testsuite/
>
> 2010-06-21  H.J. Lu  <hongjiu.lu@intel.com>
>
>        PR target/44615
>
>        * gcc.target/i386/amd64-abi-3.c: Add -mtune=k8.
>
>        * gcc.target/i386/sse2-vec-2a.c: New.

Please split out ABI testsuite patch to another patch. These two
changes are unrelated.

Comments below.

> diff --git a/gcc/config/i386/atom.md b/gcc/config/i386/atom.md
> index a9c4c5d..4c5d1e0 100644
> --- a/gcc/config/i386/atom.md
> +++ b/gcc/config/i386/atom.md
> @@ -513,6 +513,12 @@
>             (not (match_operand 2 "immediate_operand"))))
>   "atom-complex, atom-all-eu")
>
> +;; psrldq
> +(define_insn_reservation  "atom_psrldq" 1
> +  (and (eq_attr "cpu" "atom")
> +       (eq_attr "type" "psrldq"))
> +  "atom-simple-0")

No need for new define_insn_reservation, please merge this
functionality into existing atom_sseishft_2.

Also, please rename new psrldq type to sseishft1, this is more
consistent with existing naming scheme..

Uros.



More information about the Gcc-patches mailing list