https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83252

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
Started r249450, was likely latent before that.
Slightly adjusted testcase (needs C++ though, for some reason with C it doesn't
FAIL).  The difference between r255257 and r255258 is:
--- pr83252.s.r255257   2017-12-03 06:47:40.000000000 -0500
+++ pr83252.s.r255258   2017-12-03 06:47:52.000000000 -0500
@@ -114,7 +114,8 @@ _Z3foov:
        testl   %ecx, %ecx
        jne     .L12
 .L11:
-       imull   $1511624318, %esi, %eax
+       movl    -28(%rsp), %eax
+       cmpq    $1, t(%rip)
        sbbl    $-1, %eax
 .L12:
        movl    -8(%rsp), %edx

// PR target/83252
// { dg-do run { target lp64 } }
// { dg-options "-O3" }
// { dg-additional-options "-mbmi2 -mtune=intel" { target bmi2 } }

long long int h = 8707493562598231894LL;
long long int i = 2720142332956971588LL;
long long int j = 5337614525613944604LL;
unsigned int k = 1092738485U;
long long int l = -2228108721620697360LL;
unsigned int m = 3060393125U;
long long int n = -5267148545474741934LL;
long long int o = 628644587444781171LL;
long long int p = -1929881923114969467LL;
unsigned int q = 342358347U;
unsigned int r = 4141428744U;
unsigned int s = 3147872734U;
long long int t = 2249711228974996732LL;
unsigned int u = 4012608111U;
unsigned int v = 664122423U;
unsigned int w = 795984700U;
unsigned int x = 751359462U;
unsigned int *y = &x;
unsigned int z = 274677517U;
unsigned long long int z1 = 14738459288714673932ULL;
unsigned int *z2 = &z;
unsigned int *z3 = &v;
unsigned long long int *z4 = &z1;
long long int z5;
unsigned int z6;
long long int *z7 = &z5;
unsigned int *z8 = &z6;
unsigned long long int z9 = 5759377091529791657ULL;
unsigned long long int x7 = 15085582420970487994ULL;
unsigned long long int y2 = 13537462614340337437ULL;
unsigned int y3 = 3159284560U;
long long int y4 = -5592336281551563373LL;
unsigned int y5 = 916868838U;
unsigned long long int y6 = 122846687590239390ULL;
unsigned long long int y7 = 15084731736992858763ULL;
unsigned int y8 = 1383085329U;
long long int y9 = 676559977929482050LL;
unsigned int x1 = 1321771489U;
unsigned int x2 = 2438389883U;
long long int x3 = 2997174617692616057LL;
unsigned long long int x4 = 4431338120255382076ULL;
unsigned long long int x5 = 11272010769831539270ULL;
unsigned int x6 = 2906827848U;

void
foo (void)
{
  if ((-2783342978U * (int) l || z) && z2 && h && z1 && (z9 & ~-(8 ?
-2783342978U * (int) l : 0)))
    {
      i = m < n;
      y7 = o >> *y - 751359400;
      *z3 = x7;
      long a = (o >> *y - 751359400 >> ~-(8 ? -2783342978U * (int) l : 0) -
88480234)
               - (808 ? 8 ? -2783342978U * (int) l : 0 : 0) ? y2 : ~-(8 ?
-2783342978U * (int) l : 0) - 88480234;
      y6 = a;
      if (~0 % *z4 % 5)
        y8 = -3 * ((8 ? l : 0) - 4 ? : 407228174574);
      if (y3 < (0 || ~0))
        {
          long long *b = &y9;
          z3 = 0;
          int c = *z2;
          *z7 = 0;
          x1 = ~(808 ? -(8 ? (unsigned) (-2783342978U * l) : 0) : 0);
          p = *b & j;
          x2 = c;
        }
      else
        {
          j = 0;
          int d, e = !0 % (q % *z4);
          r = ((s || !k) && t) - -(8 ? -2783342978U * (int) l : d);
          x3 = o >> *y - 751359400;
          y9 = z9;
          long f = o >> *y - 751359400 >> ~-(8 ? -2783342978U * (int) l : 0) -
88480234;
          x4 = z1;
          u = n * f * e * y4;
        }
      if (8ULL * -(808 ? -(8 ? -2783342978U * (int) l : 0) : 0))
        ;
      else
        {
          *z3 = 0;
          int g = 3 & y5;
          x5 = (unsigned) (~o + 9223372036854775807 >> (8 ? l : 0));
          *z8 = g + y9;
          v = j || ~0 + 9223372036854775807 >> ~-(8 ? -2783342978U * (int) l :
0);
          x6 = o >> (8 ? 8 * l : 0);
          w = *y ? -2783342978U * l : 0;
        }
    }
}

int
main ()
{
  foo ();
  if (r != 88480289)
    __builtin_abort ();
  return 0;
}

Reply via email to