mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-10 16:00:55 +08:00
fold-const.c (fold_ternary_loc): Also fold non-constant vector CONSTRUCTORs.
2011-10-06 Richard Guenther <rguenther@suse.de> * fold-const.c (fold_ternary_loc): Also fold non-constant vector CONSTRUCTORs. Make more efficient. * tree-ssa-dom.c (cprop_operand): Don't handle virtual operands. (cprop_into_stmt): Don't propagate into virtual operands. (optimize_stmt): Really dump original statement. From-SVN: r179597
This commit is contained in:
parent
50000e8602
commit
69c2fbf1ec
@ -1,3 +1,11 @@
|
||||
2011-10-06 Richard Guenther <rguenther@suse.de>
|
||||
|
||||
* fold-const.c (fold_ternary_loc): Also fold non-constant
|
||||
vector CONSTRUCTORs. Make more efficient.
|
||||
* tree-ssa-dom.c (cprop_operand): Don't handle virtual operands.
|
||||
(cprop_into_stmt): Don't propagate into virtual operands.
|
||||
(optimize_stmt): Really dump original statement.
|
||||
|
||||
2011-10-06 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* config/rx/rx.md (smin3): Revert previous delta.
|
||||
|
@ -13647,7 +13647,7 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
|
||||
|
||||
case BIT_FIELD_REF:
|
||||
if ((TREE_CODE (arg0) == VECTOR_CST
|
||||
|| (TREE_CODE (arg0) == CONSTRUCTOR && TREE_CONSTANT (arg0)))
|
||||
|| TREE_CODE (arg0) == CONSTRUCTOR)
|
||||
&& type == TREE_TYPE (TREE_TYPE (arg0)))
|
||||
{
|
||||
unsigned HOST_WIDE_INT width = tree_low_cst (arg1, 1);
|
||||
@ -13659,24 +13659,17 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
|
||||
&& (idx = idx / width)
|
||||
< TYPE_VECTOR_SUBPARTS (TREE_TYPE (arg0)))
|
||||
{
|
||||
tree elements = NULL_TREE;
|
||||
|
||||
if (TREE_CODE (arg0) == VECTOR_CST)
|
||||
elements = TREE_VECTOR_CST_ELTS (arg0);
|
||||
else
|
||||
{
|
||||
unsigned HOST_WIDE_INT idx;
|
||||
tree value;
|
||||
|
||||
FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (arg0), idx, value)
|
||||
elements = tree_cons (NULL_TREE, value, elements);
|
||||
tree elements = TREE_VECTOR_CST_ELTS (arg0);
|
||||
while (idx-- > 0 && elements)
|
||||
elements = TREE_CHAIN (elements);
|
||||
if (elements)
|
||||
return TREE_VALUE (elements);
|
||||
}
|
||||
while (idx-- > 0 && elements)
|
||||
elements = TREE_CHAIN (elements);
|
||||
if (elements)
|
||||
return TREE_VALUE (elements);
|
||||
else
|
||||
return build_zero_cst (type);
|
||||
else if (idx < CONSTRUCTOR_NELTS (arg0))
|
||||
return CONSTRUCTOR_ELT (arg0, idx)->value;
|
||||
return build_zero_cst (type);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user