Allow VEC_PERM_EXPR folding to fail
authorRichard Sandiford <richard.sandiford@linaro.org>
Thu, 4 Jan 2018 18:04:54 +0000 (18:04 +0000)
committerRichard Sandiford <rsandifo@gcc.gnu.org>
Thu, 4 Jan 2018 18:04:54 +0000 (18:04 +0000)
tree-ssa-forwprop.c was asserting that a VEC_PERM_EXPR fold on three
VECTOR_CSTs would always succeed, but it's possible for it to fail
with variable-length vectors.

2017-12-22  Richard Sandiford  <richard.sandiford@linaro.org>

gcc/
* tree-ssa-forwprop.c (is_combined_permutation_identity): Allow
the VEC_PERM_EXPR fold to fail.

From-SVN: r256257

gcc/ChangeLog
gcc/tree-ssa-forwprop.c

index 622d648a8093da83fe43cd858c77d52e6867326a..64326df830a3dcc6f502381573dbe5228e107cd6 100644 (file)
@@ -1,3 +1,8 @@
+2018-01-04  Richard Sandiford  <richard.sandiford@linaro.org>
+
+       * tree-ssa-forwprop.c (is_combined_permutation_identity): Allow
+       the VEC_PERM_EXPR fold to fail.
+
 2018-01-04  Jakub Jelinek  <jakub@redhat.com>
 
        PR debug/83585
index 1aad176ccbda5dffda029c51dcb6fb611631ba42..58ec6b47a5bb6a5e0223dd08fae488e6ad114bea 100644 (file)
@@ -1865,7 +1865,8 @@ is_combined_permutation_identity (tree mask1, tree mask2)
   gcc_checking_assert (TREE_CODE (mask1) == VECTOR_CST
                       && TREE_CODE (mask2) == VECTOR_CST);
   mask = fold_ternary (VEC_PERM_EXPR, TREE_TYPE (mask1), mask1, mask1, mask2);
-  gcc_assert (TREE_CODE (mask) == VECTOR_CST);
+  if (mask == NULL_TREE || TREE_CODE (mask) != VECTOR_CST)
+    return 0;
 
   if (!VECTOR_CST_NELTS (mask).is_constant (&nelts))
     return 0;