(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.target/
i386/
pr93141-1.c
       1  /* PR target/93141 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -masm=att" } */
       4  /* { dg-final { scan-assembler-not "cmp\[lq]\t" } } */
       5  /* { dg-final { scan-assembler-times "setc\t%" 5 } } */
       6  /* { dg-final { scan-assembler-times "seto\t%" 7 } } */
       7  /* { dg-final { scan-assembler-times "adc\[lq]\t" 9 } } */
       8  
       9  #ifdef __x86_64__
      10  typedef unsigned __int128 U;
      11  typedef unsigned long long HU;
      12  typedef signed __int128 S;
      13  #else
      14  typedef unsigned long long U;
      15  typedef unsigned int HU;
      16  typedef signed long long S;
      17  #endif
      18  int o;
      19  
      20  U
      21  foo (U x, U y)
      22  {
      23    U z;
      24    o = __builtin_add_overflow (x, y, &z);
      25    return z;
      26  }
      27  
      28  U
      29  bar (U x)
      30  {
      31    U z;
      32    o = __builtin_add_overflow (x, ((U) 0xdeadbee) << (sizeof (U) * __CHAR_BIT__ / 2), &z);
      33    return z;
      34  }
      35  
      36  U
      37  baz (U x)
      38  {
      39    U z;
      40    o = __builtin_add_overflow (x, (((U) 0xdeadbee) << (sizeof (U) * __CHAR_BIT__ / 2))
      41  				 | (U) 0xbeedead, &z);
      42    return z;
      43  }
      44  
      45  S
      46  qux (S x, S y)
      47  {
      48    S z;
      49    o = __builtin_add_overflow (x, y, &z);
      50    return z;
      51  }
      52  
      53  S
      54  quux (S x)
      55  {
      56    S z;
      57    o = __builtin_add_overflow (x, ((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2), &z);
      58    return z;
      59  }
      60  
      61  S
      62  corge (S x)
      63  {
      64    S z;
      65    o = __builtin_add_overflow (x, (((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2))
      66  				 | (S) 0xbeedead, &z);
      67    return z;
      68  }
      69  
      70  S
      71  grault (S x)
      72  {
      73    S z;
      74    o = __builtin_add_overflow (x, -((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2), &z);
      75    return z;
      76  }
      77  
      78  S
      79  garply (S x)
      80  {
      81    S z;
      82    o = __builtin_add_overflow (x, (-(((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2)))
      83  				 | (S) 0xbeedead, &z);
      84    return z;
      85  }
      86  
      87  S
      88  waldo (S x)
      89  {
      90    S z;
      91    o = __builtin_add_overflow (x, (S) ((((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2))
      92  				      | -(HU) 0xbeedead), &z);
      93    return z;
      94  }
      95  
      96  S
      97  fred (S x)
      98  {
      99    S z;
     100    o = __builtin_add_overflow (x, (S) ((-(((S) 0xdeadbee) << (sizeof (S) * __CHAR_BIT__ / 2)))
     101  				      | -(HU) 0xbeedead), &z);
     102    return z;
     103  }
     104  
     105  U
     106  plugh (U x)
     107  {
     108    U z;
     109    o = __builtin_add_overflow (x, (U) ((((U) 0xdeadbee) << (sizeof (U) * __CHAR_BIT__ / 2))
     110  				      | -(HU) 0xbeedead), &z);
     111    return z;
     112  }
     113  
     114  U
     115  xyzzy (U x)
     116  {
     117    U z;
     118    o = __builtin_add_overflow (x, (U) ((-(((U) 0xdeadbee) << (sizeof (U) * __CHAR_BIT__ / 2)))
     119  				      | -(HU) 0xbeedead), &z);
     120    return z;
     121  }