diff options
author | Richard Henderson <rth@redhat.com> | 2003-06-08 20:21:56 -0700 |
---|---|---|
committer | Richard Henderson <rth@gcc.gnu.org> | 2003-06-08 20:21:56 -0700 |
commit | 017e1b43f9a203228c25da74d49ce5367eaee65b (patch) | |
tree | 09f0b6ed28e40cc9846facf74e75892be87ef0f1 /gcc/expr.c | |
parent | f8950e171a6d42bb28412e3c9c5c1afa84d79976 (diff) | |
download | gcc-017e1b43f9a203228c25da74d49ce5367eaee65b.zip gcc-017e1b43f9a203228c25da74d49ce5367eaee65b.tar.gz gcc-017e1b43f9a203228c25da74d49ce5367eaee65b.tar.bz2 |
expr.h (EXPAND_MEMORY): New.
* expr.h (EXPAND_MEMORY): New.
* expr.c (expand_expr): Check it.
* stmt.c (expand_asm_operands): Provide it when the constraint
requires a memory. Warn for memory input constraints without
a memory operand.
* gcc.dg/20011029-2.c: Fix the array reference.
* gcc.dg/asm-7.c: New.
From-SVN: r67645
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 12 |
1 files changed, 9 insertions, 3 deletions
@@ -7326,7 +7326,9 @@ expand_expr (exp, target, tmode, modifier) Don't fold if this is for wide characters since it's too difficult to do correctly and this is a very rare case. */ - if (modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER + if (modifier != EXPAND_CONST_ADDRESS + && modifier != EXPAND_INITIALIZER + && modifier != EXPAND_MEMORY && TREE_CODE (array) == STRING_CST && TREE_CODE (index) == INTEGER_CST && compare_tree_int (index, TREE_STRING_LENGTH (array)) < 0 @@ -7340,8 +7342,11 @@ expand_expr (exp, target, tmode, modifier) we have an explicit constructor and when our operand is a variable that was declared const. */ - if (modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER - && TREE_CODE (array) == CONSTRUCTOR && ! TREE_SIDE_EFFECTS (array) + if (modifier != EXPAND_CONST_ADDRESS + && modifier != EXPAND_INITIALIZER + && modifier != EXPAND_MEMORY + && TREE_CODE (array) == CONSTRUCTOR + && ! TREE_SIDE_EFFECTS (array) && TREE_CODE (index) == INTEGER_CST && 0 > compare_tree_int (index, list_length (CONSTRUCTOR_ELTS @@ -7362,6 +7367,7 @@ expand_expr (exp, target, tmode, modifier) else if (optimize >= 1 && modifier != EXPAND_CONST_ADDRESS && modifier != EXPAND_INITIALIZER + && modifier != EXPAND_MEMORY && TREE_READONLY (array) && ! TREE_SIDE_EFFECTS (array) && TREE_CODE (array) == VAR_DECL && DECL_INITIAL (array) && TREE_CODE (DECL_INITIAL (array)) != ERROR_MARK) |