diff --git a/imperative/src/impl/ops/broadcast.cpp b/imperative/src/impl/ops/broadcast.cpp index ba9100fb26f5745a6b580e08ba64eed5fa8295d1..db3a1506e22c75ba30da7136615cc0e14664a8c3 100644 --- a/imperative/src/impl/ops/broadcast.cpp +++ b/imperative/src/impl/ops/broadcast.cpp @@ -125,6 +125,11 @@ OP_TRAIT_REG(Broadcast, Broadcast, opr::Broadcast) namespace reshape { +auto make_from_op_node(const cg::OperatorNodeBase* node) { + auto& opr = node->cast_final_safe(); + return Reshape::make(opr.param(), std::vector()); +} + auto apply_on_var_node(const OpDef& def, const VarNodeArray& inputs) { auto&& op = static_cast(def); mgb_assert(inputs.size() == 2); @@ -261,6 +266,7 @@ OP_TRAIT_REG(Reshape, Reshape) .infer_output_attrs_fallible(infer_output_attrs_fallible) .apply_on_physical_tensor(apply_on_physical_tensor) .get_input_layout_constraint(get_input_layout_constraint) + .make_from_op_node(make_from_op_node) .fallback(); } // namespace reshape diff --git a/imperative/src/impl/ops/tensor_manip.cpp b/imperative/src/impl/ops/tensor_manip.cpp index 4033563897e09ae625939201d0de61def5330131..00eca1e76a295de932bca8c17b31533dd24c5bec 100644 --- a/imperative/src/impl/ops/tensor_manip.cpp +++ b/imperative/src/impl/ops/tensor_manip.cpp @@ -87,7 +87,7 @@ HostTensorND get_var_shape_host_tensor( const OpDef& def, const SmallVector& inputs) { SmallVector input_tensornds; for (auto&& inp : inputs) { - input_tensornds.push_back(inp->dev_tensor()); + input_tensornds.push_back(inp->dev_tensor(false)); } SmallVector output_tensornds = { {CompNode::default_cpu(), dtype::Int32()}}; @@ -100,7 +100,7 @@ HostTensorND get_var_shape_host_tensor( SmallVector apply_on_physical_tensor( const OpDef& def, const SmallVector& inputs, SmallVector& output_descs, const bool& validated) { - return {Tensor::make(std::move(get_var_shape_host_tensor(def, inputs)))}; + return {Tensor::make(get_var_shape_host_tensor(def, inputs))}; } std::tuple, bool> infer_output_attrs_fallible(