aboutsummaryrefslogtreecommitdiff
path: root/gcc/gcse.c
diff options
context:
space:
mode:
authorJan Hubicka <jh@suse.cz>2003-07-30 19:27:17 +0200
committerJan Hubicka <hubicka@gcc.gnu.org>2003-07-30 17:27:17 +0000
commita0c8285b03a452fcdf39e4d3db8d7710123584b0 (patch)
tree181f1593ae48087fad3a738850b5465caf5b57c3 /gcc/gcse.c
parent1051c718b1be8473bacf4d7c65be3f7304116ddc (diff)
downloadgcc-a0c8285b03a452fcdf39e4d3db8d7710123584b0.zip
gcc-a0c8285b03a452fcdf39e4d3db8d7710123584b0.tar.gz
gcc-a0c8285b03a452fcdf39e4d3db8d7710123584b0.tar.bz2
re PR c/10320 (gcc 3.4 gets rid of static inline function that does not get inlined)
* gcse.c (insert_store): Ignore fake edges. * c-common.c (flag_vtable_gc): Kill. * c-common.g (flag_vtable_gc): Kill. * c-opts (c_common_handle_option): Kill. * c.opt (fvtable-gc): Kill. * final.c (final_scan_insn): Do not call assemble_vtable_entry. * output.h (assemble_vtable_entry, assemble_vtable_inherit): Kill. * varasm.c (assemble_vtable_entry, assemble_vtable_inherit): Kill. * invoke.texi (-ftable-gc): Kill documentation. PR C/10320 * tree-inline.c (inlinable_function_p): Don't set DECL_UNINLINABLE just because function body is missing. * i386.c (pic_symbolic_operand): Properly detect RIP relative unspecs. * class.c (build_vtable_entry_ref): Kill. (build_vtbl_ref_1): Do not call build_vtable_entry_ref. (build_vfn_ref): Do not call build_vtable_entry_ref. * cp-lang.c (LANG_HOOKS_PREPARE_ASSEMBLE_VARIABLE): Kill. * cp-tree.h (prepare_assemble_variable): Kill. * cp-decl.c (prepare_assemble_variable): Kill. From-SVN: r69964
Diffstat (limited to 'gcc/gcse.c')
-rw-r--r--gcc/gcse.c18
1 files changed, 11 insertions, 7 deletions
diff --git a/gcc/gcse.c b/gcc/gcse.c
index 9d15405..a8bb453 100644
--- a/gcc/gcse.c
+++ b/gcc/gcse.c
@@ -7495,6 +7495,9 @@ insert_store (struct ls_expr * expr, edge e)
if (expr->reaching_reg == NULL_RTX)
return 0;
+ if (e->flags & EDGE_FAKE)
+ return 0;
+
reg = expr->reaching_reg;
insn = gen_move_insn (copy_rtx (expr->pattern), reg);
@@ -7503,13 +7506,14 @@ insert_store (struct ls_expr * expr, edge e)
edges so we don't try to insert it on the other edges. */
bb = e->dest;
for (tmp = e->dest->pred; tmp ; tmp = tmp->pred_next)
- {
- int index = EDGE_INDEX (edge_list, tmp->src, tmp->dest);
- if (index == EDGE_INDEX_NO_EDGE)
- abort ();
- if (! TEST_BIT (pre_insert_map[index], expr->index))
- break;
- }
+ if (!tmp->flags & EDGE_FAKE)
+ {
+ int index = EDGE_INDEX (edge_list, tmp->src, tmp->dest);
+ if (index == EDGE_INDEX_NO_EDGE)
+ abort ();
+ if (! TEST_BIT (pre_insert_map[index], expr->index))
+ break;
+ }
/* If tmp is NULL, we found an insertion on every edge, blank the
insertion vector for these edges, and insert at the start of the BB. */