49 auto [r, s, T] = buf_ax->args<3>();
52 return w.call<
mem::Ptr>(
Defs{arr_ty_of(s, T), w.lit_nat_0()});
55 auto [r, s, T] = alloc_ax->callee()->as<
App>()->
args<3>();
59 return w.tuple({mem2, ptr});
61 auto [
mem, buf, idx] = read_ax->args<3>();
65 auto element_ptr = op_lea_tuple(buf, idx);
67 return w.tuple({mem2, val});
69 auto [
mem, buf, idx, val] = write_ax->args<4>();
74 auto element_ptr = op_lea_tuple(buf, idx);
76 return w.tuple({mem2, buf});
78 auto [
mem, dst, src] = copy_ax->args<3>();
86 auto [
mem, val] = init_ax->args<2>();
87 auto [r, s, T] = init_ax->callee()->as<
App>()->
args<3>();
94 return w.tuple({mem3, ptr});
96 auto [
mem, val] = const_ax->args<2>();
97 auto [r, s, T] = const_ax->callee()->as<
App>()->
args<3>();
103 auto mem3 = w.call<
mem::store>(
Defs{mem2, ptr, pack_tuple(s, val)});
104 return w.tuple({mem3, ptr});
107 return RWPhase::rewrite_imm_App(app);