From 5f18d7a26ed834029b8eeae92137af6e992583d8 Mon Sep 17 00:00:00 2001 From: Fred Chow Date: Fri, 19 Feb 2021 21:26:22 -0800 Subject: [PATCH] Made RegMeExpr same as ScalarMeExpr and get rid of RegMeExpr's class definition --- src/mapleall/maple_me/include/me_ir.h | 50 +++++++++------------- src/mapleall/maple_me/src/irmap.cpp | 10 ++--- src/mapleall/maple_me/src/irmap_build.cpp | 2 +- src/mapleall/maple_me/src/irmap_emit.cpp | 6 +-- src/mapleall/maple_me/src/me_ir.cpp | 4 +- src/mapleall/maple_me/src/preg_renamer.cpp | 5 ++- 6 files changed, 35 insertions(+), 42 deletions(-) diff --git a/src/mapleall/maple_me/include/me_ir.h b/src/mapleall/maple_me/include/me_ir.h index 2d04dc7b16..49da9f2c92 100644 --- a/src/mapleall/maple_me/include/me_ir.h +++ b/src/mapleall/maple_me/include/me_ir.h @@ -232,6 +232,10 @@ class ScalarMeExpr : public MeExpr { return ost; } + void SetOst(OriginalSt *o) { + ost = o; + } + size_t GetVstIdx() const { return vstIdx; } @@ -292,7 +296,22 @@ class ScalarMeExpr : public MeExpr { def.defMustDef = &defMustDef; } + PregIdx GetRegIdx() const { + ASSERT(ost->IsPregOst(), "GetPregIdx: not a preg"); + return ost->GetPregIdx(); + } + + bool IsNormalReg() const { + ASSERT(ost->IsPregOst(), "GetPregIdx: not a preg"); + return ost->GetPregIdx() >= 0; + } + BB *GetDefByBBMeStmt(const Dominance&, MeStmtPtr&) const; + void Dump(const IRMap*, int32 indent = 0) const override; + BaseNode &EmitExpr(SSATab&) override; + bool IsSameVariableValue(const VarMeExpr&) const override; + ScalarMeExpr *FindDefByStmt(std::set &visited); + private: OriginalSt *ost; uint32 vstIdx; // the index in MEOptimizer's VersionStTable, 0 if not in VersionStTable @@ -305,6 +324,8 @@ class ScalarMeExpr : public MeExpr { } def; }; +using RegMeExpr = ScalarMeExpr; + // represant dread class VarMeExpr final : public ScalarMeExpr { public: @@ -447,35 +468,6 @@ class MePhiNode { bool isPiAdded = false; }; -class RegMeExpr : public ScalarMeExpr { - public: - RegMeExpr(int32 exprid, OriginalSt *ost, uint32 vidx, PrimType ptyp) - : ScalarMeExpr(exprid, ost, vidx, kMeOpReg, OP_regread, ptyp), - regIdx(ost->GetPregIdx()) {} - - ~RegMeExpr() = default; - - void Dump(const IRMap*, int32 indent = 0) const override; - BaseNode &EmitExpr(SSATab&) override; - bool IsSameVariableValue(const VarMeExpr&) const override; - RegMeExpr *FindDefByStmt(std::set &visited); - - PregIdx16 GetRegIdx() const { - return regIdx; - } - - void SetRegIdx(PregIdx16 regIdxVal) { - regIdx = regIdxVal; - } - - bool IsNormalReg() const { - return regIdx >= 0; - } - - private: - PregIdx16 regIdx; -}; - class ConstMeExpr : public MeExpr { public: ConstMeExpr(int32 exprID, MIRConst *constValParam, PrimType t) diff --git a/src/mapleall/maple_me/src/irmap.cpp b/src/mapleall/maple_me/src/irmap.cpp index cb2f7b11b3..43ed400ab6 100644 --- a/src/mapleall/maple_me/src/irmap.cpp +++ b/src/mapleall/maple_me/src/irmap.cpp @@ -104,12 +104,12 @@ VarMeExpr *IRMap::CreateNewLocalRefVarTmp(GStrIdx strIdx, TyIdx tIdx) { } RegMeExpr *IRMap::CreateRegMeExprVersion(OriginalSt &pregOSt) { - auto *regReadExpr = New(exprID++, &pregOSt, 0, pregOSt.GetMIRPreg()->GetPrimType()); + RegMeExpr *regReadExpr = New(exprID++, &pregOSt, 0, kMeOpReg, OP_regread, pregOSt.GetMIRPreg()->GetPrimType()); return regReadExpr; } RegMeExpr *IRMap::CreateRegMeExprVersion(const RegMeExpr &origExpr) { - auto *regReadExpr = New(exprID++, origExpr.GetOst(), 0, origExpr.GetPrimType()); + auto *regReadExpr = New(exprID++, origExpr.GetOst(), 0, kMeOpReg, OP_regread, origExpr.GetPrimType()); return regReadExpr; } @@ -125,7 +125,7 @@ RegMeExpr *IRMap::CreateRefRegMeExpr(const MIRSymbol &mirSt) { preg->SetNeedRC(); } OriginalSt *oSt = ssaTab.GetOriginalStTable().CreatePregOriginalSt(regIdx, mirFunc->GetPuidx()); - auto *regreadexpr = New(exprID++, oSt, 0, pType); + auto *regreadexpr = New(exprID++, oSt, 0, kMeOpReg, OP_regread, pType); return regreadexpr; } @@ -134,7 +134,7 @@ RegMeExpr *IRMap::CreateRegMeExpr(PrimType pType) { PregIdx regIdx = mirFunc->GetPregTab()->CreatePreg(pType); ASSERT(regIdx <= 0xffff, "register oversized"); OriginalSt *ost = ssaTab.GetOriginalStTable().CreatePregOriginalSt(regIdx, mirFunc->GetPuidx()); - auto *regReadExpr = New(exprID++, ost, 0, pType); + auto *regReadExpr = New(exprID++, ost, 0, kMeOpReg, OP_regread, pType); return regReadExpr; } @@ -143,7 +143,7 @@ RegMeExpr *IRMap::CreateRegRefMeExpr(MIRType &mirType) { PregIdx regIdx = mirFunc->GetPregTab()->CreatePreg(PTY_ref, &mirType); ASSERT(regIdx <= 0xffff, "register oversized"); OriginalSt *ost = ssaTab.GetOriginalStTable().CreatePregOriginalSt(regIdx, mirFunc->GetPuidx()); - auto *regReadExpr = New(exprID++, ost, 0, mirType.GetPrimType()); + auto *regReadExpr = New(exprID++, ost, 0, kMeOpReg, OP_regread, mirType.GetPrimType()); return regReadExpr; } diff --git a/src/mapleall/maple_me/src/irmap_build.cpp b/src/mapleall/maple_me/src/irmap_build.cpp index b549761f50..85b99840ed 100644 --- a/src/mapleall/maple_me/src/irmap_build.cpp +++ b/src/mapleall/maple_me/src/irmap_build.cpp @@ -48,7 +48,7 @@ RegMeExpr *IRMapBuild::GetOrCreateRegFromVerSt(VersionSt &vst) { OriginalSt *ost = vst.GetOst(); ASSERT(ost->IsPregOst(), "GetOrCreateRegFromVerSt: PregOST expected"); auto *regx = irMap->New(irMap->exprID++, - ost, vindex, ost->GetMIRPreg()->GetPrimType()); + ost, vindex, kMeOpReg, OP_regread, ost->GetMIRPreg()->GetPrimType()); irMap->vst2MeExprTable[vindex] = regx; return regx; } diff --git a/src/mapleall/maple_me/src/irmap_emit.cpp b/src/mapleall/maple_me/src/irmap_emit.cpp index b5cc07d6f3..9abae29bbc 100755 --- a/src/mapleall/maple_me/src/irmap_emit.cpp +++ b/src/mapleall/maple_me/src/irmap_emit.cpp @@ -43,9 +43,9 @@ BaseNode &VarMeExpr::EmitExpr(SSATab &ssaTab) { BaseNode &RegMeExpr::EmitExpr(SSATab &ssaTab) { auto *regRead = ssaTab.GetModule().CurFunction()->GetCodeMemPool()->New(); regRead->SetPrimType(GetPrimType()); - regRead->SetRegIdx(regIdx); - ASSERT(regIdx < 0 || - static_cast(static_cast(regIdx)) < ssaTab.GetModule().CurFunction()->GetPregTab()->Size(), + regRead->SetRegIdx(GetRegIdx()); + ASSERT(GetRegIdx() < 0 || + static_cast(static_cast(GetRegIdx())) < ssaTab.GetModule().CurFunction()->GetPregTab()->Size(), "RegMeExpr::EmitExpr: pregIdx exceeds preg table size"); return *regRead; } diff --git a/src/mapleall/maple_me/src/me_ir.cpp b/src/mapleall/maple_me/src/me_ir.cpp index b8f4bee3e1..64921822ae 100755 --- a/src/mapleall/maple_me/src/me_ir.cpp +++ b/src/mapleall/maple_me/src/me_ir.cpp @@ -772,10 +772,10 @@ void VarMeExpr::Dump(const IRMap *irMap, int32) const { void RegMeExpr::Dump(const IRMap *irMap, int32) const { CHECK_NULL_FATAL(irMap); - LogInfo::MapleLogger() << "REGINDX:" << regIdx; + LogInfo::MapleLogger() << "REGINDX:" << GetRegIdx(); LogInfo::MapleLogger() << " %" - << irMap->GetMIRModule().CurFunction()->GetPregTab()->PregFromPregIdx(static_cast(regIdx))->GetPregNo(); + << irMap->GetMIRModule().CurFunction()->GetPregTab()->PregFromPregIdx(static_cast(GetRegIdx()))->GetPregNo(); LogInfo::MapleLogger() << " mx" << GetExprID(); } diff --git a/src/mapleall/maple_me/src/preg_renamer.cpp b/src/mapleall/maple_me/src/preg_renamer.cpp index efae88d8dc..b908f9b336 100755 --- a/src/mapleall/maple_me/src/preg_renamer.cpp +++ b/src/mapleall/maple_me/src/preg_renamer.cpp @@ -33,7 +33,7 @@ void PregRenamer::RunSelf() { } MapleMap &mePhiList = bb->GetMePhiList(); for (auto it = mePhiList.begin(); it != mePhiList.end(); ++it) { - OriginalSt *ost = func->GetMeSSATab()->GetOriginalStFromID(it->first); + OriginalSt *ost = func->GetMeSSATab()->GetOriginalStTable().GetOriginalStFromID(it->first); if (!ost->IsPregOst()) { // only handle reg phi continue; } @@ -92,6 +92,7 @@ void PregRenamer::RunSelf() { continue; } newpregidx = pregtab->ClonePreg(*pregtab->PregFromPregIdx(regMeexpr->GetRegIdx())); + OriginalSt *newost = func->GetMeSSATab()->GetOriginalStTable().CreatePregOriginalSt(newpregidx, func->GetMirFunc()->GetPuidx()); renameCount++; if (DEBUGFUNC(func)) { LogInfo::MapleLogger() << "%" << pregtab->PregFromPregIdx(regMeexpr->GetRegIdx())->GetPregNo(); @@ -100,7 +101,7 @@ void PregRenamer::RunSelf() { // reneme all the register for (uint32 i = 0; i < vec.size(); ++i) { RegMeExpr *canregnode = static_cast (regmeexprtable[vec[i]]); - canregnode->SetRegIdx(newpregidx); // rename it to a new register + canregnode->SetOst(newost); // rename it to a new register } } } -- Gitee