Commit 21d01365 by Alexandre Oliva Committed by Alexandre Oliva

common.opt (ftree-coalesce-inlined-vars): New.

gcc/ChangeLog:
* common.opt (ftree-coalesce-inlined-vars): New.
(ftree-coalesce-vars): New.
* doc/invoke.texi: Document them.
* tree-ssa-copyrename.c (copy_rename_partition_coalesce):
Implement them.
gcc/testsuite/ChangeLog:
* g++.dg/tree-ssa/ivopts-2.C: Adjust for coalescing.
* gcc.dg/tree-ssa/forwprop-11.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-1.c: Likewise.

From-SVN: r188526
parent b78fd164
2012-06-13 Alexandre Oliva <aoliva@redhat.com>
* common.opt (ftree-coalesce-inlined-vars): New.
(ftree-coalesce-vars): New.
* doc/invoke.texi: Document them.
* tree-ssa-copyrename.c (copy_rename_partition_coalesce):
Implement them.
2012-06-13 Richard Sandiford <rdsandiford@googlemail.com> 2012-06-13 Richard Sandiford <rdsandiford@googlemail.com>
* read-rtl.c (mapping): Remove index field. Add current_value field. * read-rtl.c (mapping): Remove index field. Add current_value field.
......
...@@ -1944,6 +1944,14 @@ ftree-ch ...@@ -1944,6 +1944,14 @@ ftree-ch
Common Report Var(flag_tree_ch) Optimization Common Report Var(flag_tree_ch) Optimization
Enable loop header copying on trees Enable loop header copying on trees
ftree-coalesce-inlined-vars
Common Report Var(flag_ssa_coalesce_vars,1) Init(2) RejectNegative Optimization
Enable coalescing of copy-related user variables that are inlined
ftree-coalesce-vars
Common Report Var(flag_ssa_coalesce_vars,2) Optimization
Enable coalescing of all copy-related user variables
ftree-copyrename ftree-copyrename
Common Report Var(flag_tree_copyrename) Optimization Common Report Var(flag_tree_copyrename) Optimization
Replace SSA temporaries with better names in copies Replace SSA temporaries with better names in copies
......
...@@ -405,7 +405,8 @@ Objective-C and Objective-C++ Dialects}. ...@@ -405,7 +405,8 @@ Objective-C and Objective-C++ Dialects}.
-fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector @gol -fsplit-ivs-in-unroller -fsplit-wide-types -fstack-protector @gol
-fstack-protector-all -fstrict-aliasing -fstrict-overflow @gol -fstack-protector-all -fstrict-aliasing -fstrict-overflow @gol
-fthread-jumps -ftracer -ftree-bit-ccp @gol -fthread-jumps -ftracer -ftree-bit-ccp @gol
-ftree-builtin-call-dce -ftree-ccp -ftree-ch -ftree-copy-prop @gol -ftree-builtin-call-dce -ftree-ccp -ftree-ch @gol
-ftree-coalesce-inline-vars -ftree-coalesce-vars -ftree-copy-prop @gol
-ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol -ftree-copyrename -ftree-dce -ftree-dominator-opts -ftree-dse @gol
-ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol -ftree-forwprop -ftree-fre -ftree-loop-if-convert @gol
-ftree-loop-if-convert-stores -ftree-loop-im @gol -ftree-loop-if-convert-stores -ftree-loop-im @gol
...@@ -7490,6 +7491,24 @@ temporaries to other variables at copy locations, usually resulting in ...@@ -7490,6 +7491,24 @@ temporaries to other variables at copy locations, usually resulting in
variable names which more closely resemble the original variables. This flag variable names which more closely resemble the original variables. This flag
is enabled by default at @option{-O} and higher. is enabled by default at @option{-O} and higher.
@item -ftree-coalesce-inlined-vars
Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
combine small user-defined variables too, but only if they were inlined
from other functions. It is a more limited form of
@option{-ftree-coalesce-vars}. This may harm debug information of such
inlined variables, but it will keep variables of the inlined-into
function apart from each other, such that they are more likely to
contain the expected values in a debugging session. This was the
default in GCC versions older than 4.7.
@item -ftree-coalesce-vars
Tell the copyrename pass (see @option{-ftree-copyrename}) to attempt to
combine small user-defined variables too, instead of just compiler
temporaries. This may severely limit the ability to debug an optimized
program compiled with @option{-fno-var-tracking-assignments}. In the
negated form, this flag prevents SSA coalescing of user variables,
including inlined ones. This option is enabled by default.
@item -ftree-ter @item -ftree-ter
@opindex ftree-ter @opindex ftree-ter
Perform temporary expression replacement during the SSA->normal phase. Single Perform temporary expression replacement during the SSA->normal phase. Single
......
2012-06-13 Alexandre Oliva <aoliva@redhat.com>
* g++.dg/tree-ssa/ivopts-2.C: Adjust for coalescing.
* gcc.dg/tree-ssa/forwprop-11.c: Likewise.
* gcc.dg/tree-ssa/ssa-fre-1.c: Likewise.
2012-06-13 Tobias Burnus <burnus@net-b.de> 2012-06-13 Tobias Burnus <burnus@net-b.de>
PR fortran/53643 PR fortran/53643
......
...@@ -7,5 +7,5 @@ void test (int *b, int *e, int stride) ...@@ -7,5 +7,5 @@ void test (int *b, int *e, int stride)
*p = 1; *p = 1;
} }
/* { dg-final { scan-tree-dump-times "PHI <p" 1 "ivopts"} } */ /* { dg-final { scan-tree-dump-times "PHI <\[pb\]" 1 "ivopts"} } */
/* { dg-final { cleanup-tree-dump "ivopts" } } */ /* { dg-final { cleanup-tree-dump "ivopts" } } */
...@@ -16,5 +16,5 @@ int g(int *p, int n) ...@@ -16,5 +16,5 @@ int g(int *p, int n)
return q[-1]; return q[-1];
} }
/* { dg-final { scan-tree-dump-times "= MEM\\\[\\\(int \\\*\\\)a_.. \\\+ 4B\\\];" 2 "forwprop1" } } */ /* { dg-final { scan-tree-dump-times "= MEM\\\[\\\(int \\\*\\\)\[ap\]_.. \\\+ 4B\\\];" 2 "forwprop1" } } */
/* { dg-final { cleanup-tree-dump "forwprop1" } } */ /* { dg-final { cleanup-tree-dump "forwprop1" } } */
...@@ -11,5 +11,5 @@ int f(int *a) ...@@ -11,5 +11,5 @@ int f(int *a)
return *c + t; return *c + t;
} }
/* { dg-final { scan-tree-dump "Replaced \\\*c_\[^\n\].*with t_" "fre1" } } */ /* { dg-final { scan-tree-dump "Replaced \\\*\[ac\]_\[^\n\].*with t_" "fre1" } } */
/* { dg-final { cleanup-tree-dump "fre1" } } */ /* { dg-final { cleanup-tree-dump "fre1" } } */
...@@ -194,20 +194,21 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug) ...@@ -194,20 +194,21 @@ copy_rename_partition_coalesce (var_map map, tree var1, tree var2, FILE *debug)
ign1 = TREE_CODE (root1) == VAR_DECL && DECL_IGNORED_P (root1); ign1 = TREE_CODE (root1) == VAR_DECL && DECL_IGNORED_P (root1);
ign2 = TREE_CODE (root2) == VAR_DECL && DECL_IGNORED_P (root2); ign2 = TREE_CODE (root2) == VAR_DECL && DECL_IGNORED_P (root2);
/* Never attempt to coalesce 2 user variables unless one is an inline /* Refrain from coalescing user variables, if requested. */
variable. */
if (!ign1 && !ign2) if (!ign1 && !ign2)
{ {
if (DECL_FROM_INLINE (root2)) if (flag_ssa_coalesce_vars && DECL_FROM_INLINE (root2))
ign2 = true; ign2 = true;
else if (DECL_FROM_INLINE (root1)) else if (flag_ssa_coalesce_vars && DECL_FROM_INLINE (root1))
ign1 = true; ign1 = true;
else else if (flag_ssa_coalesce_vars != 2)
{ {
if (debug) if (debug)
fprintf (debug, " : 2 different USER vars. No coalesce.\n"); fprintf (debug, " : 2 different USER vars. No coalesce.\n");
return false; return false;
} }
else
ign2 = true;
} }
/* If both values have default defs, we can't coalesce. If only one has a /* If both values have default defs, we can't coalesce. If only one has a
......
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