##===- TEST.optllcdbg.Makefile -----------------------------*- Makefile -*-===## # # This test checks whether presence of debug declarations influences # the code generator or not. # # If input.bc includes llvm.dbg intrinsics and llvm.dbg variables then # the code in first.s and second.s should match. Otherwise debugging information # is influencing the code generator. The Dwarf info in first.s and second.s is # normally quite different, so the data directives that appear in Dwarf are # stripped out before comparison. # # This has only been used on Darwin; the data directives to strip and grep magic # might be different elsewhere. # ##===----------------------------------------------------------------------===## CURDIR := $(shell cd .; pwd) PROGDIR := $(PROJ_SRC_ROOT) RELDIR := $(subst $(PROGDIR),,$(CURDIR)) TESTNAME = $* TEST_TARGET_FLAGS = -g -O0 LLC_DEBUG_FLAGS = -O3 $(LLCFLAGS) OPT_FLAGS = -O3 .PRECIOUS: Output/%.first.s Output/%.second.s Output/%.t2c.s Output/%.t1c.s Output/%.t2b.bc Output/%.t1b.bc Output/%.t1a.bc Output/%.t2a.bc $(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ test.$(TEST).%: Output/%.$(TEST).report.txt @-cat $< $(PROGRAMS_TO_TEST:%=Output/%.optllcdbg.report.txt): \ Output/%.optllcdbg.report.txt: Output/%.report.diff @echo > $@ @echo "---------------------------------------------------------------" >> $@ @echo ">>> ========= '$(RELDIR)/$*' Program" >> $@ @echo "---------------------------------------------------------------" >> $@ @echo >> $@ @-if test -s Output/$^ ; then \ echo "TEST-FAIL" >> $@;\ else \ echo "TEST-PASS" >> $@;\ fi Output/%.t1a.bc: Output/%.linked.rbc Output/.dir $(LOPT) $(LOPT) -strip-debug-declare -strip-nondebug $< -f -o $@ Output/%.t1b.bc: Output/%.t1a.bc Output/.dir $(LOPT) $(LOPT) $(OPT_FLAGS) $< -f -o $@ Output/%.t1c.s: Output/%.t1b.bc Output/.dir $(LLC) $(LLC) $(LLC_DEBUG_FLAGS) $< -o $@ Output/%.first.s: Output/%.t1c.s Output/.dir $(LLC) grep -v '\.long' < $< \ | grep -v '\.byte' \ | grep -v '\.short' \ | grep -v '\.asci' \ | grep -v '\.quad' \ | grep -v '\.align' \ | grep -v '## DW_AT' \ | grep -v '## Abbrev' \ | grep -v '## End Of Children' \ | grep -v '## Extended Op' \ | grep -v 'Ltmp[0-9]' \ | grep -v '## DIE' \ | grep -v '## $$' \ | grep -v '^#.*' \ | grep -v '^$$' \ | grep -v '__debug_str' \ | grep -v 'Lstring' \ | grep -v 'Lset' \ | grep -v 'debug_loc' \ | grep -v 'Lpubtypes' \ | grep -v 'Lpubnames' \ | grep -v 'Linfo_' \ | grep -v 'Lfunc_begin' \ | grep -v 'Lfunc_end' \ | grep -v 'Ldebug_frame_begin' \ | grep -v 'Ldebug_frame_end' > $@ Output/%.t2a.bc: Output/%.linked.rbc Output/.dir $(LOPT) $(LOPT) -strip-nondebug $< -f -o $@ Output/%.t2b.bc: Output/%.t2a.bc Output/.dir $(LOPT) $(LOPT) $(OPT_FLAGS) $< -f -o $@ Output/%.t2c.s: Output/%.t2b.bc Output/.dir $(LLC) $(LLC) $(LLC_DEBUG_FLAGS) $< -o $@ Output/%.second.s: Output/%.t2c.s Output/.dir grep -v '\.long' < $< \ | grep -v '\.byte' \ | grep -v '\.short' \ | grep -v '\.asci' \ | grep -v '\.quad' \ | grep -v '\.align' \ | grep -v '## DW_AT' \ | grep -v '## Abbrev' \ | grep -v '## End Of Children' \ | grep -v '## Extended Op' \ | grep -v 'Ltmp[0-9]' \ | grep -v '## DIE' \ | grep -v '## $$' \ | grep -v '^#.*' \ | grep -v '^$$' \ | grep -v '__debug_str' \ | grep -v 'Lstring' \ | grep -v 'Lset' \ | grep -v 'debug_loc' \ | grep -v 'Lpubtypes' \ | grep -v 'Lpubnames' \ | grep -v 'Linfo_' \ | grep -v 'Lfunc_begin' \ | grep -v 'Lfunc_end' \ | grep -v 'Ldebug_frame_begin' \ | grep -v 'Ldebug_frame_end' > $@ Output/%.diff: Output/%.first.s Output/%.second.s @-if diff $^ > $@; then \ echo "--------- TEST-PASS: $*"; \ else \ echo "--------- TEST-FAIL: $*"; \ fi Output/%.report.diff: Output/%.first.s Output/%.second.s @diff $^ > $@