diff options
author | Richard Henderson <rth@redhat.com> | 2004-07-20 15:47:58 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2004-07-20 15:47:58 -0700 |
commit | 14797075918d654f5af84c932568b9e18613ba39 (patch) | |
tree | f7623cae82fb1fbeb03ddb9092988dee9f6d87c9 | |
parent | 40a37b0473df632dc35e34d1060a12e05d4a2110 (diff) | |
download | gcc-14797075918d654f5af84c932568b9e18613ba39.zip gcc-14797075918d654f5af84c932568b9e18613ba39.tar.gz gcc-14797075918d654f5af84c932568b9e18613ba39.tar.bz2 |
gimplify.c (is_gimple_tmp_var): Move to tree-gimple.c.
* gimplify.c (is_gimple_tmp_var): Move to tree-gimple.c.
(gimplify_compound_lval): Use is_gimple_tmp_reg.
* tree-gimple.c (is_gimple_tmp_var): Move from gimplify.c.
(is_gimple_tmp_reg): New.
* tree-gimple.h (is_gimple_tmp_reg): Declare.
From-SVN: r84975
-rw-r--r-- | gcc/ChangeLog | 8 | ||||
-rw-r--r-- | gcc/gimplify.c | 18 | ||||
-rw-r--r-- | gcc/tree-gimple.c | 28 | ||||
-rw-r--r-- | gcc/tree-gimple.h | 5 |
4 files changed, 44 insertions, 15 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog index ba21f5c..531b0f3 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,13 @@ 2004-07-20 Richard Henderson <rth@redhat.com> + * gimplify.c (is_gimple_tmp_var): Move to tree-gimple.c. + (gimplify_compound_lval): Use is_gimple_tmp_reg. + * tree-gimple.c (is_gimple_tmp_var): Move from gimplify.c. + (is_gimple_tmp_reg): New. + * tree-gimple.h (is_gimple_tmp_reg): Declare. + +2004-07-20 Richard Henderson <rth@redhat.com> + * tree-pretty-print.c (dump_generic_node): Dump CALL_EXPR_HAS_RETURN_SLOT_ADDR. diff --git a/gcc/gimplify.c b/gcc/gimplify.c index e2e8585..f078503 100644 --- a/gcc/gimplify.c +++ b/gcc/gimplify.c @@ -476,16 +476,6 @@ get_initialized_tmp_var (tree val, tree *pre_p, tree *post_p) return internal_get_tmp_var (val, pre_p, post_p, false); } -/* Returns true if T is a GIMPLE temporary variable, false otherwise. */ - -bool -is_gimple_tmp_var (tree t) -{ - /* FIXME this could trigger for other local artificials, too. */ - return (TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t) - && !TREE_STATIC (t) && !DECL_EXTERNAL (t)); -} - /* Declares all the variables in VARS in SCOPE. */ void @@ -1569,7 +1559,7 @@ gimplify_compound_lval (tree *expr_p, tree *pre_p, { TREE_OPERAND (t, 2) = low; tret = gimplify_expr (&TREE_OPERAND (t, 2), pre_p, post_p, - is_gimple_tmp_var, fb_rvalue); + is_gimple_tmp_reg, fb_rvalue); ret = MIN (ret, tret); } } @@ -1588,7 +1578,7 @@ gimplify_compound_lval (tree *expr_p, tree *pre_p, { TREE_OPERAND (t, 3) = elmt_size; tret = gimplify_expr (&TREE_OPERAND (t, 3), pre_p, post_p, - is_gimple_tmp_var, fb_rvalue); + is_gimple_tmp_reg, fb_rvalue); ret = MIN (ret, tret); } } @@ -1610,7 +1600,7 @@ gimplify_compound_lval (tree *expr_p, tree *pre_p, { TREE_OPERAND (t, 2) = offset; tret = gimplify_expr (&TREE_OPERAND (t, 2), pre_p, post_p, - is_gimple_tmp_var, fb_rvalue); + is_gimple_tmp_reg, fb_rvalue); ret = MIN (ret, tret); } } @@ -1641,7 +1631,7 @@ gimplify_compound_lval (tree *expr_p, tree *pre_p, if (!is_gimple_min_invariant (TREE_OPERAND (t, 1))) { tret = gimplify_expr (&TREE_OPERAND (t, 1), pre_p, post_p, - is_gimple_tmp_var, fb_rvalue); + is_gimple_tmp_reg, fb_rvalue); ret = MIN (ret, tret); } } diff --git a/gcc/tree-gimple.c b/gcc/tree-gimple.c index 488173f..2b119fd 100644 --- a/gcc/tree-gimple.c +++ b/gcc/tree-gimple.c @@ -447,6 +447,34 @@ is_gimple_reg (tree t) && ! needs_to_live_in_memory (t)); } +/* Returns true if T is a GIMPLE temporary variable, false otherwise. */ + +bool +is_gimple_tmp_var (tree t) +{ + /* FIXME this could trigger for other local artificials, too. */ + return (TREE_CODE (t) == VAR_DECL && DECL_ARTIFICIAL (t) + && !TREE_STATIC (t) && !DECL_EXTERNAL (t)); +} + +/* Returns true if T is a GIMPLE temporary register variable. */ + +bool +is_gimple_tmp_reg (tree t) +{ + /* The intent of this is to get hold of a value that won't change. + An SSA_NAME qualifies no matter if its of a user variable or not. */ + if (TREE_CODE (t) == SSA_NAME) + return true; + + /* We don't know the lifetime characteristics of user variables. */ + if (TREE_CODE (t) != VAR_DECL || !DECL_ARTIFICIAL (t)) + return false; + + /* Finally, it must be capable of being placed in a register. */ + return is_gimple_reg (t); +} + /* Return true if T is a GIMPLE variable whose address is not needed. */ bool diff --git a/gcc/tree-gimple.h b/gcc/tree-gimple.h index 32647a0..3a87503 100644 --- a/gcc/tree-gimple.h +++ b/gcc/tree-gimple.h @@ -28,7 +28,6 @@ Boston, MA 02111-1307, USA. */ extern tree create_tmp_var_raw (tree, const char *); extern tree create_tmp_var_name (const char *); extern tree create_tmp_var (tree, const char *); -extern bool is_gimple_tmp_var (tree); extern tree get_initialized_tmp_var (tree, tree *, tree *); extern tree get_formal_tmp_var (tree, tree *); extern void declare_tmp_vars (tree, tree); @@ -48,6 +47,10 @@ extern bool is_gimple_stmt (tree); extern bool is_gimple_reg_type (tree); /* Returns true iff T is a scalar register variable. */ extern bool is_gimple_reg (tree); +/* Returns true if T is a GIMPLE temporary variable, false otherwise. */ +extern bool is_gimple_tmp_var (tree); +/* Returns true if T is a GIMPLE temporary register variable. */ +extern bool is_gimple_tmp_reg (tree); /* Returns true iff T is any sort of variable. */ extern bool is_gimple_variable (tree); /* Returns true iff T is a variable or an INDIRECT_REF (of a variable). */ |