===================================================================
@@ -252,6 +252,7 @@ along with GCC; see the file COPYING3.
NEXT_PASS (pass_cse_reciprocals);
NEXT_PASS (pass_reassoc);
NEXT_PASS (pass_strength_reduction);
+ NEXT_PASS (pass_tracer);
NEXT_PASS (pass_dominator);
NEXT_PASS (pass_strlen);
NEXT_PASS (pass_vrp);
@@ -262,7 +263,6 @@ along with GCC; see the file COPYING3.
opportunities. */
NEXT_PASS (pass_phi_only_cprop);
NEXT_PASS (pass_cd_dce);
- NEXT_PASS (pass_tracer);
NEXT_PASS (pass_dse);
NEXT_PASS (pass_forwprop);
NEXT_PASS (pass_phiopt);
===================================================================
@@ -0,0 +1,52 @@
+// devirt.cc
+/* { dg-options "-O2 -fdump-ipa-profile_estimate -fdump-tree-optimized" } */
+
+class A {
+public:
+ virtual int foo() {
+ return 1;
+ }
+
+int i;
+};
+
+class B : public A
+{
+public:
+ virtual int foo() {
+ return 2;
+ }
+
+ int b;
+} ;
+
+
+int main()
+{
+ int i;
+
+ A* ap = 0;
+
+ for (i = 0; i < 10000; i++)
+ {
+
+ if (i%7==0)
+ {
+ ap = new A();
+ }
+ else
+ ap = new B();
+
+ ap->foo();
+
+ delete ap;
+
+ }
+
+ return 0;
+
+}
+/* { dg-final-use { scan-ipa-dump "Indirect call -> direct call" "profile_estimate" } } */
+/* { dg-final-use { cleanup-ipa-dump "profile" } } */
+/* { dg-final-use { scan-ipa-dump-not "OBJ_TYPE_REF" "optimized" } } */
+/* { dg-final-use { cleanup-tree-dump "optimized" } } */