value.cc 3.4 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
// 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)) {}
27
ValueRef::ValueRef(backends::CpuPhiContext&& val)
28
    : Shared<Value>(new Value(std::move(val))) {}
29
ValueRef::ValueRef(::phi::CPUContext&& val)
30
    : Shared<Value>(new Value(std::move(val))) {}
31
ValueRef::ValueRef(::phi::DenseTensor&& val)
32
    : Shared<Value>(new Value(std::move(val))) {}
33
ValueRef::ValueRef(::phi::MetaTensor&& val)
34
    : Shared<Value>(new Value(std::move(val))) {}
Y
Yan Chunwei 已提交
35 36 37 38 39 40 41 42 43 44

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)
45
          to->data = reinterpret_cast<int16_t const&>(arg);
Y
Yan Chunwei 已提交
46
        else if (std::is_same<T, int32_t>::value)
47
          to->data = reinterpret_cast<int32_t const&>(arg);
Y
Yan Chunwei 已提交
48
        else if (std::is_same<T, float>::value)
49
          to->data = reinterpret_cast<float const&>(arg);
Y
Yan Chunwei 已提交
50
        else if (std::is_same<T, double>::value)
51
          to->data = reinterpret_cast<double const&>(arg);
Y
Yan Chunwei 已提交
52
        else if (std::is_same<T, uint32_t>::value)
53
          to->data = reinterpret_cast<uint32_t const&>(arg);
Y
Yan Chunwei 已提交
54
        else if (std::is_same<T, uint64_t>::value)
55
          to->data = reinterpret_cast<uint64_t const&>(arg);
Y
Yan Chunwei 已提交
56
        else if (std::is_same<T, bool>::value)
57
          to->data = reinterpret_cast<bool const&>(arg);
Y
Yan Chunwei 已提交
58
        else if (std::is_same<T, tensor::TensorShape>::value)
59
          to->data = reinterpret_cast<tensor::TensorShape const&>(arg);
Y
Yan Chunwei 已提交
60
        else if (std::is_same<T, MlirFunctionExecutable*>::value)
61
          to->data = reinterpret_cast<MlirFunctionExecutable* const&>(arg);
Y
Yan Chunwei 已提交
62
        else if (std::is_same<T, tensor::DenseHostTensor>::value)
63
          to->data = reinterpret_cast<tensor::DenseHostTensor const&>(arg);
Y
Yan Chunwei 已提交
64
        else if (std::is_same<T, std::vector<int16_t>>::value)
65
          to->data = reinterpret_cast<std::vector<int16_t> const&>(arg);
Y
Yan Chunwei 已提交
66
        else if (std::is_same<T, std::vector<int64_t>>::value)
67
          to->data = reinterpret_cast<std::vector<int64_t> const&>(arg);
Y
Yan Chunwei 已提交
68
        else if (std::is_same<T, tensor::TensorMap>::value)
69
          to->data = reinterpret_cast<tensor::TensorMap const&>(arg);
Y
Yan Chunwei 已提交
70 71 72 73 74 75 76 77
        else
          LOG(FATAL) << "Not supported Value copy: " << typeid(T).name();
      },
      from.data);
}

}  // namespace host_context
}  // namespace infrt