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

--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
This is quite impossible to reduce, after 16 hours of creduce I've reduced 22%
from the original size.
I've tried to build a testcase based on what I see in the reassociation, but
void bar (int);
unsigned long int vx, vx2, vx3;

unsigned long int
foo (unsigned long int _55062, unsigned long int _55063,
     unsigned long int _55172, unsigned long int _55171,
     int u, int v, int w, int x)
{
  unsigned long int _55173 = _55171 * _55172;
  _Bool t1, t2;
  if (u == 35)
    t1 = 1;
  else if (u == 27)
    t1 = 0;
  else if (v == 12)
    {
      bar (4);
      t1 = 1;
    }
  else if (v == 24)
    {
      bar (5);
      t1 = 1;
    }
  else
    {
      bar (6);
      t1 = 1;
    }
  unsigned long int _55001 = vx2;
  unsigned long int _55053 = t1;
  unsigned long int _55054 = _55001 * _55053;
  unsigned long int _55064 = _55062 * _55063;
  unsigned long int _55060 = vx;
  unsigned long int _55065 = -_55064;
  unsigned long int _55066 = _55060 * _55065;
  unsigned long int _55067 = _55054 * _55066;
  if (w == 35)
    t2 = 1;
  else if (w == 27)
    t2 = 0;
  else if (x == 12)
    {
      bar (4);
      t2 = 1;
    }
  else if (x == 24)
    {
      bar (5);
      t2 = 1;
    }
  else
    {
      bar (6);
      t2 = 1;
    }
  unsigned long int _55119 = vx3;
  unsigned long int _55225 = t2;
  unsigned long int _55226 = _55173 * _55225;
  unsigned long int _55227 = _55119 * _55226;
  unsigned long int _55228 = _55067 * _55227;
  unsigned long int _55229 = _55228 * 9323891652267032265ULL;
  return _55229;
}

has different ranks and so while it gives the same ops order after
linearize_expr_tree, the following sorting changes it.

Reply via email to