diff options
author | Richard Guenther <rguenther@suse.de> | 2012-02-24 12:47:56 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2012-02-24 12:47:56 +0000 |
commit | b9af73fca3e2e71b67880731f9be888e0445e9de (patch) | |
tree | 5bf77ec7639aa0b5fc27763151dd1b71c3daae43 /gcc/gimple.c | |
parent | 6ae4eccdca78d0a584dcabbd84f6876c8b871e37 (diff) | |
download | gcc-b9af73fca3e2e71b67880731f9be888e0445e9de.zip gcc-b9af73fca3e2e71b67880731f9be888e0445e9de.tar.gz gcc-b9af73fca3e2e71b67880731f9be888e0445e9de.tar.bz2 |
re PR tree-optimization/52361 (gcc.dg/pr48141.c times out with checking enabled)
2012-02-24 Richard Guenther <rguenther@suse.de>
PR middle-end/52361
* gimple.c (walk_gimple_op): Use predicates with less redundant
tests.
(is_gimple_reg_type): Move inline ...
* gimple.h (is_gimple_reg_type): ... here.
From-SVN: r184552
Diffstat (limited to 'gcc/gimple.c')
-rw-r--r-- | gcc/gimple.c | 23 |
1 files changed, 9 insertions, 14 deletions
diff --git a/gcc/gimple.c b/gcc/gimple.c index 805ad2d..3876912 100644 --- a/gcc/gimple.c +++ b/gcc/gimple.c @@ -1481,7 +1481,7 @@ walk_gimple_op (gimple stmt, walk_tree_fn callback_op, tree lhs = gimple_assign_lhs (stmt); wi->val_only = (is_gimple_reg_type (TREE_TYPE (lhs)) && !is_gimple_reg (lhs)) - || !gimple_assign_single_p (stmt); + || gimple_assign_rhs_class (stmt) != GIMPLE_SINGLE_RHS; } for (i = 1; i < gimple_num_ops (stmt); i++) @@ -1497,11 +1497,14 @@ walk_gimple_op (gimple stmt, walk_tree_fn callback_op, if (wi) { /* If the RHS has more than 1 operand, it is not appropriate - for the memory. */ - wi->val_only = !(is_gimple_mem_rhs (gimple_assign_rhs1 (stmt)) - || TREE_CODE (gimple_assign_rhs1 (stmt)) - == CONSTRUCTOR) - || !gimple_assign_single_p (stmt); + for the memory. + ??? A lhs always requires an lvalue, checking the val_only flag + does not make any sense, so we should be able to avoid computing + it here. */ + tree rhs1 = gimple_assign_rhs1 (stmt); + wi->val_only = !(is_gimple_mem_rhs (rhs1) + || TREE_CODE (rhs1) == CONSTRUCTOR) + || gimple_assign_rhs_class (stmt) != GIMPLE_SINGLE_RHS; wi->is_lhs = true; } @@ -2908,14 +2911,6 @@ is_gimple_id (tree t) || TREE_CODE (t) == STRING_CST); } -/* Return true if TYPE is a suitable type for a scalar register variable. */ - -bool -is_gimple_reg_type (tree type) -{ - return !AGGREGATE_TYPE_P (type); -} - /* Return true if T is a non-aggregate register variable. */ bool |