1  /* { dg-do run } */
       2  /* { dg-require-effective-target sse4 } */
       3  /* { dg-options "-O1 -msse4.2 -ftree-vectorize" } */
       4  
       5  #include "sse4_2-check.h"
       6  
       7  long long v1[] __attribute__ ((aligned(16))) =
       8  {
       9    -3, 2, 3, -4 
      10  };
      11  long long v2[] __attribute__ ((aligned(16))) =
      12  {
      13    4, -10, -20, 6
      14  };
      15  
      16  long long max[] =
      17  {
      18    4, 2, 3, 6
      19  };
      20  
      21  long long min[] =
      22  {
      23    -3, -10, -20, -4
      24  };
      25  
      26  long long res[4] __attribute__ ((aligned(16)));
      27  
      28  extern void abort (void);
      29  
      30  void
      31  find_max (void)
      32  {
      33    int i;
      34  
      35    for (i = 0; i < 4; i++)
      36      res[i] = v1[i] < v2[i] ? v2[i] : v1[i];
      37  }
      38  
      39  void
      40  find_min (void)
      41  {
      42    int i;
      43  
      44    for (i = 0; i < 4; i++)
      45      res[i] = v1[i] > v2[i] ? v2[i] : v1[i];
      46  }
      47  
      48  static void
      49  sse4_2_test (void)
      50  {
      51    int i;
      52    int err = 0;
      53  
      54    find_max ();
      55    for (i = 0; i < 4; i++)
      56      if (res[i] != max[i])
      57        err++;
      58  
      59    find_min ();
      60    for (i = 0; i < 4; i++)
      61      if (res[i] != min[i])
      62        err++;
      63  
      64    if (err)
      65      abort ();
      66  }