1/*
2 * Licensed to the Apache Software Foundation (ASF) under one
3 * or more contributor license agreements. See the NOTICE file
4 * distributed with this work for additional information
5 * regarding copyright ownership. The ASF licenses this file
6 * to you under the Apache License, Version 2.0 (the
7 * "License"); you may not use this file except in compliance
8 * with the License. You may obtain a copy of the License at
9 *
10 * http://www.apache.org/licenses/LICENSE-2.0
11 *
12 * Unless required by applicable law or agreed to in writing,
13 * software distributed under the License is distributed on an
14 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15 * KIND, either express or implied. See the License for the
16 * specific language governing permissions and limitations
17 * under the License.
18 */
19/*!
20 * \file tir/ir/buffer_common.h
21 * \brief Common utils for buffer access
22 */
23#ifndef TVM_TIR_IR_BUFFER_COMMON_H_
24#define TVM_TIR_IR_BUFFER_COMMON_H_
25
26#include <tvm/ir/type.h>
27#include <tvm/runtime/data_type.h>
28
29#include <optional>
30
31namespace tvm {
32namespace tir {
33
34/*!
35 * \brief Returns the type of object pointed to.
36 *
37 * \param type The type to be checked.
38 *
39 * \return An std::optional<DataType> object. If the type is a pointer
40 * to a primitive type, the object has a value which is the pointed-to
41 * type. Otherwise the object is nullopt.
42 */
43inline std::optional<runtime::DataType> GetPointerType(const Type& type) {
44 if (type.defined()) {
45 if (auto* ptr_type = type.as<PointerTypeNode>()) {
46 if (auto* prim_type = ptr_type->element_type.as<PrimTypeNode>()) {
47 return prim_type->dtype;
48 }
49 }
50 }
51
52 return std::nullopt;
53}
54
55} // namespace tir
56} // namespace tvm
57#endif // TVM_TIR_IR_BUFFER_COMMON_H_
58