From a2cec7463f8cade21f2310ea34cb925e69776cba Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Wed, 24 Nov 2021 12:17:16 -0800 Subject: [PATCH] suppress unneeded initializations --- src/script_opt/CPP/Driver.cc | 20 ++++++++++---------- src/script_opt/CPP/Inits.cc | 3 +++ src/script_opt/ScriptOpt.cc | 26 +++++++++++++------------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/src/script_opt/CPP/Driver.cc b/src/script_opt/CPP/Driver.cc index dd7348ddca..5aec30b95a 100644 --- a/src/script_opt/CPP/Driver.cc +++ b/src/script_opt/CPP/Driver.cc @@ -64,6 +64,12 @@ void CPPCompile::Compile(bool report_uncompilable) // previously compiled instances of those if present. for ( const auto& func : funcs ) { + if ( func.ShouldSkip() ) + { + not_fully_compilable.insert(func.Func()->Name()); + continue; + } + if ( func.Func()->Flavor() != FUNC_FLAVOR_FUNCTION ) // Can't be called directly. continue; @@ -94,7 +100,6 @@ void CPPCompile::Compile(bool report_uncompilable) { TypePtr tp{NewRef{}, (Type*)(t)}; types.AddKey(tp, pfs.HashType(t)); - (void)RegisterType(tp); } // ### This doesn't work for -O add-C++ @@ -102,13 +107,6 @@ void CPPCompile::Compile(bool report_uncompilable) NL(); -#if 0 - for ( auto gi : all_global_info ) - Emit(gi->Declare()); - - NL(); -#endif - for ( auto& g : pfs.AllGlobals() ) CreateGlobal(g); @@ -126,7 +124,8 @@ void CPPCompile::Compile(bool report_uncompilable) // The scaffolding is now in place to go ahead and generate // the functions & lambdas. First declare them ... for ( const auto& func : funcs ) - DeclareFunc(func); + if ( ! func.ShouldSkip() ) + DeclareFunc(func); // We track lambdas by their internal names, because two different // LambdaExpr's can wind up referring to the same underlying lambda @@ -148,7 +147,8 @@ void CPPCompile::Compile(bool report_uncompilable) // ... and now generate their bodies. for ( const auto& func : funcs ) - CompileFunc(func); + if ( ! func.ShouldSkip() ) + CompileFunc(func); lambda_names.clear(); for ( const auto& l : pfs.Lambdas() ) diff --git a/src/script_opt/CPP/Inits.cc b/src/script_opt/CPP/Inits.cc index 2e51b95412..d462f19a82 100644 --- a/src/script_opt/CPP/Inits.cc +++ b/src/script_opt/CPP/Inits.cc @@ -240,6 +240,9 @@ void CPPCompile::GenStandaloneActivation() for ( const auto& func : funcs ) { + if ( func.ShouldSkip() ) + continue; + auto f = func.Func(); auto fname = BodyName(func); auto bname = Canonicalize(fname.c_str()) + "_zf"; diff --git a/src/script_opt/ScriptOpt.cc b/src/script_opt/ScriptOpt.cc index 2940b1b5ec..311f8d8e7b 100644 --- a/src/script_opt/ScriptOpt.cc +++ b/src/script_opt/ScriptOpt.cc @@ -382,19 +382,6 @@ static void generate_CPP(std::unique_ptr& pfs) auto hm = std::make_unique(hash_name.c_str()); - if ( analysis_options.gen_CPP ) - { - if ( analysis_options.only_func ) - { // deactivate all functions except the target one - for ( auto& func : funcs ) - { - auto fn = func.Func()->Name(); - if ( *analysis_options.only_func != fn ) - func.SetSkip(true); - } - } - } - const auto gen_name = hash_dir + "CPP-gen.cc"; const auto addl_name = hash_dir + "CPP-gen-addl.h"; @@ -551,6 +538,19 @@ void analyze_scripts() // No work to do, avoid profiling overhead. return; + if ( analysis_options.gen_CPP ) + { + if ( analysis_options.only_func ) + { // deactivate all functions except the target one + for ( auto& func : funcs ) + { + auto fn = func.Func()->Name(); + if ( *analysis_options.only_func != fn ) + func.SetSkip(true); + } + } + } + // Now that everything's parsed and BiF's have been initialized, // profile the functions. auto pfs = std::make_unique(funcs, is_CPP_compilable, false);