aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorJim Wilson <wilson@gcc.gnu.org>1995-02-24 17:45:43 -0800
committerJim Wilson <wilson@gcc.gnu.org>1995-02-24 17:45:43 -0800
commitf9409c3ac37ccfd7b98035d2629531eec39f9ea4 (patch)
tree5f8081da4027499a5810302f183016c5b10cde0c /gcc
parent2b10af4fab06f87be08e062974db51cbfa6f2829 (diff)
downloadgcc-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.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/gcc/expr.c b/gcc/expr.c
index d46498e..cd0472d 100644
--- a/gcc/expr.c
+++ b/gcc/expr.c
@@ -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;