blob: 796697eb5948e72272da107200cc3a6ab15bbd82 [file] [log] [blame]
#!/bin/bash
#set -x
if [ $# -gt 2 ]; then
TOOLS_DIR="$1"
SOURCE_DIR="$2"
MAIN_SOURCE_FILE="$3"
else
echo "Usage: bench <path to llvm binaries> <path to c-sources> <main source file> [<override sysroot>]"
exit 1
fi
if [ $# -gt 3 ]; then
SYS_ROOT="$4"
else
SYS_ROOT="/"
fi
function check_tool ()
{
if [ -e "${TOOLS_DIR}/$1" ]; then
echo "Found: $1"
else
echo "!!! Cannot find required tool, please provide it in the LLVM binaries folder: $1"
fi
}
check_tool lli
check_tool SpeculativeJIT
check_tool ThinLtoJIT
SKIP_BITCODE_GEN=0
if [[ -e bc-default || -e bc-thinlto || -e ll-default || -e ll-thinlto ]]; then
echo "Skipping bitcode generation: output directories existing"
echo "Please clean up manually: rm -R bc-default bc-thinlto ll-default ll-thinlto"
SKIP_BITCODE_GEN=1
else
check_tool clang
check_tool llvm-dis
check_tool llvm-lto
mkdir bc-default
mkdir bc-thinlto
mkdir ll-default
mkdir ll-thinlto
fi
ROOT_DIR=$(pwd)
ALL_BITCODE_FILES=""
MAIN_FILE_BASENAME=$(basename "${MAIN_SOURCE_FILE%.c*}")
LLI_EXTRA_MODULES=""
for f in ${SOURCE_DIR}/*.c* ; do
BASE_NAME=$(basename "${f%.c*}")
if [ ${SKIP_BITCODE_GEN} -eq 0 ]; then
echo "Compile: $f -> ${BASE_NAME}.bc"
${TOOLS_DIR}/clang -c -I ${SOURCE_DIR} ${CFLAGS} -isysroot ${SYS_ROOT} -emit-llvm \
-o "bc-default/${BASE_NAME}.bc" "$f"
${TOOLS_DIR}/clang -c -I ${SOURCE_DIR} ${CFLAGS} -isysroot ${SYS_ROOT} -flto=thin \
-o "bc-thinlto/${BASE_NAME}.bc" "$f"
echo "Disassemble ${BASE_NAME}.bc -> ${BASE_NAME}.ll"
${TOOLS_DIR}/llvm-dis bc-default/${BASE_NAME}.bc -o ll-default/${BASE_NAME}.ll
${TOOLS_DIR}/llvm-dis bc-thinlto/${BASE_NAME}.bc -o ll-thinlto/${BASE_NAME}.ll
fi
ALL_BITCODE_FILES="${ALL_BITCODE_FILES} ${BASE_NAME}.bc"
if [ "${BASE_NAME}" != "${MAIN_FILE_BASENAME}" ]; then
LLI_EXTRA_MODULES="${LLI_EXTRA_MODULES} -extra-module=${BASE_NAME}.bc"
fi
done
if [ ${SKIP_BITCODE_GEN} -eq 0 ]; then
echo "Link global index file: index.thinlto.bc"
cd ${ROOT_DIR}/bc-thinlto
${TOOLS_DIR}/llvm-lto --thinlto -o ${ROOT_DIR}/bc-thinlto/index ${ALL_BITCODE_FILES}
echo "Disassemble global index file: index.thinlto.ll"
cd ${ROOT_DIR}/ll-thinlto
${TOOLS_DIR}/llvm-dis -o index.thinlto.ll ${ROOT_DIR}/bc-thinlto/index.thinlto.bc
fi
set -x
cd ${ROOT_DIR}/bc-default
time (${TOOLS_DIR}/clang -o ${MAIN_FILE_BASENAME} -O0 ${LDFLAGS} ${ALL_BITCODE_FILES} && ./${MAIN_FILE_BASENAME} ${EXEC_ARGS} 1>/dev/null)
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=mcjit "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-mcjit "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-lazy "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-lazy -compile-threads=8 "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-lazy -per-module-lazy "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-lazy -per-module-lazy -compile-threads=8 "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-lazy -per-module-lazy -compile-threads=8 -O1 "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/lli ${LLI_EXTRA_MODULES} -jit-kind=orc-lazy -per-module-lazy -compile-threads=8 -O0 "${MAIN_FILE_BASENAME}.bc" ${EXEC_ARGS} 1>/dev/null
time ${TOOLS_DIR}/SpeculativeJIT -num-threads=8 ${ALL_BITCODE_FILES} --args ${EXEC_ARGS} 1>/dev/null
cd ${ROOT_DIR}/bc-thinlto
#time (${TOOLS_DIR}/clang -flto=thin -o test ${ALL_BITCODE_FILES} && ./test ${EXEC_ARGS} 1>/dev/null)
time ${TOOLS_DIR}/ThinLtoJIT index.thinlto.bc --args ${EXEC_ARGS} 1>/dev/null