Fix loop-level instrumentation + more (#32)

- fix loop-level instrumentation
- support loop instrumentation w/o debug symbols via loop number
- improve module_function messages
- serialize num_basic_blocks
- serialize num_outer_loops
- serialize is_num_instructions_constrained
- serialize is_loop_num_instructions_constrained
- updated transpose example to use uniform_int_distribution
- added transpose loop test
- added fail regexes for tests which enable loop instrumentation
- use module->getFullName in get_loop_file_line_info
- use module->getFullName in get_func_file_line_info
- use module->getFullName in get_basic_block_file_line_info

[ROCm/rocprofiler-systems commit: a640fbdb29]
Tá an tiomantas seo le fáil i:
Jonathan R. Madsen
2022-06-10 06:57:50 -05:00
tiomanta ag GitHub
tuismitheoir 5c1e6ea127
tiomantas 2eb4b4981c
D'athraigh 9 comhad le 207 breiseanna agus 98 scriosta
@@ -98,7 +98,7 @@ struct module_function
basic_loop_vec_t loop_blocks = {};
std::vector<std::vector<instruction_t>> instructions = {};
using str_msg_t = std::tuple<int, string_t, string_t, string_t>;
using str_msg_t = std::tuple<int, string_t, string_t, string_t, string_t>;
using str_msg_vec_t = std::vector<str_msg_t>;
mutable str_msg_vec_t messages = {};
@@ -183,6 +183,8 @@ module_function::serialize(ArchiveT& ar, const unsigned)
if constexpr(tim::concepts::is_output_archive<ArchiveT>::value)
{
ar(cereal::make_nvp("num_basic_blocks", basic_blocks.size()),
cereal::make_nvp("num_outer_loops", loop_blocks.size()));
ar.setNextName("heuristics");
ar.startNode();
ar(cereal::make_nvp("should_instrument", should_instrument()),
@@ -202,10 +204,12 @@ module_function::serialize(ArchiveT& ar, const unsigned)
cereal::make_nvp("is_dynamic_callsite_forced", is_dynamic_callsite_forced()),
cereal::make_nvp("is_address_range_constrained",
is_address_range_constrained()),
cereal::make_nvp("is_num_instructions_constrained",
is_num_instructions_constrained()),
cereal::make_nvp("is_loop_address_range_constrained",
is_loop_address_range_constrained()),
cereal::make_nvp("is_num_instructions_constrained",
is_num_instructions_constrained()));
cereal::make_nvp("is_loop_num_instructions_constrained",
is_loop_num_instructions_constrained()));
ar.finishNode();
// instructions can inflate JSON size so only output when verbosity is increased
// above default