| ##===- TEST.dsgraph.Makefile -------------------------------*- Makefile -*-===## |
| # |
| # This recursively traverses the programs, computing DSGraphs for each of the |
| # programs in the testsuite. |
| # |
| ##===----------------------------------------------------------------------===## |
| |
| RELDIR := $(subst $(PROJ_OBJ_ROOT),,$(PROJ_OBJ_DIR)) |
| |
| # We require the programs to be linked with libdummy |
| #include $(LEVEL)/Makefile.dummylib |
| |
| # Pathname to poolalloc object tree |
| PADIR := $(LLVM_OBJ_ROOT)/projects/poolalloc |
| |
| # Pathame to the DSA pass dynamic library |
| DSA_SO := $(PADIR)/$(CONFIGURATION)/lib/LLVMDataStructure$(SHLIBEXT) |
| ASSIST_SO := $(PADIR)/$(CONFIGURATION)/lib/AssistDS$(SHLIBEXT) |
| |
| # Command for running the opt program |
| RUNOPT := $(RUNTOOLSAFELY) $(LLVM_OBJ_ROOT)/projects/poolalloc/$(CONFIGURATION)/bin/watchdog $(LOPT) -load $(DSA_SO) |
| |
| # PASS - The dsgraph pass to run: ds, bu, td |
| PASS := td |
| |
| ANALYZE_OPTS := -stats -time-passes -dsstats |
| ANALYZE_OPTS += -instcount -disable-verify -analyze -dont-print-ds |
| MEM := -track-memory -time-passes -disable-output |
| |
| #TYPE_INFERENCE_OPT := 1 |
| |
| #ifdef TYPE_INFERENCE_OPT |
| ANALYZE_OPTS += -enable-type-inference-opts -dsa-stdlib-no-fold |
| #endif |
| |
| $(PROGRAMS_TO_TEST:%=Output/%.base.bc): \ |
| Output/%.base.bc: Output/%.llvm.bc $(LOPT) $(ASSIST_SO) |
| -$(RUNOPT) -load $(ASSIST_SO) -info-output-file=$(CURDIR)/$@.info -instnamer -internalize -indclone -funcspec -ipsccp -deadargelim -instcombine -globaldce -stats -time-passes $< -f -o $@ |
| |
| $(PROGRAMS_TO_TEST:%=Output/%.$(TEST).report.txt): \ |
| Output/%.$(TEST).report.txt: Output/%.base.bc Output/%.LOC.txt $(LOPT) |
| @# Gather data |
| -($(RUNOPT) -dsa-$(PASS) $(ANALYZE_OPTS) $<)> $@.time.1 2>&1 |
| -($(RUNOPT) $(MEM) -dsa-$(PASS) -disable-verify $<)> $@.mem.1 2>&1 |
| @# Emit data. |
| @echo "---------------------------------------------------------------" > $@ |
| @echo ">>> ========= '$(RELDIR)/$*' Program" >> $@ |
| @echo "---------------------------------------------------------------" >> $@ |
| @/bin/echo -n "LOC: " >> $@ |
| @cat Output/$*.LOC.txt >> $@ |
| @echo >> $@ |
| @/bin/echo -n "MEMINSTS: " >> $@ |
| -@grep 'Number of memory instructions' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "FOLDEDNODES: " >> $@ |
| -@grep 'Number of nodes completely folded' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "TOTALNODES: " >> $@ |
| -@grep 'Number of nodes allocated' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "MAXGRAPHSIZE: " >> $@ |
| -@grep 'Maximum graph size' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "GLOBALSGRAPH: " >> $@ |
| -@grep 'td.GlobalsGraph.dot' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "SCCSIZE: " >> $@ |
| -@grep 'Maximum SCC Size in Call Graph' $@.time.1 >> $@ |
| @echo >> $@ |
| @# Emit timing data. |
| @/bin/echo -n "TIME: " >> $@ |
| -@grep ' Local Data Structure' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "TIME: " >> $@ |
| -@grep ' Bottom-up Data Structure' $@.time.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "TIME: " >> $@ |
| -@grep ' Top-down Data Structure' $@.time.1 >> $@ |
| @echo >> $@ |
| @# Emit space data. |
| @/bin/echo -n "MEM: " >> $@ |
| -@grep ' Local Data Structure' $@.mem.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "MEM: " >> $@ |
| -@grep ' Bottom-up Data Structure' $@.mem.1 >> $@ |
| @echo >> $@ |
| @/bin/echo -n "MEM: " >> $@ |
| -@grep ' Top-down Data Structure' $@.mem.1 >> $@ |
| @# Emit AssistDS stats |
| @/bin/echo -n "CLONED_FUNCSPEC: " >> $@ |
| -@grep 'Number of Functions Cloned in FuncSpec' $<.info >> $@ |
| @echo >> $@ |
| @/bin/echo -n "CLONED_INDCLONE: " >> $@ |
| -@grep 'Number of Functions Cloned in IndClone' $<.info >> $@ |
| @echo >> $@ |
| |
| |
| |
| $(PROGRAMS_TO_TEST:%=test.$(TEST).%): \ |
| test.$(TEST).%: Output/%.$(TEST).report.txt |
| @echo "---------------------------------------------------------------" |
| @echo ">>> ========= '$(RELDIR)/$*' Program" |
| @echo "---------------------------------------------------------------" |
| @cat $< |
| |
| # Define REPORT_DEPENDENCIES so that the report is regenerated if analyze or |
| # dummylib is updated. |
| # |
| REPORT_DEPENDENCIES := $(DUMMYLIB) $(LOPT) |
| |