[Bug rtl-optimization/81308] [8 regression] ICE in calc_dfs_tree, at dominance.c:458

jakub at gcc dot gnu.org gcc-bugzilla@gcc.gnu.org
Tue Jul 4 14:38:00 GMT 2017


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

Jakub Jelinek <jakub at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |uros at gcc dot gnu.org

--- Comment #4 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
In *.postreload we still have:
(insn 27 110 111 3 (parallel [
            (set (reg:SF 8 st [orig:89 _26 ] [89])
                (float_truncate:SF (reg:DF 9 st(1) [116])))
            (clobber (mem/c:SF (plus:SI (reg/f:SI 6 bp)
                        (const_int -76 [0xffffffffffffffb4])) [0  S4 A32]))
        ]) "pr62079.C":50 160 {*truncdfsf_i387}
     (expr_list:REG_EH_REGION (const_int 12 [0xc])
        (nil)))
;;  succ:       10 [always (guessed)]  (FALLTHRU)
;;              5 [never]  count:0 (ABNORMAL,EH)

Now, not sure why is that insn marked as REG_EH_REGION, is that because the
truncation might throw on inexact etc. or because the memory access might
throw?  As the MEM is /c, I'd think the latter should not be the case.
In any case, split2 splits this into:
(insn 117 110 118 3 (set (mem/c:SF (plus:SI (reg/f:SI 6 bp)
                (const_int -76 [0xffffffffffffffb4])) [0  S4 A32])
        (reg:SF 9 st(1))) "pr62079.C":50 127 {*movsf_internal}
     (nil))
(insn 118 117 111 3 (set (reg:SF 8 st [orig:89 _26 ] [89])
        (mem/c:SF (plus:SI (reg/f:SI 6 bp)
                (const_int -76 [0xffffffffffffffb4])) [0  S4 A32]))
"pr62079.C":50 127 {*movsf_internal}
     (nil))
which doesn't have any REG_EH_REGION notes and thus we basically need to clean
up the EH edges, but don't do that.


More information about the Gcc-bugs mailing list