aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-ssa-propagate.c
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-11-28 11:11:27 +0100
committerMarc Glisse <glisse@gcc.gnu.org>2012-11-28 10:11:27 +0000
commite9d6bd8c9b12e8022cdb18d492f41e9f5e46c114 (patch)
treecfedd2f3857f9383136b9f4f7f838c9bfb22dcc0 /gcc/tree-ssa-propagate.c
parent2c3e2ce268d8285936c6ecd3d478f70be407194f (diff)
downloadgcc-e9d6bd8c9b12e8022cdb18d492f41e9f5e46c114.zip
gcc-e9d6bd8c9b12e8022cdb18d492f41e9f5e46c114.tar.gz
gcc-e9d6bd8c9b12e8022cdb18d492f41e9f5e46c114.tar.bz2
re PR middle-end/55266 (vector expansion: 24 movs for 4 adds)
2012-11-28 Marc Glisse <marc.glisse@inria.fr> PR middle-end/55266 * fold-const.c (fold_ternary_loc) [BIT_FIELD_REF]: Handle CONSTRUCTOR with vector elements. * tree-ssa-propagate.c (valid_gimple_rhs_p): Handle CONSTRUCTOR and BIT_FIELD_REF. From-SVN: r193884
Diffstat (limited to 'gcc/tree-ssa-propagate.c')
-rw-r--r--gcc/tree-ssa-propagate.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/tree-ssa-propagate.c b/gcc/tree-ssa-propagate.c
index 2203b66..a959ea7 100644
--- a/gcc/tree-ssa-propagate.c
+++ b/gcc/tree-ssa-propagate.c
@@ -611,10 +611,24 @@ valid_gimple_rhs_p (tree expr)
return false;
case tcc_exceptional:
+ if (code == CONSTRUCTOR)
+ {
+ unsigned i;
+ tree elt;
+ FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (expr), i, elt)
+ if (!is_gimple_val (elt))
+ return false;
+ return true;
+ }
if (code != SSA_NAME)
return false;
break;
+ case tcc_reference:
+ if (code == BIT_FIELD_REF)
+ return is_gimple_val (TREE_OPERAND (expr, 0));
+ return false;
+
default:
return false;
}