代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/pin-server 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From d395986acddf59c379a107fbe6d1b69c74ff2d3b Mon Sep 17 00:00:00 2001
From: wangding16 <wangding16@huawei.com>
Date: Wed, 8 Feb 2023 15:16:49 +0800
Subject: [PATCH 03/23] [Refactoring] Code refactoring of Communication
Subsystem [3/3]. Code refactoring of Communication subsystem.
diff --git a/CMakeLists.txt b/CMakeLists.txt
index f1373e8..3a784df 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -92,6 +92,9 @@ add_custom_command(TARGET pin_user COMMAND sha256sum libpin_user.so > libpin_use
add_executable(pin_server
"lib/PluginServer/PluginServer.cpp"
"lib/PluginAPI/ControlFlowAPI.cpp"
+ "lib/PluginServer/PluginGrpc.cpp"
+ "lib/PluginServer/PluginJson.cpp"
+ "lib/PluginServer/PluginCom.cpp"
"lib/PluginServer/PluginLog.cpp"
"lib/PluginServer/main.cpp")
target_link_libraries(pin_server
diff --git a/README.md b/README.md
index f948f51..3513a24 100644
--- a/README.md
+++ b/README.md
@@ -6,10 +6,8 @@ Pin (Plug-IN framework) server provides plugin APIs for compiler optimization de
#### 软件架构
Pin(Plug-IN framework, 插件框架)为生态伙伴提供基于插件IR的编译器优化开发能力,允许开发者使用插件API开发编译器优化pass,并以插件形式向主流编译器(如GCC)提供优化能力。
-本框架采用插件服务端组件(Pin-Server)和插件客户端模块(Pin-gcc-client)组成代理模式。
+本框架采用插件服务端组件(Pin-Server)和插件客户端模块组成代理模式。
Pin-Server为开发者提供插件API进行编译器优化pass的开发。
-Pin-gcc-client基于GCC插件实现,可以在GCC场景执行优化pass。
-
#### 安装教程
diff --git a/include/Dialect/PluginDialect.h b/include/Dialect/PluginDialect.h
index 0affbc2..65e03c0 100644
--- a/include/Dialect/PluginDialect.h
+++ b/include/Dialect/PluginDialect.h
@@ -13,11 +13,11 @@
under the License.
*/
-//===----------------------------------------------------------------------===//
-//
+// ===----------------------------------------------------------------------===//
+//
// This is the header file for the Plugin dialect.
//
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
#ifndef PLUGIN_DIALECT_H
#define PLUGIN_DIALECT_H
diff --git a/include/Dialect/PluginOps.h b/include/Dialect/PluginOps.h
index 8bab877..3c7bd64 100644
--- a/include/Dialect/PluginOps.h
+++ b/include/Dialect/PluginOps.h
@@ -14,11 +14,11 @@
*/
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
//
-// This is the header file for operations in Plugin dialect.
+// This is the header file for operations in Plugin dialect.
//
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
#ifndef Plugin_OPS_H
#define Plugin_OPS_H
diff --git a/include/Dialect/PluginTypes.h b/include/Dialect/PluginTypes.h
index 0b1f4f4..7fb1ff9 100644
--- a/include/Dialect/PluginTypes.h
+++ b/include/Dialect/PluginTypes.h
@@ -131,25 +131,19 @@ public:
class PluginVoidType : public Type::TypeBase<PluginVoidType, PluginTypeBase, TypeStorage> {
public:
using Base::Base;
-
PluginTypeID getPluginTypeID ();
-
}; // class PluginVoidType
class PluginUndefType : public Type::TypeBase<PluginUndefType, PluginTypeBase, TypeStorage> {
public:
using Base::Base;
-
PluginTypeID getPluginTypeID ();
-
}; // class PluginUndefType
class PluginBooleanType : public Type::TypeBase<PluginBooleanType, PluginTypeBase, TypeStorage> {
public:
using Base::Base;
-
PluginTypeID getPluginTypeID ();
-
}; // class PluginBooleanType
} // namespace PluginIR
diff --git a/include/PluginAPI/BasicPluginOpsAPI.h b/include/PluginAPI/BasicPluginOpsAPI.h
index 68abaef..0ca0ac4 100644
--- a/include/PluginAPI/BasicPluginOpsAPI.h
+++ b/include/PluginAPI/BasicPluginOpsAPI.h
@@ -37,6 +37,14 @@ public:
BasicPluginOpsAPI() = default;
virtual ~BasicPluginOpsAPI() = default;
+ virtual int64_t GetInjectDataAddress() = 0;
+ virtual string GetDeclSourceFile(int64_t) = 0;
+ virtual string VariableName(int64_t) = 0;
+ virtual string FuncName(int64_t) = 0;
+ virtual string GetIncludeFile() = 0;
+ virtual int GetDeclSourceLine(int64_t) = 0;
+ virtual int GetDeclSourceColumn(int64_t) = 0;
+
virtual vector<FunctionOp> GetAllFunc() = 0;
virtual vector<LocalDeclOp> GetDecls(uint64_t) = 0;
virtual LoopOp AllocateNewLoop(uint64_t) = 0;
@@ -74,4 +82,4 @@ public:
}; // class BasicPluginOpsAPI
} // namespace PluginAPI
-#endif // BASIC_PLUGIN_OPS_FRAMEWORK_API_H
\ No newline at end of file
+#endif // BASIC_PLUGIN_OPS_FRAMEWORK_API_H
diff --git a/include/PluginAPI/PluginServerAPI.h b/include/PluginAPI/PluginServerAPI.h
index 360ffbd..0655d80 100644
--- a/include/PluginAPI/PluginServerAPI.h
+++ b/include/PluginAPI/PluginServerAPI.h
@@ -52,8 +52,8 @@ public:
vector<pair<mlir::Block*, mlir::Block*> > GetLoopExitEdges(uint64_t loopID);
mlir::Block* GetHeader(uint64_t loopID);
mlir::Block* GetLatch(uint64_t loopID);
- void SetHeader(uint64_t loopID, uint64_t blockID);
- void SetLatch(uint64_t loopID, uint64_t blockID);
+ void SetHeader(uint64_t loopID, uint64_t blockID);
+ void SetLatch(uint64_t loopID, uint64_t blockID);
vector<mlir::Block*> GetLoopBody(uint64_t loopID);
LoopOp GetBlockLoopFather(uint64_t blockID);
mlir::Block* FindBlock(uint64_t);
@@ -73,7 +73,7 @@ public:
PhiOp CreatePhiOp(uint64_t, uint64_t) override;
/* Plugin API for ConstOp. */
mlir::Value CreateConstOp(mlir::Attribute, mlir::Type) override;
- void DebugValue(uint64_t) override;
+ void DebugValue(uint64_t) override;
mlir::Value GetCurrentDefFromSSA(uint64_t) override;
bool SetCurrentDefInSSA(uint64_t, uint64_t) override;
@@ -84,16 +84,15 @@ public:
bool RedirectFallthroughTarget(FallThroughOp&, uint64_t, uint64_t) override;
mlir::Operation* GetSSADefOperation(uint64_t) override;
void InsertCreatedBlock(uint64_t id, mlir::Block* block);
- void WaitClientResult(const string& funName, const string& params);
+ int64_t GetInjectDataAddress() override; // 获取注入点返回数据的地址
+ string GetDeclSourceFile(int64_t) override;
+ string VariableName(int64_t) override;
+ string FuncName(int64_t) override;
+ string GetIncludeFile() override;
+ int GetDeclSourceLine(int64_t) override;
+ int GetDeclSourceColumn(int64_t) override;
private:
- vector<FunctionOp> GetFunctionOpResult(const string& funName, const string& params);
- vector<LocalDeclOp> GetDeclOperationResult(const string& funName, const string& params);
- LoopOp GetLoopResult(const string&funName, const string& params);
- vector<LoopOp> GetLoopsResult(const string& funName, const string& params);
- bool GetBoolResult(const string& funName, const string& params);
- pair<mlir::Block*, mlir::Block*> EdgeResult(const string& funName, const string& params);
- vector<pair<mlir::Block*, mlir::Block*> > EdgesResult(const string& funName, const string& params);
mlir::Block* BlockResult(const string& funName, const string& params);
vector<mlir::Block*> BlocksResult(const string& funName, const string& params);
bool GetDomInfoAvaiResult(const string& funName);
diff --git a/include/PluginServer/ManagerSetup.h b/include/PluginServer/ManagerSetup.h
new file mode 100755
index 0000000..27ba930
--- /dev/null
+++ b/include/PluginServer/ManagerSetup.h
@@ -0,0 +1,67 @@
+/* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Author: Mingchuan Wu and Yancheng Li
+ Create: 2022-08-18
+ Description:
+ This file contains the declaration of the ManagerSetup class.
+ 主要完成功能:提供managerSetup注册方法
+*/
+
+#ifndef MANAGER_SETUP_H
+#define MANAGER_SETUP_H
+
+namespace PluginOpt {
+enum RefPassName {
+ PASS_CFG,
+ PASS_PHIOPT,
+ PASS_SSA,
+ PASS_LOOP,
+};
+
+enum PassPosition {
+ PASS_INSERT_AFTER,
+ PASS_INSERT_BEFORE,
+ PASS_REPLACE,
+};
+
+class ManagerSetup {
+public:
+ ManagerSetup(RefPassName name, int num, PassPosition position)
+ {
+ refPassName = name;
+ passNum = num;
+ passPosition = position;
+ }
+ RefPassName GetPassName()
+ {
+ return refPassName;
+ }
+ int GetPassNum()
+ {
+ return passNum;
+ }
+ PassPosition GetPassPosition()
+ {
+ return passPosition;
+ }
+
+private:
+ RefPassName refPassName;
+ int passNum; // 指定passName的第几次执行作为参考点
+ PassPosition passPosition; // 指定pass是添加在参考点之前还是之后
+};
+} // namespace PinOpt
+
+#endif
\ No newline at end of file
diff --git a/include/PluginServer/PluginCom.h b/include/PluginServer/PluginCom.h
new file mode 100755
index 0000000..6535362
--- /dev/null
+++ b/include/PluginServer/PluginCom.h
@@ -0,0 +1,90 @@
+/* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Author: Mingchuan Wu and Yancheng Li
+ Create: 2022-08-18
+ Description:
+ This file contains the declaration of the PluginCom class.
+ 主要完成功能:和client之间通信、数据解析、数据反序列化
+*/
+
+#ifndef PLUGIN_COM_H
+#define PLUGIN_COM_H
+
+#include "Dialect/PluginOps.h"
+#include "Dialect/PluginTypes.h"
+#include "PluginServer/PluginJson.h"
+#include "PluginServer/PluginGrpc.h"
+
+namespace PinCom {
+using PinGrpc::PluginGrpc;
+using PinJson::PluginJson;
+using std::vector;
+using std::string;
+
+class PluginCom {
+public:
+ bool RegisterServer(const string& port)
+ {
+ return pluginGrpc.RegisterServer(port);
+ }
+ void Run()
+ {
+ pluginGrpc.Run();
+ }
+ void ShutDown()
+ {
+ pluginGrpc.ShutDown();
+ }
+ void ServerSend(const string& key, const string& value)
+ {
+ pluginGrpc.ServerSend(key, value);
+ }
+ /* json反序列化,根据key值分别调用Operation/Decl/Type反序列化接口函数 */
+ void JsonDeSerialize(const string& key, const string& data);
+ int64_t GetIntegerDataResult(void);
+ string GetStringDataResult(void);
+ vector<mlir::Plugin::FunctionOp> GetFunctionOpResult(void);
+ vector<mlir::Plugin::LocalDeclOp> GetLocalDeclResult(void);
+ mlir::Plugin::LoopOp LoopOpResult(void);
+ vector<mlir::Plugin::LoopOp> LoopOpsResult(void);
+ vector<std::pair<mlir::Block*, mlir::Block*> > EdgesResult(void);
+ std::pair<mlir::Block*, mlir::Block*> EdgeResult(void);
+ vector<mlir::Operation *> GetOpResult(void);
+ bool GetBoolResult(void);
+ uint64_t GetIdResult(void);
+ vector<uint64_t> GetIdsResult(void);
+ mlir::Value GetValueResult(void);
+ vector<mlir::Plugin::PhiOp> GetPhiOpsResult(void);
+
+private:
+ PluginGrpc pluginGrpc;
+ PluginJson json;
+ int64_t integerResult;
+ string stringResult;
+ vector<mlir::Plugin::FunctionOp> funcOpData;
+ vector<mlir::Plugin::LocalDeclOp> decls;
+ vector<mlir::Plugin::LoopOp> loops;
+ mlir::Plugin::LoopOp loop;
+ vector<std::pair<mlir::Block*, mlir::Block*> > edges;
+ std::pair<mlir::Block*, mlir::Block*> edge;
+ vector<mlir::Operation *> opData;
+ bool boolResult;
+ uint64_t idResult;
+ vector<uint64_t> idsResult;
+ mlir::Value valueResult;
+};
+} // namespace PinCom
+
+#endif
\ No newline at end of file
diff --git a/include/PluginServer/PluginGrpc.h b/include/PluginServer/PluginGrpc.h
new file mode 100755
index 0000000..9d30dce
--- /dev/null
+++ b/include/PluginServer/PluginGrpc.h
@@ -0,0 +1,65 @@
+/* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Author: Mingchuan Wu and Yancheng Li
+ Create: 2022-08-18
+ Description:
+ This file contains the declaration of the GrpcService class.
+ 主要完成功能:完成grpc server服务的注册,提供server和client之间grpc收发接口
+*/
+
+#ifndef PLUGIN_GRPC_H
+#define PLUGIN_GRPC_H
+
+#include <grpcpp/grpcpp.h>
+#include "plugin.grpc.pb.h"
+
+namespace PinGrpc {
+using grpc::Server;
+using grpc::ServerBuilder;
+using grpc::ServerContext;
+using grpc::ServerReaderWriter;
+using grpc::Status;
+
+using plugin::PluginService;
+using plugin::ClientMsg;
+using plugin::ServerMsg;
+using std::string;
+
+class PluginGrpc final : public PluginService::Service {
+public:
+ PluginGrpc()
+ {
+ shutdown = false;
+ }
+ /* 定义的grpc服务端和客户端通信的接口函数 */
+ Status ReceiveSendMsg(ServerContext* context, ServerReaderWriter<ServerMsg, ClientMsg>* stream) override;
+ /* 服务端发送数据给client接口 */
+ void ServerSend(const string& key, const string& value);
+ bool RegisterServer(const string& port);
+ void Run();
+ void ShutDown()
+ {
+ shutdown = true;
+ }
+
+private:
+ void ServerMonitorThread(); // 监听线程,shutdown为true时,grpc server退出
+ bool shutdown; // 是否关闭grpc server
+ ServerReaderWriter<ServerMsg, ClientMsg> *grpcStream; // 保存server和client通信的grpc stream指针
+ std::unique_ptr<Server> grpcServer;
+};
+} // namespace PinGrpc
+
+#endif
diff --git a/include/PluginServer/PluginJson.h b/include/PluginServer/PluginJson.h
new file mode 100755
index 0000000..6f46187
--- /dev/null
+++ b/include/PluginServer/PluginJson.h
@@ -0,0 +1,68 @@
+/* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Author: Mingchuan Wu and Yancheng Li
+ Create: 2022-08-18
+ Description:
+ This file contains the declaration of the PluginJson class.
+ 主要完成功能:将序列化数据进行反序列化
+*/
+
+#ifndef PLUGIN_JSON_H
+#define PLUGIN_JSON_H
+
+#include <json/json.h>
+#include "Dialect/PluginOps.h"
+#include "Dialect/PluginTypes.h"
+
+using std::string;
+using std::map;
+using std::vector;
+
+namespace PinJson {
+class PluginJson {
+public:
+ void FuncOpJsonDeSerialize(const string&, vector<mlir::Plugin::FunctionOp>&);
+ void LocalDeclOpJsonDeSerialize(const string&,
+ vector<mlir::Plugin::LocalDeclOp>&);
+ void LoopOpsJsonDeSerialize(const string&, vector<mlir::Plugin::LoopOp>&);
+ void EdgesJsonDeSerialize(const string&,
+ vector<std::pair<mlir::Block*, mlir::Block*>>&);
+ void EdgeJsonDeSerialize(const string&, std::pair<mlir::Block*, mlir::Block*>&);
+ void IdsJsonDeSerialize(const string&, vector<uint64_t>&);
+ mlir::Operation *CallOpJsonDeSerialize(const string&);
+ mlir::Operation *CondOpJsonDeSerialize(const string&);
+ mlir::Operation *RetOpJsonDeSerialize(const string&);
+ mlir::Operation *FallThroughOpJsonDeSerialize(const string&);
+ mlir::Operation *PhiOpJsonDeSerialize(const string&);
+ mlir::Operation *AssignOpJsonDeSerialize(const string&);
+ void GetPhiOpsJsonDeSerialize(const string&, vector<mlir::Operation *>&);
+ mlir::Value SSAOpJsonDeSerialize(const string& data);
+ mlir::Plugin::LoopOp LoopOpJsonDeSerialize(const string& data);
+ PluginIR::PluginTypeBase TypeJsonDeSerialize(const string& data);
+ void OpJsonDeSerialize(const string&, vector<mlir::Operation *>&);
+ /* 将整形数据反序列化 */
+ void IntegerDeSerialize(const string& data, int64_t& result);
+ /* 将字符串数据反序列化 */
+ void StringDeSerialize(const string& data, string& result);
+ /* 将json格式数据解析成map<string, string>格式 */
+ void GetAttributes(Json::Value node, map<string, string>& attributes);
+ mlir::Value ValueJsonDeSerialize(Json::Value valueJson);
+ Json::Value TypeJsonSerialize(PluginIR::PluginTypeBase& type);
+ mlir::Value MemRefDeSerialize(const string& data);
+ bool ProcessBlock(mlir::Block*, mlir::Region&, const Json::Value&);
+};
+} // namespace PinJson
+
+#endif
diff --git a/include/user/user.h b/include/user/user.h
new file mode 100755
index 0000000..1fb7a30
--- /dev/null
+++ b/include/user/user.h
@@ -0,0 +1,27 @@
+/* Copyright (c) Huawei Technologies Co., Ltd. 2022-2022. All rights reserved.
+
+ Licensed under the Apache License, Version 2.0 (the "License"); you may
+ not use this file except in compliance with the License. You may obtain
+ a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ License for the specific language governing permissions and limitations
+ under the License.
+
+ Author: Mingchuan Wu and Yancheng Li
+ Create: 2022-08-18
+ Description:
+ This file contains the declaration of the User Init.
+*/
+
+#ifndef PLUGIN_USER_H
+#define PLUGIN_USER_H
+
+/* 将注册点及用户函数注册给server, server初始化时调用 */
+void RegisterCallbacks(void);
+
+#endif
diff --git a/lib/Dialect/PluginDialect.cpp b/lib/Dialect/PluginDialect.cpp
index 001fdab..95b38cf 100644
--- a/lib/Dialect/PluginDialect.cpp
+++ b/lib/Dialect/PluginDialect.cpp
@@ -14,11 +14,11 @@
*/
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
//
// This file defines Plugin dialect.
//
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
#include "Dialect/PluginDialect.h"
#include "Dialect/PluginOps.h"
@@ -27,21 +27,22 @@
using namespace mlir;
using namespace mlir::Plugin;
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin dialect.
-//===----------------------------------------------------------------------===//
-
-void PluginDialect::initialize() {
- addTypes<
- PluginIR::PluginIntegerType,
- PluginIR::PluginFloatType,
- PluginIR::PluginPointerType,
- PluginIR::PluginBooleanType,
- PluginIR::PluginVoidType,
- PluginIR::PluginUndefType>();
-
- addOperations<
+// ===----------------------------------------------------------------------===//
+
+void PluginDialect::initialize()
+{
+ addTypes<
+ PluginIR::PluginIntegerType,
+ PluginIR::PluginFloatType,
+ PluginIR::PluginPointerType,
+ PluginIR::PluginBooleanType,
+ PluginIR::PluginVoidType,
+ PluginIR::PluginUndefType>();
+
+ addOperations<
#define GET_OP_LIST
#include "Dialect/PluginOps.cpp.inc"
- >();
+ >();
}
\ No newline at end of file
diff --git a/lib/Dialect/PluginOps.cpp b/lib/Dialect/PluginOps.cpp
index 4d8974a..a0591b5 100644
--- a/lib/Dialect/PluginOps.cpp
+++ b/lib/Dialect/PluginOps.cpp
@@ -14,11 +14,11 @@
*/
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
//
// This file defines operations in the Plugin dialect.
//
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
#include "PluginAPI/PluginServerAPI.h"
#include "PluginAPI/ControlFlowAPI.h"
@@ -105,7 +105,8 @@ void LocalDeclOp::build(OpBuilder &builder, OperationState &state,
void LoopOp::build(mlir::OpBuilder &builder, mlir::OperationState &state,
uint64_t id, uint32_t index, uint64_t innerLoopId,
- uint64_t outerLoopId, uint32_t numBlock) {
+ uint64_t outerLoopId, uint32_t numBlock)
+{
LoopOp::build(builder, state,
builder.getI64IntegerAttr(id),
builder.getI32IntegerAttr(index),
@@ -219,7 +220,7 @@ void LoopOp::AddBlock(mlir::Block* block)
pluginAPI.AddBlockToLoop(blockId, loopId);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// PlaceholderOp
void PlaceholderOp::build(OpBuilder &builder, OperationState &state,
@@ -233,7 +234,7 @@ void PlaceholderOp::build(OpBuilder &builder, OperationState &state,
state.addTypes(retType);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// MemOp
void MemOp::build(OpBuilder &builder, OperationState &state,
@@ -248,7 +249,7 @@ void MemOp::build(OpBuilder &builder, OperationState &state,
if (retType) state.addTypes(retType);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// SSAOp
void SSAOp::build(OpBuilder &builder, OperationState &state, uint64_t id,
@@ -270,23 +271,23 @@ void SSAOp::build(OpBuilder &builder, OperationState &state, uint64_t id,
Value SSAOp::MakeSSA(OpBuilder &builder, Type t)
{
PluginAPI::PluginServerAPI pluginAPI;
- PinServer::PluginServer::GetInstance()->SetOpBuilder(builder);
+ PinServer::PluginServer::GetInstance()->SetOpBuilder(&builder);
return pluginAPI.CreateSSAOp(t);
}
Value SSAOp::Copy()
{
PluginAPI::PluginServerAPI pluginAPI;
- OpBuilder builder(this->getOperation());
- PinServer::PluginServer::GetInstance()->SetOpBuilder(builder);
+ static OpBuilder builder(this->getOperation());
+ PinServer::PluginServer::GetInstance()->SetOpBuilder(&builder);
return pluginAPI.CopySSAOp(this->idAttr().getInt());
}
Value SSAOp::GetCurrentDef()
{
PluginAPI::PluginServerAPI pluginAPI;
- OpBuilder builder(this->getOperation());
- PinServer::PluginServer::GetInstance()->SetOpBuilder(builder);
+ static OpBuilder builder(this->getOperation());
+ PinServer::PluginServer::GetInstance()->SetOpBuilder(&builder);
return pluginAPI.GetCurrentDefFromSSA(this->idAttr().getInt());
}
@@ -307,7 +308,7 @@ Operation* SSAOp::GetSSADefOperation()
return pluginAPI.GetSSADefOperation(definingId);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// ConstOp
void ConstOp::build(OpBuilder &builder, OperationState &state, uint64_t id,
@@ -325,11 +326,11 @@ void ConstOp::build(OpBuilder &builder, OperationState &state, uint64_t id,
Value ConstOp::CreateConst(OpBuilder &builder, Attribute value, Type retType)
{
PluginAPI::PluginServerAPI pluginAPI;
- PinServer::PluginServer::GetInstance()->SetOpBuilder(builder);
+ PinServer::PluginServer::GetInstance()->SetOpBuilder(&builder);
return pluginAPI.CreateConstOp(value, retType);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// PointerOp
void PointerOp::build(OpBuilder &builder, OperationState &state, uint64_t id,
@@ -344,7 +345,7 @@ void PointerOp::build(OpBuilder &builder, OperationState &state, uint64_t id,
state.addAttribute("pointeeReadOnly", builder.getBoolAttr(pointeeReadOnly));
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// CallOp
void CallOp::build(OpBuilder &builder, OperationState &state,
@@ -414,13 +415,14 @@ void CallOp::build(OpBuilder &builder, OperationState &state,
state.addAttribute("callee", builder.getSymbolRefAttr("ctzll"));
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// CondOp
void CondOp::build(OpBuilder &builder, OperationState &state,
uint64_t id, uint64_t address, IComparisonCode condCode,
Value lhs, Value rhs, Block* tb, Block* fb, uint64_t tbaddr,
- uint64_t fbaddr, Value trueLabel, Value falseLabel) {
+ uint64_t fbaddr, Value trueLabel, Value falseLabel)
+{
state.addAttribute("id", builder.getI64IntegerAttr(id));
state.addAttribute("address", builder.getI64IntegerAttr(address));
state.addAttribute("tbaddr", builder.getI64IntegerAttr(tbaddr));
@@ -449,19 +451,18 @@ void CondOp::build(OpBuilder &builder, OperationState &state,
state.addAttribute("id", builder.getI64IntegerAttr(id));
state.addOperands({lhs, rhs});
state.addAttribute("condCode",
- builder.getI32IntegerAttr(static_cast<int32_t>(condCode)));
+ builder.getI32IntegerAttr(static_cast<int32_t>(condCode)));
state.addSuccessors(tb);
state.addSuccessors(fb);
state.addAttribute("tbaddr", builder.getI64IntegerAttr(tbaddr));
state.addAttribute("fbaddr", builder.getI64IntegerAttr(fbaddr));
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// PhiOp
void PhiOp::build(OpBuilder &builder, OperationState &state,
- ArrayRef<Value> operands, uint64_t id,
- uint32_t capacity, uint32_t nArgs)
+ ArrayRef<Value> operands, uint64_t id, uint32_t capacity, uint32_t nArgs)
{
state.addAttribute("id", builder.getI64IntegerAttr(id));
state.addAttribute("capacity", builder.getI32IntegerAttr(capacity));
@@ -472,8 +473,8 @@ void PhiOp::build(OpBuilder &builder, OperationState &state,
Value PhiOp::GetResult()
{
PluginAPI::PluginServerAPI pluginAPI;
- OpBuilder builder(this->getOperation());
- PinServer::PluginServer::GetInstance()->SetOpBuilder(builder);
+ static OpBuilder builder(this->getOperation());
+ PinServer::PluginServer::GetInstance()->SetOpBuilder(&builder);
return pluginAPI.GetResultFromPhi(this->idAttr().getInt());
}
@@ -507,7 +508,7 @@ Value PhiOp::GetArgDef(int i)
}
return getOperand(i);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// AssignOp
void AssignOp::build(OpBuilder &builder, OperationState &state,
@@ -538,7 +539,7 @@ void AssignOp::build(OpBuilder &builder, OperationState &state,
state.addOperands(operands);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// BaseOp
void BaseOp::build(OpBuilder &builder, OperationState &state,
@@ -548,7 +549,7 @@ void BaseOp::build(OpBuilder &builder, OperationState &state,
state.addAttribute("opCode", builder.getStringAttr(opCode));
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// FallThroughOp
void FallThroughOp::build(OpBuilder &builder, OperationState &state,
@@ -572,7 +573,7 @@ void FallThroughOp::build(OpBuilder &builder, OperationState &state,
state.addSuccessors(dest);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// RetOp
void RetOp::build(OpBuilder &builder, OperationState &state, uint64_t address)
@@ -580,9 +581,9 @@ void RetOp::build(OpBuilder &builder, OperationState &state, uint64_t address)
state.addAttribute("address", builder.getI64IntegerAttr(address));
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// TableGen'd op method definitions
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
#define GET_OP_CLASSES
#include "Dialect/PluginOps.cpp.inc"
\ No newline at end of file
diff --git a/lib/Dialect/PluginTypes.cpp b/lib/Dialect/PluginTypes.cpp
index c33d9e0..c0a58c2 100644
--- a/lib/Dialect/PluginTypes.cpp
+++ b/lib/Dialect/PluginTypes.cpp
@@ -36,16 +36,19 @@ namespace detail {
/// The hash key used for uniquing.
using KeyTy = std::pair<unsigned, PluginIntegerType::SignednessSemantics>;
- static llvm::hash_code hashKey(const KeyTy &key) {
+ static llvm::hash_code hashKey(const KeyTy &key)
+ {
return llvm::hash_value(key);
}
- bool operator==(const KeyTy &key) const {
+ bool operator==(const KeyTy &key) const
+ {
return KeyTy(width, signedness) == key;
}
static PluginIntegerTypeStorage *construct(TypeStorageAllocator &allocator,
- KeyTy key) {
+ KeyTy key)
+ {
return new (allocator.allocate<PluginIntegerTypeStorage>())
PluginIntegerTypeStorage(key.first, key.second);
}
@@ -60,12 +63,13 @@ namespace detail {
/// The hash key used for uniquing.
using KeyTy = unsigned;
- bool operator==(const KeyTy &key) const {
+ bool operator==(const KeyTy &key) const
+ {
return KeyTy(width) == key;
}
- static PluginFloatTypeStorage *construct(TypeStorageAllocator &allocator,
- KeyTy key) {
+ static PluginFloatTypeStorage *construct(TypeStorageAllocator &allocator, KeyTy key)
+ {
return new (allocator.allocate<PluginFloatTypeStorage>())
PluginFloatTypeStorage(key);
}
@@ -79,13 +83,14 @@ namespace detail {
PluginPointerTypeStorage(const KeyTy &key)
: pointee(std::get<0>(key)), readOnlyPointee(std::get<1>(key)) {}
- static PluginPointerTypeStorage *construct(TypeStorageAllocator &allocator,
- KeyTy key) {
+ static PluginPointerTypeStorage *construct(TypeStorageAllocator &allocator, KeyTy key)
+ {
return new (allocator.allocate<PluginPointerTypeStorage>())
PluginPointerTypeStorage(key);
}
- bool operator==(const KeyTy &key) const {
+ bool operator==(const KeyTy &key) const
+ {
return std::make_tuple(pointee, readOnlyPointee) == key;
}
@@ -96,9 +101,9 @@ namespace detail {
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin TypeBase
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
PluginTypeID PluginTypeBase::getPluginTypeID ()
{
@@ -117,7 +122,7 @@ PluginTypeID PluginTypeBase::getPluginTypeID ()
if (auto Ty = dyn_cast<PluginIR::PluginPointerType>()) {
return Ty.getPluginTypeID ();
}
- return PluginTypeID::UndefTyID;
+ return PluginTypeID::UndefTyID;
}
unsigned PluginTypeBase::getPluginIntOrFloatBitWidth ()
@@ -157,9 +162,9 @@ unsigned PluginTypeBase::getTypeSize ()
return size;
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin Integer Type
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
unsigned PluginIntegerType::getWidth() const
{
@@ -173,10 +178,8 @@ PluginIntegerType::SignednessSemantics PluginIntegerType::getSignedness() const
PluginTypeID PluginIntegerType::getPluginTypeID()
{
- if (isSigned())
- {
- switch (getWidth())
- {
+ if (isSigned()) {
+ switch (getWidth()) {
case 1:
return PluginTypeID::IntegerTy1ID;
case 8:
@@ -191,10 +194,8 @@ PluginTypeID PluginIntegerType::getPluginTypeID()
return PluginTypeID::UndefTyID;
}
}
- if (isUnsigned())
- {
- switch (getWidth())
- {
+ if (isUnsigned()) {
+ switch (getWidth()) {
case 1:
return PluginTypeID::UIntegerTy1ID;
case 8:
@@ -212,15 +213,15 @@ PluginTypeID PluginIntegerType::getPluginTypeID()
return PluginTypeID::UndefTyID;
}
-PluginIntegerType PluginIntegerType::get (MLIRContext *context, unsigned width, PluginIntegerType::SignednessSemantics signedness)
+PluginIntegerType PluginIntegerType::get (MLIRContext *context, unsigned width,
+ PluginIntegerType::SignednessSemantics signedness)
{
return Base::get(context, width, signedness);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin Float Type
-//===----------------------------------------------------------------------===//
-
+// ===----------------------------------------------------------------------===//
unsigned PluginFloatType::getWidth () const
{
return getImpl()->width;
@@ -228,10 +229,12 @@ unsigned PluginFloatType::getWidth () const
PluginTypeID PluginFloatType::getPluginTypeID()
{
- if (getWidth() == 32)
+ if (getWidth() == 32) {
return PluginTypeID::FloatTyID;
- if (getWidth() == 64)
+ }
+ if (getWidth() == 64) {
return PluginTypeID::DoubleTyID;
+ }
return PluginTypeID::UndefTyID;
}
@@ -240,36 +243,36 @@ PluginFloatType PluginFloatType::get (MLIRContext *context, unsigned width)
return Base::get(context, width);
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin Boolean Type
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
PluginTypeID PluginBooleanType::getPluginTypeID()
{
return PluginTypeID::BooleanTyID;
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin Void Type
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
PluginTypeID PluginVoidType::getPluginTypeID()
{
return PluginTypeID::VoidTyID;
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin Undef Type
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
PluginTypeID PluginUndefType::getPluginTypeID()
{
return PluginTypeID::UndefTyID;
}
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
// Plugin Pointer Type
-//===----------------------------------------------------------------------===//
+// ===----------------------------------------------------------------------===//
PluginTypeID PluginPointerType::getPluginTypeID()
{
diff --git a/lib/PluginAPI/ControlFlowAPI.cpp b/lib/PluginAPI/ControlFlowAPI.cpp
index b598f57..92c0dd3 100644
--- a/lib/PluginAPI/ControlFlowAPI.cpp
+++ b/lib/PluginAPI/ControlFlowAPI.cpp
@@ -15,7 +15,6 @@
*/
#include "PluginAPI/ControlFlowAPI.h"
-#include "PluginServer/PluginLog.h"
namespace PluginAPI {
using namespace PinServer;
@@ -60,20 +59,18 @@ bool ControlFlowAPI::UpdateSSA(void)
bool ControlFlowAPI::GetUpdateOperationResult(const string &funName)
{
Json::Value root;
- pluginAPI.WaitClientResult(funName, root.toStyledString());
- return PluginServer::GetInstance()->GetBoolResult();
+ return PluginServer::GetInstance()->GetBoolResult(funName, root.toStyledString());
}
vector<PhiOp> ControlFlowAPI::GetPhiOperationResult(const string &funName, const string& params)
{
- pluginAPI.WaitClientResult(funName, params);;
- vector<PhiOp> retOps = PluginServer::GetInstance()->GetPhiOpsResult();
+ vector<PhiOp> retOps = PluginServer::GetInstance()->GetPhiOpsResult(funName, params);
return retOps;
}
void ControlFlowAPI::GetDominatorSetOperationResult(const string &funName, const string& params)
{
- pluginAPI.WaitClientResult(funName, params);;
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
return;
}
@@ -97,12 +94,11 @@ uint64_t ControlFlowAPI::CreateBlock(mlir::Block* b, uint64_t funcAddr, uint64_t
root["funcaddr"] = std::to_string(funcAddr);
root["bbaddr"] = std::to_string(bbAddr);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);;
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
return PluginServer::GetInstance()->GetBlockResult(b);
}
-void ControlFlowAPI::DeleteBlock(mlir::Block* b, uint64_t funcAddr,
- uint64_t bbAddr)
+void ControlFlowAPI::DeleteBlock(mlir::Block* b, uint64_t funcAddr, uint64_t bbAddr)
{
Json::Value root;
string funName = __func__;
@@ -111,14 +107,12 @@ void ControlFlowAPI::DeleteBlock(mlir::Block* b, uint64_t funcAddr,
root["funcaddr"] = std::to_string(funcAddr);
root["bbaddr"] = std::to_string(bbAddr);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);;
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
PluginServer::GetInstance()->EraseBlock(b);
- // b->erase();
}
/* dir: 1 or 2 */
-void ControlFlowAPI::SetImmediateDominator(uint64_t dir, uint64_t bbAddr,
- uint64_t domiAddr)
+void ControlFlowAPI::SetImmediateDominator(uint64_t dir, uint64_t bbAddr, uint64_t domiAddr)
{
Json::Value root;
string funName = __func__;
@@ -128,7 +122,7 @@ void ControlFlowAPI::SetImmediateDominator(uint64_t dir, uint64_t bbAddr,
root["bbaddr"] = std::to_string(bbAddr);
root["domiaddr"] = std::to_string(domiAddr);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);;
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
/* dir: 1 or 2 */
@@ -140,8 +134,7 @@ uint64_t ControlFlowAPI::GetImmediateDominator(uint64_t dir, uint64_t bbAddr)
root["dir"] = std::to_string(dir);
root["bbaddr"] = std::to_string(bbAddr);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);;
- return PluginServer::GetInstance()->GetIdResult();
+ return PluginServer::GetInstance()->GetIdResult(funName, params);
}
/* dir: 1 or 2 */
@@ -153,8 +146,7 @@ uint64_t ControlFlowAPI::RecomputeDominator(uint64_t dir, uint64_t bbAddr)
root["dir"] = std::to_string(dir);
root["bbaddr"] = std::to_string(bbAddr);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);;
- return PluginServer::GetInstance()->GetIdResult();
+ return PluginServer::GetInstance()->GetIdResult(funName, params);
}
mlir::Value ControlFlowAPI::CreateNewDef(mlir::Value oldValue,
@@ -170,8 +162,7 @@ mlir::Value ControlFlowAPI::CreateNewDef(mlir::Value oldValue,
uint64_t defId = 0;
root["defId"] = std::to_string(defId);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
void ControlFlowAPI::CreateFallthroughOp(
@@ -182,7 +173,7 @@ void ControlFlowAPI::CreateFallthroughOp(
root["address"] = std::to_string(address);
root["destaddr"] = std::to_string(destaddr);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
void ControlFlowAPI::RemoveEdge(uint64_t src, uint64_t dest)
@@ -192,7 +183,7 @@ void ControlFlowAPI::RemoveEdge(uint64_t src, uint64_t dest)
root["src"] = std::to_string(src);
root["dest"] = std::to_string(dest);
string params = root.toStyledString();
- pluginAPI.WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
} // namespace PluginAPI
diff --git a/lib/PluginAPI/PluginServerAPI.cpp b/lib/PluginAPI/PluginServerAPI.cpp
index 5ab27d7..523e08d 100644
--- a/lib/PluginAPI/PluginServerAPI.cpp
+++ b/lib/PluginAPI/PluginServerAPI.cpp
@@ -18,24 +18,27 @@
*/
#include "PluginAPI/PluginServerAPI.h"
-#include "PluginServer/PluginLog.h"
+#include "PluginServer/PluginJson.h"
namespace PluginAPI {
using namespace PinServer;
using namespace mlir::Plugin;
-int CheckAttribute(string &attribute)
+static bool CheckAttribute(string &attribute)
{
- /* if (attribute == "") {
+ if (attribute == "NULL") {
printf("param attribute is NULL,check fail!\n");
- return -1;
- } */
- return 0;
+ return false;
+ }
+ return true;
}
-int CheckID(uintptr_t id)
+static bool CheckID(uintptr_t id)
{
- return 0;
+ if (id == 0) {
+ return false;
+ }
+ return true;
}
static uint64_t GetValueId(mlir::Value v)
@@ -52,21 +55,60 @@ static uint64_t GetValueId(mlir::Value v)
}
return 0;
}
+int64_t PluginServerAPI::GetInjectDataAddress()
+{
+ string funName = __func__;
+ string params = "";
-void PluginServerAPI::WaitClientResult(const string& funName, const string& params)
+ return PluginServer::GetInstance()->GetIntegerDataResult(funName, params);
+}
+
+string PluginServerAPI::GetDeclSourceFile(int64_t clientDataAddr)
{
- PluginServer *server = PluginServer::GetInstance();
- server->SetApiFuncName(funName);
- server->SetApiFuncParams(params);
- server->SetUserFunState(STATE_BEGIN);
- server->SemPost();
- while (1) {
- server->ClientReturnSemWait();
- if (server->GetUserFunState() == STATE_RETURN) { // wait client result
- server->SetUserFunState(STATE_WAIT_BEGIN);
- break;
- }
- }
+ string funName = __func__;
+ string params = std::to_string(clientDataAddr);
+
+ return PluginServer::GetInstance()->GetStringDataResult(funName, params);
+}
+
+string PluginServerAPI::VariableName(int64_t clientDataAddr)
+{
+ string funName = __func__;
+ string params = std::to_string(clientDataAddr);
+
+ return PluginServer::GetInstance()->GetStringDataResult(funName, params);
+}
+
+string PluginServerAPI::FuncName(int64_t clientDataAddr)
+{
+ string funName = __func__;
+ string params = std::to_string(clientDataAddr);
+
+ return PluginServer::GetInstance()->GetStringDataResult(funName, params);
+}
+
+string PluginServerAPI::GetIncludeFile()
+{
+ string funName = __func__;
+ string params = "";
+
+ return PluginServer::GetInstance()->GetStringDataResult(funName, params);
+}
+
+int PluginServerAPI::GetDeclSourceLine(int64_t clientDataAddr)
+{
+ string funName = __func__;
+ string params = std::to_string(clientDataAddr);
+
+ return PluginServer::GetInstance()->GetIntegerDataResult(funName, params);
+}
+
+int PluginServerAPI::GetDeclSourceColumn(int64_t clientDataAddr)
+{
+ string funName = __func__;
+ string params = std::to_string(clientDataAddr);
+
+ return PluginServer::GetInstance()->GetIntegerDataResult(funName, params);
}
bool PluginServerAPI::SetCurrentDefInSSA(uint64_t varId, uint64_t defId)
@@ -76,8 +118,7 @@ bool PluginServerAPI::SetCurrentDefInSSA(uint64_t varId, uint64_t defId)
root["varId"] = std::to_string(varId);
root["defId"] = std::to_string(defId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetBoolResult();
+ return PluginServer::GetInstance()->GetBoolResult(funName, params);
}
mlir::Value PluginServerAPI::GetCurrentDefFromSSA(uint64_t varId)
@@ -86,8 +127,7 @@ mlir::Value PluginServerAPI::GetCurrentDefFromSSA(uint64_t varId)
string funName = __func__;
root["varId"] = std::to_string(varId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
mlir::Value PluginServerAPI::CopySSAOp(uint64_t id)
@@ -96,8 +136,7 @@ mlir::Value PluginServerAPI::CopySSAOp(uint64_t id)
string funName = __func__;
root["id"] = std::to_string(id);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
mlir::Value PluginServerAPI::CreateSSAOp(mlir::Type t)
@@ -105,17 +144,10 @@ mlir::Value PluginServerAPI::CreateSSAOp(mlir::Type t)
Json::Value root;
string funName = __func__;
auto baseTy = t.dyn_cast<PluginIR::PluginTypeBase>();
- root = PluginServer::GetInstance()->TypeJsonSerialize(baseTy);
+ PinJson::PluginJson json;
+ root = json.TypeJsonSerialize(baseTy);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
-}
-
-vector<FunctionOp> PluginServerAPI::GetFunctionOpResult(const string& funName, const string& params)
-{
- WaitClientResult(funName, params);
- vector<FunctionOp> retOps = PluginServer::GetInstance()->GetFunctionOpResult();
- return retOps;
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
vector<FunctionOp> PluginServerAPI::GetAllFunc()
@@ -124,7 +156,7 @@ vector<FunctionOp> PluginServerAPI::GetAllFunc()
string funName = __func__;
string params = root.toStyledString();
- return GetFunctionOpResult(funName, params);
+ return PluginServer::GetInstance()->GetFunctionOpResult(funName, params);
}
PhiOp PluginServerAPI::GetPhiOp(uint64_t id)
@@ -133,8 +165,7 @@ PhiOp PluginServerAPI::GetPhiOp(uint64_t id)
string funName = __func__;
root["id"] = std::to_string(id);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- vector<mlir::Operation*> opRet = PluginServer::GetInstance()->GetOpResult();
+ vector<mlir::Operation*> opRet = PluginServer::GetInstance()->GetOpResult(funName, params);
return llvm::dyn_cast<PhiOp>(opRet[0]);
}
@@ -144,8 +175,7 @@ CallOp PluginServerAPI::GetCallOp(uint64_t id)
string funName = __func__;
root["id"] = std::to_string(id);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- vector<mlir::Operation*> opRet = PluginServer::GetInstance()->GetOpResult();
+ vector<mlir::Operation*> opRet = PluginServer::GetInstance()->GetOpResult(funName, params);
return llvm::dyn_cast<CallOp>(opRet[0]);
}
@@ -156,14 +186,10 @@ bool PluginServerAPI::SetLhsInCallOp(uint64_t callId, uint64_t lhsId)
root["callId"] = std::to_string(callId);
root["lhsId"] = std::to_string(lhsId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetBoolResult();
+ return PluginServer::GetInstance()->GetBoolResult(funName, params);
}
-uint32_t PluginServerAPI::AddArgInPhiOp(uint64_t phiId,
- uint64_t argId,
- uint64_t predId,
- uint64_t succId)
+uint32_t PluginServerAPI::AddArgInPhiOp(uint64_t phiId, uint64_t argId, uint64_t predId, uint64_t succId)
{
Json::Value root;
string funName = __func__;
@@ -172,8 +198,7 @@ uint32_t PluginServerAPI::AddArgInPhiOp(uint64_t phiId,
root["predId"] = std::to_string(predId);
root["succId"] = std::to_string(succId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetIdResult();
+ return PluginServer::GetInstance()->GetIdResult(funName, params);
}
uint64_t PluginServerAPI::CreateCondOp(uint64_t blockId, IComparisonCode iCode,
@@ -189,8 +214,7 @@ uint64_t PluginServerAPI::CreateCondOp(uint64_t blockId, IComparisonCode iCode,
root["tbaddr"] = std::to_string(tbaddr);
root["fbaddr"] = std::to_string(fbaddr);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetIdResult();
+ return PluginServer::GetInstance()->GetIdResult(funName, params);
}
uint64_t PluginServerAPI::CreateAssignOp(uint64_t blockId, IExprCode iCode, vector<uint64_t> &argIds)
@@ -207,8 +231,7 @@ uint64_t PluginServerAPI::CreateAssignOp(uint64_t blockId, IExprCode iCode, vect
}
root["argIds"] = item;
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetIdResult();
+ return PluginServer::GetInstance()->GetIdResult(funName, params);
}
uint64_t PluginServerAPI::CreateCallOp(uint64_t blockId, uint64_t funcId,
@@ -226,8 +249,7 @@ uint64_t PluginServerAPI::CreateCallOp(uint64_t blockId, uint64_t funcId,
}
root["argIds"] = item;
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetIdResult();
+ return PluginServer::GetInstance()->GetIdResult(funName, params);
}
mlir::Value PluginServerAPI::CreateConstOp(mlir::Attribute attr, mlir::Type type)
@@ -235,15 +257,15 @@ mlir::Value PluginServerAPI::CreateConstOp(mlir::Attribute attr, mlir::Type type
Json::Value root;
string funName = __func__;
auto baseTy = type.dyn_cast<PluginIR::PluginTypeBase>();
- root = PluginServer::GetInstance()->TypeJsonSerialize(baseTy);
+ PinJson::PluginJson json;
+ root = json.TypeJsonSerialize(baseTy);
string valueStr;
if (type.isa<PluginIR::PluginIntegerType>()) {
valueStr = std::to_string(attr.cast<mlir::IntegerAttr>().getInt());
}
root["value"] = valueStr;
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
mlir::Value PluginServerAPI::GetResultFromPhi(uint64_t phiId)
@@ -252,8 +274,7 @@ mlir::Value PluginServerAPI::GetResultFromPhi(uint64_t phiId)
string funName = __func__;
root["id"] = std::to_string(phiId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
PhiOp PluginServerAPI::CreatePhiOp(uint64_t argId, uint64_t blockId)
@@ -263,8 +284,7 @@ PhiOp PluginServerAPI::CreatePhiOp(uint64_t argId, uint64_t blockId)
root["blockId"] = std::to_string(blockId);
root["argId"] = std::to_string(argId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- vector<mlir::Operation*> opRet = PluginServer::GetInstance()->GetOpResult();
+ vector<mlir::Operation*> opRet = PluginServer::GetInstance()->GetOpResult(funName, params);
return llvm::dyn_cast<PhiOp>(opRet[0]);
}
@@ -275,8 +295,7 @@ mlir::Value PluginServerAPI::ConfirmValue(mlir::Value v)
uint64_t valId = GetValueId(v);
root["valId"] = std::to_string(valId);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
mlir::Value PluginServerAPI::BuildMemRef(PluginIR::PluginTypeBase type,
@@ -288,55 +307,47 @@ mlir::Value PluginServerAPI::BuildMemRef(PluginIR::PluginTypeBase type,
uint64_t offsetId = GetValueId(offset);
root["baseId"] = baseId;
root["offsetId"] = offsetId;
- root["type"] = PluginServer::GetInstance()->TypeJsonSerialize(type);
+ PinJson::PluginJson json;
+ root["type"] = json.TypeJsonSerialize(type);
string params = root.toStyledString();
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetValueResult();
+ return PluginServer::GetInstance()->GetValueResult(funName, params);
}
PluginIR::PluginTypeID PluginServerAPI::GetTypeCodeFromString(string type)
{
if (type == "VoidTy") {
return PluginIR::PluginTypeID::VoidTyID;
- }else if (type == "UIntegerTy1") {
+ } else if (type == "UIntegerTy1") {
return PluginIR::PluginTypeID::UIntegerTy1ID;
- }else if (type == "UIntegerTy8") {
+ } else if (type == "UIntegerTy8") {
return PluginIR::PluginTypeID::UIntegerTy8ID;
- }else if (type == "UIntegerTy16") {
+ } else if (type == "UIntegerTy16") {
return PluginIR::PluginTypeID::UIntegerTy16ID;
- }else if (type == "UIntegerTy32") {
+ } else if (type == "UIntegerTy32") {
return PluginIR::PluginTypeID::UIntegerTy32ID;
- }else if (type == "UIntegerTy64") {
+ } else if (type == "UIntegerTy64") {
return PluginIR::PluginTypeID::UIntegerTy64ID;
- }else if (type == "IntegerTy1") {
+ } else if (type == "IntegerTy1") {
return PluginIR::PluginTypeID::IntegerTy1ID;
- }else if (type == "IntegerTy8") {
+ } else if (type == "IntegerTy8") {
return PluginIR::PluginTypeID::IntegerTy8ID;
- }else if (type == "IntegerTy16") {
+ } else if (type == "IntegerTy16") {
return PluginIR::PluginTypeID::IntegerTy16ID;
- }else if (type == "IntegerTy32") {
+ } else if (type == "IntegerTy32") {
return PluginIR::PluginTypeID::IntegerTy32ID;
- }else if (type == "IntegerTy64") {
+ } else if (type == "IntegerTy64") {
return PluginIR::PluginTypeID::IntegerTy64ID;
- }else if (type == "BooleanTy") {
+ } else if (type == "BooleanTy") {
return PluginIR::PluginTypeID::BooleanTyID;
- }else if (type == "FloatTy") {
+ } else if (type == "FloatTy") {
return PluginIR::PluginTypeID::FloatTyID;
- }else if (type == "DoubleTy") {
+ } else if (type == "DoubleTy") {
return PluginIR::PluginTypeID::DoubleTyID;
}
return PluginIR::PluginTypeID::UndefTyID;
}
-vector<LocalDeclOp> PluginServerAPI::GetDeclOperationResult(const string&funName,
- const string& params)
-{
- WaitClientResult(funName, params);
- vector<LocalDeclOp> retDecls = PluginServer::GetInstance()->GetLocalDeclResult();
- return retDecls;
-}
-
vector<LocalDeclOp> PluginServerAPI::GetDecls(uint64_t funcID)
{
Json::Value root;
@@ -344,48 +355,12 @@ vector<LocalDeclOp> PluginServerAPI::GetDecls(uint64_t funcID)
root["funcId"] = std::to_string(funcID);
string params = root.toStyledString();
- return GetDeclOperationResult(funName, params);
-}
-
-vector<LoopOp> PluginServerAPI::GetLoopsResult(const string& funName,
- const string& params)
-{
- WaitClientResult(funName, params);
- vector<LoopOp> loops = PluginServer::GetInstance()->LoopOpsResult();
- return loops;
-}
-
-LoopOp PluginServerAPI::GetLoopResult(const string& funName, const string& params)
-{
- WaitClientResult(funName, params);
- LoopOp loop = PluginServer::GetInstance()->LoopOpResult();
- return loop;
-}
-
-bool PluginServerAPI::GetBoolResult(const string& funName, const string& params)
-{
- WaitClientResult(funName, params);
- return PluginServer::GetInstance()->GetBoolResult();
-}
-
-pair<mlir::Block*, mlir::Block*> PluginServerAPI::EdgeResult(const string& funName, const string& params)
-{
- WaitClientResult(funName, params);
- pair<mlir::Block*, mlir::Block*> e = PluginServer::GetInstance()->EdgeResult();
- return e;
-}
-
-vector<pair<mlir::Block*, mlir::Block*> > PluginServerAPI::EdgesResult(const string& funName, const string& params)
-{
- WaitClientResult(funName, params);
- vector<pair<mlir::Block*, mlir::Block*> > retEdges = PluginServer::GetInstance()->EdgesResult();
- return retEdges;
+ return PluginServer::GetInstance()->GetLocalDeclResult(funName, params);
}
mlir::Block* PluginServerAPI::BlockResult(const string& funName, const string& params)
{
- WaitClientResult(funName, params);
- uint64_t blockId = PluginServer::GetInstance()->GetIdResult();
+ uint64_t blockId = PluginServer::GetInstance()->GetIdResult(funName, params);
return PluginServer::GetInstance()->FindBlock(blockId);
}
@@ -393,9 +368,8 @@ vector<mlir::Block*> PluginServerAPI::BlocksResult(const string& funName, const
{
vector<mlir::Block*> res;
PluginServer *server = PluginServer::GetInstance();
- WaitClientResult(funName, params);
- vector<uint64_t> blockIds = server->GetIdsResult();
- for(auto b : blockIds) {
+ vector<uint64_t> blockIds = server->GetIdsResult(funName, params);
+ for (auto b : blockIds) {
res.push_back(server->FindBlock(b));
}
return res;
@@ -408,7 +382,7 @@ vector<LoopOp> PluginServerAPI::GetLoopsFromFunc(uint64_t funcID)
root["funcId"] = std::to_string(funcID);
string params = root.toStyledString();
- return GetLoopsResult(funName, params);
+ return PluginServer::GetInstance()->LoopOpsResult(funName, params);
}
bool PluginServerAPI::IsDomInfoAvailable()
@@ -421,8 +395,7 @@ bool PluginServerAPI::IsDomInfoAvailable()
bool PluginServerAPI::GetDomInfoAvaiResult(const string& funName)
{
Json::Value root;
- WaitClientResult(funName, root.toStyledString());
- return PluginServer::GetInstance()->GetBoolResult();
+ return PluginServer::GetInstance()->GetBoolResult(funName, root.toStyledString());
}
LoopOp PluginServerAPI::AllocateNewLoop(uint64_t funcID)
@@ -432,7 +405,7 @@ LoopOp PluginServerAPI::AllocateNewLoop(uint64_t funcID)
root["funcId"] = std::to_string(funcID);
string params = root.toStyledString();
- return GetLoopResult(funName, params);
+ return PluginServer::GetInstance()->LoopOpResult(funName, params);
}
LoopOp PluginServerAPI::GetLoopById(uint64_t loopID)
@@ -442,7 +415,7 @@ LoopOp PluginServerAPI::GetLoopById(uint64_t loopID)
root["loopId"] = std::to_string(loopID);
string params = root.toStyledString();
- return GetLoopResult(funName, params);
+ return PluginServer::GetInstance()->LoopOpResult(funName, params);
}
void PluginServerAPI::DeleteLoop(uint64_t loopID)
@@ -451,7 +424,7 @@ void PluginServerAPI::DeleteLoop(uint64_t loopID)
string funName("DeleteLoop");
root["loopId"] = std::to_string(loopID);
string params = root.toStyledString();
- WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
void PluginServerAPI::AddLoop(uint64_t loopID, uint64_t outerID, uint64_t funcID)
@@ -462,7 +435,7 @@ void PluginServerAPI::AddLoop(uint64_t loopID, uint64_t outerID, uint64_t funcID
root["outerId"] = outerID;
root["funcId"] = funcID;
string params = root.toStyledString();
- WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
void PluginServerAPI::AddBlockToLoop(uint64_t blockID, uint64_t loopID)
@@ -472,7 +445,7 @@ void PluginServerAPI::AddBlockToLoop(uint64_t blockID, uint64_t loopID)
root["blockId"] = blockID;
root["loopId"] = loopID;
string params = root.toStyledString();
- WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
bool PluginServerAPI::IsBlockInLoop(uint64_t loopID, uint64_t blockID)
@@ -483,7 +456,7 @@ bool PluginServerAPI::IsBlockInLoop(uint64_t loopID, uint64_t blockID)
root["blockId"] = std::to_string(blockID);
string params = root.toStyledString();
- return GetBoolResult(funName, params);
+ return PluginServer::GetInstance()->GetBoolResult(funName, params);
}
mlir::Block* PluginServerAPI::GetHeader(uint64_t loopID)
@@ -513,8 +486,7 @@ void PluginServerAPI::SetHeader(uint64_t loopID, uint64_t blockID)
root["loopId"] = std::to_string(loopID);
root["blockId"] = std::to_string(blockID);
string params = root.toStyledString();
-
- WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
void PluginServerAPI::SetLatch(uint64_t loopID, uint64_t blockID)
@@ -524,8 +496,7 @@ void PluginServerAPI::SetLatch(uint64_t loopID, uint64_t blockID)
root["loopId"] = std::to_string(loopID);
root["blockId"] = std::to_string(blockID);
string params = root.toStyledString();
-
- WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
pair<mlir::Block*, mlir::Block*> PluginServerAPI::LoopSingleExit(uint64_t loopID)
@@ -534,8 +505,7 @@ pair<mlir::Block*, mlir::Block*> PluginServerAPI::LoopSingleExit(uint64_t loopID
string funName("GetLoopSingleExit");
root["loopId"] = std::to_string(loopID);
string params = root.toStyledString();
-
- return EdgeResult(funName, params);
+ return PluginServer::GetInstance()->EdgeResult(funName, params);
}
vector<pair<mlir::Block*, mlir::Block*> > PluginServerAPI::GetLoopExitEdges(uint64_t loopID)
@@ -544,8 +514,7 @@ vector<pair<mlir::Block*, mlir::Block*> > PluginServerAPI::GetLoopExitEdges(uint
string funName("GetLoopExits");
root["loopId"] = std::to_string(loopID);
string params = root.toStyledString();
-
- return EdgesResult(funName, params);
+ return PluginServer::GetInstance()->EdgesResult(funName, params);
}
vector<mlir::Block*> PluginServerAPI::GetLoopBody(uint64_t loopID)
@@ -554,7 +523,6 @@ vector<mlir::Block*> PluginServerAPI::GetLoopBody(uint64_t loopID)
string funName("GetBlocksInLoop");
root["loopId"] = std::to_string(loopID);
string params = root.toStyledString();
-
return BlocksResult(funName, params);
}
@@ -564,8 +532,7 @@ LoopOp PluginServerAPI::GetBlockLoopFather(uint64_t blockID)
string funName("GetBlockLoopFather");
root["blockId"] = std::to_string(blockID);
string params = root.toStyledString();
-
- return GetLoopResult(funName, params);
+ return PluginServer::GetInstance()->LoopOpResult(funName, params);
}
mlir::Block* PluginServerAPI::FindBlock(uint64_t b)
@@ -594,8 +561,8 @@ bool PluginServerAPI::RedirectFallthroughTarget(FallThroughOp& fop,
root["src"] = src;
root["dest"] = dest;
string params = root.toStyledString();
- WaitClientResult(funName, params);
- //update server
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
+ // update server
PluginServer *server = PluginServer::GetInstance();
fop->setSuccessor(server->FindBlock(dest), 0);
return true;
@@ -617,7 +584,7 @@ void PluginServerAPI::DebugValue(uint64_t valId)
string funName = __func__;
root["valId"] = valId;
string params = root.toStyledString();
- WaitClientResult(funName, params);
+ PluginServer::GetInstance()->RemoteCallClientWithAPI(funName, params);
}
} // namespace Plugin_IR
--
2.33.0
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。