]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/18582 (Internal compiler error with arrays of type V2DF)
authorRichard Sandiford <richard@codesourcery.com>
Wed, 3 Aug 2005 14:15:28 +0000 (14:15 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Wed, 3 Aug 2005 14:15:28 +0000 (14:15 +0000)
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

gcc/ChangeLog
gcc/config/i386/i386.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.dg/torture/pr18582-1.c

index 431a342353fbbe032794ae1cb1acd9393ef5aec5..164ce7e415590ac82be8a0352b896c3f90955b71 100644 (file)
@@ -1,3 +1,9 @@
+2005-08-03  Richard Sandiford  <richard@codesourcery.com>
+
+       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  <ian@airs.com>
 
        PR pch/14400
index 36a93009fe55584416a8218cddb5454ec70fb827..e6f71b466f17a1ae58b17c2816a14fa1e71755d2 100644 (file)
@@ -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)
index e5eb107e42f58d8b44bc8bd083ba50b37276bf3b..c86d9e54fa333f3db86e3ac6ce7daa89cbc80372 100644 (file)
@@ -1,3 +1,8 @@
+2005-08-03  Richard Sandiford  <richard@codesourcery.com>
+
+       PR target/18582
+       * testsuite/gcc.dg/torture/pr18582-1.c: New test.
+
 2005-08-02  Ian Lance Taylor  <ian@airs.com>
 
        PR pch/14400
index d222dabd4154138c6e32a22455f646634ea34d88..93fde0c4a2f95d659c2010d2bf90e8fe7e56033f 100644 (file)
@@ -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);
 }