On Mon, Nov 04, 2024 at 02:31:29PM +0100, Jakub Jelinek wrote:
> On Mon, Nov 04, 2024 at 01:07:33PM +0000, Kyrylo Tkachov wrote:
> > > This seems to have broken bootstrap on multiple targets and is causing
> > > the arm CI to hang, miscompiling stage2 - can
> > > you please revert for now?
> > 
> > Sorry for this, I’ve pushed a revert.
> > I did do a clean bootstrap on aarch64-linux this morning before pushing, 
> > but should have looked wider.
> 
> On x86_64-linux, the hang is during var-tracking is while compiling 
> libiberty/sha1.c
> with -g -O2.
> I'm now trying to cvise reduce it.

Here it is somewhat reduced:
time ./cc1.r15-4872 -quiet -g -O2 sha1.i

real    0m0.074s
user    0m0.062s
sys     0m0.012s
time ./cc1.r15-4873 -quiet -g -O2 sha1.i

real    0m10.740s
user    0m10.716s
sys     0m0.012s

>From what I can see, -da -fdump-noaddr dumps with it are identical,
and so is the emitted assembly, it is just that var-tracking spends
those extra 10+ seconds on it.

struct S { unsigned A, B, C, D, E, F; };
void *spbb;
long spbl;
struct S spbc;
void
sha1_process_block (unsigned *endp)
{
  unsigned *words = spbb;
  long nwords = spbl / sizeof 0;
  unsigned x[16];
  unsigned a = spbc.A;
  unsigned b = spbc.B;
  unsigned c = spbc.C;
  unsigned d = spbc.D;
  unsigned e = spbc.E;
  while (words < endp)
    {
      unsigned tm;
      int t;
      t = 0;
      for (; t < 16; t++)
        {
          x[t] = ((*words) >> 24);
          words++;
        }
      tm = x[2] ^ (int) 0 ^ (int) (8) ^ x[15];
      b += ((x[2] = ((tm << 1) | (tm >> 31))));
      tm = x[4] ^ x[0] ^ x[0] ^ x[0];
      e += ((x[4] = tm));
      tm = x[7] ^ x[0] ^ x[0] ^ x[0];
      b += ((x[7] = tm));
      tm = x[9] ^ x[0] ^ x[0] ^ x[0];
      e += ((x[9] = tm));
      tm = x[10] ^ (int) 0 ^ (int) (8) ^ x[7];
      d += ((x[10] = ((tm << 1) | (tm >> 31))));
      tm = x[11] ^ x[13] ^ x[3] ^ x[8];
      c += 0x6ed9eba1 + ((x[11] = ((tm << 1) | (tm >> 31))));
      tm = x[12] ^ x[14] ^ 4U ^ x[9];
      b += 0x6ed9eba1 + ((x[12] = ((tm << 1) | (tm >> 31))));
      a += (((b) >> 0)) + (c ^ d ^ e) + 0x6ed9eba1 + (tm = x[13] ^ 10U, (x[13] 
= ((tm << 0) | (tm >> 31))));
      tm = x[15] ^ x[1] ^ x[12];
      d += +0x6ed9eba1 + ((x[15] = ((tm << 1) | (tm >> 31))));
      tm = 0U ^ x[2] ^ x[8] ^ x[13];
      c += 0x6ed9eba1 + ((x[0] = ((tm << 1) | (tm >> 31))));
      tm = 2U ^ x[4] ^ x[0] ^ x[0];
      a += 0x6ed9eba1 + ((x[2] = tm));
      tm = x[3] ^ x[0] ^ x[0] ^ x[0];
      e += 0x6ed9eba1 + ((x[3] = tm));
      tm = x[8] ^ x[10] ^ x[0] ^ x[5];
      e += 0x8f1bbcdc + ((x[8] = ((tm << 1) | (tm >> 31))));
      tm = x[11] ^ x[0] ^ x[8];
      b += ((a & (d | e))) + 0x8f1bbcdc + ((x[11] = ((tm << 1) | (tm >> 31))));
      tm = x[12] ^ x[0] ^ x[0] ^ x[0];
      a += 0x8f1bbcdc + ((x[12] = tm));
      tm = x[13] ^ x[15] ^ x[0] ^ x[10];
      e += 0x8f1bbcdc + ((x[13] = ((tm << 1) | (tm >> 31))));
      b += 0x8f1bbcdc + ((x[0] = 0));
      tm = x[5] ^ x[7] ^ x[0];
      b += ((a & (d | e))) + 0x8f1bbcdc + ((x[5] = ((tm >> 31))));
      tm = x[6];
      a += 0x8f1bbcdc + ((x[6] = ((tm >> 31))));
      tm = x[8];
      d += 0x8f1bbcdc + ((x[8] = ((tm >> 31))));
      tm = x[10] ^ x[12];
      b += 0x8f1bbcdc + ((x[10] = tm));
      tm = x[11] ^ x[13] ^ x[3] ^ x[0];
      a += 0x8f1bbcdc + ((x[11] = ((tm >> 31))));
      tm = x[13] ^ x[15];
      d += +(a ^ b ^ c) + 0xca62c1d6 + ((x[13] = tm));
      tm = x[15];
      b += (d ^ e ^ a) + 0xca62c1d6 + ((x[15] = ((tm >> 31))));
      d = spbc.D += d;
    }
}


        Jakub

Reply via email to