Commit 29be3835 by Martin Jambor Committed by Martin Jambor

re PR tree-optimization/43905 (duplicate __PRETTY_FUNCTION__ symbol for…

re PR tree-optimization/43905 (duplicate __PRETTY_FUNCTION__ symbol for functions differing in const-ness)

2010-06-16  Martin Jambor  <mjambor@suse.cz>

	PR tree-optimization/43905
	* tree-sra.c: Include tree-inline.h.
	(create_abstract_origin): Removed.
	(modify_function): Version the call graph node instead of creating
	abstract origins and dealing with same_body aliases.
	* tree-sra.c (ipa_sra_preliminary_function_checks): Check whether the
	function is versionable.
	* Makefile.in (tree-sra.o): Add TREE_INLINE_H to dependencies.

	* testsuite/g++.dg/torture/pr43905.C: New test.

From-SVN: r160832
parent 584bd1cf
2010-06-16 Martin Jambor <mjambor@suse.cz>
PR tree-optimization/43905
* tree-sra.c: Include tree-inline.h.
(create_abstract_origin): Removed.
(modify_function): Version the call graph node instead of creating
abstract origins and dealing with same_body aliases.
* tree-sra.c (ipa_sra_preliminary_function_checks): Check whether the
function is versionable.
* Makefile.in (tree-sra.o): Add TREE_INLINE_H to dependencies.
2010-06-16 Maxim Kuvyrkov <maxim@codesourcery.com>
* config/mips/linux64.h (BIONIC_DYNAMIC_LINKERN32): Define.
......
......@@ -3118,7 +3118,8 @@ tree-ssa-ccp.o : tree-ssa-ccp.c $(TREE_FLOW_H) $(CONFIG_H) \
tree-sra.o : tree-sra.c $(CONFIG_H) $(SYSTEM_H) coretypes.h alloc-pool.h \
$(TM_H) $(TREE_H) $(GIMPLE_H) $(CGRAPH_H) $(TREE_FLOW_H) $(IPA_PROP_H) \
$(DIAGNOSTIC_H) statistics.h $(TREE_DUMP_H) $(TIMEVAR_H) $(PARAMS_H) \
$(TARGET_H) $(FLAGS_H) $(EXPR_H) tree-pretty-print.h $(DBGCNT_H)
$(TARGET_H) $(FLAGS_H) $(EXPR_H) tree-pretty-print.h $(DBGCNT_H) \
$(TREE_INLINE_H)
tree-switch-conversion.o : tree-switch-conversion.c $(CONFIG_H) $(SYSTEM_H) \
$(TREE_H) $(TM_P_H) $(TREE_FLOW_H) $(DIAGNOSTIC_H) $(TREE_INLINE_H) \
$(TIMEVAR_H) $(TM_H) coretypes.h $(TREE_DUMP_H) $(GIMPLE_H) \
......
2010-06-16 Martin Jambor <mjambor@suse.cz>
* g++.dg/torture/pr43905.C: New test.
2010-06-16 Mikael Pettersson <mikpe@it.uu.se>
PR testsuite/44538
......
extern void sf ( __const char *);
struct Matrix{
int operator[](int n){
sf ( __PRETTY_FUNCTION__);
}
int operator[](int n)const{
sf ( __PRETTY_FUNCTION__);
}
};
void calcmy(Matrix const &b, Matrix &c, int k){
b[k];
c[k];
}
......@@ -89,6 +89,7 @@ along with GCC; see the file COPYING3. If not see
#include "target.h"
#include "flags.h"
#include "dbgcnt.h"
#include "tree-inline.h"
/* Enumeration of all aggregate reductions we can do. */
enum sra_mode { SRA_MODE_EARLY_IPA, /* early call regularization */
......@@ -4225,43 +4226,38 @@ convert_callers (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments)
return;
}
/* Create an abstract origin declaration for OLD_DECL and make it an abstract
origin of the provided decl so that there are preserved parameters for debug
information. */
static void
create_abstract_origin (tree old_decl)
{
if (!DECL_ABSTRACT_ORIGIN (old_decl))
{
tree new_decl = copy_node (old_decl);
DECL_ABSTRACT (new_decl) = 1;
SET_DECL_ASSEMBLER_NAME (new_decl, NULL_TREE);
SET_DECL_RTL (new_decl, NULL);
DECL_STRUCT_FUNCTION (new_decl) = NULL;
DECL_ARTIFICIAL (old_decl) = 1;
DECL_ABSTRACT_ORIGIN (old_decl) = new_decl;
}
}
/* Perform all the modification required in IPA-SRA for NODE to have parameters
as given in ADJUSTMENTS. */
static void
modify_function (struct cgraph_node *node, ipa_parm_adjustment_vec adjustments)
{
struct cgraph_node *alias;
for (alias = node->same_body; alias; alias = alias->next)
ipa_modify_formal_parameters (alias->decl, adjustments, "ISRA");
/* current_function_decl must be handled last, after same_body aliases,
as following functions will use what it computed. */
create_abstract_origin (current_function_decl);
struct cgraph_node *new_node;
struct cgraph_edge *cs;
VEC (cgraph_edge_p, heap) * redirect_callers;
int node_callers;
node_callers = 0;
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
node_callers++;
redirect_callers = VEC_alloc (cgraph_edge_p, heap, node_callers);
for (cs = node->callers; cs != NULL; cs = cs->next_caller)
VEC_quick_push (cgraph_edge_p, redirect_callers, cs);
rebuild_cgraph_edges ();
pop_cfun ();
current_function_decl = NULL_TREE;
new_node = cgraph_function_versioning (node, redirect_callers, NULL, NULL,
NULL, NULL, "isra");
current_function_decl = new_node->decl;
push_cfun (DECL_STRUCT_FUNCTION (new_node->decl));
ipa_modify_formal_parameters (current_function_decl, adjustments, "ISRA");
ipa_sra_modify_function_body (adjustments);
sra_ipa_reset_debug_stmts (adjustments);
convert_callers (node, adjustments);
cgraph_make_node_local (node);
convert_callers (new_node, adjustments);
cgraph_make_node_local (new_node);
return;
}
......@@ -4279,6 +4275,13 @@ ipa_sra_preliminary_function_checks (struct cgraph_node *node)
return false;
}
if (!tree_versionable_function_p (node->decl))
{
if (dump_file)
fprintf (dump_file, "Function not local to this compilation unit.\n");
return false;
}
if (DECL_VIRTUAL_P (current_function_decl))
{
if (dump_file)
......
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