[Bug target/116043] [15 regression] TLS relocation issue when building glibc with -O3 -mavx512bf16 by r15-1619
liuhongt at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Wed Jul 24 03:24:03 GMT 2024
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=116043
Hongtao Liu <liuhongt at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Assignee|unassigned at gcc dot gnu.org |liuhongt at gcc dot gnu.org
Status|NEW |ASSIGNED
--- Comment #15 from Hongtao Liu <liuhongt at gcc dot gnu.org> ---
> I think we can exclude case when base and index are both NULL_RTX, let's
> always use *mov{si,di}_internal pattern to move const to register.
No, i misunderstood the issue, it's not the problem of lea pattern, it's the
address of gottpoff shouldn't be reloaded.
In PR103275, r12-5445-gb5844cb0bc8c7d9be2ff1ecded249cad82b9b71c added new
constraint "Bk" to avoid kmovq foo@gottpoff(%rip), %k0, but RA may still
allocates k/v register and try to reload for address since it thought the cost
of reload address is cheap?
Adjust "Bk" to define_special_memory_constraint to avoid address reload can
solve the issue.
modified gcc/config/i386/constraints.md
@@ -187,7 +187,7 @@ (define_special_memory_constraint "Bm"
"@internal Vector memory operand."
(match_operand 0 "vector_memory_operand"))
-(define_memory_constraint "Bk"
+(define_special_memory_constraint "Bk"
"@internal TLS address that allows insn using non-integer registers."
(and (match_operand 0 "memory_operand")
(not (match_test "ix86_gpr_tls_address_pattern_p (op)"))))
I'm testing the patch.
More information about the Gcc-bugs
mailing list