value.cc 3.2 KB
Newer Older
Y
Yan Chunwei 已提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
// Copyright (c) 2021 PaddlePaddle Authors. 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.

#include "paddle/infrt/host_context/value.h"

#include "paddle/infrt/tensor/dense_tensor_view.h"

namespace infrt {
namespace host_context {

ValueRef::ValueRef(int32_t val) : Shared<Value>(new Value(val)) {}
ValueRef::ValueRef(int64_t val) : Shared<Value>(new Value(val)) {}
ValueRef::ValueRef(float val) : Shared<Value>(new Value(val)) {}
ValueRef::ValueRef(double val) : Shared<Value>(new Value(val)) {}
ValueRef::ValueRef(bool val) : Shared<Value>(new Value(val)) {}

const char* Value::type_info() const { return __type_info__; }

void CopyTo(const Value& from, Value* to) {
  CHECK(from.valid()) << "from value is not valid, can't be copied";
  CHECK(to) << "to is not valid";
  visit(
      [&](auto&& arg) {
        using T = std::decay_t<decltype(arg)>;
        if (std::is_same<T, int16_t>::value)
37
          to->data = reinterpret_cast<int16_t const&>(arg);
Y
Yan Chunwei 已提交
38
        else if (std::is_same<T, int32_t>::value)
39
          to->data = reinterpret_cast<int32_t const&>(arg);
Y
Yan Chunwei 已提交
40
        else if (std::is_same<T, float>::value)
41
          to->data = reinterpret_cast<float const&>(arg);
Y
Yan Chunwei 已提交
42
        else if (std::is_same<T, double>::value)
43
          to->data = reinterpret_cast<double const&>(arg);
Y
Yan Chunwei 已提交
44
        else if (std::is_same<T, uint32_t>::value)
45
          to->data = reinterpret_cast<uint32_t const&>(arg);
Y
Yan Chunwei 已提交
46
        else if (std::is_same<T, uint64_t>::value)
47
          to->data = reinterpret_cast<uint64_t const&>(arg);
Y
Yan Chunwei 已提交
48
        else if (std::is_same<T, bool>::value)
49
          to->data = reinterpret_cast<bool const&>(arg);
Y
Yan Chunwei 已提交
50
        else if (std::is_same<T, tensor::TensorShape>::value)
51
          to->data = reinterpret_cast<tensor::TensorShape const&>(arg);
Y
Yan Chunwei 已提交
52
        else if (std::is_same<T, MlirFunctionExecutable*>::value)
53
          to->data = reinterpret_cast<MlirFunctionExecutable* const&>(arg);
Y
Yan Chunwei 已提交
54
        else if (std::is_same<T, tensor::DenseHostTensor>::value)
55
          to->data = reinterpret_cast<tensor::DenseHostTensor const&>(arg);
Y
Yan Chunwei 已提交
56
        else if (std::is_same<T, std::vector<int16_t>>::value)
57
          to->data = reinterpret_cast<std::vector<int16_t> const&>(arg);
Y
Yan Chunwei 已提交
58
        else if (std::is_same<T, std::vector<int64_t>>::value)
59
          to->data = reinterpret_cast<std::vector<int64_t> const&>(arg);
Y
Yan Chunwei 已提交
60
        else if (std::is_same<T, tensor::TensorMap>::value)
61
          to->data = reinterpret_cast<tensor::TensorMap const&>(arg);
62 63 64 65
#ifdef INFRT_WITH_PHI
        else if (std::is_same<T, ::phi::DenseTensor>::value)
          to->data = reinterpret_cast<::phi::DenseTensor const&>(arg);
#endif
Y
Yan Chunwei 已提交
66 67 68 69 70 71 72 73
        else
          LOG(FATAL) << "Not supported Value copy: " << typeid(T).name();
      },
      from.data);
}

}  // namespace host_context
}  // namespace infrt