summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDavid Malcolm <dmalcolm@redhat.com>2014-11-04 17:14:22 -0500
committerDavid Malcolm <dmalcolm@redhat.com>2014-11-04 17:14:22 -0500
commitac32e40a4621e69dac36b7c3982b035b36ba034e (patch)
tree670f8c8ccbe694b510c4475c86b3f31ee2ab87b9
parent81b9fd83b9f0897fb3eb9618674b8e96568999d5 (diff)
downloadgcc-ac32e40a4621e69dac36b7c3982b035b36ba034e.tar.gz
cfgexpand.c: Use gassign *
gcc/ChangeLog.gimple-classes: * cfgexpand.c (add_scope_conflicts_1): Add checked cast. (expand_gimple_cond): Replace check for GIMPLE_ASSIGN with a dyn_cast, introducing local "second_assign", using it in place of "assign" for typesafety. (expand_call_stmt): Add checked casts.
-rw-r--r--gcc/ChangeLog.gimple-classes8
-rw-r--r--gcc/cfgexpand.c24
2 files changed, 20 insertions, 12 deletions
diff --git a/gcc/ChangeLog.gimple-classes b/gcc/ChangeLog.gimple-classes
index 17a7c805355..e4d85b256c8 100644
--- a/gcc/ChangeLog.gimple-classes
+++ b/gcc/ChangeLog.gimple-classes
@@ -1,5 +1,13 @@
2014-11-04 David Malcolm <dmalcolm@redhat.com>
+ * cfgexpand.c (add_scope_conflicts_1): Add checked cast.
+ (expand_gimple_cond): Replace check for GIMPLE_ASSIGN with a
+ dyn_cast, introducing local "second_assign", using it in place of
+ "assign" for typesafety.
+ (expand_call_stmt): Add checked casts.
+
+2014-11-04 David Malcolm <dmalcolm@redhat.com>
+
* cfgexpand.c (gimple_assign_rhs_to_tree): Strengthen param from
gimple to const gassign *.
(expand_debug_expr): Add checked cast.
diff --git a/gcc/cfgexpand.c b/gcc/cfgexpand.c
index 279202d3409..2c2ca146433 100644
--- a/gcc/cfgexpand.c
+++ b/gcc/cfgexpand.c
@@ -449,7 +449,7 @@ add_scope_conflicts_1 (basic_block bb, bitmap work, bool for_conflict)
if (gimple_clobber_p (stmt))
{
- tree lhs = gimple_assign_lhs (stmt);
+ tree lhs = gimple_assign_lhs (as_a <gassign *> (stmt));
size_t *v;
/* Nested function lowering might introduce LHSs
that are COMPONENT_REFs. */
@@ -2114,14 +2114,14 @@ expand_gimple_cond (basic_block bb, gcond *stmt)
&& bitmap_bit_p (SA.values, SSA_NAME_VERSION (op0)))
{
gimple second = SSA_NAME_DEF_STMT (op0);
- if (gimple_code (second) == GIMPLE_ASSIGN)
+ if (gassign *second_assign = dyn_cast <gassign *> (second))
{
- enum tree_code code2 = gimple_assign_rhs_code (second);
+ enum tree_code code2 = gimple_assign_rhs_code (second_assign);
if (TREE_CODE_CLASS (code2) == tcc_comparison)
{
code = code2;
- op0 = gimple_assign_rhs1 (second);
- op1 = gimple_assign_rhs2 (second);
+ op0 = gimple_assign_rhs1 (second_assign);
+ op1 = gimple_assign_rhs2 (second_assign);
}
/* If jumps are cheap turn some more codes into
jumpy sequences. */
@@ -2129,18 +2129,18 @@ expand_gimple_cond (basic_block bb, gcond *stmt)
{
if ((code2 == BIT_AND_EXPR
&& TYPE_PRECISION (TREE_TYPE (op0)) == 1
- && TREE_CODE (gimple_assign_rhs2 (second)) != INTEGER_CST)
+ && TREE_CODE (gimple_assign_rhs2 (second_assign)) != INTEGER_CST)
|| code2 == TRUTH_AND_EXPR)
{
code = TRUTH_ANDIF_EXPR;
- op0 = gimple_assign_rhs1 (second);
- op1 = gimple_assign_rhs2 (second);
+ op0 = gimple_assign_rhs1 (second_assign);
+ op1 = gimple_assign_rhs2 (second_assign);
}
else if (code2 == BIT_IOR_EXPR || code2 == TRUTH_OR_EXPR)
{
code = TRUTH_ORIF_EXPR;
- op0 = gimple_assign_rhs1 (second);
- op1 = gimple_assign_rhs2 (second);
+ op0 = gimple_assign_rhs1 (second_assign);
+ op1 = gimple_assign_rhs2 (second_assign);
}
}
}
@@ -2290,8 +2290,8 @@ expand_call_stmt (gcall *stmt)
if (builtin_p
&& TREE_CODE (arg) == SSA_NAME
&& (def = get_gimple_for_ssa_name (arg))
- && gimple_assign_rhs_code (def) == ADDR_EXPR)
- arg = gimple_assign_rhs1 (def);
+ && gimple_assign_rhs_code (as_a <gassign *> (def)) == ADDR_EXPR)
+ arg = gimple_assign_rhs1 (as_a <gassign *> (def));
CALL_EXPR_ARG (exp, i) = arg;
}