#-----------------------------------------------------------------------------#

main_target: all

include ../Mmake.common

#-----------------------------------------------------------------------------#

# please keep this list sorted
SOURCES= \
	agc_graph.m \
	agc_ho_pred.m \
	agc_ite.m \
	agc_unbound_typevars.m \
	agc_unbound_typevars2.m \
	agc_unused_in.m \
	compl_unify_bug.m \
	complicated_unify.m \
	constructor_arg_names.m \
	dcg_test.m \
	det_condition.m \
	det_inference.m \
	det_switch.m \
	double_vn.m \
	easy_nondet_test.m \
	easy_nondet_test_2.m \
	empty_bound_inst_list.m \
	empty_switch.m \
	error.m \
	fail_ite.m \
	followcode_det_problem.m \
	func_int_bug_main.m \
	headvar_not_found.m \
	higher_order.m \
	higher_order2.m \
	higher_order3.m \
	higher_order_implied_mode.m \
	ho_inst.m \
	ho_func_call.m \
	implied_mode.m \
	indexing.m \
	intermod_lambda.m \
	intermod_test.m \
	lambda_inference.m\
	lambda_instmap_bug.m \
	lambda_quant.m \
	lambda_quant_bug.m \
	lambda_struct_bug.m \
	lambda_switch.m \
	lambda_type.m \
	lazy_list.m \
	liveness_nonlocals.m \
	livevals_seq.m \
	loop.m \
	loop_in_disj.m \
	middle_rec_labels.m \
	modes_bug.m \
	multidet_prune1.m \
	multidet_test.m \
	nasty_func_test.m \
	nondet_live.m \
	pred_with_no_modes.m \
	qualified_cons_id.m \
	same_length_2.m \
	semidet_disj.m \
	shape_type.m \
	simplify_bug.m \
	soln_context.m \
	stack_alloc.m \
	subtype_switch.m \
	switches.m \
	switch_detection_bug.m \
	tricky_ite.m \
	two_pragma_c_codes.m \
	two_way_unif.m \
	type_inf_ambig_test.m \
	undead_proc.m \
	uniq_unify.m \
	unreachable_code.m \
	unused_args_test2.m \
	vn_float.m

# The mode system can't handle the following test cases yet:
#	assoc_list.m
#	determinism.m
#	mode_merge_insts.m

DEPS =	$(SOURCES:%.m=%.depend)
OBJS =	$(SOURCES:%.m=%.o)
NOS =	$(SOURCES:%.m=%.no)
PROGS =	$(SOURCES:%.m=%)

all:	objs

# some regression tests only failed with particular options enabled
# (please keep this list sorted)
GRADE-agc_graph			= asm_fast.agc
GRADE-agc_ho_pred		= asm_fast.agc
GRADE-agc_ite			= asm_fast.agc
GRADE-agc_unbound_typevars	= asm_fast.agc
GRADE-agc_unbound_typevars2	= asm_fast.agc
GRADE-agc_unused_in		= asm_fast.agc
MCFLAGS-compl_unify_bug		= -O3
MCFLAGS-double_vn		= -O4
MCFLAGS-higher_order_implied_mode = -O-1
MCFLAGS-livevals_seq		= -O5 --opt-space
MCFLAGS-middle_rec_labels	= --middle-rec --no-follow-vars 
MCFLAGS-pred_with_no_modes	= --infer-all
MCFLAGS-simplify_bug		= -O-1
MCFLAGS-two_way_unif		= -O-1
MCFLAGS-type_inf_ambig_test	= --infer-all
MCFLAGS-vn_float		= -O5

# intermod_lambda.m needs inter-module optimization
intermod_lambda.c:
	$(MCI) --grade $(GRADE) $(MCIFLAGS) intermod_lambda2.m
	$(MCOI) --grade $(GRADE) $(MCOIFLAGS) intermod_lambda2.m
	$(MCG) --grade $(GRADE) $(MCGFLAGS) --intermodule-optimization \
		intermod_lambda.m

intermod_test.c:
	$(MCI) --grade $(GRADE) $(MCIFLAGS) intermod_test2.m
	$(MCOI) --grade $(GRADE) $(MCOIFLAGS) intermod_test2.m
	$(MCG) --grade $(GRADE) $(MCGFLAGS) --intermodule-optimization \
		intermod_test.m

check:	objs

objs:	$(OBJS)

depend: $(DEPS)

printtests:
	@echo $(PROGS)

clean:
	rm -f *.c *.o *.err *.d *.h

#-----------------------------------------------------------------------------#
