132 lines
4.5 KiB
Diff
132 lines
4.5 KiB
Diff
From 9dc1cc4cb0eeb114ac9b5daea3005f2caa1ccf5b Mon Sep 17 00:00:00 2001
|
|
From: benniaobufeijiushiji <linda7@huawei.com>
|
|
Date: Sun, 19 Feb 2023 14:41:49 +0800
|
|
Subject: [PATCH 7/9] [Pin-gcc-client] Add API for LTO judgement
|
|
|
|
|
|
diff --git a/include/PluginAPI/BasicPluginOpsAPI.h b/include/PluginAPI/BasicPluginOpsAPI.h
|
|
index 8c47c58..ca74588 100644
|
|
--- a/include/PluginAPI/BasicPluginOpsAPI.h
|
|
+++ b/include/PluginAPI/BasicPluginOpsAPI.h
|
|
@@ -95,6 +95,9 @@ public:
|
|
virtual mlir::Value BuildMemRef(PluginTypeBase, uint64_t, uint64_t) = 0;
|
|
virtual void RedirectFallthroughTarget(uint64_t, uint64_t) = 0;
|
|
virtual void RemoveEdge(uint64_t, uint64_t) = 0;
|
|
+
|
|
+ virtual bool IsLtoOptimize() = 0;
|
|
+ virtual bool IsWholeProgram() = 0;
|
|
}; // class BasicPluginOpsAPI
|
|
} // namespace PluginAPI
|
|
|
|
diff --git a/include/PluginAPI/PluginClientAPI.h b/include/PluginAPI/PluginClientAPI.h
|
|
index 07d6e52..727d329 100644
|
|
--- a/include/PluginAPI/PluginClientAPI.h
|
|
+++ b/include/PluginAPI/PluginClientAPI.h
|
|
@@ -95,6 +95,9 @@ public:
|
|
|
|
void RedirectFallthroughTarget(uint64_t, uint64_t) override;
|
|
void RemoveEdge(uint64_t, uint64_t) override;
|
|
+
|
|
+ bool IsLtoOptimize() override;
|
|
+ bool IsWholeProgram() override;
|
|
private:
|
|
PluginIR::GimpleToPluginOps gimpleConversion;
|
|
}; // class PluginClientAPI
|
|
diff --git a/include/Translate/GimpleToPluginOps.h b/include/Translate/GimpleToPluginOps.h
|
|
index 5f8bdf0..2ecf5ac 100644
|
|
--- a/include/Translate/GimpleToPluginOps.h
|
|
+++ b/include/Translate/GimpleToPluginOps.h
|
|
@@ -106,6 +106,10 @@ public:
|
|
|
|
void RedirectFallthroughTarget(uint64_t, uint64_t);
|
|
void RemoveEdge(uint64_t, uint64_t);
|
|
+
|
|
+ bool IsLtoOptimize();
|
|
+ bool IsWholeProgram();
|
|
+
|
|
private:
|
|
GimpleToPluginOps () = delete;
|
|
mlir::OpBuilder builder;
|
|
diff --git a/lib/PluginAPI/PluginClientAPI.cpp b/lib/PluginAPI/PluginClientAPI.cpp
|
|
index 5e454d7..362ede1 100644
|
|
--- a/lib/PluginAPI/PluginClientAPI.cpp
|
|
+++ b/lib/PluginAPI/PluginClientAPI.cpp
|
|
@@ -280,4 +280,14 @@ void PluginClientAPI::RemoveEdge(uint64_t src, uint64_t dest)
|
|
return gimpleConversion.RemoveEdge(src, dest);
|
|
}
|
|
|
|
+bool PluginClientAPI::IsLtoOptimize()
|
|
+{
|
|
+ return gimpleConversion.IsLtoOptimize();
|
|
+}
|
|
+
|
|
+bool PluginClientAPI::IsWholeProgram()
|
|
+{
|
|
+ return gimpleConversion.IsWholeProgram();
|
|
+}
|
|
+
|
|
} // namespace PluginAPI
|
|
\ No newline at end of file
|
|
diff --git a/lib/PluginClient/PluginClient.cpp b/lib/PluginClient/PluginClient.cpp
|
|
index 18877c2..81b59c0 100644
|
|
--- a/lib/PluginClient/PluginClient.cpp
|
|
+++ b/lib/PluginClient/PluginClient.cpp
|
|
@@ -820,6 +820,24 @@ void DebugValueResult(PluginClient *client, Json::Value& root, string& result)
|
|
client->ReceiveSendMsg("ValueResult", result);
|
|
}
|
|
|
|
+void IsLtoOptimizeResult(PluginClient *client, Json::Value& root, string& result)
|
|
+{
|
|
+ mlir::MLIRContext context;
|
|
+ context.getOrLoadDialect<PluginDialect>();
|
|
+ PluginAPI::PluginClientAPI clientAPI(context);
|
|
+ bool lto = clientAPI.IsLtoOptimize();
|
|
+ client->ReceiveSendMsg("BoolResult", std::to_string(lto));
|
|
+}
|
|
+
|
|
+void IsWholeProgramResult(PluginClient *client, Json::Value& root, string& result)
|
|
+{
|
|
+ mlir::MLIRContext context;
|
|
+ context.getOrLoadDialect<PluginDialect>();
|
|
+ PluginAPI::PluginClientAPI clientAPI(context);
|
|
+ bool wholePR = clientAPI.IsWholeProgram();
|
|
+ client->ReceiveSendMsg("BoolResult", std::to_string(wholePR));
|
|
+}
|
|
+
|
|
typedef std::function<void(PluginClient*, Json::Value&, string&)> GetResultFunc;
|
|
std::map<string, GetResultFunc> g_getResultFunc = {
|
|
{"GetAllFunc", GetAllFuncResult},
|
|
@@ -868,6 +886,8 @@ std::map<string, GetResultFunc> g_getResultFunc = {
|
|
{"ConfirmValue", ConfirmValueResult},
|
|
{"BuildMemRef", BuildMemRefResult},
|
|
{"DebugValue", DebugValueResult},
|
|
+ {"IsLtoOptimize",IsLtoOptimizeResult},
|
|
+ {"IsWholeProgram",IsWholeProgramResult},
|
|
};
|
|
|
|
void PluginClient::GetIRTransResult(void *gccData, const string& funcName, const string& param)
|
|
diff --git a/lib/Translate/GimpleToPluginOps.cpp b/lib/Translate/GimpleToPluginOps.cpp
|
|
index 5ecab75..c4e5611 100644
|
|
--- a/lib/Translate/GimpleToPluginOps.cpp
|
|
+++ b/lib/Translate/GimpleToPluginOps.cpp
|
|
@@ -529,6 +529,16 @@ void GimpleToPluginOps::RemoveEdge(uint64_t src, uint64_t dest)
|
|
remove_edge(e);
|
|
}
|
|
|
|
+bool GimpleToPluginOps::IsLtoOptimize()
|
|
+{
|
|
+ return in_lto_p;
|
|
+}
|
|
+
|
|
+bool GimpleToPluginOps::IsWholeProgram()
|
|
+{
|
|
+ return flag_whole_program;
|
|
+}
|
|
+
|
|
FunctionOp GimpleToPluginOps::BuildFunctionOp(uint64_t functionId)
|
|
{
|
|
function *fn = reinterpret_cast<function*>(functionId);
|
|
--
|
|
2.27.0.windows.1
|
|
|