1 /* Optimization information.
2 Copyright (C) 2018 Free Software Foundation, Inc.
3 Contributed by David Malcolm <dmalcolm@redhat.com>.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify it under
8 the terms of the GNU General Public License as published by the Free
9 Software Foundation; either version 3, or (at your option) any later
12 GCC is distributed in the hope that it will be useful, but WITHOUT ANY
13 WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>. */
23 #include "coretypes.h"
30 #include "optinfo-emit-json.h"
31 #include "dump-context.h"
32 #include "pretty-print.h"
33 #include "gimple-pretty-print.h"
37 /* optinfo_item's ctor. Takes ownership of TEXT. */
39 optinfo_item::optinfo_item (enum optinfo_item_kind kind
, location_t location
,
41 : m_kind (kind
), m_location (location
), m_text (text
)
45 /* optinfo_item's dtor. */
47 optinfo_item::~optinfo_item ()
52 /* Get a string from KIND. */
55 optinfo_kind_to_string (enum optinfo_kind kind
)
61 case OPTINFO_KIND_SUCCESS
:
63 case OPTINFO_KIND_FAILURE
:
65 case OPTINFO_KIND_NOTE
:
67 case OPTINFO_KIND_SCOPE
:
79 FOR_EACH_VEC_ELT (m_items
, i
, item
)
83 /* Add ITEM to this optinfo. */
86 optinfo::add_item (optinfo_item
*item
)
89 m_items
.safe_push (item
);
92 /* Emit the optinfo to all of the "non-immediate" destinations
93 (emission to "immediate" destinations is done by emit_item). */
98 /* -fsave-optimization-record. */
99 optimization_records_maybe_record_optinfo (this);
102 /* Update the optinfo's kind based on DUMP_KIND. */
105 optinfo::handle_dump_file_kind (dump_flags_t dump_kind
)
107 if (dump_kind
& MSG_OPTIMIZED_LOCATIONS
)
108 m_kind
= OPTINFO_KIND_SUCCESS
;
109 else if (dump_kind
& MSG_MISSED_OPTIMIZATION
)
110 m_kind
= OPTINFO_KIND_FAILURE
;
111 else if (dump_kind
& MSG_NOTE
)
112 m_kind
= OPTINFO_KIND_NOTE
;
115 /* Should optinfo instances be created?
116 All creation of optinfos should be guarded by this predicate.
117 Return true if any optinfo destinations are active. */
119 bool optinfo_enabled_p ()
121 return (dump_context::get ().forcibly_enable_optinfo_p ()
122 || optimization_records_enabled_p ());
125 /* Return true if any of the active optinfo destinations make use
126 of inlining information.
127 (if true, then the information is preserved). */
129 bool optinfo_wants_inlining_info_p ()
131 return optimization_records_enabled_p ();