mirror of
https://github.com/zeek/zeek.git
synced 2025-10-02 06:38:20 +00:00
Merge remote-tracking branch 'origin/topic/vern/zam-regularization'
* origin/topic/vern/zam-regularization: (33 commits) simpler and more robust identification of function parameters for AST profiling fixes to limit AST traversal in the face of recursive types address some script optimization compiler warnings under Linux fix for -O C++ construction of variable names that use multiple module namespaces fix for script optimization of "opaque" values that are run-time constants fix for script optimization of nested switch statements script optimization fix for complex "in" expressions in conditionals updates to typos allow-list reflecting ZAM regularization changes BTest updates for ZAM regularization changes convert new ZAM operations to use typed operands complete migration of ZAM to use only public ZVal methods "-O validate-ZAM" option to validate generated ZAM instructions internal option to suppress control-flow optimization exposing some functionality for greater flexibility in structuring run-time execution rework ZAM compilation of type switches to leverage value switches add tracking of control flow information factoring of ZAM operation specifications into separate files updates to ZAM operations / gen-zam regularization, other than the operations themselves type-checking fix for vector-of-string operations ZVal constructor for booleans ...
This commit is contained in:
commit
ec1088c3ef
78 changed files with 4410 additions and 3917 deletions
|
@ -271,6 +271,7 @@ static void init_options() {
|
|||
check_env_opt("ZEEK_REPORT_UNCOMPILABLE", analysis_options.report_uncompilable);
|
||||
check_env_opt("ZEEK_ZAM_CODE", analysis_options.gen_ZAM_code);
|
||||
check_env_opt("ZEEK_NO_ZAM_OPT", analysis_options.no_ZAM_opt);
|
||||
check_env_opt("ZEEK_NO_ZAM_CONTROL_FLOW_OPT", analysis_options.no_ZAM_control_flow_opt);
|
||||
check_env_opt("ZEEK_DUMP_ZAM", analysis_options.dump_ZAM);
|
||||
check_env_opt("ZEEK_PROFILE", analysis_options.profile_ZAM);
|
||||
|
||||
|
@ -391,7 +392,7 @@ static void use_CPP() {
|
|||
|
||||
int num_used = 0;
|
||||
|
||||
auto pfs = std::make_unique<ProfileFuncs>(funcs, is_CPP_compilable, false);
|
||||
auto pfs = std::make_unique<ProfileFuncs>(funcs, is_CPP_compilable, true, false);
|
||||
|
||||
for ( auto& f : funcs ) {
|
||||
auto hash = f.Profile()->HashVal();
|
||||
|
@ -429,18 +430,16 @@ static void use_CPP() {
|
|||
reporter->FatalError("no C++ functions found to use");
|
||||
}
|
||||
|
||||
static void generate_CPP() {
|
||||
static void generate_CPP(std::shared_ptr<ProfileFuncs> pfs) {
|
||||
const auto gen_name = CPP_dir + "CPP-gen.cc";
|
||||
|
||||
const bool standalone = analysis_options.gen_standalone_CPP;
|
||||
const bool report = analysis_options.report_uncompilable;
|
||||
|
||||
auto pfs = std::make_shared<ProfileFuncs>(funcs, is_CPP_compilable, false);
|
||||
|
||||
CPPCompile cpp(funcs, pfs, gen_name, standalone, report);
|
||||
}
|
||||
|
||||
static void analyze_scripts_for_ZAM() {
|
||||
static void analyze_scripts_for_ZAM(std::shared_ptr<ProfileFuncs> pfs) {
|
||||
if ( analysis_options.usage_issues > 0 && analysis_options.optimize_AST ) {
|
||||
fprintf(stderr,
|
||||
"warning: \"-O optimize-AST\" option is incompatible with -u option, "
|
||||
|
@ -448,8 +447,6 @@ static void analyze_scripts_for_ZAM() {
|
|||
analysis_options.optimize_AST = false;
|
||||
}
|
||||
|
||||
auto pfs = std::make_shared<ProfileFuncs>(funcs, nullptr, true);
|
||||
|
||||
if ( analysis_options.profile_ZAM ) {
|
||||
#ifdef ENABLE_ZAM_PROFILE
|
||||
AST_blocks = std::make_unique<ASTBlockAnalyzer>(funcs);
|
||||
|
@ -505,12 +502,12 @@ static void analyze_scripts_for_ZAM() {
|
|||
|
||||
if ( ! analysis_options.compile_all && ! is_lambda && inl && inl->WasFullyInlined(func.get()) &&
|
||||
func_used_indirectly.count(func.get()) == 0 ) {
|
||||
// No need to compile as it won't be called directly.
|
||||
// We'd like to zero out the body to recover the
|
||||
// memory, but a *few* such functions do get called,
|
||||
// such as by the event engine reaching up, or
|
||||
// BiFs looking for them, so we can't safely zero
|
||||
// them.
|
||||
// No need to compile as it won't be called directly. We'd
|
||||
// like to zero out the body to recover the memory, but a *few*
|
||||
// such functions do get called, such as by the event engine
|
||||
// reaching up, or BiFs looking for them, so we can't safely
|
||||
// zero them.
|
||||
f.SetSkip(true);
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -558,6 +555,11 @@ void clear_script_analysis() {
|
|||
void analyze_scripts(bool no_unused_warnings) {
|
||||
init_options();
|
||||
|
||||
if ( analysis_options.validate_ZAM ) {
|
||||
validate_ZAM_insts();
|
||||
return;
|
||||
}
|
||||
|
||||
// Any standalone compiled scripts have already been instantiated
|
||||
// at this point, but may require post-loading-of-scripts finalization.
|
||||
for ( auto cb : standalone_finalizations )
|
||||
|
@ -601,6 +603,7 @@ void analyze_scripts(bool no_unused_warnings) {
|
|||
}
|
||||
|
||||
if ( analysis_options.report_CPP ) {
|
||||
auto pfs = std::make_unique<ProfileFuncs>(funcs, is_CPP_compilable, true, false);
|
||||
report_CPP();
|
||||
exit(0);
|
||||
}
|
||||
|
@ -608,17 +611,23 @@ void analyze_scripts(bool no_unused_warnings) {
|
|||
if ( analysis_options.use_CPP )
|
||||
use_CPP();
|
||||
|
||||
std::shared_ptr<ProfileFuncs> pfs;
|
||||
// Note, in the following it's not clear whether the final argument
|
||||
// for absolute/relative record fields matters any more ...
|
||||
if ( generating_CPP )
|
||||
pfs = std::make_shared<ProfileFuncs>(funcs, is_CPP_compilable, true, false);
|
||||
else
|
||||
pfs = std::make_shared<ProfileFuncs>(funcs, nullptr, true, true);
|
||||
|
||||
if ( generating_CPP ) {
|
||||
if ( analysis_options.gen_ZAM )
|
||||
reporter->FatalError("-O ZAM and -O gen-C++ conflict");
|
||||
|
||||
generate_CPP();
|
||||
generate_CPP(pfs);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
// At this point we're done with C++ considerations, so instead
|
||||
// are compiling to ZAM.
|
||||
analyze_scripts_for_ZAM();
|
||||
analyze_scripts_for_ZAM(pfs);
|
||||
|
||||
if ( reporter->Errors() > 0 )
|
||||
reporter->FatalError("Optimized script execution aborted due to errors");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue