aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-vect-generic.cc
diff options
context:
space:
mode:
authorJakub Jelinek <jakub@redhat.com>2023-04-08 12:21:42 -0600
committerJeff Law <jlaw@ventanamicro>2023-04-08 12:24:45 -0600
commit101380a8394c22a7a2ea70de2060ee93716156e2 (patch)
tree08eb86557b5c9db9bbbb6e90f693e39e5c4c16d9 /gcc/tree-vect-generic.cc
parenta99f6c7f0bafcfc856756c0eb9e4470dfa909341 (diff)
downloadgcc-101380a8394c22a7a2ea70de2060ee93716156e2.zip
gcc-101380a8394c22a7a2ea70de2060ee93716156e2.tar.gz
gcc-101380a8394c22a7a2ea70de2060ee93716156e2.tar.bz2
PR tree-optimization/109392
If we have an object with SSA_NAME_OCCURS_IN_ABNORMAL_PHI, then maybe_push_res_to_seq may fail. Directly build the extraction for that case. PR tree-optimization/109392 gcc/ * tree-vect-generic.cc (tree_vec_extract): Handle failure of maybe_push_res_to_seq better. gcc/testsuite/ * gcc.dg/pr109392.c: New test.
Diffstat (limited to 'gcc/tree-vect-generic.cc')
-rw-r--r--gcc/tree-vect-generic.cc11
1 files changed, 10 insertions, 1 deletions
diff --git a/gcc/tree-vect-generic.cc b/gcc/tree-vect-generic.cc
index 67f138a..445da53 100644
--- a/gcc/tree-vect-generic.cc
+++ b/gcc/tree-vect-generic.cc
@@ -174,7 +174,16 @@ tree_vec_extract (gimple_stmt_iterator *gsi, tree type,
opr.resimplify (NULL, follow_all_ssa_edges);
gimple_seq stmts = NULL;
tree res = maybe_push_res_to_seq (&opr, &stmts);
- gcc_assert (res);
+ if (!res)
+ {
+ /* This can happen if SSA_NAME_OCCURS_IN_ABNORMAL_PHI are
+ used. Build BIT_FIELD_REF manually otherwise. */
+ t = build3 (BIT_FIELD_REF, type, t, bitsize, bitpos);
+ res = make_ssa_name (type);
+ gimple *g = gimple_build_assign (res, t);
+ gsi_insert_before (gsi, g, GSI_SAME_STMT);
+ return res;
+ }
gsi_insert_seq_before (gsi, stmts, GSI_SAME_STMT);
return res;
}