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

            Bug ID: 121269
           Summary: [16 Regression] gcc.target/i386/asm-hard-reg-{1,2}.c
                    ICEs with RTL checking
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: middle-end
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jakub at gcc dot gnu.org
  Target Milestone: ---

In --enable-checking=yes,rtl,extra x86_64-linux as well as i686-linux builds I
see
FAIL: gcc.target/i386/asm-hard-reg-1.c (internal compiler error: RTL check:
expected elt 3 type 'e' or 'u', have '0' (rtx note) in PATTERN, at rtl.h:1523)
FAIL: gcc.target/i386/asm-hard-reg-2.c (internal compiler error: RTL check:
expected elt 3 type 'e' or 'u', have '0' (rtx note) in PATTERN, at rtl.h:1523)
(plus FAILs for messages the test expect).
The ICE is
0x2de0aff internal_error(char const*, ...)
        ../../gcc/diagnostic-global-context.cc:534
0x8e5ba7 rtl_check_failed_type2(rtx_def const*, int, int, int, char const*,
int, char const*)
        ../../gcc/rtl.cc:761
0x7e44e5 PATTERN(rtx_def*)
        ../../gcc/rtl.h:1523
0x1072632 PATTERN(rtx_def*)
        ../../gcc/recog.h:322
0x1072632 recog_memoized(rtx_insn*)
        ../../gcc/recog.h:323
0x1484ebc lra_set_insn_recog_data(rtx_insn*)
        ../../gcc/lra.cc:993
0x1487ea7 lra_get_insn_recog_data(rtx_insn*)
        ../../gcc/lra-int.h:519
0x1487ea7 lra_process_new_insns(rtx_insn*, rtx_insn*, rtx_insn*, char const*)
        ../../gcc/lra.cc:1937
0x149d379 curr_insn_transform
        ../../gcc/lra-constraints.cc:4956
0x149f106 lra_constraints(bool)
        ../../gcc/lra-constraints.cc:5584
0x1486964 lra(_IO_FILE*, int)
        ../../gcc/lra.cc:2455
0x142f0af do_reload
        ../../gcc/ira.cc:6068
0x142f0af execute
        ../../gcc/ira.cc:6256
lra_set_insn_recog_data is called on
(insn 92 91 95 2 (parallel [
            (asm_operands/v ("") ("") 0 [
                    (reg:SI 217 [ x ])
                    (reg:SI 215 [ y ])
                ]
                 [
                    (asm_input:SI ("{rdx}") asm-hard-reg-1.c:55)
                    (asm_input:SI ("d") asm-hard-reg-1.c:55)
                ]
                 [] asm-hard-reg-1.c:55)
            (clobber (reg:CC 17 flags))
        ]) "asm-hard-reg-1.c":55:3 -1
     (expr_list:REG_DEAD (reg:SI 217 [ x ])
        (expr_list:REG_DEAD (reg:SI 215 [ y ])
            (expr_list:REG_UNUSED (reg:CC 17 flags)
                (nil)))))
Then
#0  set_insn_deleted (insn=0x7fffe9f35500) at ../../gcc/emit-rtl.cc:4421
#1  0x0000000000ba99bb in lra_set_insn_deleted (insn=0x7fffe9f35500) at
../../gcc/lra.cc:264
#2  0x0000000000baa431 in lra_asm_insn_error (insn=0x7fffe9f35500) at
../../gcc/lra.cc:557
#3  0x0000000000bc4ac1 in curr_insn_transform (check_only_p=false) at
../../gcc/lra-constraints.cc:4932
#4  0x0000000000bc6814 in lra_constraints (first_p=false) at
../../gcc/lra-constraints.cc:5584
#5  0x0000000000baefef in lra (f=0x0, verbose=5) at ../../gcc/lra.cc:2455
#6  0x0000000000b571fa in do_reload () at ../../gcc/ira.cc:6068
turns it into
(note 92 2164 95 2 NOTE_INSN_DELETED)
and then lra_set_insn_recog_data is called on it again and ICEs due to
990           icode = INSN_CODE (insn);
991           if (icode < 0)
992             /* It might be a new simple insn which is not recognized yet. 
*/
993             INSN_CODE (insn) = icode = recog_memoized (insn);
...
322       if (INSN_CODE (insn) < 0)
323         INSN_CODE (insn) = recog (PATTERN (insn), insn, 0);
While INSN_CODE on a NOTE doesn't ICE, PATTERN on NOTE ICEs.

Reply via email to