This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
FDO patch -- make ic related vars TLS if target allows
- From: Xinliang David Li <davidxl at google dot com>
- To: GCC Patches <gcc-patches at gcc dot gnu dot org>
- Cc: Jan Hubicka <hubicka at ucw dot cz>
- Date: Wed, 27 Apr 2011 10:54:24 -0700
- Subject: FDO patch -- make ic related vars TLS if target allows
Hi please review the trivial patch below. It reduces race conditions
in value profiling. Another trivial change (to initialize
function_list struct) is also included.
Bootstrapped and regression tested on x86-64/linux.
Thanks,
David
2011-04-27 Xinliang David Li <davidxl@google.com>
* tree-profile.c (init_ic_make_global_vars): Set
tls attribute on ic vars.
* coverage.c (coverage_end_function): Initialize
function_list with zero.
Index: coverage.c
===================================================================
--- coverage.c (revision 172977)
+++ coverage.c (working copy)
@@ -608,7 +608,7 @@ coverage_end_function (void)
{
struct function_list *item;
- item = XNEW (struct function_list);
+ item = XCNEW (struct function_list);
*functions_tail = item;
functions_tail = &item->next;
Index: tree-profile.c
===================================================================
--- tree-profile.c (revision 172977)
+++ tree-profile.c (working copy)
@@ -44,6 +44,8 @@ along with GCC; see the file COPYING3.
#include "value-prof.h"
#include "cgraph.h"
#include "profile.h"
+#include "target.h"
+#include "output.h"
static GTY(()) tree gcov_type_node;
static GTY(()) tree gcov_type_tmp_var;
@@ -80,6 +82,10 @@ init_ic_make_global_vars (void)
TREE_PUBLIC (ic_void_ptr_var) = 0;
DECL_ARTIFICIAL (ic_void_ptr_var) = 1;
DECL_INITIAL (ic_void_ptr_var) = NULL;
+ if (targetm.have_tls)
+ DECL_TLS_MODEL (ic_void_ptr_var) =
+ decl_default_tls_model (ic_void_ptr_var);
+
varpool_finalize_decl (ic_void_ptr_var);
varpool_mark_needed_node (varpool_node (ic_void_ptr_var));
@@ -92,6 +98,10 @@ init_ic_make_global_vars (void)
TREE_PUBLIC (ic_gcov_type_ptr_var) = 0;
DECL_ARTIFICIAL (ic_gcov_type_ptr_var) = 1;
DECL_INITIAL (ic_gcov_type_ptr_var) = NULL;
+ if (targetm.have_tls)
+ DECL_TLS_MODEL (ic_gcov_type_ptr_var) =
+ decl_default_tls_model (ic_gcov_type_ptr_var);
+
varpool_finalize_decl (ic_gcov_type_ptr_var);
varpool_mark_needed_node (varpool_node (ic_gcov_type_ptr_var));
}