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>
|
||||
|
||||
PR tree-optimization/58480
|
||||
|
@ -55,6 +55,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "df.h"
|
||||
#include "params.h"
|
||||
#include "target.h"
|
||||
#include "tree-eh.h"
|
||||
|
||||
struct target_rtl default_target_rtl;
|
||||
#if SWITCHABLE_TARGET
|
||||
|
@ -31,6 +31,7 @@ along with GCC; see the file COPYING3. If not see
|
||||
#include "tree-ssa-alias.h"
|
||||
#include "internal-fn.h"
|
||||
#include "gimple-fold.h"
|
||||
#include "tree-eh.h"
|
||||
|
||||
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. */
|
||||
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. */
|
||||
|
||||
/* 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. */
|
||||
|
||||
void
|
||||
static void
|
||||
add_stmt_to_eh_lp_fn (struct function *ifun, gimple t, int num)
|
||||
{
|
||||
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.top_p = tp;
|
||||
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_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);
|
||||
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 */
|
||||
extern void linear_transform_loops (void);
|
||||
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"
|
||||
|
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_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
|
||||
pointer. Assumes all pointers are interchangeable, which is sort
|
||||
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 type_in_anonymous_namespace_p (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 */
|
||||
extern tree build_addr (tree, tree);
|
||||
|
Loading…
Reference in New Issue
Block a user