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.