MimIR
0.4-dev
MimIR is my Intermediate Representation
Toggle main menu visibility
Loading...
Searching...
No Matches
remove_double_syncs.cpp
Go to the documentation of this file.
1
#include "
mim/plug/gpu/phase/remove_double_syncs.h
"
2
3
#include <
mim/axm.h
>
4
5
#include <
mim/plug/mem/mem.h
>
6
7
namespace
mim::plug::gpu::phase
{
8
9
const
Def
*
RemoveDoubleSyncs::rewrite_imm_App
(
const
App
* app) {
10
if
(
auto
sync_work_items
=
Axm::isa<gpu::sync_work_items>
(app)) {
11
auto
[m1, m3] =
sync_work_items
->args<2>();
12
auto
m1_extract = m1->isa<
Extract
>();
13
auto
m3_extract = m3->isa<
Extract
>();
14
if
(!m1_extract || !m3_extract || m1_extract->
tuple
() != m3_extract->
tuple
())
15
return
Super::rewrite_imm_App(app);
16
auto
common_prev = m1_extract->tuple();
17
bool
has_common_prev_sync =
Axm::isa<gpu::sync_work_items>
(common_prev);
18
auto
common_var = common_prev->isa<
Var
>();
19
bool
is_kernel_start = common_var ? common_var->
binder
()->
is_external
() :
false
;
20
if
(has_common_prev_sync || is_kernel_start) {
21
auto
new_arg =
rewrite
(
sync_work_items
->arg());
22
map
(app, new_arg);
23
return
new_arg;
24
}
25
}
26
return
Super::rewrite_imm_App(app);
27
}
28
29
}
// namespace mim::plug::gpu::phase
axm.h
mim::App
Definition
lam.h:224
mim::Axm::isa
static auto isa(const Def *def)
Definition
axm.h:112
mim::Def
Base class for all Defs.
Definition
def.h:273
mim::Def::is_external
bool is_external() const noexcept
Definition
def.h:553
mim::Extract
Extracts from a Sigma or Array-typed Extract::tuple the element at position Extract::index.
Definition
tuple.h:161
mim::Extract::tuple
const Def * tuple() const
Definition
tuple.h:171
mim::Rewriter::map
virtual const Def * map(const Def *old_def, const Def *new_def)
Definition
rewrite.h:47
mim::Rewriter::rewrite
virtual const Def * rewrite(const Def *)
Definition
rewrite.cpp:55
mim::Var
A variable introduced by a binder (mutable).
Definition
def.h:825
mim::Var::binder
Def * binder() const
The binder of this Var.
Definition
def.h:835
mim::plug::gpu::phase::RemoveDoubleSyncs::rewrite_imm_App
const Def * rewrite_imm_App(const App *) final
Definition
remove_double_syncs.cpp:9
mem.h
mim::plug::gpu::phase
Definition
lower_map_reduce.h:7
mim::plug::gpu::sync_work_items
sync_work_items
Definition
autogen.h:234
remove_double_syncs.h
src
mim
plug
gpu
phase
remove_double_syncs.cpp
Generated by
1.18.0