From c4447e9e7ce74ef645c77f37117101afc6ed65bd Mon Sep 17 00:00:00 2001 From: "@evian_hill" Date: Fri, 7 May 2021 23:52:32 +0800 Subject: [PATCH 1/2] rm repeated MayDefNode in mayDefNodeList --- src/mapleall/maple_me/include/alias_class.h | 6 +-- src/mapleall/maple_me/include/ssa_mir_nodes.h | 29 ++++++++++-- src/mapleall/maple_me/src/alias_class.cpp | 45 ++++++++++--------- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/src/mapleall/maple_me/include/alias_class.h b/src/mapleall/maple_me/include/alias_class.h index 9759470764..f0a30b6fe1 100644 --- a/src/mapleall/maple_me/include/alias_class.h +++ b/src/mapleall/maple_me/include/alias_class.h @@ -211,15 +211,15 @@ class AliasClass : public AnalysisResult { void InsertReturnOpndMayUse(const StmtNode &stmt); void InsertMayUseAll(const StmtNode &stmt); void CollectMayDefForDassign(const StmtNode &stmt, std::set &mayDefOsts); - void InsertMayDefNode(std::set &mayDefOsts, TypeOfMayDefList &mayDefNodes, StmtNode &stmt, BBId bbid); + void InsertMayDefNode(std::set &mayDefOsts, AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid); void InsertMayDefDassign(StmtNode &stmt, BBId bbid); bool IsEquivalentField(TyIdx tyIdxA, FieldID fldA, TyIdx tyIdxB, FieldID fldB) const; void CollectMayDefForIassign(StmtNode &stmt, std::set &mayDefOsts); - void InsertMayDefNodeExcludeFinalOst(std::set &mayDefOsts, TypeOfMayDefList &mayDefNodes, + void InsertMayDefNodeExcludeFinalOst(std::set &mayDefOsts, AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid); void InsertMayDefIassign(StmtNode &stmt, BBId bbid); void InsertMayDefUseSyncOps(StmtNode &stmt, BBId bbid); - void InsertMayUseNodeExcludeFinalOst(const std::set &mayUseOsts, TypeOfMayUseList &mayUseNodes); + void InsertMayUseNodeExcludeFinalOst(const std::set &mayUseOsts, AccessSSANodes *ssaPart); void InsertMayDefUseIntrncall(StmtNode &stmt, BBId bbid); void InsertMayDefUseClinitCheck(IntrinsiccallNode &stmt, BBId bbid); virtual BB *GetBB(BBId id) = 0; diff --git a/src/mapleall/maple_me/include/ssa_mir_nodes.h b/src/mapleall/maple_me/include/ssa_mir_nodes.h index 6b5af97e95..b53c63ed52 100644 --- a/src/mapleall/maple_me/include/ssa_mir_nodes.h +++ b/src/mapleall/maple_me/include/ssa_mir_nodes.h @@ -62,6 +62,10 @@ class MayDefNode { LogInfo::MapleLogger() << ")\n"; } + bool operator==(const MayDefNode &other) const { + return opnd == other.opnd && result == other.result && stmt == other.stmt; + } + VersionSt *base = nullptr; // only provided if indirectLev is 1 and attached to iassign private: VersionSt *opnd; @@ -89,6 +93,10 @@ class MayUseNode { LogInfo::MapleLogger() << ")"; } + bool operator==(const MayUseNode &other) const { + return opnd == other.opnd; + } + private: VersionSt *opnd; }; @@ -191,9 +199,24 @@ class AccessSSANodes { } } - virtual void InsertMayDefNode(VersionSt *vst, StmtNode *stmtNode) { - CHECK_FATAL(vst != nullptr, "null ptr check"); - GetMayDefNodes().emplace_back(MayDefNode(vst, stmtNode)); + void InsertMayDefNode(VersionSt *vst, StmtNode *stmtNode) { + ASSERT(vst != nullptr, "null ptr check"); + auto &mayDefNodes = GetMayDefNodes(); + MayDefNode mayDefNode(vst, stmtNode); + if (std::find(mayDefNodes.begin(), mayDefNodes.end(), mayDefNode) != mayDefNodes.end()) { + return; + } + GetMayDefNodes().emplace_back(mayDefNode); + } + + void InsertMayUseNode(VersionSt *vst) { + ASSERT(vst != nullptr, "null ptr check"); + auto &mayUseNodes = GetMayUseNodes(); + MayUseNode mayUseNode(vst); + if (std::find(mayUseNodes.begin(), mayUseNodes.end(), mayUseNode) != mayUseNodes.end()) { + return; + } + mayUseNodes.emplace_back(mayUseNode); } virtual void InsertMustDefNode(VersionSt *sym, StmtNode *s) { diff --git a/src/mapleall/maple_me/src/alias_class.cpp b/src/mapleall/maple_me/src/alias_class.cpp index 05e0396eb9..a95e4132cf 100644 --- a/src/mapleall/maple_me/src/alias_class.cpp +++ b/src/mapleall/maple_me/src/alias_class.cpp @@ -1386,11 +1386,11 @@ void AliasClass::CollectMayDefForDassign(const StmtNode &stmt, std::set &mayDefOsts, TypeOfMayDefList &mayDefNodes, +void AliasClass::InsertMayDefNode(std::set &mayDefOsts, AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid) { for (OriginalSt *mayDefOst : mayDefOsts) { - mayDefNodes.emplace_back( - MayDefNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt)); + ssaPart->InsertMayDefNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt); ssaTab.AddDefBB4Ost(mayDefOst->GetIndex(), bbid); } } @@ -1398,8 +1398,7 @@ void AliasClass::InsertMayDefNode(std::set &mayDefOsts, TypeOfMayDe void AliasClass::InsertMayDefDassign(StmtNode &stmt, BBId bbid) { std::set mayDefOsts; CollectMayDefForDassign(stmt, mayDefOsts); - TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); - InsertMayDefNode(mayDefOsts, mayDefNodes, stmt, bbid); + InsertMayDefNode(mayDefOsts, ssaTab.GetStmtsSSAPart().SSAPartOf(stmt), stmt, bbid); } bool AliasClass::IsEquivalentField(TyIdx tyIdxA, FieldID fldA, TyIdx tyIdxB, FieldID fldB) const { @@ -1486,12 +1485,12 @@ void AliasClass::CollectMayDefForIassign(StmtNode &stmt, std::set & } void AliasClass::InsertMayDefNodeExcludeFinalOst(std::set &mayDefOsts, - TypeOfMayDefList &mayDefNodes, StmtNode &stmt, + AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid) { for (OriginalSt *mayDefOst : mayDefOsts) { if (!mayDefOst->IsFinal()) { - mayDefNodes.emplace_back( - MayDefNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt)); + ssaPart->InsertMayDefNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt); ssaTab.AddDefBB4Ost(mayDefOst->GetIndex(), bbid); } } @@ -1500,12 +1499,14 @@ void AliasClass::InsertMayDefNodeExcludeFinalOst(std::set &mayDefOs void AliasClass::InsertMayDefIassign(StmtNode &stmt, BBId bbid) { std::set mayDefOsts; CollectMayDefForIassign(stmt, mayDefOsts); - TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); + auto *ssaPart = ssaTab.GetStmtsSSAPart().SSAPartOf(stmt); if (mayDefOsts.size() == 1) { - InsertMayDefNode(mayDefOsts, mayDefNodes, stmt, bbid); + InsertMayDefNode(mayDefOsts, ssaPart, stmt, bbid); } else { - InsertMayDefNodeExcludeFinalOst(mayDefOsts, mayDefNodes, stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefOsts, ssaPart, stmt, bbid); } + + TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); ASSERT(!mayDefNodes.empty(), "AliasClass::InsertMayUseIassign(): iassign cannot have empty maydef"); // go thru inserted MayDefNode to add the base info TypeOfMayDefList::iterator it = mayDefNodes.begin(); @@ -1694,22 +1695,22 @@ void AliasClass::InsertMayDefUseCall(StmtNode &stmt, BBId bbid, bool hasSideEffe InsertMayUseNode(mayDefUseOstsB, theSSAPart->GetMayUseNodes()); // insert may def node, if the callee has side-effect. if (hasSideEffect) { - InsertMayDefNodeExcludeFinalOst(mayDefUseOstsB, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefUseOstsB, theSSAPart, stmt, bbid); if (kOpcodeInfo.IsCallAssigned(stmt.GetOpCode())) { // 4. insert mayDefs caused by the mustDefs std::set mayDefOstsC; CollectMayDefForMustDefs(stmt, mayDefOstsC); - InsertMayDefNodeExcludeFinalOst(mayDefOstsC, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefOstsC, theSSAPart, stmt, bbid); } } } void AliasClass::InsertMayUseNodeExcludeFinalOst(const std::set &mayUseOsts, - TypeOfMayUseList &mayUseNodes) { + AccessSSANodes *ssaPart) { for (OriginalSt *mayUseOst : mayUseOsts) { if (!mayUseOst->IsFinal()) { - mayUseNodes.emplace_back( - MayUseNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(mayUseOst->GetZeroVersionIndex()))); + ssaPart->InsertMayUseNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(mayUseOst->GetZeroVersionIndex())); } } } @@ -1734,28 +1735,28 @@ void AliasClass::InsertMayDefUseIntrncall(StmtNode &stmt, BBId bbid) { CollectMayUseFromNADS(mayDefUseOsts); // 3. collect mayDefs and mayUses caused by globalsAffectedByCalls CollectMayUseFromGlobalsAffectedByCalls(mayDefUseOsts); - InsertMayUseNodeExcludeFinalOst(mayDefUseOsts, theSSAPart->GetMayUseNodes()); + InsertMayUseNodeExcludeFinalOst(mayDefUseOsts, theSSAPart); if (!intrinDesc->HasNoSideEffect() || calleeHasSideEffect) { - InsertMayDefNodeExcludeFinalOst(mayDefUseOsts, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefUseOsts, theSSAPart, stmt, bbid); } if (kOpcodeInfo.IsCallAssigned(stmt.GetOpCode())) { // 4. insert maydefs caused by the mustdefs std::set mayDefOsts; CollectMayDefForMustDefs(stmt, mayDefOsts); - InsertMayDefNodeExcludeFinalOst(mayDefOsts, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefOsts, theSSAPart, stmt, bbid); } } void AliasClass::InsertMayDefUseClinitCheck(IntrinsiccallNode &stmt, BBId bbid) { - TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); + auto *ssaPart = ssaTab.GetStmtsSSAPart().SSAPartOf(stmt); for (OStIdx ostIdx : globalsMayAffectedByClinitCheck) { AliasElem *aliasElem = osym2Elem[ostIdx]; OriginalSt &ostOfAE = aliasElem->GetOriginalSt(); std::string typeNameOfOst = ostOfAE.GetMIRSymbol()->GetName(); std::string typeNameOfStmt = GlobalTables::GetTypeTable().GetTypeFromTyIdx(stmt.GetTyIdx())->GetName(); if (typeNameOfOst.find(typeNameOfStmt) != std::string::npos) { - mayDefNodes.emplace_back( - MayDefNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(ostOfAE.GetZeroVersionIndex()), &stmt)); + ssaPart->InsertMayDefNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(ostOfAE.GetZeroVersionIndex()), &stmt); ssaTab.AddDefBB4Ost(ostOfAE.GetIndex(), bbid); } } -- Gitee From 562efa64cececaf3504a6ce762307d00891180a0 Mon Sep 17 00:00:00 2001 From: "@evian_hill" Date: Fri, 7 May 2021 23:52:32 +0800 Subject: [PATCH 2/2] rm repeated MayDefNode in mayDefNodeList --- src/mapleall/maple_me/include/alias_class.h | 6 +-- src/mapleall/maple_me/include/ssa_mir_nodes.h | 29 ++++++++++-- src/mapleall/maple_me/src/alias_class.cpp | 45 ++++++++++--------- 3 files changed, 52 insertions(+), 28 deletions(-) diff --git a/src/mapleall/maple_me/include/alias_class.h b/src/mapleall/maple_me/include/alias_class.h index 9759470764..f0a30b6fe1 100644 --- a/src/mapleall/maple_me/include/alias_class.h +++ b/src/mapleall/maple_me/include/alias_class.h @@ -211,15 +211,15 @@ class AliasClass : public AnalysisResult { void InsertReturnOpndMayUse(const StmtNode &stmt); void InsertMayUseAll(const StmtNode &stmt); void CollectMayDefForDassign(const StmtNode &stmt, std::set &mayDefOsts); - void InsertMayDefNode(std::set &mayDefOsts, TypeOfMayDefList &mayDefNodes, StmtNode &stmt, BBId bbid); + void InsertMayDefNode(std::set &mayDefOsts, AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid); void InsertMayDefDassign(StmtNode &stmt, BBId bbid); bool IsEquivalentField(TyIdx tyIdxA, FieldID fldA, TyIdx tyIdxB, FieldID fldB) const; void CollectMayDefForIassign(StmtNode &stmt, std::set &mayDefOsts); - void InsertMayDefNodeExcludeFinalOst(std::set &mayDefOsts, TypeOfMayDefList &mayDefNodes, + void InsertMayDefNodeExcludeFinalOst(std::set &mayDefOsts, AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid); void InsertMayDefIassign(StmtNode &stmt, BBId bbid); void InsertMayDefUseSyncOps(StmtNode &stmt, BBId bbid); - void InsertMayUseNodeExcludeFinalOst(const std::set &mayUseOsts, TypeOfMayUseList &mayUseNodes); + void InsertMayUseNodeExcludeFinalOst(const std::set &mayUseOsts, AccessSSANodes *ssaPart); void InsertMayDefUseIntrncall(StmtNode &stmt, BBId bbid); void InsertMayDefUseClinitCheck(IntrinsiccallNode &stmt, BBId bbid); virtual BB *GetBB(BBId id) = 0; diff --git a/src/mapleall/maple_me/include/ssa_mir_nodes.h b/src/mapleall/maple_me/include/ssa_mir_nodes.h index 6b5af97e95..46ecedac7e 100644 --- a/src/mapleall/maple_me/include/ssa_mir_nodes.h +++ b/src/mapleall/maple_me/include/ssa_mir_nodes.h @@ -62,6 +62,10 @@ class MayDefNode { LogInfo::MapleLogger() << ")\n"; } + bool operator==(const MayDefNode &other) const { + return opnd == other.opnd && result == other.result && stmt == other.stmt; + } + VersionSt *base = nullptr; // only provided if indirectLev is 1 and attached to iassign private: VersionSt *opnd; @@ -89,6 +93,10 @@ class MayUseNode { LogInfo::MapleLogger() << ")"; } + bool operator==(const MayUseNode &other) const { + return opnd == other.opnd; + } + private: VersionSt *opnd; }; @@ -191,9 +199,24 @@ class AccessSSANodes { } } - virtual void InsertMayDefNode(VersionSt *vst, StmtNode *stmtNode) { - CHECK_FATAL(vst != nullptr, "null ptr check"); - GetMayDefNodes().emplace_back(MayDefNode(vst, stmtNode)); + void InsertMayDefNode(VersionSt *vst, StmtNode *stmtNode) { + ASSERT(vst != nullptr, "null ptr check"); + auto &mayDefNodes = GetMayDefNodes(); + MayDefNode mayDefNode(vst, stmtNode); + if (std::find(mayDefNodes.begin(), mayDefNodes.end(), mayDefNode) != mayDefNodes.end()) { + return; + } + mayDefNodes.emplace_back(mayDefNode); + } + + void InsertMayUseNode(VersionSt *vst) { + ASSERT(vst != nullptr, "null ptr check"); + auto &mayUseNodes = GetMayUseNodes(); + MayUseNode mayUseNode(vst); + if (std::find(mayUseNodes.begin(), mayUseNodes.end(), mayUseNode) != mayUseNodes.end()) { + return; + } + mayUseNodes.emplace_back(mayUseNode); } virtual void InsertMustDefNode(VersionSt *sym, StmtNode *s) { diff --git a/src/mapleall/maple_me/src/alias_class.cpp b/src/mapleall/maple_me/src/alias_class.cpp index 05e0396eb9..a95e4132cf 100644 --- a/src/mapleall/maple_me/src/alias_class.cpp +++ b/src/mapleall/maple_me/src/alias_class.cpp @@ -1386,11 +1386,11 @@ void AliasClass::CollectMayDefForDassign(const StmtNode &stmt, std::set &mayDefOsts, TypeOfMayDefList &mayDefNodes, +void AliasClass::InsertMayDefNode(std::set &mayDefOsts, AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid) { for (OriginalSt *mayDefOst : mayDefOsts) { - mayDefNodes.emplace_back( - MayDefNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt)); + ssaPart->InsertMayDefNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt); ssaTab.AddDefBB4Ost(mayDefOst->GetIndex(), bbid); } } @@ -1398,8 +1398,7 @@ void AliasClass::InsertMayDefNode(std::set &mayDefOsts, TypeOfMayDe void AliasClass::InsertMayDefDassign(StmtNode &stmt, BBId bbid) { std::set mayDefOsts; CollectMayDefForDassign(stmt, mayDefOsts); - TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); - InsertMayDefNode(mayDefOsts, mayDefNodes, stmt, bbid); + InsertMayDefNode(mayDefOsts, ssaTab.GetStmtsSSAPart().SSAPartOf(stmt), stmt, bbid); } bool AliasClass::IsEquivalentField(TyIdx tyIdxA, FieldID fldA, TyIdx tyIdxB, FieldID fldB) const { @@ -1486,12 +1485,12 @@ void AliasClass::CollectMayDefForIassign(StmtNode &stmt, std::set & } void AliasClass::InsertMayDefNodeExcludeFinalOst(std::set &mayDefOsts, - TypeOfMayDefList &mayDefNodes, StmtNode &stmt, + AccessSSANodes *ssaPart, StmtNode &stmt, BBId bbid) { for (OriginalSt *mayDefOst : mayDefOsts) { if (!mayDefOst->IsFinal()) { - mayDefNodes.emplace_back( - MayDefNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt)); + ssaPart->InsertMayDefNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(mayDefOst->GetZeroVersionIndex()), &stmt); ssaTab.AddDefBB4Ost(mayDefOst->GetIndex(), bbid); } } @@ -1500,12 +1499,14 @@ void AliasClass::InsertMayDefNodeExcludeFinalOst(std::set &mayDefOs void AliasClass::InsertMayDefIassign(StmtNode &stmt, BBId bbid) { std::set mayDefOsts; CollectMayDefForIassign(stmt, mayDefOsts); - TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); + auto *ssaPart = ssaTab.GetStmtsSSAPart().SSAPartOf(stmt); if (mayDefOsts.size() == 1) { - InsertMayDefNode(mayDefOsts, mayDefNodes, stmt, bbid); + InsertMayDefNode(mayDefOsts, ssaPart, stmt, bbid); } else { - InsertMayDefNodeExcludeFinalOst(mayDefOsts, mayDefNodes, stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefOsts, ssaPart, stmt, bbid); } + + TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); ASSERT(!mayDefNodes.empty(), "AliasClass::InsertMayUseIassign(): iassign cannot have empty maydef"); // go thru inserted MayDefNode to add the base info TypeOfMayDefList::iterator it = mayDefNodes.begin(); @@ -1694,22 +1695,22 @@ void AliasClass::InsertMayDefUseCall(StmtNode &stmt, BBId bbid, bool hasSideEffe InsertMayUseNode(mayDefUseOstsB, theSSAPart->GetMayUseNodes()); // insert may def node, if the callee has side-effect. if (hasSideEffect) { - InsertMayDefNodeExcludeFinalOst(mayDefUseOstsB, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefUseOstsB, theSSAPart, stmt, bbid); if (kOpcodeInfo.IsCallAssigned(stmt.GetOpCode())) { // 4. insert mayDefs caused by the mustDefs std::set mayDefOstsC; CollectMayDefForMustDefs(stmt, mayDefOstsC); - InsertMayDefNodeExcludeFinalOst(mayDefOstsC, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefOstsC, theSSAPart, stmt, bbid); } } } void AliasClass::InsertMayUseNodeExcludeFinalOst(const std::set &mayUseOsts, - TypeOfMayUseList &mayUseNodes) { + AccessSSANodes *ssaPart) { for (OriginalSt *mayUseOst : mayUseOsts) { if (!mayUseOst->IsFinal()) { - mayUseNodes.emplace_back( - MayUseNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(mayUseOst->GetZeroVersionIndex()))); + ssaPart->InsertMayUseNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(mayUseOst->GetZeroVersionIndex())); } } } @@ -1734,28 +1735,28 @@ void AliasClass::InsertMayDefUseIntrncall(StmtNode &stmt, BBId bbid) { CollectMayUseFromNADS(mayDefUseOsts); // 3. collect mayDefs and mayUses caused by globalsAffectedByCalls CollectMayUseFromGlobalsAffectedByCalls(mayDefUseOsts); - InsertMayUseNodeExcludeFinalOst(mayDefUseOsts, theSSAPart->GetMayUseNodes()); + InsertMayUseNodeExcludeFinalOst(mayDefUseOsts, theSSAPart); if (!intrinDesc->HasNoSideEffect() || calleeHasSideEffect) { - InsertMayDefNodeExcludeFinalOst(mayDefUseOsts, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefUseOsts, theSSAPart, stmt, bbid); } if (kOpcodeInfo.IsCallAssigned(stmt.GetOpCode())) { // 4. insert maydefs caused by the mustdefs std::set mayDefOsts; CollectMayDefForMustDefs(stmt, mayDefOsts); - InsertMayDefNodeExcludeFinalOst(mayDefOsts, theSSAPart->GetMayDefNodes(), stmt, bbid); + InsertMayDefNodeExcludeFinalOst(mayDefOsts, theSSAPart, stmt, bbid); } } void AliasClass::InsertMayDefUseClinitCheck(IntrinsiccallNode &stmt, BBId bbid) { - TypeOfMayDefList &mayDefNodes = ssaTab.GetStmtsSSAPart().GetMayDefNodesOf(stmt); + auto *ssaPart = ssaTab.GetStmtsSSAPart().SSAPartOf(stmt); for (OStIdx ostIdx : globalsMayAffectedByClinitCheck) { AliasElem *aliasElem = osym2Elem[ostIdx]; OriginalSt &ostOfAE = aliasElem->GetOriginalSt(); std::string typeNameOfOst = ostOfAE.GetMIRSymbol()->GetName(); std::string typeNameOfStmt = GlobalTables::GetTypeTable().GetTypeFromTyIdx(stmt.GetTyIdx())->GetName(); if (typeNameOfOst.find(typeNameOfStmt) != std::string::npos) { - mayDefNodes.emplace_back( - MayDefNode(ssaTab.GetVersionStTable().GetVersionStVectorItem(ostOfAE.GetZeroVersionIndex()), &stmt)); + ssaPart->InsertMayDefNode( + ssaTab.GetVersionStTable().GetVersionStVectorItem(ostOfAE.GetZeroVersionIndex()), &stmt); ssaTab.AddDefBB4Ost(ostOfAE.GetIndex(), bbid); } } -- Gitee