Initial commit for Europar 2021 GCC version
This was the version of GCC used in the Europar 2021 paper with regard to GCC paralelism. Future commits are possible, so look in the paper the commit hash of the version was used.
This commit is contained in:
parent
a926878ddb
commit
e2da2f7205
Binary file not shown.
Binary file not shown.
|
@ -2794,10 +2794,22 @@ maybe_compile_in_parallel (void)
|
||||||
bool jobserver = false;
|
bool jobserver = false;
|
||||||
bool job_auto = false;
|
bool job_auto = false;
|
||||||
int num_jobs = -1;
|
int num_jobs = -1;
|
||||||
|
unsigned long long insns = 0;
|
||||||
|
cgraph_node *cnode;
|
||||||
|
|
||||||
if (!flag_parallel_jobs || !split_outputs)
|
if (!flag_parallel_jobs || !split_outputs)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
FOR_EACH_FUNCTION_WITH_GIMPLE_BODY (cnode)
|
||||||
|
{
|
||||||
|
ipa_size_summary *ss = ipa_size_summaries->get (cnode);
|
||||||
|
if (!cnode->inlined_to && ss)
|
||||||
|
insns += ss->size;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (insns < (unsigned long long) param_min_partition_size)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!strcmp (flag_parallel_jobs, "auto"))
|
if (!strcmp (flag_parallel_jobs, "auto"))
|
||||||
{
|
{
|
||||||
jobserver = jobserver_initialize ();
|
jobserver = jobserver_initialize ();
|
||||||
|
|
|
@ -3405,14 +3405,7 @@ append_split_outputs (extra_arg_storer *storer,
|
||||||
argv[argc++] = extra_argument;
|
argv[argc++] = extra_argument;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (have_c)
|
|
||||||
{
|
|
||||||
argv[argc++] = "-fPIE";
|
|
||||||
argv[argc++] = "-fPIC";
|
|
||||||
}
|
|
||||||
|
|
||||||
argv[argc] = NULL;
|
argv[argc] = NULL;
|
||||||
|
|
||||||
commands[0].argv = argv;
|
commands[0].argv = argv;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3977,7 +3970,7 @@ execute (void)
|
||||||
/* FIXME: Interact with GNU Jobserver if necessary. */
|
/* FIXME: Interact with GNU Jobserver if necessary. */
|
||||||
|
|
||||||
commands_batch = commands;
|
commands_batch = commands;
|
||||||
n = flag_parallel_jobs? 1: n_commands;
|
n = n_commands;
|
||||||
|
|
||||||
for (int i = 0; i < n_commands; i += n)
|
for (int i = 0; i < n_commands; i += n)
|
||||||
{
|
{
|
||||||
|
|
|
@ -1909,8 +1909,12 @@ pass_split_functions::gate (function *)
|
||||||
{
|
{
|
||||||
/* When doing profile feedback, we want to execute the pass after profiling
|
/* When doing profile feedback, we want to execute the pass after profiling
|
||||||
is read. So disable one in early optimization. */
|
is read. So disable one in early optimization. */
|
||||||
return (flag_partial_inlining
|
|
||||||
&& !profile_arc_flag && !flag_branch_probabilities);
|
/* Disabled due to an issue regarding how the partitioner applier
|
||||||
|
handle clones generated by this pass. */
|
||||||
|
/*return (flag_partial_inlining
|
||||||
|
&& !profile_arc_flag && !flag_branch_probabilities); */
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // anon namespace
|
} // anon namespace
|
||||||
|
@ -1968,8 +1972,13 @@ pass_feedback_split_functions::gate (function *)
|
||||||
{
|
{
|
||||||
/* We don't need to split when profiling at all, we are producing
|
/* We don't need to split when profiling at all, we are producing
|
||||||
lousy code anyway. */
|
lousy code anyway. */
|
||||||
return (flag_partial_inlining
|
|
||||||
&& flag_branch_probabilities);
|
/* Disabled due to an issue regarding how the partitioner applier
|
||||||
|
handle clones generated by this pass. */
|
||||||
|
/* return (flag_partial_inlining
|
||||||
|
&& flag_branch_probabilities); */
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // anon namespace
|
} // anon namespace
|
||||||
|
|
Loading…
Reference in New Issue