(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
sparc/
fornot.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O -mcpu=ultrasparc -mvis" } */
       3  typedef char  vec8 __attribute__((vector_size(8)));
       4  typedef short vec16 __attribute__((vector_size(8)));
       5  typedef int   vec32 __attribute__((vector_size(8)));
       6  
       7  extern vec8 foo1_8(void);
       8  extern vec8 foo2_8(void);
       9  
      10  vec8 fun8(void)
      11  {
      12    return ~foo1_8 () | foo2_8 ();
      13  }
      14  
      15  vec8 fun8_2(vec8 a, vec8 b)
      16  {
      17    return ~a | b;
      18  }
      19  
      20  extern vec16 foo1_16(void);
      21  extern vec16 foo2_16(void);
      22  
      23  vec16 fun16(void)
      24  {
      25    return ~foo1_16 () | foo2_16 ();
      26  }
      27  
      28  vec16 fun16_2(vec16 a, vec16 b)
      29  {
      30    return ~a | b;
      31  }
      32  
      33  extern vec32 foo1_32(void);
      34  extern vec32 foo2_32(void);
      35  
      36  vec32 fun32(void)
      37  {
      38    return ~foo1_32 () | foo2_32 ();
      39  }
      40  
      41  vec32 fun32_2(vec32 a, vec32 b)
      42  {
      43    return ~a | b;
      44  }
      45  
      46  /* This should be transformed into ~b | a.  */
      47  vec8 fun8b(void)
      48  {
      49    return foo1_8 () | ~foo2_8 ();
      50  }
      51  
      52  vec8 fun8_2b(vec8 a, vec8 b)
      53  {
      54    return a | ~b;
      55  }
      56  
      57  vec16 fun16b(void)
      58  {
      59    return foo1_16 () | ~foo2_16 ();
      60  }
      61  
      62  vec16 fun16_2b(vec16 a, vec16 b)
      63  {
      64    return a | ~b;
      65  }
      66  
      67  vec32 fun32b(void)
      68  {
      69    return foo1_32 () | ~foo2_32 ();
      70  }
      71  
      72  vec32 fun32_2b(vec32 a, vec32 b)
      73  {
      74    return a | ~b;
      75  }
      76  
      77  /* { dg-final { scan-assembler-times "fornot1\t%" 12 } } */