10 for (
const auto& [f, entry] :
old_world().annexes())
13 for (
auto kernel : kernels_)
18 for (
auto def :
old_world().annexes().defs())
20 for (
auto def :
old_world().externals().muts())
27 if (
auto [_, ins] = analyzed_.emplace(def); !ins)
return;
30 auto kernel =
launch->decurry()->decurry()->arg();
31 if (
auto lam = kernel->isa_mut<
Lam>()) kernels_.emplace(lam);
34 for (
auto d : def->
deps())
39 auto new_def = RWPhase::rewrite_mut_Lam(old_lam);
41 if (kernels_.contains(old_lam)) {
44 if (new_lam->sym().empty()) {
45 assert(!old_lam->
sym().empty());
46 new_lam->set(old_lam->
sym());
static auto isa(const Def *def)
T * as_mut() const
Asserts that this is a mutable, casts constness away and performs a static_cast to T.
Defs deps() const noexcept
std::string unique_name() const
name + "_" + Def::gid
Lam * set(Filter filter, const Def *body)
virtual void rewrite_annex(flags_t, Sym, const Def *)
World & old_world()
Get old Defs from here.
virtual const Def * rewrite(const Def *)
void start() final
Actual entry.
bool analyze() final
Runs the optional pre-analysis on RWPhase::old_world(), typically to a fixed point,...
const Def * rewrite_mut_Lam(Lam *) final