// Split dwarf information (GCC 4.8 and up). Contains pathname if not empty.
std::string output_dwo;
+ // The path to the ipa clones (implicit when using -fdump-ipa-clones).
+ std::string output_ipa;
+
// Assembler listing file.
std::string output_al;
// Is the compiler being asked to output stack usage?
bool generating_stackusage = false;
+ bool generating_ipa_clones = false;
+
bool generating_callgraphinfo = false;
// Us the compiler being asked to generate diagnostics
return Statistic::none;
}
+ if (arg == "-fdump-ipa-clones") {
+ args_info.generating_ipa_clones = true;
+ state.common_args.push_back(args[i]);
+ return Statistic::none;
+ }
+
// These are always too hard.
if (compopt_too_hard(arg) || util::starts_with(arg, "-fdump-")
|| util::starts_with(arg, "-MJ")
pstr(core::make_relative_path(ctx, default_cifile_name)).str();
}
+ if (args_info.generating_ipa_clones) {
+ fs::path ipa_path(args_info.orig_input_file);
+ ipa_path += ".000i.ipa-clones";
+ args_info.output_ipa =
+ pstr(core::make_relative_path(ctx, ipa_path.string())).str();
+ }
+
Args compiler_args = state.common_args;
compiler_args.push_back(state.compiler_only_args_no_hash);
compiler_args.push_back(state.compiler_only_args);
LOG("Callgraph info file {} missing", ctx.args_info.output_ci);
return false;
}
+ if (ctx.args_info.generating_ipa_clones
+ && !serializer.add_file(core::Result::FileType::ipa_clones,
+ ctx.args_info.output_ipa)) {
+ LOG("IPA clones file {} missing", ctx.args_info.output_ipa);
+ return false;
+ }
if (ctx.args_info.generating_diagnostics
&& !serializer.add_file(core::Result::FileType::diagnostic,
ctx.args_info.output_dia)) {
case FileType::callgraph_info:
return ".ci";
+
+ case FileType::ipa_clones:
+ return ".000i.ipa-clones";
}
return k_unknown_file_type;
// callgraph info file generated by -fcallgraph-info, i.e. output file but
// with a .ci extension.
callgraph_info = 11,
+
+ // ipa clones generated by -fdump-ipa-clones, i.e. output file but with a
+ // .000i.ipa-clones extension.
+ ipa_clones = 12,
};
const char* file_type_to_string(FileType type);
return m_ctx.args_info.output_ci;
}
break;
+ case FileType::ipa_clones:
+ if (m_ctx.args_info.generating_ipa_clones) {
+ return m_ctx.args_info.output_ipa;
+ }
+ break;
}
return {};