diff options
author | Jim Wilson <wilson@gcc.gnu.org> | 1995-02-24 17:45:43 -0800 |
---|---|---|
committer | Jim Wilson <wilson@gcc.gnu.org> | 1995-02-24 17:45:43 -0800 |
commit | f9409c3ac37ccfd7b98035d2629531eec39f9ea4 (patch) | |
tree | 5f8081da4027499a5810302f183016c5b10cde0c /gcc | |
parent | 2b10af4fab06f87be08e062974db51cbfa6f2829 (diff) | |
download | gcc-f9409c3ac37ccfd7b98035d2629531eec39f9ea4.zip gcc-f9409c3ac37ccfd7b98035d2629531eec39f9ea4.tar.gz gcc-f9409c3ac37ccfd7b98035d2629531eec39f9ea4.tar.bz2 |
(expand_expr, case COMPONENT_REF): Don't fetch unaligned
field if we only want its address.
From-SVN: r9069
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/expr.c | 18 |
1 files changed, 9 insertions, 9 deletions
@@ -4761,16 +4761,16 @@ expand_expr (exp, target, tmode, modifier) (which we know to be the width of a basic mode), then storing into memory, and changing the mode to BLKmode. */ if (mode1 == VOIDmode - || (mode1 != BLKmode && ! direct_load[(int) mode1] - && modifier != EXPAND_CONST_ADDRESS - && modifier != EXPAND_SUM && modifier != EXPAND_INITIALIZER) || GET_CODE (op0) == REG || GET_CODE (op0) == SUBREG - /* If the field isn't aligned enough to fetch as a memref, - fetch it as a bit field. */ - || (SLOW_UNALIGNED_ACCESS - && TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode)) - || (SLOW_UNALIGNED_ACCESS - && bitpos % GET_MODE_ALIGNMENT (mode) != 0)) + || (modifier != EXPAND_CONST_ADDRESS + && modifier != EXPAND_SUM + && modifier != EXPAND_INITIALIZER + && ((mode1 != BLKmode && ! direct_load[(int) mode1]) + /* If the field isn't aligned enough to fetch as a memref, + fetch it as a bit field. */ + || (SLOW_UNALIGNED_ACCESS + && ((TYPE_ALIGN (TREE_TYPE (tem)) < GET_MODE_ALIGNMENT (mode)) + || (bitpos % GET_MODE_ALIGNMENT (mode) != 0)))))) { enum machine_mode ext_mode = mode; |