]> 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)
committerRichard Biener <rguenther@suse.de>
Thu, 27 Apr 2023 12:06:48 +0000 (14:06 +0200)
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.

(cherry picked from commit 101380a8394c22a7a2ea70de2060ee93716156e2)

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 a84f5e4ca7896c85c1be6fd8387637a1c5b89992..f282e69d53bb946b23704daf0592282aa83992c9 100644 (file)
@@ -183,7 +183,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;
 }