diff --git a/src/mapleall/maple_be/include/cg/cg_option.h b/src/mapleall/maple_be/include/cg/cg_option.h index 10733c709fedf2a63a1acf7b91aab567110229da..4c9556941ddde33de892d13d8c980a6b85990292 100644 --- a/src/mapleall/maple_be/include/cg/cg_option.h +++ b/src/mapleall/maple_be/include/cg/cg_option.h @@ -773,6 +773,18 @@ class CGOptions : public MapleDriverOptionBase { return doPeephole; } + static void EnableRetMerge() { + doRetMerge = true; + } + + static void DisableRetMerge() { + doRetMerge = false; + } + + static bool DoRetMerge() { + return doRetMerge; + } + static void EnablePreSchedule() { doPreSchedule = true; } @@ -1155,6 +1167,7 @@ class CGOptions : public MapleDriverOptionBase { static bool doMultiPassColorRA; static bool doPrePeephole; static bool doPeephole; + static bool doRetMerge; static bool doSchedule; static bool doAlignAnalysis; static bool doWriteRefFieldOpt; diff --git a/src/mapleall/maple_be/src/cg/cg_option.cpp b/src/mapleall/maple_be/src/cg/cg_option.cpp index 8679ba207ac55140be6f87daa6abe413b5fdd8f0..9eb35c144d950930aee7deed8f6c6d3058e2b505 100644 --- a/src/mapleall/maple_be/src/cg/cg_option.cpp +++ b/src/mapleall/maple_be/src/cg/cg_option.cpp @@ -70,6 +70,7 @@ bool CGOptions::doVregRename = false; bool CGOptions::doMultiPassColorRA = true; bool CGOptions::doPrePeephole = false; bool CGOptions::doPeephole = false; +bool CGOptions::doRetMerge = false; bool CGOptions::doSchedule = false; bool CGOptions::doWriteRefFieldOpt = false; bool CGOptions::dumpOptimizeCommonLog = false; @@ -126,6 +127,7 @@ enum OptionIndex : uint64 { kPeep, kPreSchedule, kSchedule, + kRetMerge, kVregRename, kMultiPassRA, kWriteRefFieldOpt, @@ -432,6 +434,16 @@ const Descriptor kUsage[] = { " --no-schedule\n", "mplcg", {} }, + { kRetMerge, + kEnable, + "", + "ret-merge", + kBuildTypeExperimental, + kArgCheckPolicyBool, + " --ret-merge \tMerge return bb into a single destination\n" + " --no-ret-merge \tallows for multiple return bb\n", + "mplcg", + {} }, { kVregRename, kEnable, "", @@ -1388,6 +1400,9 @@ bool CGOptions::SolveOptions(const std::vector