[Bug target/110606] ICE output_operand: '%&' used without any local dynamic TLS references on powerpc64le-linux-gnu

jeevitha at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Mon Dec 4 09:36:26 GMT 2023


https://gcc.gnu.org/bugzilla/show_bug.cgi?id=110606

--- Comment #6 from Jeevitha <jeevitha at gcc dot gnu.org> ---
The ICE is happenning on the following insn at final_scan,

(insn 80 146 111 (set (reg:DI 28 28 [145])
        (high:DI (unspec:DI [
                    (reg:DI 2 2)
                ] UNSPEC_TLSLD))) "test.ii":28:7 737 {*tls_ld_high64}
     (expr_list:REG_EQUIV (high:DI (unspec:DI [
                    (reg:DI 2 2)
                ] UNSPEC_TLSLD))
        (nil)))

It was unable to parse the operand "%&" in the following instruction for above
RTL.
      "addis %0,%1,%&@got@tlsld@ha"

For the operand "%&" tries to retrive some local-dynamic symbol in that
function but it return null. This happened because that function lost its
symbol(it was dead insn and removed from split3). Unfortunately the reference
are not removed, those instruction are unused but not eliminated which results
in error.


More information about the Gcc-bugs mailing list