expr.c (expand_expr_real_1): Only use BLKmode for volatile accesses which are not naturally aligned.

* expr.c (expand_expr_real_1): Only use BLKmode for volatile
	accesses which are not naturally aligned.

From-SVN: r171347
This commit is contained in:
Julian Brown 2011-03-23 11:57:28 +00:00 committed by Julian Brown
parent 3505a737fd
commit bf90208ff8
2 changed files with 10 additions and 2 deletions

View file

@ -1,3 +1,8 @@
2011-03-23 Julian Brown <julian@codesourcery.com>
* expr.c (expand_expr_real_1): Only use BLKmode for volatile
accesses which are not naturally aligned.
2011-03-23 Richard Sandiford <richard.sandiford@linaro.org>
PR target/47553

View file

@ -9147,8 +9147,11 @@ expand_expr_real_1 (tree exp, rtx target, enum machine_mode tmode,
&& modifier != EXPAND_CONST_ADDRESS
&& modifier != EXPAND_INITIALIZER)
/* If the field is volatile, we always want an aligned
access. */
|| (volatilep && flag_strict_volatile_bitfields > 0)
access. Only do this if the access is not already naturally
aligned, otherwise "normal" (non-bitfield) volatile fields
become non-addressable. */
|| (volatilep && flag_strict_volatile_bitfields > 0
&& (bitpos % GET_MODE_ALIGNMENT (mode) != 0))
/* If the field isn't aligned enough to fetch as a memref,
fetch it as a bit field. */
|| (mode1 != BLKmode