From 8be17733510ba2ad9f8cf36ad695e1d3b7fedd09 Mon Sep 17 00:00:00 2001 From: "@evian_hill" Date: Fri, 30 Jul 2021 16:14:05 +0800 Subject: [PATCH] convert SSANode to origin mapleIR in emit before hssa --- src/mapleall/maple_me/include/ssa_mir_nodes.h | 17 ++++++++++++++++ src/mapleall/maple_me/src/func_emit.cpp | 20 +++++++++++++++++-- 2 files changed, 35 insertions(+), 2 deletions(-) diff --git a/src/mapleall/maple_me/include/ssa_mir_nodes.h b/src/mapleall/maple_me/include/ssa_mir_nodes.h index a8a4298742..6bb9fc9eab 100644 --- a/src/mapleall/maple_me/include/ssa_mir_nodes.h +++ b/src/mapleall/maple_me/include/ssa_mir_nodes.h @@ -488,6 +488,8 @@ class SSANode : public BaseNode { return *(GetSSAVar()->GetOst()->GetMIRSymbol()); } + virtual BaseNode *GetNoSSANode() = 0; + protected: VersionSt *ssaVar = nullptr; }; @@ -514,6 +516,11 @@ class AddrofSSANode : public SSANode { FieldID GetFieldID() const { return addrofNode->GetFieldID(); } + + BaseNode *GetNoSSANode() override { + return addrofNode; + } + private: AddrofNode *addrofNode; }; @@ -547,6 +554,11 @@ class IreadSSANode : public SSANode { void SetOpnd(BaseNode *node, size_t i = 0) override { ireadNode->SetOpnd(node, i); } + + BaseNode *GetNoSSANode() override { + return ireadNode; + } + private: IreadNode *ireadNode; }; @@ -568,6 +580,11 @@ class RegreadSSANode : public SSANode { PregIdx GetRegIdx() const { return regreadNode->GetRegIdx(); } + + BaseNode *GetNoSSANode() override { + return regreadNode; + } + private: RegreadNode *regreadNode; }; diff --git a/src/mapleall/maple_me/src/func_emit.cpp b/src/mapleall/maple_me/src/func_emit.cpp index 6404100a72..72ee655528 100644 --- a/src/mapleall/maple_me/src/func_emit.cpp +++ b/src/mapleall/maple_me/src/func_emit.cpp @@ -14,6 +14,7 @@ */ #include "func_emit.h" #include "mir_function.h" +#include "ssa_mir_nodes.h" namespace maple { void FuncEmit::EmitLabelForBB(MIRFunction &func, BB &bb) const { @@ -48,8 +49,23 @@ void FuncEmit::EmitLabelForBB(MIRFunction &func, BB &bb) const { } } -static void ConvertMaydassign(BB &bb) { +static BaseNode *ConvertSSANode(BaseNode *node) { + if (node->IsSSANode()) { + node = static_cast(node)->GetNoSSANode(); + } + if (node->IsLeaf()) { + return node; + } + for (uint32 opndId = 0; opndId < node->GetNumOpnds(); ++opndId) { + auto *retOpnd = ConvertSSANode(node->Opnd(opndId)); + node->SetOpnd(retOpnd, opndId); + } + return node; +} + +static void ConvertStmt(BB &bb) { for (auto &stmt : bb.GetStmtNodes()) { + ConvertSSANode(&stmt); if (stmt.GetOpCode() == OP_maydassign) { stmt.SetOpCode(OP_dassign); } @@ -65,7 +81,7 @@ void FuncEmit::EmitBeforeHSSA(MIRFunction &func, const MapleVector &bbList) if (bb == nullptr) { continue; } - ConvertMaydassign(*bb); + ConvertStmt(*bb); if (bb->GetBBLabel() != 0) { EmitLabelForBB(func, *bb); } -- Gitee