diff options
author | Richard Sandiford <richard.sandiford@linaro.org> | 2017-10-23 06:07:26 +0000 |
---|---|---|
committer | Richard Sandiford <rsandifo@gcc.gnu.org> | 2017-10-23 06:07:26 +0000 |
commit | 735d873d7b6d3310a96b548cdc2d61f236937e7f (patch) | |
tree | 4f86a2e953095b545d73efdd1a8123a03a35c9ab /gcc/combine.c | |
parent | 431c441740d9ec6f026576703f4daf280a4708f5 (diff) | |
download | gcc-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.c | 10 |
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)) |