From 2be7836924888af85ac27b25f07993bbb887cedb Mon Sep 17 00:00:00 2001 From: RicoAfoat <3094209316@qq.com> Date: Tue, 20 Aug 2024 15:53:56 +0800 Subject: [PATCH] [inline] Heuristic --- include/lib/Singleton.hpp | 4 ++++ ir/opt/Inline.cpp | 4 ++-- ir/opt/new_passManager.cpp | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/include/lib/Singleton.hpp b/include/lib/Singleton.hpp index eb7639ae..714ab44b 100644 --- a/include/lib/Singleton.hpp +++ b/include/lib/Singleton.hpp @@ -12,4 +12,8 @@ struct IR_CONSTDECL_FLAG struct Enable_Parallel{ bool flag=false; +}; + +struct Inline_Recursion{ + bool flag=false; }; \ No newline at end of file diff --git a/ir/opt/Inline.cpp b/ir/opt/Inline.cpp index 5568799c..90809e77 100644 --- a/ir/opt/Inline.cpp +++ b/ir/opt/Inline.cpp @@ -129,12 +129,12 @@ bool NoRecursive::CanBeInlined(CallInst *call) auto &&master = call->GetParent()->GetParent(); if (slave->tag == Function::Tag::ParallelBody || master->tag == Function::Tag::UnrollBody || slave->tag == Function::Tag::BuildIn) return false; - if (InlineRecursion) + if (Singleton().flag) { static int InlineTimes = 0; if (!master->isRecursive() && !slave->isRecursive()) return true; - if (InlineTimes < 5) + if (InlineTimes<3&&(master->Size()+slave->Size())*3<100) { InlineTimes++; return true; diff --git a/ir/opt/new_passManager.cpp b/ir/opt/new_passManager.cpp index 61dabd88..94920b9d 100644 --- a/ir/opt/new_passManager.cpp +++ b/ir/opt/new_passManager.cpp @@ -193,6 +193,7 @@ void _PassManager::RunOnLevel() { PassChangedBegin(curfunc) } + Singleton().flag=true; while (RunImpl(module, AM)) { RunLevelPass(cfgSimplify, curfunc, modified) RunImpl(module, AM);