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