61 { r.incoming_count() } -> std::convertible_to<u32>;
65 r.incoming_val_for_slot(std::declval<u32>())
66 } -> std::convertible_to<IRValue>;
70 r.incoming_block_for_slot(std::declval<u32>())
71 } -> std::convertible_to<IRBlockRef>;
75 r.incoming_val_for_block(std::declval<IRBlockRef>())
76 } -> std::convertible_to<IRValue>;
93 typename T::IRValueRef;
94 requires sizeof(
typename T::IRValueRef) <= 8;
97 typename T::IRInstRef;
100 typename T::IRBlockRef;
101 requires sizeof(
typename T::IRBlockRef) <= 8;
104 typename T::IRFuncRef;
105 requires sizeof(
typename T::IRFuncRef) <= 8;
108 { T::INVALID_VALUE_REF } -> SameBaseAs<typename T::IRValueRef>;
109 requires requires(
typename T::IRValueRef r,
typename T::IRValueRef w) {
110 { r == T::INVALID_VALUE_REF } -> std::convertible_to<bool>;
111 { r != T::INVALID_VALUE_REF } -> std::convertible_to<bool>;
112 { r < w } -> std::convertible_to<bool>;
117 { T::INVALID_BLOCK_REF } -> SameBaseAs<typename T::IRBlockRef>;
118 requires requires(
typename T::IRBlockRef r) {
119 { r == T::INVALID_BLOCK_REF } -> std::convertible_to<bool>;
120 { r != T::INVALID_BLOCK_REF } -> std::convertible_to<bool>;
124 { T::INVALID_FUNC_REF } -> SameBaseAs<typename T::IRFuncRef>;
125 requires requires(
typename T::IRFuncRef r) {
126 { r == T::INVALID_FUNC_REF } -> std::convertible_to<bool>;
127 { r != T::INVALID_FUNC_REF } -> std::convertible_to<bool>;
132 { T::TPDE_PROVIDES_HIGHEST_VAL_IDX } -> SameBaseAs<bool>;
138 { T::TPDE_LIVENESS_VISIT_ARGS } -> SameBaseAs<bool>;
149 { a.func_count() } -> std::convertible_to<u32>;
163 a.func_link_name(ARG(
typename T::IRFuncRef))
164 } -> std::convertible_to<std::string_view>;
167 { a.func_extern(ARG(
typename T::IRFuncRef)) } -> std::convertible_to<bool>;
171 a.func_only_local(ARG(
typename T::IRFuncRef))
172 } -> std::convertible_to<bool>;
176 a.func_has_weak_linkage(ARG(
typename T::IRFuncRef))
177 } -> std::convertible_to<bool>;
183 { a.cur_needs_unwind_info() } -> std::convertible_to<bool>;
186 { a.cur_is_vararg() } -> std::convertible_to<bool>;
190 requires IsFalse<T::TPDE_PROVIDES_HIGHEST_VAL_IDX> ||
requires {
191 { a.cur_highest_val_idx() } -> std::convertible_to<u32>;
199 { a.cur_arg_is_byval(ARG(u32)) } -> std::convertible_to<bool>;
202 { a.cur_arg_byval_size(ARG(u32)) } -> std::same_as<u32>;
205 { a.cur_arg_byval_align(ARG(u32)) } -> std::same_as<u32>;
208 { a.cur_arg_is_sret(ARG(u32)) } -> std::convertible_to<bool>;
216 { a.cur_has_dynamic_alloca() } -> std::convertible_to<bool>;
219 { a.cur_entry_block() } -> std::convertible_to<typename T::IRBlockRef>;
233 a.block_succs(ARG(
typename T::IRBlockRef))
238 a.block_insts(ARG(
typename T::IRBlockRef))
243 a.block_phis(ARG(
typename T::IRBlockRef))
249 { a.block_info(ARG(
typename T::IRBlockRef)) } -> std::same_as<u32>;
252 { a.block_set_info(ARG(
typename T::IRBlockRef), ARG(u32)) };
257 { a.block_info2(ARG(
typename T::IRBlockRef)) } -> std::same_as<u32>;
260 { a.block_set_info2(ARG(
typename T::IRBlockRef), ARG(u32)) };
264 { a.block_fmt_ref(ARG(
typename T::IRBlockRef)) } -> CanBeFormatted;
277 a.val_local_idx(ARG(
typename T::IRValueRef))
278 } -> std::convertible_to<ValLocalIdx>;
287 a.val_ignore_in_liveness_analysis(ARG(
typename T::IRValueRef))
288 } -> std::convertible_to<bool>;
292 { a.val_is_phi(ARG(
typename T::IRValueRef)) } -> std::convertible_to<bool>;
296 a.val_as_phi(ARG(
typename T::IRValueRef))
301 a.val_alloca_size(ARG(
typename T::IRValueRef))
302 } -> std::convertible_to<u32>;
306 a.val_alloca_align(ARG(
typename T::IRValueRef))
307 } -> std::convertible_to<u32>;
311 { a.value_fmt_ref(ARG(
typename T::IRValueRef)) } -> CanBeFormatted;
317 a.inst_operands(ARG(
typename T::IRInstRef))
322 a.inst_results(ARG(
typename T::IRInstRef))
326 { a.inst_fused(ARG(
typename T::IRInstRef)) } -> std::convertible_to<bool>;
330 { a.inst_fmt_ref(ARG(
typename T::IRInstRef)) } -> CanBeFormatted;
336 { a.start_compile() };
343 { a.switch_func(ARG(
typename T::IRFuncRef)) } -> std::convertible_to<bool>;