mirror of
https://github.com/zebrajr/pytorch.git
synced 2025-12-07 12:21:27 +01:00
Summary: Pull Request resolved: https://github.com/pytorch/pytorch/pull/35241 Test Plan: Imported from OSS Differential Revision: D20609439 Pulled By: iseeyuan fbshipit-source-id: 4f352b8641c203aaf9f2204e4080876bd4d47b0c
89 lines
1.9 KiB
C++
89 lines
1.9 KiB
C++
#include <torch/csrc/jit/runtime/instruction.h>
|
|
#include <iostream>
|
|
#include <cstring>
|
|
|
|
namespace torch {
|
|
namespace jit {
|
|
std::ostream& operator<<(std::ostream& out, OpCode op) {
|
|
switch (op) {
|
|
#define OP_STRING(x, _) \
|
|
case x: \
|
|
return out << #x;
|
|
FORALL_OPCODES(OP_STRING)
|
|
#undef OP_STRING
|
|
}
|
|
return out;
|
|
}
|
|
|
|
char const * toString(OpCode op) {
|
|
switch (op) {
|
|
#define OP_STRING(x, _) \
|
|
case x: \
|
|
return #x;
|
|
FORALL_OPCODES(OP_STRING)
|
|
#undef OP_STRING
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
const char* OpInfo(OpCode op) {
|
|
switch (op) {
|
|
#define OP_INFO(x, info) \
|
|
case x: \
|
|
return info;
|
|
FORALL_OPCODES(OP_INFO)
|
|
#undef OP_INFO
|
|
}
|
|
return nullptr;
|
|
}
|
|
|
|
static constexpr size_t instruction_size = 8;
|
|
static_assert(sizeof(Instruction) == instruction_size, "Instructions should be 8 bytes");
|
|
std::ostream& operator<<(std::ostream& out, Instruction inst) {
|
|
// TODO: use op info to print out the op in a more user-friendly way
|
|
int nargs = std::strlen(OpInfo(inst.op));
|
|
out << inst.op;
|
|
if (nargs > 0) {
|
|
out << " " << inst.X;
|
|
}
|
|
if (nargs > 1) {
|
|
out << " " << inst.N;
|
|
}
|
|
return out;
|
|
}
|
|
|
|
static constexpr char *strOpCode[] = {
|
|
#define STR_OP(x, _) #x,
|
|
FORALL_OPCODES(STR_OP)
|
|
#undef STR_OP
|
|
};
|
|
|
|
OpCode parseOpCode(const char *str) {
|
|
const int n = sizeof(strOpCode) / sizeof(strOpCode[0]);
|
|
for (int i = 0; i < n; ++i)
|
|
{
|
|
if (strcmp(strOpCode[i], str) == 0)
|
|
return (OpCode) i;
|
|
}
|
|
return OP;
|
|
}
|
|
|
|
bool isOpSupportedInMobile(OpCode op) {
|
|
// clang-format off
|
|
static constexpr OpCode supported_ops_in_mobile[] {
|
|
OP, OPN, LOAD, MOVE, STOREN, STORE, DROP, DROPR, LOADC, JF, JMP, LOOP,
|
|
RET, GET_ATTR, SET_ATTR, LIST_CONSTRUCT, TUPLE_CONSTRUCT, WARN,
|
|
INTERFACE_CALL, LIST_UNPACK, TUPLE_SLICE
|
|
};
|
|
// clang-format on
|
|
|
|
for (auto sop : supported_ops_in_mobile) {
|
|
if (op == sop)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|
|
}
|