summaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-20 11:30:13 +0000
committerhubicka <hubicka@138bc75d-0d04-0410-961f-82ee72b054a4>2001-07-20 11:30:13 +0000
commitd82dc0a7b0acf3d13281ce651cb28a47e4fdf3df (patch)
tree68a78b6db80ae50443d9150291420d446bb9de23 /gcc
parent102971760a9ac3115d1e9120f5cda6f2c2d02110 (diff)
downloadgcc-d82dc0a7b0acf3d13281ce651cb28a47e4fdf3df.tar.gz
* 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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/ChangeLog12
-rw-r--r--gcc/except.c3
-rw-r--r--gcc/fold-const.c17
-rw-r--r--gcc/integrate.c22
4 files changed, 45 insertions, 9 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index 51df8fed28a..69fd6836c75 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,3 +1,15 @@
+Fri Jul 20 13:24:16 CEST 2001 Jan Hubicka <jh@suse.cz>
+
+ * 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 <aldyh@redhat.com>
* config/mips/mips.h (ISA_HAS_NMADD_NMSUB): New macro.
diff --git a/gcc/except.c b/gcc/except.c
index da501012648..01e83f0c469 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 ce96f113860..55480d269f4 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 cfab58a6f6e..83d3819b832 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