aboutsummaryrefslogtreecommitdiff
path: root/gcc/tree-sra.c
diff options
context:
space:
mode:
authorRichard Biener <rguenther@suse.de>2017-04-06 12:31:05 +0000
committerRichard Biener <rguenth@gcc.gnu.org>2017-04-06 12:31:05 +0000
commit0f78434635f6e78cae50408a8bb76c35658551d4 (patch)
tree71e473dcdaf525f910f75285eed39cb0ba9aa850 /gcc/tree-sra.c
parent23a429c2b285953c026bfd01ded764e3b16eb1a8 (diff)
downloadgcc-0f78434635f6e78cae50408a8bb76c35658551d4.zip
gcc-0f78434635f6e78cae50408a8bb76c35658551d4.tar.gz
gcc-0f78434635f6e78cae50408a8bb76c35658551d4.tar.bz2
re PR middle-end/80262 (address space gets lost in memory access)
2017-04-06 Richard Biener <rguenther@suse.de> PR tree-optimization/80262 * tree-sra.c (build_ref_for_offset): Preserve address-space information. * tree-ssa-sccvn.c (vn_reference_maybe_forwprop_address): Drop useless address-space information on MEM_REF offsets. * gcc.target/i386/pr80262.c: New testcase. From-SVN: r246728
Diffstat (limited to 'gcc/tree-sra.c')
-rw-r--r--gcc/tree-sra.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/gcc/tree-sra.c b/gcc/tree-sra.c
index 02453d3..31834ed 100644
--- a/gcc/tree-sra.c
+++ b/gcc/tree-sra.c
@@ -1638,6 +1638,13 @@ build_ref_for_offset (location_t loc, tree base, HOST_WIDE_INT offset,
unsigned HOST_WIDE_INT misalign;
unsigned int align;
+ /* Preserve address-space information. */
+ addr_space_t as = TYPE_ADDR_SPACE (TREE_TYPE (base));
+ if (as != TYPE_ADDR_SPACE (exp_type))
+ exp_type = build_qualified_type (exp_type,
+ TYPE_QUALS (exp_type)
+ | ENCODE_QUAL_ADDR_SPACE (as));
+
gcc_checking_assert (offset % BITS_PER_UNIT == 0);
get_object_alignment_1 (base, &align, &misalign);
base = get_addr_base_and_unit_offset (base, &base_offset);