Projects
openEuler:22.03:LTS:SP1
pin-gcc-client
_service:tar_scm_kernel_repo:0006-Pin-gcc-clien...
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File _service:tar_scm_kernel_repo:0006-Pin-gcc-client-Add-GetDeclType.patch of Package pin-gcc-client
From 001eb22fb00d2240235def0a4d3923f325eba8ad Mon Sep 17 00:00:00 2001 From: d00573793 <dingguangya1@huawei.com> Date: Mon, 6 Mar 2023 22:05:28 +0800 Subject: [PATCH 6/6] [Pin-gcc-client] Add GetDeclType diff --git a/include/PluginAPI/BasicPluginOpsAPI.h b/include/PluginAPI/BasicPluginOpsAPI.h index bb1e0b2..22da8df 100644 --- a/include/PluginAPI/BasicPluginOpsAPI.h +++ b/include/PluginAPI/BasicPluginOpsAPI.h @@ -64,6 +64,7 @@ public: virtual vector<LocalDeclOp> GetDecls(uint64_t funcID) = 0; virtual vector<DeclBaseOp> GetFuncDecls(uint64_t funcID) = 0; virtual vector<FieldDeclOp> GetFields(uint64_t declID) = 0; + virtual PluginIR::PluginTypeBase GetDeclType(uint64_t declID) = 0; virtual DeclBaseOp BuildDecl(IDefineCode, string, PluginTypeBase) = 0; virtual mlir::Value MakeNode(IDefineCode) = 0; diff --git a/include/PluginAPI/PluginClientAPI.h b/include/PluginAPI/PluginClientAPI.h index 9b845a8..26ef71d 100644 --- a/include/PluginAPI/PluginClientAPI.h +++ b/include/PluginAPI/PluginClientAPI.h @@ -56,6 +56,7 @@ public: vector<LocalDeclOp> GetDecls(uint64_t funcID) override; vector<DeclBaseOp> GetFuncDecls(uint64_t funcID) override; vector<FieldDeclOp> GetFields(uint64_t declID) override; + PluginIR::PluginTypeBase GetDeclType(uint64_t declID) override; DeclBaseOp BuildDecl(IDefineCode, string, PluginTypeBase) override; mlir::Value MakeNode(IDefineCode) override; diff --git a/include/Translate/GimpleToPluginOps.h b/include/Translate/GimpleToPluginOps.h index 0565b01..1332219 100644 --- a/include/Translate/GimpleToPluginOps.h +++ b/include/Translate/GimpleToPluginOps.h @@ -73,6 +73,7 @@ public: vector<mlir::Plugin::LocalDeclOp> GetAllDecls(uint64_t); vector<mlir::Plugin::DeclBaseOp> GetFuncDecls(uint64_t); vector<FieldDeclOp> GetFields(uint64_t); + PluginIR::PluginTypeBase GetDeclType(uint64_t); mlir::Plugin::DeclBaseOp BuildDecl(IDefineCode, string, PluginTypeBase); mlir::Value MakeNode(IDefineCode); diff --git a/lib/PluginAPI/PluginClientAPI.cpp b/lib/PluginAPI/PluginClientAPI.cpp index 0ee062b..95e9ab3 100644 --- a/lib/PluginAPI/PluginClientAPI.cpp +++ b/lib/PluginAPI/PluginClientAPI.cpp @@ -117,6 +117,11 @@ vector<FieldDeclOp> PluginClientAPI::GetFields(uint64_t declID) return gimpleConversion.GetFields(declID); } +PluginIR::PluginTypeBase PluginClientAPI::GetDeclType(uint64_t declID) +{ + return gimpleConversion.GetDeclType(declID); +} + mlir::Value PluginClientAPI::MakeNode(IDefineCode code) { return gimpleConversion.MakeNode(code); diff --git a/lib/PluginClient/PluginClient.cpp b/lib/PluginClient/PluginClient.cpp index 83e8642..c354d7e 100644 --- a/lib/PluginClient/PluginClient.cpp +++ b/lib/PluginClient/PluginClient.cpp @@ -268,6 +268,19 @@ void GetBuildDeclResult(PluginClient *client, Json::Value& root, string& result) client->ReceiveSendMsg("DeclOpResult", result); } +void GetDeclTypeResult(PluginClient *client, Json::Value& root, string& result) +{ + mlir::MLIRContext context; + context.getOrLoadDialect<PluginDialect>(); + PluginAPI::PluginClientAPI clientAPI(context); + std::string declIdKey = "declId"; + uint64_t declID = atol(root[declIdKey].asString().c_str()); + PluginIR::PluginTypeBase retType = clientAPI.GetDeclType(declID); + PluginJson json = client->GetJson(); + result = json.TypeJsonSerialize(retType).toStyledString(); + client->ReceiveSendMsg("PluginTypeResult", result); +} + void SetDeclNameResult(PluginClient *client, Json::Value& root, string& result) { /// Json格式 @@ -1266,6 +1279,7 @@ std::map<string, GetResultFunc> g_getResultFunc = { {"GetFuncDecls", GetFuncDeclsResult}, {"GetFields", GetFieldsResult}, {"BuildDecl", GetBuildDeclResult}, + {"GetDeclType", GetDeclTypeResult}, {"MakeNode", GetMakeNodeResult}, {"SetDeclName", SetDeclNameResult}, {"SetDeclType", SetDeclTypeResult}, diff --git a/lib/PluginClient/PluginInputCheck.cpp b/lib/PluginClient/PluginInputCheck.cpp index 4d17e0a..36ebd8c 100755 --- a/lib/PluginClient/PluginInputCheck.cpp +++ b/lib/PluginClient/PluginInputCheck.cpp @@ -47,7 +47,7 @@ bool PluginInputCheck::ReadConfigfile(Json::Value& root) } if (!reader.parse(ifs, root)) { - printf("parse %s fail! check the file format!\n", configFilePath.c_str()); + fprintf(stderr, "parse %s fail! check the file format!\n", configFilePath.c_str()); ifs.close(); return false; } diff --git a/lib/PluginClient/PluginJson.cpp b/lib/PluginClient/PluginJson.cpp index 76f13a7..be0ee8d 100755 --- a/lib/PluginClient/PluginJson.cpp +++ b/lib/PluginClient/PluginJson.cpp @@ -209,7 +209,6 @@ void PluginJson::CGnodeOpJsonSerialize(CGnodeOp& cgnode, string& out) root["attributes"]["definition"] = "0"; } root["attributes"]["symbolName"] = cgnode.symbolNameAttr().getValue().str().c_str(); - fprintf(stderr, "dgy client cgnode json %s\n", root.toStyledString().c_str()); out = root.toStyledString(); } diff --git a/lib/PluginClient/PluginLog.cpp b/lib/PluginClient/PluginLog.cpp index 6cdf7af..7ace548 100644 --- a/lib/PluginClient/PluginLog.cpp +++ b/lib/PluginClient/PluginLog.cpp @@ -46,14 +46,14 @@ static void GetLogFileName(string& fileName) { time_t nowTime = time(nullptr); if (nowTime == -1) { - printf("%s fail\n", __func__); + fprintf(stderr, "%s fail\n", __func__); } struct tm *t = localtime(&nowTime); char buf[100]; int ret = sprintf(buf, "/tmp/pin_client%d_%4d%02d%02d_%02d_%02d_%02d.log", getpid(), t->tm_year + BASE_DATE, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); if (ret < 0) { - printf("%s sprintf fail\n", __func__); + fprintf(stderr, "%s sprintf fail\n", __func__); } fileName = buf; } @@ -100,14 +100,14 @@ static void LogWrite(const char *tag, const char *msg) { time_t nowTime = time(nullptr); if (nowTime == -1) { - printf("%s fail\n", __func__); + fprintf(stderr, "%s fail\n", __func__); } struct tm *t = localtime(&nowTime); char buf[30]; int ret = sprintf(buf, "%4d-%02d-%02d %02d:%02d:%02d ", t->tm_year + BASE_DATE, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); if (ret < 0) { - printf("%s sprintf fail\n", __func__); + fprintf(stderr, "%s sprintf fail\n", __func__); } string stag = tag; string smsg = msg; @@ -123,12 +123,12 @@ void LogPrint(LogPriority priority, const char *tag, const char *fmt, ...) va_start(ap, fmt); int ret = vsnprintf(buf, LOG_BUF_SIZE, fmt, ap); if (ret < 0) { - printf("%s vsnprintf fail\n", __func__); + fprintf(stderr, "%s vsnprintf fail\n", __func__); } va_end(ap); if (priority <= g_priority) { - printf("%s%s", tag, buf); + fprintf(stderr, "%s%s", tag, buf); } g_mutex.lock(); diff --git a/lib/Translate/GimpleToPluginOps.cpp b/lib/Translate/GimpleToPluginOps.cpp index d1b3298..930b430 100644 --- a/lib/Translate/GimpleToPluginOps.cpp +++ b/lib/Translate/GimpleToPluginOps.cpp @@ -93,7 +93,7 @@ static IComparisonCode TranslateCmpCode(enum tree_code ccode) case NE_EXPR: return IComparisonCode::ne; default: - printf("tcc_comparison: %d not suppoted!\n", ccode); + fprintf(stderr, "tcc_comparison: %d not suppoted!\n", ccode); break; } return IComparisonCode::UNDEF; @@ -117,7 +117,7 @@ static enum tree_code TranslateCmpCodeToTreeCode(IComparisonCode iCode) case IComparisonCode::ne: return NE_EXPR; default: - printf("tcc_comparison not suppoted!\n"); + fprintf(stderr, "tcc_comparison not suppoted!\n"); break; } // FIXME. @@ -320,8 +320,6 @@ CGnodeOp GimpleToPluginOps::BuildCGnodeOp(uint64_t id) { cgraph_node *node; node = reinterpret_cast<cgraph_node *>(id); - fprintf(stderr, "dgy client BuildCGnodeOp id : %lld\n", id); - fprintf(stderr, "dgy client BuildCGnodeOp node name is : %s/%d\n", node->name(), node->order); mlir::StringRef symbolName(node->name()); bool definition = false; if (node->definition) @@ -338,8 +336,6 @@ vector<uint64_t> GimpleToPluginOps::GetCGnodeIDs() vector<uint64_t> cgnodeIDs; FOR_EACH_FUNCTION (node) { int64_t id = reinterpret_cast<int64_t>(reinterpret_cast<void*>(node)); - fprintf(stderr, "dgy client GetCGnodeIDs id : %lld\n", id); - fprintf(stderr, "dgy client GetCGnodeIDs node name is : %s/%d\n", node->name(), node->order); cgnodeIDs.push_back(id); } return cgnodeIDs; @@ -506,6 +502,14 @@ vector<FieldDeclOp> GimpleToPluginOps::GetFields(uint64_t declID) return fields; } +PluginIR::PluginTypeBase GimpleToPluginOps::GetDeclType(uint64_t declID) +{ + tree decl = reinterpret_cast<tree>(declID); + tree type = TREE_TYPE(decl); + PluginIR::PluginTypeBase retType = typeTranslator.translateType(reinterpret_cast<uintptr_t>(reinterpret_cast<void*>(type))); + return retType; +} + DeclBaseOp GimpleToPluginOps::BuildDecl(IDefineCode code, string name, PluginTypeBase type) { tree newtype = make_node(RECORD_TYPE); @@ -581,8 +585,8 @@ void GimpleToPluginOps::LayoutDecl(uint64_t declId) { tree decl = reinterpret_cast<tree>(declId); layout_decl (decl, 0); - debug_tree(decl); - debug_tree(TREE_TYPE(decl)); + // debug_tree(decl); + // debug_tree(TREE_TYPE(decl)); } void GimpleToPluginOps::SetDeclChain(uint64_t newfieldId, uint64_t fieldId) @@ -900,19 +904,19 @@ Operation *GimpleToPluginOps::BuildOperation(uint64_t id) break; } case GIMPLE_TRY: { - printf("try stmt \n"); + fprintf(stderr, "try stmt \n"); TryOp tryOp = BuildTryOp(id); ret = tryOp.getOperation(); break; } case GIMPLE_CATCH: { - printf("catch stmt \n"); + fprintf(stderr, "catch stmt \n"); CatchOp catchOp = BuildCatchOp(id); ret = catchOp.getOperation(); break; } case GIMPLE_BIND: { - printf("bind stmt \n"); + fprintf(stderr, "bind stmt \n"); BindOp bindOp = BuildBindOp(id); ret = bindOp.getOperation(); break; @@ -1078,7 +1082,7 @@ uint64_t GimpleToPluginOps::CreateGassign(uint64_t blockId, IExprCode iCode, } else if (vargs.size() == 4) { ret = gimple_build_assign(vargs[0], TranslateExprCodeToTreeCode(iCode), vargs[1], vargs[2], vargs[3]); } else { - printf("ERROR size: %ld.\n", vargs.size()); + fprintf(stderr, "ERROR size: %ld.\n", vargs.size()); } basic_block bb = reinterpret_cast<basic_block>(blockId); if (bb != nullptr) { @@ -1288,7 +1292,7 @@ EHMntOp GimpleToPluginOps::BuildEHMntOp(uint64_t gehmntId) uint64_t fndecladdr = reinterpret_cast<uint64_t>( reinterpret_cast<void*>(gimple_eh_must_not_throw_fndecl(stmt))); Value fndecl = TreeToValue(fndecladdr); - printf("build --------------------------------------\n"); + fprintf(stderr, "build --------------------------------------\n"); EHMntOp ret = builder.create<EHMntOp>( builder.getUnknownLoc(), gehmntId, fndecl); return ret; @@ -1718,7 +1722,7 @@ bool GimpleToPluginOps::ProcessGimpleStmt(intptr_t bbPtr, Region& rg) gimple *stmt = gsi_stmt (si); uint64_t id = reinterpret_cast<uint64_t>(reinterpret_cast<void*>(stmt)); if (BuildOperation(id) == nullptr) { - printf("ERROR: BuildOperation!"); + fprintf(stderr, "ERROR: BuildOperation!"); } if(gimple_code(stmt) == GIMPLE_COND || gimple_code(stmt) == GIMPLE_SWITCH || gimple_code(stmt) == GIMPLE_TRANSACTION || gimple_code(stmt) == GIMPLE_RESX || -- 2.33.0
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.