:- module profiling_builtin.
:- use_module builtin, private_builtin, std_util.
:- type (profiling_builtin:proc_static).
:- pragma foreign_type(il, (profiling_builtin:proc_static), "class [mscorlib]System.Object").
:- pragma foreign_type(c, (profiling_builtin:proc_static), "MR_ProcStatic *").
:- type (profiling_builtin:proc_dynamic).
:- pragma foreign_type(il, (profiling_builtin:proc_dynamic), "class [mscorlib]System.Object").
:- pragma foreign_type(c, (profiling_builtin:proc_dynamic), "MR_ProcDynamic *").
:- type (profiling_builtin:call_site_dynamic).
:- pragma foreign_type(il, (profiling_builtin:call_site_dynamic), "class [mscorlib]System.Object").
:- pragma foreign_type(c, (profiling_builtin:call_site_dynamic), "MR_CallSiteDynamic *").
:- pragma foreign_import_module("C", profiling_builtin).
:- pragma foreign_proc("C", profiling_builtin:prepare_for_normal_call(N :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_CallSiteDynamic	*child_csd;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);

	child_csd = pd->MR_pd_call_site_ptr_ptrs[N];

  #ifdef MR_DEEP_PROFILING_STATISTICS
	if (child_csd == NULL) {
		MR_deep_prof_prep_normal_new++;
	} else {
		MR_deep_prof_prep_normal_old++;
	}
  #endif

	if (child_csd == NULL) {
		MR_new_call_site_dynamic(child_csd);
		pd->MR_pd_call_site_ptr_ptrs[N] = child_csd;
	}

	MR_next_call_site_dynamic = child_csd;
	MR_leave_instrumentation();
#else
	MR_fatal_error(\"prepare_for_normal_call: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:prepare_for_special_call(CSN :: (builtin:in), TypeInfo :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_CallSiteDynList	*csdlist;
  #ifdef MR_DEEP_PROFILING_MOVE_TO_FRONT_LISTS
	MR_CallSiteDynList	*prev = NULL;
  #endif
	MR_TypeCtorInfo		type_ctor_info;
	MR_TypeInfo		type_info;
	void			*void_key;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);

	type_info = (MR_TypeInfo) TypeInfo;
	type_ctor_info = MR_TYPEINFO_GET_TYPE_CTOR_INFO(type_info);

	void_key = (void *) type_ctor_info;
	MR_search_csdlist(csdlist, prev, pd, CSN, void_key);
	MR_maybe_deep_profile_update_special_history();

  #ifdef MR_DEEP_PROFILING_STATISTICS
	if (csdlist != NULL) {
		MR_deep_prof_prep_special_old++;
	} else {
		MR_deep_prof_prep_special_new++;
	}
  #endif

	if (csdlist != NULL) {
		MR_next_call_site_dynamic = csdlist->MR_csdlist_call_site;
	} else {
		MR_CallSiteDynamic	*newcsd;

		MR_new_call_site_dynamic(newcsd);
		MR_make_and_link_csdlist(csdlist, newcsd, pd, CSN, void_key);
		MR_next_call_site_dynamic = newcsd;
	}

	MR_leave_instrumentation();
#else
	MR_fatal_error(
		\"prepare_for_special_call: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:prepare_for_ho_call(CSN :: (builtin:in), Closure :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_Closure		*closure;
	MR_CallSiteDynList	*csdlist;
	void			*void_key;
  #ifdef MR_DEEP_PROFILING_MOVE_TO_FRONT_LISTS
	MR_CallSiteDynList	*prev = NULL;
  #endif

	MR_enter_instrumentation();
	closure = (MR_Closure *) Closure;
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);

  #ifdef MR_DEEP_PROFILING_KEY_USES_ID
	void_key = (void *) (closure->MR_closure_layout);
  #else
	void_key = (void *) (closure->MR_closure_code);
  #endif

	MR_search_csdlist(csdlist, prev, pd, CSN, void_key);
	MR_maybe_deep_profile_update_closure_history();

  #ifdef MR_DEEP_PROFILING_STATISTICS
	if (csdlist != NULL) {
		MR_deep_prof_prep_ho_old++;
	} else {
		MR_deep_prof_prep_ho_new++;
	}
  #endif

	if (csdlist != NULL) {
		MR_next_call_site_dynamic = csdlist->MR_csdlist_call_site;
	} else {
		MR_CallSiteDynamic	*newcsd;

		MR_new_call_site_dynamic(newcsd);
		MR_make_and_link_csdlist(csdlist, newcsd, pd, CSN, void_key);
		MR_next_call_site_dynamic = newcsd;
	}

	MR_leave_instrumentation();
#else
	MR_fatal_error(\"prepare_for_ho_call: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:prepare_for_method_call(CSN :: (builtin:in), TypeClassInfo :: (builtin:in), MethodNum :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_CallSiteDynList	*csdlist;
	void			*void_key;
  #ifdef MR_DEEP_PROFILING_MOVE_TO_FRONT_LISTS
	MR_CallSiteDynList	*prev = NULL;
  #endif

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);

	void_key = (void *)
		MR_typeclass_info_class_method(TypeClassInfo, MethodNum);
	MR_search_csdlist(csdlist, prev, pd, CSN, void_key);
	MR_maybe_deep_profile_update_method_history();

  #ifdef MR_DEEP_PROFILING_STATISTICS
	if (csdlist != NULL) {
		MR_deep_prof_prep_method_old++;
	} else {
		MR_deep_prof_prep_method_new++;
	}
  #endif

	if (csdlist != NULL) {
		MR_next_call_site_dynamic = csdlist->MR_csdlist_call_site;
	} else {
		MR_CallSiteDynamic	*newcsd;

		MR_new_call_site_dynamic(newcsd);
		MR_make_and_link_csdlist(csdlist, newcsd, pd, CSN, void_key);
		MR_next_call_site_dynamic = newcsd;
	}

	MR_leave_instrumentation();
#else
	MR_fatal_error(\"prepare_for_method_call: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:prepare_for_callback(CSN :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);

	MR_current_callback_site = (MR_CallSiteDynList **)
		&(pd->MR_pd_call_site_ptr_ptrs[CSN]);
	MR_leave_instrumentation();
#else
	MR_fatal_error(\"prepare_for_callback: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:prepare_for_tail_call(CSN :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
	MR_CallSiteDynamic	*child_csd;
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;

	MR_enter_instrumentation();

  #ifdef MR_DEEP_PROFILING_LOWLEVEL_DEBUG
	if (MR_calldebug) {
		MR_print_deep_prof_vars(stdout, \"prepare_for_tail_call\");
	}
  #endif

	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);

	child_csd = pd->MR_pd_call_site_ptr_ptrs[CSN];

  #ifdef MR_DEEP_PROFILING_STATISTICS
	if (child_csd == NULL) {
		MR_deep_prof_prep_tail_new++;
	} else {
		MR_deep_prof_prep_tail_old++;
	}
  #endif
	if (child_csd == NULL) {
		MR_new_call_site_dynamic(child_csd);
		child_csd->MR_csd_callee_ptr = pd;
		pd->MR_pd_call_site_ptr_ptrs[CSN] = child_csd;
	}

	child_csd->MR_csd_depth_count++;
	MR_current_call_site_dynamic = child_csd;

	MR_leave_instrumentation();
#else
	MR_fatal_error(\"prepare_for_tail_call: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:save_and_zero_activation_info_ac(Count :: (builtin:out), Ptr :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
  #ifdef MR_USE_ACTIVATION_COUNTS
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_ProcStatic		*ps;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);
	ps = pd->MR_pd_proc_static;

	Count = ps->MR_ps_activation_count;
	ps->MR_ps_activation_count = 0;
	Ptr = ps->MR_ps_outermost_activation_ptr;
	ps->MR_ps_outermost_activation_ptr = NULL;
	MR_leave_instrumentation();
  #else
	MR_fatal_error(\"save_and_zero_activation_info_ac called when not using activation counts!\");
  #endif
#else
	MR_fatal_error(\"save_and_zero_activation_info_ac: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:save_and_zero_activation_info_sr(Ptr :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
  #ifndef MR_USE_ACTIVATION_COUNTS
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_ProcStatic		*ps;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);
	ps = pd->MR_pd_proc_static;

	Ptr = ps->MR_ps_outermost_activation_ptr;
	ps->MR_ps_outermost_activation_ptr = NULL;
	MR_leave_instrumentation();
  #else
	MR_fatal_error(\"save_and_zero_activation_info_sr called when using activation counts!\");
  #endif
#else
	MR_fatal_error(\"save_and_zero_activation_info_sr: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:rezero_activation_info_ac, [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
  #ifdef MR_USE_ACTIVATION_COUNTS
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_ProcStatic		*ps;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);
	ps = pd->MR_pd_proc_static;

	ps->MR_ps_activation_count = 0;
	ps->MR_ps_outermost_activation_ptr = NULL;
	MR_leave_instrumentation();
  #else
	MR_fatal_error(\"rezero_activation_info_ac called when not using activation counts!\");
  #endif
#else
	MR_fatal_error(\"rezero_activation_info_ac: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:rezero_activation_info_sr, [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
  #ifndef MR_USE_ACTIVATION_COUNTS
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_ProcStatic		*ps;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);
	ps = pd->MR_pd_proc_static;

	ps->MR_ps_outermost_activation_ptr = NULL;
	MR_leave_instrumentation();
  #else
	MR_fatal_error(\"rezero_activation_info_sr called when using activation counts!\");
  #endif
#else
	MR_fatal_error(\"rezero_activation_info_sr: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:reset_activation_info_ac(Count :: (builtin:in), Ptr :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
  #ifdef MR_USE_ACTIVATION_COUNTS
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_ProcStatic		*ps;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);
	ps = pd->MR_pd_proc_static;

	ps->MR_ps_activation_count = Count;
	ps->MR_ps_outermost_activation_ptr = Ptr;
	MR_leave_instrumentation();
  #else
	MR_fatal_error(\"reset_activation_info_ac called when not using activation counts!\");
  #endif
#else
	MR_fatal_error(\"reset_activation_info_ac: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:reset_activation_info_sr(Ptr :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
#ifdef MR_DEEP_PROFILING
  #ifndef MR_USE_ACTIVATION_COUNTS
	MR_CallSiteDynamic	*csd;
	MR_ProcDynamic		*pd;
	MR_ProcStatic		*ps;

	MR_enter_instrumentation();
	csd = MR_current_call_site_dynamic;
	MR_deep_assert(csd, NULL, csd != NULL);
	pd = csd->MR_csd_callee_ptr;
	MR_deep_assert(csd, NULL, pd != NULL);
	ps = pd->MR_pd_proc_static;

	ps->MR_ps_outermost_activation_ptr = Ptr;
	MR_leave_instrumentation();
  #else
	MR_fatal_error(\"reset_activation_info_sr called when using activation counts!\");
  #endif
#else
	MR_fatal_error(\"reset_activation_info_sr: deep profiling not enabled\");
#endif
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_1(CSD :: (builtin:in), CSN :: (builtin:in), OuterCount1 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSN, OuterCount1 */
#define MR_PROCNAME		\"save_recursion_depth_1\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					CSN);				     \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_2(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2 */
#define MR_PROCNAME		\"save_recursion_depth_2\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_3(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
#define MR_PROCNAME		\"save_recursion_depth_3\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_4(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out), OuterCount4 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4 */
#define MR_PROCNAME		\"save_recursion_depth_4\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_5(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out), OuterCount4 :: (builtin:out), OuterCount5 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5 */
#define MR_PROCNAME		\"save_recursion_depth_5\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_6(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out), OuterCount4 :: (builtin:out), OuterCount5 :: (builtin:out), OuterCount6 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6 */
#define MR_PROCNAME		\"save_recursion_depth_6\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_7(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out), OuterCount4 :: (builtin:out), OuterCount5 :: (builtin:out), OuterCount6 :: (builtin:out), OuterCount7 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
#define MR_PROCNAME		\"save_recursion_depth_7\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_8(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out), OuterCount4 :: (builtin:out), OuterCount5 :: (builtin:out), OuterCount6 :: (builtin:out), OuterCount7 :: (builtin:out), OuterCount8 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
/* shut up warning: OuterCount8 */
#define MR_PROCNAME		\"save_recursion_depth_8\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount8,	     \\
					MR_csn_vector_field(CSNsVector, 7)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:save_recursion_depth_9(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:out), OuterCount2 :: (builtin:out), OuterCount3 :: (builtin:out), OuterCount4 :: (builtin:out), OuterCount5 :: (builtin:out), OuterCount6 :: (builtin:out), OuterCount7 :: (builtin:out), OuterCount8 :: (builtin:out), OuterCount9 :: (builtin:out)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
/* shut up warning: OuterCount8, OuterCount9 */
#define MR_PROCNAME		\"save_recursion_depth_9\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_SAVE_DEPTH_ACTION(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount8,	     \\
					MR_csn_vector_field(CSNsVector, 7)); \\
				MR_SAVE_DEPTH_ACTION(OuterCount9,	     \\
					MR_csn_vector_field(CSNsVector, 8)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_1(CSD :: (builtin:in), CSN :: (builtin:in), OuterCount1 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSN, OuterCount1 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_1\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					CSN);				     \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_2(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_2\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_3(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_3\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_4(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_4\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_5(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_5\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_6(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_6\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_7(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in), OuterCount7 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_7\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_8(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in), OuterCount7 :: (builtin:in), OuterCount8 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
/* shut up warning: OuterCount8 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_8\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount8,	     \\
					MR_csn_vector_field(CSNsVector, 7)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_exit_9(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in), OuterCount7 :: (builtin:in), OuterCount8 :: (builtin:in), OuterCount9 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
/* shut up warning: OuterCount8, OuterCount9 */
#define MR_PROCNAME		\"restore_recursion_depth_exit_9\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_EXIT(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount8,	     \\
					MR_csn_vector_field(CSNsVector, 7)); \\
				MR_RESTORE_DEPTH_EXIT(OuterCount9,	     \\
					MR_csn_vector_field(CSNsVector, 8)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_1(CSD :: (builtin:in), CSN :: (builtin:in), OuterCount1 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSN, OuterCount1 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_1\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					CSN);				     \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_2(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_2\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_3(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_3\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_4(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_4\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_5(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_5\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_6(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_6\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_7(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in), OuterCount7 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_7\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_8(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in), OuterCount7 :: (builtin:in), OuterCount8 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
/* shut up warning: OuterCount8 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_8\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount8,	     \\
					MR_csn_vector_field(CSNsVector, 7)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma foreign_proc("C", profiling_builtin:restore_recursion_depth_fail_9(CSD :: (builtin:in), CSNsVector :: (builtin:in), OuterCount1 :: (builtin:in), OuterCount2 :: (builtin:in), OuterCount3 :: (builtin:in), OuterCount4 :: (builtin:in), OuterCount5 :: (builtin:in), OuterCount6 :: (builtin:in), OuterCount7 :: (builtin:in), OuterCount8 :: (builtin:in), OuterCount9 :: (builtin:in)), [will_not_call_mercury, thread_safe, not_tabled_for_io], "{
/* shut up warning: CSD, CSNsVector, OuterCount1, OuterCount2, OuterCount3 */
/* shut up warning: OuterCount4, OuterCount5, OuterCount6, OuterCount7 */
/* shut up warning: OuterCount8, OuterCount9 */
#define MR_PROCNAME		\"restore_recursion_depth_fail_9\"
#define MR_REC_DEPTH_BODY	{					     \\
				MR_RESTORE_DEPTH_FAIL(OuterCount1,	     \\
					MR_csn_vector_field(CSNsVector, 0)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount2,	     \\
					MR_csn_vector_field(CSNsVector, 1)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount3,	     \\
					MR_csn_vector_field(CSNsVector, 2)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount4,	     \\
					MR_csn_vector_field(CSNsVector, 3)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount5,	     \\
					MR_csn_vector_field(CSNsVector, 4)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount6,	     \\
					MR_csn_vector_field(CSNsVector, 5)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount7,	     \\
					MR_csn_vector_field(CSNsVector, 6)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount8,	     \\
					MR_csn_vector_field(CSNsVector, 7)); \\
				MR_RESTORE_DEPTH_FAIL(OuterCount9,	     \\
					MR_csn_vector_field(CSNsVector, 8)); \\
				}
#include \"mercury_deep_rec_depth_body.h\"
#undef MR_PROCNAME
#undef MR_REC_DEPTH_BODY
}").
:- pragma termination_info(profiling_builtin:prepare_for_normal_call((builtin:in)), finite(0, [no]), cannot_loop).
:- pragma termination_info(profiling_builtin:prepare_for_special_call((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:prepare_for_ho_call((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:prepare_for_method_call((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:prepare_for_callback((builtin:in)), finite(0, [no]), cannot_loop).
:- pragma termination_info(profiling_builtin:prepare_for_tail_call((builtin:in)), finite(0, [no]), cannot_loop).
:- pragma termination_info(profiling_builtin:save_and_zero_activation_info_ac((builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_and_zero_activation_info_sr((builtin:out)), infinite, cannot_loop).
:- pragma termination_info((profiling_builtin:rezero_activation_info_ac), finite(0, []), cannot_loop).
:- pragma termination_info((profiling_builtin:rezero_activation_info_sr), finite(0, []), cannot_loop).
:- pragma termination_info(profiling_builtin:reset_activation_info_ac((builtin:in), (builtin:in)), finite(0, [no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:reset_activation_info_sr((builtin:in)), finite(0, [no]), cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_1((builtin:in), (builtin:in), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_2((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_3((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_4((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_5((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_6((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_7((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_8((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:save_recursion_depth_9((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out), (builtin:out)), infinite, cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_1((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_2((builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_3((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_4((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_5((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_6((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_7((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_8((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_exit_9((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_1((builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_2((builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_3((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_4((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_5((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_6((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_7((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_8((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no, no, no]), cannot_loop).
:- pragma termination_info(profiling_builtin:restore_recursion_depth_fail_9((builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in), (builtin:in)), finite(0, [no, no, no, no, no, no, no, no, no, no, no]), cannot_loop).
