aboutsummaryrefslogtreecommitdiff
path: root/gcc/expr.h
diff options
context:
space:
mode:
authorRichard Sandiford <rdsandiford@googlemail.com>2012-11-18 17:32:29 +0000
committerRichard Sandiford <rsandifo@gcc.gnu.org>2012-11-18 17:32:29 +0000
commit5f2cbd0debd8670fdf8689891ea0d2e711a2fecd (patch)
tree160d8166ab7ba961724d0c73cd6432ac83f5c97a /gcc/expr.h
parent6cf9964974d79779456b9cde3c3949d056745540 (diff)
downloadgcc-5f2cbd0debd8670fdf8689891ea0d2e711a2fecd.zip
gcc-5f2cbd0debd8670fdf8689891ea0d2e711a2fecd.tar.gz
gcc-5f2cbd0debd8670fdf8689891ea0d2e711a2fecd.tar.bz2
expr.h (adjust_address_1): Add a size parameter.
gcc/ * expr.h (adjust_address_1): Add a size parameter. (adjust_address, adjust_address_nv, adjust_bitfield_address) (adjust_bitfield_address_nv): Adjust accordingly. (adjust_bitfield_address_size): Define. * emit-rtl.c (adjust_address_1): Add a size parameter. Use it to set the size if MODE has no size. Check whether the size matches before returning the original memref. Require the size to be known for adjust_object. (adjust_automodify_address_1, widen_memory_access): Update calls to adjust_address_1. From-SVN: r193601
Diffstat (limited to 'gcc/expr.h')
-rw-r--r--gcc/expr.h15
1 files changed, 10 insertions, 5 deletions
diff --git a/gcc/expr.h b/gcc/expr.h
index 7ad5f81..f94f1db 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -557,22 +557,27 @@ extern rtx change_address (rtx, enum machine_mode, rtx);
/* Return a memory reference like MEMREF, but with its mode changed
to MODE and its address offset by OFFSET bytes. */
#define adjust_address(MEMREF, MODE, OFFSET) \
- adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 0)
+ adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 0, 0)
/* Likewise, but the reference is not required to be valid. */
#define adjust_address_nv(MEMREF, MODE, OFFSET) \
- adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 0)
+ adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 0, 0)
/* Return a memory reference like MEMREF, but with its mode changed
to MODE and its address offset by OFFSET bytes. Assume that it's
for a bitfield and conservatively drop the underlying object if we
cannot be sure to stay within its bounds. */
#define adjust_bitfield_address(MEMREF, MODE, OFFSET) \
- adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1)
+ adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, 0)
+
+/* As for adjust_bitfield_address, but specify that the width of
+ BLKmode accesses is SIZE bytes. */
+#define adjust_bitfield_address_size(MEMREF, MODE, OFFSET, SIZE) \
+ adjust_address_1 (MEMREF, MODE, OFFSET, 1, 1, 1, SIZE)
/* Likewise, but the reference is not required to be valid. */
#define adjust_bitfield_address_nv(MEMREF, MODE, OFFSET) \
- adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 1)
+ adjust_address_1 (MEMREF, MODE, OFFSET, 0, 1, 1, 0)
/* Return a memory reference like MEMREF, but with its mode changed
to MODE and its address changed to ADDR, which is assumed to be
@@ -585,7 +590,7 @@ extern rtx change_address (rtx, enum machine_mode, rtx);
adjust_automodify_address_1 (MEMREF, MODE, ADDR, OFFSET, 0)
extern rtx adjust_address_1 (rtx, enum machine_mode, HOST_WIDE_INT, int, int,
- int);
+ int, HOST_WIDE_INT);
extern rtx adjust_automodify_address_1 (rtx, enum machine_mode, rtx,
HOST_WIDE_INT, int);