From 813ccd83aef21bfaee56ea3d84ce5bf6c60984f7 Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Mon, 16 Nov 2015 12:40:33 +0000 Subject: [PATCH] Remove first_pass_instance from pass_object_sizes 2015-11-16 Tom de Vries * 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 | 11 +++++++++++ gcc/passes.def | 4 ++-- gcc/tree-object-size.c | 14 +++++++++++--- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 3ab8e652ced..43873c43fe1 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,14 @@ +2015-11-16 Tom de Vries + + * 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 * passes.def: Add arg to pass_dominator pass instantiation. diff --git a/gcc/passes.def b/gcc/passes.def index d274a950d9b..64883a79ecc 100644 --- a/gcc/passes.def +++ b/gcc/passes.def @@ -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); diff --git a/gcc/tree-object-size.c b/gcc/tree-object-size.c index fa3625c0af6..459e65d40a6 100644 --- a/gcc/tree-object-size.c +++ b/gcc/tree-object-size.c @@ -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)) -- 2.30.2