blob: 31bb94034532de795260dce12eca957fd28c52c7 [file] [log] [blame]
##===- safecode/test/TEST.abc.Makefile ---------------------*- Makefile -*-===##
#
# This test runs SAFECode on all of the Programs, producing some
# performance numbers and statistics.
#
##===----------------------------------------------------------------------===##
include $(PROJ_OBJ_ROOT)/Makefile.common
CFLAGS = -O3 -fno-strict-aliasing
ABCFLAGS = -include /home/vadve/criswell/Downloads/SAFECode/lib/poolcheck.c -I/home/vadve/criswell/Downloads/SAFECode/include
CURDIR := $(shell cd .; pwd)
PROGDIR := $(shell cd $(LLVM_SRC_ROOT)/projects/llvm-test; pwd)/
RELDIR := $(subst $(PROGDIR),,$(CURDIR))
GCCLD = $(LLVM_OBJ_ROOT)/$(CONFIGURATION)/bin/gccld
# Pool allocator pass shared object
PA_SO := /home/vadve/criswell/Downloads/SAFECode/bin/boundschecker
# Pool allocator runtime library
#PA_RT := $(PROJECT_DIR)/lib/Bytecode/libpoolalloc_fl_rt.bc
#PA_RT_O := $(PROJECT_DIR)/$(CONFIGURATION)/lib/libpoolalloc_splay_rt.bca
#PA_RT_O := $(PROJECT_DIR)/$(CONFIGURATION)/lib/poolalloc_splay_rt.o
#PA_RT_O := $(PROJECT_DIR)/$(CONFIGURATION)/lib/poolalloc_safe_rt.o
#PA_RT_O := $(PROJECT_DIR)/Release/lib/poolalloc_rt.o
#PA_RT_O := $(PROJECT_DIR)/lib/Release/poolalloc_fl_rt.o
PA_RT_O := /home/vadve/criswell/Downloads/SAFECode/lib/libpoolalloc_splay_rt.a
# Command to run opt with the pool allocator pass loaded
OPT_SC := /home/vadve/criswell/Downloads/SAFECode/bin/boundschecker \
-poolalloc-disable-alignopt \
-poolalloc-usetd-resolve \
-budatastructures-update-from-globals \
-poolalloc-force-simple-pool-init \
-poolalloc-force-all-poolfrees \
-poolalloc-add-pooldescs-globalstack-arrays \
-poolalloc-add-pooldescs-collapsed \
-poolalloc-heuristic=AllNodes \
-poolalloc-keep-DSA-results
#OPT_SC := /home/vadve/criswell/Downloads/SAFECode/bin/boundschecker \
#-poolalloc-force-simple-pool-init \
#-poolalloc-force-all-poolfrees \
#-poolalloc-add-pooldescs-globalstack-arrays \
#-poolalloc-heuristic=AllNodes \
#-poolalloc-keep-DSA-results
# OPT_SC_STATS - Run opt with the -stats and -time-passes options, capturing the
# output to a file.
OPT_SC_STATS = $(OPT_SC) -info-output-file=$(CURDIR)/$@.info -stats -time-passes
#OPTZN_PASSES := -globaldce -ipsccp -deadargelim -adce -instcombine -simplifycfg
OPTZN_PASSES :=
#
# This rule runs SAFECode on the .llvm.bc file to produce a new .bc
# file
#
$(PROGRAMS_TO_TEST:%=Output/%.$(TEST).bc): \
Output/%.$(TEST).bc: Output/%.llvm.bc $(PA_SO) $(LOPT)
-@rm -f $(CURDIR)/$@.info
-$(OPT_SC_STATS) $(OPTZN_PASSES) $< -o $@ -f 2>&1 > $@.out
$(PROGRAMS_TO_TEST:%=Output/%.nonsc.bc): \
Output/%.nonsc.bc: Output/%.llvm.bc $(LOPT)
-@rm -f $(CURDIR)/$@.info
-$(LOPT) $(OPTZN_PASSES) $< -o $@ -f 2>&1 > $@.out
#
# These rules compile the new .bc file into a .c file using CBE
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.cbe.c): \
Output/%.abc.cbe.c: Output/%.$(TEST).bc $(LLC)
-$(LLC) -march=c -f $< -o $@
$(PROGRAMS_TO_TEST:%=Output/%.nonsc.cbe.c): \
Output/%.nonsc.cbe.c: Output/%.nonsc.bc $(LLC)
-$(LLC) -march=c -f $< -o $@
#
# These rules compile the CBE .c file into a final executable
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.cbe): \
Output/%.abc.cbe: Output/%.abc.cbe.c $(PA_RT_O)
-$(CC) $(CFLAGS) $(ABCFLAGS) $< $(LLCLIBS) $(LDFLAGS) $(PA_RT_O) -o $@
$(PROGRAMS_TO_TEST:%=Output/%.nonsc.cbe): \
Output/%.nonsc.cbe: Output/%.nonsc.cbe.c $(PA_RT_O)
-$(CC) $(CFLAGS) $< $(LLCLIBS) $(LDFLAGS) -o $@
ifndef PROGRAMS_HAVE_CUSTOM_RUN_RULES
#
# This rule runs the generated executable, generating timing information, for
# normal test programs
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.out-cbe): \
Output/%.abc.out-cbe: Output/%.abc.cbe
-$(RUNSAFELY) $(STDIN_FILENAME) $@ $< $(RUN_OPTIONS)
$(PROGRAMS_TO_TEST:%=Output/%.nonsc.out-cbe): \
Output/%.nonsc.out-cbe: Output/%.nonsc.cbe
-$(RUNSAFELY) $(STDIN_FILENAME) $@ $< $(RUN_OPTIONS)
else
#
# This rule runs the generated executable, generating timing information, for
# SPEC
#
$(PROGRAMS_TO_TEST:%=Output/%.abc.out-cbe): \
Output/%.abc.out-cbe: Output/%.abc.cbe
-$(SPEC_SANDBOX) abccbe-$(RUN_TYPE) $@ $(REF_IN_DIR) \
$(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \
../../$< $(RUN_OPTIONS)
-(cd Output/abccbe-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@
-cp Output/abccbe-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time
$(PROGRAMS_TO_TEST:%=Output/%.nonsc.out-cbe): \
Output/%.nonsc.out-cbe: Output/%.nonsc.cbe
-$(SPEC_SANDBOX) nonsccbe-$(RUN_TYPE) $@ $(REF_IN_DIR) \
$(RUNSAFELY) $(STDIN_FILENAME) $(STDOUT_FILENAME) \
../../$< $(RUN_OPTIONS)
-(cd Output/nonsccbe-$(RUN_TYPE); cat $(LOCAL_OUTPUTS)) > $@
-cp Output/nonsccbe-$(RUN_TYPE)/$(STDOUT_FILENAME).time $@.time
endif
# This rule diffs the post-poolallocated version to make sure we didn't break
# the program!
$(PROGRAMS_TO_TEST:%=Output/%.abc.diff-cbe): \
Output/%.abc.diff-cbe: Output/%.out-nat Output/%.abc.out-cbe
@cp Output/$*.out-nat Output/$*.abc.out-nat
-$(DIFFPROG) cbe $*.abc $(HIDEDIFF)
$(PROGRAMS_TO_TEST:%=Output/%.nonsc.diff-cbe): \
Output/%.nonsc.diff-cbe: Output/%.out-nat Output/%.nonsc.out-cbe
@cp Output/$*.out-nat Output/$*.nonsc.out-nat
-$(DIFFPROG) cbe $*.nonsc $(HIDEDIFF)
# This rule wraps everything together to build the actual output the report is
# generated from.
$(PROGRAMS_TO_TEST:%=Output/%.$(TEST).report.txt): \
Output/%.$(TEST).report.txt: Output/%.out-nat \
Output/%.nonsc.diff-cbe \
Output/%.abc.diff-cbe \
Output/%.LOC.txt
@echo > $@
@-if test -f Output/$*.nonsc.diff-cbe; then \
printf "GCC-RUN-TIME: " >> $@;\
grep "^program" Output/$*.out-nat.time >> $@;\
fi
@-if test -f Output/$*.nonsc.diff-cbe; then \
printf "CBE-RUN-TIME-NORMAL: " >> $@;\
grep "^program" Output/$*.nonsc.out-cbe.time >> $@;\
fi
@-if test -f Output/$*.abc.diff-cbe; then \
printf "CBE-RUN-TIME-SAFECODE: " >> $@;\
grep "^program" Output/$*.abc.out-cbe.time >> $@;\
fi
printf "LOC: " >> $@
cat Output/$*.LOC.txt >> $@
@cat Output/$*.$(TEST).bc.info >> $@
$(PROGRAMS_TO_TEST:%=test.$(TEST).%): \
test.$(TEST).%: Output/%.$(TEST).report.txt
@echo "---------------------------------------------------------------"
@echo ">>> ========= '$(RELDIR)/$*' Program"
@echo "---------------------------------------------------------------"
@cat $<
REPORT_DEPENDENCIES := $(PA_RT_O) $(PA_SO) $(PROGRAMS_TO_TEST:%=Output/%.llvm.bc) $(LLC) $(LOPT)