From d82dc0a7b0acf3d13281ce651cb28a47e4fdf3df Mon Sep 17 00:00:00 2001 From: hubicka Date: Fri, 20 Jul 2001 11:30:13 +0000 Subject: [PATCH] * integrate.c (copy_insn_list): handle NOTE_INSN_DELETED_LABEL, as if it were CODE_LABEL. (copy_rtx_and_substitute): Likewise; behave to NOTE_INSN_DELETED_LABEL identically as to CODE_LABEL. * fold-const (fold): Convert A/B/C to A/(B*C) and A/(B/C) to (A/B)*C * except.c (connect_post_landing_pads): Delete the RESX insns. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@44193 138bc75d-0d04-0410-961f-82ee72b054a4 --- gcc/ChangeLog | 12 ++++++++++++ gcc/except.c | 3 +-- gcc/fold-const.c | 17 +++++++++++++++++ gcc/integrate.c | 22 +++++++++++++++------- 4 files changed, 45 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 51df8fe..69fd683 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +Fri Jul 20 13:24:16 CEST 2001 Jan Hubicka + + * integrate.c (copy_insn_list): handle + NOTE_INSN_DELETED_LABEL, as if it were CODE_LABEL. + (copy_rtx_and_substitute): Likewise; behave to NOTE_INSN_DELETED_LABEL + identically as to CODE_LABEL. + + * fold-const (fold): Convert A/B/C to A/(B*C) and + A/(B/C) to (A/B)*C + + * except.c (connect_post_landing_pads): Delete the RESX insns. + 2001-07-20 Aldy Hernandez * config/mips/mips.h (ISA_HAS_NMADD_NMSUB): New macro. diff --git a/gcc/except.c b/gcc/except.c index da50101..01e83f0 100644 --- a/gcc/except.c +++ b/gcc/except.c @@ -1846,8 +1846,7 @@ connect_post_landing_pads () seq = get_insns (); end_sequence (); emit_insns_before (seq, region->resume); - - /* Leave the RESX to be deleted by flow. */ + flow_delete_insn (region->resume); } } diff --git a/gcc/fold-const.c b/gcc/fold-const.c index ce96f11..55480d2 100644 --- a/gcc/fold-const.c +++ b/gcc/fold-const.c @@ -5866,6 +5866,23 @@ fold (expr) } } } + /* Convert A/B/C to A/(B*C). */ + if (flag_unsafe_math_optimizations + && TREE_CODE (arg0) == RDIV_EXPR) + { + return fold (build (RDIV_EXPR, type, TREE_OPERAND (arg0, 0), + build (MULT_EXPR, type, TREE_OPERAND (arg0, 1), + arg1))); + } + /* Convert A/(B/C) to (A/B)*C. */ + if (flag_unsafe_math_optimizations + && TREE_CODE (arg1) == RDIV_EXPR) + { + return fold (build (MULT_EXPR, type, + build (RDIV_EXPR, type, arg0, + TREE_OPERAND (arg1, 0)), + TREE_OPERAND (arg1, 1))); + } goto binary; case TRUNC_DIV_EXPR: diff --git a/gcc/integrate.c b/gcc/integrate.c index cfab58a..83d3819 100644 --- a/gcc/integrate.c +++ b/gcc/integrate.c @@ -1555,6 +1555,14 @@ copy_insn_list (insns, map, static_chain_value) break; case NOTE: + if (NOTE_LINE_NUMBER (insn) == NOTE_INSN_DELETED_LABEL) + { + copy = emit_label (get_label_from_map (map, + CODE_LABEL_NUMBER (insn))); + map->const_age++; + break; + } + /* NOTE_INSN_FUNCTION_END and NOTE_INSN_FUNCTION_BEG are discarded because it is important to have only one of each in the current function. @@ -1992,18 +2000,18 @@ copy_rtx_and_substitute (orig, map, for_lhs) copy = SUBREG_REG (copy); return gen_rtx_fmt_e (code, VOIDmode, copy); + /* We need to handle "deleted" labels that appear in the DECL_RTL + of a LABEL_DECL. */ + case NOTE: + if (NOTE_LINE_NUMBER (orig) != NOTE_INSN_DELETED_LABEL) + break; + + /* ... FALLTHRU ... */ case CODE_LABEL: LABEL_PRESERVE_P (get_label_from_map (map, CODE_LABEL_NUMBER (orig))) = LABEL_PRESERVE_P (orig); return get_label_from_map (map, CODE_LABEL_NUMBER (orig)); - /* We need to handle "deleted" labels that appear in the DECL_RTL - of a LABEL_DECL. */ - case NOTE: - if (NOTE_LINE_NUMBER (orig) == NOTE_INSN_DELETED_LABEL) - return map->insn_map[INSN_UID (orig)]; - break; - case LABEL_REF: copy = gen_rtx_LABEL_REF -- 2.7.4