diff --git a/src/bin/jbc2mpl b/src/bin/jbc2mpl index 6c34ff45ba4a6a7b3527b6f089788cd134a0c6e5..0ec0fc76111db1ad55ee08f5c33d4ce6c6e817f2 100755 Binary files a/src/bin/jbc2mpl and b/src/bin/jbc2mpl differ diff --git a/src/bin/maple b/src/bin/maple index 91a8cfa45d9ed7e912a6e2784334e0762c43707a..ed53b9672d2f3eafcd08ee10f70646a1a4e08eaa 100755 Binary files a/src/bin/maple and b/src/bin/maple differ diff --git a/src/bin/mplcg b/src/bin/mplcg index b614723a41d7984bcd877ef886e701293921ff8c..e5195020daf85b8a2e8f2456625a71feed7d66b3 100755 Binary files a/src/bin/mplcg and b/src/bin/mplcg differ diff --git a/src/deplibs/libmaple_driverutil.a b/src/deplibs/libmaple_driverutil.a index dfc8618702d06c1489e30773926b29f0974622d2..4e03a45eed804d987a77e4395f3b4e8690e29368 100644 Binary files a/src/deplibs/libmaple_driverutil.a and b/src/deplibs/libmaple_driverutil.a differ diff --git a/src/deplibs/libmplutil.a b/src/deplibs/libmplutil.a index 690e1097824a4af8cb69282bd8fd9efb19ea6bf7..60b222cc866e817616d7167b2d4b0aafc1afd520 100644 Binary files a/src/deplibs/libmplutil.a and b/src/deplibs/libmplutil.a differ diff --git a/src/maple_driver/BUILD.gn b/src/maple_driver/BUILD.gn index 03b30dee59f1b23f660bd421e4d5f392a85cd2d0..4295974185ec0591d49613a3eb3bf8cd1974a6f1 100644 --- a/src/maple_driver/BUILD.gn +++ b/src/maple_driver/BUILD.gn @@ -15,7 +15,6 @@ include_directories = [ "${MAPLEALL_ROOT}/maplewpo/include", "${MAPLEALL_ROOT}/maple_ipa/include", "${MAPLEALL_ROOT}/maple_phase/include", - "${MAPLEALL_ROOT}/maplecomb/include", "${MAPLEALL_ROOT}/maple_util/include", "${MAPLEALL_ROOT}/maple_ir/include", "${MAPLEALL_ROOT}/maple_me/include", diff --git a/src/maple_driver/include/mpl_options.h b/src/maple_driver/include/mpl_options.h index 7ae85e471d14de3ebb47ee3af77a0285bdf261d0..74458154cc4c9fde4a5d8b57e10a1a74f542949a 100644 --- a/src/maple_driver/include/mpl_options.h +++ b/src/maple_driver/include/mpl_options.h @@ -113,6 +113,8 @@ struct DefaultOption { class MplOptions { public: MplOptions() = default; + MplOptions(const MplOptions &options) = delete; + MplOptions &operator=(const MplOptions &options) = delete; ~MplOptions() = default; int Parse(int argc, char **argv); diff --git a/src/maple_driver/src/driver_runner.cpp b/src/maple_driver/src/driver_runner.cpp index 77db5ec8debd44dcb6cd61d0ef54e220c0a298c8..35bcfe060ef539c2f72f6ec8826dd216c0a916b3 100644 --- a/src/maple_driver/src/driver_runner.cpp +++ b/src/maple_driver/src/driver_runner.cpp @@ -82,7 +82,7 @@ ErrorCode DriverRunner::Run() { if (ret != kErrorNoError) { return kErrorExit; } - if (mpl2mplOptions || meOptions) { + if (mpl2mplOptions != nullptr || meOptions != nullptr) { std::string vtableImplFile = originBaseName; vtableImplFile.append(".VtableImpl.mpl"); originBaseName.append(".VtableImpl"); @@ -139,7 +139,7 @@ bool DriverRunner::VerifyModule(MIRModulePtr &mModule) const { void DriverRunner::ProcessMpl2mplAndMePhases(const std::string &outputFile, const std::string &vtableImplFile) const { CHECK_MODULE(); - if (mpl2mplOptions || meOptions) { + if (mpl2mplOptions != nullptr || meOptions != nullptr) { LogInfo::MapleLogger() << "Processing mpl2mpl&mplme" << '\n'; MPLTimer timer; timer.Start(); diff --git a/src/maple_driver/src/maple_comb_compiler.cpp b/src/maple_driver/src/maple_comb_compiler.cpp index 61349468b34d64839218e5f7c9f0687eae78df9a..abdf0e4ed4f321913de8f8db58ea56016dd70b18 100644 --- a/src/maple_driver/src/maple_comb_compiler.cpp +++ b/src/maple_driver/src/maple_comb_compiler.cpp @@ -212,7 +212,7 @@ Options *MapleCombCompiler::MakeMpl2MplOptions(const MplOptions &options, MemPoo mpl2mplOption->regNativeFunc = true; break; case kNativeWrapper: - mpl2mplOption->nativeWrapper = opt.Type(); + mpl2mplOption->nativeWrapper = opt.Type() > 0; break; case kInlineWithProfile: mpl2mplOption->inlineWithProfile = true; diff --git a/src/maple_ir/include/metadata_layout.h b/src/maple_ir/include/metadata_layout.h index 6d2f2c6551ba90fbb57897170973639f2f40d47c..60ba9221082747bdea38d48890e8753854cca934 100644 --- a/src/maple_ir/include/metadata_layout.h +++ b/src/maple_ir/include/metadata_layout.h @@ -189,6 +189,11 @@ struct ClassMetadataRO { }; static constexpr size_t PageSize = 4096; + +// according to kSpaceAnchor and kFireBreak defined in bpallocator.cpp +// the address of this readable page is set as kClassInitialized for java class +static constexpr uintptr_t kClassInitializedState = 0xC0000000 - (1u << 20) * 2; + extern "C" uint8_t classInitProtectRegion[]; // Note there is no state to indicate a class is already initialized. diff --git a/src/maple_ir/src/lexer.cpp b/src/maple_ir/src/lexer.cpp index bcc537939ea925fb53d49584a4f6fa7b56be3e29..af96c361cdcf771489c964609f05d3e99889aab6 100644 --- a/src/maple_ir/src/lexer.cpp +++ b/src/maple_ir/src/lexer.cpp @@ -397,7 +397,7 @@ TokenKind MIRLexer::GetTokenWithPrefixDoubleQuotation() { // for \", skip the \ to leave " only internally // and also for the pair of chars \ and n become '\n' etc. char c = GetCurrentCharWithUpperCheck(); - while ((c != 0) && (c != '\"' || (c == '\"' && GetCharAtWithLowerCheck(curIdx - 1) == '\\'))) { + while ((c != 0) && (c != '\"' || GetCharAtWithLowerCheck(curIdx - 1) == '\\')) { if (GetCharAtWithLowerCheck(curIdx - 1) == '\\') { shift++; switch (c) { diff --git a/src/maple_me/include/alias_class.h b/src/maple_me/include/alias_class.h index 96584d11e9bb5a720864dacab42d5deab1432437..8f3737a29d7b545d6078ecbff41f2fb9f43c7f2d 100644 --- a/src/maple_me/include/alias_class.h +++ b/src/maple_me/include/alias_class.h @@ -113,7 +113,7 @@ class AliasClass : public AnalysisResult { } const AliasElem *FindAliasElem(const OriginalSt &ost) const { - return osym2Elem.at(ost.GetIndex().idx); + return osym2Elem.at(ost.GetIndex()); } AliasElem *FindAliasElem(const OriginalSt &ost) { return const_cast(const_cast(this)->FindAliasElem(ost)); @@ -131,7 +131,7 @@ class AliasClass : public AnalysisResult { } bool IsCreatedByElimRC(const OriginalSt &ost) const { - return ost.GetIndex().idx >= osym2Elem.size(); + return ost.GetIndex() >= osym2Elem.size(); } void ReinitUnionFind() { diff --git a/src/maple_me/include/me_ir.h b/src/maple_me/include/me_ir.h index 573cb2142f75e1647e2b76e7a9b7791825be3ba4..7a564f7469b2d80f568900d0ee8f260a605059d2 100644 --- a/src/maple_me/include/me_ir.h +++ b/src/maple_me/include/me_ir.h @@ -714,8 +714,8 @@ class FieldsDistMeExpr : public MeExpr { uint32 GetHashIndex() const override { constexpr uint32 kFieldsDistHashShift = 5; constexpr uint32 kTyIdxShiftFactor = 10; - return (static_cast(tyIdx) << kTyIdxShiftFactor) + (static_cast(fieldID1) << kFieldsDistHashShift) + - fieldID2; + return (static_cast(tyIdx) << kTyIdxShiftFactor) + + (static_cast(fieldID1) << kFieldsDistHashShift) + fieldID2; } private: @@ -749,7 +749,7 @@ class AddrofMeExpr : public MeExpr { uint32 GetHashIndex() const override { constexpr uint32 addrofHashShift = 4; - return ostIdx.idx << addrofHashShift; + return static_cast(ostIdx) << addrofHashShift; } private: diff --git a/src/maple_me/include/orig_symbol.h b/src/maple_me/include/orig_symbol.h index 652c057b9ca5970c3e60d78ac84844c8a4d5c9a7..cc7b2bd5280488ef8b506fae5433c1495b2ab3a7 100644 --- a/src/maple_me/include/orig_symbol.h +++ b/src/maple_me/include/orig_symbol.h @@ -18,29 +18,13 @@ #include "mir_symbol.h" #include "mir_preg.h" #include "mir_function.h" +#include "mpl_number.h" // This file defines the data structure OriginalSt that represents a program // symbol occurring in the code of the program being optimized. namespace maple { -struct OStIdx { - size_t idx = 0; - - OStIdx() = default; - - explicit OStIdx(size_t i) : idx(i) {} - - bool operator==(const OStIdx &x) const { - return idx == x.idx; - } - - bool operator!=(const OStIdx &x) const { - return !(*this == x); - } - - bool operator<(const OStIdx &x) const { - return idx < x.idx; - } -}; +class OStTag; +using OStIdx = utils::Index; constexpr int kInitVersion = 0; class VarMeExpr; // circular dependency exists, no other choice @@ -256,11 +240,11 @@ class OriginalStTable { OriginalSt *CreatePregOriginalSt(PregIdx pregIdx, PUIdx puIdx); OriginalSt *FindSymbolOriginalSt(MIRSymbol &mirSt); const OriginalSt *GetOriginalStFromID(OStIdx id, bool checkFirst = false) const { - if (checkFirst && id.idx >= originalStVector.size()) { + if (checkFirst && id >= originalStVector.size()) { return nullptr; } - ASSERT(id.idx < originalStVector.size(), "symbol table index out of range"); - return originalStVector[id.idx]; + ASSERT(id < originalStVector.size(), "symbol table index out of range"); + return originalStVector[id]; } OriginalSt *GetOriginalStFromID(OStIdx id, bool checkFirst = false) { return const_cast(const_cast(this)->GetOriginalStFromID(id, checkFirst)); @@ -294,23 +278,23 @@ class OriginalStTable { } void SetEPreLocalRefVar(const OStIdx &id, bool epreLocalrefvarPara = true) { - ASSERT(id.idx < originalStVector.size(), "symbol table index out of range"); - originalStVector[id.idx]->SetEPreLocalRefVar(epreLocalrefvarPara); + ASSERT(id < originalStVector.size(), "symbol table index out of range"); + originalStVector[id]->SetEPreLocalRefVar(epreLocalrefvarPara); } void SetZeroVersionIndex(const OStIdx &id, size_t zeroVersionIndexParam) { - ASSERT(id.idx < originalStVector.size(), "symbol table index out of range"); - originalStVector[id.idx]->SetZeroVersionIndex(zeroVersionIndexParam); + ASSERT(id < originalStVector.size(), "symbol table index out of range"); + originalStVector[id]->SetZeroVersionIndex(zeroVersionIndexParam); } size_t GetVersionsIndexSize(const OStIdx &id) const { - ASSERT(id.idx < originalStVector.size(), "symbol table index out of range"); - return originalStVector[id.idx]->GetVersionsIndex().size(); + ASSERT(id < originalStVector.size(), "symbol table index out of range"); + return originalStVector[id]->GetVersionsIndex().size(); } void UpdateVarOstMap(const OStIdx &id, std::map &varOstMap) { - ASSERT(id.idx < originalStVector.size(), "symbol table index out of range"); - varOstMap[id] = originalStVector[id.idx]; + ASSERT(id < originalStVector.size(), "symbol table index out of range"); + varOstMap[id] = originalStVector[id]; } void Dump(); @@ -336,7 +320,7 @@ namespace std { template <> struct hash { size_t operator()(const maple::OStIdx &x) const { - return x.idx; + return static_cast(x); } }; } // namespace std diff --git a/src/maple_me/src/alias_class.cpp b/src/maple_me/src/alias_class.cpp index 58784b3cdc7f9c9df6b948860a72bad6c0948608..dcc2448032d930109d334b12b7f43fbfc91f68c5 100644 --- a/src/maple_me/src/alias_class.cpp +++ b/src/maple_me/src/alias_class.cpp @@ -56,9 +56,9 @@ bool AliasClass::CallHasNoPrivateDefEffect(const CallNode &stmt) const { // here starts pass 1 code AliasElem *AliasClass::FindOrCreateAliasElem(OriginalSt &ost) { OStIdx ostIdx = ost.GetIndex(); - CHECK_FATAL(ostIdx.idx > 0, "Invalid ost index"); - CHECK_FATAL(ostIdx.idx < osym2Elem.size(), "Index out of range"); - AliasElem *aliasElem = osym2Elem[ostIdx.idx]; + CHECK_FATAL(ostIdx > 0, "Invalid ost index"); + CHECK_FATAL(ostIdx < osym2Elem.size(), "Index out of range"); + AliasElem *aliasElem = osym2Elem[ostIdx]; if (aliasElem != nullptr) { return aliasElem; } @@ -79,7 +79,7 @@ AliasElem *AliasClass::FindOrCreateAliasElem(OriginalSt &ost) { aliasElem->SetNextLevNotAllDefsSeen(true); } id2Elem.push_back(aliasElem); - osym2Elem[ostIdx.idx] = aliasElem; + osym2Elem[ostIdx] = aliasElem; unionFind.NewMember(); return aliasElem; } @@ -92,7 +92,7 @@ AliasElem *AliasClass::FindOrCreateExtraLevAliasElem(BaseNode &expr, TyIdx tyIdx OriginalSt *newOst = GetAliasAnalysisTable()->FindOrCreateExtraLevOriginalSt(aliasElem->GetOriginalSt(), tyIdx, fieldId); CHECK_FATAL(newOst != nullptr, "null ptr check"); - if (newOst->GetIndex().idx == osym2Elem.size()) { + if (newOst->GetIndex() == osym2Elem.size()) { osym2Elem.push_back(nullptr); ssaTab.GetVersionStTable().CreateVersionSt(newOst, kInitVersion); } @@ -101,7 +101,7 @@ AliasElem *AliasClass::FindOrCreateExtraLevAliasElem(BaseNode &expr, TyIdx tyIdx AliasElem &AliasClass::FindOrCreateAliasElemOfAddrofOSt(OriginalSt &oSt) { OriginalSt *addrofOst = GetAliasAnalysisTable()->FindOrCreateAddrofSymbolOriginalSt(oSt); - if (addrofOst->GetIndex().idx == osym2Elem.size()) { + if (addrofOst->GetIndex() == osym2Elem.size()) { osym2Elem.push_back(nullptr); } return *FindOrCreateAliasElem(*addrofOst); @@ -416,14 +416,14 @@ AliasElem *AliasClass::FindOrCreateDummyNADSAe() { dummySym->SetIsDeleted(); OriginalSt *dummyOst = ssaTab.GetOriginalStTable().CreateSymbolOriginalSt(*dummySym, 0, 0); ssaTab.GetVersionStTable().FindOrCreateVersionSt(dummyOst, kInitVersion); - if (osym2Elem.size() == dummyOst->GetIndex().idx) { + if (osym2Elem.size() == dummyOst->GetIndex()) { AliasElem *dummyAe = acMemPool.New(osym2Elem.size(), *dummyOst); dummyAe->SetNotAllDefsSeen(true); id2Elem.push_back(dummyAe); osym2Elem.push_back(dummyAe); unionFind.NewMember(); } - return osym2Elem[dummyOst->GetIndex().idx]; + return osym2Elem[dummyOst->GetIndex()]; } // TBAA @@ -720,7 +720,7 @@ void AliasClass::InsertMayUseAll(const StmtNode &stmt) { } void AliasClass::CollectMayDefForDassign(const StmtNode &stmt, std::set &mayDefOsts) { - AliasElem *lhsAe = osym2Elem.at(ssaTab.GetStmtsSSAPart().GetAssignedVarOf(stmt)->GetOrigIdx().idx); + AliasElem *lhsAe = osym2Elem.at(ssaTab.GetStmtsSSAPart().GetAssignedVarOf(stmt)->GetOrigIdx()); ASSERT(lhsAe != nullptr, "aliaselem of lhs should not be null"); if (lhsAe->GetClassSet() != nullptr) { for (unsigned int elemID : *(lhsAe->GetClassSet())) { @@ -776,7 +776,7 @@ void AliasClass::CollectMayDefForIassign(StmtNode &stmt, std::set & } } CHECK_FATAL(lhsOst != nullptr, "AliasClass::InsertMayUseExpr: cannot find next level ost"); - lhsAe = osym2Elem[lhsOst->GetIndex().idx]; + lhsAe = osym2Elem[lhsOst->GetIndex()]; } else { lhsAe = FindOrCreateDummyNADSAe(); } @@ -823,13 +823,13 @@ void AliasClass::InsertMayDefUseSyncOps(StmtNode &stmt) { if (addrBase->IsSSANode()) { OriginalSt *oSt = static_cast(addrBase)->GetSSAVar()->GetOrigSt(); if (addrBase->GetOpCode() == OP_addrof) { - AliasElem *opndAE = osym2Elem[oSt->GetIndex().idx]; + AliasElem *opndAE = osym2Elem[oSt->GetIndex()]; if (opndAE->GetClassSet() != nullptr) { aliasSet.insert(opndAE->GetClassSet()->cbegin(), opndAE->GetClassSet()->cend()); } } else { for (OriginalSt *nextLevelOst : *(GetAliasAnalysisTable()->GetNextLevelNodes(*oSt))) { - AliasElem *opndAE = osym2Elem[nextLevelOst->GetIndex().idx]; + AliasElem *opndAE = osym2Elem[nextLevelOst->GetIndex()]; if (opndAE->GetClassSet() != nullptr) { aliasSet.insert(opndAE->GetClassSet()->cbegin(), opndAE->GetClassSet()->cend()); } @@ -865,7 +865,7 @@ void AliasClass::CollectMayDefForMustDefs(const StmtNode &stmt, std::setGetOrigSt(); - AliasElem *lhsAe = osym2Elem[ost->GetIndex().idx]; + AliasElem *lhsAe = osym2Elem[ost->GetIndex()]; if (lhsAe->GetClassSet() == nullptr || lhsAe->IsNotAllDefsSeen()) { continue; } @@ -993,7 +993,7 @@ void AliasClass::InsertMayDefUseIntrncall(StmtNode &stmt) { void AliasClass::InsertMayDefUseClinitCheck(IntrinsiccallNode &stmt) { MapleMap &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); for (OStIdx ostIdx : globalsMayAffectedByClinitCheck) { - AliasElem *aliasElem = osym2Elem[ostIdx.idx]; + AliasElem *aliasElem = osym2Elem[ostIdx]; OriginalSt &ostOfAE = aliasElem->GetOriginalSt(); std::string typeNameOfOst = ostOfAE.GetMIRSymbol()->GetName(); std::string typeNameOfStmt = GlobalTables::GetTypeTable().GetTypeFromTyIdx(stmt.GetTyIdx())->GetName(); diff --git a/src/maple_me/src/bb.cpp b/src/maple_me/src/bb.cpp index 7816c836ea36f37d8a2623cf33255b1d59e5f210..67db6f60a47523074ca63de56eb397a05838a1d1 100644 --- a/src/maple_me/src/bb.cpp +++ b/src/maple_me/src/bb.cpp @@ -338,7 +338,7 @@ void BB::ReplaceMeStmt(MeStmt *stmt, MeStmt *newStmt) { } void BB::DumpMeBB(IRMap &irMap) { - for(MeStmt &meStmt : GetMeStmts()) { + for (MeStmt &meStmt : GetMeStmts()) { meStmt.Dump(&irMap); } } diff --git a/src/maple_me/src/me_alias_class.cpp b/src/maple_me/src/me_alias_class.cpp index fd632bf0a10fc763c77a50db8dea31538a476d6e..5b76df69275adb4ae8ab84781809f555b1f6ab60 100644 --- a/src/maple_me/src/me_alias_class.cpp +++ b/src/maple_me/src/me_alias_class.cpp @@ -41,7 +41,6 @@ bool MeAliasClass::HasWriteToStaticFinal() const { } void MeAliasClass::DoAliasAnalysis() { - for (auto bIt = func.valid_begin(); bIt != func.valid_end(); ++bIt) { for (auto &stmt : (*bIt)->GetStmtNodes()) { ApplyUnionForCopies(stmt); diff --git a/src/maple_me/src/orig_symbol.cpp b/src/maple_me/src/orig_symbol.cpp index e20e6afa34cf7cc8b5a45e139106bf73aad4508d..0f4aa35ad93bcb378de0b6d11bfff87d54730b93 100644 --- a/src/maple_me/src/orig_symbol.cpp +++ b/src/maple_me/src/orig_symbol.cpp @@ -70,14 +70,15 @@ OriginalSt *OriginalStTable::FindOrCreateSymbolOriginalSt(MIRSymbol &mirst, PUId // create a new OriginalSt return CreateSymbolOriginalSt(mirst, pidx, fld); } - CHECK_FATAL(it->second.idx < originalStVector.size(), + CHECK_FATAL(it->second < originalStVector.size(), "index out of range in OriginalStTable::FindOrCreateSymbolOriginalSt"); - return originalStVector[it->second.idx]; + return originalStVector[it->second]; } OriginalSt *OriginalStTable::FindOrCreatePregOriginalSt(PregIdx regidx, PUIdx pidx) { auto it = preg2Ost.find(regidx); - return (it == preg2Ost.end()) ? CreatePregOriginalSt(regidx, pidx) : originalStVector.at(it->second.idx); + return (it == preg2Ost.end()) ? CreatePregOriginalSt(regidx, pidx) + : originalStVector.at(it->second); } OriginalSt *OriginalStTable::CreateSymbolOriginalSt(MIRSymbol &mirst, PUIdx pidx, FieldID fld) { @@ -116,8 +117,7 @@ OriginalSt *OriginalStTable::FindSymbolOriginalSt(MIRSymbol &mirst) { if (it == mirSt2Ost.end()) { return nullptr; } - CHECK_FATAL(it->second.idx < originalStVector.size(), - "index out of range in OriginalStTable::FindSymbolOriginalSt"); - return originalStVector[it->second.idx]; + CHECK_FATAL(it->second < originalStVector.size(), "index out of range in OriginalStTable::FindSymbolOriginalSt"); + return originalStVector[it->second]; } } // namespace maple diff --git a/src/maple_me/src/ssa.cpp b/src/maple_me/src/ssa.cpp index f13735a1fad681fa2335193ff63a6b944e6df168..c0f4692d0262f109a6bf7fd319963a8257c9ca44 100644 --- a/src/maple_me/src/ssa.cpp +++ b/src/maple_me/src/ssa.cpp @@ -40,9 +40,10 @@ VersionSt *SSA::CreateNewVersion(VersionSt &vSym, BB &defBB) { if (oSt->IsVolatile() || oSt->IsSpecialPreg()) { return &vSym; } - CHECK_FATAL(vSym.GetOrigIdx().idx < vstVersions.size(), "index out of range in SSA::CreateNewVersion"); - VersionSt *newVersionSym = ssaTab->GetVersionStTable().CreateVSymbol(&vSym, ++vstVersions[vSym.GetOrigIdx().idx]); - vstStacks[vSym.GetOrigIdx().idx]->push(newVersionSym); + CHECK_FATAL(vSym.GetOrigIdx() < vstVersions.size(), "index out of range in SSA::CreateNewVersion"); + VersionSt *newVersionSym = + ssaTab->GetVersionStTable().CreateVSymbol(&vSym, ++vstVersions[vSym.GetOrigIdx()]); + vstStacks[vSym.GetOrigIdx()]->push(newVersionSym); newVersionSym->SetDefBB(&defBB); return newVersionSym; } @@ -75,8 +76,8 @@ void SSA::RenameDefs(StmtNode &stmt, BB &defBB) { for (auto it = mayDefList.begin(); it != mayDefList.end(); it++) { MayDefNode &mayDef = it->second; VersionSt *vSym = mayDef.GetResult(); - CHECK_FATAL(vSym->GetOrigIdx().idx < vstStacks.size(), "index out of range in SSA::RenameMayDefs"); - mayDef.SetOpnd(vstStacks[vSym->GetOrigIdx().idx]->top()); + CHECK_FATAL(vSym->GetOrigIdx() < vstStacks.size(), "index out of range in SSA::RenameMayDefs"); + mayDef.SetOpnd(vstStacks[vSym->GetOrigIdx()]->top()); VersionSt *newVersionSym = CreateNewVersion(*vSym, defBB); mayDef.SetResult(newVersionSym); newVersionSym->SetDefType(VersionSt::kMayDef); @@ -104,8 +105,8 @@ void SSA::RenameMayUses(BaseNode &node) { for (; it != mayUseList.end(); it++) { MayUseNode &mayUse = it->second; VersionSt *vSym = mayUse.GetOpnd(); - CHECK_FATAL(vSym->GetOrigIdx().idx < vstStacks.size(), "index out of range in SSA::RenameMayUses"); - mayUse.SetOpnd(vstStacks.at(vSym->GetOrigIdx().idx)->top()); + CHECK_FATAL(vSym->GetOrigIdx() < vstStacks.size(), "index out of range in SSA::RenameMayUses"); + mayUse.SetOpnd(vstStacks.at(vSym->GetOrigIdx())->top()); } } @@ -113,8 +114,8 @@ void SSA::RenameExpr(BaseNode &expr) { if (expr.IsSSANode()) { auto &ssaNode = static_cast(expr); VersionSt *vSym = ssaNode.GetSSAVar(); - CHECK_FATAL(vSym->GetOrigIdx().idx < vstStacks.size(), "index out of range in SSA::RenameExpr"); - ssaNode.SetSSAVar(*vstStacks[vSym->GetOrigIdx().idx]->top()); + CHECK_FATAL(vSym->GetOrigIdx() < vstStacks.size(), "index out of range in SSA::RenameExpr"); + ssaNode.SetSSAVar(*vstStacks[vSym->GetOrigIdx()]->top()); } for (size_t i = 0; i < expr.NumOpnds(); ++i) { RenameExpr(*expr.Opnd(i)); @@ -144,9 +145,9 @@ void SSA::RenamePhiUseInSucc(BB &bb) { // rename the phiOpnds[index] in all the phis in succ_bb for (auto phiIt = succBB->GetPhiList().begin(); phiIt != succBB->GetPhiList().end(); ++phiIt) { PhiNode &phiNode = phiIt->second; - CHECK_FATAL(phiNode.GetPhiOpnd(index)->GetOrigIdx().idx < vstStacks.size(), + CHECK_FATAL(phiNode.GetPhiOpnd(index)->GetOrigIdx() < vstStacks.size(), "out of range SSA::RenamePhiUseInSucc"); - phiNode.SetPhiOpnd(index, *vstStacks.at(phiNode.GetPhiOpnd(index)->GetOrigIdx().idx)->top()); + phiNode.SetPhiOpnd(index, *vstStacks.at(phiNode.GetPhiOpnd(index)->GetOrigIdx())->top()); } } } diff --git a/src/mempool/include/maple_string.h b/src/mempool/include/maple_string.h index bf95cb54c56bbd3bc3d2f66dbb5d4d6fcd24875c..3d4f59a7916881c034a5c17cfac85661f3acae74 100644 --- a/src/mempool/include/maple_string.h +++ b/src/mempool/include/maple_string.h @@ -15,7 +15,7 @@ #ifndef MEMPOOL_INCLUDE_MAPLE_STRING_H #define MEMPOOL_INCLUDE_MAPLE_STRING_H #include -#include +#include #include "mempool.h" #include "securec.h" #include "mpl_logging.h" diff --git a/src/mempool/include/mempool.h b/src/mempool/include/mempool.h index 23e807d60eeea846aaf2a0484053a8bcba0818b6..ac1d7ad823238cecf0dc304caea1acf0fe33205c 100644 --- a/src/mempool/include/mempool.h +++ b/src/mempool/include/mempool.h @@ -115,13 +115,13 @@ class MemPool { return static_cast(p); } -#define BitsAlign(size) (((size) + 7) & (0xFFFFFFF8)) -#define MemBlockFirstPtr(x) \ - static_cast((reinterpret_cast(x)) + BitsAlign(sizeof(MemPoolCtrler::MemBlock))) +#define BITS_ALIGN(size) (((size) + 7) & (0xFFFFFFF8)) +#define MEM_BLOCK_FIRST_PTR(x) \ + static_cast((reinterpret_cast(x)) + BITS_ALIGN(sizeof(MemPoolCtrler::MemBlock))) private: // constants static constexpr size_t kMinBlockSize = 0x800; // Minimum BlockSize is 2K - static constexpr size_t kMemBlockOverhead = (BitsAlign(sizeof(MemPoolCtrler::MemBlock))); + static constexpr size_t kMemBlockOverhead = (BITS_ALIGN(sizeof(MemPoolCtrler::MemBlock))); MemPoolCtrler::MemBlock *GetLargeMemBlock(size_t size); // Raw allocate large memory block MemPoolCtrler::MemBlock *GetMemBlock(size_t size); MemPoolCtrler *ctrler; // Hookup controller object diff --git a/src/mpl2mpl/include/muid_replacement.h b/src/mpl2mpl/include/muid_replacement.h index d6c0005c3523a70807886da2eb050b2ca6c05408..307d1e95534d1f1bc31fa9def86261dc9b3dbd6e 100644 --- a/src/mpl2mpl/include/muid_replacement.h +++ b/src/mpl2mpl/include/muid_replacement.h @@ -46,10 +46,13 @@ enum RangeIdx { kJavatext = 13, kJavajni = 14, kJavajniFunc = 15, - kMaxNum = 16, + kOldMaxNum = 16, // Old num kDataSection = 17, kDecoupleStaticKey = 18, - kDecoupleStaticValue = 19 + kDecoupleStaticValue = 19, + kBssStart = 20, + kLinkerSoHash = 21, + kNewMaxNum = 22 // New num }; class MUIDReplacement : public FuncOptimizeImpl { diff --git a/src/mpl2mpl/src/muid_replacement.cpp b/src/mpl2mpl/src/muid_replacement.cpp index 412a77dac7ed6fe6dd21237c6a0b19530707cdf0..4b5a4da7db7a074708b175f4b86deeea7bb1b26a 100644 --- a/src/mpl2mpl/src/muid_replacement.cpp +++ b/src/mpl2mpl/src/muid_replacement.cpp @@ -644,7 +644,7 @@ void MUIDReplacement::GenerateRangeTable() { builder->AddIntFieldConst(rangeTabEntryType, *entryConst, fieldID++, mplMd5.data.words[1]); rangeTabConst->PushBack(entryConst); } - for (uint32 i = RangeIdx::kVtab; i < RangeIdx::kMaxNum; ++i) { + for (uint32 i = RangeIdx::kVtab; i < RangeIdx::kOldMaxNum; ++i) { // Use an integer to mark which entry is for which table MIRAggConst *entryConst = GetMIRModule().GetMemPool()->New(GetMIRModule(), rangeTabEntryType); uint32 fieldID = 1; @@ -690,7 +690,7 @@ void MUIDReplacement::GenerateRangeTable() { } rangeTabConst->PushBack(entryConst); } - for (int i = RangeIdx::kMaxNum + 1; i <= RangeIdx::kDecoupleStaticValue; ++i) { + for (int i = RangeIdx::kOldMaxNum + 1; i < RangeIdx::kNewMaxNum; ++i) { uint32 fieldID = 1; MIRAggConst *entryConst = GetMIRModule().GetMemPool()->New(GetMIRModule(), rangeTabEntryType); builder->AddIntFieldConst(rangeTabEntryType, *entryConst, fieldID++, i); @@ -1252,4 +1252,4 @@ void MUIDReplacement::GenerateTables() { ReplaceDataTable(NameMangler::kGcRootList); GenerateCompilerVersionNum(); } -} // namespace maple +} // namespace maple \ No newline at end of file diff --git a/src/mpl2mpl/src/reflection_analysis.cpp b/src/mpl2mpl/src/reflection_analysis.cpp index 8702a978af37df3060b44a294f6c7853039de71d..8e49b87ee400aafb32705a436554033e834687b2 100644 --- a/src/mpl2mpl/src/reflection_analysis.cpp +++ b/src/mpl2mpl/src/reflection_analysis.cpp @@ -110,7 +110,6 @@ constexpr char kJavaLangEnumStr[] = "Ljava_2Flang_2FEnum_3B"; constexpr char kNumOfSuperclassesStr[] = "numofsuperclasses"; constexpr char kClassMetadataRoTypeName[] = "__class_meta_ro__"; constexpr char kMethodInVtabIndexStr[] = "method_in_vtab_index"; -constexpr char kClassStateInitializedStr[] = "classStateInitialized"; constexpr char kSuperclassMetadataTypeName[] = "__superclass_meta__"; constexpr char kFieldOffsetDataTypeName[] = "__fieldOffsetDataType__"; constexpr char kMethodAddrDataTypeName[] = "__methodAddrDataType__"; @@ -1074,7 +1073,7 @@ MIRSymbol *ReflectionAnalysis::GenFieldsMetaData(const Klass &klass) { } ++j; } - ASSERT(i == size, "In class %s: %d fields seen, BUT %d fields declared", klass.GetKlassName(), i, size); + ASSERT(i == size, "In class %s: %d fields seen, BUT %d fields declared", klass.GetKlassName().c_str(), i, size); MIRSymbol *fieldsArraySt = GenFieldsMeta(klass, fieldinfoVec, fieldHashvec); return fieldsArraySt; } @@ -1531,10 +1530,8 @@ void ReflectionAnalysis::GenClassMetaData(Klass &klass) { mirBuilder.AddIntFieldConst(classMetadataType, *newConst, fieldID++, kSEGVAddrForClassUninitialized); } else { // If this class and its parents do not have method, we do not do clinit-check for this class, - // thus the class initialization state is modified to "Initialized", i.e., some readable address. - MIRType *clinitState = GlobalTables::GetTypeTable().GetUInt64(); - MIRSymbol *classInfo = mirBuilder.GetOrCreateGlobalDecl(kClassStateInitializedStr, *clinitState); - mirBuilder.AddAddrofFieldConst(classMetadataType, *newConst, fieldID++, *classInfo); + // thus the class initialization state is modified to "Initialized". + mirBuilder.AddIntFieldConst(classMetadataType, *newConst, fieldID++, kClassInitializedState); } // Finally generate class metadata here.