(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
powerpc/
fold-vec-logical-ors-longlong.c
       1  /* Verify that overloaded built-ins for vec_or, vec_xor, vec_nor with
       2   * long long inputs produce the right results.  */
       3  
       4  /* { dg-do compile } */
       5  /* { dg-require-effective-target powerpc_p8vector_ok } */
       6  /* { dg-options "-mpower8-vector -O2" } */
       7  
       8  #include <altivec.h>
       9  
      10  vector signed long long
      11  test1_or (vector bool long long x, vector signed long long y)
      12  {
      13    vector signed long long *foo;
      14    *foo += vec_or (x, y);
      15    return *foo;
      16  }
      17  
      18  vector signed long long
      19  test1_xor (vector bool long long x, vector signed long long y)
      20  {
      21    vector signed long long *foo;
      22    *foo += vec_xor (x, y);
      23    return *foo;
      24  }
      25  
      26  vector signed long long
      27  test1_nor (vector bool long long x, vector signed long long y)
      28  {
      29    vector signed long long *foo;
      30    *foo += vec_nor (x, y);
      31    return *foo;
      32  }
      33  
      34  vector signed long long
      35  test2_or (vector signed long long x, vector bool long long y)
      36  {
      37    vector signed long long *foo;
      38    *foo += vec_or (x, y);
      39    return *foo;
      40  }
      41  
      42  vector signed long long
      43  test2_xor (vector signed long long x, vector bool long long y)
      44  {
      45    vector signed long long *foo;
      46    *foo += vec_xor (x, y);
      47    return *foo;
      48  }
      49  
      50  vector signed long long
      51  test2_nor (vector signed long long x, vector bool long long y)
      52  {
      53    vector signed long long *foo;
      54    *foo += vec_nor (x, y);
      55    return *foo;
      56  }
      57  
      58  vector signed long long
      59  test3_or (vector signed long long x, vector signed long long y)
      60  {
      61    vector signed long long *foo;
      62    *foo += vec_or (x, y);
      63    return *foo;
      64  }
      65  
      66  vector signed long long
      67  test3_xor (vector signed long long x, vector signed long long y)
      68  {
      69    vector signed long long *foo;
      70    *foo += vec_xor (x, y);
      71    return *foo;
      72  }
      73  
      74  vector signed long long
      75  test3_nor (vector signed long long x, vector signed long long y)
      76  {
      77    vector signed long long *foo;
      78    *foo += vec_nor (x, y);
      79    return *foo;
      80  }
      81  
      82  vector unsigned long long
      83  test4_or (vector bool long long x, vector unsigned long long y)
      84  {
      85    vector unsigned long long *foo;
      86    *foo += vec_or (x, y);
      87    return *foo;
      88  }
      89  
      90  vector unsigned long long
      91  test4_xor (vector bool long long x, vector unsigned long long y)
      92  {
      93    vector unsigned long long *foo;
      94    *foo += vec_xor (x, y);
      95    return *foo;
      96  }
      97  
      98  vector unsigned long long
      99  test4_nor (vector bool long long x, vector unsigned long long y)
     100  {
     101    vector unsigned long long *foo;
     102    *foo += vec_nor (x, y);
     103    return *foo;
     104  }
     105  
     106  vector unsigned long long
     107  test5_or (vector unsigned long long x, vector bool long long y)
     108  {
     109    vector unsigned long long *foo;
     110    *foo += vec_or (x, y);
     111    return *foo;
     112  }
     113  
     114  vector unsigned long long
     115  test5_xor (vector unsigned long long x, vector bool long long y)
     116  {
     117    vector unsigned long long *foo;
     118    *foo += vec_xor (x, y);
     119    return *foo;
     120  }
     121  
     122  vector unsigned long long
     123  test5_nor (vector unsigned long long x, vector bool long long y)
     124  {
     125    vector unsigned long long *foo;
     126    *foo += vec_nor (x, y);
     127    return *foo;
     128  }
     129  
     130  vector unsigned long long
     131  test6_or (vector unsigned long long x, vector unsigned long long y)
     132  {
     133    vector unsigned long long *foo;
     134    *foo += vec_or (x, y);
     135    return *foo;
     136  }
     137  
     138  vector unsigned long long
     139  test6_xor (vector unsigned long long x, vector unsigned long long y)
     140  {
     141    vector unsigned long long *foo;
     142    *foo += vec_xor (x, y);
     143    return *foo;
     144  }
     145  
     146  vector unsigned long long
     147  test6_nor (vector unsigned long long x, vector unsigned long long y)
     148  {
     149    vector unsigned long long *foo;
     150    *foo += vec_nor (x, y);
     151    return *foo;
     152  }
     153  
     154  // The number of xxlor instructions generated varies between 6 and 24 for
     155  // older systems (power6,power7), as well as for 32-bit versus 64-bit targets.
     156  // For simplicity, this test now only targets "powerpc_p8vector_ok" environments
     157  // where the answer is expected to be 6.
     158  
     159  /* { dg-final { scan-assembler-times {\mxxlor\M} 9 } } */
     160  /* { dg-final { scan-assembler-times {\mxxlxor\M} 6 } } */
     161  /* { dg-final { scan-assembler-times {\mxxlnor\M} 3 } } */