diff --git a/static_core/CMakeLists.txt b/static_core/CMakeLists.txt index ddc400a3f4bbc829ba18cc5603b9d86d4946b7f5..63d72c8c4d0489f4112e8945bd146ff267437585 100644 --- a/static_core/CMakeLists.txt +++ b/static_core/CMakeLists.txt @@ -347,7 +347,7 @@ if(PANDA_WITH_TESTS) ) if (NOT PANDA_TARGET_MACOS) - add_dependencies(tests_full code-style-check) + add_dependencies(tests_full code-style-check doxygen-style-check clang-tidy-llvmbackend) endif() add_subdirectory(scripts) diff --git a/static_core/README.md b/static_core/README.md index 9ec24404249a034a2e858d282ba1c45e5bde884d..26247e6753186eda7ed0ecabff0c55de7e62c488 100644 --- a/static_core/README.md +++ b/static_core/README.md @@ -1,3 +1,9 @@ +# Experimental LLVM-Ark integration repository + +Panda version with experimental LLVM AOT / LLVM IRTOC changes. + +# Original Ark Runtime README + # Bootstrapping Currently an officially supported host OS for development, building and testing is Ubuntu 18.04 and Ubuntu 20.04. diff --git a/static_core/cmake/ClangTidy.cmake b/static_core/cmake/ClangTidy.cmake index 1d6bf74d85ca1e58670a196ae197721e5058f0f1..444bf268bfc6ac7bf48007b44fd9bd64a00494e3 100644 --- a/static_core/cmake/ClangTidy.cmake +++ b/static_core/cmake/ClangTidy.cmake @@ -40,3 +40,9 @@ add_custom_target(test-cmake-checker COMMAND ${PANDA_ROOT}/scripts/cmake-checker/cmake_checker.py ${PANDA_ROOT} TEST USES_TERMINAL ) + +add_custom_target(clang-tidy-llvmbackend + COMMAND ${PANDA_ROOT}/scripts/clang-tidy/clang_tidy_check.py ${PANDA_ROOT} ${PANDA_BINARY_ROOT} "--cfg-filter=${PANDA_ROOT}/scripts/clang-tidy/clang-tidy_llvm_config.json" + USES_TERMINAL + DEPENDS panda_gen_files +) diff --git a/static_core/compiler/tools/paoc/paoc.cpp b/static_core/compiler/tools/paoc/paoc.cpp index e1b025265030a216dae970e6e5b9941bda75bff7..57b0a4aefe573f265999fac5e5c4ec8aff1f0efc 100644 --- a/static_core/compiler/tools/paoc/paoc.cpp +++ b/static_core/compiler/tools/paoc/paoc.cpp @@ -64,7 +64,7 @@ void Paoc::CompilingContext::DumpStatistics() const { ASSERT(stats); char sep = ','; - *stats << method->GetFullName() << sep; + *stats << '"' << method->GetFullName(true) << '"' << sep; *stats << "paoc-summary" << sep; *stats << allocator.GetAllocatedSize() << sep; *stats << graphLocalAllocator.GetAllocatedSize() << '\n'; diff --git a/static_core/libllvmbackend/BUILD.gn b/static_core/libllvmbackend/BUILD.gn index 59356034f58998df68c79b8a68cf231f52ecc46d..395a68e9632c18dff2b1e563e5edec22067a1590 100644 --- a/static_core/libllvmbackend/BUILD.gn +++ b/static_core/libllvmbackend/BUILD.gn @@ -195,12 +195,13 @@ if (is_llvmbackend) { extra_dependencies = [ "$ark_root/runtime:arkruntime_gen_intrinsics_yaml" ] } - entrypoints_yaml = "$ark_root/runtime/entrypoints/entrypoints.yaml" + entrypoints_yaml = rebase_path("$target_gen_dir/../runtime/entrypoints.yaml") ark_gen_file("libllvmbackend_entrypoints_gen_inl") { template_file = "$llvmbackend_templates_dir/entrypoints_gen.inl.erb" data = [ entrypoints_yaml ] api = [ "$llvmbackend_templates_dir/entrypoints.rb" ] output_file = "$target_gen_dir/entrypoints_gen.inl" + extra_dependencies = [ "$ark_root:concat_entrypoints_yamls" ] } ark_gen_file("libllvmbackend_entrypoints_llvm_ark_interface_gen_inl") { @@ -209,6 +210,7 @@ if (is_llvmbackend) { data = [ entrypoints_yaml ] api = [ "$llvmbackend_templates_dir/entrypoints.rb" ] output_file = "$target_gen_dir/entrypoints_llvm_ark_interface_gen.inl" + extra_dependencies = [ "$ark_root:concat_entrypoints_yamls" ] } ark_gen_file("libllvmbackend_llvm_passes_inl") { diff --git a/static_core/libllvmbackend/CMakeLists.txt b/static_core/libllvmbackend/CMakeLists.txt index d5f009d5806fa6f9cba7b21df8468b484a1962bd..30c6db24d929abfb1a5e3aeae8be16aa57bc4e45 100644 --- a/static_core/libllvmbackend/CMakeLists.txt +++ b/static_core/libllvmbackend/CMakeLists.txt @@ -228,7 +228,7 @@ endif() panda_target_compile_options(llvmbackend PUBLIC "-Wno-unused-parameter") -panda_target_compile_definitions(llvmbackend PUBLIC REQUIRED_LLVM_VERSION=15.0.4-ark18) +panda_target_compile_definitions(llvmbackend PUBLIC REQUIRED_LLVM_VERSION=15.0.4-ark19) if (PANDA_LLVM_AOT AND PANDA_TARGET_AMD64 AND PANDA_COMPILER_TARGET_AARCH64 AND PANDA_WITH_TESTS) set(PANDA_LLVM_AOT_TESTS_SOURCES diff --git a/static_core/libllvmbackend/llvm.gni b/static_core/libllvmbackend/llvm.gni index 227919178f862f919b452f068e9f78f072a26150..b47bf0dbd101d2b4c8392425e9c91f24f3f45d8c 100644 --- a/static_core/libllvmbackend/llvm.gni +++ b/static_core/libllvmbackend/llvm.gni @@ -11,7 +11,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -llvm_version = "15.0.4-ark18" +llvm_version = "15.0.4-ark19" llvm_lib_file_suffix = "lib/libLLVM-15.so" declare_args() { diff --git a/static_core/libllvmbackend/llvm_aot_compiler.cpp b/static_core/libllvmbackend/llvm_aot_compiler.cpp index e19bdd6e902b158dd6daa2efc91ff913dc23b956..7efa104e859c6ea3d35917221f1dd94a10e619f6 100644 --- a/static_core/libllvmbackend/llvm_aot_compiler.cpp +++ b/static_core/libllvmbackend/llvm_aot_compiler.cpp @@ -503,10 +503,6 @@ LLVMAotCompiler::LLVMAotCompiler(compiler::RuntimeInterface *runtime, ArenaAlloc if (arch == Arch::AARCH64) { SetLLVMOption("aarch64-enable-ptr32", "true"); } - if (static_cast(aotBuilder->GetGcType()) != mem::GCType::G1_GC) { - // NOTE(zdenis): workaround to prevent vector stores of adjacent references - SetLLVMOption("vectorize-slp", "false"); - } spreader_ = std::make_unique( runtime_, g_options.GetLlvmaotMethodsPerModule(), diff --git a/static_core/libllvmbackend/llvm_irtoc_compiler.cpp b/static_core/libllvmbackend/llvm_irtoc_compiler.cpp index 7d5e20f75e3ba7ddde4dcfa4b8372327b9ebf358..46b13c37e12d4d3845dd0f8e82b08b3a5080ee2b 100644 --- a/static_core/libllvmbackend/llvm_irtoc_compiler.cpp +++ b/static_core/libllvmbackend/llvm_irtoc_compiler.cpp @@ -165,6 +165,7 @@ void LLVMIrtocCompiler::InitializeSpecificLLVMOptions(Arch arch) SetLLVMOption("aarch64-enable-ptr32", "true"); } SetLLVMOption("inline-remark-attribute", "true"); + SetLLVMOption("verify-musttail-calls", "false"); LLVMCompiler::InitializeLLVMOptions(); } diff --git a/static_core/libllvmbackend/lowering/llvm_ir_constructor.cpp b/static_core/libllvmbackend/lowering/llvm_ir_constructor.cpp index 4c976f6c02056745f0510cef1622cc0382b14581..987655aebd6c7b3da5ae16b7fc8349edaddd4db3 100644 --- a/static_core/libllvmbackend/lowering/llvm_ir_constructor.cpp +++ b/static_core/libllvmbackend/lowering/llvm_ir_constructor.cpp @@ -423,11 +423,13 @@ bool LLVMIrConstructor::TryEmitIntrinsic(Inst *inst, RuntimeInterface::Intrinsic // Specific intrinsic Emitters -bool LLVMIrConstructor::EmitFastPath(Inst *inst, RuntimeInterface::EntrypointId eid, uint32_t numArgs) +bool LLVMIrConstructor::EmitFastPath(Inst *inst, RuntimeInterface::EntrypointId eid) { - ArenaVector args(GetGraph()->GetLocalAllocator()->Adapter()); - for (uint32_t i = 0; i < numArgs; i++) { - args.push_back(GetInputValue(inst, i)); + llvm::SmallVector args; + for (uint32_t i = 0; i < inst->GetInputsCount(); i++) { + if (!inst->GetInput(i).GetInst()->IsSaveState()) { + args.push_back(GetInputValue(inst, i)); + } } auto call = CreateFastPathCall(inst, eid, args); @@ -440,42 +442,42 @@ bool LLVMIrConstructor::EmitFastPath(Inst *inst, RuntimeInterface::EntrypointId bool LLVMIrConstructor::EmitStringEquals(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_EQUALS_COMPRESSED, 2U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_EQUALS_COMPRESSED); } bool LLVMIrConstructor::EmitStringBuilderBool(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_BUILDER_BOOL, 2U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_BUILDER_BOOL); } bool LLVMIrConstructor::EmitStringBuilderChar(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_BUILDER_CHAR, 2U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_BUILDER_CHAR); } bool LLVMIrConstructor::EmitStringBuilderString(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_BUILDER_STRING_COMPRESSED, 2U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_BUILDER_STRING_COMPRESSED); } bool LLVMIrConstructor::EmitStringConcat2(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_CONCAT2_TLAB, 2U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_CONCAT2_TLAB); } bool LLVMIrConstructor::EmitStringConcat3(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_CONCAT3_TLAB, 3U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_CONCAT3_TLAB); } bool LLVMIrConstructor::EmitStringConcat4(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_CONCAT4_TLAB, 4U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_CONCAT4_TLAB); } bool LLVMIrConstructor::EmitStringCompareTo(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_COMPARE_TO, 2U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_COMPARE_TO); } bool LLVMIrConstructor::EmitIsInf(Inst *inst) @@ -571,7 +573,7 @@ bool LLVMIrConstructor::EmitSlowPathEntry(Inst *inst) auto call = builder_.CreateCall(callee->getFunctionType(), callee, args); call->setCallingConv(callee->getCallingConv()); - call->setTailCallKind(llvm::CallInst::TailCallKind::TCK_Tail); + call->setTailCallKind(llvm::CallInst::TailCallKind::TCK_MustTail); call->addFnAttr(llvm::Attribute::get(call->getContext(), "ark-tail-call")); CreateReturn(call); return true; @@ -689,7 +691,7 @@ bool LLVMIrConstructor::EmitTailCall(Inst *inst) } else { UNREACHABLE(); } - call->setTailCallKind(llvm::CallInst::TailCallKind::TCK_Tail); + call->setTailCallKind(llvm::CallInst::TailCallKind::TCK_MustTail); call->addFnAttr(llvm::Attribute::get(call->getContext(), "ark-tail-call")); CreateReturn(call); std::fill(ccValues_.begin(), ccValues_.end(), nullptr); @@ -2256,6 +2258,7 @@ llvm::CallInst *LLVMIrConstructor::CreateTailCallFastPath(Inst *inst) auto ftype = llvm::FunctionType::get(GetType(inst->GetType()), argTypes, false); callee = llvm::Function::Create(ftype, llvm::Function::ExternalLinkage, externalName, func_->getParent()); cc = func_->getCallingConv(); + callee->setCallingConv(cc); } else { size_t size = func_->arg_size(); ASSERT(callee->arg_size() <= size); @@ -4414,12 +4417,19 @@ void LLVMIrConstructor::VisitIntrinsic(GraphVisitor *v, Inst *inst) if (g_options.IsCompilerEncodeIntrinsics()) { bool lowered = ctor->TryEmitIntrinsic(inst, entryId); if (lowered) { + ASSERT(!inst->NoNullPtr()); return; } } + ASSERT(!EncodesBuiltin(ctor->GetGraph()->GetRuntime(), entryId, ctor->GetGraph()->GetArch())); // Create call otherwise auto result = ctor->CreateIntrinsicCall(inst); if (inst->GetType() != DataType::VOID) { + if (inst->NoNullPtr()) { + ASSERT(inst->GetType() == DataType::REFERENCE); + ASSERT(result->getType()->isPointerTy()); + result->addRetAttr(llvm::Attribute::NonNull); + } ctor->ValueMapAdd(inst, result); } } diff --git a/static_core/libllvmbackend/lowering/llvm_ir_constructor.h b/static_core/libllvmbackend/lowering/llvm_ir_constructor.h index ab8fb64a24a5a3ae5bd4d280e070ac6d07942349..3d99476d24cfb8acc1139e43ffb9b008a9596570 100644 --- a/static_core/libllvmbackend/lowering/llvm_ir_constructor.h +++ b/static_core/libllvmbackend/lowering/llvm_ir_constructor.h @@ -34,7 +34,7 @@ class LLVMIrConstructor : public GraphVisitor { private: // Specific intrinsic Emitters - bool EmitFastPath(Inst *inst, RuntimeInterface::EntrypointId eid, uint32_t numArgs); + bool EmitFastPath(Inst *inst, RuntimeInterface::EntrypointId eid); bool EmitStringEquals(Inst *inst); bool EmitStringBuilderBool(Inst *inst); bool EmitStringBuilderChar(Inst *inst); diff --git a/static_core/libllvmbackend/transforms/passes/aarch64_fixup_sdiv.h b/static_core/libllvmbackend/transforms/passes/aarch64_fixup_sdiv.h index 9f0624444e339d224eaa861827ceb4957cd3cd4e..8587375bb15e67ec2729819a8cd1cfe5da7cf389 100644 --- a/static_core/libllvmbackend/transforms/passes/aarch64_fixup_sdiv.h +++ b/static_core/libllvmbackend/transforms/passes/aarch64_fixup_sdiv.h @@ -31,10 +31,9 @@ public: explicit AArch64FixupSDiv(LLVMArkInterface *arkInterface = nullptr); - static AArch64FixupSDiv Create(LLVMArkInterface *arkInterface, - const ark::llvmbackend::LLVMCompilerOptions *options); + static AArch64FixupSDiv Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } diff --git a/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_builder.h b/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_builder.h index db60c0223d2163edfc282d715be2e9acd9f9f6af..57a98faca8f0bea8657db05f244df5b6e57b05dd 100644 --- a/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_builder.h +++ b/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_builder.h @@ -115,4 +115,4 @@ private: std::string_view asmPairRegs, ssize_t calleeOffset); }; -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_ARK_FRAME_LOWERING_FRAME_BUILDER_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_ARK_FRAME_LOWERING_FRAME_BUILDER_H diff --git a/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_lowering.h b/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_lowering.h index 196315037d605833ac396b0135b00f334c36c586..091af4d2cb9c7147041c8a5616506fb2120a8f57 100644 --- a/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_lowering.h +++ b/static_core/libllvmbackend/transforms/passes/ark_frame_lowering/frame_lowering.h @@ -27,4 +27,4 @@ class LLVMArkInterface; llvm::MachineFunctionPass *CreateFrameLoweringPass(LLVMArkInterface *arkInterface); } // namespace ark::llvmbackend -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_ARK_FRAME_LOWERING_FRAME_LOWERING_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_ARK_FRAME_LOWERING_FRAME_LOWERING_H diff --git a/static_core/libllvmbackend/transforms/passes/ark_gvn.h b/static_core/libllvmbackend/transforms/passes/ark_gvn.h index 6cd42904aaa7d93018c089de18bc0fa816311e28..a2516a416e0186b57103a0d761e676c72a170176 100644 --- a/static_core/libllvmbackend/transforms/passes/ark_gvn.h +++ b/static_core/libllvmbackend/transforms/passes/ark_gvn.h @@ -36,11 +36,11 @@ class ArkGVN : public llvm::PassInfoMixin { public: explicit ArkGVN(LLVMArkInterface *arkInterface = nullptr); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } - static ArkGVN Create(LLVMArkInterface *arkInterface, const ark::llvmbackend::LLVMCompilerOptions *options); + static ArkGVN Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); diff --git a/static_core/libllvmbackend/transforms/passes/ark_inlining.h b/static_core/libllvmbackend/transforms/passes/ark_inlining.h index c67ebd57f52bc954d787f130b1ad4b89b9c09079..0391498f6c8bf68c34bcf5ab17d39fbfa3c7bb7f 100644 --- a/static_core/libllvmbackend/transforms/passes/ark_inlining.h +++ b/static_core/libllvmbackend/transforms/passes/ark_inlining.h @@ -34,7 +34,7 @@ class IrtocInlineChecker : public llvm::PassInfoMixin { public: static constexpr llvm::StringRef ARG_NAME = "irtoc-inline-check"; - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); void CheckShouldInline(llvm::CallBase *callBase); // NOLINTNEXTLINE(readability-identifier-naming) @@ -49,8 +49,8 @@ public: static constexpr llvm::StringRef ARG_NAME = "inline-prepare"; explicit InlinePrepare(llvm::InlineParams inlineParams) : inlineParams_ {inlineParams} {} - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); - static InlinePrepare Create(LLVMArkInterface *arkInterface, const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); + static InlinePrepare Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Module &module, llvm::ModuleAnalysisManager &moduleAm); diff --git a/static_core/libllvmbackend/transforms/passes/ark_speculation.h b/static_core/libllvmbackend/transforms/passes/ark_speculation.h index 112f9104cc00fbab37ca7b91326b40aac2e4255f..e7d06dd21e2aafc856ade2c4e7a2ebb1ee51a1b0 100644 --- a/static_core/libllvmbackend/transforms/passes/ark_speculation.h +++ b/static_core/libllvmbackend/transforms/passes/ark_speculation.h @@ -32,7 +32,7 @@ public: static constexpr llvm::StringRef ARG_NAME = "wrap-speculative-execution"; explicit ArkSpeculativeExecution() : llvm::SpeculativeExecutionPass(ONLY_IF_DIVERGENT_TARGET) {} - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } diff --git a/static_core/libllvmbackend/transforms/passes/check_external.h b/static_core/libllvmbackend/transforms/passes/check_external.h index c599cf8e8071ff0fa10d52b0391cc9750a405c70..4706ec9e8f0b9a18a2206f8a026ee406d58dcdba 100644 --- a/static_core/libllvmbackend/transforms/passes/check_external.h +++ b/static_core/libllvmbackend/transforms/passes/check_external.h @@ -33,7 +33,7 @@ class CheckExternal : public llvm::PassInfoMixin { public: explicit CheckExternal() = default; - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); static CheckExternal Create(); diff --git a/static_core/libllvmbackend/transforms/passes/check_tail_calls.h b/static_core/libllvmbackend/transforms/passes/check_tail_calls.h index 9262ab3dd222b4437ef31a27a03ee221f6d04e36..c949f83711c14dd6e7618db4504da554b95681d4 100644 --- a/static_core/libllvmbackend/transforms/passes/check_tail_calls.h +++ b/static_core/libllvmbackend/transforms/passes/check_tail_calls.h @@ -26,4 +26,4 @@ namespace ark::llvmbackend { llvm::MachineFunctionPass *CreateCheckTailCallsPass(); } // namespace ark::llvmbackend -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_CHECK_TAIL_CALLS_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_CHECK_TAIL_CALLS_H diff --git a/static_core/libllvmbackend/transforms/passes/devirt.h b/static_core/libllvmbackend/transforms/passes/devirt.h index daabdfb691e1077b4471bf2ab5b98f934661436a..d1db364221e42983c3d0320f17ca7fd52c8aa24f 100644 --- a/static_core/libllvmbackend/transforms/passes/devirt.h +++ b/static_core/libllvmbackend/transforms/passes/devirt.h @@ -38,9 +38,9 @@ class Devirt : public llvm::PassInfoMixin { public: explicit Devirt(LLVMArkInterface *arkInterface = nullptr); - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); - static Devirt Create(LLVMArkInterface *arkInterface, const ark::llvmbackend::LLVMCompilerOptions *options); + static Devirt Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); diff --git a/static_core/libllvmbackend/transforms/passes/expand_atomics.h b/static_core/libllvmbackend/transforms/passes/expand_atomics.h index b217ed55839aabeb383ee640daa5485e725a5099..92c27c71d716ac0802e5603be4c17df6821733a5 100644 --- a/static_core/libllvmbackend/transforms/passes/expand_atomics.h +++ b/static_core/libllvmbackend/transforms/passes/expand_atomics.h @@ -30,7 +30,7 @@ public: explicit ExpandAtomics(); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } diff --git a/static_core/libllvmbackend/transforms/passes/fixup_poisons.h b/static_core/libllvmbackend/transforms/passes/fixup_poisons.h index f5d7adb2b7a0f838069e9b8eb209f3391707aa36..63ae3ef7ec55bb076422bd51eb68478d78dd2dd6 100644 --- a/static_core/libllvmbackend/transforms/passes/fixup_poisons.h +++ b/static_core/libllvmbackend/transforms/passes/fixup_poisons.h @@ -31,7 +31,7 @@ public: explicit FixupPoisons(); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } diff --git a/static_core/libllvmbackend/transforms/passes/gc_intrusion.h b/static_core/libllvmbackend/transforms/passes/gc_intrusion.h index e49795d03dbedde7d250b9b2bef9f451ea84ba2d..ab5b0a566f1e20e004b4efc1def8cf2c2e7910b9 100644 --- a/static_core/libllvmbackend/transforms/passes/gc_intrusion.h +++ b/static_core/libllvmbackend/transforms/passes/gc_intrusion.h @@ -30,7 +30,7 @@ class GcRefLiveness; class GcIntrusion : public llvm::PassInfoMixin { public: - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } @@ -96,4 +96,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_GC_INTRUSION_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_GC_INTRUSION_H diff --git a/static_core/libllvmbackend/transforms/passes/gc_intrusion_check.h b/static_core/libllvmbackend/transforms/passes/gc_intrusion_check.h index a01a1554e4c5235993a71067826d7617e9c1886e..f0e023eb7df1ce93515d372297f8ad95a4e52fed 100644 --- a/static_core/libllvmbackend/transforms/passes/gc_intrusion_check.h +++ b/static_core/libllvmbackend/transforms/passes/gc_intrusion_check.h @@ -33,7 +33,7 @@ class GcIntrusionCheck : public llvm::PassInfoMixin { public: static constexpr llvm::StringRef ARG_NAME = "gc-intrusion-check"; - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); @@ -57,4 +57,4 @@ private: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_GC_INTRUSION_CHECK_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_GC_INTRUSION_CHECK_H diff --git a/static_core/libllvmbackend/transforms/passes/gep_propagation.h b/static_core/libllvmbackend/transforms/passes/gep_propagation.h index 1fa0421fd6e2014179d13dfba92533b15d9a1a6b..ca3b9b1624cddffab79b9f6d3206722d94dc2f49 100644 --- a/static_core/libllvmbackend/transforms/passes/gep_propagation.h +++ b/static_core/libllvmbackend/transforms/passes/gep_propagation.h @@ -31,7 +31,7 @@ namespace ark::llvmbackend::passes { class GepPropagation : public llvm::PassInfoMixin { public: - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } @@ -77,4 +77,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_GEP_PROPAGATION_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_GEP_PROPAGATION_H diff --git a/static_core/libllvmbackend/transforms/passes/infer_flags.cpp b/static_core/libllvmbackend/transforms/passes/infer_flags.cpp index 233642e57518f004e388ccf7f889229f900f6944..99679c640bb30d3b43e302afdece8b23f3b18209 100644 --- a/static_core/libllvmbackend/transforms/passes/infer_flags.cpp +++ b/static_core/libllvmbackend/transforms/passes/infer_flags.cpp @@ -58,11 +58,6 @@ bool CanOverflow(const llvm::KnownBits &start, const llvm::KnownBits &step, uint namespace ark::llvmbackend::passes { -bool InferFlags::ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) -{ - return true; -} - llvm::PreservedAnalyses InferFlags::run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager) { LLVM_DEBUG(llvm::dbgs() << "Running on '" << function.getName() << "'\n"); diff --git a/static_core/libllvmbackend/transforms/passes/infer_flags.h b/static_core/libllvmbackend/transforms/passes/infer_flags.h index cee7c37848b2ede45f48cd1e228d9a4200b2ca98..3c196a808ab81374ba53232b4b97d7d58c639772 100644 --- a/static_core/libllvmbackend/transforms/passes/infer_flags.h +++ b/static_core/libllvmbackend/transforms/passes/infer_flags.h @@ -24,10 +24,6 @@ namespace ark::llvmbackend { struct LLVMCompilerOptions; } // namespace ark::llvmbackend -namespace ark::llvmbackend { -class LLVMArkInterface; -} // namespace ark::llvmbackend - namespace ark::llvmbackend::passes { /// Simple pass, that infers "nsw" flag (no signed wrap) to help llvm perform optimizations @@ -35,7 +31,10 @@ class InferFlags : public llvm::PassInfoMixin { public: explicit InferFlags() = default; - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) + { + return true; + } // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); @@ -51,4 +50,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_INFER_FLAGS_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_INFER_FLAGS_H diff --git a/static_core/libllvmbackend/transforms/passes/inline_devirt.h b/static_core/libllvmbackend/transforms/passes/inline_devirt.h index 74286c6742b297b47d99934ef933aeb59ddfb1d3..221efc544d004c073ed5866e4dfd27c2496245cf 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_devirt.h +++ b/static_core/libllvmbackend/transforms/passes/inline_devirt.h @@ -28,9 +28,9 @@ class InlineDevirt : public llvm::PassInfoMixin { public: explicit InlineDevirt(LLVMArkInterface *arkInterface = nullptr, bool doVirtualInline = true); - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); - static InlineDevirt Create(LLVMArkInterface *arkInterface, const ark::llvmbackend::LLVMCompilerOptions *options); + static InlineDevirt Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::LazyCallGraph::SCC &initialSCC, llvm::CGSCCAnalysisManager &analysisManager, @@ -52,8 +52,8 @@ public: private: bool RunInlining(llvm::InlinerPass &inlinePass, llvm::SmallPtrSetImpl &changedFunctions); - bool RunDevirt(ark::llvmbackend::passes::Devirt &devirtPass); - void RunCheckExternal(ark::llvmbackend::passes::CheckExternal &externalPass); + bool RunDevirt(Devirt &devirtPass); + void RunCheckExternal(CheckExternal &externalPass); }; } // namespace ark::llvmbackend::passes diff --git a/static_core/libllvmbackend/transforms/passes/inline_ir/cleanup_inline_module.h b/static_core/libllvmbackend/transforms/passes/inline_ir/cleanup_inline_module.h index 6a24a6210e5c7be118ab6c22ef7642fad0a4ba27..90ac3d2725e4f69a52b573e87599a0d99a629211 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_ir/cleanup_inline_module.h +++ b/static_core/libllvmbackend/transforms/passes/inline_ir/cleanup_inline_module.h @@ -38,7 +38,7 @@ public: ~CleanupInlineModule(); - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Module &module, llvm::ModuleAnalysisManager &analysis_manager); diff --git a/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.cpp b/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.cpp index 92e84884bc94b2f485400d82005d5a1521b39441..0da26fc01cfa231240cfa7527cb222fd694a23a3 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.cpp +++ b/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.cpp @@ -31,11 +31,6 @@ using llvm::convertToDeclaration; namespace ark::llvmbackend::passes { -bool DiscardInlineModule::ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) -{ - return true; -} - /// Discard all functions and global variables from inline module llvm::PreservedAnalyses DiscardInlineModule::run(llvm::Module &module, llvm::ModuleAnalysisManager & /*AM*/) { diff --git a/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.h b/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.h index b2b836ca24b71962b0f2f6ebcbbf3fe3ce09cb70..9067f0dd11773ca9d7e527383bffdd0ba91fcd47 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.h +++ b/static_core/libllvmbackend/transforms/passes/inline_ir/discard_inline_module.h @@ -30,7 +30,10 @@ namespace ark::llvmbackend::passes { class DiscardInlineModule : public llvm::PassInfoMixin { public: - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) + { + return true; + } // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Module &module, llvm::ModuleAnalysisManager &analysis_manager); @@ -46,4 +49,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_INLINE_IR_DISCARD_INLINE_MODULE_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_INLINE_IR_DISCARD_INLINE_MODULE_H diff --git a/static_core/libllvmbackend/transforms/passes/inline_ir/mark_always_inline.h b/static_core/libllvmbackend/transforms/passes/inline_ir/mark_always_inline.h index 215263cf1077c92808c1d9692e2539033a9e3156..bb83a4087a6b3b43155c38f94f790d8637ca3192 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_ir/mark_always_inline.h +++ b/static_core/libllvmbackend/transforms/passes/inline_ir/mark_always_inline.h @@ -31,7 +31,7 @@ namespace ark::llvmbackend::passes { */ class MarkAlwaysInline : public llvm::PassInfoMixin { public: - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysis_manager); diff --git a/static_core/libllvmbackend/transforms/passes/inline_ir/mark_inline_module.h b/static_core/libllvmbackend/transforms/passes/inline_ir/mark_inline_module.h index 491ea80479c69c162ab782a02ec0172844431287..6c0c52f6a28cd00f752ae7915a4088ada7d79d8e 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_ir/mark_inline_module.h +++ b/static_core/libllvmbackend/transforms/passes/inline_ir/mark_inline_module.h @@ -30,7 +30,7 @@ namespace ark::llvmbackend::passes { class MarkInlineModule : public llvm::PassInfoMixin { public: - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Module &module, llvm::ModuleAnalysisManager &analysis_manager); diff --git a/static_core/libllvmbackend/transforms/passes/inline_ir/remove_unused_functions.h b/static_core/libllvmbackend/transforms/passes/inline_ir/remove_unused_functions.h index 4ff01bbd8ea1ad13c002b4c42f32278ea5118f0a..9b4f42b3a141a50c40076c7858e582eee2c99b42 100644 --- a/static_core/libllvmbackend/transforms/passes/inline_ir/remove_unused_functions.h +++ b/static_core/libllvmbackend/transforms/passes/inline_ir/remove_unused_functions.h @@ -39,7 +39,7 @@ namespace ark::llvmbackend::passes { */ class RemoveUnusedFunctions : public llvm::PassInfoMixin { public: - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Module &module, llvm::ModuleAnalysisManager &analysis_manager); diff --git a/static_core/libllvmbackend/transforms/passes/insert_safepoints.h b/static_core/libllvmbackend/transforms/passes/insert_safepoints.h index 59e9c801da3088df980f8def257bdb7dc8b12168..7e45db00fb17449800429edb38223dd554195962 100644 --- a/static_core/libllvmbackend/transforms/passes/insert_safepoints.h +++ b/static_core/libllvmbackend/transforms/passes/insert_safepoints.h @@ -22,17 +22,13 @@ namespace ark::llvmbackend { struct LLVMCompilerOptions; } // namespace ark::llvmbackend -namespace ark::llvmbackend { -class LLVMArkInterface; -} // namespace ark::llvmbackend - namespace ark::llvmbackend::passes { class InsertSafepoints : public llvm::PassInfoMixin { public: explicit InsertSafepoints() = default; - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert(const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); @@ -43,4 +39,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_INSERT_SAFEPOINTS_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_INSERT_SAFEPOINTS_H diff --git a/static_core/libllvmbackend/transforms/passes/intrinsics_lowering.h b/static_core/libllvmbackend/transforms/passes/intrinsics_lowering.h index 4ea00f59b9a1d0dac62b3f69150e0c77002680e4..4a64f8d6caaabcee53853770b840872c65b780c5 100644 --- a/static_core/libllvmbackend/transforms/passes/intrinsics_lowering.h +++ b/static_core/libllvmbackend/transforms/passes/intrinsics_lowering.h @@ -38,13 +38,12 @@ class IntrinsicsLowering : public llvm::PassInfoMixin { public: explicit IntrinsicsLowering(LLVMArkInterface *arkInterface = nullptr); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } - static IntrinsicsLowering Create(LLVMArkInterface *arkInterface, - const ark::llvmbackend::LLVMCompilerOptions *options); + static IntrinsicsLowering Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); diff --git a/static_core/libllvmbackend/transforms/passes/loop_peeling.cpp b/static_core/libllvmbackend/transforms/passes/loop_peeling.cpp index 433ed2e9c6b9bc91627704afbcd6b4a4b9bab755..f617fab114be12af10857abc98524a93aa679204 100644 --- a/static_core/libllvmbackend/transforms/passes/loop_peeling.cpp +++ b/static_core/libllvmbackend/transforms/passes/loop_peeling.cpp @@ -68,8 +68,4 @@ bool ArkLoopPeeling::ContainsDeoptimize(llvm::Loop *loop) return false; } -bool ArkLoopPeeling::ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) -{ - return true; -} } // namespace ark::llvmbackend::passes diff --git a/static_core/libllvmbackend/transforms/passes/loop_peeling.h b/static_core/libllvmbackend/transforms/passes/loop_peeling.h index 1f12c37e92431bc987dabf6d22cf2b70d1126f05..9254a5cfba580609ff1468095339e6b12a2af763 100644 --- a/static_core/libllvmbackend/transforms/passes/loop_peeling.h +++ b/static_core/libllvmbackend/transforms/passes/loop_peeling.h @@ -39,7 +39,10 @@ public: explicit ArkLoopPeeling() = default; - static bool ShouldInsert(const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) + { + return true; + } private: bool ContainsDeoptimize(llvm::Loop *loop); @@ -50,4 +53,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_LOOP_PEELING_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_LOOP_PEELING_H diff --git a/static_core/libllvmbackend/transforms/passes/mem_barriers.cpp b/static_core/libllvmbackend/transforms/passes/mem_barriers.cpp index 765111a44ddbe52ee1d20dfdf4164f78e171014c..2e6996febaf2585c0e1c4a79db4caab60fcfcc54 100644 --- a/static_core/libllvmbackend/transforms/passes/mem_barriers.cpp +++ b/static_core/libllvmbackend/transforms/passes/mem_barriers.cpp @@ -29,8 +29,7 @@ using llvm::Instruction; namespace ark::llvmbackend::passes { -MemBarriers MemBarriers::Create([[maybe_unused]] LLVMArkInterface *arkInterface, - const ark::llvmbackend::LLVMCompilerOptions *options) +MemBarriers MemBarriers::Create(LLVMArkInterface *arkInterface, const ark::llvmbackend::LLVMCompilerOptions *options) { return MemBarriers(arkInterface, options->optimize); } diff --git a/static_core/libllvmbackend/transforms/passes/mem_barriers.h b/static_core/libllvmbackend/transforms/passes/mem_barriers.h index 2f25c88b673015f4e55c5f805905e555dd1ac75a..29285d7d7cfcc1cd813829423f13c1b711e0c0ba 100644 --- a/static_core/libllvmbackend/transforms/passes/mem_barriers.h +++ b/static_core/libllvmbackend/transforms/passes/mem_barriers.h @@ -30,12 +30,12 @@ class MemBarriers : public llvm::PassInfoMixin { public: explicit MemBarriers(LLVMArkInterface *arkInterface, bool optimize); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } - static MemBarriers Create(LLVMArkInterface *arkInterface, const ark::llvmbackend::LLVMCompilerOptions *options); + static MemBarriers Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); diff --git a/static_core/libllvmbackend/transforms/passes/panda_runtime_lowering.h b/static_core/libllvmbackend/transforms/passes/panda_runtime_lowering.h index 26c7bebbd3665145eb549b6fc164fda932704f52..51270d2f715e665cd8776a0be308aed4a07c4496 100644 --- a/static_core/libllvmbackend/transforms/passes/panda_runtime_lowering.h +++ b/static_core/libllvmbackend/transforms/passes/panda_runtime_lowering.h @@ -35,13 +35,12 @@ class PandaRuntimeLowering : public llvm::PassInfoMixin { public: explicit PandaRuntimeLowering(LLVMArkInterface *arkInterface = nullptr); - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } - static PandaRuntimeLowering Create(LLVMArkInterface *arkInterface, - const ark::llvmbackend::LLVMCompilerOptions *options); + static PandaRuntimeLowering Create(LLVMArkInterface *arkInterface, const LLVMCompilerOptions *options); // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &am); @@ -63,4 +62,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_PANDA_RUNTIME_LOWERING_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_PANDA_RUNTIME_LOWERING_H diff --git a/static_core/libllvmbackend/transforms/passes/propagate_lenarray.cpp b/static_core/libllvmbackend/transforms/passes/propagate_lenarray.cpp index 6bc06f189d1c33c0d0c8c919752dc6d95e1a6b93..5c1f907eda40495a7391c25b07cdafd666a88df3 100644 --- a/static_core/libllvmbackend/transforms/passes/propagate_lenarray.cpp +++ b/static_core/libllvmbackend/transforms/passes/propagate_lenarray.cpp @@ -33,11 +33,6 @@ namespace ark::llvmbackend::passes { -bool PropagateLenArray::ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) -{ - return true; -} - llvm::PreservedAnalyses PropagateLenArray::run(llvm::Function &function, [[maybe_unused]] llvm::FunctionAnalysisManager &analysisManager) { diff --git a/static_core/libllvmbackend/transforms/passes/propagate_lenarray.h b/static_core/libllvmbackend/transforms/passes/propagate_lenarray.h index 96635803c05bed18f9539756d1080fa0879a50b1..4559aed6189ea2d90a47a648e23c11a394c8a267 100644 --- a/static_core/libllvmbackend/transforms/passes/propagate_lenarray.h +++ b/static_core/libllvmbackend/transforms/passes/propagate_lenarray.h @@ -31,7 +31,10 @@ public: explicit PropagateLenArray() = default; - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options); + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) + { + return true; + } // NOLINTNEXTLINE(readability-identifier-naming) llvm::PreservedAnalyses run(llvm::Function &function, llvm::FunctionAnalysisManager &analysisManager); diff --git a/static_core/libllvmbackend/transforms/passes/prune_deopt.h b/static_core/libllvmbackend/transforms/passes/prune_deopt.h index 99b94278dc76eb228f79a156d3fb4b2cd8cf37b5..1692e6ba03db3a9bfe0be576815c2fc9c5b097a6 100644 --- a/static_core/libllvmbackend/transforms/passes/prune_deopt.h +++ b/static_core/libllvmbackend/transforms/passes/prune_deopt.h @@ -30,7 +30,7 @@ namespace ark::llvmbackend::passes { class PruneDeopt : public llvm::PassInfoMixin { public: - static bool ShouldInsert([[maybe_unused]] const ark::llvmbackend::LLVMCompilerOptions *options) + static bool ShouldInsert([[maybe_unused]] const LLVMCompilerOptions *options) { return true; } @@ -59,4 +59,4 @@ public: } // namespace ark::llvmbackend::passes -#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_PRUNE_DEOPT_H +#endif // LIBLLVMBACKEND_TRANSFORMS_PASSES_PRUNE_DEOPT_H diff --git a/static_core/plugins/ets/CMakeLists.txt b/static_core/plugins/ets/CMakeLists.txt index aa939c5aa4c5fd2817e363760d6132b41399e100..40530c4a857de0ad6313e0e15544d6addf8bbcc6 100644 --- a/static_core/plugins/ets/CMakeLists.txt +++ b/static_core/plugins/ets/CMakeLists.txt @@ -126,10 +126,19 @@ endif() if(PANDA_WITH_COMPILER) add_subdirectory(compiler) - set (COMPILER_OPTIONS "--compiler-check-final=true") + if(PANDA_LLVM_AOT) + set(STDLIB_PAOC_MODE "llvm") + set(COMPILER_OPTIONS "--compiler-check-final=true" "--llvm-gc-check=true" "--llvm-pre-opt=2") + if (NOT PANDA_ENABLE_THREAD_SANITIZER) + set(COMPILER_OPTIONS ${COMPILER_OPTIONS} "--llvmaot-threads=4" "--llvmaot-methods-per-module=512") + endif() + else() + set(STDLIB_PAOC_MODE "aot") + set(COMPILER_OPTIONS "--compiler-check-final=true") + endif() add_custom_target(ets-compile-stdlib-default COMMENT "Running ark_aot compilation for etsstdlib with default options" - COMMAND ${CMAKE_SOURCE_DIR}/plugins/ets/compiler/tools/paoc_compile_stdlib.sh --prefix="${PANDA_RUN_PREFIX}" --binary-dir=${CMAKE_BINARY_DIR} -compiler-options="${COMPILER_OPTIONS}" -paoc-output=${CMAKE_CURRENT_BINARY_DIR}/etsstdlib.an + COMMAND ${CMAKE_SOURCE_DIR}/plugins/ets/compiler/tools/paoc_compile_stdlib.sh --prefix="${PANDA_RUN_PREFIX}" --binary-dir=${CMAKE_BINARY_DIR} -compiler-options="${COMPILER_OPTIONS}" --paoc-mode=${STDLIB_PAOC_MODE} -paoc-output=${CMAKE_CURRENT_BINARY_DIR}/etsstdlib.an DEPENDS ark_aot etsstdlib ) endif() diff --git a/static_core/plugins/ets/libllvmbackend/ets_llvm_ir_constructor_gen.inl b/static_core/plugins/ets/libllvmbackend/ets_llvm_ir_constructor_gen.inl index 009d728578a6a7bd7d7676b8a8cffa2de632e6b6..39af1d2fc34a8e4f5dee9414af47ffec2ccdba8e 100644 --- a/static_core/plugins/ets/libllvmbackend/ets_llvm_ir_constructor_gen.inl +++ b/static_core/plugins/ets/libllvmbackend/ets_llvm_ir_constructor_gen.inl @@ -48,7 +48,7 @@ bool LLVMIrConstructor::EmitArrayCopyTo(Inst *inst) bool LLVMIrConstructor::EmitStdStringSubstring(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::SUB_STRING_FROM_STRING_TLAB_COMPRESSED, 3U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::SUB_STRING_FROM_STRING_TLAB_COMPRESSED); } bool LLVMIrConstructor::EmitStringBuilderAppendBool(Inst *inst) @@ -160,7 +160,7 @@ bool LLVMIrConstructor::EmitStringBuilderAppendStrings(Inst *inst) default: UNREACHABLE(); } - return EmitFastPath(inst, eid, inst->GetInputsCount() - 1U); // -1 to skip save state + return EmitFastPath(inst, eid); } bool LLVMIrConstructor::EmitStringBuilderToString(Inst *inst) @@ -311,7 +311,7 @@ void LLVMIrConstructor::StringBuilderAppendStringMain(Inst *inst, llvm::Value *s bool LLVMIrConstructor::EmitDoubleToStringDecimal(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::DOUBLE_TO_STRING_DECIMAL, 3U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::DOUBLE_TO_STRING_DECIMAL); } bool LLVMIrConstructor::EmitStringTrimLeft(Inst *inst) @@ -340,17 +340,17 @@ bool LLVMIrConstructor::EmitStringTrim(Inst *inst) bool LLVMIrConstructor::EmitCharIsWhiteSpace(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::CHAR_IS_WHITE_SPACE, 1U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::CHAR_IS_WHITE_SPACE); } bool LLVMIrConstructor::EmitStringStartsWith(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_STARTS_WITH, 3U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_STARTS_WITH); } bool LLVMIrConstructor::EmitStringEndsWith(Inst *inst) { - return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_ENDS_WITH, 3U); + return EmitFastPath(inst, RuntimeInterface::EntrypointId::STRING_ENDS_WITH); } bool LLVMIrConstructor::EmitStringGetBytesTlab(Inst *inst) @@ -358,10 +358,8 @@ bool LLVMIrConstructor::EmitStringGetBytesTlab(Inst *inst) auto offset = GetGraph()->GetRuntime()->GetArrayU8ClassPointerTlsOffset(GetGraph()->GetArch()); auto klass = llvmbackend::runtime_calls::LoadTLSValue(&builder_, arkInterface_, offset, builder_.getPtrTy()); auto eid = RuntimeInterface::EntrypointId::STRING_GET_BYTES_TLAB; - auto result = CreateEntrypointCall(eid, inst, - {GetInputValue(inst, 0), GetInputValue(inst, 1), GetInputValue(inst, 2), klass}); - ASSERT(result->getCallingConv() == llvm::CallingConv::C); - result->setCallingConv(llvm::CallingConv::ArkFast4); + auto result = + CreateFastPathCall(inst, eid, {GetInputValue(inst, 0), GetInputValue(inst, 1), GetInputValue(inst, 2), klass}); result->addRetAttr(llvm::Attribute::NonNull); result->addRetAttr(llvm::Attribute::NoAlias); ValueMapAdd(inst, result); diff --git a/static_core/plugins/ets/tests/CMakeLists.txt b/static_core/plugins/ets/tests/CMakeLists.txt index e5e1ddaa8dcd898546d3afa337e3555279ffaeb5..a738b060b1badb87f286ccf48583db47f78b80a6 100644 --- a/static_core/plugins/ets/tests/CMakeLists.txt +++ b/static_core/plugins/ets/tests/CMakeLists.txt @@ -432,51 +432,32 @@ endfunction() set (COMPILER_OPTIONS_OSR "--compiler-ignore-failures=true" ${COMPILER_OPTIONS}) function(compile_stdlib TARGET_ARCH) - add_custom_target(ets-compile-stdlib-aot-${TARGET_ARCH} - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} with default options" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=aot -compiler-options="${COMPILER_OPTIONS}" -paoc-output=etsstdlib_aot_${TARGET_ARCH}.an - DEPENDS ark_aot etsstdlib - ) - add_custom_target(ets-compile-stdlib-jit-${TARGET_ARCH} - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} with jit mode" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=jit -compiler-options="${COMPILER_OPTIONS}" -paoc-output=etsstdlib_jit_${TARGET_ARCH}.an - DEPENDS ark_aot etsstdlib - ) - add_custom_target(ets-compile-stdlib-aot-${TARGET_ARCH}-no-inline - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} without inlining" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=aot -compiler-options="${COMPILER_OPTIONS_NO_INLINE}" -paoc-output=etsstdlib_aot_${TARGET_ARCH}_no_inline.an - DEPENDS ark_aot etsstdlib - ) - add_custom_target(ets-compile-stdlib-aot-${TARGET_ARCH}-stw - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} with gc stw" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=aot -compiler-options="${COMPILER_OPTIONS_GC_STW}" -paoc-output=etsstdlib_aot_${TARGET_ARCH}_stw.an - DEPENDS ark_aot etsstdlib - ) - add_dependencies(ets-compile-stdlib ets-compile-stdlib-aot-${TARGET_ARCH} ets-compile-stdlib-jit-${TARGET_ARCH} ets-compile-stdlib-aot-${TARGET_ARCH}-no-inline ets-compile-stdlib-aot-${TARGET_ARCH}-stw) if (PANDA_LLVM_AOT) - add_custom_target(ets-compile-stdlib-llvm-${TARGET_ARCH} - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} with llvm" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=llvm -compiler-options="${COMPILER_OPTIONS_LLVM}" -paoc-output=etsstdlib_llvmaot_${TARGET_ARCH}.an + add_custom_target(ets-compile-stdlib-llvmaot-${TARGET_ARCH} + COMMENT "Running LLVMAOT compilation for etsstdlib for ${TARGET_ARCH}" + COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=llvm -compiler-options="${COMPILER_OPTIONS}" -paoc-output=etsstdlib_llvmaot_${TARGET_ARCH}.an DEPENDS ark_aot etsstdlib ) - add_custom_target(ets-compile-stdlib-llvm-pre-opt-2-${TARGET_ARCH} - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} with llvm pre-opt" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=llvm -compiler-options="${COMPILER_OPTIONS_LLVM_PRE_OPT}" -paoc-output=etsstdlib_llvmaot_pre_opt_2_${TARGET_ARCH}.an + add_custom_target(ets-compile-stdlib-llvmaot-${TARGET_ARCH}-no-inline + COMMENT "Running LLVMAOT compilation for etsstdlib for ${TARGET_ARCH} without inlining" + COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=llvm -compiler-options="${COMPILER_OPTIONS_NO_INLINE}" -paoc-output=etsstdlib_llvmaot_${TARGET_ARCH}_no_inline.an DEPENDS ark_aot etsstdlib ) - add_dependencies( - ets-compile-stdlib - ets-compile-stdlib-llvm-${TARGET_ARCH} - ets-compile-stdlib-llvm-pre-opt-2-${TARGET_ARCH} + add_custom_target(ets-compile-stdlib-llvmaot-${TARGET_ARCH}-no-pre-opt + COMMENT "Running LLVMAOT compilation for etsstdlib for ${TARGET_ARCH} with llvm without pre-opt" + COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=llvm -compiler-options="${COMPILER_OPTIONS_NO_PRE_OPT}" -paoc-output=etsstdlib_llvmaot_${TARGET_ARCH}_no_pre_opt.an + DEPENDS ark_aot etsstdlib ) - endif() - if (TARGET_ARCH STREQUAL "arm64") - add_custom_target(ets-compile-stdlib-osr-${TARGET_ARCH} - COMMENT "Running ark_aot compilation for etsstdlib for ${TARGET_ARCH} with osr mode" - COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=osr -compiler-options="${COMPILER_OPTIONS_OSR}" -paoc-output=etsstdlib_osr_${TARGET_ARCH}.an + add_custom_target(ets-compile-stdlib-llvmaot-${TARGET_ARCH}-stw + COMMENT "Running LLVMAOT compilation for etsstdlib for ${TARGET_ARCH} with gc stw" + COMMAND ${ARK_AOT_RUNNER} --binary-dir=${CMAKE_BINARY_DIR} --target-arch=${TARGET_ARCH} --paoc-mode=llvm -compiler-options="${COMPILER_OPTIONS_GC_STW}" -paoc-output=etsstdlib_llvmaot_${TARGET_ARCH}_stw.an DEPENDS ark_aot etsstdlib ) - add_dependencies(ets-compile-stdlib ets-compile-stdlib-osr-${TARGET_ARCH}) + add_dependencies(ets-compile-stdlib + ets-compile-stdlib-llvmaot-${TARGET_ARCH} + ets-compile-stdlib-llvmaot-${TARGET_ARCH}-no-inline + ets-compile-stdlib-llvmaot-${TARGET_ARCH}-no-pre-opt + ets-compile-stdlib-llvmaot-${TARGET_ARCH}-stw) endif() endfunction() @@ -495,23 +476,13 @@ endif() if(PANDA_TEST_COMPILE_STDLIB) set (ARK_AOT_RUNNER ${CMAKE_SOURCE_DIR}/plugins/ets/compiler/tools/paoc_compile_stdlib.sh) - if (NOT PANDA_CI_TESTING_MODE STREQUAL "Nightly") - set (COMPILER_OPTIONS "--compiler-check-final=true") - if ("${CMAKE_BUILD_TYPE}" STREQUAL "Debug") - set (COMPILER_OPTIONS ${COMPILER_OPTIONS} "--compiler-inst-graph-coloring-limit=2000") - endif() + set (COMPILER_OPTIONS "--compiler-check-final=true" "--llvm-gc-check=true" "--llvm-pre-opt=2") + if (NOT PANDA_ENABLE_THREAD_SANITIZER) + set (COMPILER_OPTIONS ${COMPILER_OPTIONS} "--llvmaot-threads=4" "--llvmaot-methods-per-module=512") endif() set (COMPILER_OPTIONS_NO_INLINE "--compiler-inlining=false" ${COMPILER_OPTIONS}) set (COMPILER_OPTIONS_GC_STW "--gc-type=stw" ${COMPILER_OPTIONS}) - if (PANDA_LLVM_AOT) - set (COMPILER_OPTIONS_LLVM ${COMPILER_OPTIONS}) - set (COMPILER_OPTIONS_LLVM_PRE_OPT "--llvm-pre-opt=2" ${COMPILER_OPTIONS}) - # NOTE(zdenis): False positives come from libLLVM.so - if (NOT PANDA_ENABLE_THREAD_SANITIZER) - set (COMPILER_OPTIONS_LLVM "--llvmaot-threads=4" "--llvmaot-methods-per-module=512" ${COMPILER_OPTIONS_LLVM}) - set (COMPILER_OPTIONS_LLVM_PRE_OPT "--llvmaot-threads=4" "--llvmaot-methods-per-module=512" ${COMPILER_OPTIONS_LLVM_PRE_OPT}) - endif() - endif () + set (COMPILER_OPTIONS_NO_PRE_OPT ${COMPILER_OPTIONS} "--llvm-pre-opt=0") add_custom_target(ets-compile-stdlib) if (PANDA_COMPILER_TARGET_X86_64) compile_stdlib(x86_64) diff --git a/static_core/scripts/clang-tidy/clang-tidy_llvm_config.json b/static_core/scripts/clang-tidy/clang-tidy_llvm_config.json new file mode 100644 index 0000000000000000000000000000000000000000..ebf474cc24279fd1e7abefe17a4cdd5e67530948 --- /dev/null +++ b/static_core/scripts/clang-tidy/clang-tidy_llvm_config.json @@ -0,0 +1,10 @@ +[ + "libllvmbackend", + "irtoc/backend/", + "compiler/aot/aot_builder/aot_builder.cpp", + "compiler/aot/aot_builder/llvm_aot_builder.cpp", + "compiler/aot/aot_file.cpp", + "compiler/optimizer/ir/aot_data.cpp", + "compiler/tools/paoc/paoc.cpp", + "compiler/tools/paoc/paoc_llvm.cpp" +] diff --git a/static_core/scripts/clang-tidy/clang_tidy_check.py b/static_core/scripts/clang-tidy/clang_tidy_check.py index c6e5b34921e2c25600e81a40bd2f85f673913a90..97a5d4753591620f705c27d7ef4c43557d5cffe8 100755 --- a/static_core/scripts/clang-tidy/clang_tidy_check.py +++ b/static_core/scripts/clang-tidy/clang_tidy_check.py @@ -29,9 +29,13 @@ def get_args(): 'panda_dir', help='panda sources directory.', type=str) parser.add_argument( 'build_dir', help='panda build directory.', type=str) + parser.add_argument( + '--cfg-filter', type=str, action='store', dest='cfg_filter', + required=False, + help='Path to config with filenames to be checked. If missed all source files will be checked.') parser.add_argument( '--filename-filter', type=str, action='store', dest='filename_filter', - required=False, default="*", + required=False, help='Regexp for filename with path to it. If missed all source files will be checked.') parser.add_argument( '--full', action="store_true", help='Check all files with all compile keys.') @@ -213,7 +217,7 @@ default_disabled_checks = [ ] -def run_clang_tidy(src_path: str, config_file_path: str, build_dir: str, header_filter: str, compile_args: str) -> bool: +def run_clang_tidy(src_path: str, config_file_path: str, build_dir: str, header_filter: str, compile_args: str, delayed_stderr: list, job_num: int) -> bool: # Used by ctcache to provide a wrapper for real clang-tidy that will check the cache # before launching clang-tidy and save the result to ctcache server cmd_path = os.getenv('CLANG_TIDY_PATH') @@ -240,10 +244,14 @@ def run_clang_tidy(src_path: str, config_file_path: str, build_dir: str, header_ print("Note: bad output for ", src_path) return True - print('Failed: ' + ' '.join(cmd) + '\n' + out_msg) + failed_output = f'Failed: ' + ' '.join(cmd) + failed_output += f'\n{out_msg}\n' if e.stderr: - print(e.stderr.decode()) + failed_output += e.stderr.decode() + + delayed_stderr[job_num] = failed_output + print(failed_output) return False @@ -260,12 +268,15 @@ def get_full_path(relative_path: str, location_base: str, panda_dir: str, build_ def check_file_list(file_list: list, panda_dir: str, build_dir: str, header_filter: str, proc_count: int) -> bool: pool = multiprocessing.Pool(proc_count) jobs = [] - for src, args in file_list: + manager = multiprocessing.Manager() + delayed_stderr = manager.list([None] * len(file_list)) + for i in range(len(file_list)): + src, args = file_list[i] msg = "Done clang-tidy: %s" % (src) proc = pool.apply_async(func=run_clang_tidy, args=( - src, panda_dir, build_dir, header_filter, args)) + src, panda_dir, build_dir, header_filter, args, delayed_stderr, i)) jobs.append((proc, msg)) # Wait for jobs to complete before exiting @@ -289,6 +300,7 @@ def check_file_list(file_list: list, panda_dir: str, build_dir: str, header_filt # Safely terminate the pool pool.close() pool.join() + print('\n'.join([ds for ds in delayed_stderr if ds])) return main_ret_val @@ -409,10 +421,13 @@ def verify_uniq_element_list(uniq_element_list: list) -> bool: return len(uniq_element_list) == len(set(uniq_element_list)) -def verify_args(panda_dir: str, build_dir: str) -> str: +def verify_args(panda_dir: str, build_dir: str, filename_filter: str, cfg_filter: str): if not verify_uniq_element_list(default_disabled_checks): return "Error: Dupclicated defauls disabled checks" + if filename_filter and cfg_filter: + return "Error: --filename-filter and --cfg-filter cannot be used together, please remove one." + return "" @@ -458,6 +473,13 @@ def get_proc_count(cmd_ard : int) -> int: return multiprocessing.cpu_count() +def parse_config(cfg_filter): + cfg_data = None + with open(cfg_filter) as cfg: + cfg_data = json.load(cfg) + return f"({'|'.join(cfg_data)})" + + if __name__ == "__main__": arguments = get_args() files_list = [] @@ -470,17 +492,25 @@ if __name__ == "__main__": default_disabled_checks.append("-fuchsia-statically-constructed-objects") default_disabled_checks.append("-cert-err58-cpp") - err_msg = verify_args(arguments.panda_dir, arguments.build_dir) + err_msg = verify_args( + arguments.panda_dir, arguments.build_dir, arguments.filename_filter, arguments.cfg_filter) if err_msg: sys.exit(err_msg) - files_list = get_file_list( - arguments.panda_dir, arguments.build_dir, arguments.filename_filter) + filename_filter = "*" + + if arguments.filename_filter: + filename_filter = arguments.filename_filter + elif arguments.cfg_filter: + filename_filter = parse_config(arguments.cfg_filter) + + files_list = get_file_list(arguments.panda_dir, arguments.build_dir, filename_filter) if not files_list: sys.exit("Can't be prepaired source list." - "Please check availble in build `dir compile_commands.json`" - "and correcting of parameter `--filename-filter` if you use it.") + "Please check available in build `dir compile_commands.json`" + "and correcting of parameter `--filename-filter`" + " or `--cfg-filter` if you use it.") if not arguments.check_libabckit: check_headers_in_es2panda_sources(arguments.panda_dir) diff --git a/static_core/scripts/code_style/code_style_check.py b/static_core/scripts/code_style/code_style_check.py index b3a8ad6c506b8d8d156708113e14ff8f175658dc..f8735d1e9119cf989503e7d6a2eb71889f9d3d10 100755 --- a/static_core/scripts/code_style/code_style_check.py +++ b/static_core/scripts/code_style/code_style_check.py @@ -39,7 +39,7 @@ def get_args(): return parser.parse_args() -def run_clang_format(src_path, panda_dir, reformat, msg): +def run_clang_format(src_path, panda_dir, reformat, msg, delayed_stderr, job_num): check_cmd = [str(os.path.join(panda_dir, 'scripts', 'code_style', 'run_code_style_tools.sh'))] reformat_cmd = [CLANG_FORMAT, '-i'] @@ -56,11 +56,14 @@ def run_clang_format(src_path, panda_dir, reformat, msg): print("Note: missed output for ", src_path) return True - print('Failed: ', ' '.join(cmd)) - print(e.stdout.decode()) + failed_output = f'Failed: ' + ' '.join(cmd) + failed_output += f'\n{e.stdout.decode()}\n' if e.stderr: - print(e.stderr.decode()) + failed_output += e.stderr.decode() + + delayed_stderr[job_num] = failed_output + print(failed_output) return False @@ -84,16 +87,19 @@ def check_file_list(file_list : list, panda_dir : str, reformat : bool, proc_cou main_ret_val = True total_count = str(len(file_list)) idx = 0 - for src in file_list: + manager = multiprocessing.Manager() + delayed_stderr = manager.list([None] * len(file_list)) + for i in range(len(file_list)): + src = file_list[i] idx += 1 msg = "[%s/%s] Running clang-format: %s" % (str(idx), total_count, src) proc = pool.apply_async(func=run_clang_format, args=( - src, panda_dir, reformat, msg)) + src, panda_dir, reformat, msg, delayed_stderr, i)) jobs.append(proc) # Wait for jobs to complete before exiting while(not all([p.ready() for p in jobs])): - time.sleep(5) + time.sleep(1) for job in jobs: if not job.get(): @@ -103,6 +109,7 @@ def check_file_list(file_list : list, panda_dir : str, reformat : bool, proc_cou # Safely terminate the pool pool.close() pool.join() + print('\n'.join([ds for ds in delayed_stderr if ds])) return main_ret_val diff --git a/static_core/scripts/llvm/README.md b/static_core/scripts/llvm/README.md index 0faea914535563c8242f53e190871afa2c30b6dc..64d1348045161eb1a472b81f2a5b60e87312dc2a 100644 --- a/static_core/scripts/llvm/README.md +++ b/static_core/scripts/llvm/README.md @@ -15,6 +15,7 @@ Some variables are mandatory, others are optional. ```bash ### Required variables BUILD_DIR= +INSTALL_DIR= (default: "/opt", installing there usually requires root privileges) LLVM_SOURCES=/llvm VERSION=(default: "main") PACKAGE_VERSION=(default: $VERSION) # must match REQUIRED_LLVM_VERSION in libllvmbackend/CMakeLists.txt @@ -28,10 +29,9 @@ BUILD_OHOS_RELEASE=(default: BUILD_OHOS_RELEASE_GN=(default: false) ### Optional variables -INSTALL_DIR= (default: "") -DO_STRIPPING=(default: true) -DO_TAR=(default: true) +DO_STRIPPING=(default: true) +DO_TAR=(default: true) OHOS_SDK=, required for any OHOS build. @@ -59,21 +59,22 @@ LLVM_SOURCES="/home/user/src/llvm-for-ark/llvm" \ VERSION="15.0.4-ark99-beta9" \ PACKAGE_VERSION="15.0.4-ark99" \ OPTIMIZE_DEBUG=false \ +DO_STRIPPING=false \ BUILD_X86_DEBUG=true \ BUILD_AARCH64_DEBUG=true \ bash -x ./build_llvm.sh ``` In this example, only `x86_64` and `arm64` debug versions are built. Then, they can be specified for Ark build, like: -* host build: `-DLLVM_TARGET_PATH=/home/user/build/llvm-15.0.4-ark99-beta9-debug-x86_64` +* host build: `-DLLVM_TARGET_PATH=/home/user/inst/llvm-15.0.4-ark99-beta9-debug-x86_64` * cross-arm64 build: - * `-DLLVM_TARGET_PATH=/home/user/build/llvm-15.0.4-ark99-beta9-debug-aarch64` - * `-DLLVM_HOST_PATH=/home/user/build/llvm-15.0.4-ark99-beta9-debug-x86_64` + * `-DLLVM_TARGET_PATH=/home/user/inst/llvm-15.0.4-ark99-beta9-debug-aarch64` + * `-DLLVM_HOST_PATH=/home/user/inst/llvm-15.0.4-ark99-beta9-debug-x86_64` ## Example with packaging all necessary versions ```bash -INSTALL_DIR="/mnt/scratch/install" \ +INSTALL_DIR="/opt" \ BUILD_DIR="/mnt/scratch/build" \ LLVM_SOURCES="/mnt/scratch/src/llvm-for-ark/llvm" \ VERSION="15.0.4-ark99-beta9" \ @@ -86,5 +87,5 @@ BUILD_AARCH64_DEBUG=true \ BUILD_AARCH64_RELEASE=true \ BUILD_OHOS_RELEASE=true \ BUILD_OHOS_RELEASE_GN=true \ -bash -x ./build_llvm.sh +sudo bash -x ./build_llvm.sh ``` diff --git a/static_core/scripts/llvm/build_llvm.sh b/static_core/scripts/llvm/build_llvm.sh index df835fe1236e4dd5c29253674440dfde9d8249ac..f34c4055fc7ed42e3bef7a9d8d12875e75496348 100755 --- a/static_core/scripts/llvm/build_llvm.sh +++ b/static_core/scripts/llvm/build_llvm.sh @@ -16,15 +16,17 @@ set -euo pipefail # Required variables BUILD_DIR=${BUILD_DIR:-""} +INSTALL_DIR=${INSTALL_DIR:-"/opt"} LLVM_SOURCES=${LLVM_SOURCES:-""} + # Optional variables -INSTALL_DIR=${INSTALL_DIR:-""} # empty -- do not install VERSION=${VERSION:-"main"} # Specifies build and install directory names: PACKAGE_VERSION=${PACKAGE_VERSION:-${VERSION}} BUILD_SUFFIX=${BUILD_SUFFIX:-""} # llvm--{debug,release}-{aarch64,x86} OPTIMIZE_DEBUG=${OPTIMIZE_DEBUG:-true} # Compile debug versions with -O2 -DO_STRIPPING=${DO_STRIPPING:-true} # checked only if install -DO_TARS=${DO_TARS:-true} # checked only if install +DO_STRIPPING=${DO_STRIPPING:-true} +DO_TARS=${DO_TARS:-true} + # Select a target to build BUILD_X86_DEBUG=${BUILD_X86_DEBUG:-false} BUILD_X86_RELEASE=${BUILD_X86_RELEASE:-false} @@ -52,6 +54,11 @@ if [[ -z "${BUILD_DIR}" ]]; then exit 1 fi +if [[ -z "${INSTALL_DIR}" ]]; then + echo "Please, specify install directory with INSTALL_DIR variable" + exit 1 +fi + if [[ -z "${LLVM_SOURCES}" ]]; then echo "Please, specify llvm sources directory with LLVM_SOURCES variable" exit 1 @@ -152,9 +159,7 @@ if [[ "x${BUILD_X86_DEBUG}" == "xtrue" ]]; then "${LLVM_SOURCES}" ninja distribution - if [[ -n "${INSTALL_DIR}" ]]; then - install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" - fi + install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" AUTO_LLVM_TABLEGEN="${BUILD_PREFIX}/bin/llvm-tblgen" if [[ ! -f "${AUTO_LLVM_TABLEGEN}" ]]; then @@ -195,9 +200,7 @@ if [[ "x${BUILD_X86_RELEASE}" == "xtrue" ]]; then "${LLVM_SOURCES}" ninja distribution - if [[ -n "${INSTALL_DIR}" ]]; then - install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" - fi + install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" AUTO_LLVM_TABLEGEN="${BUILD_PREFIX}/bin/llvm-tblgen" if [[ ! -f "${AUTO_LLVM_TABLEGEN}" ]]; then @@ -248,9 +251,7 @@ if [[ "x${BUILD_AARCH64_DEBUG}" == "xtrue" ]]; then "${LLVM_SOURCES}" ninja distribution - if [[ -n "${INSTALL_DIR}" ]]; then - install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" - fi + install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" fi if [[ "x${BUILD_AARCH64_RELEASE}" == "xtrue" ]]; then @@ -293,9 +294,7 @@ if [[ "x${BUILD_AARCH64_RELEASE}" == "xtrue" ]]; then "${LLVM_SOURCES}" ninja distribution - if [[ -n "${INSTALL_DIR}" ]]; then - install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" - fi + install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" fi if [[ "x${BUILD_OHOS_RELEASE}" == "xtrue" ]]; then @@ -332,9 +331,7 @@ if [[ "x${BUILD_OHOS_RELEASE}" == "xtrue" ]]; then "${LLVM_SOURCES}" ninja distribution - if [[ -n "${INSTALL_DIR}" ]]; then - install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" - fi + install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" fi if [[ "x${BUILD_OHOS_RELEASE_GN}" == "xtrue" ]]; then @@ -380,7 +377,5 @@ if [[ "x${BUILD_OHOS_RELEASE_GN}" == "xtrue" ]]; then "${LLVM_SOURCES}" ninja distribution - if [[ -n "${INSTALL_DIR}" ]]; then - install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" - fi + install "${INSTALL_PREFIX}" "${DO_STRIPPING}" "${DO_TARS}" fi diff --git a/static_core/scripts/sdk/build_sdk_lib b/static_core/scripts/sdk/build_sdk_lib index b6589851aa222223b8fbd6c3bd4aac5af96cb75b..f207fed2a4efe3bd1a20901db5307a099c2f6ccc 100644 --- a/static_core/scripts/sdk/build_sdk_lib +++ b/static_core/scripts/sdk/build_sdk_lib @@ -26,7 +26,7 @@ function build_panda() { COMMONS_CMAKE_ARGS="\ -GNinja \ -S$ARK_ROOT \ - -DCMAKE_BUILD_TYPE=$PANDA_SDK_BUILD_TYPE \ + -DCMAKE_BUILD_TYPE=${PANDA_SDK_BUILD_TYPE} \ -DPANDA_PRODUCT_BUILD=$product_build \ -DPANDA_WITH_ECMASCRIPT=ON \ -DPANDA_WITH_ETS=ON \ @@ -77,7 +77,10 @@ function linux_tools() { -DPANDA_CROSS_AARCH64_TOOLCHAIN_FILE=cmake/toolchain/cross-ohos-musl-aarch64.cmake \ -DTOOLCHAIN_SYSROOT=$OHOS_SDK_NATIVE/sysroot \ -DTOOLCHAIN_CLANG_ROOT=$OHOS_SDK_NATIVE/llvm \ - -DPANDA_WITH_ECMASCRIPT=ON" + -DPANDA_WITH_ECMASCRIPT=ON \ + -DPANDA_LLVM_BACKEND=ON \ + -DLLVM_TARGET_PATH=/opt/llvm-15-${PANDA_SDK_BUILD_TYPE,,}-x86_64" + local linux_build_targets="ark ark_aot ark_disasm ark_link es2panda e2p_test_plugin etsnative" build_panda "$linux_build_dir" "$linux_cmake_args" "$linux_build_targets" copy_into_sdk "$linux_build_dir" "$PANDA_SDK_PATH/linux_host_tools" "$SCRIPT_DIR"/linux_host_tools.txt @@ -101,7 +104,11 @@ function ohos() { -DTOOLCHAIN_SYSROOT=$OHOS_SDK_NATIVE/sysroot \ -DTOOLCHAIN_CLANG_ROOT=$OHOS_SDK_NATIVE/llvm \ -DPANDA_ETS_INTEROP_JS=ON \ - -DPANDA_WITH_ECMASCRIPT=ON" + -DPANDA_WITH_ECMASCRIPT=ON \ + -DPANDA_LLVM_BACKEND=ON \ + -DLLVM_HOST_PATH=/opt/llvm-15-${PANDA_SDK_BUILD_TYPE,,}-x86_64 \ + -DLLVM_TARGET_PATH=/opt/llvm-15-release-ohos" + local ohos_build_targets="ark ark_aot arkruntime arkassembler ets_interop_js_napi e2p_test_plugin etsnative" build_panda "$ohos_build_dir" "$target_cmake_args" "$ohos_build_targets" copy_into_sdk "$ohos_build_dir" "$taget_sdk_dir" "$SCRIPT_DIR"/ohos_arm64.txt diff --git a/static_core/tests/CMakeLists.txt b/static_core/tests/CMakeLists.txt index aa236767bf74c3a263ede69fe219c6000e4e32e7..697a203d1a1726e83ea5ead6be51dc629e916a80 100644 --- a/static_core/tests/CMakeLists.txt +++ b/static_core/tests/CMakeLists.txt @@ -31,6 +31,9 @@ add_dependencies(irtoc-interpreter-tests irtoc-opcode-suite) if(NOT PANDA_TARGET_AMD64 OR PANDA_TARGET_WINDOWS) add_dependencies(core_tests cts-assembly regression) add_subdirectory(cts-coverage-tool) + if(PANDA_TARGET_ARM64 AND NOT CMAKE_CROSSCOMPILING) + add_subdirectory(cts-generator) + endif() else() add_custom_target(verifier-tests COMMENT "Regression tests for verifier") add_dependencies(core_tests cts-assembly regression verifier-tests) diff --git a/static_core/tests/checked/checker.rb b/static_core/tests/checked/checker.rb index 5aaec8ac32a0bdefa9560636df57f8a24f051047..7f061f2a0708d11140d8cc2581d1b5f88f371d9e 100755 --- a/static_core/tests/checked/checker.rb +++ b/static_core/tests/checked/checker.rb @@ -189,7 +189,7 @@ class Checker # Current search scope @disasm_scope = nil - Dir.mkdir(@cwd) unless File.exists?(@cwd) + Dir.mkdir(@cwd) unless File.exist?(@cwd) clear_data end diff --git a/static_core/tests/cts-generator/CMakeLists.txt b/static_core/tests/cts-generator/CMakeLists.txt index 92b74363cff3b4aa321e90fe3493f976036c570e..aba30003ccc241b7b7d2346ca1338020acf10fee 100644 --- a/static_core/tests/cts-generator/CMakeLists.txt +++ b/static_core/tests/cts-generator/CMakeLists.txt @@ -157,19 +157,7 @@ if(NOT CMAKE_CROSSCOMPILING) -p "${PROJECT_BINARY_DIR}/../../" -x "${CTS_TEMP_DIR}" -v 1 - ${QUICKENER_ARGLAUNCH} - --global-timeout ${PANDA_CTS_TESTING_TIMEOUT} - --timeout ${PANDA_CTS_TEST_TIMEOUT} - -j ${PANDA_CTS_JOBS_NUMBER} - --verifier-config "${PROJECT_BINARY_DIR}/verifier.config" - ${CTS_TEST_PRLIMIT_OPTIONS} - ${CTS_TEST_SELECT_OPTION_ARGS} VERBATIM - COMMAND ${CTS_TEST_RUNNER} - -t "${CTS_GENERATED_DIR}" - -p "${PROJECT_BINARY_DIR}/../../" - -x "${CTS_TEMP_DIR}" - -v 1 - -o "--interpreter-type=cpp" + -o "--compiler-enable-jit=false" ${QUICKENER_ARGLAUNCH} --global-timeout ${PANDA_CTS_TESTING_TIMEOUT} --timeout ${PANDA_CTS_TEST_TIMEOUT} @@ -178,21 +166,6 @@ if(NOT CMAKE_CROSSCOMPILING) ${CTS_TEST_PRLIMIT_OPTIONS} --exclude-tag verifier ${CTS_TEST_SELECT_OPTION_ARGS} VERBATIM - COMMAND ${CTS_TEST_RUNNER} - -t "${CTS_GENERATED_DIR}" - -p "${PROJECT_BINARY_DIR}/../../" - -x "${CTS_TEMP_DIR}" - -v 1 - ${QUICKENER_ARGLAUNCH} - --global-timeout ${PANDA_CTS_TESTING_TIMEOUT} - --timeout ${PANDA_CTS_TEST_TIMEOUT} - -j ${PANDA_CTS_JOBS_NUMBER} - --verifier-config "${PROJECT_BINARY_DIR}/verifier.config" - -o "--compiler-hotness-threshold=0" - -o "--no-async-jit" - ${CTS_TEST_PRLIMIT_OPTIONS} - --exclude-tag verifier - ${CTS_TEST_SELECT_OPTION_JIT_ARGS} VERBATIM DEPENDS "$" "$" "${TARGETFILE_ARKQUICK}" "$" "${OUTPUT_FILES}" ) diff --git a/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-AMD64-AOT.txt b/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-AMD64-AOT.txt index 4874bc64fad9ff59002c00d931edb20df0838fb6..138b0a14be762a08b0fdb7a094d65b3cc3e28da0 100644 --- a/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-AMD64-AOT.txt +++ b/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-AMD64-AOT.txt @@ -1,3 +1,6 @@ +# LLVM AOT removes unused allocation +17.experimental_features/02.array_creation_expressions/01.runtime_evaluation_of_array_creation_expressions/expr_5.sts + # 17881 Skip these, because the run fails if multiple files are connected. The connection is necessary, because of the export tests. 13.compilation_units_packages_and_modules/04.import_directives/05.type_import_binding/type_binding_class.sts 13.compilation_units_packages_and_modules/04.import_directives/05.type_import_binding/type_binding_class_alias.sts diff --git a/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-ARM64-AOT.txt b/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-ARM64-AOT.txt index 4874bc64fad9ff59002c00d931edb20df0838fb6..138b0a14be762a08b0fdb7a094d65b3cc3e28da0 100644 --- a/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-ARM64-AOT.txt +++ b/static_core/tests/tests-u-runner/test-lists/ets-cts/ets-cts-ignored-ARM64-AOT.txt @@ -1,3 +1,6 @@ +# LLVM AOT removes unused allocation +17.experimental_features/02.array_creation_expressions/01.runtime_evaluation_of_array_creation_expressions/expr_5.sts + # 17881 Skip these, because the run fails if multiple files are connected. The connection is necessary, because of the export tests. 13.compilation_units_packages_and_modules/04.import_directives/05.type_import_binding/type_binding_class.sts 13.compilation_units_packages_and_modules/04.import_directives/05.type_import_binding/type_binding_class_alias.sts diff --git a/static_core/tests/vm-benchmarks/src/vmb/cli.py b/static_core/tests/vm-benchmarks/src/vmb/cli.py index 1aa21f7cbb9f75ea207589d4e6f246a8a06f4f9b..010470e7cf8a050c1db4c700ea82be739cf62d5a 100644 --- a/static_core/tests/vm-benchmarks/src/vmb/cli.py +++ b/static_core/tests/vm-benchmarks/src/vmb/cli.py @@ -61,7 +61,11 @@ def add_measurement_opts(parser: argparse.ArgumentParser) -> None: help='If >= 0 invoke GC twice ' 'and wait ms before iteration') parser.add_argument("-aot-co", "--aot-compiler-options", default=[], - type=str, action="append", help="aot-compiler options") + type=str, action="append", + help="Sets ahead-of-time compiler options") + parser.add_argument("-aot-lib-co", "--aot-lib-compiler-options", default=[], + type=str, action="append", + help="Sets ahead-of-time compiler options for libraries") parser.add_argument("-c", "--concurrency-level", default=None, type=str, help="Concurrency level (DEPRECATED)") @@ -272,8 +276,16 @@ class Args(argparse.Namespace): mode = ToolMode(self.get('mode')) if ToolMode.AOT == mode: flags |= OptFlags.AOT + elif ToolMode.LLVMAOT == mode: + flags |= OptFlags.AOT | OptFlags.LLVMAOT elif ToolMode.INT == mode: flags |= OptFlags.INT + elif ToolMode.INT_CPP == mode: + flags |= OptFlags.INT | OptFlags.INT_CPP + elif ToolMode.INT_IRTOC == mode: + flags |= OptFlags.INT | OptFlags.INT_IRTOC + elif ToolMode.INT_LLVM == mode: + flags |= OptFlags.INT | OptFlags.INT_LLVM elif ToolMode.JIT == mode: flags |= OptFlags.JIT if self.get('dry_run', False): diff --git a/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_device.py b/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_device.py index 268f2d8a564426c917c11c1702ef3e631f080dd1..9e354d09d0cad8b27541fa7bd6241f4cd67da3c7 100644 --- a/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_device.py +++ b/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_device.py @@ -41,9 +41,11 @@ class Platform(PlatformBase): log.info('Skipping aot compilation of libs') else: an = Path(self.ark.etsstdlib).with_suffix('.an') - log.info('AOT-Compiling %s. This may took a long time...', + aot_lib_opts = ' '.join(args.aot_lib_compiler_options) + log.info('AOT-Compiling %s. This may take a long time...', self.ark.etsstdlib) - res = self.paoc.run_paoc(self.ark.etsstdlib, an, timeout=1800) + res = self.paoc.run_paoc(self.ark.etsstdlib, an, + opts=aot_lib_opts, timeout=1800) if not self.ext_info.get('etsstdlib', {}): self.ext_info['etsstdlib'] = {} self.ext_info['etsstdlib']['etsstdlib.an'] = \ diff --git a/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_host.py b/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_host.py index e6e9e419e9e4ebe403a0afba6c910ba7963121aa..5b3120d5da657ec0969228428b67ffa6405cdbeb 100644 --- a/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_host.py +++ b/static_core/tests/vm-benchmarks/src/vmb/plugins/platforms/arkts_host.py @@ -43,9 +43,11 @@ class Platform(PlatformBase): else: an = ToolBase.libs.joinpath( Path(self.ark.etsstdlib).with_suffix('.an').name) - log.info('AOT-Compiling %s. This may took a long time...', + aot_lib_opts = ' '.join(args.aot_lib_compiler_options) + log.info('AOT-Compiling %s. This may take a long time...', self.ark.etsstdlib) - res = self.paoc.run_paoc(self.ark.etsstdlib, an, timeout=1800) + res = self.paoc.run_paoc(self.ark.etsstdlib, an, + opts=aot_lib_opts, timeout=1800) if not self.ext_info.get('etsstdlib', {}): self.ext_info['etsstdlib'] = {} self.ext_info['etsstdlib']['etsstdlib.an'] = \ diff --git a/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/ark.py b/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/ark.py index 3f4084b056d6e305a80c379eac9892cc2a17dab8..536e0bbf6f9d60e3c0aa6b0571c5c8e4aac890a7 100644 --- a/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/ark.py +++ b/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/ark.py @@ -50,6 +50,12 @@ class Tool(ToolBase): an_files.append(stdlib) if OptFlags.INT in self.flags: opts += '--compiler-enable-jit=false ' + if OptFlags.INT_CPP in self.flags: + opts += '--interpreter-type=cpp ' + if OptFlags.INT_IRTOC in self.flags: + opts += '--interpreter-type=irtoc ' + if OptFlags.INT_LLVM in self.flags: + opts += '--interpreter-type=llvm ' if OptFlags.GC_STATS in self.flags: opts += '--print-gc-statistics --log-components=gc ' \ '--log-level=info --log-stream=file ' \ diff --git a/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/paoc.py b/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/paoc.py index 43bc2b616caa82dd1b96a144816241b562673d45..b8b87ec72ff6223930d20280a910cb8fdee6b8b5 100644 --- a/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/paoc.py +++ b/static_core/tests/vm-benchmarks/src/vmb/plugins/tools/paoc.py @@ -50,8 +50,12 @@ class Tool(ToolBase): aot_stats = '--compiler-dump-stats-csv={an}.dump.csv ' else: aot_stats = '' + if OptFlags.LLVMAOT in self.flags: + aot_mode = '--paoc-mode=llvm ' + else: + aot_mode = '--paoc-mode=aot ' self.cmd = f'LD_LIBRARY_PATH={self.ark_lib} {self.paoc} ' \ - f'--boot-panda-files={self.etsstdlib} ' \ + f'--boot-panda-files={self.etsstdlib} {aot_mode} ' \ '--load-runtimes=ets {opts} ' \ f'{self.custom} {aot_stats}' \ '--paoc-panda-files={abc} ' \ diff --git a/static_core/tests/vm-benchmarks/src/vmb/tool.py b/static_core/tests/vm-benchmarks/src/vmb/tool.py index dad6d25e8bcc8a7184750245796e6a29a77c7e39..e814add66fcdba421b729082cb96c0c603ac6f0b 100644 --- a/static_core/tests/vm-benchmarks/src/vmb/tool.py +++ b/static_core/tests/vm-benchmarks/src/vmb/tool.py @@ -47,6 +47,10 @@ class ToolMode(StringEnum): AOT = 'aot' INT = 'int' JIT = 'jit' + INT_CPP = 'int-cpp' + INT_IRTOC = 'int-irtoc' + INT_LLVM = 'int-llvm' + LLVMAOT = 'llvmaot' DEFAULT = 'default' @@ -58,10 +62,13 @@ class OptFlags(Flag): AOT_SKIP_LIBS = auto() DRY_RUN = auto() DISABLE_INLINING = auto() - # these 3 flags are mutually exclusive (this is guarantied by ToolMode) AOT = auto() INT = auto() JIT = auto() + INT_CPP = auto() + INT_IRTOC = auto() + INT_LLVM = auto() + LLVMAOT = auto() class ToolBase(CrossShell, ABC):