Remove first_pass_instance from pass_object_sizes
authorTom de Vries <tom@codesourcery.com>
Mon, 16 Nov 2015 12:40:33 +0000 (12:40 +0000)
committerTom de Vries <vries@gcc.gnu.org>
Mon, 16 Nov 2015 12:40:33 +0000 (12:40 +0000)
2015-11-16  Tom de Vries  <tom@codesourcery.com>

* passes.def: Add arg to pass_object_sizes pass instantiation.
* tree-object-size.c (pass_object_sizes::pass_object_sizes): Initialize
insert_min_max_p.
(pass_object_sizes::set_pass_param): New member function.  Set
insert_min_max_p.
(pass_object_sizes::insert_min_max_p): New private member.
(pass_object_sizes::execute): Use insert_min_max_p instead of
first_pass_instance.

From-SVN: r230418

gcc/ChangeLog
gcc/passes.def
gcc/tree-object-size.c

index 3ab8e652cedc75f56ac09c3bee136d43f1a50fe9..43873c43fe1e0935d880087a82ed2023c73e340e 100644 (file)
@@ -1,3 +1,14 @@
+2015-11-16  Tom de Vries  <tom@codesourcery.com>
+
+       * passes.def: Add arg to pass_object_sizes pass instantiation.
+       * tree-object-size.c (pass_object_sizes::pass_object_sizes): Initialize
+       insert_min_max_p.
+       (pass_object_sizes::set_pass_param): New member function.  Set
+       insert_min_max_p.
+       (pass_object_sizes::insert_min_max_p): New private member.
+       (pass_object_sizes::execute): Use insert_min_max_p instead of
+       first_pass_instance.
+
 2015-11-16  Tom de Vries  <tom@codesourcery.com>
 
        * passes.def: Add arg to pass_dominator pass instantiation.
index d274a950d9b3754d23ab0bb3328efa6841954fe5..64883a79eccf1ec922d5130def4b45cc063fd8f1 100644 (file)
@@ -77,7 +77,7 @@ along with GCC; see the file COPYING3.  If not see
       NEXT_PASS (pass_all_early_optimizations);
       PUSH_INSERT_PASSES_WITHIN (pass_all_early_optimizations)
          NEXT_PASS (pass_remove_cgraph_callee_edges);
-         NEXT_PASS (pass_object_sizes);
+         NEXT_PASS (pass_object_sizes, true /* insert_min_max_p */);
          NEXT_PASS (pass_ccp);
          /* After CCP we rewrite no longer addressed locals into SSA
             form if possible.  */
@@ -164,7 +164,7 @@ along with GCC; see the file COPYING3.  If not see
       NEXT_PASS (pass_backprop);
       NEXT_PASS (pass_phiprop);
       NEXT_PASS (pass_forwprop);
-      NEXT_PASS (pass_object_sizes);
+      NEXT_PASS (pass_object_sizes, false /* insert_min_max_p */);
       /* pass_build_alias is a dummy pass that ensures that we
         execute TODO_rebuild_alias at this point.  */
       NEXT_PASS (pass_build_alias);
index fa3625c0af66d83f50a6a6ae1550a5d02e9f4886..459e65d40a6cb73c5a94b5993674b1d3529e96b7 100644 (file)
@@ -1217,13 +1217,21 @@ class pass_object_sizes : public gimple_opt_pass
 {
 public:
   pass_object_sizes (gcc::context *ctxt)
-    : gimple_opt_pass (pass_data_object_sizes, ctxt)
+    : gimple_opt_pass (pass_data_object_sizes, ctxt), insert_min_max_p (false)
   {}
 
   /* opt_pass methods: */
   opt_pass * clone () { return new pass_object_sizes (m_ctxt); }
+  void set_pass_param (unsigned int n, bool param)
+    {
+      gcc_assert (n == 0);
+      insert_min_max_p = param;
+    }
   virtual unsigned int execute (function *);
 
+ private:
+  /* Determines whether the pass instance creates MIN/MAX_EXPRs.  */
+  bool insert_min_max_p;
 }; // class pass_object_sizes
 
 /* Dummy valueize function.  */
@@ -1250,12 +1258,12 @@ pass_object_sizes::execute (function *fun)
 
          init_object_sizes ();
 
-         /* In the first pass instance, only attempt to fold
+         /* If insert_min_max_p, only attempt to fold
             __builtin_object_size (x, 1) and __builtin_object_size (x, 3),
             and rather than folding the builtin to the constant if any,
             create a MIN_EXPR or MAX_EXPR of the __builtin_object_size
             call result and the computed constant.  */
-         if (first_pass_instance)
+         if (insert_min_max_p)
            {
              tree ost = gimple_call_arg (call, 1);
              if (tree_fits_uhwi_p (ost))