aboutsummaryrefslogtreecommitdiff
path: root/gcc/fold-const.c
diff options
context:
space:
mode:
authorMarc Glisse <marc.glisse@inria.fr>2012-09-03 17:31:38 +0000
committerMarc Glisse <marc.glisse@inria.fr>2012-09-03 17:31:38 +0000
commit0c590727149780e4bf1494bba4d88d5e852cb3f4 (patch)
tree72fdc7be9d4380c6964688c8dc44c6e68fa55389 /gcc/fold-const.c
parenta7f50ab278d1174d6d0856efdb5ee8f03b1d47c1 (diff)
2012-09-03 Marc Glisse <marc.glisse@inria.fr>
gcc/ * fold-const.c (fold_ternary_loc): Constant-propagate after removing dead operands. gcc/testsuite/ * gcc.dg/fold-perm.c: Improve test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@190901 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fold-const.c')
-rw-r--r--gcc/fold-const.c20
1 files changed, 10 insertions, 10 deletions
diff --git a/gcc/fold-const.c b/gcc/fold-const.c
index b386bb2c606..2bf51797847 100644
--- a/gcc/fold-const.c
+++ b/gcc/fold-const.c
@@ -14196,16 +14196,6 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
return op1;
}
- if ((TREE_CODE (arg0) == VECTOR_CST
- || TREE_CODE (arg0) == CONSTRUCTOR)
- && (TREE_CODE (arg1) == VECTOR_CST
- || TREE_CODE (arg1) == CONSTRUCTOR))
- {
- t = fold_vec_perm (type, arg0, arg1, sel);
- if (t != NULL_TREE)
- return t;
- }
-
if (all_in_vec0)
op1 = op0;
else if (all_in_vec1)
@@ -14216,6 +14206,16 @@ fold_ternary_loc (location_t loc, enum tree_code code, tree type,
need_mask_canon = true;
}
+ if ((TREE_CODE (op0) == VECTOR_CST
+ || TREE_CODE (op0) == CONSTRUCTOR)
+ && (TREE_CODE (op1) == VECTOR_CST
+ || TREE_CODE (op1) == CONSTRUCTOR))
+ {
+ t = fold_vec_perm (type, op0, op1, sel);
+ if (t != NULL_TREE)
+ return t;
+ }
+
if (op0 == op1 && !single_arg)
changed = true;