]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
PR tree-optimization/109392
authorJakub Jelinek <jakub@redhat.com>
Sat, 8 Apr 2023 18:21:42 +0000 (12:21 -0600)
committerJeff Law <jlaw@ventanamicro>
Sat, 8 Apr 2023 18:24:45 +0000 (12:24 -0600)
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.

gcc/testsuite/gcc.dg/pr109392.c [new file with mode: 0644]
gcc/tree-vect-generic.cc

diff --git a/gcc/testsuite/gcc.dg/pr109392.c b/gcc/testsuite/gcc.dg/pr109392.c
new file mode 100644 (file)
index 0000000..e5bd9d4
--- /dev/null
@@ -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] };
+}
index 67f138a9332d6e30a65a7aac8f317273e81bab4d..445da53292e9d1d2db62ca962fc017bb0e6c9bbe 100644 (file)
@@ -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;
 }