1  /* { dg-do compile } */
       2  /* { dg-options "-O2" } */
       3  
       4  /*
       5  ** inv1:
       6  **	cmp	w0, 0
       7  **	csinv	w0, w1, w2, ne
       8  **	ret
       9  */
      10  unsigned long long
      11  inv1(unsigned a, unsigned b, unsigned c)
      12  {
      13    unsigned t = a ? b : ~c;
      14    return t;
      15  }
      16  
      17  /*
      18  ** inv1_local:
      19  **	cmp	w0, 0
      20  **	csinv	w0, w1, w2, ne
      21  **	ret
      22  */
      23  unsigned long long
      24  inv1_local(unsigned a, unsigned b, unsigned c)
      25  {
      26    unsigned d = ~c;
      27    unsigned t = a ? b : d;
      28    return t;
      29  }
      30  
      31  /*
      32  ** inv_zero1:
      33  **	cmp	w0, 0
      34  **	csinv	w0, wzr, w1, ne
      35  **	ret
      36  */
      37  unsigned long long
      38  inv_zero1(unsigned a, unsigned b)
      39  {
      40    unsigned t = a ? 0 : ~b; 
      41    return t;
      42  }
      43  
      44  /*
      45  ** inv_zero2:
      46  **	cmp	w0, 0
      47  **	csinv	w0, wzr, w1, eq
      48  **	ret
      49  */
      50  unsigned long long
      51  inv_zero2(unsigned a, unsigned b)
      52  {
      53    unsigned t = a ? ~b : 0; 
      54    return t;
      55  }
      56  
      57  
      58  /*
      59  ** inv2:
      60  **	cmp	w0, 0
      61  **	csinv	w0, w2, w1, eq
      62  **	ret
      63  */
      64  unsigned long long
      65  inv2(unsigned a, unsigned b, unsigned c)
      66  {
      67    unsigned t = a ? ~b : c; 
      68    return t;
      69  }
      70  
      71  /*
      72  ** inv2_local:
      73  **	cmp	w0, 0
      74  **	csinv	w0, w2, w1, eq
      75  **	ret
      76  */
      77  unsigned long long
      78  inv2_local(unsigned a, unsigned b, unsigned c)
      79  {
      80    unsigned d = ~b;
      81    unsigned t = a ? d : c; 
      82    return t;
      83  }
      84  
      85  /*
      86  ** neg1:
      87  **	cmp	w0, 0
      88  **	csneg	w0, w1, w2, ne
      89  **	ret
      90  */
      91  unsigned long long
      92  neg1(unsigned a, unsigned b, unsigned c)
      93  {
      94    unsigned t = a ? b : -c; 
      95    return t;
      96  }
      97  
      98  
      99  /*
     100  ** neg2:
     101  **	cmp	w0, 0
     102  **	csneg	w0, w2, w1, eq
     103  **	ret
     104  */
     105  unsigned long long
     106  neg2(unsigned a, unsigned b, unsigned c)
     107  {
     108    unsigned t = a ? -b : c; 
     109    return t;
     110  }
     111  
     112  /* { dg-final { check-function-bodies "**" "" "" } } */