1 | /******************************************************************************* |
2 | * Copyright 2022 Intel Corporation |
3 | * |
4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
5 | * you may not use this file except in compliance with the License. |
6 | * You may obtain a copy of the License at |
7 | * |
8 | * http://www.apache.org/licenses/LICENSE-2.0 |
9 | * |
10 | * Unless required by applicable law or agreed to in writing, software |
11 | * distributed under the License is distributed on an "AS IS" BASIS, |
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
13 | * See the License for the specific language governing permissions and |
14 | * limitations under the License. |
15 | *******************************************************************************/ |
16 | |
17 | #ifndef GPU_JIT_PASS_UNROLL_HPP |
18 | #define GPU_JIT_PASS_UNROLL_HPP |
19 | |
20 | #include "gpu/jit/ir/ir.hpp" |
21 | |
22 | namespace dnnl { |
23 | namespace impl { |
24 | namespace gpu { |
25 | namespace jit { |
26 | |
27 | // Eliminates let statements from the outer loops to be able to unroll loop |
28 | // nest for SLM buffering or prefetch injection. Example: |
29 | // Before: |
30 | // for (int i = 0; i < I; i++) { |
31 | // int tmp = TMP; |
32 | // for (int j = 0; j < J; j++) { |
33 | // ... |
34 | // } |
35 | // } |
36 | // After: |
37 | // for (int i = 0; i < I; i++) { |
38 | // for (int j = 0; j < J; j++) { |
39 | // int tmp = TMP; |
40 | // ... |
41 | // } |
42 | // } |
43 | stmt_t update_loops_for_unrolling(const stmt_t &s, ir_context_t &ir_ctx); |
44 | |
45 | // Unrolls loops according to their unroll attribute. |
46 | // Before: |
47 | // for (int i = 0; i < 2; i++) [unroll: 2] { |
48 | // body(i); |
49 | // } |
50 | // After: |
51 | // body(0); |
52 | // body(1); |
53 | stmt_t unroll_loops(const stmt_t &s, ir_context_t &ir_ctx); |
54 | |
55 | } // namespace jit |
56 | } // namespace gpu |
57 | } // namespace impl |
58 | } // namespace dnnl |
59 | |
60 | #endif |
61 | |