public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] rs6000: Don't ICE when we disassemble an MMA variable [PR101322]
@ 2022-08-27  3:50 Peter Bergner
  2022-08-31  9:22 ` Kewen.Lin
  2022-08-31 15:58 ` Segher Boessenkool
  0 siblings, 2 replies; 14+ messages in thread
From: Peter Bergner @ 2022-08-27  3:50 UTC (permalink / raw)
  To: Segher Boessenkool; +Cc: GCC Patches

When we expand an MMA disassemble built-in with C++ using a pointer that
is casted to a valid MMA type, the type isn't passed down to the expand
machinery and we end up using the base type of the pointer which leads to
an ICE.  This patch enforces we always use the correct MMA type regardless
of the pointer type being used.

This passed bootstrap and regtesting on powerpc64le-linux with no regressions.
Ok for trunk and backports after some burn-in time?

Peter

gcc/
	PR target/101322
	* config/rs6000/rs6000-builtin.cc (rs6000_gimple_fold_mma_builtin):
	Enforce the use of a valid MMA pointer type.

gcc/testsuite/
	PR target/101322
	* g++.target/powerpc/pr101322.C: New test.

diff --git a/gcc/config/rs6000/rs6000-builtin.cc b/gcc/config/rs6000/rs6000-builtin.cc
index 12afa86854c..e796e74f072 100644
--- a/gcc/config/rs6000/rs6000-builtin.cc
+++ b/gcc/config/rs6000/rs6000-builtin.cc
@@ -1085,7 +1085,12 @@ rs6000_gimple_fold_mma_builtin (gimple_stmt_iterator *gsi,
       unsigned nvec = (fncode == RS6000_BIF_DISASSEMBLE_ACC) ? 4 : 2;
       tree dst_ptr = gimple_call_arg (stmt, 0);
       tree src_ptr = gimple_call_arg (stmt, 1);
-      tree src_type = TREE_TYPE (src_ptr);
+      tree src_type = (fncode == RS6000_BIF_DISASSEMBLE_ACC)
+		      ? build_pointer_type (vector_quad_type_node)
+		      : build_pointer_type (vector_pair_type_node);
+      if (TREE_TYPE (TREE_TYPE (src_ptr)) != src_type)
+	src_ptr = build1 (VIEW_CONVERT_EXPR, src_type, src_ptr);
+
       tree src = create_tmp_reg_or_ssa_name (TREE_TYPE (src_type));
       gimplify_assign (src, build_simple_mem_ref (src_ptr), &new_seq);
 
diff --git a/gcc/testsuite/g++.target/powerpc/pr101322.C b/gcc/testsuite/g++.target/powerpc/pr101322.C
new file mode 100644
index 00000000000..59e71e8eb89
--- /dev/null
+++ b/gcc/testsuite/g++.target/powerpc/pr101322.C
@@ -0,0 +1,17 @@
+/* PR target/101322 */
+/* { dg-options "-O2 -mdejagnu-cpu=power10" } */
+/* { dg-require-effective-target power10_ok } */
+
+/* Verify we don't ICE on the following test cases.  */
+
+void
+foo (char *resp, char *vpp)
+{
+  __builtin_vsx_disassemble_pair (resp, (__vector_pair *) vpp);
+}
+
+void
+bar (char *resp, char *vpp)
+{
+  __builtin_mma_disassemble_acc (resp, (__vector_quad *)vpp);
+}

^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2022-09-05  8:12 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-08-27  3:50 [PATCH] rs6000: Don't ICE when we disassemble an MMA variable [PR101322] Peter Bergner
2022-08-31  9:22 ` Kewen.Lin
2022-08-31 13:59   ` Peter Bergner
2022-08-31 18:53     ` Peter Bergner
2022-08-31 20:51       ` Segher Boessenkool
2022-08-31 22:01         ` Peter Bergner
2022-08-31 23:08           ` Segher Boessenkool
2022-08-31 23:29             ` Peter Bergner
2022-09-01  8:29           ` Kewen.Lin
2022-09-01 14:17             ` Peter Bergner
2022-09-05  8:11               ` Kewen.Lin
2022-09-01  8:28       ` Kewen.Lin
2022-09-01 14:41         ` Segher Boessenkool
2022-08-31 15:58 ` Segher Boessenkool

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).