aboutsummaryrefslogtreecommitdiff
path: root/gcc/combine.c
diff options
context:
space:
mode:
authorRichard Sandiford <richard.sandiford@linaro.org>2017-10-23 06:07:26 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2017-10-23 06:07:26 +0000
commit735d873d7b6d3310a96b548cdc2d61f236937e7f (patch)
tree4f86a2e953095b545d73efdd1a8123a03a35c9ab /gcc/combine.c
parent431c441740d9ec6f026576703f4daf280a4708f5 (diff)
downloadgcc-735d873d7b6d3310a96b548cdc2d61f236937e7f.zip
gcc-735d873d7b6d3310a96b548cdc2d61f236937e7f.tar.gz
gcc-735d873d7b6d3310a96b548cdc2d61f236937e7f.tar.bz2
Fix HWI + -unsigned in combine.c
rtx_equal_for_field_assignment_p had: x = adjust_address_nv (x, GET_MODE (y), -subreg_lowpart_offset (GET_MODE (x), GET_MODE (y))); But subreg_lowpart_offset returns an unsigned int and adjust_address_nv takes a HWI, so a subreg offset of 4 would give a memory offset of 0x00000000fffffffffc. 2017-10-23 Richard Sandiford <richard.sandiford@linaro.org> gcc/ * combine.c (rtx_equal_for_field_assignment_p): Use byte_lowpart_offset. From-SVN: r253997
Diffstat (limited to 'gcc/combine.c')
-rw-r--r--gcc/combine.c10
1 files changed, 3 insertions, 7 deletions
diff --git a/gcc/combine.c b/gcc/combine.c
index e5c2769..d71e50f 100644
--- a/gcc/combine.c
+++ b/gcc/combine.c
@@ -9526,13 +9526,9 @@ rtx_equal_for_field_assignment_p (rtx x, rtx y, bool widen_x)
return 0;
if (BYTES_BIG_ENDIAN != WORDS_BIG_ENDIAN)
return 0;
- /* For big endian, adjust the memory offset. */
- if (BYTES_BIG_ENDIAN)
- x = adjust_address_nv (x, GET_MODE (y),
- -subreg_lowpart_offset (GET_MODE (x),
- GET_MODE (y)));
- else
- x = adjust_address_nv (x, GET_MODE (y), 0);
+ x = adjust_address_nv (x, GET_MODE (y),
+ byte_lowpart_offset (GET_MODE (y),
+ GET_MODE (x)));
}
if (x == y || rtx_equal_p (x, y))