[Bug rtl-optimization/105936] [10 Regression] ICE with inline-asm and TLS on x86_64 and -O2 in move_insn
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105936 Stas Sergeev changed: What|Removed |Added Resolution|DUPLICATE |FIXED --- Comment #6 from Stas Sergeev --- But no patch is back-ported, and already closing the ticket?
[Bug rtl-optimization/105936] [10 Regression] ICE with inline-asm and TLS on x86_64 and -O2 in move_insn
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105936 Uroš Bizjak changed: What|Removed |Added Status|UNCONFIRMED |RESOLVED Resolution|--- |DUPLICATE --- Comment #5 from Uroš Bizjak --- Dup of PR104777, the patch from the PR should be backported to gcc-10. *** This bug has been marked as a duplicate of bug 104777 ***
[Bug rtl-optimization/105936] [10 Regression] ICE with inline-asm and TLS on x86_64 and -O2 in move_insn
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105936 --- Comment #4 from Uroš Bizjak --- Digging a bit further with current gcc-10 branch... Instrumenting a TLS address splitter in i386.md with some creative printfs: (define_split [(match_operand 0 "tls_address_pattern")] "TARGET_TLS_DIRECT_SEG_REFS" [(match_dup 0)] { debug_rtx (curr_insn); debug_rtx (operands[0]); printf ("%s\n", GET_RTX_NAME (classify_insn (operands[0]))); operands[0] = ix86_rewrite_tls_address (operands[0]); debug_rtx (operands[0]); printf ("%s\n", GET_RTX_NAME (classify_insn (operands[0]))); }) we get: (insn 54 51 109 9 (parallel [ (asm_operands/v ("btrl %1,%0") ("") 0 [ (mem/c:BLK (plus:DI (plus:DI (unspec:DI [ (const_int 0 [0]) ] UNSPEC_TP) (reg:DI 100)) (const_int 96 [0x60])) [21 MEM[(struct revectored_struct *) + 96B]+0 S32 A32]) (reg:SI 101) ] [ (asm_input:BLK ("m") ../../../src/include/cpu.h:355) (asm_input:SI ("r") ../../../src/include/cpu.h:355) ] [] ../../../src/include/cpu.h:355) (clobber (reg:CC 17 flags)) ]) "../../../src/include/cpu.h":355:2 -1 (expr_list:REG_DEAD (reg:SI 101) (expr_list:REG_DEAD (reg:DI 100) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil) (parallel [ (asm_operands/v ("btrl %1,%0") ("") 0 [ (mem/c:BLK (plus:DI (plus:DI (unspec:DI [ (const_int 0 [0]) ] UNSPEC_TP) (reg:DI 100)) (const_int 96 [0x60])) [21 MEM[(struct revectored_struct *) + 96B]+0 S32 A32]) (reg:SI 101) ] [ (asm_input:BLK ("m") ../../../src/include/cpu.h:355) (asm_input:SI ("r") ../../../src/include/cpu.h:355) ] [] ../../../src/include/cpu.h:355) (clobber (reg:CC 17 flags)) ]) jump_insn (parallel [ (asm_operands/v ("btrl %1,%0") ("") 0 [ (mem/c:BLK (plus:DI (reg:DI 100) (const_int 96 [0x60])) [21 MEM[(struct revectored_struct *) + 96B]+0 S32 A32 AS1]) (reg:SI 101) ] [ (asm_input:BLK ("m") ../../../src/include/cpu.h:355) (asm_input:SI ("r") ../../../src/include/cpu.h:355) ] [] ../../../src/include/cpu.h:355) (clobber (reg:CC 17 flags)) ]) jump_insn Please note that classify_insn declares the pattern as JUMP_INSN due to: if (GET_CODE (x) == ASM_OPERANDS && ASM_OPERANDS_LABEL_VEC (x)) return JUMP_INSN; but no label is defined in asm operands.
[Bug rtl-optimization/105936] [10 Regression] ICE with inline-asm and TLS on x86_64 and -O2 in move_insn
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105936 --- Comment #3 from Uroš Bizjak --- For some reason, split1 pass converts (insn): (insn 54 51 109 9 (parallel [ (asm_operands/v ("btrl %1,%0") ("") 0 [ (mem/c:BLK (plus:DI (plus:DI (unspec:DI [ (const_int 0 [0]) ] UNSPEC_TP) (reg:DI 100)) (const_int 96 [0x60])) [21 MEM[(struct revectored_struct *) + 96B]+0 S32 A32]) (reg:SI 101) ] [ (asm_input:BLK ("m") ../../../src/include/cpu.h:355) (asm_input:SI ("r") ../../../src/include/cpu.h:355) ] [] ../../../src/include/cpu.h:355) (clobber (reg:CC 17 flags)) ]) "../../../src/include/cpu.h":355:2 -1 (expr_list:REG_DEAD (reg:SI 101) (expr_list:REG_DEAD (reg:DI 100) (expr_list:REG_UNUSED (reg:CC 17 flags) (nil) to (jump_insn): (jump_insn 111 51 113 9 (parallel [ (asm_operands/v ("btrl %1,%0") ("") 0 [ (mem/c:BLK (plus:DI (reg:DI 100) (const_int 96 [0x60])) [21 MEM[(struct revectored_struct *) + 96B]+0 S32 A32 AS1]) (reg:SI 101) ] [ (asm_input:BLK ("m") ../../../src/include/cpu.h:355) (asm_input:SI ("r") ../../../src/include/cpu.h:355) ] [] ../../../src/include/cpu.h:355) (clobber (reg:CC 17 flags)) ]) "../../../src/include/cpu.h":355:2 -1 (nil)) This confuses sched2 pass.
[Bug rtl-optimization/105936] [10 Regression] ICE with inline-asm and TLS on x86_64 and -O2 in move_insn
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105936 Andrew Pinski changed: What|Removed |Added Keywords||needs-reduction --- Comment #2 from Andrew Pinski --- Note my reduced testcase fails on 11.2.0 but passes on both 10.x and 11.3.0. So I might have reduced it to the wrong one.
[Bug rtl-optimization/105936] [10 Regression] ICE with inline-asm and TLS on x86_64 and -O2 in move_insn
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105936 Andrew Pinski changed: What|Removed |Added Keywords|needs-reduction |inline-asm Summary|[10 Regression] internal|[10 Regression] ICE with |compiler error: in |inline-asm and TLS on |move_insn, at |x86_64 and -O2 in move_insn |haifa-sched.c:5463 | --- Comment #1 from Andrew Pinski --- Reduced testcase: typedef struct { unsigned short offset; unsigned short segment; } far_t; extern __thread int vm86u[8]; int int33_hooked; int is_revectored(void); void log_printf(void); far_t int33_unrevect(unsigned short gg) { far_t ret = {}; if (int33_hooked) return ret; if (is_revectored()) { log_printf(); __asm__ __volatile__("" : :"m" (vm86u[0])); } else { if (gg) log_printf(); } ret.segment = 0x0f000; ret.offset = 0xf847; return ret; }