This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
[PATCH] Fix PR 91605
- From: Bernd Edlinger <bernd dot edlinger at hotmail dot de>
- To: "gcc-patches at gcc dot gnu dot org" <gcc-patches at gcc dot gnu dot org>, Richard Biener <rguenther at suse dot de>, Jeff Law <law at redhat dot com>
- Date: Sun, 1 Sep 2019 10:36:00 +0000
- Subject: [PATCH] Fix PR 91605
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tFooEl24PVJuwTtmoAX0a5syFquX+Cj38NKuXKNoOeo=; b=hPhT5bo0ro5lF+HVE7RXHArd/lBWSKWg1857hdpqo3RsLE0LKiM5BcK/0gmn7SSVieufAbTNtSv9DsfwHKEb0k8PaH8w+7ffkY63zFUFCZzTUWvhwxL2N435RDABaZUagfwF5JGwWrEg9EO7vgnFzoGogI7/13X18mj3p1ZqRMFNit3yMbCKjMkxIWcls8a5A2CywzeCBcoN3icCO7PuCCWbDSNMBgg0N8su4Fc4Dx1wQkVX//ZT5uYYLAoSjmkXppeMGLkumBEhukvdLXijhpcyX9xRpT1RiQ6ZJjhHus2qkzipu434QW3xYC0biciEhYgBxGZPKKEpIygHZS8OGw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bjHsIoPftXG6HjR4Em8WZXBsenUjEaQ8mkXNziEO6e7YVj3ooeh6dMrzzD/3HkfSAwrlX7X92//972jxHa6OneWddIJGDbR+dsxJXQvcdsMY2VVP1ln7/3VvTBs540wAwASdlWqv03PbVYAy3FrgtCjcG52G8EacWbXfeJ/shsu9s47qsVRnZweCqSYMI3D/nkzk5WD9USF+J+kYMyBDRw0d/O7uTl9mCHy8nTJRIWHiM61x9jy5UQOcvDKMS+WLQ7pxLtp7525DSRxSZUVOvW1XIR09+WF4NkNYQK+LPAHJxdhnNktdW3o06ZGZkfi/KI1VOYqPakkwYCroKD9XIQ==
Hi,
this fixes an oversight in r274986.
We need to avoid using movmisalign on DECL_P which are not in memory,
similar to the !mem_ref_refers_to_non_mem_p which unfortunately can't
handle DECL_P.
Bootstrapped and reg-tested on x86_64-pc-linux-gnu.
Is it OK for trunk?
Thanks
Bernd.
2019-09-01 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR middle-end/91605
* expr.c (expand_assignment): Avoid DECL_P with DECL_RTL
not being MEM_P.
testsuite:
2019-09-01 Bernd Edlinger <bernd.edlinger@hotmail.de>
PR middle-end/91605
* g++.target/i386/pr91605.C: New test.
Index: gcc/expr.c
===================================================================
--- gcc/expr.c (revision 275063)
+++ gcc/expr.c (working copy)
@@ -5004,7 +5004,8 @@ expand_assignment (tree to, tree from, bool nontem
|| TREE_CODE (to) == TARGET_MEM_REF
|| DECL_P (to))
&& mode != BLKmode
- && (DECL_P (to) || !mem_ref_refers_to_non_mem_p (to))
+ && (DECL_P (to) ? MEM_P (DECL_RTL (to))
+ : !mem_ref_refers_to_non_mem_p (to))
&& ((align = get_object_alignment (to))
< GET_MODE_ALIGNMENT (mode))
&& (((icode = optab_handler (movmisalign_optab, mode))
Index: gcc/testsuite/g++.target/i386/pr91605.C
===================================================================
--- gcc/testsuite/g++.target/i386/pr91605.C (revision 0)
+++ gcc/testsuite/g++.target/i386/pr91605.C (working copy)
@@ -0,0 +1,13 @@
+/* { dg-do compile } */
+/* { dg-options "-fpack-struct -mavx" } */
+
+struct A {
+ __attribute__((__vector_size__(4 * sizeof(double)))) double data;
+};
+struct B {
+ A operator*(B);
+};
+void fn1() {
+ B x, y;
+ x *y;
+}