pin-gcc-client/0007-Pin-gcc-client-Add-API-for-LTO-judgement.patch
d00573793 fdcab1229a [sync] Sync patch from openeuler/pin-gcc-client
(cherry picked from commit c479a0e1cdb0f7672c180d94662776012d7bc37a)
2023-02-27 09:22:08 +08:00

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