(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr96827.c
       1  /* { dg-do run { target sse2_runtime } } */
       2  /* { dg-options "-O3 -msse2 -mfpmath=sse" } */
       3  
       4  typedef unsigned short int __uint16_t;
       5  typedef unsigned int __uint32_t;
       6  typedef __uint16_t uint16_t;
       7  typedef __uint32_t uint32_t;
       8  typedef int __v4si __attribute__ ((__vector_size__ (16)));
       9  typedef long long __m128i __attribute__ ((__vector_size__ (16), __may_alias__));
      10  extern __inline void __attribute__((__gnu_inline__, __always_inline__, __artificial__))
      11  _mm_store_si128 (__m128i *__P, __m128i __B)
      12  {
      13    *__P = __B;
      14  }
      15  extern __inline __m128i __attribute__((__gnu_inline__, __always_inline__, __artificial__))
      16  _mm_set_epi32 (int __q3, int __q2, int __q1, int __q0)
      17  {
      18    return __extension__ (__m128i)(__v4si){ __q0, __q1, __q2, __q3 };
      19  }
      20  typedef uint16_t u16;
      21  typedef uint32_t u32;
      22  extern int printf (const char *__restrict __format, ...);
      23  void do_the_thing(u32 idx, __m128i *dude)
      24  {
      25   u32 dude_[4] = { idx+0, idx+2, idx+4, idx+6 };
      26   for (u32 i = 0; i < 3; ++i)
      27    if (dude_[i] == 1234)
      28     dude_[i]--;
      29   *dude = _mm_set_epi32(dude_[0], dude_[1], dude_[2], dude_[3]);
      30  }
      31  int main()
      32  {
      33   __m128i dude;
      34   u32 idx = 0;
      35   do_the_thing(idx, &dude);
      36   __attribute__((aligned(16))) u32 dude_[4];
      37   _mm_store_si128((__m128i*)dude_, dude);
      38   if (!(6 == dude_[0] && 4 == dude_[1] && 2 == dude_[2] && 0 == dude_[3]))
      39     __builtin_abort ();
      40   return 0;
      41  }