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
This commit is contained in:
parent
b78fd1642a
commit
21d01365ab
|
@ -1,3 +1,11 @@
|
||||||
|
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
|
||||||
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}.
|
||||||
-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
|
||||||
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
|
||||||
|
|
|
@ -1,3 +1,9 @@
|
||||||
|
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)
|
||||||
*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)
|
||||||
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)
|
||||||
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)
|
||||||
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
|
||||||
|
|
Loading…
Reference in New Issue