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>;
116 { T::INVALID_BLOCK_REF } -> SameBaseAs<typename T::IRBlockRef>;
117 requires requires(
typename T::IRBlockRef r) {
118 { r == T::INVALID_BLOCK_REF } -> std::convertible_to<bool>;
119 { r != T::INVALID_BLOCK_REF } -> std::convertible_to<bool>;
123 { T::INVALID_FUNC_REF } -> SameBaseAs<typename T::IRFuncRef>;
124 requires requires(
typename T::IRFuncRef r) {
125 { r == T::INVALID_FUNC_REF } -> std::convertible_to<bool>;
126 { r != T::INVALID_FUNC_REF } -> std::convertible_to<bool>;
131 { T::TPDE_PROVIDES_HIGHEST_VAL_IDX } -> SameBaseAs<bool>;
137 { T::TPDE_LIVENESS_VISIT_ARGS } -> SameBaseAs<bool>;
148 { a.func_count() } -> std::convertible_to<u32>;
162 a.func_link_name(ARG(
typename T::IRFuncRef))
163 } -> std::convertible_to<std::string_view>;
166 { a.func_extern(ARG(
typename T::IRFuncRef)) } -> std::convertible_to<bool>;
170 a.func_only_local(ARG(
typename T::IRFuncRef))
171 } -> std::convertible_to<bool>;
175 a.func_has_weak_linkage(ARG(
typename T::IRFuncRef))
176 } -> std::convertible_to<bool>;
182 { a.cur_needs_unwind_info() } -> std::convertible_to<bool>;
185 { a.cur_is_vararg() } -> std::convertible_to<bool>;
189 requires IsFalse<T::TPDE_PROVIDES_HIGHEST_VAL_IDX> ||
requires {
190 { a.cur_highest_val_idx() } -> std::convertible_to<u32>;
198 { a.cur_arg_is_byval(ARG(u32)) } -> std::convertible_to<bool>;
201 { a.cur_arg_byval_size(ARG(u32)) } -> std::same_as<u32>;
204 { a.cur_arg_byval_align(ARG(u32)) } -> std::same_as<u32>;
207 { a.cur_arg_is_sret(ARG(u32)) } -> std::convertible_to<bool>;
215 { a.cur_has_dynamic_alloca() } -> std::convertible_to<bool>;
218 { a.cur_entry_block() } -> std::convertible_to<typename T::IRBlockRef>;
232 a.block_succs(ARG(
typename T::IRBlockRef))
237 a.block_insts(ARG(
typename T::IRBlockRef))
242 a.block_phis(ARG(
typename T::IRBlockRef))
248 { a.block_info(ARG(
typename T::IRBlockRef)) } -> std::same_as<u32>;
251 { a.block_set_info(ARG(
typename T::IRBlockRef), ARG(u32)) };
256 { a.block_info2(ARG(
typename T::IRBlockRef)) } -> std::same_as<u32>;
259 { a.block_set_info2(ARG(
typename T::IRBlockRef), ARG(u32)) };
263 { a.block_fmt_ref(ARG(
typename T::IRBlockRef)) } -> CanBeFormatted;
276 a.val_local_idx(ARG(
typename T::IRValueRef))
277 } -> std::convertible_to<ValLocalIdx>;
286 a.val_ignore_in_liveness_analysis(ARG(
typename T::IRValueRef))
287 } -> std::convertible_to<bool>;
291 { a.val_is_phi(ARG(
typename T::IRValueRef)) } -> std::convertible_to<bool>;
295 a.val_as_phi(ARG(
typename T::IRValueRef))
300 a.val_alloca_size(ARG(
typename T::IRValueRef))
301 } -> std::convertible_to<u32>;
305 a.val_alloca_align(ARG(
typename T::IRValueRef))
306 } -> std::convertible_to<u32>;
310 { a.value_fmt_ref(ARG(
typename T::IRValueRef)) } -> CanBeFormatted;
316 a.inst_operands(ARG(
typename T::IRInstRef))
321 a.inst_results(ARG(
typename T::IRInstRef))
325 { a.inst_fused(ARG(
typename T::IRInstRef)) } -> std::convertible_to<bool>;
329 { a.inst_fmt_ref(ARG(
typename T::IRInstRef)) } -> CanBeFormatted;
335 { a.start_compile() };
342 { a.switch_func(ARG(
typename T::IRFuncRef)) } -> std::convertible_to<bool>;