diff --git a/src/mapleall/bin/debug/dex2mpl.tar.gz b/src/mapleall/bin/debug/dex2mpl.tar.gz index fc4a647ddfe9ce1ccecb1257b1dcfd6b535a0bb9..714334a56671254f64b1617e5162a5cb5bfe0b0d 100644 Binary files a/src/mapleall/bin/debug/dex2mpl.tar.gz and b/src/mapleall/bin/debug/dex2mpl.tar.gz differ diff --git a/src/mapleall/bin/dex2mpl b/src/mapleall/bin/dex2mpl index d75ddc70b9bb6554cd9a94aeced6cbbfc1395e20..828f81b87c614bd6c5342981cfa1aea7251c57b0 100755 Binary files a/src/mapleall/bin/dex2mpl and b/src/mapleall/bin/dex2mpl differ diff --git a/src/mapleall/bin/dex2mpl_android b/src/mapleall/bin/dex2mpl_android index 3a9a8630cf97f74a30d66581eaa1aba9ac9ede2f..82891c696b30c7401cfcbc860e402408f6a46ebb 100755 Binary files a/src/mapleall/bin/dex2mpl_android and b/src/mapleall/bin/dex2mpl_android differ diff --git a/src/mapleall/bin/jbc2mpl b/src/mapleall/bin/jbc2mpl index 65ebc0b30be0be2f25861af500379d2ee0e72dbc..e8f371171e12eb85e59a0746b0ca88645bf09cb4 100755 Binary files a/src/mapleall/bin/jbc2mpl and b/src/mapleall/bin/jbc2mpl differ diff --git a/src/mapleall/maple_driver/defs/phases.def b/src/mapleall/maple_driver/defs/phases.def index 91dd4619e29287d439219a889f757858dc8fb3e8..3324de9f182fc8d8825591c5d1ca10188c9a7765 100644 --- a/src/mapleall/maple_driver/defs/phases.def +++ b/src/mapleall/maple_driver/defs/phases.def @@ -14,12 +14,12 @@ */ // Phase arguments are: name, condition. By default, all phases are required, so the condition value is 'true'. // You can use condition to control these phases and your custom phases. E.g. ADD_PHASE("custom_phase", option1 == value1 [more conditions...]) -ADD_PHASE("clone", true) -ADD_PHASE("classhierarchy", true) -ADD_PHASE("callgraph", true) -ADD_PHASE("vtableanalysis", true) +ADD_PHASE("clone", JAVALANG) +ADD_PHASE("classhierarchy", JAVALANG) +ADD_PHASE("callgraph", JAVALANG) +ADD_PHASE("vtableanalysis", JAVALANG) ADD_PHASE("reflectionanalysis", JAVALANG) -ADD_PHASE("GenNativeStubFunc", true) +ADD_PHASE("GenNativeStubFunc", JAVALANG) ADD_PHASE("gencheckcast", JAVALANG) ADD_PHASE("javaintrnlowering", JAVALANG) // mephase begin @@ -47,9 +47,9 @@ ADD_PHASE("pregrename", MeOption::optLevel == 2) ADD_PHASE("bblayout", MeOption::optLevel == 2 || JAVALANG) ADD_PHASE("emit", MeOption::optLevel == 2 || JAVALANG) // mephase end -ADD_PHASE("clinit", true) -ADD_PHASE("VtableImpl", true) -ADD_PHASE("CodeReLayout", MeOption::optLevel == 2) +ADD_PHASE("clinit", JAVALANG) +ADD_PHASE("VtableImpl", JAVALANG) +ADD_PHASE("CodeReLayout", MeOption::optLevel == 2 && JAVALANG) ADD_PHASE("javaehlower", JAVALANG) ADD_PHASE("MUIDReplacement", JAVALANG) ADD_PHASE("ConstantFold", JAVALANG) diff --git a/src/mapleall/maple_driver/include/driver_option_common.h b/src/mapleall/maple_driver/include/driver_option_common.h index b2cd14dae7a3d3aa2f0bc1884db37950eba04fe1..c4cee4ea61da0c8c498393882714ce5d139294b5 100644 --- a/src/mapleall/maple_driver/include/driver_option_common.h +++ b/src/mapleall/maple_driver/include/driver_option_common.h @@ -26,6 +26,8 @@ enum DriverOptionIndex { kOptimization0, kOptimization1, kOptimization2, + kCLangOptimization0, + kCLangOptimization2, kWithIpa, kJbc2mplOpt, kDex2mplOpt, diff --git a/src/mapleall/maple_driver/include/mpl_options.h b/src/mapleall/maple_driver/include/mpl_options.h index abf4477f6ff313d3b54a6e227d1f282039e8705b..ffde19a3b3d8ba0bb240d4c039c55a17515457f3 100644 --- a/src/mapleall/maple_driver/include/mpl_options.h +++ b/src/mapleall/maple_driver/include/mpl_options.h @@ -40,7 +40,9 @@ enum InputFileType { enum OptimizationLevel { kO0, kO1, - kO2 + kO2, + kCLangO0, + kCLangO2, }; enum RunMode { diff --git a/src/mapleall/maple_driver/src/driver_option_common.cpp b/src/mapleall/maple_driver/src/driver_option_common.cpp index 87c89867c90cae16628386fef0646e1283bf0b35..86a1f56cbb0f3bc8ae9617f658d4ff0faf6faa28 100644 --- a/src/mapleall/maple_driver/src/driver_option_common.cpp +++ b/src/mapleall/maple_driver/src/driver_option_common.cpp @@ -91,6 +91,24 @@ const mapleOption::Descriptor usages[] = { " -O2 \tDo more optimization. (Default)\n", "all", {} }, + { kCLangOptimization0, + 0, + "c-O0", + "", + kBuildTypeProduct, + kArgCheckPolicyNone, + " -c-O0 \tNo optimization.\n", + "all", + {} }, + { kCLangOptimization2, + 0, + "c-O2", + "", + kBuildTypeProduct, + kArgCheckPolicyNone, + " -c-O2 \tDo more optimization. (Default)\n", + "all", + {} }, { kGCOnly, kEnable, "", diff --git a/src/mapleall/maple_driver/src/mpl_options.cpp b/src/mapleall/maple_driver/src/mpl_options.cpp index 08a04d40f35fcc3a4e2332c20b4d38421dda3e0c..90edc6ea41691908ce1b233ab4ee5e1cdac5a3a8 100644 --- a/src/mapleall/maple_driver/src/mpl_options.cpp +++ b/src/mapleall/maple_driver/src/mpl_options.cpp @@ -189,6 +189,22 @@ ErrorCode MplOptions::DecideRunType() { optimizationLevel = kO2; } break; + case kCLangOptimization0: + if (runMode == RunMode::kCustomRun) { // O0 and run should not appear at the same time + runModeConflict = true; + } else { + runMode = RunMode::kAutoRun; + optimizationLevel = kCLangO0; + } + break; + case kCLangOptimization2: + if (runMode == RunMode::kCustomRun) { // O0 and run should not appear at the same time + runModeConflict = true; + } else { + runMode = RunMode::kAutoRun; + optimizationLevel = kCLangO2; + } + break; case kRun: if (runMode == RunMode::kAutoRun) { // O0 and run should not appear at the same time runModeConflict = true; @@ -342,23 +358,27 @@ bool MplOptions::Init(const std::string &inputFile) { ErrorCode MplOptions::AppendDefaultCombOptions() { ErrorCode ret = kErrorNoError; - if (optimizationLevel == kO0) { + if (optimizationLevel == kO0 || optimizationLevel == kCLangO0) { ret = AppendDefaultOptions(kBinNameMe, kMeDefaultOptionsO0, sizeof(kMeDefaultOptionsO0) / sizeof(MplOption)); if (ret != kErrorNoError) { return ret; } - ret = AppendDefaultOptions(kBinNameMpl2mpl, kMpl2MplDefaultOptionsO0, - sizeof(kMpl2MplDefaultOptionsO0) / sizeof(MplOption)); + if (optimizationLevel == kO0) { + ret = AppendDefaultOptions(kBinNameMpl2mpl, kMpl2MplDefaultOptionsO0, + sizeof(kMpl2MplDefaultOptionsO0) / sizeof(MplOption)); + } if (ret != kErrorNoError) { return ret; } - } else if (optimizationLevel == kO2) { + } else if (optimizationLevel == kO2 || optimizationLevel == kCLangO2) { ret = AppendDefaultOptions(kBinNameMe, kMeDefaultOptionsO2, sizeof(kMeDefaultOptionsO2) / sizeof(MplOption)); if (ret != kErrorNoError) { return ret; } - ret = AppendDefaultOptions(kBinNameMpl2mpl, kMpl2MplDefaultOptionsO2, - sizeof(kMpl2MplDefaultOptionsO2) / sizeof(MplOption)); + if (optimizationLevel == kO2) { + ret = AppendDefaultOptions(kBinNameMpl2mpl, kMpl2MplDefaultOptionsO2, + sizeof(kMpl2MplDefaultOptionsO2) / sizeof(MplOption)); + } if (ret != kErrorNoError) { return ret; } @@ -368,13 +388,13 @@ ErrorCode MplOptions::AppendDefaultCombOptions() { ErrorCode MplOptions::AppendDefaultCgOptions() { ErrorCode ret = kErrorNoError; - if (optimizationLevel == kO0) { + if (optimizationLevel == kO0 || optimizationLevel == kCLangO0) { ret = AppendDefaultOptions(kBinNameMplcg, kMplcgDefaultOptionsO0, sizeof(kMplcgDefaultOptionsO0) / sizeof(MplOption)); if (ret != kErrorNoError) { return ret; } - } else if (optimizationLevel == kO2) { + } else if (optimizationLevel == kO2 || optimizationLevel == kCLangO2) { ret = AppendDefaultOptions(kBinNameMplcg, kMplcgDefaultOptionsO2, sizeof(kMplcgDefaultOptionsO2) / sizeof(MplOption)); if (ret != kErrorNoError) { diff --git a/src/mapleall/maple_ir/src/parser.cpp b/src/mapleall/maple_ir/src/parser.cpp index ca5fab5fbf741cf69e7563667cf5d7d26a4107e3..88d66168ea80c28144695004787cb4848102e156 100644 --- a/src/mapleall/maple_ir/src/parser.cpp +++ b/src/mapleall/maple_ir/src/parser.cpp @@ -523,6 +523,7 @@ bool MIRParser::ParsePragma(MIRStructType &type) { return false; } p->SetTyIdx(tyIdx); + tk = lexer.GetTokenKind(); if (tk != TK_lbrace) { TyIdx tyIdxEx; @@ -532,6 +533,7 @@ bool MIRParser::ParsePragma(MIRStructType &type) { } p->SetTyIdxEx(tyIdxEx); } + tk = lexer.NextToken(); while (tk != TK_rbrace) { auto *e = mod.GetMemPool()->New(mod);