1  /* { dg-do compile } */
       2  /* { dg-options "-O2 -fdump-tree-optimized" } */
       3  
       4  #if __SIZEOF_INT__ == 4
       5  unsigned int foo(unsigned int a, unsigned int b)
       6  {
       7    return (a >> 31) * b;
       8  }
       9  
      10  int bar(int a, int b)
      11  {
      12    return -(a >> 31) * b;
      13  }
      14  
      15  int baz(int a, int b)
      16  {
      17    int c = a >> 31;
      18    int d = -c;
      19    return d * b;
      20  }
      21  
      22  unsigned int pin(int a, unsigned int b)
      23  {
      24    unsigned int t = a & 1;
      25    return t * b;
      26  }
      27  #endif
      28  
      29  #if __SIZEOF_LONG_LONG__ == 8
      30  unsigned long long fool(unsigned long long a, unsigned long long b)
      31  {
      32    return (a >> 63) * b;
      33  }
      34  
      35  long long barl (long long a, long long b)
      36  {
      37    return -(a >> 63) * b;
      38  }
      39  
      40  long long bazl (long long a, long long b)
      41  {
      42    long long c = a >> 63;
      43    long long d = -c;
      44    return d * b;
      45  }
      46  
      47  unsigned long long pinl(long long a, unsigned long long b)
      48  {
      49    unsigned long long t = a & 1;
      50    return t * b;
      51  }
      52  #endif
      53  
      54  /* { dg-final { scan-assembler-not "imul" } } */