[Bug c/105134] New: tree-vectorize produces error code

2022-04-01 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

Bug ID: 105134
   Summary: tree-vectorize produces error code
   Product: gcc
   Version: 12.0
Status: UNCONFIRMED
  Severity: normal
  Priority: P3
 Component: c
  Assignee: unassigned at gcc dot gnu.org
  Reporter: piliu at redhat dot com
  Target Milestone: ---

On x86_64, kexec-tools built with gcc-12 can not boot the 2nd kernel
successfully.

After debugging, it turns out to be related with "tree-vectorize" option.
As kexec-tools commit 1b03cf7 purgatory: do not enable vectorization
automatically for purgatory compiling.

I have no idea about what happens, but it seems to be related with the
generation of the code piece

void sha256_starts( sha256_context *ctx )
{
ctx->total[0] = 0;
ctx->total[1] = 0;

ctx->state[0] = 0x6A09E667;
ctx->state[1] = 0xBB67AE85;
ctx->state[2] = 0x3C6EF372;
ctx->state[3] = 0xA54FF53A;
ctx->state[4] = 0x510E527F;
ctx->state[5] = 0x9B05688C;
ctx->state[6] = 0x1F83D9AB;
ctx->state[7] = 0x5BE0CD19;
}

[Bug c/105134] tree-vectorize produces error code

2022-04-01 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

--- Comment #1 from piliu at redhat dot com ---
More description about the background.

There is a built file kexec-tools/purgatory/purgatory.ro, which is a tiny
bootload, compare and verify the sha256, if ok, then jump to the 2nd kernel.

The original sha256 value comes from
update_purgatory()
{
..
elf_rel_set_symbol(&info->rhdr, "sha256_regions", ®ion,
   sizeof(region));
elf_rel_set_symbol(&info->rhdr, "sha256_digest", &digest,
   sizeof(digest));

}

They are based on the loaded linux kernel image.

Now, "kexec -e" and purgatory.ro runs, and in
void purgatory(void)
{
printf("I'm in purgatory\n");
setup_arch();
if (!skip_checks && verify_sha256_digest()) {
for(;;) {
/* loop forever */   --> stuck here
}
}
post_verification_setup_arch();
}

[Bug c/105134] tree-vectorize produces error code

2022-04-01 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

--- Comment #2 from piliu at redhat dot com ---
More specific, the following directive beats out the bug.

diff --git a/util_lib/sha256.c b/util_lib/sha256.c
index 2e61a31..3b3e533 100644
--- a/util_lib/sha256.c
+++ b/util_lib/sha256.c
@@ -38,6 +38,7 @@
(b)[(i) + 3] = (uint8_t) ( (n)   ); \
 }

+ __attribute__((optimize("no-tree-vectorize")))
 void sha256_starts( sha256_context *ctx )

[Bug c/105134] tree-vectorize produces error code

2022-04-05 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

--- Comment #4 from piliu at redhat dot com ---
(In reply to Richard Biener from comment #3)
> Can you provide preprocessed source of the TU containing sha256_starts and
> the full compiler command-line used to compile it?

For a single file.
gcc -fno-zero-initialized-in-bss -mcmodel=large -Os -fno-builtin -ffreestanding
-fno-zero-initialized-in-bss -fno-PIC -fno-PIE -fno-stack-protector -O2 
-mcmodel=large -I./purgatory/include -I./purgatory/arch/x86_64/include
-I./util_lib/include -I./include -Iinclude
-I/usr/lib/gcc/x86_64-redhat-linux/12/include  -c -o purgatory/sha256.o
util_lib/sha256.c

For the complete compile log, please see the attachment.

[Bug c/105134] tree-vectorize produces error code

2022-04-05 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

--- Comment #5 from piliu at redhat dot com ---
Created attachment 52756
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52756&action=edit
-ftree-vectorize can not produce correct code for kexec-tools

[Bug c/105134] tree-vectorize produces error code

2022-04-05 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

--- Comment #6 from piliu at redhat dot com ---
Created attachment 52757
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=52757&action=edit
precompiled code of sha256

compile command:

gcc -E -fno-zero-initialized-in-bss -mcmodel=large -Os -fno-builtin
-ffreestanding -fno-zero-initialized-in-bss -fno-PIC -fno-PIE
-fno-stack-protector -O2  -mcmodel=large -I./purgatory/include
-I./purgatory/arch/x86_64/include -I./util_lib/include -I./include -Iinclude
-I/usr/lib/gcc/x86_64-redhat-linux/12/include  -c -o purgatory/sha256.o
util_lib/sha256.c

[Bug c/105134] tree-vectorize produces error code

2022-11-29 Thread piliu at redhat dot com via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105134

--- Comment #10 from piliu at redhat dot com ---
(In reply to Andrew Pinski from comment #7)
> I am trying to understand this. Is it ok to use the SSE registers inside
> purgatory or not?
> 

SSE can speed up the program, and if possible it is suggested to turn on.

Any guideline about when it can not be used?

> Now that the vectorizer is used turned on at -O2 and above, without
> -mno-sse, on x86_64 target, the vector instructions are generated. and since
> this is inside a tiny bootloader, I am suspecting you can't use SSE
> instructions here.
> 

What is broken by SSE? That can be more persuaded.

Thanks,

Pingfan