File: bench

package info (click to toggle)
llvm-toolchain-11 1%3A11.0.1-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 995,808 kB
  • sloc: cpp: 4,767,656; ansic: 760,916; asm: 477,436; python: 170,940; objc: 69,804; lisp: 29,914; sh: 23,855; f90: 18,173; pascal: 7,551; perl: 7,471; ml: 5,603; awk: 3,489; makefile: 2,573; xml: 915; cs: 573; fortran: 503; javascript: 452
file content (100 lines) | stat: -rwxr-xr-x 3,879 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#!/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