tree-flow.h: Remove some prototypes.
* tree-flow.h: Remove some prototypes. * tree.h: Remove some protypes, add a couple. * tree.c (using_eh_for_cleanups_flag, using_eh_for_cleanups, using_eh_for_cleanups_p): Add interface routines for front ends. * tree-eh.h: New file. Add protoptyes. * tree-eh.c (using_eh_for_cleanups_p, using_eh_for_cleanups): Delete. (add_stmt_to_eh_lp_fn): Make static. (lower_try_finally): Use new using_eh_for_cleanups_p. * emit-rtl.c: Include tree-eh.h. * gimple.h: Include tree-eh.h. From-SVN: r203273
This commit is contained in:
parent
0e6a0e48eb
commit
481d1b8153
@ -1,3 +1,16 @@
|
|||||||
|
2013-10-08 Andrew MacLeod <amacleod@redhat.com>
|
||||||
|
|
||||||
|
* tree-flow.h: Remove some prototypes.
|
||||||
|
* tree.h: Remove some protypes, add a couple.
|
||||||
|
* tree.c (using_eh_for_cleanups_flag, using_eh_for_cleanups,
|
||||||
|
using_eh_for_cleanups_p): Add interface routines for front ends.
|
||||||
|
* tree-eh.h: New file. Add protoptyes.
|
||||||
|
* tree-eh.c (using_eh_for_cleanups_p, using_eh_for_cleanups): Delete.
|
||||||
|
(add_stmt_to_eh_lp_fn): Make static.
|
||||||
|
(lower_try_finally): Use new using_eh_for_cleanups_p.
|
||||||
|
* emit-rtl.c: Include tree-eh.h.
|
||||||
|
* gimple.h: Include tree-eh.h.
|
||||||
|
|
||||||
2013-10-08 Marc Glisse <marc.glisse@inria.fr>
|
2013-10-08 Marc Glisse <marc.glisse@inria.fr>
|
||||||
|
|
||||||
PR tree-optimization/58480
|
PR tree-optimization/58480
|
||||||
|
@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
#include "df.h"
|
#include "df.h"
|
||||||
#include "params.h"
|
#include "params.h"
|
||||||
#include "target.h"
|
#include "target.h"
|
||||||
|
#include "tree-eh.h"
|
||||||
|
|
||||||
struct target_rtl default_target_rtl;
|
struct target_rtl default_target_rtl;
|
||||||
#if SWITCHABLE_TARGET
|
#if SWITCHABLE_TARGET
|
||||||
|
@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
#include "tree-ssa-alias.h"
|
#include "tree-ssa-alias.h"
|
||||||
#include "internal-fn.h"
|
#include "internal-fn.h"
|
||||||
#include "gimple-fold.h"
|
#include "gimple-fold.h"
|
||||||
|
#include "tree-eh.h"
|
||||||
|
|
||||||
typedef gimple gimple_seq_node;
|
typedef gimple gimple_seq_node;
|
||||||
|
|
||||||
|
@ -41,15 +41,6 @@ along with GCC; see the file COPYING3. If not see
|
|||||||
i.e. in hash tables. This is a structure to do this. */
|
i.e. in hash tables. This is a structure to do this. */
|
||||||
typedef union {tree *tp; tree t; gimple g;} treemple;
|
typedef union {tree *tp; tree t; gimple g;} treemple;
|
||||||
|
|
||||||
/* Nonzero if we are using EH to handle cleanups. */
|
|
||||||
static int using_eh_for_cleanups_p = 0;
|
|
||||||
|
|
||||||
void
|
|
||||||
using_eh_for_cleanups (void)
|
|
||||||
{
|
|
||||||
using_eh_for_cleanups_p = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Misc functions used in this file. */
|
/* Misc functions used in this file. */
|
||||||
|
|
||||||
/* Remember and lookup EH landing pad data for arbitrary statements.
|
/* Remember and lookup EH landing pad data for arbitrary statements.
|
||||||
@ -66,7 +57,7 @@ using_eh_for_cleanups (void)
|
|||||||
|
|
||||||
/* Add statement T in function IFUN to landing pad NUM. */
|
/* Add statement T in function IFUN to landing pad NUM. */
|
||||||
|
|
||||||
void
|
static void
|
||||||
add_stmt_to_eh_lp_fn (struct function *ifun, gimple t, int num)
|
add_stmt_to_eh_lp_fn (struct function *ifun, gimple t, int num)
|
||||||
{
|
{
|
||||||
struct throw_stmt_node *n;
|
struct throw_stmt_node *n;
|
||||||
@ -1655,7 +1646,7 @@ lower_try_finally (struct leh_state *state, gimple tp)
|
|||||||
this_tf.try_finally_expr = tp;
|
this_tf.try_finally_expr = tp;
|
||||||
this_tf.top_p = tp;
|
this_tf.top_p = tp;
|
||||||
this_tf.outer = state;
|
this_tf.outer = state;
|
||||||
if (using_eh_for_cleanups_p && !cleanup_is_dead_in (state->cur_region))
|
if (using_eh_for_cleanups_p () && !cleanup_is_dead_in (state->cur_region))
|
||||||
{
|
{
|
||||||
this_tf.region = gen_eh_region_cleanup (state->cur_region);
|
this_tf.region = gen_eh_region_cleanup (state->cur_region);
|
||||||
this_state.cur_region = this_tf.region;
|
this_state.cur_region = this_tf.region;
|
||||||
|
52
gcc/tree-eh.h
Normal file
52
gcc/tree-eh.h
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
/* Header file for exception handling.
|
||||||
|
Copyright (C) 2013 Free Software Foundation, Inc.
|
||||||
|
|
||||||
|
This file is part of GCC.
|
||||||
|
|
||||||
|
GCC is free software; you can redistribute it and/or modify it under
|
||||||
|
the terms of the GNU General Public License as published by the Free
|
||||||
|
Software Foundation; either version 3, or (at your option) any later
|
||||||
|
version.
|
||||||
|
|
||||||
|
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||||
|
WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||||
|
for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with GCC; see the file COPYING3. If not see
|
||||||
|
<http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
#ifndef GCC_TREE_EH_H
|
||||||
|
#define GCC_TREE_EH_H
|
||||||
|
|
||||||
|
extern void using_eh_for_cleanups (void);
|
||||||
|
extern void add_stmt_to_eh_lp (gimple, int);
|
||||||
|
extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple);
|
||||||
|
extern bool remove_stmt_from_eh_lp (gimple);
|
||||||
|
extern int lookup_stmt_eh_lp_fn (struct function *, gimple);
|
||||||
|
extern int lookup_stmt_eh_lp (gimple);
|
||||||
|
extern bool make_eh_dispatch_edges (gimple);
|
||||||
|
extern void make_eh_edges (gimple);
|
||||||
|
extern edge redirect_eh_edge (edge, basic_block);
|
||||||
|
extern void redirect_eh_dispatch_edge (gimple, edge, basic_block);
|
||||||
|
extern bool operation_could_trap_helper_p (enum tree_code, bool, bool, bool,
|
||||||
|
bool, tree, bool *);
|
||||||
|
extern bool operation_could_trap_p (enum tree_code, bool, bool, tree);
|
||||||
|
extern bool tree_could_trap_p (tree);
|
||||||
|
extern bool stmt_could_throw_p (gimple);
|
||||||
|
extern bool tree_could_throw_p (tree);
|
||||||
|
extern bool stmt_can_throw_external (gimple);
|
||||||
|
extern bool stmt_can_throw_internal (gimple);
|
||||||
|
extern bool maybe_clean_eh_stmt_fn (struct function *, gimple);
|
||||||
|
extern bool maybe_clean_eh_stmt (gimple);
|
||||||
|
extern bool maybe_clean_or_replace_eh_stmt (gimple, gimple);
|
||||||
|
extern bool maybe_duplicate_eh_stmt_fn (struct function *, gimple,
|
||||||
|
struct function *, gimple,
|
||||||
|
struct pointer_map_t *, int);
|
||||||
|
extern bool maybe_duplicate_eh_stmt (gimple, gimple);
|
||||||
|
extern void maybe_remove_unreachable_handlers (void);
|
||||||
|
extern bool verify_eh_edges (gimple);
|
||||||
|
extern bool verify_eh_dispatch_edge (gimple);
|
||||||
|
|
||||||
|
#endif /* GCC_TREE_EH_H */
|
@ -375,38 +375,6 @@ enum move_pos
|
|||||||
extern enum move_pos movement_possibility (gimple);
|
extern enum move_pos movement_possibility (gimple);
|
||||||
char *get_lsm_tmp_name (tree, unsigned);
|
char *get_lsm_tmp_name (tree, unsigned);
|
||||||
|
|
||||||
/* In tree-flow-inline.h */
|
|
||||||
static inline bool unmodifiable_var_p (const_tree);
|
|
||||||
static inline bool ref_contains_array_ref (const_tree);
|
|
||||||
|
|
||||||
/* In tree-eh.c */
|
|
||||||
extern void make_eh_edges (gimple);
|
|
||||||
extern bool make_eh_dispatch_edges (gimple);
|
|
||||||
extern edge redirect_eh_edge (edge, basic_block);
|
|
||||||
extern void redirect_eh_dispatch_edge (gimple, edge, basic_block);
|
|
||||||
extern bool stmt_could_throw_p (gimple);
|
|
||||||
extern bool stmt_can_throw_internal (gimple);
|
|
||||||
extern bool stmt_can_throw_external (gimple);
|
|
||||||
extern void add_stmt_to_eh_lp_fn (struct function *, gimple, int);
|
|
||||||
extern void add_stmt_to_eh_lp (gimple, int);
|
|
||||||
extern bool remove_stmt_from_eh_lp (gimple);
|
|
||||||
extern bool remove_stmt_from_eh_lp_fn (struct function *, gimple);
|
|
||||||
extern int lookup_stmt_eh_lp_fn (struct function *, gimple);
|
|
||||||
extern int lookup_stmt_eh_lp (gimple);
|
|
||||||
extern bool maybe_clean_eh_stmt_fn (struct function *, gimple);
|
|
||||||
extern bool maybe_clean_eh_stmt (gimple);
|
|
||||||
extern bool maybe_clean_or_replace_eh_stmt (gimple, gimple);
|
|
||||||
extern bool maybe_duplicate_eh_stmt_fn (struct function *, gimple,
|
|
||||||
struct function *, gimple,
|
|
||||||
struct pointer_map_t *, int);
|
|
||||||
extern bool maybe_duplicate_eh_stmt (gimple, gimple);
|
|
||||||
extern bool verify_eh_edges (gimple);
|
|
||||||
extern bool verify_eh_dispatch_edge (gimple);
|
|
||||||
extern void maybe_remove_unreachable_handlers (void);
|
|
||||||
|
|
||||||
/* In tree-ssa-pre.c */
|
|
||||||
void debug_value_expressions (unsigned int);
|
|
||||||
|
|
||||||
/* In tree-loop-linear.c */
|
/* In tree-loop-linear.c */
|
||||||
extern void linear_transform_loops (void);
|
extern void linear_transform_loops (void);
|
||||||
extern unsigned perfect_loop_nest_depth (struct loop *);
|
extern unsigned perfect_loop_nest_depth (struct loop *);
|
||||||
|
18
gcc/tree.c
18
gcc/tree.c
@ -12247,4 +12247,22 @@ block_may_fallthru (const_tree block)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* True if we are using EH to handle cleanups. */
|
||||||
|
static bool using_eh_for_cleanups_flag = false;
|
||||||
|
|
||||||
|
/* This routine is called from front ends to indicate eh should be used for
|
||||||
|
cleanups. */
|
||||||
|
void
|
||||||
|
using_eh_for_cleanups (void)
|
||||||
|
{
|
||||||
|
using_eh_for_cleanups_flag = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Query whether EH is used for cleanups. */
|
||||||
|
bool
|
||||||
|
using_eh_for_cleanups_p (void)
|
||||||
|
{
|
||||||
|
return using_eh_for_cleanups_flag;
|
||||||
|
}
|
||||||
|
|
||||||
#include "gt-tree.h"
|
#include "gt-tree.h"
|
||||||
|
11
gcc/tree.h
11
gcc/tree.h
@ -4216,15 +4216,6 @@ extern rtx expand_stack_save (void);
|
|||||||
extern void expand_stack_restore (tree);
|
extern void expand_stack_restore (tree);
|
||||||
extern void expand_return (tree);
|
extern void expand_return (tree);
|
||||||
|
|
||||||
/* In tree-eh.c */
|
|
||||||
extern void using_eh_for_cleanups (void);
|
|
||||||
|
|
||||||
extern bool tree_could_trap_p (tree);
|
|
||||||
extern bool operation_could_trap_helper_p (enum tree_code, bool, bool, bool,
|
|
||||||
bool, tree, bool *);
|
|
||||||
extern bool operation_could_trap_p (enum tree_code, bool, bool, tree);
|
|
||||||
extern bool tree_could_throw_p (tree);
|
|
||||||
|
|
||||||
/* Compare and hash for any structure which begins with a canonical
|
/* Compare and hash for any structure which begins with a canonical
|
||||||
pointer. Assumes all pointers are interchangeable, which is sort
|
pointer. Assumes all pointers are interchangeable, which is sort
|
||||||
of already assumed by gcc elsewhere IIRC. */
|
of already assumed by gcc elsewhere IIRC. */
|
||||||
@ -4531,6 +4522,8 @@ extern bool types_same_for_odr (tree type1, tree type2);
|
|||||||
extern bool contains_bitfld_component_ref_p (const_tree);
|
extern bool contains_bitfld_component_ref_p (const_tree);
|
||||||
extern bool type_in_anonymous_namespace_p (tree);
|
extern bool type_in_anonymous_namespace_p (tree);
|
||||||
extern bool block_may_fallthru (const_tree);
|
extern bool block_may_fallthru (const_tree);
|
||||||
|
extern void using_eh_for_cleanups (void);
|
||||||
|
extern bool using_eh_for_cleanups_p (void);
|
||||||
|
|
||||||
/* In tree-nested.c */
|
/* In tree-nested.c */
|
||||||
extern tree build_addr (tree, tree);
|
extern tree build_addr (tree, tree);
|
||||||
|
Loading…
Reference in New Issue
Block a user