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 tvm/arith/bound.h |
21 | * \brief Bound deducers. |
22 | */ |
23 | #ifndef TVM_ARITH_BOUND_H_ |
24 | #define TVM_ARITH_BOUND_H_ |
25 | |
26 | #include <tvm/arith/int_set.h> |
27 | #include <tvm/ir/expr.h> |
28 | #include <tvm/tir/expr.h> |
29 | #include <tvm/tir/stmt.h> |
30 | |
31 | #include <unordered_map> |
32 | |
33 | namespace tvm { |
34 | namespace arith { |
35 | |
36 | using tir::Region; |
37 | using tir::Stmt; |
38 | using tir::Var; |
39 | using tir::VarNode; |
40 | |
41 | /*! |
42 | * \brief Deduce the bound of the target variable in a expression, |
43 | * give the domain of each variables. Return undefined IntSet to |
44 | * represent failure. |
45 | * |
46 | * \note The returned set may be smaller than set that |
47 | * contains all possible values of v that satisfies the bound. |
48 | * |
49 | * \param v The target variable to be deduced. |
50 | * \param cond The conditional expression. |
51 | * \param hint_map The domain of variable, used to help deduce. |
52 | * \param relax_map The domain of each variable, used to relax the domain, |
53 | * The deduce bound must implies e for all value in relax_map |
54 | * \return An integer set that always satisfies the condition. |
55 | */ |
56 | IntSet DeduceBound(PrimExpr v, PrimExpr cond, const Map<Var, IntSet>& hint_map, |
57 | const Map<Var, IntSet>& relax_map); |
58 | /*! |
59 | * \brief Same as DeduceBound with unordered_map signature. |
60 | * |
61 | * \param v The target variable to be deduced. |
62 | * \param cond The conditional expression. |
63 | * \param hint_map The domain of variable, used to help deduce. |
64 | * \param relax_map The domain of each variable, used to relax the domain, |
65 | * The deduce bound mush implies e for all value in relax_map |
66 | * \return An integer set that always satisfies the condition. |
67 | */ |
68 | IntSet DeduceBound(PrimExpr v, PrimExpr cond, |
69 | const std::unordered_map<const VarNode*, IntSet>& hint_map, |
70 | const std::unordered_map<const VarNode*, IntSet>& relax_map); |
71 | |
72 | /*! |
73 | * \brief Infer a regular domain that covers all the calls or provides within the given statement. |
74 | * \param body The given statement. |
75 | * \param buffer The buffer to check the access info. |
76 | * \param consider_loads If loads are considered. |
77 | * \param consider_stores If stores are considered. |
78 | * \return The domain that covers all the calls or provides within the given statement. |
79 | */ |
80 | Region DomainTouched(const Stmt& body, const tir::Buffer& buffer, bool consider_loads, |
81 | bool consider_stores); |
82 | |
83 | } // namespace arith |
84 | } // namespace tvm |
85 | #endif // TVM_ARITH_BOUND_H_ |
86 | |