This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug tree-optimization/52395] [4.7 Regression] Too conservative alignment info from SRA
- From: "rguenth at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Mon, 27 Feb 2012 13:09:12 +0000
- Subject: [Bug tree-optimization/52395] [4.7 Regression] Too conservative alignment info from SRA
- Auto-submitted: auto-generated
- References: <bug-52395-4@http.gcc.gnu.org/bugzilla/>
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52395
--- Comment #8 from Richard Guenther <rguenth at gcc dot gnu.org> 2012-02-27 13:09:12 UTC ---
The main issue is, of course, that we re-write base of the LHS of the
assignments at all.
Index: gcc/tree-sra.c
===================================================================
--- gcc/tree-sra.c (revision 184591)
+++ gcc/tree-sra.c (working copy)
@@ -1480,6 +1480,10 @@ build_ref_for_offset (location_t loc, tr
gcc_checking_assert (offset % BITS_PER_UNIT == 0);
+ if (offset == 0
+ && types_compatible_p (exp_type, TREE_TYPE (base)))
+ return unshare_expr (base);
+
base = get_addr_base_and_unit_offset (base, &base_offset);
/* get_addr_base_and_unit_offset returns NULL for references with a variable
or, instead of re-writing
*__x_1(D) = D.2219;
to
__x_1(D)->re = SR.1_11;
__x_1(D)->im = SR.2_10;
re-write it to
SR.3_12 = COMPLEX_EXPR <SR.1_11, SR.2_12>;
*__x_1(D) = SR.3_12;
to avoid touching the non-replaced LHS.