From: Richard Sandiford Date: Wed, 3 Aug 2005 14:15:28 +0000 (+0000) Subject: re PR target/18582 (Internal compiler error with arrays of type V2DF) X-Git-Tag: releases/gcc-3.4.5~283 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8cc3eccaebbeea9150937757ea2eb8f3adfe27f4;p=thirdparty%2Fgcc.git re PR target/18582 (Internal compiler error with arrays of type V2DF) PR target/18582 * config/i386/i386.c (ix86_expand_unop_builtin): Force the target to be a register if do_load is true. From-SVN: r102694 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 431a342353fb..164ce7e41559 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2005-08-03 Richard Sandiford + + PR target/18582 + * config/i386/i386.c (ix86_expand_unop_builtin): Force the target + to be a register if do_load is true. + 2005-08-02 Ian Lance Taylor PR pch/14400 diff --git a/gcc/config/i386/i386.c b/gcc/config/i386/i386.c index 36a93009fe55..e6f71b466f17 100644 --- a/gcc/config/i386/i386.c +++ b/gcc/config/i386/i386.c @@ -13956,6 +13956,7 @@ ix86_expand_unop_builtin (enum insn_code icode, tree arglist, if (! target || GET_MODE (target) != tmode + || (do_load && GET_CODE (target) == MEM) || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) target = gen_reg_rtx (tmode); if (do_load) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index e5eb107e42f5..c86d9e54fa33 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2005-08-03 Richard Sandiford + + PR target/18582 + * testsuite/gcc.dg/torture/pr18582-1.c: New test. + 2005-08-02 Ian Lance Taylor PR pch/14400 diff --git a/gcc/testsuite/gcc.dg/torture/pr18582-1.c b/gcc/testsuite/gcc.dg/torture/pr18582-1.c index d222dabd4154..93fde0c4a2f9 100644 --- a/gcc/testsuite/gcc.dg/torture/pr18582-1.c +++ b/gcc/testsuite/gcc.dg/torture/pr18582-1.c @@ -1,24 +1,37 @@ /* { dg-do compile { target i?86-*-* } } */ /* { dg-options "-msse3" } */ typedef char v16qi __attribute__((vector_size (16))); +typedef int v4si __attribute__((vector_size (16))); typedef float v4sf __attribute__((vector_size (16))); typedef double v2df __attribute__((vector_size (16))); extern char ca[]; +extern int ia[]; extern float fa[]; extern double da[]; extern v16qi cva[]; +extern v4si iva[]; extern v4sf fva[]; extern v2df dva[]; void foo (void) { + cva[0] = __builtin_ia32_loaddqa (ca); cva[0] = __builtin_ia32_loaddqu (ca); cva[0] = __builtin_ia32_lddqu (ca); + iva[0] = __builtin_ia32_loadd (ia); + + fva[0] = __builtin_ia32_loadaps (fa); fva[0] = __builtin_ia32_loadups (fa); + fva[0] = __builtin_ia32_loadss (fa); + dva[0] = __builtin_ia32_loadapd (da); dva[0] = __builtin_ia32_loadupd (da); + dva[0] = __builtin_ia32_loadsd (da); + dva[0] = __builtin_ia32_loadpd1 (da); + dva[0] = __builtin_ia32_loadrpd (da); + dva[0] = __builtin_ia32_loadddup (da); }