summaryrefslogtreecommitdiff
path: root/gcc/expr.h
diff options
context:
space:
mode:
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-23 22:19:39 +0000
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2003-02-23 22:19:39 +0000
commita35a63fff496e284f010031e5d6d3451a9a26579 (patch)
tree3072cb4fe732b3df37e851d737c014b16029b598 /gcc/expr.h
parent7cc73d08e2dfcf8c0626d94c67ce264713140255 (diff)
downloadgcc-a35a63fff496e284f010031e5d6d3451a9a26579.tar.gz
* calls.c (store_one_arg): Revert 1999-02-16 change. Revert
2000-12-17 change. Pass EXPAND_STACK_PARM to expand_expr. * expr.h (enum expand_modifier): Define EXPAND_STACK_PARM. (enum block_op_methods): Reorder for better store_expr optimization. * expr.c (store_expr): Test bit 1 of "want_value" for call param stores, test bit 0 for original want_value meaning. Pass BLOCK_OP_CALL_PARM to emit_block_move when bit 1 set. Adjust recursive calls, and calls to expand_param. (expand_expr): Handle EXPAND_STACK_PARM modifier. When cse expected, set target to 0 rather than to subtarget. Formatting. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@63337 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/expr.h')
-rw-r--r--gcc/expr.h13
1 files changed, 8 insertions, 5 deletions
diff --git a/gcc/expr.h b/gcc/expr.h
index 12103722730..2f243266cf2 100644
--- a/gcc/expr.h
+++ b/gcc/expr.h
@@ -1,6 +1,6 @@
/* Definitions for code generation pass of GNU compiler.
Copyright (C) 1987, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
- 1999, 2000 Free Software Foundation, Inc.
+ 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc.
This file is part of GCC.
@@ -44,13 +44,16 @@ Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define QUEUED_NEXT(P) XEXP (P, 4)
/* This is the 4th arg to `expand_expr'.
+ EXPAND_STACK_PARM means we are possibly expanding a call param onto
+ the stack. Choosing a value of 2 isn't special; It just allows
+ some code optimization in store_expr.
EXPAND_SUM means it is ok to return a PLUS rtx or MULT rtx.
EXPAND_INITIALIZER is similar but also record any labels on forced_labels.
EXPAND_CONST_ADDRESS means it is ok to return a MEM whose address
is a constant that is not a legitimate address.
EXPAND_WRITE means we are only going to write to the resulting rtx. */
-enum expand_modifier {EXPAND_NORMAL, EXPAND_SUM, EXPAND_CONST_ADDRESS,
- EXPAND_INITIALIZER, EXPAND_WRITE};
+enum expand_modifier {EXPAND_NORMAL = 0, EXPAND_STACK_PARM = 2, EXPAND_SUM,
+ EXPAND_CONST_ADDRESS, EXPAND_INITIALIZER, EXPAND_WRITE};
/* Prevent the compiler from deferring stack pops. See
inhibit_defer_pop for more information. */
@@ -378,8 +381,8 @@ extern rtx convert_modes PARAMS ((enum machine_mode, enum machine_mode,
enum block_op_methods
{
BLOCK_OP_NORMAL,
- BLOCK_OP_CALL_PARM,
- BLOCK_OP_NO_LIBCALL
+ BLOCK_OP_NO_LIBCALL,
+ BLOCK_OP_CALL_PARM
};
extern rtx emit_block_move PARAMS ((rtx, rtx, rtx, enum block_op_methods));