This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

S/390 Bootstrap failure due to fixup_eh_region_note


Hello Richard,

s390 and s390x can't bootstrap with the following patch, because the new assertion
introduced with the fixup_eh_region_note function is triggered.

http://gcc.gnu.org/ml/gcc-cvs/2005-08/msg01022.html

2005-08-31  Richard Henderson  <rth@redhat.com>

        PR rtl-opt/23601
        * reload1.c (reload): Set MEM_NOTRAP_P in spill slots.
        (fixup_eh_region_note): New.
        (reload_as_needed): Call it.
        (fixup_abnormal_edges): Allow all throwing insns to be deleted;
        don't call find_many_sub_basic_blocks; call verify_flow_info.
        * function.c (assign_stack_local_1): Set MEM_NOTRAP_P.
        (keep_stack_depressed): Likewise.
        (assign_stack_temp_for_type): Likewise; use adjust_address_nv.


Before reload we have the following insn containing two MEMs which may
trigger a trap:

(insn 31 29 49 5 (set (mem/s/j:SI (plus:SI (reg/v/f:SI 47 [ env ])
                (const_int 4 [0x4])) [0 <variable>.ex+0 S4 A32])
        (mem/f:SI (plus:SI (plus:SI (reg:SI 55)
                    (reg:SI 56))
                (const_int 4092 [0xffc])) [0 S4 A32])) 52 {*movsi_esa} (insn_list:REG_DEP_TRUE 29 (nil))
    (expr_list:REG_DEAD (reg:SI 55)
        (expr_list:REG_DEAD (reg:SI 56)
            (expr_list:REG_DEAD (reg/v/f:SI 47 [ env ])
                (expr_list:REG_EH_REGION (const_int 2 [0x2])
                    (nil))))))


Reload adds a new insn reloading one of the MEMs resulting in two insns
which may trap:

(insn 75 29 31 5 (set (reg:SI 2 %r2)
        (mem/f:SI (plus:SI (plus:SI (reg:SI 2 %r2 [55])
                    (reg:SI 1 %r1 [56]))
                (const_int 4092 [0xffc])) [0 S4 A32])) -1 (nil)
    (expr_list:REG_EH_REGION (const_int 2 [0x2])
        (nil)))

(insn 31 75 49 5 (set (mem/s/j:SI (plus:SI (reg/v/f:SI 12 %r12 [orig:47 env ] [47])
                (const_int 4 [0x4])) [0 <variable>.ex+0 S4 A32])
        (reg:SI 2 %r2)) 52 {*movsi_esa} (insn_list:REG_DEP_TRUE 29 (nil))
    (expr_list:REG_DEAD (reg:SI 2 %r2 [55])
        (expr_list:REG_DEAD (reg:SI 1 %r1 [56])
            (expr_list:REG_DEAD (reg/v/f:SI 12 %r12 [orig:47 env ] [47])
                (expr_list:REG_EH_REGION (const_int 2 [0x2])
                    (nil))))))

Hence the trap_count in fixup_eh_region_note is set to 2 which triggers the assertion
at the end of that function. So it seems the assertion is too strict here.

The problem occurs when libjava/jni.cc is compiled. If you need a testcase I will try
to reduce the huge preprocessed file as far as possible.

Bye,

-Andreas-


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]