-
Daniel Maier authoredDaniel Maier authored
perforate.sh 3.41 KiB
#!/bin/sh
CLAN=/home/daniel/polyhedral_perforation/clan-0.8.0/clan
PERF=./build/perf2
CLOOG=/home/daniel/polyhedral_perforation/pluto/cloog-isl/cloog
PLUTO=/home/daniel/polyhedral_perforation/pluto/polycc
usage() {
printf -- "%s: <OPTIONS> <INPUT>\n" "$0"
printf -- "perforate program\n\n"
printf -- "-o, --output FILE output file\n"
printf -- "-a, --all do all steps\n"
printf -- "-e, --extract extract scop\n"
printf -- "-p, --perforate perforate scop\n"
printf -- "-g, --generate generate perforated program\n"
printf -- "-s, --statement statement to perforate\n"
printf -- "-l, --level level to perforate\n"
printf -- "-P, --pluto run pluto\n"
printf -- "--parallelize pluto parallelize\n"
}
extract_scop() {
$CLAN "$1" > "$2"
}
perforate() {
$PERF "$1" "$2" "$3" "$4"
}
run_pluto() {
if [ "$1" = "yes" ]; then
args="--parallelize"
shift
else
args=""
fi
# FIXME: what pluto options should be used?
$PLUTO "$args" -o "$2" "$1" > /dev/null
}
generate() {
$CLOOG -openscop "$1" > "$2"
}
# default values
output_src=""
statement=0
level=0
while true; do
case "$1" in
-h|--help)
usage
exit
;;
-a|--all)
cmd_extract=yes
cmd_perforate=yes
cmd_generate=yes
cmd_pluto=yes
;;
-e|--extract)
cmd_extract=yes
;;
-p|--perforate)
cmd_perforate=yes
;;
-g|--generate)
cmd_generate=yes
;;
-o|--output)
shift
output_src="$1"
;;
-s|--statement)
shift
statement="$1"
;;
-l|--level)
shift
level="$1"
;;
-P|--pluto)
cmd_pluto=yes
;;
--parallelize)
cmd_pluto_parallelize=yes
;;
*)
break
esac
shift
done
input_src="$1"
scop="$input_src.openscop"
perforated="$input_src.perf.openscop"
pluto_input="${input_src}_pluto_input.c"
if [ "$input_src" = "" ]; then
printf "missing input\n"
exit 1
fi
if [ "$cmd_extract" = "yes" ]; then
extract_scop "$input_src" "$scop"
fi
if [ "$cmd_perforate" = "yes" ]; then
perfin="$(mktemp)"
perfout="$(mktemp)"
cat "$scop" > "$perfin"
IFS="_"
echo statement is $statement
for s in $statement; do
IFS=" "
echo perforate "$perfin" "$perfout" "$s" "$level"
perforate "$perfin" "$perfout" "$s" "$level"
tmp="$perfin"
perfin="$perfout"
perfout="$tmp"
done
cat "$perfin" > "$perforated"
rm "$perfin" "$perfout"
else
# no perforation, just copy to perforated
cat "$scop" > "$perforated"
fi
if [ "$cmd_generate" = "yes" ] || [ "$cmd_pluto" = "yes" ]; then
generate "$perforated" "$pluto_input"
fi
if [ "$cmd_pluto" = "yes" ]; then
printf "running pluto on %s output %s\n" "$pluto_input" "$output_src"
if [ "$cmd_pluto_parallelize" = "yes" ]; then
run_pluto --parallelize "$pluto_input" "$output_src"
else
run_pluto "$pluto_input" "$output_src"
fi
elif [ "$cmd_generate" = "yes" ]; then
# no pluto, just copy to output_src
cat "$pluto_input" > "$output_src"
fi
printf "input is \"%s\" output is \"%s\"\n" "$input_src" "$output_src"