(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr85317.c
       1  /* PR target/85317 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -mavx2 -fdump-tree-optimized" } */
       4  /* { dg-final { scan-tree-dump-not "link_error" "optimized" } } */
       5  
       6  #include <x86intrin.h>
       7  
       8  extern void link_error (void);
       9  
      10  int
      11  main ()
      12  {
      13    int a = _mm_movemask_pd (_mm_set_pd (-2.0, 2.0));
      14    if (a != 2) link_error ();
      15    int b = _mm_movemask_pd (_mm_set_pd (0.0, __builtin_copysign (0.0, -4.0)));
      16    if (b != 1) link_error ();
      17    int c = _mm_movemask_ps (_mm_set_ps (__builtin_copysignf (0.0f, -4.0f), 0.0f,
      18  				       -4.0f, 4.0f));
      19    if (c != 10) link_error ();
      20    int d = _mm_movemask_epi8 (_mm_set_epi8 (-4, 8, -8, -12, 12, 15, 0, -1, -3,
      21  					   -128, 127, 126, 120, -120, 0, 5));
      22    if (d != 0xb1c4) link_error ();
      23    int e = _mm256_movemask_pd (_mm256_set_pd (-4.0, 0.0, 4.0,
      24  					     __builtin_copysign (0.0, -4.0)));
      25    if (e != 9) link_error ();
      26    int f = _mm256_movemask_ps (_mm256_set_ps (-8.0f, -16.0f, 12.0f, 127.0f,
      27  					     -4.0f, 0.0f, 4.0f,
      28  					     __builtin_copysign (0.0f,
      29  								 -4.0f)));
      30    if (f != 0xc9) link_error ();
      31    int g = _mm256_movemask_epi8 (_mm256_set_epi8 (-4, 8, -8, -12, 12, 15, 0, -1,
      32  						 -3, -128, 127, 126, 120, -120,
      33  						 0, 5, 12, 100, -20, -50, -70,
      34  						 2, -65, 0, -1, 1, 2, -2, -9,
      35  						 -9, 19, -64));
      36    if (g != (int) 0xb1c43a9dU) link_error ();
      37    return 0;
      38  }