aboutsummaryrefslogtreecommitdiff
path: root/gcc/stmt.c
diff options
context:
space:
mode:
authorAlan Modra <amodra@gmail.com>2013-09-24 21:02:28 +0930
committerAlan Modra <amodra@gcc.gnu.org>2013-09-24 21:02:28 +0930
commit5a8c2b571c68cea56cab84c90bf407363c8a3587 (patch)
treef766572dc170a811c372091c20ec61420cd13e4f /gcc/stmt.c
parentf40333afeb570012ed42439cb9ce3c7aaa63b916 (diff)
downloadgcc-5a8c2b571c68cea56cab84c90bf407363c8a3587.zip
gcc-5a8c2b571c68cea56cab84c90bf407363c8a3587.tar.gz
gcc-5a8c2b571c68cea56cab84c90bf407363c8a3587.tar.bz2
re PR middle-end/57134 (ICE with -mstrict-align and inline assembly on ppc64)
PR middle-end/57134 PR middle-end/57586 * stmt.c (expand_asm_operands): Call expand_expr with EXPAND_MEMORY for output operands that disallow regs. Don't use EXPAND_WRITE on inout operands. From-SVN: r202866
Diffstat (limited to 'gcc/stmt.c')
-rw-r--r--gcc/stmt.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/gcc/stmt.c b/gcc/stmt.c
index 1dc447a..c56e419 100644
--- a/gcc/stmt.c
+++ b/gcc/stmt.c
@@ -806,7 +806,10 @@ expand_asm_operands (tree string, tree outputs, tree inputs,
|| ! allows_reg
|| is_inout)
{
- op = expand_expr (val, NULL_RTX, VOIDmode, EXPAND_WRITE);
+ op = expand_expr (val, NULL_RTX, VOIDmode,
+ !allows_reg ? EXPAND_MEMORY
+ : !is_inout ? EXPAND_WRITE
+ : EXPAND_NORMAL);
if (MEM_P (op))
op = validize_mem (op);