aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Henderson <rth@redhat.com>2004-07-20 15:47:58 -0700
committerRichard Henderson <rth@gcc.gnu.org>2004-07-20 15:47:58 -0700
commit14797075918d654f5af84c932568b9e18613ba39 (patch)
treef7623cae82fb1fbeb03ddb9092988dee9f6d87c9
parent40a37b0473df632dc35e34d1060a12e05d4a2110 (diff)
downloadgcc-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/ChangeLog8
-rw-r--r--gcc/gimplify.c18
-rw-r--r--gcc/tree-gimple.c28
-rw-r--r--gcc/tree-gimple.h5
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). */