Commit de8920be by Jason Merrill Committed by Jason Merrill

explow.c (int_expr_size): New fn.

        * explow.c (int_expr_size): New fn.
        * expr.c (expand_expr) [CONSTRUCTOR]: Use it.
        * expr.h: Declare it.

From-SVN: r56009
parent 7a9ffd82
2002-08-03 Jason Merrill <jason@redhat.com>
* explow.c (int_expr_size): New fn.
* expr.c (expand_expr) [CONSTRUCTOR]: Use it.
* expr.h: Declare it.
2002-08-02 Krister Walfridsson <cato@df.lth.se> 2002-08-02 Krister Walfridsson <cato@df.lth.se>
* Makefile.in (gengtype-lex.o, gengtype-yacc.o): Add path to * Makefile.in (gengtype-lex.o, gengtype-yacc.o): Add path to
......
...@@ -295,6 +295,26 @@ expr_size (exp) ...@@ -295,6 +295,26 @@ expr_size (exp)
return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0); return expand_expr (size, NULL_RTX, TYPE_MODE (sizetype), 0);
} }
/* Return a wide integer for the size in bytes of the value of EXP, or -1
if the size can vary or is larger than an integer. */
HOST_WIDE_INT
int_expr_size (exp)
tree exp;
{
tree t = (*lang_hooks.expr_size) (exp);
if (t == 0
|| TREE_CODE (t) != INTEGER_CST
|| TREE_OVERFLOW (t)
|| TREE_INT_CST_HIGH (t) != 0
/* If the result would appear negative, it's too big to represent. */
|| (HOST_WIDE_INT) TREE_INT_CST_LOW (t) < 0)
return -1;
return TREE_INT_CST_LOW (t);
}
/* Return a copy of X in which all memory references /* Return a copy of X in which all memory references
and all constants that involve symbol refs and all constants that involve symbol refs
have been replaced with new temporary registers. have been replaced with new temporary registers.
......
...@@ -6812,7 +6812,7 @@ expand_expr (exp, target, tmode, modifier) ...@@ -6812,7 +6812,7 @@ expand_expr (exp, target, tmode, modifier)
* TYPE_QUAL_CONST))), * TYPE_QUAL_CONST))),
0, TREE_ADDRESSABLE (exp), 1); 0, TREE_ADDRESSABLE (exp), 1);
store_constructor (exp, target, 0, INTVAL (expr_size (exp))); store_constructor (exp, target, 0, int_expr_size (exp));
return target; return target;
} }
......
...@@ -544,6 +544,10 @@ extern unsigned int case_values_threshold PARAMS ((void)); ...@@ -544,6 +544,10 @@ extern unsigned int case_values_threshold PARAMS ((void));
/* Return an rtx for the size in bytes of the value of an expr. */ /* Return an rtx for the size in bytes of the value of an expr. */
extern rtx expr_size PARAMS ((tree)); extern rtx expr_size PARAMS ((tree));
/* Return a wide integer for the size in bytes of the value of EXP, or -1
if the size can vary or is larger than an integer. */
extern HOST_WIDE_INT int_expr_size PARAMS ((tree));
extern rtx lookup_static_chain PARAMS ((tree)); extern rtx lookup_static_chain PARAMS ((tree));
/* Convert a stack slot address ADDR valid in function FNDECL /* Convert a stack slot address ADDR valid in function FNDECL
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment