public inbox for gcc-patches@gcc.gnu.org
 help / color / mirror / Atom feed
* [PATCH] SRA: Force gimple operand in an additional corner case (PR 112822)
@ 2023-12-12 16:50 Martin Jambor
  2023-12-12 17:17 ` Richard Biener
  2023-12-12 18:45 ` Peter Bergner
  0 siblings, 2 replies; 14+ messages in thread
From: Martin Jambor @ 2023-12-12 16:50 UTC (permalink / raw)
  To: GCC Patches; +Cc: Richard Biener

Hi,

PR 112822 revealed a corner case in load_assign_lhs_subreplacements
where it creates invalid gimple: an assignment where on the LHS there
is a complex variable which however is not a gimple register because
it has partial defs and on the right hand side there is a
VIEW_CONVERT_EXPR.  This patch invokes force_gimple_operand_gsi on
such statements (like it already does when both sides of a generated
assignment have partial definitions.

I've made sure the patch passes bootstrap and testsuite on x86_64-linux,
the bug reporter was kind enough to also check the same on an
powerpc64le-linux (see bugzilla comment #8).

The testcase has reasonable size but it is specific to ppc64le and its
altivec vectors.  My plan is to ask the bug reporter to massage it into
a target specific testcase in bugzilla.  Alternatively I can try to
craft a testcase from scratch but that will take time.

Despite the above, is the patch OK for master?

Thanks,

Martin



gcc/ChangeLog:

2023-12-12  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/112822
	* tree-sra.cc (load_assign_lhs_subreplacements): Invoke
	force_gimple_operand_gsi also when LHS has partial stores and RHS is a
	VIEW_CONVERT_EXPR.
---
 gcc/tree-sra.cc | 10 +++++++---
 1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/gcc/tree-sra.cc b/gcc/tree-sra.cc
index 3bd0c7a9af0..99a1b0a6d17 100644
--- a/gcc/tree-sra.cc
+++ b/gcc/tree-sra.cc
@@ -4219,11 +4219,15 @@ load_assign_lhs_subreplacements (struct access *lacc,
 	  if (racc && racc->grp_to_be_replaced)
 	    {
 	      rhs = get_access_replacement (racc);
+	      bool vce = false;
 	      if (!useless_type_conversion_p (lacc->type, racc->type))
-		rhs = fold_build1_loc (sad->loc, VIEW_CONVERT_EXPR,
-				       lacc->type, rhs);
+		{
+		  rhs = fold_build1_loc (sad->loc, VIEW_CONVERT_EXPR,
+					 lacc->type, rhs);
+		  vce = true;
+		}
 
-	      if (racc->grp_partial_lhs && lacc->grp_partial_lhs)
+	      if (lacc->grp_partial_lhs && (vce || racc->grp_partial_lhs))
 		rhs = force_gimple_operand_gsi (&sad->old_gsi, rhs, true,
 						NULL_TREE, true, GSI_SAME_STMT);
 	    }
-- 
2.43.0


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

end of thread, other threads:[~2023-12-13 19:23 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-12-12 16:50 [PATCH] SRA: Force gimple operand in an additional corner case (PR 112822) Martin Jambor
2023-12-12 17:17 ` Richard Biener
2023-12-12 18:45 ` Peter Bergner
2023-12-12 18:51   ` Peter Bergner
2023-12-12 19:26     ` Richard Biener
2023-12-12 22:50       ` Peter Bergner
2023-12-13  2:36         ` Jason Merrill
2023-12-13  5:26           ` Peter Bergner
2023-12-13  7:51             ` Richard Biener
2023-12-13  8:05               ` Jakub Jelinek
2023-12-13 14:21                 ` Peter Bergner
2023-12-13 16:24           ` Jason Merrill
2023-12-13 16:26             ` Jakub Jelinek
2023-12-13 19:23               ` Jason Merrill

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).