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