diff options
author | Jakub Jelinek <jakub@redhat.com> | 2023-04-08 12:21:42 -0600 |
---|---|---|
committer | Jeff Law <jlaw@ventanamicro> | 2023-04-08 12:24:45 -0600 |
commit | 101380a8394c22a7a2ea70de2060ee93716156e2 (patch) | |
tree | 08eb86557b5c9db9bbbb6e90f693e39e5c4c16d9 /gcc/tree-vect-generic.cc | |
parent | a99f6c7f0bafcfc856756c0eb9e4470dfa909341 (diff) | |
download | gcc-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.cc | 11 |
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; } |