This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH, function-specific, committed] Update function specific tests


On Tue, Jun 24, 2008 at 10:55:08AM -0700, Andrew Pinski wrote:
> On Tue, Jun 24, 2008 at 10:48 AM, Michael Meissner
> <michael.meissner@amd.com> wrote:
> > I forgot to check in one test, and for another, I turn on -fno-unit-at-a-time.
> >
> > 2008-06-24  Michael Meissner  <michael.meissner@amd.com>
> >
> >        * gcc.target/i386/sse-22.c: Use -fno-unit-at-a-time, instead of
> >        -msse.
> 
> We are trying to move away from using no unit at a time mode.  Is
> there a reason why you are using it here?

I couldn't get the first reply out of the corporate firewall, so I'm reply from
my home mail.

I haven't tracked down why it is breaking.  Sse-22.c is a rewrite of sse-14.c
to use function specific options.  Sse-14.c is an x86 test that tries to make
sure all of the 3dnow, sse2, ssse3, sse4, and sse5 *mmintrin.h functions can
generate code when compiled with -O0, using some framework for the instructions
that must take integer constants.  Sse-14.c is compiled with all of the
-m3dnow, etc. switches at compilation time.  I rewrote sse-22.c to not be
compiled with any special flags, but instead use #pragma GCC option to
progressively add 3dnow, sse4, sse5, etc.  If I compile the code with -msse4,
it works fine (but doesn't test what I set out to test), as does optimizing the
code (which is test sse-23.c).  No-unit-at-a-time also makes it work too, and
this way it at least tests the basic functionality.

Here is the failure:
In file included from ./include/xmmintrin.h:1251,
                 from sse-22.c:53:
./include/emmintrin.h: In function â_mm_loaddup_pdâ:
./include/emmintrin.h:122: internal compiler error: in memory_address, at
explow.c:492
Please submit a full bug report,
with preprocessed source if appropriate.
See <http://gcc.gnu.org/bugs.html> for instructions.


The function in question is in pmmintrin.h:

extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_loaddup_pd (double const *__P)
{
  return _mm_load1_pd (__P);
}

The function it calls is in emmintrin.h:

/* Create a vector with all two elements equal to *P.  */
extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_load1_pd (double const *__P)
{
  return _mm_set1_pd (*__P);
}

which in turn calls:

/* Create a vector with both elements equal to F.  */
extern __inline __m128d __attribute__((__gnu_inline__, __always_inline__, __artificial__))
_mm_set1_pd (double __F)
{
  return __extension__ (__m128d){ __F, __F };
}

-- 
Michael Meissner, AMD
90 Central Street, MS 83-29, Boxborough, MA, 01719, USA
michael.meissner@amd.com


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]