(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
aarch64/
sve/
vcond_2.c
       1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -ftree-vectorize" } */
       3  
       4  #include <stdint.h>
       5  
       6  #define DEF_VCOND_VAR(DATA_TYPE, CMP_TYPE, COND, SUFFIX)	\
       7    void __attribute__ ((noinline, noclone))			\
       8    vcond_var_##CMP_TYPE##_##SUFFIX (DATA_TYPE *__restrict__ r,	\
       9  				   DATA_TYPE *__restrict__ x,	\
      10  				   DATA_TYPE *__restrict__ y,	\
      11  				   CMP_TYPE *__restrict__ a,	\
      12  				   CMP_TYPE *__restrict__ b,	\
      13  				   int n)			\
      14    {								\
      15      for (int i = 0; i < n; i++)					\
      16        {								\
      17  	DATA_TYPE xval = x[i], yval = y[i];			\
      18  	CMP_TYPE aval = a[i], bval = b[i];			\
      19  	r[i] = aval COND bval ? xval : yval;			\
      20        }								\
      21    }
      22  
      23  #define DEF_VCOND_IMM(DATA_TYPE, CMP_TYPE, COND, IMM, SUFFIX)	\
      24    void __attribute__ ((noinline, noclone))			\
      25    vcond_imm_##CMP_TYPE##_##SUFFIX (DATA_TYPE *__restrict__ r,	\
      26  				   DATA_TYPE *__restrict__ x,	\
      27  				   DATA_TYPE *__restrict__ y,	\
      28  				   CMP_TYPE *__restrict__ a,	\
      29  				   int n)			\
      30    {								\
      31      for (int i = 0; i < n; i++)					\
      32        {								\
      33  	DATA_TYPE xval = x[i], yval = y[i];			\
      34  	CMP_TYPE aval = a[i];					\
      35  	r[i] = aval COND (CMP_TYPE) IMM ? xval : yval;		\
      36        }								\
      37    }
      38  
      39  #define TEST_COND_VAR_SIGNED_ALL(T, COND, SUFFIX)	\
      40    T (int8_t, int8_t, COND, SUFFIX)			\
      41    T (int16_t, int16_t, COND, SUFFIX)			\
      42    T (int32_t, int32_t, COND, SUFFIX)			\
      43    T (int64_t, int64_t, COND, SUFFIX)			\
      44    T (_Float16, int16_t, COND, SUFFIX##_float16)		\
      45    T (float, int32_t, COND, SUFFIX##_float)		\
      46    T (double, int64_t, COND, SUFFIX##_double)
      47  
      48  #define TEST_COND_VAR_UNSIGNED_ALL(T, COND, SUFFIX)	\
      49    T (uint8_t, uint8_t, COND, SUFFIX)			\
      50    T (uint16_t, uint16_t, COND, SUFFIX)			\
      51    T (uint32_t, uint32_t, COND, SUFFIX)			\
      52    T (uint64_t, uint64_t, COND, SUFFIX)			\
      53    T (_Float16, uint16_t, COND, SUFFIX##_float16)	\
      54    T (float, uint32_t, COND, SUFFIX##_float)		\
      55    T (double, uint64_t, COND, SUFFIX##_double)
      56  
      57  #define TEST_COND_VAR_ALL(T, COND, SUFFIX)	\
      58    TEST_COND_VAR_SIGNED_ALL (T, COND, SUFFIX)	\
      59    TEST_COND_VAR_UNSIGNED_ALL (T, COND, SUFFIX)
      60  
      61  #define TEST_VAR_ALL(T)				\
      62    TEST_COND_VAR_ALL (T, >, _gt)			\
      63    TEST_COND_VAR_ALL (T, <, _lt)			\
      64    TEST_COND_VAR_ALL (T, >=, _ge)		\
      65    TEST_COND_VAR_ALL (T, <=, _le)		\
      66    TEST_COND_VAR_ALL (T, ==, _eq)		\
      67    TEST_COND_VAR_ALL (T, !=, _ne)
      68  
      69  #define TEST_COND_IMM_SIGNED_ALL(T, COND, IMM, SUFFIX)	\
      70    T (int8_t, int8_t, COND, IMM, SUFFIX)			\
      71    T (int16_t, int16_t, COND, IMM, SUFFIX)		\
      72    T (int32_t, int32_t, COND, IMM, SUFFIX)		\
      73    T (int64_t, int64_t, COND, IMM, SUFFIX)		\
      74    T (_Float16, int16_t, COND, IMM, SUFFIX##_float16)	\
      75    T (float, int32_t, COND, IMM, SUFFIX##_float)		\
      76    T (double, int64_t, COND, IMM, SUFFIX##_double)
      77  
      78  #define TEST_COND_IMM_UNSIGNED_ALL(T, COND, IMM, SUFFIX)	\
      79    T (uint8_t, uint8_t, COND, IMM, SUFFIX)			\
      80    T (uint16_t, uint16_t, COND, IMM, SUFFIX)			\
      81    T (uint32_t, uint32_t, COND, IMM, SUFFIX)			\
      82    T (uint64_t, uint64_t, COND, IMM, SUFFIX)			\
      83    T (_Float16, uint16_t, COND, IMM, SUFFIX##_float16)		\
      84    T (float, uint32_t, COND, IMM, SUFFIX##_float)		\
      85    T (double, uint64_t, COND, IMM, SUFFIX##_double)
      86  
      87  #define TEST_COND_IMM_ALL(T, COND, IMM, SUFFIX)		\
      88    TEST_COND_IMM_SIGNED_ALL (T, COND, IMM, SUFFIX)	\
      89    TEST_COND_IMM_UNSIGNED_ALL (T, COND, IMM, SUFFIX)
      90  
      91  #define TEST_IMM_ALL(T)							\
      92    /* Expect immediates to make it into the encoding.  */		\
      93    TEST_COND_IMM_ALL (T, >, 5, _gt)					\
      94    TEST_COND_IMM_ALL (T, <, 5, _lt)					\
      95    TEST_COND_IMM_ALL (T, >=, 5, _ge)					\
      96    TEST_COND_IMM_ALL (T, <=, 5, _le)					\
      97    TEST_COND_IMM_ALL (T, ==, 5, _eq)					\
      98    TEST_COND_IMM_ALL (T, !=, 5, _ne)					\
      99  									\
     100    TEST_COND_IMM_SIGNED_ALL (T, >, 15, _gt2)				\
     101    TEST_COND_IMM_SIGNED_ALL (T, <, 15, _lt2)				\
     102    TEST_COND_IMM_SIGNED_ALL (T, >=, 15, _ge2)				\
     103    TEST_COND_IMM_SIGNED_ALL (T, <=, 15, _le2)				\
     104    TEST_COND_IMM_ALL (T, ==, 15, _eq2)					\
     105    TEST_COND_IMM_ALL (T, !=, 15, _ne2)					\
     106  									\
     107    TEST_COND_IMM_SIGNED_ALL (T, >, 16, _gt3)				\
     108    TEST_COND_IMM_SIGNED_ALL (T, <, 16, _lt3)				\
     109    TEST_COND_IMM_SIGNED_ALL (T, >=, 16, _ge3)				\
     110    TEST_COND_IMM_SIGNED_ALL (T, <=, 16, _le3)				\
     111    TEST_COND_IMM_ALL (T, ==, 16, _eq3)					\
     112    TEST_COND_IMM_ALL (T, !=, 16, _ne3)					\
     113  									\
     114    TEST_COND_IMM_SIGNED_ALL (T, >, -16, _gt4)				\
     115    TEST_COND_IMM_SIGNED_ALL (T, <, -16, _lt4)				\
     116    TEST_COND_IMM_SIGNED_ALL (T, >=, -16, _ge4)				\
     117    TEST_COND_IMM_SIGNED_ALL (T, <=, -16, _le4)				\
     118    TEST_COND_IMM_ALL (T, ==, -16, _eq4)					\
     119    TEST_COND_IMM_ALL (T, !=, -16, _ne4)					\
     120  									\
     121    TEST_COND_IMM_SIGNED_ALL (T, >, -17, _gt5)				\
     122    TEST_COND_IMM_SIGNED_ALL (T, <, -17, _lt5)				\
     123    TEST_COND_IMM_SIGNED_ALL (T, >=, -17, _ge5)				\
     124    TEST_COND_IMM_SIGNED_ALL (T, <=, -17, _le5)				\
     125    TEST_COND_IMM_ALL (T, ==, -17, _eq5)					\
     126    TEST_COND_IMM_ALL (T, !=, -17, _ne5)					\
     127  									\
     128    TEST_COND_IMM_UNSIGNED_ALL (T, >, 0, _gt6)				\
     129    /* Testing if an unsigned value >= 0 or < 0 is pointless as it will	\
     130       get folded away by the compiler.  */				\
     131    TEST_COND_IMM_UNSIGNED_ALL (T, <=, 0, _le6)				\
     132  									\
     133    TEST_COND_IMM_UNSIGNED_ALL (T, >, 127, _gt7)				\
     134    TEST_COND_IMM_UNSIGNED_ALL (T, <, 127, _lt7)				\
     135    TEST_COND_IMM_UNSIGNED_ALL (T, >=, 127, _ge7)				\
     136    TEST_COND_IMM_UNSIGNED_ALL (T, <=, 127, _le7)				\
     137  									\
     138    /* Expect immediates to NOT make it into the encoding, and instead be \
     139       forced into a register.  */					\
     140    TEST_COND_IMM_UNSIGNED_ALL (T, >, 128, _gt8)				\
     141    TEST_COND_IMM_UNSIGNED_ALL (T, <, 128, _lt8)				\
     142    TEST_COND_IMM_UNSIGNED_ALL (T, >=, 128, _ge8)				\
     143    TEST_COND_IMM_UNSIGNED_ALL (T, <=, 128, _le8)
     144  
     145  TEST_VAR_ALL (DEF_VCOND_VAR)
     146  TEST_IMM_ALL (DEF_VCOND_IMM)
     147  
     148  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.b, p[0-7], z[0-9]+\.b, z[0-9]+\.b\n} 66 } } */
     149  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.h, p[0-7], z[0-9]+\.h, z[0-9]+\.h\n} 132 } } */
     150  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.s, p[0-7], z[0-9]+\.s, z[0-9]+\.s\n} 132 } } */
     151  /* { dg-final { scan-assembler-times {\tsel\tz[0-9]+\.d, p[0-7], z[0-9]+\.d, z[0-9]+\.d\n} 132 } } */
     152  
     153  /* There are two signed ordered register comparisons for .b, one for a
     154     variable comparison and one for one of the two out-of-range constant
     155     comparisons.  The other out-of-ranger constant comparison can be
     156     adjusted to an in-range value by inverting the handling of equality.
     157  
     158     The same pattern appears twice for .h, .s and .d, once for integer data
     159     and once for floating-point data.  */
     160  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
     161  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
     162  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
     163  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
     164  
     165  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
     166  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
     167  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
     168  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
     169  
     170  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
     171  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
     172  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
     173  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
     174  
     175  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
     176  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
     177  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
     178  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
     179  
     180  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
     181  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
     182  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
     183  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
     184  
     185  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 2 } } */
     186  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 4 } } */
     187  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 4 } } */
     188  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 4 } } */
     189  
     190  /* Out-of-range >= is converted to in-range >.  */
     191  /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
     192  /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
     193  /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
     194  /* { dg-final { scan-assembler-times {\tcmphs\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
     195  
     196  /* Out-of-range < is converted to in-range <=.  */
     197  /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 1 } } */
     198  /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 2 } } */
     199  /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 2 } } */
     200  /* { dg-final { scan-assembler-times {\tcmplo\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 2 } } */
     201  
     202  /* 6 for .b: {signed, unsigned\n} x {variable, too high, too low}.  */
     203  /* 12 for .h,.s and .d: the above 6 repeated for integer and floating-point
     204     data.  */
     205  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 6 } } */
     206  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 12 } } */
     207  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 12 } } */
     208  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 12 } } */
     209  
     210  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, z[0-9]+\.b\n} 6 } } */
     211  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, z[0-9]+\.h\n} 12 } } */
     212  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, z[0-9]+\.s\n} 12 } } */
     213  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, z[0-9]+\.d\n} 12 } } */
     214  
     215  /* Also used for >= 16. */
     216  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
     217  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
     218  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
     219  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
     220  
     221  /* gcc converts "a < 15" into "a <= 14".  */
     222  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #14\n} 1 } } */
     223  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #14\n} 2 } } */
     224  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #14\n} 2 } } */
     225  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #14\n} 2 } } */
     226  
     227  /* gcc converts "a >= 15" into "a > 14".  */
     228  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #14\n} 1 } } */
     229  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #14\n} 2 } } */
     230  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #14\n} 2 } } */
     231  /* { dg-final { scan-assembler-times {\tcmpgt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #14\n} 2 } } */
     232  
     233  /* Also used for < 16.  */
     234  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
     235  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
     236  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
     237  /* { dg-final { scan-assembler-times {\tcmple\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
     238  
     239  /* Appears once for each signedness.  */
     240  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
     241  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
     242  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
     243  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
     244  
     245  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #15\n} 2 } } */
     246  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #15\n} 4 } } */
     247  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #15\n} 4 } } */
     248  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #15\n} 4 } } */
     249  
     250  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
     251  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
     252  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
     253  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
     254  
     255  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
     256  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
     257  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
     258  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
     259  
     260  /* gcc converts "a > -16" into "a >= -15".  */
     261  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-15\n} 1 } } */
     262  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-15\n} 2 } } */
     263  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-15\n} 2 } } */
     264  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-15\n} 2 } } */
     265  
     266  /* Also used for <= -17.  */
     267  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
     268  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
     269  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
     270  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
     271  
     272  /* Also used for > -17.  */
     273  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-16\n} 2 } } */
     274  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-16\n} 4 } } */
     275  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-16\n} 4 } } */
     276  /* { dg-final { scan-assembler-times {\tcmpge\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-16\n} 4 } } */
     277  
     278  /* gcc converts "a <= -16" into "a < -15".  */
     279  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #-15\n} 1 } } */
     280  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #-15\n} 2 } } */
     281  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #-15\n} 2 } } */
     282  /* { dg-final { scan-assembler-times {\tcmplt\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #-15\n} 2 } } */
     283  
     284  /* gcc converts "a > 0" into "a != 0".  */
     285  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #0\n} 1 } } */
     286  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #0\n} 2 } } */
     287  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #0\n} 2 } } */
     288  /* { dg-final { scan-assembler-times {\tcmpne\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #0\n} 2 } } */
     289  
     290  /* gcc converts "a <= 0" into "a == 0".  */
     291  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #0\n} 1 } } */
     292  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #0\n} 2 } } */
     293  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #0\n} 2 } } */
     294  /* { dg-final { scan-assembler-times {\tcmpeq\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #0\n} 2 } } */
     295  
     296  /* Also used for >= 128.  */
     297  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #127\n} 2 { xfail *-*-* } } } */
     298  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #127\n} 4 } } */
     299  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #127\n} 4 } } */
     300  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #127\n} 4 } } */
     301  
     302  /* gcc converts "a < 127" into "a <= 126".  */
     303  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #126\n} 1 } } */
     304  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #126\n} 2 } } */
     305  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #126\n} 2 } } */
     306  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #126\n} 2 } } */
     307  
     308  /* gcc converts "a >= 127" into "a > 126".  */
     309  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #126\n} 1 } } */
     310  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #126\n} 2 } } */
     311  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #126\n} 2 } } */
     312  /* { dg-final { scan-assembler-times {\tcmphi\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #126\n} 2 } } */
     313  
     314  /* Also used for < 128.  */
     315  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.b, p[0-7]/z, z[0-9]+\.b, #127\n} 2 { xfail *-*-* } } } */
     316  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.h, p[0-7]/z, z[0-9]+\.h, #127\n} 4 } } */
     317  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.s, p[0-7]/z, z[0-9]+\.s, #127\n} 4 } } */
     318  /* { dg-final { scan-assembler-times {\tcmpls\tp[0-7]\.d, p[0-7]/z, z[0-9]+\.d, #127\n} 4 } } */