diff options
Diffstat (limited to 'gcc/simplify-rtx.c')
-rw-r--r-- | gcc/simplify-rtx.c | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/gcc/simplify-rtx.c b/gcc/simplify-rtx.c index 6feaaf7..35c98fb 100644 --- a/gcc/simplify-rtx.c +++ b/gcc/simplify-rtx.c @@ -308,23 +308,19 @@ delegitimize_mem_from_attrs (rtx x) case IMAGPART_EXPR: case VIEW_CONVERT_EXPR: { - HOST_WIDE_INT bitsize, bitpos; + poly_int64 bitsize, bitpos, bytepos, toffset_val = 0; tree toffset; int unsignedp, reversep, volatilep = 0; decl = get_inner_reference (decl, &bitsize, &bitpos, &toffset, &mode, &unsignedp, &reversep, &volatilep); - if (bitsize != GET_MODE_BITSIZE (mode) - || (bitpos % BITS_PER_UNIT) - || (toffset && !tree_fits_shwi_p (toffset))) + if (maybe_ne (bitsize, GET_MODE_BITSIZE (mode)) + || !multiple_p (bitpos, BITS_PER_UNIT, &bytepos) + || (toffset && !poly_int_tree_p (toffset, &toffset_val))) decl = NULL; else - { - offset += bitpos / BITS_PER_UNIT; - if (toffset) - offset += tree_to_shwi (toffset); - } + offset += bytepos + toffset_val; break; } } |