mirror of
https://github.com/pytorch/pytorch.git
synced 2025-10-20 21:14:14 +08:00
This PR fixes more missing-prototypes violations in the torch_cpu source following PRs #100053, #100147 and #100245 Pull Request resolved: https://github.com/pytorch/pytorch/pull/100849 Approved by: https://github.com/albanD
98 lines
2.4 KiB
C++
98 lines
2.4 KiB
C++
#include <c10/util/irange.h>
|
|
#include <torch/csrc/jit/runtime/instruction.h>
|
|
#include <cstring>
|
|
#include <iostream>
|
|
|
|
namespace torch {
|
|
namespace jit {
|
|
static 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;
|
|
}
|
|
|
|
static const char* OpInfo(OpCode op) {
|
|
switch (op) {
|
|
#define OP_INFO(x, info) \
|
|
case x: \
|
|
return info;
|
|
// NOLINTNEXTLINE(bugprone-branch-clone)
|
|
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;
|
|
}
|
|
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
|
|
static constexpr const 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 (const auto i : c10::irange(n)) {
|
|
if (strcmp(strOpCode[i], str) == 0)
|
|
return (OpCode)i;
|
|
}
|
|
return OP;
|
|
}
|
|
|
|
bool isOpSupportedInMobile(OpCode op) {
|
|
// clang-format off
|
|
// NOLINTNEXTLINE(cppcoreguidelines-avoid-c-arrays,modernize-avoid-c-arrays)
|
|
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, DICT_CONSTRUCT,
|
|
NAMED_TUPLE_CONSTRUCT, CREATE_OBJECT, ISINSTANCE, CALL,
|
|
RAISE_EXCEPTION, UNCHECKED_CAST, __IS__, UN_INITIALIZED,
|
|
__ISNOT__, FORMAT, DEVICE, DICT_INDEX,
|
|
DTYPE, TUPLE_INDEX, DIM, __NOT__,
|
|
TO_LIST, NUM_TO_TENSOR, IS_CUDA};
|
|
// clang-format on
|
|
|
|
for (auto sop : supported_ops_in_mobile) {
|
|
if (op == sop)
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
} // namespace jit
|
|
} // namespace torch
|