Disabling devirtualization reduces code size, both for instrumentation (because
many more virtual functions are kept longer and therefore instrumented) and for
normal optimization.

Patch attached. Passes internal testing and regression tests. Ok for google/4_9?

Thanks,
Teresa

-- 
Teresa Johnson | Software Engineer | tejohn...@google.com | 408-460-2413
Disabling devirtualization reduces code size, both for instrumentation (because
many more virtual functions are kept longer and therefore instrumented) and for
normal optimization.

Passes internal testing and regression tests. Ok for google/4_9?

2014-10-18  Teresa Johnson  <tejohn...@google.com>

gcc/:
        Google ref b/17945455
        * opts.c (finish_options): Disable -fdevirtualize

gcc/testsuite/:
        Google ref b/17945455
        * testsuite/g++.dg/ipa/devirt-10.C: Enable devirtualization for test.
        * testsuite/g++.dg/ipa/devirt-11.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-12.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-13.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-14.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-15.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-16.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-17.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-18.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-19.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-1.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-20.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-21.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-22.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-23.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-24.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-25.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-26.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-27.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-28.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-29.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-2.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-30.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-31.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-39.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-3.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-4.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-5.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-6.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-7.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-9.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-1.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-2.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-3.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-4.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-5.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-6.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-7.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-c-8.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-d-1.C: Ditto.
        * testsuite/g++.dg/ipa/devirt-g-1.C: Ditto.
        * testsuite/g++.dg/ipa/imm-devirt-1.C: Ditto.
        * testsuite/g++.dg/ipa/imm-devirt-2.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-1.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-2.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-3.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-4.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-5.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-7.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-8.C: Ditto.
        * testsuite/g++.dg/ipa/ivinline-9.C: Ditto.
        * testsuite/g++.dg/ipa/pr60600.C: Ditto.
        * testsuite/g++.dg/ipa/pr60640-4.C: Ditto.
        * testsuite/g++.dg/ipa/type-inheritance-1.C: Ditto.
        * testsuite/g++.dg/opt/devirt1.C: Ditto.
        * testsuite/g++.dg/opt/devirt2.C: Ditto.
        * testsuite/g++.dg/opt/devirt3.C: Ditto.

Index: opts.c
===================================================================
--- opts.c      (revision 216286)
+++ opts.c      (working copy)
@@ -485,7 +485,6 @@ static const struct default_options default_option
     { OPT_LEVELS_2_PLUS, OPT_ftree_pre, NULL, 1 },
     { OPT_LEVELS_2_PLUS, OPT_ftree_switch_conversion, NULL, 1 },
     { OPT_LEVELS_2_PLUS, OPT_fipa_cp, NULL, 1 },
-    { OPT_LEVELS_2_PLUS, OPT_fdevirtualize, NULL, 1 },
     { OPT_LEVELS_2_PLUS, OPT_fdevirtualize_speculatively, NULL, 1 },
     { OPT_LEVELS_2_PLUS, OPT_fipa_sra, NULL, 1 },
     { OPT_LEVELS_2_PLUS, OPT_falign_loops, NULL, 1 },
Index: testsuite/g++.dg/ipa/devirt-10.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-10.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-10.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-inline -fdump-ipa-cp -fno-early-inlining" } */
+/* { dg-options "-O3 -fdump-ipa-inline -fdump-ipa-cp -fno-early-inlining 
-fdevirtualize" } */
 class wxPaintEvent {  };
 struct wxDCBase
 { 
Index: testsuite/g++.dg/ipa/devirt-11.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-11.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-11.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 
-fno-devirtualize-speculatively" } */
+/* { dg-options "-O2 -fdump-ipa-inline --param=early-inlining-insns-comdat=0 
-fno-devirtualize-speculatively -fdevirtualize" } */
 int baz ();
 struct A
 {
Index: testsuite/g++.dg/ipa/devirt-12.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-12.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-12.C    (working copy)
@@ -1,5 +1,5 @@
 // { dg-do compile { target c++11 } }
-// { dg-options "-O -fdump-ipa-inline" }
+// { dg-options "-O -fdump-ipa-inline -fdevirtualize" }
 
 class Foo
 {
Index: testsuite/g++.dg/ipa/devirt-13.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-13.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-13.C    (working copy)
@@ -1,6 +1,6 @@
 /* { dg-do run } */
 /* Call to foo should be devirtualized because there are no derived types of 
A.  */
-/* { dg-options "-O2 -fdump-tree-ssa"  } */
+/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize"  } */
 namespace {
 class A {
 public:
Index: testsuite/g++.dg/ipa/devirt-14.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-14.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-14.C    (working copy)
@@ -2,7 +2,7 @@
    because the constructor of A is unreachable and therefore the virtual
    method table referring to A::foo is optimized out.  */
 /* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-ssa"  } */
+/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize"  } */
 class B {
 public:
   virtual int foo(void)
Index: testsuite/g++.dg/ipa/devirt-15.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-15.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-15.C    (working copy)
@@ -1,7 +1,7 @@
 /* Check that we speculatively devirutalize call to FOO to B::foo becuase
    A is noreturn.  */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-devirt -fdump-tree-optimized"  } */
+/* { dg-options "-O2 -fdump-ipa-devirt -fdump-tree-optimized -fdevirtualize"  
} */
 class A {
 public:
   virtual int foo(void)
Index: testsuite/g++.dg/ipa/devirt-16.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-16.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-16.C    (working copy)
@@ -1,7 +1,7 @@
 /* We shall devirtualize to unreachable.  No anonymous type method should 
surivve
    reachability.  */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-whole-program"  } */
+/* { dg-options "-O2 -fdump-ipa-whole-program -fdevirtualize"  } */
 namespace {
 class B {
 public:
Index: testsuite/g++.dg/ipa/devirt-17.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-17.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-17.C    (working copy)
@@ -1,7 +1,7 @@
 /* We shall devirtualize to B::foo since it is the only live candidate of an
    anonymous type.  */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-whole-program"  } */
+/* { dg-options "-O2 -fdump-ipa-whole-program -fdevirtualize"  } */
 namespace {
 class B {
 public:
Index: testsuite/g++.dg/ipa/devirt-18.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-18.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-18.C    (working copy)
@@ -1,7 +1,7 @@
 /* We shall devirtualize to unreachable.  No anonymous type method should 
surivve
    reachability.  */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-ssa"  } */
+/* { dg-options "-O2 -fdump-tree-ssa -fdevirtualize"  } */
 namespace {
 class B {
 public:
Index: testsuite/g++.dg/ipa/devirt-19.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-19.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-19.C    (working copy)
@@ -2,7 +2,7 @@
    Previously we were failing by considering CLOBBER statement to be
    a type change.  */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-cp"  } */
+/* { dg-options "-O2 -fdump-ipa-cp -fdevirtualize"  } */
 struct A {
   void operator==(const A &);
 };
Index: testsuite/g++.dg/ipa/devirt-1.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-1.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-1.C     (working copy)
@@ -1,6 +1,6 @@
 /* Verify that simple virtual calls are converted to direct calls by ipa-cp.  
*/
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-20.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-20.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-20.C    (working copy)
@@ -1,6 +1,6 @@
 #include <stdlib.h>
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-tree-release_ssa"  } */
+/* { dg-options "-O2 -fdump-tree-release_ssa -fdevirtualize"  } */
 namespace {
 struct A
 { int a; virtual int foo() {return a;} void bar() {a=7;} };
Index: testsuite/g++.dg/ipa/devirt-21.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-21.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-21.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp 
-fdevirtualize"  } */
 /* Main purpose is to verify that we do not produce wrong devirtualization to
    C::m_fn1.  We currently devirtualize to B::m_fn1, so check that. */
 #include <stdlib.h>
Index: testsuite/g++.dg/ipa/devirt-22.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-22.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-22.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-ipa-sra -fdump-ipa-cp 
-fdevirtualize"  } */
 class A {};
 class B {
 public:
Index: testsuite/g++.dg/ipa/devirt-23.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-23.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-23.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp 
-fno-devirtualize-speculatively"  } */
+/* { dg-options "-O3 -fno-partial-inlining -fdump-ipa-cp 
-fno-devirtualize-speculatively -fdevirtualize"  } */
 /* Main purpose is to verify that we do not produce wrong devirtualization to
    C::m_fn1.  We currently devirtualize to B::m_fn1, so check that. */
 #include <stdlib.h>
Index: testsuite/g++.dg/ipa/devirt-24.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-24.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-24.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-inline -fdump-ipa-cp 
--param=early-inlining-insns-comdat=0"  } */
+/* { dg-options "-O3 -fno-ipa-sra -fdump-ipa-inline -fdump-ipa-cp 
--param=early-inlining-insns-comdat=0 -fdevirtualize"  } */
 void pad(void);
 class A {};
 class B {
Index: testsuite/g++.dg/ipa/devirt-25.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-25.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-25.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize"  } */
 
 class ert_RefCounter {
  protected:
Index: testsuite/g++.dg/ipa/devirt-26.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-26.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-26.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-devirt"  } */
+/* { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize"  } */
 struct A
  {
    int a;
Index: testsuite/g++.dg/ipa/devirt-27.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-27.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-27.C    (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fdump-tree-optimized -fdevirtualize"  } */
 struct A
  {
    int a;
Index: testsuite/g++.dg/ipa/devirt-28.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-28.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-28.C    (working copy)
@@ -1,5 +1,5 @@
 // PR c++/58678
-// { dg-options "-O3 -fdump-ipa-devirt" }
+// { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" }
 
 struct A {
   virtual ~A();
Index: testsuite/g++.dg/ipa/devirt-29.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-29.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-29.C    (working copy)
@@ -1,7 +1,7 @@
 /* { dg-do run { target c++11 } } */
 /* There is a devirtualizable call. In PR60306 we deduced wrong target to 
cxa_pure_virtual.
    For gcc 4.10 we temporarily disable the devirtualization.  */
-/* { dg-options "-O3"  } */
+/* { dg-options "-O3 -fdevirtualize"  } */
 
 #include <vector>
 
Index: testsuite/g++.dg/ipa/devirt-2.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-2.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-2.C     (working copy)
@@ -1,7 +1,7 @@
 /* Verify that simple virtual calls using this pointer are converted
    to direct calls by ipa-cp.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-30.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-30.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-30.C    (working copy)
@@ -1,5 +1,5 @@
 // PR c++/58678
-// { dg-options "-O3 -fdump-ipa-devirt" }
+// { dg-options "-O3 -fdump-ipa-devirt -fdevirtualize" }
 
 // We shouldn't speculatively devirtualize to ~B because B is an abstract
 // class; any actual object passed to f will be of some derived class which
Index: testsuite/g++.dg/ipa/devirt-31.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-31.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-31.C    (working copy)
@@ -1,4 +1,4 @@
-/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline"  } */
+/* { dg-options "-O2 -std=c++11 -fdump-ipa-inline -fdevirtualize"  } */
 #include <new>
 
 class EmbeddedObject {
Index: testsuite/g++.dg/ipa/devirt-39.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-39.C    (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-39.C    (working copy)
@@ -1,5 +1,5 @@
 // PR c++/61214
-/* { dg-options "-O2 -fdump-tree-optimized"  } */
+/* { dg-options "-O2 -fdump-tree-optimized -fdevirtualize"  } */
 
 struct Base
 {
Index: testsuite/g++.dg/ipa/devirt-3.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-3.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-3.C     (working copy)
@@ -1,7 +1,7 @@
 /* Verify that simple virtual calls on an object refrence are
    converted to simple calls by ipa-cp.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-4.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-4.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-4.C     (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-co can convert virtual calls to direct ones even
    when a typecast to an ancestor is involved along the way.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-5.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-5.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-5.C     (working copy)
@@ -2,7 +2,7 @@
    ones even when a typecast to an ancestor is involved along the way
    and that ancestor is not the first one with virtual functions.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-6.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-6.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-6.C     (working copy)
@@ -2,7 +2,7 @@
    spot that foo changes the dynamic type of the passed object.  */
 
 /* { dg-do run } */
-/* { dg-options "-O3"  } */
+/* { dg-options "-O3 -fdevirtualize"  } */
 
 extern "C" void abort (void);
 extern "C" void *malloc(__SIZE_TYPE__);
Index: testsuite/g++.dg/ipa/devirt-7.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-7.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-7.C     (working copy)
@@ -1,7 +1,7 @@
 /* Verify that IPA-CP can do devirtualization even if the virtual call
    comes from a method that has been early-inlined into a descendant.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fdump-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-9.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-9.C     (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-9.C     (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O2  -fdump-ipa-whole-program 
--param=early-inlining-insns-comdat=0" } */
+/* { dg-options "-O2  -fdump-ipa-whole-program 
--param=early-inlining-insns-comdat=0 -fdevirtualize" } */
 double foo ();
 struct B
 {
Index: testsuite/g++.dg/ipa/devirt-c-1.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-1.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-1.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-c-2.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-2.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-2.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-c-3.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-3.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-3.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-inline"  } */
+/* { dg-options "-O3 -fno-inline -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-c-4.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-4.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-4.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-inline"  } */
+/* { dg-options "-O3 -fno-inline -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-c-5.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-5.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-5.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-c-6.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-6.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-6.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-inline"  } */
+/* { dg-options "-O3 -fno-inline -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-c-7.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-7.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-7.C   (working copy)
@@ -2,7 +2,7 @@
    object within another one when looking for dynamic type change .  */
 /* { dg-do run } */
 /* { dg-require-effective-target nonpic } */
-/* { dg-options "-O3 -Wno-attributes"  } */
+/* { dg-options "-O3 -Wno-attributes -fdevirtualize"  } */
 
 extern "C" void abort (void);
 namespace std {
Index: testsuite/g++.dg/ipa/devirt-c-8.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-c-8.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-c-8.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under construction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdump-ipa-cp 
-fdump-tree-optimized -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-d-1.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-d-1.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-d-1.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that ipa-cp correctly detects the dynamic type of an object
    under destruction when doing devirtualization.  */
 /* { dg-do run } */
-/* { dg-options "-O3 -fno-early-inlining -fno-inline"  } */
+/* { dg-options "-O3 -fno-early-inlining -fno-inline -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/devirt-g-1.C
===================================================================
--- testsuite/g++.dg/ipa/devirt-g-1.C   (revision 216286)
+++ testsuite/g++.dg/ipa/devirt-g-1.C   (working copy)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized" }
+// { dg-options "-O2 -fdump-ipa-cp -fdump-tree-optimized -fdevirtualize" }
 
 struct S { S(); virtual void xyzzy(); void otherstuff(); };
 struct R { int a; S s; R(); };
Index: testsuite/g++.dg/ipa/imm-devirt-1.C
===================================================================
--- testsuite/g++.dg/ipa/imm-devirt-1.C (revision 216286)
+++ testsuite/g++.dg/ipa/imm-devirt-1.C (working copy)
@@ -1,7 +1,7 @@
 /* Verify that virtual calls are folded even early inlining puts them into one
    function with the definition.  */
 /* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-fre1-details"  } */
+/* { dg-options "-O2 -fdump-tree-fre1-details -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/imm-devirt-2.C
===================================================================
--- testsuite/g++.dg/ipa/imm-devirt-2.C (revision 216286)
+++ testsuite/g++.dg/ipa/imm-devirt-2.C (working copy)
@@ -1,7 +1,7 @@
 /* Verify that virtual calls are folded even early inlining puts them into one
    function with the definition.  */
 /* { dg-do run } */
-/* { dg-options "-O2 -fdump-tree-fre1-details"  } */
+/* { dg-options "-O2 -fdump-tree-fre1-details -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-1.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-1.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-1.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that simple virtual calls are inlined even without early
    inlining.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-2.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-2.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-2.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that simple virtual calls using this pointer are inlined
    even without early inlining..  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-3.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-3.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-3.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that simple virtual calls on an object refrence are inlined
    even without early inlining.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-4.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-4.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-4.C   (working copy)
@@ -2,7 +2,7 @@
    inlining, even when a typecast to an ancestor is involved along the
    way.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-5.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-5.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-5.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that virtual call inlining does not pick a wrong method when
    there is a user defined ancestor in an object.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-7.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-7.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-7.C   (working copy)
@@ -2,7 +2,7 @@
    inlining, even when a typecast to an ancestor is involved along the
    way and that ancestor is not the first one with virtual functions.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-8.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-8.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-8.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that virtual calls are inlined (ithout early inlining) even
    when their caller is itself indirectly inlined.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/ivinline-9.C
===================================================================
--- testsuite/g++.dg/ipa/ivinline-9.C   (revision 216286)
+++ testsuite/g++.dg/ipa/ivinline-9.C   (working copy)
@@ -3,7 +3,7 @@
    way and that ancestor itself has an ancestor wich is not the
    primary base class.  */
 /* { dg-do run { target nonpic } } */
-/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp"  } */
+/* { dg-options "-O3 -fdump-ipa-inline -fno-early-inlining -fno-ipa-cp 
-fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/ipa/pr60600.C
===================================================================
--- testsuite/g++.dg/ipa/pr60600.C      (revision 216286)
+++ testsuite/g++.dg/ipa/pr60600.C      (working copy)
@@ -1,5 +1,5 @@
 /* { dg-do compile } */
-/* { dg-options "-O3 -fdump-ipa-cp" } */
+/* { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" } */
 
 struct data {
     data(int);
Index: testsuite/g++.dg/ipa/pr60640-4.C
===================================================================
--- testsuite/g++.dg/ipa/pr60640-4.C    (revision 216286)
+++ testsuite/g++.dg/ipa/pr60640-4.C    (working copy)
@@ -1,5 +1,5 @@
 // { dg-do run }
-// { dg-options "-O3 -fdump-ipa-cp" }
+// { dg-options "-O3 -fdump-ipa-cp -fdevirtualize" }
 
 struct Distraction
 {
Index: testsuite/g++.dg/ipa/type-inheritance-1.C
===================================================================
--- testsuite/g++.dg/ipa/type-inheritance-1.C   (revision 216286)
+++ testsuite/g++.dg/ipa/type-inheritance-1.C   (working copy)
@@ -1,7 +1,7 @@
 /* Verify that callgraph construction keeps FOO for possible devirtualization
    and removes BAR.  */
 /* { dg-do compile } */
-/* { dg-options "-O2 -fdump-ipa-visibility"  } */
+/* { dg-options "-O2 -fdump-ipa-visibility -fdevirtualize"  } */
 
 extern "C" void abort (void);
 
Index: testsuite/g++.dg/opt/devirt1.C
===================================================================
--- testsuite/g++.dg/opt/devirt1.C      (revision 216286)
+++ testsuite/g++.dg/opt/devirt1.C      (working copy)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-O2" }
+// { dg-options "-O2 -fdevirtualize" }
 // { dg-final { scan-assembler "xyzzy" } }
 
 struct S { S(); virtual void xyzzy(); };
Index: testsuite/g++.dg/opt/devirt2.C
===================================================================
--- testsuite/g++.dg/opt/devirt2.C      (revision 216286)
+++ testsuite/g++.dg/opt/devirt2.C      (working copy)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-O2" }
+// { dg-options "-O2 -fdevirtualize" }
 /* Using -mshort-calls avoids loading the function addresses in
    registers and thus getting the counts wrong.  */
 // { dg-additional-options "-mshort-calls" {target epiphany-*-*} }
Index: testsuite/g++.dg/opt/devirt3.C
===================================================================
--- testsuite/g++.dg/opt/devirt3.C      (revision 216286)
+++ testsuite/g++.dg/opt/devirt3.C      (working copy)
@@ -1,5 +1,5 @@
 // { dg-do compile }
-// { dg-options "-O2" }
+// { dg-options "-O2 -fdevirtualize" }
 
 class ert_RefCounter {
  protected:

Reply via email to