tree-stdarg.c (execute_optimize_stdarg): Handle references to va_list of the form &va[0].

2005-05-21  Richard Guenther  <rguenth@gcc.gnu.org>

	* tree-stdarg.c (execute_optimize_stdarg): Handle references
	to va_list of the form &va[0].

From-SVN: r100043
This commit is contained in:
Richard Guenther 2005-05-21 12:35:55 +00:00 committed by Richard Biener
parent 69a2d125d6
commit bb673b41f0
2 changed files with 24 additions and 5 deletions

View file

@ -1,3 +1,8 @@
2005-05-21 Richard Guenther <rguenth@gcc.gnu.org>
* tree-stdarg.c (execute_optimize_stdarg): Handle references
to va_list of the form &va[0].
2005-05-20 Jan Hubicka <jh@suse.cz>
* Makefile.in (insn-emit.o): Add basic-block.h dependency.

View file

@ -660,16 +660,30 @@ execute_optimize_stdarg (void)
si.va_start_count++;
ap = TREE_VALUE (TREE_OPERAND (call, 1));
if (TREE_CODE (ap) != ADDR_EXPR
|| TYPE_MAIN_VARIANT (TREE_TYPE (TREE_OPERAND (ap, 0)))
!= TYPE_MAIN_VARIANT (va_list_type_node)
|| TREE_CODE (TREE_OPERAND (ap, 0)) != VAR_DECL)
if (TREE_CODE (ap) != ADDR_EXPR)
{
va_list_escapes = true;
break;
}
ap = TREE_OPERAND (ap, 0);
if (TREE_CODE (ap) == ARRAY_REF)
{
if (! integer_zerop (TREE_OPERAND (ap, 1)))
{
va_list_escapes = true;
break;
}
ap = TREE_OPERAND (ap, 0);
}
if (TYPE_MAIN_VARIANT (TREE_TYPE (ap))
!= TYPE_MAIN_VARIANT (va_list_type_node)
|| TREE_CODE (ap) != VAR_DECL)
{
va_list_escapes = true;
break;
}
ap = TREE_OPERAND (ap, 0);
if (is_global_var (ap))
{
va_list_escapes = true;