This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
S/390 Bootstrap failure due to fixup_eh_region_note
- From: Andreas Krebbel <krebbel1 at de dot ibm dot com>
- To: rth at redhat dot com
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 5 Sep 2005 14:27:54 +0200
- Subject: 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-