1 Star 0 Fork 15

woodrabbit/pin-gcc-client

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
0006-Pin-gcc-client-Add-GetDeclType.patch 11.74 KB
一键复制 编辑 原始数据 按行查看 历史
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
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/woodrabbit/pin-gcc-client.git
git@gitee.com:woodrabbit/pin-gcc-client.git
woodrabbit
pin-gcc-client
pin-gcc-client
master

搜索帮助