18 auto global_as =
Lit::as(world().annex<gpu::addr_space_global>());
19 auto shared_as =
Lit::as(world().annex<gpu::addr_space_shared>());
20 auto const_as =
Lit::as(world().annex<gpu::addr_space_const>());
21 auto local_as =
Lit::as(world().annex<gpu::addr_space_local>());
23 auto addr_space =
Lit::as(malloc->decurry()->arg(1));
24 if (addr_space == shared_as || addr_space == const_as || addr_space == local_as)
25 fe::throwf(
"Invalid use of %mem.malloc: cannot be used in address space {}: {}", addr_space, malloc);
27 auto addr_space =
Lit::as(free->decurry()->arg(1));
28 if (addr_space == shared_as || addr_space == const_as || addr_space == local_as)
29 fe::throwf(
"Invalid use of %mem.free: cannot be used in address space {}: {}", addr_space, free);
31 auto addr_space =
Lit::as(mslot->decurry()->arg(1));
32 if (addr_space == global_as || addr_space == const_as)
33 fe::throwf(
"Invalid use of %mem.mslot: cannot be used in address space {}: {}", addr_space, mslot);
35 auto addr_space =
Lit::as(store->decurry()->arg(1));
36 if (addr_space == const_as)
37 fe::throwf(
"Invalid use of %mem.store: cannot be used in address space {}: {}", addr_space, store);
43 auto global_as =
Lit::as(world().annex<gpu::addr_space_global>());
45 auto [type, addr_space] = malloc->decurry()->args<2>();
46 if (
Lit::as(addr_space) == global_as) {
47 auto [
mem, _] = malloc->args<2>();
48 World& w = type->world();
52 auto [type, addr_space] = free->decurry()->args<2>();
53 if (
Lit::as(addr_space) == global_as) {
54 auto [
mem, ptr] = free->args<2>();
55 World& w = type->world();