From 5072ac67a9659d0c32cbb69781bb515a5fa0b37f Mon Sep 17 00:00:00 2001 From: Wen HU Date: Fri, 15 Apr 2022 14:59:15 -0400 Subject: [PATCH] added -g option to hir2mpl for generating debug friendly mpl --- src/hir2mpl/ast_input/common/include/ast_decl.h | 5 ++++- src/hir2mpl/ast_input/common/src/ast_decl.cpp | 2 +- src/hir2mpl/common/include/fe_options.h | 11 +++++++++++ src/hir2mpl/common/include/hir2mpl_options.h | 1 + src/hir2mpl/common/src/hir2mpl_options.cpp | 13 +++++++++++++ 5 files changed, 30 insertions(+), 2 deletions(-) diff --git a/src/hir2mpl/ast_input/common/include/ast_decl.h b/src/hir2mpl/ast_input/common/include/ast_decl.h index ca523c8b79..27a4a0ff98 100644 --- a/src/hir2mpl/ast_input/common/include/ast_decl.h +++ b/src/hir2mpl/ast_input/common/include/ast_decl.h @@ -46,7 +46,9 @@ struct BoundaryInfo { class ASTDecl { public: ASTDecl(const std::string &srcFile, const std::string &nameIn, const std::vector &typeDescIn) - : isGlobalDecl(false), srcFileName(srcFile), name(nameIn), typeDesc(typeDescIn) {} + : isGlobalDecl(false), srcFileName(srcFile), name(nameIn), typeDesc(typeDescIn) { + isDbgFriendly = FEOptions::GetInstance().IsDbgFriendly(); + } virtual ~ASTDecl() = default; const std::string &GetSrcFileName() const; const std::string &GetName() const; @@ -171,6 +173,7 @@ class ASTDecl { virtual void GenerateInitStmtImpl(std::list &stmts) {} bool isGlobalDecl; bool isParam = false; + bool isDbgFriendly = false; uint32 align = 1; // in byte const std::string srcFileName; std::string name; diff --git a/src/hir2mpl/ast_input/common/src/ast_decl.cpp b/src/hir2mpl/ast_input/common/src/ast_decl.cpp index 87ec49a13a..1be7091e8b 100644 --- a/src/hir2mpl/ast_input/common/src/ast_decl.cpp +++ b/src/hir2mpl/ast_input/common/src/ast_decl.cpp @@ -46,7 +46,7 @@ MIRConst *ASTDecl::Translate2MIRConst() const { std::string ASTDecl::GenerateUniqueVarName() const { // add `_line_column` suffix for avoiding local var name conflict - if (isGlobalDecl || isParam) { + if (isGlobalDecl || isParam || isDbgFriendly) { return name; } else { std::stringstream os; diff --git a/src/hir2mpl/common/include/fe_options.h b/src/hir2mpl/common/include/fe_options.h index dea1d79b5f..d7ec867251 100644 --- a/src/hir2mpl/common/include/fe_options.h +++ b/src/hir2mpl/common/include/fe_options.h @@ -236,6 +236,16 @@ class FEOptions { return isDumpLOC; } + void SetDbgFriendly(bool flag) { + isDbgFriendly = flag; + // set isDumpLOC if flag is true + isDumpLOC = flag ? flag : isDumpLOC; + } + + bool IsDbgFriendly() const { + return isDbgFriendly; + } + void SetIsDumpPhaseTime(bool flag) { isDumpPhaseTime = flag; } @@ -505,6 +515,7 @@ class FEOptions { bool isDumpTime; bool isDumpComment = false; bool isDumpLOC = true; + bool isDbgFriendly = false; bool isDumpPhaseTime = false; bool isDumpPhaseTimeDetail = false; diff --git a/src/hir2mpl/common/include/hir2mpl_options.h b/src/hir2mpl/common/include/hir2mpl_options.h index bbfe437c9b..b7e5cefb60 100644 --- a/src/hir2mpl/common/include/hir2mpl_options.h +++ b/src/hir2mpl/common/include/hir2mpl_options.h @@ -75,6 +75,7 @@ class HIR2MPLOptions : public maple::MapleDriverOptionBase { bool ProcessDumpTime(const mapleOption::Option &opt); bool ProcessDumpComment(const mapleOption::Option &opt); bool ProcessDumpLOC(const mapleOption::Option &opt); + bool ProcessDbgFriendly(const mapleOption::Option &opt); bool ProcessDumpPhaseTime(const mapleOption::Option &opt); bool ProcessDumpPhaseTimeDetail(const mapleOption::Option &opt); diff --git a/src/hir2mpl/common/src/hir2mpl_options.cpp b/src/hir2mpl/common/src/hir2mpl_options.cpp index aae8a15cdb..f5e2f10327 100644 --- a/src/hir2mpl/common/src/hir2mpl_options.cpp +++ b/src/hir2mpl/common/src/hir2mpl_options.cpp @@ -47,6 +47,7 @@ enum OptionIndex : uint32 { kDumpTime, kDumpComment, kDumpLOC, + kDbgFriendly, kDumpPhaseTime, kDumpPhaseTimeDetail, // bc bytecode compile options @@ -164,6 +165,11 @@ const Descriptor kUsage[] = { { kUnknown, 0, "", "", kBuildTypeAll, kArgCheckPolicyUnknown, "\n====== Debug Info Control Options ======", "hir2mpl", {} }, + { kDbgFriendly, 0, "", "g", + kBuildTypeAll, kArgCheckPolicyNone, + " -g : emit debug friendly mpl, including\n" + " no variable renaming\n" + " gen LOC", "hir2mpl", {} }, { kDumpLevel, 0, "d", "dump-level", kBuildTypeAll, kArgCheckPolicyNumeric, " -d, -dump-level xx : debug info dump level\n" @@ -346,6 +352,8 @@ bool HIR2MPLOptions::InitFactory() { &HIR2MPLOptions::ProcessDumpComment); RegisterFactoryFunction(kDumpLOC, &HIR2MPLOptions::ProcessDumpLOC); + RegisterFactoryFunction(kDbgFriendly, + &HIR2MPLOptions::ProcessDbgFriendly); RegisterFactoryFunction(kDumpPhaseTime, &HIR2MPLOptions::ProcessDumpPhaseTime); RegisterFactoryFunction(kDumpPhaseTimeDetail, @@ -596,6 +604,11 @@ bool HIR2MPLOptions::ProcessDumpLOC(const Option &opt) { return true; } +bool HIR2MPLOptions::ProcessDbgFriendly(const Option &opt) { + FEOptions::GetInstance().SetDbgFriendly(true); + return true; +} + bool HIR2MPLOptions::ProcessDumpPhaseTime(const Option &opt) { FEOptions::GetInstance().SetIsDumpPhaseTime(true); return true; -- Gitee