diff options
author | Marc Glisse <marc.glisse@inria.fr> | 2012-11-28 11:11:27 +0100 |
---|---|---|
committer | Marc Glisse <glisse@gcc.gnu.org> | 2012-11-28 10:11:27 +0000 |
commit | e9d6bd8c9b12e8022cdb18d492f41e9f5e46c114 (patch) | |
tree | cfedd2f3857f9383136b9f4f7f838c9bfb22dcc0 /gcc/tree-ssa-propagate.c | |
parent | 2c3e2ce268d8285936c6ecd3d478f70be407194f (diff) | |
download | gcc-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.c | 14 |
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; } |