https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89290
--- Comment #2 from Uroš Bizjak <ubizjak at gmail dot com> --- (In reply to Jakub Jelinek from comment #1) > then the ix86_rewrite_tls_address splitter rewrites this into: > (insn 12 6 10 2 (set (mem/c:TI (const:DI (unspec:DI [ > (symbol_ref:DI ("s") [flags 0x2a] <var_decl > 0x7ff97a130b40 s>) > ] UNSPEC_NTPOFF)) [1 s+0 S16 A64 AS1]) > (reg:TI 83)) "pr89290.c":7:5 -1 > (nil)) > and finally we ICE in the split_double_move splitter. The address is constant and offsettable_address_addr_space_p claims that the address (const:DI (unspec:DI [ (symbol_ref:DI ("s") [flags 0x2a] <var_decl 0x7f4cf23f1b40 s>) ] UNSPEC_NTPOFF)) is offsettable due to: if (CONSTANT_ADDRESS_P (y)) return 1; So, we should probably allow addresses in the form of: movq %rax, %fs:s+8@tpoff