51 auto [r, s, T] = buf_ax->args<3>();
54 return w.call<
mem::Ptr>(
Defs{arr_ty_of(s, T), w.lit_nat_0()});
57 auto [r, s, T] = alloc_ax->callee()->as<
App>()->
args<3>();
61 return w.tuple({mem2, ptr});
63 auto [
mem, buf, idx] = read_ax->args<3>();
67 auto element_ptr = op_lea_tuple(buf, idx);
69 return w.tuple({mem2, val});
71 auto [
mem, buf, idx, val] = write_ax->args<4>();
76 auto element_ptr = op_lea_tuple(buf, idx);
78 return w.tuple({mem2, buf});
80 auto [
mem, dst, src] = copy_ax->args<3>();
88 auto [
mem, val] = init_ax->args<2>();
89 auto [r, s, T] = init_ax->callee()->as<
App>()->
args<3>();
96 return w.tuple({mem3, ptr});
98 auto [
mem, val] = const_ax->args<2>();
99 auto [r, s, T] = const_ax->callee()->as<
App>()->
args<3>();
105 auto mem3 = w.call<
mem::store>(
Defs{mem2, ptr, pack_tuple(s, val)});
106 return w.tuple({mem3, ptr});
108 auto m0 =
rewrite(buf_alloc_copy->arg(0));
109 auto m1 =
rewrite(buf_alloc_copy->arg(1));
110 auto ptr =
rewrite(buf_alloc_copy->arg(2));
113 auto m0 =
rewrite(buf_copy_to_host->arg(0));
114 auto m1 =
rewrite(buf_copy_to_host->arg(1));
115 auto d_ptr =
rewrite(buf_copy_to_host->arg(2));
116 auto h_ptr =
rewrite(buf_copy_to_host->arg(3));
120 return RWPhase::rewrite_imm_App(app);