diff options
author | Richard Biener <rguenther@suse.de> | 2017-04-06 12:31:05 +0000 |
---|---|---|
committer | Richard Biener <rguenth@gcc.gnu.org> | 2017-04-06 12:31:05 +0000 |
commit | 0f78434635f6e78cae50408a8bb76c35658551d4 (patch) | |
tree | 71e473dcdaf525f910f75285eed39cb0ba9aa850 /gcc/tree-sra.c | |
parent | 23a429c2b285953c026bfd01ded764e3b16eb1a8 (diff) | |
download | gcc-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.c | 7 |
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); |