re PR tree-optimization/16443 (ICE during linux kernel compilation)

PR tree-optimization/16443
	* tree-ssa-alias.c: Add more description for
	CALL_CLOBBERED_VARS and ADDRESSABLE_VARS.
	* tree-ssa-operands.c (get_asm_expr_operands): Re-order the
	clobbering of call-clobbered and addressable variables.  If
	there are any before aliases have been computed, add them.

testsuite/ChangeLog

	PR tree-optimization/16443
	* gcc.dg/tree-ssa/20040713-1.c: New test.

From-SVN: r84641
This commit is contained in:
Diego Novillo 2004-07-13 20:51:02 +00:00 committed by Diego Novillo
parent a65ab52456
commit ee536902d6
5 changed files with 45 additions and 11 deletions

View File

@ -1,3 +1,12 @@
2004-07-13 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/16443
* tree-ssa-alias.c: Add more description for
CALL_CLOBBERED_VARS and ADDRESSABLE_VARS.
* tree-ssa-operands.c (get_asm_expr_operands): Re-order the
clobbering of call-clobbered and addressable variables. If
there are any before aliases have been computed, add them.
2004-07-13 Diego Novillo <dnovillo@redhat.com>
* tree-optimize.c (execute_todo): Flush DUMP_FILE before

View File

@ -1,3 +1,8 @@
2004-07-13 Diego Novillo <dnovillo@redhat.com>
PR tree-optimization/16443
* gcc.dg/tree-ssa/20040713-1.c: New test.
2004-07-15 Ulrich Weigand <uweigand@de.ibm.com>
* g++.dg/lookup/new2.C: Use first operand of type __SIZE_TYPE__

View File

@ -0,0 +1,18 @@
/* { dg-do compile } */
/* { dg-options "-Os" } */
/* Extracted from PR 16443. Contributed by Volker Reichelt.
Scanning of __asm__ operands wasn't considering call-clobbered
variables discovered before the aliasing pass. This was causing a
crash in verify_ssa() because 'p' was not being given an SSA_NAME. */
void foo(char *p)
{
__asm__ ("" ::: "memory");
}
void bar()
{
static char *p;
foo(p);
}

View File

@ -164,7 +164,12 @@ static struct ptr_info_def *get_ptr_info (tree t);
bitmap call_clobbered_vars;
/* Addressable variables in the function. If bit I is set, then
REFERENCED_VARS (I) has had its address taken. */
REFERENCED_VARS (I) has had its address taken. Note that
CALL_CLOBBERED_VARS and ADDRESSABLE_VARS are not related. An
addressable variable is not necessarily call-clobbered (e.g., a
local addressable whose address does not escape) and not all
call-clobbered variables are addressable (e.g., a local static
variable). */
bitmap addressable_vars;
/* 'true' after aliases have been computed (see compute_may_aliases). This

View File

@ -1231,16 +1231,6 @@ get_asm_expr_operands (tree stmt, voperands_t prev_vops)
{
size_t i;
/* If we still have not computed aliasing information, we
won't know what variables are call-clobbered and/or
addressable. Just mark the statement as having volatile
operands for now. */
if (!aliases_computed_p)
{
stmt_ann (stmt)->has_volatile_ops = true;
break;
}
/* Clobber all call-clobbered variables (or .GLOBAL_VAR if we
decided to group them). */
if (global_var)
@ -1259,6 +1249,13 @@ get_asm_expr_operands (tree stmt, voperands_t prev_vops)
add_stmt_operand (&var, stmt, opf_is_def, prev_vops);
});
/* If we don't have call-clobbered nor addressable vars and we
still have not computed aliasing information, just mark the
statement as having volatile operands. If the alias pass
finds some, we will add them at that point. */
if (!aliases_computed_p)
stmt_ann (stmt)->has_volatile_ops = true;
break;
}
}