[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-12 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

Jakub Jelinek  changed:

   What|Removed |Added

   Priority|P1  |P2

--- Comment #6 from Jakub Jelinek  ---
A 13 years old ICE on an obscure testcase isn't P1, nobody is using hundreds of
megabytes of TLS data, typically one uses hundreds of bytes at most, these
problems are only when one needs more than 2GB of TLS data.

[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-12 Thread law at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

Jeffrey A. Law  changed:

   What|Removed |Added

   Priority|P3  |P1
 CC||law at gcc dot gnu.org

[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

--- Comment #5 from Jakub Jelinek  ---
While for the local exec we happily use something like
movq%fs:0, %rax
movabsq $b@tpoff+34359738367, %rdx
addq%rdx, %rax
movzbl  (%rax), %eax
we normally use instructions like
movsbl  %fs:b@tpoff+31, %eax
Thus, I'd say at least in the normal code models we have a restriction that the
static TLS area of the whole program must fit into 2GB.
If we want to support something larger, we'd need to use 64-bit relocations
consistently for all LE/IE accesses regardless of whether the immediate offset
into them is > 2GB or not, because it could just be that some other library has
the static TLS area > 2GB and comes earlier, or some other TU etc.
x86-64 has both R_X86_64_TPOFF32 and R_X86_64_TPOFF64 relocations, but it
wouldn't help if we use the 32-bit ones in say
char a;
__thread char b[0x1L];
__thread char c[32L];

int
foo (void)
{
  return c[31L];
}
it just won't really link.

[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

--- Comment #4 from Jakub Jelinek  ---
char a;
__thread char b[0x8L];

int
foo (void)
{
  return b[0x7L];
}

ICEs similarly with -O0 -fpie.

[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

Jakub Jelinek  changed:

   What|Removed |Added

 CC||uros at gcc dot gnu.org

--- Comment #3 from Jakub Jelinek  ---
But I'm quite lost where ix86_legitimize_address should fix this up.
It e.g. calls
12829 if (changed && ix86_legitimate_address_p (mode, x, false))
12830   return x;
but ix86_legitimate_address_p returns false there, but it still doesn't fix it
up later and just returns x anyway.

[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-08 Thread jakub at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

Jakub Jelinek  changed:

   What|Removed |Added

 CC||jakub at gcc dot gnu.org

--- Comment #2 from Jakub Jelinek  ---
I think the ICE started with
r0-105763-g42a48c4fd679d11d10d19d6986c44f7c6dbb57dd
The old emitted asm certainly assembled and I don't see why it wouldn't link,
yes, it is UB at runtime...

[Bug target/114621] [11/12/13/14 Regression] ICE: in extract_insn, at recog.cc:2812 (unrecognizable insn) with -O -fpie and _Thread_local with large offset

2024-04-06 Thread pinskia at gcc dot gnu.org via Gcc-bugs
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114621

Andrew Pinski  changed:

   What|Removed |Added

  Known to fail||4.6.4
Summary|ICE: in extract_insn, at|[11/12/13/14 Regression]
   |recog.cc:2812   |ICE: in extract_insn, at
   |(unrecognizable insn) with  |recog.cc:2812
   |-O -fpie and _Thread_local  |(unrecognizable insn) with
   |with large offset   |-O -fpie and _Thread_local
   ||with large offset
 Ever confirmed|0   |1
 Status|UNCONFIRMED |NEW
   Last reconfirmed||2024-04-06
   Target Milestone|--- |11.5

--- Comment #1 from Andrew Pinski  ---
This didn't ICE in GCC 4.5.4 but it produced assembly which would almost
definitely not link:
movzbl  34359738367+b@tpoff(%rax), %eax