diff --git a/tools/pnnx/src/pass_level1.cpp b/tools/pnnx/src/pass_level1.cpp index 1b1d971d5..c47ce0934 100644 --- a/tools/pnnx/src/pass_level1.cpp +++ b/tools/pnnx/src/pass_level1.cpp @@ -132,6 +132,8 @@ void pass_level1(const torch::jit::Module& mod, const std::shared_ptrattrs["data"] = sub_mod.attr(name).toTensor(); + op->outputs[0]->type = op->attrs["data"].type; + op->outputs[0]->shape = op->attrs["data"].shape; } } else if (n->kind() == c10::prim::Constant) // || n->kind() == c10::prim::ListConstruct) diff --git a/tools/pnnx/src/pass_level3/fuse_expression.cpp b/tools/pnnx/src/pass_level3/fuse_expression.cpp index 7009b9f8a..d8fe46111 100644 --- a/tools/pnnx/src/pass_level3/fuse_expression.cpp +++ b/tools/pnnx/src/pass_level3/fuse_expression.cpp @@ -251,6 +251,9 @@ static void fuse_expression(Graph& graph, Operand* operand, std::string& expr, s int64_t v; zip.read_file(operand->name, (char*)&v); + if (v == std::numeric_limits::max()) v = INT_MAX; + if (v == std::numeric_limits::min()) v = INT_MIN; + char tmp[32]; sprintf(tmp, "%ld", v); expr += tmp; diff --git a/tools/pnnx/src/pass_level5/eliminate_reshape_shape_expression.cpp b/tools/pnnx/src/pass_level5/eliminate_reshape_shape_expression.cpp index e51fa240f..662f69685 100644 --- a/tools/pnnx/src/pass_level5/eliminate_reshape_shape_expression.cpp +++ b/tools/pnnx/src/pass_level5/eliminate_reshape_shape_expression.cpp @@ -165,7 +165,10 @@ void eliminate_reshape_shape_expression(Graph& graph) if (op_expr->outputs[0]->consumers.size() == 0) { // remove expression operator - op_expr->inputs[0]->remove_consumer(op_expr); + for (auto x : op_expr->inputs) + { + x->remove_consumer(op_expr); + } Operand* op_expr_out = op_expr->outputs[0]; diff --git a/tools/pnnx/src/pass_level5/eval_expression.cpp b/tools/pnnx/src/pass_level5/eval_expression.cpp index f091da8a7..24d38a577 100644 --- a/tools/pnnx/src/pass_level5/eval_expression.cpp +++ b/tools/pnnx/src/pass_level5/eval_expression.cpp @@ -193,6 +193,11 @@ static std::string eval_expression(const Operator* op) if (t == "int") { int r = int(af); + if (token_is_interger_literal(a)) + { + r = std::stoi(a); + } + exprstack.push(std::to_string(r)); } if (t == "abs")