(root)/
gcc-13.2.0/
gcc/
testsuite/
gcc.dg/
pr95853.c
       1  /* PR tree-optimization/95853 */
       2  /* { dg-do compile } */
       3  /* { dg-options "-O2 -fdump-tree-widening_mul" } */
       4  
       5  #if __SIZEOF_INT128__
       6  typedef __uint128_t W;
       7  typedef unsigned long long T;
       8  #else
       9  typedef unsigned long long W;
      10  typedef unsigned int T;
      11  #endif
      12  
      13  struct S { int p; T r; };
      14  
      15  struct S
      16  foo (T x, T y)
      17  {
      18    W z = (W) x + y;
      19    return (struct S) { z > ~(T) 0, (T) z };
      20  }
      21  
      22  struct S
      23  bar (T x)
      24  {
      25    W z = (W) x + 132;
      26    return (struct S) { z > ~(T) 0, (T) z };
      27  }
      28  
      29  struct S
      30  baz (T x, unsigned short y)
      31  {
      32    W z = (W) x + y;
      33    return (struct S) { z > ~(T) 0, (T) z };
      34  }
      35  
      36  struct S
      37  qux (unsigned short x, T y)
      38  {
      39    W z = (W) x + y;
      40    return (struct S) { z > ~(T) 0, (T) z };
      41  }
      42  
      43  struct S
      44  corge (T x, T y)
      45  {
      46    T w = x + y;
      47    W z = (W) x + y;
      48    return (struct S) { z > ~(T) 0, w };
      49  }
      50  
      51  struct S
      52  garple (T x, T y)
      53  {
      54    W z = (W) x + y;
      55    T w = x + y;
      56    return (struct S) { z > ~(T) 0, w };
      57  }
      58  
      59  /* { dg-final { scan-tree-dump-times "ADD_OVERFLOW" 6 "widening_mul" { target { i?86-*-* x86_64-*-* } } } } */