Skip to content

Commit

Permalink
* Makefile.in: Regenerate.
Browse files Browse the repository at this point in the history
	* Makefile.def (gcc host module) and soft dependency on lto-plugin
	and configure dependency on lto-plugin configure.
	(lto-plugin module): Remove dependency on GCC; add dependency on
	liniberty.

	* doc/invoke.texi: (-flto, -fuse-linker-plugin): Update defaults
	and no longer claim that gold is required for linker plugin.
	* configure: Regenerate.
	* gcc.c (PLUGIN_COND): New macro.
	(LINK_COMMAND_SPEC): Use it.
	(main): Default to plugin enabled with HAVE_LTO_PLUGIN is set.
	* config.in (HAVE_LTO_PLUGIN): New.
	* configure.ac (--with-lto-plugin): New parameter; autodetect
	HAVE_LTO_PLUGIN.


git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@168593 138bc75d-0d04-0410-961f-82ee72b054a4
  • Loading branch information
hubicka committed Jan 8, 2011
1 parent 050b8e2 commit de4d280
Show file tree
Hide file tree
Showing 9 changed files with 132 additions and 26 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
@@ -1,3 +1,11 @@
2011-01-07 Jan Hubicka <jh@suse.cz>

* Makefile.in: Regenerate.
* Makefile.def (gcc host module) and soft dependency on lto-plugin
and configure dependency on lto-plugin configure.
(lto-plugin module): Remove dependency on GCC; add dependency on
liniberty.

2011-01-07 William Schmidt <wschmidt@linux.vnet.ibm.com>

* MAINTAINERS (Write After Approval): Add myself.
Expand Down
4 changes: 3 additions & 1 deletion Makefile.def
Expand Up @@ -321,6 +321,7 @@ dependencies = { module=all-build-fixincludes; on=all-build-libiberty; };

// Host modules specific to gcc.
dependencies = { module=configure-gcc; on=configure-intl; };
dependencies = { module=configure-gcc; on=configure-lto-plugin; };
dependencies = { module=configure-gcc; on=all-binutils; };
dependencies = { module=configure-gcc; on=all-gas; };
dependencies = { module=configure-gcc; on=all-ld; };
Expand All @@ -344,6 +345,7 @@ dependencies = { module=all-gcc; on=all-libcpp; hard=true; };
dependencies = { module=all-gcc; on=all-libdecnumber; hard=true; };
dependencies = { module=all-gcc; on=all-libiberty; };
dependencies = { module=all-gcc; on=all-fixincludes; };
dependencies = { module=all-gcc; on=all-lto-plugin; };
dependencies = { module=info-gcc; on=all-build-libiberty; };
dependencies = { module=dvi-gcc; on=all-build-libiberty; };
dependencies = { module=pdf-gcc; on=all-build-libiberty; };
Expand All @@ -360,7 +362,7 @@ dependencies = { module=all-fixincludes; on=all-libiberty; };

dependencies = { module=all-gnattools; on=all-target-libada; };

dependencies = { module=all-lto-plugin; on=all-gcc; };
dependencies = { module=all-lto-plugin; on=all-libiberty; };

dependencies = { module=configure-mpfr; on=all-gmp; };
dependencies = { module=configure-mpc; on=all-mpfr; };
Expand Down
32 changes: 24 additions & 8 deletions Makefile.in
Expand Up @@ -60260,6 +60260,14 @@ configure-stage3-gcc: maybe-configure-stage3-intl
configure-stage4-gcc: maybe-configure-stage4-intl
configure-stageprofile-gcc: maybe-configure-stageprofile-intl
configure-stagefeedback-gcc: maybe-configure-stagefeedback-intl
configure-gcc: maybe-configure-lto-plugin

configure-stage1-gcc: maybe-configure-stage1-lto-plugin
configure-stage2-gcc: maybe-configure-stage2-lto-plugin
configure-stage3-gcc: maybe-configure-stage3-lto-plugin
configure-stage4-gcc: maybe-configure-stage4-lto-plugin
configure-stageprofile-gcc: maybe-configure-stageprofile-lto-plugin
configure-stagefeedback-gcc: maybe-configure-stagefeedback-lto-plugin
configure-gcc: maybe-all-binutils

configure-stage1-gcc: maybe-all-stage1-binutils
Expand Down Expand Up @@ -60437,6 +60445,14 @@ all-stage4-gcc: maybe-all-stage4-libiberty
all-stageprofile-gcc: maybe-all-stageprofile-libiberty
all-stagefeedback-gcc: maybe-all-stagefeedback-libiberty
all-gcc: maybe-all-fixincludes
all-gcc: maybe-all-lto-plugin

all-stage1-gcc: maybe-all-stage1-lto-plugin
all-stage2-gcc: maybe-all-stage2-lto-plugin
all-stage3-gcc: maybe-all-stage3-lto-plugin
all-stage4-gcc: maybe-all-stage4-lto-plugin
all-stageprofile-gcc: maybe-all-stageprofile-lto-plugin
all-stagefeedback-gcc: maybe-all-stagefeedback-lto-plugin
info-gcc: maybe-all-build-libiberty

info-stage1-gcc: maybe-all-build-libiberty
Expand Down Expand Up @@ -60505,14 +60521,14 @@ all-stageprofile-libcpp: maybe-all-stageprofile-intl
all-stagefeedback-libcpp: maybe-all-stagefeedback-intl
all-fixincludes: maybe-all-libiberty
all-gnattools: maybe-all-target-libada
all-lto-plugin: maybe-all-gcc

all-stage1-lto-plugin: maybe-all-stage1-gcc
all-stage2-lto-plugin: maybe-all-stage2-gcc
all-stage3-lto-plugin: maybe-all-stage3-gcc
all-stage4-lto-plugin: maybe-all-stage4-gcc
all-stageprofile-lto-plugin: maybe-all-stageprofile-gcc
all-stagefeedback-lto-plugin: maybe-all-stagefeedback-gcc
all-lto-plugin: maybe-all-libiberty

all-stage1-lto-plugin: maybe-all-stage1-libiberty
all-stage2-lto-plugin: maybe-all-stage2-libiberty
all-stage3-lto-plugin: maybe-all-stage3-libiberty
all-stage4-lto-plugin: maybe-all-stage4-libiberty
all-stageprofile-lto-plugin: maybe-all-stageprofile-libiberty
all-stagefeedback-lto-plugin: maybe-all-stagefeedback-libiberty
configure-mpfr: maybe-all-gmp

configure-stage1-mpfr: maybe-all-stage1-gmp
Expand Down
12 changes: 12 additions & 0 deletions gcc/ChangeLog
@@ -1,3 +1,15 @@
2011-01-07 Jan Hubicka <jh@suse.cz>

* doc/invoke.texi: (-flto, -fuse-linker-plugin): Update defaults
and no longer claim that gold is required for linker plugin.
* configure: Regenerate.
* gcc.c (PLUGIN_COND): New macro.
(LINK_COMMAND_SPEC): Use it.
(main): Default to plugin enabled with HAVE_LTO_PLUGIN is set.
* config.in (HAVE_LTO_PLUGIN): New.
* configure.ac (--with-lto-plugin): New parameter; autodetect
HAVE_LTO_PLUGIN.

2011-01-07 Jan Hubicka <jh@suse.cz>

PR tree-optimization/46367
Expand Down
4 changes: 4 additions & 0 deletions gcc/config.in
Expand Up @@ -1142,6 +1142,10 @@
#undef HAVE_LDFCN_H
#endif

/* Define if your linker supports plugin. */
#ifndef USED_FOR_TARGET
#undef HAVE_LTO_PLUGIN
#endif

/* Define if your linker supports --as-needed and --no-as-needed options. */
#ifndef USED_FOR_TARGET
Expand Down
23 changes: 23 additions & 0 deletions gcc/configure
Expand Up @@ -23093,6 +23093,29 @@ $as_echo "#define HAVE_LD_DEMANGLE 1" >>confdefs.h
$as_echo "$gcc_cv_ld_demangle" >&6; }
fi

if test -f ../lto-plugin/Makefile ; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking linker plugin support" >&5
$as_echo_n "checking linker plugin support... " >&6; }
gcc_cv_lto_plugin=no
if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET=" = x"$gcc_cv_ld"; then
if test x"$ld_is_gold" = xyes; then
gcc_cv_lto_plugin=yes
elif test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2; then \
gcc_cv_lto_plugin=yes
fi
# Check if the linker supports --plugin-opt option
elif $ORIGINAL_PLUGIN_LD_FOR_TARGET --help 2>/dev/null | grep plugin-opt > /dev/null; then
gcc_cv_lto_plugin=yes
fi
if test x"$gcc_cv_lto_plugin" = xyes; then

$as_echo "#define HAVE_LTO_PLUGIN 1" >>confdefs.h

fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gcc_cv_lto_plugin" >&5
$as_echo "$gcc_cv_lto_plugin" >&6; }
fi

case "$target" in
# All TARGET_ABI_OSF targets.
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
Expand Down
20 changes: 20 additions & 0 deletions gcc/configure.ac
Expand Up @@ -3149,6 +3149,26 @@ if test x"$demangler_in_ld" = xyes; then
AC_MSG_RESULT($gcc_cv_ld_demangle)
fi

AC_MSG_CHECKING(linker plugin support)
gcc_cv_lto_plugin=no
if test -f ../lto-plugin/Makefile ; then
if test $in_tree_ld = yes -a x"$ORIGINAL_PLUGIN_LD_FOR_TARGET=" = x"$gcc_cv_ld"; then
if test x"$ld_is_gold" = xyes; then
gcc_cv_lto_plugin=yes
elif test "$gcc_cv_gld_major_version" -eq 2 -a "$gcc_cv_gld_minor_version" -ge 21 -o "$gcc_cv_gld_major_version" -gt 2; then \
gcc_cv_lto_plugin=yes
fi
# Check if the linker supports --plugin-opt option
elif $ORIGINAL_PLUGIN_LD_FOR_TARGET --help 2>/dev/null | grep plugin-opt > /dev/null; then
gcc_cv_lto_plugin=yes
fi
fi
if test x"$gcc_cv_lto_plugin" = xyes; then
AC_DEFINE(HAVE_LTO_PLUGIN, 1,
[Define if your linker supports plugin.])
fi
AC_MSG_RESULT($gcc_cv_lto_plugin)

case "$target" in
# All TARGET_ABI_OSF targets.
alpha*-*-osf* | alpha*-*-linux* | alpha*-*-*bsd*)
Expand Down
37 changes: 21 additions & 16 deletions gcc/doc/invoke.texi
Expand Up @@ -7587,23 +7587,21 @@ types in separate translation units to be linked together (undefined
behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be
issued. The behavior is still undefined at runtime.

If object files containing GIMPLE bytecode are stored in a library
archive, say @file{libfoo.a}, it is possible to extract and use them
in an LTO link if you are using @command{gold} as the linker (which,
in turn requires GCC to be configured with @option{--enable-gold}).
To enable this feature, use the flag @option{-fuse-linker-plugin} at
link-time:
If object files containing GIMPLE bytecode are stored in a library archive, say
@file{libfoo.a}, it is possible to extract and use them in an LTO link if you
are using a linker with linker plugin support. To enable this feature, use
the flag @option{-fuse-linker-plugin} at link-time:

@smallexample
gcc -o myprog -O2 -flto -fuse-linker-plugin a.o b.o -lfoo
@end smallexample

With the linker plugin enabled, @command{gold} will extract the needed
With the linker plugin enabled, the linker will extract the needed
GIMPLE files from @file{libfoo.a} and pass them on to the running GCC
to make them part of the aggregated GIMPLE image to be optimized.

If you are not using @command{gold} and/or do not specify
@option{-fuse-linker-plugin} then the objects inside @file{libfoo.a}
If you are not using a linker with linker plugin support and/or do not
enable linker plugin then the objects inside @file{libfoo.a}
will be extracted and linked as usual, but they will not participate
in the LTO optimization process.

Expand Down Expand Up @@ -7667,13 +7665,20 @@ files in LTO mode (via @option{-flto}).
Disabled by default.

@item -fuse-linker-plugin
Enables the extraction of objects with GIMPLE bytecode information
from library archives. This option relies on features available only
in @command{gold}, so to use this you must configure GCC with
@option{--enable-gold}. See @option{-flto} for a description on the
effect of this flag and how to use it.

Disabled by default.
Enables the use of linker plugin during link time optimization. This option
relies on the linker plugin support in linker that is available in @code{gold}
or in GNU ld 2.21.51 or newer..

This option enables the extraction of object files with GIMPLE bytecode out of
library archives. This improves the quality of optimization by exposing more
code the the link time optimizer. This information specify what symbols
can be accessed externally (by non-LTO object or during dynamic linking).
Resulting code quality improvements on binaries (and shared libaries that do
use hidden visibility) is similar to @code{-fwhole-program}. See
@option{-flto} for a description on the effect of this flag and how to use it.

Enabled by default when LTO support in GCC is enabled and GCC was compiled
with linker supporting plugins (GNU ld or @code{gold}).

@item -fcprop-registers
@opindex fcprop-registers
Expand Down
18 changes: 17 additions & 1 deletion gcc/gcc.c
Expand Up @@ -621,6 +621,13 @@ proper position among the other output files. */
# endif
#endif

/* Conditional to test whether plugin is used or not. */
#ifdef HAVE_LTO_PLUGIN
#define PLUGIN_COND "!fno-use-linker-plugin"
#else
#define PLUGIN_COND "fuse-linker-plugin"
#endif


/* -u* was put back because both BSD and SysV seem to support it. */
/* %{static:} simply prevents an error message if the target machine
Expand All @@ -634,7 +641,7 @@ proper position among the other output files. */
#define LINK_COMMAND_SPEC "\
%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{!S:\
%(linker) \
%{fuse-linker-plugin: \
%{"PLUGIN_COND": \
-plugin %(linker_plugin_file) \
-plugin-opt=%(lto_wrapper) \
-plugin-opt=-fresolution=%u.res \
Expand Down Expand Up @@ -6779,7 +6786,11 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
if (num_linker_inputs > 0 && !seen_error () && print_subprocess_help < 2)
{
int tmp = execution_count;
#ifdef HAVE_LTO_PLUGIN
const char *fno_use_linker_plugin = "fno-use-linker-plugin";
#else
const char *fuse_linker_plugin = "fuse-linker-plugin";
#endif

/* We'll use ld if we can't find collect2. */
if (! strcmp (linker_name_spec, "collect2"))
Expand All @@ -6789,8 +6800,13 @@ warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n\n"
linker_name_spec = "ld";
}

#ifdef HAVE_LTO_PLUGIN
if (!switch_matches (fno_use_linker_plugin,
fno_use_linker_plugin + strlen (fno_use_linker_plugin), 0))
#else
if (switch_matches (fuse_linker_plugin,
fuse_linker_plugin + strlen (fuse_linker_plugin), 0))
#endif
{
linker_plugin_file_spec = find_a_file (&exec_prefixes,
LTOPLUGINSONAME, R_OK,
Expand Down

0 comments on commit de4d280

Please sign in to comment.