passes.c (init_optimization_passes): Move the second forwprop pass before alias computation.

2008-08-20  Richard Guenther  <rguenther@suse.de>

	* passes.c (init_optimization_passes): Move the second
	forwprop pass before alias computation.  Remove the second
	DCE pass.  Remove the first dominator and phi copy/const
	prop passes.

	* gcc.dg/tree-ssa/20030530-2.c: Scan dom2 dump.
	* gcc.dg/tree-ssa/20030611-1.c: Likewise.
	* gcc.dg/tree-ssa/20030703-1.c: Likewise.
	* gcc.dg/tree-ssa/20030703-2.c: Likewise.
	* gcc.dg/tree-ssa/20030708-1.c: Likewise.
	* gcc.dg/tree-ssa/20030709-3.c: Likewise.
	* gcc.dg/tree-ssa/20030710-1.c: Likewise.
	* gcc.dg/tree-ssa/20030711-1.c: Likewise.
	* gcc.dg/tree-ssa/20030711-2.c: Likewise.
	* gcc.dg/tree-ssa/20030711-3.c: Likewise.
	* gcc.dg/tree-ssa/20030714-1.c: Likewise.
	* gcc.dg/tree-ssa/20030714-2.c: Likewise.
	* gcc.dg/tree-ssa/20030729-1.c: Likewise.
	* gcc.dg/tree-ssa/20030730-1.c: Likewise.
	* gcc.dg/tree-ssa/20030730-2.c: Likewise.
	* gcc.dg/tree-ssa/20030731-1.c: Likewise.
	* gcc.dg/tree-ssa/20030807-1.c: Likewise.
	* gcc.dg/tree-ssa/20030807-11.c: Likewise.
	* gcc.dg/tree-ssa/20030807-2.c: Likewise.
	* gcc.dg/tree-ssa/20030807-3.c: Likewise.
	* gcc.dg/tree-ssa/20030807-5.c: Likewise.
	* gcc.dg/tree-ssa/20030807-8.c: Likewise.
	* gcc.dg/tree-ssa/20030807-9.c: Likewise.
	* gcc.dg/tree-ssa/20030814-1.c: Likewise.
	* gcc.dg/tree-ssa/20030814-2.c: Likewise.
	* gcc.dg/tree-ssa/20030814-3.c: Likewise.
	* gcc.dg/tree-ssa/20030814-4.c: Likewise.
	* gcc.dg/tree-ssa/20030814-5.c: Likewise.
	* gcc.dg/tree-ssa/20030814-6.c: Likewise.
	* gcc.dg/tree-ssa/20030814-7.c: Likewise.
	* gcc.dg/tree-ssa/20030922-1.c: Likewise.
	* gcc.dg/tree-ssa/20040729-1.c: Likewise.
	* gcc.dg/tree-ssa/20041122-1.c: Likewise.
	* gcc.dg/tree-ssa/pr21417.c: Likewise.
	* gcc.dg/tree-ssa/pr21829.c: Scan phicprop2 dump.
	* gcc.dg/tree-ssa/ssa-dce-1.c: Scan dce2 dump.
	* gcc.dg/tree-ssa/ssa-dce-2.c: Likewise.
	* g++.dg/tree-ssa/pr31146.C: Remove XFAIL, adjust pattern.
	* gfortran.dg/ldist-1.f90: Adjust.

From-SVN: r139286
This commit is contained in:
Richard Guenther 2008-08-20 12:59:10 +00:00 committed by Richard Biener
parent 34afead0f1
commit e2081a1d5d
42 changed files with 188 additions and 149 deletions

View file

@ -1,3 +1,10 @@
2008-08-20 Richard Guenther <rguenther@suse.de>
* passes.c (init_optimization_passes): Move the second
forwprop pass before alias computation. Remove the second
DCE pass. Remove the first dominator and phi copy/const
prop passes.
2008-08-20 Nick Clifton <nickc@redhat.com>
* configure.ac (HAVE_GAS_CFI_DIRECTIVE): Always test for assembler

View file

@ -589,6 +589,7 @@ init_optimization_passes (void)
NEXT_PASS (pass_rename_ssa_copies);
NEXT_PASS (pass_complete_unrolli);
NEXT_PASS (pass_ccp);
NEXT_PASS (pass_forwprop);
/* Ideally the function call conditional
dead code elimination phase can be delayed
till later where potentially more opportunities
@ -605,20 +606,11 @@ init_optimization_passes (void)
NEXT_PASS (pass_return_slot);
NEXT_PASS (pass_phiprop);
NEXT_PASS (pass_fre);
NEXT_PASS (pass_dce);
NEXT_PASS (pass_forwprop);
NEXT_PASS (pass_copy_prop);
NEXT_PASS (pass_merge_phi);
NEXT_PASS (pass_vrp);
NEXT_PASS (pass_dce);
NEXT_PASS (pass_cselim);
NEXT_PASS (pass_dominator);
/* The only const/copy propagation opportunities left after
DOM should be due to degenerate PHI nodes. So rather than
run the full propagators, run a specialized pass which
only examines PHIs to discover const/copy propagation
opportunities. */
NEXT_PASS (pass_phi_only_cprop);
NEXT_PASS (pass_tree_ifcombine);
NEXT_PASS (pass_phiopt);
NEXT_PASS (pass_tail_recursion);

View file

@ -1,3 +1,45 @@
2008-08-20 Richard Guenther <rguenther@suse.de>
* gcc.dg/tree-ssa/20030530-2.c: Scan dom2 dump.
* gcc.dg/tree-ssa/20030611-1.c: Likewise.
* gcc.dg/tree-ssa/20030703-1.c: Likewise.
* gcc.dg/tree-ssa/20030703-2.c: Likewise.
* gcc.dg/tree-ssa/20030708-1.c: Likewise.
* gcc.dg/tree-ssa/20030709-3.c: Likewise.
* gcc.dg/tree-ssa/20030710-1.c: Likewise.
* gcc.dg/tree-ssa/20030711-1.c: Likewise.
* gcc.dg/tree-ssa/20030711-2.c: Likewise.
* gcc.dg/tree-ssa/20030711-3.c: Likewise.
* gcc.dg/tree-ssa/20030714-1.c: Likewise.
* gcc.dg/tree-ssa/20030714-2.c: Likewise.
* gcc.dg/tree-ssa/20030729-1.c: Likewise.
* gcc.dg/tree-ssa/20030730-1.c: Likewise.
* gcc.dg/tree-ssa/20030730-2.c: Likewise.
* gcc.dg/tree-ssa/20030731-1.c: Likewise.
* gcc.dg/tree-ssa/20030807-1.c: Likewise.
* gcc.dg/tree-ssa/20030807-11.c: Likewise.
* gcc.dg/tree-ssa/20030807-2.c: Likewise.
* gcc.dg/tree-ssa/20030807-3.c: Likewise.
* gcc.dg/tree-ssa/20030807-5.c: Likewise.
* gcc.dg/tree-ssa/20030807-8.c: Likewise.
* gcc.dg/tree-ssa/20030807-9.c: Likewise.
* gcc.dg/tree-ssa/20030814-1.c: Likewise.
* gcc.dg/tree-ssa/20030814-2.c: Likewise.
* gcc.dg/tree-ssa/20030814-3.c: Likewise.
* gcc.dg/tree-ssa/20030814-4.c: Likewise.
* gcc.dg/tree-ssa/20030814-5.c: Likewise.
* gcc.dg/tree-ssa/20030814-6.c: Likewise.
* gcc.dg/tree-ssa/20030814-7.c: Likewise.
* gcc.dg/tree-ssa/20030922-1.c: Likewise.
* gcc.dg/tree-ssa/20040729-1.c: Likewise.
* gcc.dg/tree-ssa/20041122-1.c: Likewise.
* gcc.dg/tree-ssa/pr21417.c: Likewise.
* gcc.dg/tree-ssa/pr21829.c: Scan phicprop2 dump.
* gcc.dg/tree-ssa/ssa-dce-1.c: Scan dce2 dump.
* gcc.dg/tree-ssa/ssa-dce-2.c: Likewise.
* g++.dg/tree-ssa/pr31146.C: Remove XFAIL, adjust pattern.
* gfortran.dg/ldist-1.f90: Adjust.
2008-08-20 Victor Kaplansky <victork@il.ibm.com>
* gcc.dg/vect/vect-multitypes-15.c: Fix typo.

View file

@ -12,6 +12,5 @@ void foo (int j)
*q = 1;
}
/* { dg-final { scan-tree-dump "i\\\[j.*\\\] = 1;" "forwprop1" { xfail *-*-* } } } */
/* { dg-final { scan-tree-dump "i\\\[j.*\\\] = 1;" "forwprop2" } } */
/* { dg-final { scan-tree-dump "i\\\[j.*\\\] =.* 1;" "forwprop1" } } */
/* { dg-final { cleanup-tree-dump "forwprop?" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
typedef struct rs6000_stack {
@ -16,12 +16,12 @@ rs6000_emit_prologue (int i, rs6000_stack_t *info)
/* There should be precisely one load of first_gp_reg_save. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "first_gp_reg_save" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "first_gp_reg_save" 1 "dom2"} } */
/* There should be precisely one addition. If there is more than one, then
the dominator optimizations failed, most likely due to not handling
commutative operands correctly. */
/* { dg-final { scan-tree-dump-times "\\+" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "\\+" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern int square (int) __attribute__ ((__const__));
shit(int a)
@ -10,5 +10,5 @@ shit(int a)
/* There should be precisely one call to square. If there is more than one,
then the dominator optimizations failed to remove the redundant call. */
/* { dg-final { scan-tree-dump-times "square" 1 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "square" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
extern int blah[];
@ -14,9 +14,9 @@ foo(int index)
/* There should be precisely one load of blah. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "blah" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "blah" 1 "dom2"} } */
/* There should be exactly one IF conditional. */
/* { dg-final { scan-tree-dump-times "if " 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -29,16 +29,16 @@ get_alias_set (t)
/* There should be precisely one load of {t,__t}->code. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "->code" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "->code" 1 "dom2"} } */
/* There should be precisely one load of tree_code_type. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "tree_code_type" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "tree_code_type" 1 "dom2"} } */
/* There should be one IF conditional. If 'tree_code_type[t->code]' is
zero, then the third if() conditional is unnecessary. That should cause
the call to abort() to be removed, which in turn causes the whole second
if() to disappear. */
/* { dg-final { scan-tree-dump-times "if " 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
struct rtx_def;
typedef struct rtx_def *rtx;
@ -35,9 +35,9 @@ nonlocal_mentioned_p (x)
/* There should be no casts to a short unsigned int since the entire
set of conditionals should optimize away. */
/* { dg-final { scan-tree-dump-times "\\(short unsigned int\\)" 0 "dom3"} } */
/* { dg-final { scan-tree-dump-times "\\(short unsigned int\\)" 0 "dom2"} } */
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -36,13 +36,13 @@ record_component_aliases (type)
/* There should be precisely one load of type.binfo. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 1 "dom2"} } */
/* There should be precisely one load of common.code. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "common\\.code" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "common\\.code" 1 "dom2"} } */
/* There should be one IF conditional. */
/* { dg-final { scan-tree-dump-times "if " 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
union tree_node;
@ -41,15 +41,15 @@ record_component_aliases (type)
/* The call to blah should have been eliminated. If the call is not
eliminated, then dominator optimizations failed and it'll be
impossible to delete other unnecessary code. */
/* { dg-final { scan-tree-dump-not "blah \\(\\)" "dom3" } } */
/* { dg-final { scan-tree-dump-not "blah \\(\\)" "dom2" } } */
/* There should be two IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 2 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 2 "dom2"} } */
/* There should be a single load of type.binfo. */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 1 "dom2"} } */
/* There should be two loads of vec.length. */
/* { dg-final { scan-tree-dump-times "vec.length" 2 "dom3"} } */
/* { dg-final { scan-tree-dump-times "vec.length" 2 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -41,15 +41,15 @@ record_component_aliases (type)
}
/* The call to blah can not be eliminated. */
/* { dg-final { scan-tree-dump-times "blah \\(\\)" 1 "dom3" } } */
/* { dg-final { scan-tree-dump-times "blah \\(\\)" 1 "dom2" } } */
/* There should be four IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 3 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 4 "dom2"} } */
/* There should be two loads of type.binfo. */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 2 "dom3"} } */
/* { dg-final { scan-tree-dump-times "type\\.binfo" 2 "dom2"} } */
/* There should be four loads of vec.length. */
/* { dg-final { scan-tree-dump-times "vec.length" 3 "dom3"} } */
/* { dg-final { scan-tree-dump-times "vec.length" 4 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom3" } */
/* { dg-options "-O2 -fdump-tree-dom2" } */
struct rtx_def;
@ -49,21 +49,21 @@ get_alias_set (t,z)
}
/* The calls to make_decl_rtl should be eliminated
/* { dg-final { scan-tree-dump-not "make_decl_rtl \\(\\)" "dom3" } } */
/* { dg-final { scan-tree-dump-not "make_decl_rtl \\(\\)" "dom2" } } */
/* There should be three IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 3 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 3 "dom2"} } */
/* There should be one loads of decl.rtl. */
/* { dg-final { scan-tree-dump-times "decl\\.rtl" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "decl\\.rtl" 1 "dom2"} } */
/* There should be one load of code. */
/* { dg-final { scan-tree-dump-times "code" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "code" 1 "dom2"} } */
/* There should be one load of rtmem. */
/* { dg-final { scan-tree-dump-times "rtmem" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "rtmem" 1 "dom2"} } */
/* There should be one load of alias. */
/* { dg-final { scan-tree-dump-times "->alias" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "->alias" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
struct rtx_def;
@ -44,18 +44,18 @@ get_alias_set (t)
}
/* The calls to make_decl_rtl should be eliminated. */
/* { dg-final { scan-tree-dump-not "make_decl_rtl \\(\\)" "dom3" } } */
/* { dg-final { scan-tree-dump-not "make_decl_rtl \\(\\)" "dom2" } } */
/* There should be two IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 2 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 2 "dom2"} } */
/* There should be one load of decl.rtl. */
/* { dg-final { scan-tree-dump-times "decl\\.rtl" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "decl\\.rtl" 1 "dom2"} } */
/* There should be two loads of rtmem. */
/* { dg-final { scan-tree-dump-times "rtmem" 2 "dom3"} } */
/* { dg-final { scan-tree-dump-times "rtmem" 2 "dom2"} } */
/* There should be one load of alias. */
/* { dg-final { scan-tree-dump-times "->alias" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "->alias" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
struct rtx_def;
typedef struct rtx_def *rtx;
@ -35,6 +35,6 @@ find_base_value (src)
/* There should be no casts to short unsigned int. */
/* { dg-final { scan-tree-dump-times "\\(short unsigned int\\)" 0 "dom3"} } */
/* { dg-final { scan-tree-dump-times "\\(short unsigned int\\)" 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
union tree_node;
@ -34,6 +34,6 @@ get_alias_set (t)
/* There should be exactly three IF conditionals if we thread jumps
properly. */
/* { dg-final { scan-tree-dump-times "if " 3 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 3 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
union tree_node;
@ -45,10 +45,10 @@ readonly_fields_p (type)
/* A good optimizer would realize that the cast to (unsigned int) is
useless as the earlier cast of the same value of (unsigned char) will
always produce the same result. */
/* { dg-final { scan-tree-dump-times "\\(unsigned int\\)" 0 "dom3"} } */
/* { dg-final { scan-tree-dump-times "\\(unsigned int\\)" 0 "dom2"} } */
/* There should be one load of ->common.code. We currently fail this
because we load from ->common.code using different types. */
/* { dg-final { scan-tree-dump-times "common\.code" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "common\.code" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom3" } */
/* { dg-options "-O2 -fdump-tree-dom2" } */
extern void exit (int);
extern void *ggc_alloc (__SIZE_TYPE__);
@ -19,7 +19,7 @@ foo (int attr_kind, unsigned long offset)
}
/* There should be no IF conditionals, unless target has fno-delete-null-pointer-checks */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3" { target { ! keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump "if " "dom3" { target { keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2" { target { ! keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump "if " "dom2" { target { keeps_null_pointer_checks } } } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom3" } */
/* { dg-options "-O2 -fdump-tree-dom2" } */
extern void exit (int);
extern void *ggc_alloc (__SIZE_TYPE__);
@ -19,7 +19,7 @@ foo (int attr_kind, unsigned long offset)
}
/* There should be no IF conditionals, unless target has fno-delete-null-pointer-checks */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3" { target { ! keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump "if " "dom3" { target { keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2" { target { ! keeps_null_pointer_checks } } } } */
/* { dg-final { scan-tree-dump "if " "dom2" { target { keeps_null_pointer_checks } } } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -63,5 +63,5 @@ store_expr (exp, target, want_value)
(B) only looks at immediate dominators, and only queued_subexp_p
immediately dominates the comparison in question. We need something
stronger. */
/* { dg-final { scan-tree-dump-times "target.*!= 0" 0 "dom3" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "target.*!= 0" 0 "dom2" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
struct rtx_def;
typedef struct rtx_def *rtx;
@ -41,5 +41,5 @@ bar (rtx r)
are threaded to the return 0. Which in turn means the path
which combines the result of those two tests into a new test
must always be true and it is optimized appropriately. */
/* { dg-final { scan-tree-dump-times "if " 2 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 2 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
struct rtx_def;
@ -17,5 +17,5 @@ foo (reg)
}
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -ftree-vrp -fdump-tree-dom3" } */
/* { dg-options "-O1 -ftree-vrp -fdump-tree-dom2" } */
extern void abort (void);
@ -24,5 +24,5 @@ foo(int n)
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
typedef unsigned int cppchar_t;
cppchar_t
@ -23,5 +23,5 @@ cpp_parse_escape (pstr, limit, wide)
/* There should be precisely three IF statements. If there is
more than two, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "if " 3 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 3 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
struct rtx_def;
@ -30,10 +30,10 @@ foo ()
/* There should be precisely one load of ->code. If there is
more than, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "->code" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "->code" 1 "dom2"} } */
/* There should be two IF statements. One for 'current_sym_addr->code == 42'.
The other one for '(EXPR)->unchanging'. */
/* { dg-final { scan-tree-dump-times "if " 2 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 2 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
struct die_struct;
typedef struct die_struct *dw_die_ref;
@ -51,5 +51,5 @@ output_location_lists (die)
}
/* There should be exactly one IF conditional, in output_location_lists. */
/* { dg-final { scan-tree-dump-times "if " 1 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
static void
bar ()
@ -16,5 +16,5 @@ ooof ()
}
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -16,6 +16,6 @@ com(int *blah)
/* There should be precisely one load of blah. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "\\*blah" 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "\\*blah" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -17,6 +17,6 @@ foo (int value)
}
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -18,6 +18,6 @@ foo (int value)
}
/* There should be one IF conditional. */
/* { dg-final { scan-tree-dump-times "if " 1 "dom3"} } */
/* { dg-final { scan-tree-dump-times "if " 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3 -fdump-tree-optimized" } */
/* { dg-options "-O1 -fdump-tree-dom2 -fdump-tree-optimized" } */
extern void abort (void);
union tree_node;
@ -34,8 +34,8 @@ blah (decl, set)
/* There should be precisely one reference to pointer_alias_set. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "pointer_alias_set" 1 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "pointer_alias_set" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */
/* The assignment set = -1 in the ELSE clause of the last IF
statement should be removed by the final cleanup phase. */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3 -fdump-tree-optimized" } */
/* { dg-options "-O1 -fdump-tree-dom2 -fdump-tree-optimized" } */
extern void abort (void);
union tree_node;
@ -34,8 +34,8 @@ blah (decl, set)
/* There should be precisely one reference to pointer_alias_set. If there is
more than one, then the dominator optimizations failed. */
/* { dg-final { scan-tree-dump-times "pointer_alias_set" 1 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "pointer_alias_set" 1 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */
/* The assignment set = -1 in the ELSE clause of the last IF
statement should be removed by the final cleanup phase. */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
union tree_node;
@ -41,5 +41,5 @@ foo (t, set)
more than one, then the dominator optimizations failed. */
/* ??? Will fail until we properly distinguish member stores. At
present the write to type.alias_set kills the previous load. */
/* { dg-final { scan-tree-dump-times "common.code" 1 "dom3" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "common.code" 1 "dom2" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
struct rtx_def;
@ -38,5 +38,5 @@ mark_constant_function (void)
and the temporary used as the argument to cgraph_rtl_info.
This if we find current_function_decl used as an argument, then
we have failed. */
/* { dg-final { scan-tree-dump-times "\\(current_function_decl\\)" 0 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "\\(current_function_decl\\)" 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
extern void abort (void);
@ -30,5 +30,5 @@ voidify_wrapper_expr (tree wrapper)
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dom3"} } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dom2"} } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dce3" } */
/* { dg-options "-O1 -fdump-tree-dce2" } */
foo ()
{
@ -15,5 +15,5 @@ foo ()
compiler was mistakenly thinking that the statement had volatile
operands. But 'p' itself is not volatile and taking the address of
a volatile does not constitute a volatile operand. */
/* { dg-final { scan-tree-dump-times "&x" 0 "dce3"} } */
/* { dg-final { cleanup-tree-dump "dce3" } } */
/* { dg-final { scan-tree-dump-times "&x" 0 "dce2"} } */
/* { dg-final { cleanup-tree-dump "dce2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dom3" } */
/* { dg-options "-O1 -fdump-tree-dom2" } */
typedef unsigned int size_t;
@ -34,5 +34,5 @@ find_unreachable_blocks (int frobit)
able to determine that modifying e->dest->flags does not
modify e or e->dest. The net result is that we only need one
load of e->dest. */
/* { dg-final { scan-tree-dump-times "->dest" 1 "dom3" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "->dest" 1 "dom2" { xfail *-*-* } } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dom3-details" } */
/* { dg-options "-O2 -fdump-tree-dom2-details" } */
struct tree_common
{
@ -49,6 +49,6 @@ L23:
/* We should thread the backedge to the top of the loop; ie we only
execute the if (expr->common.code != 142) test once per loop
iteration. */
/* { dg-final { scan-tree-dump-times "Threaded jump" 1 "dom3" } } */
/* { dg-final { cleanup-tree-dump "dom3" } } */
/* { dg-final { scan-tree-dump-times "Threaded jump" 1 "dom2" } } */
/* { dg-final { cleanup-tree-dump "dom2" } } */

View file

@ -16,6 +16,6 @@ int test(int v)
return x;
}
/* { dg-final { scan-tree-dump-times "Original statement:.*% 2\[ \t\n]*Updated statement.*=1" 0 "phicprop3" } } */
/* { dg-final { cleanup-tree-dump "phicprop\[1-3\]" } } */
/* { dg-final { scan-tree-dump-times "Original statement:.*% 2\[ \t\n]*Updated statement.*=1" 0 "phicprop2" } } */
/* { dg-final { cleanup-tree-dump "phicprop\[1-2\]" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O1 -fdump-tree-dce3" } */
/* { dg-options "-O1 -fdump-tree-dce2" } */
int t() __attribute__ ((const));
q()
@ -9,5 +9,5 @@ q()
i = t();
}
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dce3"} } */
/* { dg-final { cleanup-tree-dump "dce3" } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dce2"} } */
/* { dg-final { cleanup-tree-dump "dce2" } } */

View file

@ -1,5 +1,5 @@
/* { dg-do compile } */
/* { dg-options "-O2 -fdump-tree-dce3" } */
/* { dg-options "-O2 -fdump-tree-dce2" } */
/* We should notice constantness of this function. */
static int __attribute__((noinline)) t(int a)
@ -13,5 +13,5 @@ void q(void)
i = t(1);
}
/* There should be no IF conditionals. */
/* { dg-final { scan-tree-dump-times "if " 0 "dce3"} } */
/* { dg-final { cleanup-tree-dump "dce3" } } */
/* { dg-final { scan-tree-dump-times "if " 0 "dce2"} } */
/* { dg-final { cleanup-tree-dump "dce2" } } */

View file

@ -29,6 +29,5 @@ Subroutine PADEC(DKS,DKDS,HVAR,WM,WG,FN,NS,AN,BN,CN,IT)
return
end Subroutine PADEC
! { dg-final { scan-tree-dump-times "distributed: split to 4 loops" 1 "ldist" { target ilp32 } } }
! { dg-final { scan-tree-dump-times "distributed: split to 5 loops" 1 "ldist" { target lp64 } } }
! { dg-final { scan-tree-dump-times "distributed: split to 4 loops" 1 "ldist" } }
! { dg-final { cleanup-tree-dump "ldist" } }