This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

-fwhopr and -flto options reorg


Hi,
this patch does the change discussed on gcc summit converting -fwhopr to -flto.
-flto=n and -flto=jobserv syntax is supported.
-flto can be done by -flto-partition=none -flto.

I did not made other changes, like enabling linker plugin by default or autodetecting
jobserv as this is boring and large enough already.

Bootstrapped/regtested x86_64-linux, OK?

Honza

	* doc/invoke.texi (-fwhopr): Merge into -flto section.
	(-flto-partition): Document none.
	* flags.h (flag_whopr): Declare.
	* gcc.c (LINK_COMMAND_SPEC): Remove -fwhopr.
	* toplev.c (flag_whopr): Define.
	* lto-wrapper.c: Update comment.
	(run_gcc): Update LTO option parsing.
	* opts.c (finish_options): -flto really enables flag_whopr;
	add support -flto-partition=none
	(common_handle_option): Remove fwhopr.
	* common.opt: Turn fwhopr into flto.
	* collect2.c (main): Update option handling.
	
	* gcc.dg/20081223-1.c: Update LTO options.
	* gcc.dg/lto/20090206-1_0.c: Update LTO options.
	* gcc.dg/lto/20081118_0.c: Update LTO options.
	* gcc.dg/lto/ipareference_0.c: Update LTO options.
	* gcc.dg/lto/20100423-2_0.c: Update LTO options.
	* gcc.dg/lto/20081201-1_0.c: Update LTO options.
	* gcc.dg/lto/ipacp_0.c: Update LTO options.
	* gcc.dg/lto/20090116_0.c: Update LTO options.
	* gcc.dg/lto/20091015-1_0.c: Update LTO options.
	* gcc.dg/lto/20090126-2_0.c: Update LTO options.
	* gcc.dg/lto/20081202-2_0.c: Update LTO options.
	* gcc.dg/lto/20081204-1_0.c: Update LTO options.
	* gcc.dg/lto/const-uniq_0.c: Update LTO options.
	* gcc.dg/lto/20081224_0.c: Update LTO options.
	* gcc.dg/lto/20090219_0.c: Update LTO options.
	* gcc.dg/lto/ipareference2_0.c: Update LTO options.
	* gcc.dg/lto/20090206-2_0.c: Update LTO options.
	* gcc.dg/lto/20081115_0.c: Update LTO options.
	* gcc.dg/lto/20081201-2_0.c: Update LTO options.
	* gcc.dg/lto/20081120-2_0.c: Update LTO options.
	* gcc.dg/lto/materialize-1_0.c: Update LTO options.
	* gcc.dg/lto/20090126-1_0.c: Update LTO options.
	* gcc.dg/lto/20081202-1_0.c: Update LTO options.
	* gcc.dg/lto/noreturn-1_0.c: Update LTO options.
	* g++.dg/20090107-1.C: Update LTO options.
	* g++.dg/lto/pr45679-2_0.C: Update LTO options.
	* g++.dg/lto/20081123_0.C: Update LTO options.
	* g++.dg/lto/20090313_0.C: Update LTO options.
	* g++.dg/lto/20081125_0.C: Update LTO options.
	* g++.dg/lto/20081109-1_0.C: Update LTO options.
	* g++.dg/lto/20081219_0.C: Update LTO options.
	* g++.dg/lto/20100724-1_0.C: Update LTO options.
	* g++.dg/lto/20081204-1_0.C: Update LTO options.
	* g++.dg/lto/20090303_0.C: Update LTO options.
	* g++.dg/lto/20100723-1_0.C: Update LTO options.
	* g++.dg/lto/pr45679-1_0.C: Update LTO options.
	* g++.dg/lto/20090128_0.C: Update LTO options.
	* g++.dg/lto/20081204-2_0.C: Update LTO options.
	* g++.dg/lto/20090302_0.C: Update LTO options.
	* g++.dg/lto/20081119-1_0.C: Update LTO options.
	* g++.dg/lto/20081118_0.C: Update LTO options.
	* g++.dg/20090121-1.C: Update LTO options.
	* objc.dg/lto/lto.exp: Update LTO options.
	* lib/lto.exp: Update LTO options.
	* lib/gcc-dg.exp: Update LTO options.
	* lib/c-torture.exp: Update LTO options.
	* obj-c++.dg/lto/lto.exp: Update LTO options.
Index: doc/invoke.texi
===================================================================
*** doc/invoke.texi	(revision 166582)
--- doc/invoke.texi	(working copy)
*************** and those merged by attribute @code{exte
*** 7429,7442 ****
  and in effect are optimized more aggressively by interprocedural optimizers. If @command{gold} is used as the linker plugin, @code{externally_visible} attributes are automatically added to functions (not variable yet due to a current @command{gold} issue) that are accessed outside of LTO objects according to resolution file produced by @command{gold}.  For other linkers that cannot generate resolution file, explicit @code{externally_visible} attributes are still necessary.
  While this option is equivalent to proper use of the @code{static} keyword for
  programs consisting of a single file, in combination with option
! @option{-flto} or @option{-fwhopr} this flag can be used to
  compile many smaller scale programs since the functions and variables become
  local for the whole combined compilation unit, not for the single source file
  itself.
  
  This option implies @option{-fwhole-file} for Fortran programs.
  
! @item -flto
  @opindex flto
  This option runs the standard link-time optimizer.  When invoked
  with source code, it generates GIMPLE (one of GCC's internal
--- 7429,7442 ----
  and in effect are optimized more aggressively by interprocedural optimizers. If @command{gold} is used as the linker plugin, @code{externally_visible} attributes are automatically added to functions (not variable yet due to a current @command{gold} issue) that are accessed outside of LTO objects according to resolution file produced by @command{gold}.  For other linkers that cannot generate resolution file, explicit @code{externally_visible} attributes are still necessary.
  While this option is equivalent to proper use of the @code{static} keyword for
  programs consisting of a single file, in combination with option
! @option{-flto} this flag can be used to
  compile many smaller scale programs since the functions and variables become
  local for the whole combined compilation unit, not for the single source file
  itself.
  
  This option implies @option{-fwhole-file} for Fortran programs.
  
! @item -flto[=@var{n}]
  @opindex flto
  This option runs the standard link-time optimizer.  When invoked
  with source code, it generates GIMPLE (one of GCC's internal
*************** If you are not using @command{gold} and/
*** 7575,7586 ****
  will be extracted and linked as usual, but they will not participate
  in the LTO optimization process.
  
! Link time optimizations do not require the presence of the whole
! program to operate.  If the program does not require any symbols to
! be exported, it is possible to combine @option{-flto} and
! @option{-fwhopr} with @option{-fwhole-program} to allow the
! interprocedural optimizers to use more aggressive assumptions which
! may lead to improved optimization opportunities.
  
  Regarding portability: the current implementation of LTO makes no
  attempt at generating bytecode that can be ported between different
--- 7575,7587 ----
  will be extracted and linked as usual, but they will not participate
  in the LTO optimization process.
  
! Link time optimizations do not require the presence of the whole program to
! operate.  If the program does not require any symbols to be exported, it is
! possible to combine @option{-flto} and with @option{-fwhole-program} to allow
! the interprocedural optimizers to use more aggressive assumptions which may
! lead to improved optimization opportunities. 
! Use of @option{-fwhole-program} is not needed when linker plugin is
! active (see @option{-fuse-linker-plugin}).
  
  Regarding portability: the current implementation of LTO makes no
  attempt at generating bytecode that can be ported between different
*************** strict version check, so bytecode files 
*** 7589,7611 ****
  GCC will not work with an older/newer version of GCC.
  
  Link time optimization does not play well with generating debugging
! information.  Combining @option{-flto} or @option{-fwhopr} with
  @option{-g} is experimental.
  
- This option is disabled by default.
- 
- @item -fwhopr[=@var{n}]
- @opindex fwhopr
- This option is identical in functionality to @option{-flto} but it
- differs in how the final link stage is executed.  Instead of loading
- all the function bodies in memory, the callgraph is analyzed and
- optimization decisions are made (whole program analysis or WPA). Once
- optimization decisions are made, the callgraph is partitioned and the
- different sections are compiled separately (local transformations or
- LTRANS)@.  This process allows optimizations on very large programs
- that otherwise would not fit in memory.  This option enables
- @option{-fwpa} and @option{-fltrans} automatically.
- 
  If you specify the optional @var{n} the link stage is executed in
  parallel using @var{n} parallel jobs by utilizing an installed
  @command{make} program.  The environment variable @env{MAKE} may be
--- 7590,7598 ----
  GCC will not work with an older/newer version of GCC.
  
  Link time optimization does not play well with generating debugging
! information.  Combining @option{-flto} with
  @option{-g} is experimental.
  
  If you specify the optional @var{n} the link stage is executed in
  parallel using @var{n} parallel jobs by utilizing an installed
  @command{make} program.  The environment variable @env{MAKE} may be
*************** The parent Makefile will need a @samp{+}
*** 7618,7631 ****
  for this to work. This will likely only work if @env{MAKE} is 
  GNU make.
  
! Disabled by default.
  
  @item -flto-partition=@var{alg}
  @opindex flto-partition
  Specify partitioning algorithm used by @option{-fwhopr} mode.  The value is
  either @code{1to1} to specify partitioning corresponding to source files
  or @code{balanced} to specify partitioning into, if possible, equally sized
! chunks.  The default value is @code{balanced}.
  
  @item -fwpa
  @opindex fwpa
--- 7605,7620 ----
  for this to work. This will likely only work if @env{MAKE} is 
  GNU make.
  
! This option is disabled by default.
  
  @item -flto-partition=@var{alg}
  @opindex flto-partition
  Specify partitioning algorithm used by @option{-fwhopr} mode.  The value is
  either @code{1to1} to specify partitioning corresponding to source files
  or @code{balanced} to specify partitioning into, if possible, equally sized
! chunks.  Specifying @code{none} as an algorithm disables partitioning
! and streaming completely.
! The default value is @code{balanced}.
  
  @item -fwpa
  @opindex fwpa
Index: flags.h
===================================================================
*** flags.h	(revision 166582)
--- flags.h	(working copy)
*************** extern int flag_debug_asm;
*** 101,106 ****
--- 101,109 ----
  extern int flag_next_runtime;
  
  extern int flag_dump_rtl_in_asm;
+  
+ /* WHOPR mode.  */
+ extern bool flag_whopr;
  
  /* Other basic status info about current function.  */
  
Index: gcc.c
===================================================================
*** gcc.c	(revision 166582)
--- gcc.c	(working copy)
*************** proper position among the other output f
*** 645,651 ****
  /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
     scripts which exist in user specified directories, or in standard
     directories.  */
! /* We pass any -flto and -fwhopr flags on to the linker, which is expected
     to understand them.  In practice, this means it had better be collect2.  */
  #ifndef LINK_COMMAND_SPEC
  #define LINK_COMMAND_SPEC "\
--- 645,651 ----
  /* We want %{T*} after %{L*} and %D so that it can be used to specify linker
     scripts which exist in user specified directories, or in standard
     directories.  */
! /* We pass any -flto flags on to the linker, which is expected
     to understand them.  In practice, this means it had better be collect2.  */
  #ifndef LINK_COMMAND_SPEC
  #define LINK_COMMAND_SPEC "\
*************** proper position among the other output f
*** 658,665 ****
      %{static|static-libgcc:-plugin-opt=-pass-through=%(lto_libgcc)}	\
      %{static:-plugin-opt=-pass-through=-lc}	\
      } \
!     %{flto:%<fcompare-debug*} %{fwhopr*:%<fcompare-debug*} \
!     %{flto} %{fwhopr*} %l " LINK_PIE_SPEC \
     "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
      %{s} %{t} %{u*} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
      %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
--- 658,665 ----
      %{static|static-libgcc:-plugin-opt=-pass-through=%(lto_libgcc)}	\
      %{static:-plugin-opt=-pass-through=-lc}	\
      } \
!     %{flto*:%<fcompare-debug*} \
!     %{flto*} %l " LINK_PIE_SPEC \
     "%X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r}\
      %{s} %{t} %{u*} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}\
      %{static:} %{L*} %(mfwrap) %(link_libgcc) %o\
Index: toplev.c
===================================================================
*** toplev.c	(revision 166582)
--- toplev.c	(working copy)
*************** int flag_debug_asm = 0;
*** 203,208 ****
--- 203,211 ----
  
  int flag_dump_rtl_in_asm = 0;
  
+ /* Is WHOPR mode enabled?  */
+ bool flag_whopr = 0;
+ 
  /* When non-NULL, indicates that whenever space is allocated on the
     stack, the resulting stack pointer must not pass this
     address---that is, for stacks that grow downward, the stack pointer
Index: testsuite/gcc.dg/20081223-1.c
===================================================================
*** testsuite/gcc.dg/20081223-1.c	(revision 166582)
--- testsuite/gcc.dg/20081223-1.c	(working copy)
***************
*** 1,5 ****
  /* { dg-do compile } */
! /* { dg-options "-fwhopr" { target lto } }  */
  
  typedef struct foo_ foo_t;
  foo_t bar;  /* { dg-error "storage size of 'bar' isn't known" }  */
--- 1,5 ----
  /* { dg-do compile } */
! /* { dg-options "-flto" { target lto } }  */
  
  typedef struct foo_ foo_t;
  foo_t bar;  /* { dg-error "storage size of 'bar' isn't known" }  */
Index: testsuite/gcc.dg/lto/20090206-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20090206-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20090206-1_0.c	(working copy)
***************
*** 1,6 ****
  /* { dg-lto-do link } */
  /* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */
! /* { dg-lto-options {{-fPIC -r -nostdlib -fwhopr -msse2}} } */
  /* { dg-require-effective-target sse2 } */
  /* { dg-suppress-ld-options {-fPIC -msse2} } */
  
--- 1,6 ----
  /* { dg-lto-do link } */
  /* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */
! /* { dg-lto-options {{-fPIC -r -nostdlib -flto -flto-partition=1to1 -msse2}} } */
  /* { dg-require-effective-target sse2 } */
  /* { dg-suppress-ld-options {-fPIC -msse2} } */
  
Index: testsuite/gcc.dg/lto/20081118_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081118_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081118_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{-O2 -DOPTIMIZE -fwhopr} {-O0 -fwhopr}} } */
  
  extern void abort (void);
  extern int f (void);
--- 1,4 ----
! /* { dg-lto-options {{-O2 -DOPTIMIZE -flto -flto-partition=1to1} {-O0 -flto -flto-partition=1to1}} } */
  
  extern void abort (void);
  extern int f (void);
Index: testsuite/gcc.dg/lto/ipareference_0.c
===================================================================
*** testsuite/gcc.dg/lto/ipareference_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/ipareference_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{ -O1 -fwhopr }} } */
  /* { dg-lto-do run } */
  
  /* Test that ipa-reference notice that get_val will not change since do_nothing does not
--- 1,4 ----
! /* { dg-lto-options {{ -O1 -flto -flto-partition=1to1 }} } */
  /* { dg-lto-do run } */
  
  /* Test that ipa-reference notice that get_val will not change since do_nothing does not
Index: testsuite/gcc.dg/lto/20100423-2_0.c
===================================================================
*** testsuite/gcc.dg/lto/20100423-2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20100423-2_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O2 -flto} {-O2 -fwhopr} {-O3 -flto} {-O3 -fwhopr}} } */
  
  #include <stdio.h>
  
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O2 -flto -flto-partition=none} {-O2 -flto -flto-partition=1to1} {-O3 -flto -flto-partition=none} {-O3 -flto -flto-partition=1to1}} } */
  
  #include <stdio.h>
  
Index: testsuite/gcc.dg/lto/20081201-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081201-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081201-1_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{-O2 -DOPTIMIZE -fwhopr} {-O0 -fwhopr}} } */
  
  extern void abort (void);
  
--- 1,4 ----
! /* { dg-lto-options {{-O2 -DOPTIMIZE -flto -flto-partition=1to1} {-O0 -flto -flto-partition=1to1}} } */
  
  extern void abort (void);
  
Index: testsuite/gcc.dg/lto/ipacp_0.c
===================================================================
*** testsuite/gcc.dg/lto/ipacp_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/ipacp_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{ -O1 -fwhopr -fipa-cp -fipa-cp-clone}} } */
  /* { dg-lto-do run } */
  
  /* Test that clonning happens and we unify declarations of a from both units.  */
--- 1,4 ----
! /* { dg-lto-options {{ -O1 -flto -flto-partition=1to1 -fipa-cp -fipa-cp-clone}} } */
  /* { dg-lto-do run } */
  
  /* Test that clonning happens and we unify declarations of a from both units.  */
Index: testsuite/gcc.dg/lto/20090116_0.c
===================================================================
*** testsuite/gcc.dg/lto/20090116_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20090116_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O1 -fwhopr -fPIC}} } */
  /* { dg-extra-ld-options {-r -nostdlib -O0} } */
  
  int foo(void) {
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O1 -flto -flto-partition=1to1 -fPIC}} } */
  /* { dg-extra-ld-options {-r -nostdlib -O0} } */
  
  int foo(void) {
Index: testsuite/gcc.dg/lto/20091015-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20091015-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20091015-1_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -r -nostdlib -O2 -flto} {-fPIC -r -nostdlib -O2 -fwhopr}} } */
  
  #include "20091015-1_b.h"
  void diagnostic_initialize (FILE **stream) { *stream = stderr; }
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -r -nostdlib -O2 -flto} {-fPIC -r -nostdlib -O2 -flto -flto-partition=1to1}} } */
  
  #include "20091015-1_b.h"
  void diagnostic_initialize (FILE **stream) { *stream = stderr; }
Index: testsuite/gcc.dg/lto/20090126-2_0.c
===================================================================
*** testsuite/gcc.dg/lto/20090126-2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20090126-2_0.c	(working copy)
***************
*** 1,6 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -O2 -fwhopr}} } */
! /* { dg-extra-ld-options {-fno-PIC -r -nostdlib -O2 -fwhopr} } */
  
  int main(int argc, char **argv) {
    return 0;
--- 1,6 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -O2 -flto -flto-partition=1to1}} } */
! /* { dg-extra-ld-options {-fno-PIC -r -nostdlib -O2 -flto -flto-partition=1to1} } */
  
  int main(int argc, char **argv) {
    return 0;
Index: testsuite/gcc.dg/lto/20081202-2_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081202-2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081202-2_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{-fwhopr -O3}} } */
  
  extern void exit (int);
  extern void *foo (void);
--- 1,4 ----
! /* { dg-lto-options {{-flto -flto-partition=1to1 -O3}} } */
  
  extern void exit (int);
  extern void *foo (void);
Index: testsuite/gcc.dg/lto/20081204-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081204-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081204-1_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fwhopr -fPIC -r -nostdlib}} } */
  
  /* Tests for the absence during linking of:
     lto1: error: type of 'i' does not match original declaration  */
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */
  
  /* Tests for the absence during linking of:
     lto1: error: type of 'i' does not match original declaration  */
Index: testsuite/gcc.dg/lto/const-uniq_0.c
===================================================================
*** testsuite/gcc.dg/lto/const-uniq_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/const-uniq_0.c	(working copy)
***************
*** 1,7 ****
  /* The 3 constant initializers should be uniquized.  */
  
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-Os -flto} {-Os -fwhopr} } } */
  
  int lookup1 (int i)
  {
--- 1,7 ----
  /* The 3 constant initializers should be uniquized.  */
  
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-Os -flto -flto-partition=none} {-Os -flto -flto-partition=1to1} } } */
  
  int lookup1 (int i)
  {
Index: testsuite/gcc.dg/lto/20081224_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081224_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081224_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fwhopr -r -nostdlib -fPIC}} } */
  #include "20081224_0.h"
  
  extern struct foo x;
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib -fPIC}} } */
  #include "20081224_0.h"
  
  extern struct foo x;
Index: testsuite/gcc.dg/lto/20090219_0.c
===================================================================
*** testsuite/gcc.dg/lto/20090219_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20090219_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O3 -fwhopr -fPIC -r -nostdlib}} } */
  
  struct Foo { int f1, f2, f3, f4, f5; };
  
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O3 -flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */
  
  struct Foo { int f1, f2, f3, f4, f5; };
  
Index: testsuite/gcc.dg/lto/ipareference2_0.c
===================================================================
*** testsuite/gcc.dg/lto/ipareference2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/ipareference2_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{ -O1 -fwhopr -fwhole-program}} } */
  /* { dg-lto-do run } */
  
  /* Verify that ipa-reference marks A as constant and we fold references
--- 1,4 ----
! /* { dg-lto-options {{ -O1 -flto -flto-partition=1to1 -fwhole-program}} } */
  /* { dg-lto-do run } */
  
  /* Verify that ipa-reference marks A as constant and we fold references
Index: testsuite/gcc.dg/lto/20090206-2_0.c
===================================================================
*** testsuite/gcc.dg/lto/20090206-2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20090206-2_0.c	(working copy)
***************
*** 1,6 ****
  /* { dg-lto-do link } */
  /* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */
! /* { dg-lto-options {{-fwhopr -fPIC}} } */
  /* { dg-suppress-ld-options {-fPIC} } */
  
  void func(int n) {
--- 1,6 ----
  /* { dg-lto-do link } */
  /* { dg-skip-if "" { ! { i?86-*-linux* x86_64-*-linux* } } { "*" } { "" } } */
! /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC}} } */
  /* { dg-suppress-ld-options {-fPIC} } */
  
  void func(int n) {
Index: testsuite/gcc.dg/lto/20081115_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081115_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081115_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{-O2 -DOPTIMIZE -fwhopr} {-O0 -fwhopr}} } */
  
  extern void abort (void);
  
--- 1,4 ----
! /* { dg-lto-options {{-O2 -DOPTIMIZE -flto -flto-partition=1to1} {-O0 -flto -flto-partition=1to1}} } */
  
  extern void abort (void);
  
Index: testsuite/gcc.dg/lto/20100423-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20100423-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20100423-1_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-O2 -flto}} } */
  
  struct bar {int x;};
  extern struct bar foo(void);
--- 1,5 ----
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-O2 -flto -flto-partition=none}} } */
  
  struct bar {int x;};
  extern struct bar foo(void);
Index: testsuite/gcc.dg/lto/20081201-2_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081201-2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081201-2_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{-O3 -fwhopr}} } */
  
  /* Test that cross-TU inlining works.  */
  
--- 1,4 ----
! /* { dg-lto-options {{-O3 -flto -flto-partition=1to1}} } */
  
  /* Test that cross-TU inlining works.  */
  
Index: testsuite/gcc.dg/lto/20081120-2_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081120-2_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081120-2_0.c	(working copy)
***************
*** 1,3 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fwhopr -r -nostdlib}} } */
  void bar(void) {}
--- 1,3 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib}} } */
  void bar(void) {}
Index: testsuite/gcc.dg/lto/materialize-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/materialize-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/materialize-1_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{ -O3 -fwhopr}} } */
  /* { dg-lto-do run } */
  extern void clone_me (int, int);
  int a=15;
--- 1,4 ----
! /* { dg-lto-options {{ -O3 -flto -flto-partition=1to1}} } */
  /* { dg-lto-do run } */
  extern void clone_me (int, int);
  int a=15;
Index: testsuite/gcc.dg/lto/20090126-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20090126-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20090126-1_0.c	(working copy)
***************
*** 1,6 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O0 -fwhopr}} } */
! /* { dg-extra-ld-options {-r -nostdlib -O2 -fwhopr} } */
  
  int main(int argc, char **argv) {
    return 0;
--- 1,6 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-O0 -flto -flto-partition=1to1}} } */
! /* { dg-extra-ld-options {-r -nostdlib -O2 -flto -flto-partition=1to1} } */
  
  int main(int argc, char **argv) {
    return 0;
Index: testsuite/gcc.dg/lto/20081202-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/20081202-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/20081202-1_0.c	(working copy)
***************
*** 1,4 ****
! /* { dg-lto-options {{-fwhopr -O3}} } */
  
  extern void exit (int);
  extern void foo (void);
--- 1,4 ----
! /* { dg-lto-options {{-flto -flto-partition=1to1 -O3}} } */
  
  extern void exit (int);
  extern void foo (void);
Index: testsuite/gcc.dg/lto/noreturn-1_0.c
===================================================================
*** testsuite/gcc.dg/lto/noreturn-1_0.c	(revision 166582)
--- testsuite/gcc.dg/lto/noreturn-1_0.c	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-O2 -fwhopr} } } */
  
  void exit (int);
  __attribute__ ((noreturn))
--- 1,5 ----
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-O2 -flto -flto-partition=1to1} } } */
  
  void exit (int);
  __attribute__ ((noreturn))
Index: testsuite/g++.dg/20090107-1.C
===================================================================
*** testsuite/g++.dg/20090107-1.C	(revision 166582)
--- testsuite/g++.dg/20090107-1.C	(working copy)
***************
*** 1,6 ****
  /* { dg-do compile } */
  /* { dg-require-effective-target lto } */
! /* { dg-options "-fwhopr -Wuninitialized -O1" }  */
  
  template <typename T> struct Q1 { typedef int x; };
  template <typename T> struct Q2 {
--- 1,6 ----
  /* { dg-do compile } */
  /* { dg-require-effective-target lto } */
! /* { dg-options "-flto -Wuninitialized -O1" }  */
  
  template <typename T> struct Q1 { typedef int x; };
  template <typename T> struct Q2 {
Index: testsuite/g++.dg/lto/pr45679-2_0.C
===================================================================
*** testsuite/g++.dg/lto/pr45679-2_0.C	(revision 166582)
--- testsuite/g++.dg/lto/pr45679-2_0.C	(working copy)
***************
*** 1,6 ****
  // { dg-lto-do link }
  // { dg-lto-options {{-O3 -Wno-multichar}} } 
! // { dg-extra-ld-options "-fwhopr -r -nostdlib" }
      extern "C" {
    typedef struct {
      union   {
--- 1,6 ----
  // { dg-lto-do link }
  // { dg-lto-options {{-O3 -Wno-multichar}} } 
! // { dg-extra-ld-options "-flto -flto-partition=1to1 -r -nostdlib" }
      extern "C" {
    typedef struct {
      union   {
Index: testsuite/g++.dg/lto/20081123_0.C
===================================================================
*** testsuite/g++.dg/lto/20081123_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081123_0.C	(working copy)
***************
*** 1,5 ****
  // { dg-lto-do link }
! // { dg-lto-options {{-fwhopr -r -nostdlib -fPIC}} }
  
  int
  f(void)
--- 1,5 ----
  // { dg-lto-do link }
! // { dg-lto-options {{-flto -flto-partition=1to1 -r -nostdlib -fPIC}} }
  
  int
  f(void)
Index: testsuite/g++.dg/lto/20090313_0.C
===================================================================
*** testsuite/g++.dg/lto/20090313_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20090313_0.C	(working copy)
***************
*** 1,5 ****
  // { dg-lto-do link }
! // { dg-lto-options {{-fwhopr -fPIC}} }
! // { dg-extra-ld-options "-fwhopr -r -nostdlib" }
  
  int X;
--- 1,5 ----
  // { dg-lto-do link }
! // { dg-lto-options {{-flto -flto-partition=1to1 -fPIC}} }
! // { dg-extra-ld-options "-flto -flto-partition=1to1 -r -nostdlib" }
  
  int X;
Index: testsuite/g++.dg/lto/20081125_0.C
===================================================================
*** testsuite/g++.dg/lto/20081125_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081125_0.C	(working copy)
***************
*** 1,5 ****
  // { dg-lto-do link }
! // { dg-lto-options {{-fwhopr}} }
  #include "20081125.h"
  
  object::object (int x)
--- 1,5 ----
  // { dg-lto-do link }
! // { dg-lto-options {{-flto -flto-partition=1to1}} }
  #include "20081125.h"
  
  object::object (int x)
Index: testsuite/g++.dg/lto/20081109-1_0.C
===================================================================
*** testsuite/g++.dg/lto/20081109-1_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081109-1_0.C	(working copy)
***************
*** 1,5 ****
  // { dg-lto-do link }
! // { dg-lto-options {{-fPIC -fwhopr}} }
! // { dg-extra-ld-options "-fPIC -fwhopr -r -nostdlib -fno-exceptions" }
  void func(); class Foo { };
  void bar() { try { func(); } catch (Foo) { } };
--- 1,5 ----
  // { dg-lto-do link }
! // { dg-lto-options {{-fPIC -flto -flto-partition=1to1}} }
! // { dg-extra-ld-options "-fPIC -flto -flto-partition=1to1 -r -nostdlib -fno-exceptions" }
  void func(); class Foo { };
  void bar() { try { func(); } catch (Foo) { } };
Index: testsuite/g++.dg/lto/20081219_0.C
===================================================================
*** testsuite/g++.dg/lto/20081219_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081219_0.C	(working copy)
***************
*** 1,6 ****
  // { dg-lto-do link }
! // { dg-lto-options {{-fPIC -fwhopr -O2}} }
! // { dg-extra-ld-options "-O2 -fPIC -fwhopr -r -nostdlib" }
  
  typedef long int ptrdiff_t;
  extern "C"
--- 1,6 ----
  // { dg-lto-do link }
! // { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -O2}} }
! // { dg-extra-ld-options "-O2 -fPIC -flto -flto-partition=1to1 -r -nostdlib" }
  
  typedef long int ptrdiff_t;
  extern "C"
Index: testsuite/g++.dg/lto/20100724-1_0.C
===================================================================
*** testsuite/g++.dg/lto/20100724-1_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20100724-1_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-ftoplevel-reorder -flto} {-ftoplevel-reorder -fwhopr}} } */
  /* { dg-extra-ld-options {-r -nostdlib} } */
  
  struct Foo { virtual ~Foo(); };
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-ftoplevel-reorder -flto -flto-partition=none} {-ftoplevel-reorder -flto -flto-partition=1to1}} } */
  /* { dg-extra-ld-options {-r -nostdlib} } */
  
  struct Foo { virtual ~Foo(); };
Index: testsuite/g++.dg/lto/20081204-1_0.C
===================================================================
*** testsuite/g++.dg/lto/20081204-1_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081204-1_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fwhopr -fPIC -r -nostdlib}} } */
  
  /* Tests for the absence during linking of:
     lto1: error: type of '_ZTVN10__cxxabiv120__si_class_type_infoE' does
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC -r -nostdlib}} } */
  
  /* Tests for the absence during linking of:
     lto1: error: type of '_ZTVN10__cxxabiv120__si_class_type_infoE' does
Index: testsuite/g++.dg/lto/20090303_0.C
===================================================================
*** testsuite/g++.dg/lto/20090303_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20090303_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-fwhopr -fPIC}} } */
  /* { dg-suppress-ld-options {-fPIC} }  */
  void foobar(int *, int* __x)    ;
  int test_ints[30];
--- 1,5 ----
  /* { dg-lto-do run } */
! /* { dg-lto-options {{-flto -flto-partition=1to1 -fPIC}} } */
  /* { dg-suppress-ld-options {-fPIC} }  */
  void foobar(int *, int* __x)    ;
  int test_ints[30];
Index: testsuite/g++.dg/lto/20100723-1_0.C
===================================================================
*** testsuite/g++.dg/lto/20100723-1_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20100723-1_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fcompare-debug -flto} {-fcompare-debug -fwhopr}} } */
  
  struct S {
      virtual void f() { }
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fcompare-debug -flto -flto-partition=none} {-fcompare-debug -flto -flto-partition=1to1}} } */
  
  struct S {
      virtual void f() { }
Index: testsuite/g++.dg/lto/pr45679-1_0.C
===================================================================
*** testsuite/g++.dg/lto/pr45679-1_0.C	(revision 166582)
--- testsuite/g++.dg/lto/pr45679-1_0.C	(working copy)
***************
*** 1,6 ****
  // { dg-lto-do link }
  // { dg-lto-options {{-O3 -Wno-multichar}} } 
! // { dg-extra-ld-options "-fwhopr -r -nostdlib" }
  
       extern "C" {
     typedef struct __locale_struct {
--- 1,6 ----
  // { dg-lto-do link }
  // { dg-lto-options {{-O3 -Wno-multichar}} } 
! // { dg-extra-ld-options "-flto -flto-partition=1to1 -r -nostdlib" }
  
       extern "C" {
     typedef struct __locale_struct {
Index: testsuite/g++.dg/lto/20090128_0.C
===================================================================
*** testsuite/g++.dg/lto/20090128_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20090128_0.C	(working copy)
***************
*** 1,5 ****
  // { dg-lto-do assemble }
! // { dg-lto-options {{-fpreprocessed -O2 -fwhopr -funsigned-char}} }
  typedef unsigned char uint8;
  extern const uint8 array[256];
  static inline bool
--- 1,5 ----
  // { dg-lto-do assemble }
! // { dg-lto-options {{-fpreprocessed -O2 -flto -flto-partition=1to1 -funsigned-char}} }
  typedef unsigned char uint8;
  extern const uint8 array[256];
  static inline bool
Index: testsuite/g++.dg/lto/20081204-2_0.C
===================================================================
*** testsuite/g++.dg/lto/20081204-2_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081204-2_0.C	(working copy)
***************
*** 1,5 ****
  // { dg-lto-do link }
! // { dg-lto-options {{-fwhopr -O3}} }
  extern void foo (void);
  
  int
--- 1,5 ----
  // { dg-lto-do link }
! // { dg-lto-options {{-flto -flto-partition=1to1 -O3}} }
  extern void foo (void);
  
  int
Index: testsuite/g++.dg/lto/20090302_0.C
===================================================================
*** testsuite/g++.dg/lto/20090302_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20090302_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -fwhopr -r -nostdlib}} } */
  struct Foo {
    bool Mumble();
    static void Bar() { if (foo_->Mumble()) foo_ = 0; }
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */
  struct Foo {
    bool Mumble();
    static void Bar() { if (foo_->Mumble()) foo_ = 0; }
Index: testsuite/g++.dg/lto/20081119-1_0.C
===================================================================
*** testsuite/g++.dg/lto/20081119-1_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081119-1_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -fwhopr -r -nostdlib}} } */
  
  #include "20081119-1.h"
  
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */
  
  #include "20081119-1.h"
  
Index: testsuite/g++.dg/lto/20081118_0.C
===================================================================
*** testsuite/g++.dg/lto/20081118_0.C	(revision 166582)
--- testsuite/g++.dg/lto/20081118_0.C	(working copy)
***************
*** 1,5 ****
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -fwhopr -r -nostdlib}} } */
  
  /* We used to ICE because of dangling pointers.  */
  
--- 1,5 ----
  /* { dg-lto-do link } */
! /* { dg-lto-options {{-fPIC -flto -flto-partition=1to1 -r -nostdlib}} } */
  
  /* We used to ICE because of dangling pointers.  */
  
Index: testsuite/g++.dg/20090121-1.C
===================================================================
*** testsuite/g++.dg/20090121-1.C	(revision 166582)
--- testsuite/g++.dg/20090121-1.C	(working copy)
***************
*** 1,6 ****
  // { dg-do compile }
  // { dg-require-effective-target lto }
! // { dg-options "-fwhopr -Wuninitialized -O2" }
  class A
  {
  private:
--- 1,6 ----
  // { dg-do compile }
  // { dg-require-effective-target lto }
! // { dg-options "-flto -Wuninitialized -O2" }
  class A
  {
  private:
Index: testsuite/objc.dg/lto/lto.exp
===================================================================
*** testsuite/objc.dg/lto/lto.exp	(revision 166582)
--- testsuite/objc.dg/lto/lto.exp	(working copy)
*************** if { ![check_effective_target_lto] } {
*** 41,50 ****
  global LTO_OPTIONS
  
  set LTO_OPTIONS [list	\
!   {-O0 -fwhopr -fgnu-runtime}	\
!   {-O2 -fwhopr -fgnu-runtime}	\
!   {-O0 -flto -fgnu-runtime} 	\
    {-O2 -flto -fgnu-runtime}	\
  ]
  
  objc_init
--- 41,50 ----
  global LTO_OPTIONS
  
  set LTO_OPTIONS [list	\
!   {-O0 -flto -fgnu-runtime}	\
    {-O2 -flto -fgnu-runtime}	\
+   {-O0 -flto -flto-partition=none -fgnu-runtime} 	\
+   {-O2 -flto -flto-partition=none -fgnu-runtime}	\
  ]
  
  objc_init
*************** foreach src $tests {
*** 67,76 ****
  # darwin targets can also run code with the NeXT runtime.
  if [istarget "*-*-darwin*" ] {
  set LTO_OPTIONS [list	\
!   {-O0 -fwhopr -fnext-runtime}	\
!   {-O2 -fwhopr -fnext-runtime}	\
!   {-O0 -flto -fnext-runtime} 	\
    {-O2 -flto -fnext-runtime}	\
  ]
    foreach src $tests {
      # If we're only testing specific files and this isn't one of them, skip it.
--- 67,76 ----
  # darwin targets can also run code with the NeXT runtime.
  if [istarget "*-*-darwin*" ] {
  set LTO_OPTIONS [list	\
!   {-O0 -flto -fnext-runtime}	\
    {-O2 -flto -fnext-runtime}	\
+   {-O0 -flto -flto-partition=none -fnext-runtime} 	\
+   {-O2 -flto -flto-partition=none -fnext-runtime}	\
  ]
    foreach src $tests {
      # If we're only testing specific files and this isn't one of them, skip it.
Index: testsuite/lib/lto.exp
===================================================================
*** testsuite/lib/lto.exp	(revision 166582)
--- testsuite/lib/lto.exp	(working copy)
*************** proc lto_init { args } {
*** 64,71 ****
      # add it to site.exp directly.
      if ![info exists LTO_OPTIONS] {
  	set LTO_OPTIONS [list	\
! 	    {-O0 -fwhopr}	\
! 	    {-O2 -fwhopr}	\
  	    {-O0 -flto}		\
  	    {-O2 -flto}		\
  	]
--- 64,73 ----
      # add it to site.exp directly.
      if ![info exists LTO_OPTIONS] {
  	set LTO_OPTIONS [list	\
! 	    {-O0 -flto -flto-partition=none } \
! 	    {-O2 -flto -flto-partition=none } \
! 	    {-O0 -flto -flto-partition=1to1 } \
! 	    {-O2 -flto -flto-partition=1to1 } \
  	    {-O0 -flto}		\
  	    {-O2 -flto}		\
  	]
Index: testsuite/lib/gcc-dg.exp
===================================================================
*** testsuite/lib/gcc-dg.exp	(revision 166582)
--- testsuite/lib/gcc-dg.exp	(working copy)
*************** if [info exists ADDITIONAL_TORTURE_OPTIO
*** 70,77 ****
  set LTO_TORTURE_OPTIONS ""
  if [check_effective_target_lto] {
      set LTO_TORTURE_OPTIONS [list \
! 	{ -O2 -flto } \
! 	{ -O2 -fwhopr }
      ]
  }
  
--- 70,77 ----
  set LTO_TORTURE_OPTIONS ""
  if [check_effective_target_lto] {
      set LTO_TORTURE_OPTIONS [list \
! 	{ -O2 -flto -flto-partition=none } \
! 	{ -O2 -flto }
      ]
  }
  
Index: testsuite/lib/c-torture.exp
===================================================================
*** testsuite/lib/c-torture.exp	(revision 166582)
--- testsuite/lib/c-torture.exp	(working copy)
*************** if [info exists ADDITIONAL_TORTURE_OPTIO
*** 53,60 ****
  set LTO_TORTURE_OPTIONS ""
  if [check_effective_target_lto] {
      set LTO_TORTURE_OPTIONS [list \
! 	{ -O2 -flto } \
! 	{ -O2 -fwhopr }
      ]
  }
  
--- 53,60 ----
  set LTO_TORTURE_OPTIONS ""
  if [check_effective_target_lto] {
      set LTO_TORTURE_OPTIONS [list \
! 	{ -O2 -flto -flto-partition=none } \
! 	{ -O2 -flto }
      ]
  }
  
Index: testsuite/obj-c++.dg/lto/lto.exp
===================================================================
*** testsuite/obj-c++.dg/lto/lto.exp	(revision 166582)
--- testsuite/obj-c++.dg/lto/lto.exp	(working copy)
*************** if { ![check_effective_target_lto] } {
*** 41,50 ****
  global LTO_OPTIONS
  
  set LTO_OPTIONS [list	\
!   {-O0 -fwhopr -fgnu-runtime}	\
!   {-O2 -fwhopr -fgnu-runtime}	\
!   {-O0 -flto -fgnu-runtime} 	\
    {-O2 -flto -fgnu-runtime}	\
  ]
  
  obj-c++_init
--- 41,50 ----
  global LTO_OPTIONS
  
  set LTO_OPTIONS [list	\
!   {-O0 -flto -fgnu-runtime}	\
    {-O2 -flto -fgnu-runtime}	\
+   {-O0 -flto -flto-partition=none -fgnu-runtime} 	\
+   {-O2 -flto -flto-partition=none -fgnu-runtime}	\
  ]
  
  obj-c++_init
*************** foreach src $tests {
*** 67,76 ****
  # darwin targets can also run code with the NeXT runtime.
  if [istarget "*-*-darwin*" ] {
  set LTO_OPTIONS [list	\
!   {-O0 -fwhopr -fnext-runtime}	\
!   {-O2 -fwhopr -fnext-runtime}	\
!   {-O0 -flto -fnext-runtime} 	\
    {-O2 -flto -fnext-runtime}	\
  ]
    foreach src $tests {
      # If we're only testing specific files and this isn't one of them, skip it.
--- 67,76 ----
  # darwin targets can also run code with the NeXT runtime.
  if [istarget "*-*-darwin*" ] {
  set LTO_OPTIONS [list	\
!   {-O0 -flto -fnext-runtime}	\
    {-O2 -flto -fnext-runtime}	\
+   {-O0 -flto -flto-partition=none -fnext-runtime} 	\
+   {-O2 -flto -flto-partition=none -fnext-runtime}	\
  ]
    foreach src $tests {
      # If we're only testing specific files and this isn't one of them, skip it.
Index: lto-wrapper.c
===================================================================
*** lto-wrapper.c	(revision 166582)
--- lto-wrapper.c	(working copy)
*************** along with GCC; see the file COPYING3.  
*** 32,38 ****
     The above will print something like
     /tmp/ccwbQ8B2.lto.o
  
!    If -fwhopr is used instead, more than one file might be produced
     ./ccXj2DTk.lto.ltrans.o
     ./ccCJuXGv.lto.ltrans.o
  */
--- 32,38 ----
     The above will print something like
     /tmp/ccwbQ8B2.lto.o
  
!    If WHOPR is used instead, more than one file might be produced
     ./ccXj2DTk.lto.ltrans.o
     ./ccCJuXGv.lto.ltrans.o
  */
*************** run_gcc (unsigned argc, char *argv[])
*** 304,309 ****
--- 304,310 ----
    bool seen_o = false;
    int parallel = 0;
    int jobserver = 0;
+   bool no_partition = false;
  
    /* Get the driver and options.  */
    collect_gcc = getenv ("COLLECT_GCC");
*************** run_gcc (unsigned argc, char *argv[])
*** 366,380 ****
  	if (strcmp (option, "-v") == 0)
  	  verbose = 1;
  
  	/* We've handled these LTO options, do not pass them on.  */
! 	if (strcmp (option, "-flto") == 0)
! 	  lto_mode = LTO_MODE_LTO;
! 	else if (strncmp (option, "-fwhopr", 7) == 0)
  	  {
  	    lto_mode = LTO_MODE_WHOPR;
! 	    if (option[7] == '=')
  	      {
! 		if (!strcmp (option + 8, "jobserver"))
  		  {
  		    jobserver = 1;
  		    parallel = 1;
--- 367,382 ----
  	if (strcmp (option, "-v") == 0)
  	  verbose = 1;
  
+ 	if (strcmp (option, "-flto-partition=none") == 0)
+ 	  no_partition = true;
  	/* We've handled these LTO options, do not pass them on.  */
! 	if (strncmp (option, "-flto=", 6) == 0
! 	    || !strcmp (option, "-flto"))
  	  {
  	    lto_mode = LTO_MODE_WHOPR;
! 	    if (option[5] == '=')
  	      {
! 		if (!strcmp (option + 6, "jobserver"))
  		  {
  		    jobserver = 1;
  		    parallel = 1;
*************** run_gcc (unsigned argc, char *argv[])
*** 390,395 ****
--- 392,403 ----
  	else
  	  *argv_ptr++ = option;
        }
+   if (no_partition)
+     {
+       lto_mode = LTO_MODE_LTO;
+       jobserver = 0;
+       parallel = 0;
+     }
  
    if (linker_output)
      {
Index: opts.c
===================================================================
*** opts.c	(revision 166582)
--- opts.c	(working copy)
*************** finish_options (struct gcc_options *opts
*** 1218,1224 ****
        opts->x_flag_ipa_struct_reorg = 0;
      }
  
!   if (opts->x_flag_lto || opts->x_flag_whopr)
      {
  #ifdef ENABLE_LTO
        opts->x_flag_generate_lto = 1;
--- 1218,1224 ----
        opts->x_flag_ipa_struct_reorg = 0;
      }
  
!   if (flag_whopr || opts->x_flag_lto)
      {
  #ifdef ENABLE_LTO
        opts->x_flag_generate_lto = 1;
*************** finish_options (struct gcc_options *opts
*** 1231,1249 ****
        error ("LTO support has not been enabled in this configuration");
  #endif
      }
!   if (opts->x_flag_lto_partition_balanced || opts->x_flag_lto_partition_1to1)
      {
        if (opts->x_flag_lto_partition_balanced
  	  && opts->x_flag_lto_partition_1to1)
  	error ("only one -flto-partition value can be specified");
!       if (!opts->x_flag_whopr && !opts->x_flag_wpa && !opts->x_flag_ltrans)
! 	error ("-flto-partition has no effect without -fwhopr");
      }
! 
!   /* Reconcile -flto and -fwhopr.  Set additional flags as appropriate and
!      check option consistency.  */
!   if (opts->x_flag_lto && opts->x_flag_whopr)
!     error ("-flto and -fwhopr are mutually exclusive");
  
    /* We initialize opts->x_flag_split_stack to -1 so that targets can set a
       default value if they choose based on other options.  */
--- 1231,1247 ----
        error ("LTO support has not been enabled in this configuration");
  #endif
      }
!   if ((opts->x_flag_lto_partition_balanced != 0) + (opts->x_flag_lto_partition_1to1 != 0)
!        + (opts->x_flag_lto_partition_none != 0) > 1)
      {
        if (opts->x_flag_lto_partition_balanced
  	  && opts->x_flag_lto_partition_1to1)
  	error ("only one -flto-partition value can be specified");
!       if (!opts->x_flag_lto && !opts->x_flag_wpa && !opts->x_flag_ltrans)
! 	error ("-flto-partition has no effect without -flto");
      }
!   if (!flag_lto_partition_none && opts->x_flag_lto)
!      opts->x_flag_lto = 0, flag_whopr = 1;
  
    /* We initialize opts->x_flag_split_stack to -1 so that targets can set a
       default value if they choose based on other options.  */
*************** common_handle_option (struct gcc_options
*** 2152,2159 ****
        dc->pedantic_errors = 1;
        break;
  
!     case OPT_fwhopr:
!       opts->x_flag_whopr = "";
        break;
  
      case OPT_w:
--- 2150,2157 ----
        dc->pedantic_errors = 1;
        break;
  
!     case OPT_flto:
!       opts->x_flag_lto = "";
        break;
  
      case OPT_w:
Index: common.opt
===================================================================
*** common.opt	(revision 166582)
--- common.opt	(working copy)
*************** Common Ignore
*** 1138,1146 ****
  Does nothing.  Preserved for backward compatibility.
  
  flto
! Common Var(flag_lto)
  Enable link-time optimization.
  
  flto-partition=1to1
  Common Var(flag_lto_partition_1to1)
  Partition functions and vars at linktime based on object files they originate from
--- 1138,1150 ----
  Does nothing.  Preserved for backward compatibility.
  
  flto
! Common
  Enable link-time optimization.
  
+ flto=
+ Common RejectNegative Joined Var(flag_lto)
+ Link-time optimization with number of parallel jobs or jobserver.
+ 
  flto-partition=1to1
  Common Var(flag_lto_partition_1to1)
  Partition functions and vars at linktime based on object files they originate from
*************** flto-partition=balanced
*** 1149,1154 ****
--- 1153,1162 ----
  Common Var(flag_lto_partition_balanced)
  Partition functions and vars at linktime into approximately same sized buckets
  
+ flto-partition=none
+ Common Var(flag_lto_partition_none)
+ Disable partioning and streaming
+ 
  ; The initial value of -1 comes from Z_DEFAULT_COMPRESSION in zlib.h.
  flto-compression-level=
  Common Joined RejectNegative UInteger Var(flag_lto_compression_level) Init(-1)
*************** fdse
*** 1217,1222 ****
--- 1225,1234 ----
  Common Var(flag_dse) Init(1) Optimization
  Use the RTL dead store elimination pass
  
+ freorder-functions
+ Common Report Var(flag_ipa_reorder) Init(1) Optimization
+ Reroder functions for better locality at execution time
+ 
  freschedule-modulo-scheduled-loops
  Common Report Var(flag_resched_modulo_sched) Optimization
  Enable/Disable the traditional scheduling in loops that already passed modulo scheduling
*************** fweb
*** 1879,1892 ****
  Common Report Var(flag_web) Init(2) Optimization
  Construct webs and split unrelated uses of single variable
  
- fwhopr
- Common
- Enable partitioned link-time optimization
- 
- fwhopr=
- Common RejectNegative Joined Var(flag_whopr)
- Partitioned link-time optimization with number of parallel jobs or jobserver.
- 
  ftree-builtin-call-dce
  Common Report Var(flag_tree_builtin_call_dce) Init(0) Optimization
  Enable conditional dead code elimination for builtin calls
--- 1891,1896 ----
Index: collect2.c
===================================================================
*** collect2.c	(revision 166582)
--- collect2.c	(working copy)
*************** main (int argc, char **argv)
*** 1196,1216 ****
  
    /* Parse command line early for instances of -debug.  This allows
       the debug flag to be set before functions like find_a_file()
!      are called.  We also look for the -flto or -fwhopr flag to know
       what LTO mode we are in.  */
    {
      int i;
  
      for (i = 1; argv[i] != NULL; i ++)
        {
  	if (! strcmp (argv[i], "-debug"))
  	  debug = true;
!         else if (! strcmp (argv[i], "-flto") && ! use_plugin)
! 	  {
! 	    use_verbose = true;
! 	    lto_mode = LTO_MODE_LTO;
! 	  }
!         else if (! strncmp (argv[i], "-fwhopr", 7) && ! use_plugin)
  	  {
  	    use_verbose = true;
  	    lto_mode = LTO_MODE_WHOPR;
--- 1196,1215 ----
  
    /* Parse command line early for instances of -debug.  This allows
       the debug flag to be set before functions like find_a_file()
!      are called.  We also look for the -flto or -flto-partition=none flag to know
       what LTO mode we are in.  */
    {
      int i;
+     bool no_partition = false;
  
      for (i = 1; argv[i] != NULL; i ++)
        {
  	if (! strcmp (argv[i], "-debug"))
  	  debug = true;
!         else if (! strcmp (argv[i], "-flto-partition=none"))
! 	  no_partition = true;
!         else if ((! strncmp (argv[i], "-flto=", 6)
! 		  || ! strcmp (argv[i], "-flto")) && ! use_plugin)
  	  {
  	    use_verbose = true;
  	    lto_mode = LTO_MODE_WHOPR;
*************** main (int argc, char **argv)
*** 1239,1244 ****
--- 1238,1245 ----
  #endif
        }
      vflag = debug;
+     if (no_partition)
+       lto_mode = LTO_MODE_LTO;
    }
  
  #ifndef DEFAULT_A_OUT_NAME
*************** main (int argc, char **argv)
*** 1485,1492 ****
  	      break;
  
              case 'f':
! 	      if (strcmp (arg, "-flto") == 0
! 		  || strncmp (arg, "-fwhopr", 7) == 0)
  		{
  #ifdef ENABLE_LTO
  		  /* Do not pass LTO flag to the linker. */
--- 1486,1492 ----
  	      break;
  
              case 'f':
! 	      if (strncmp (arg, "-flto", 5) == 0)
  		{
  #ifdef ENABLE_LTO
  		  /* Do not pass LTO flag to the linker. */


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]