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.
This commit is contained in:
parent
a99f6c7f0b
commit
101380a839
2 changed files with 25 additions and 1 deletions
15
gcc/testsuite/gcc.dg/pr109392.c
Normal file
15
gcc/testsuite/gcc.dg/pr109392.c
Normal file
|
@ -0,0 +1,15 @@
|
|||
/* PR tree-optimization/109392 */
|
||||
/* { dg-do compile } */
|
||||
/* { dg-options "-O2 -Wno-psabi" } */
|
||||
|
||||
typedef short __attribute__ ((__vector_size__ (64))) V;
|
||||
V v, w;
|
||||
void bar (void) __attribute__((returns_twice));
|
||||
|
||||
V
|
||||
foo (V a, V b)
|
||||
{
|
||||
bar ();
|
||||
b &= v < b;
|
||||
return (V) { foo (b, w)[3], (V) {}[3] };
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue