Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorimhameed <imhameed@microsoft.com>2019-11-13 03:35:44 +0300
committerBernhard Urban-Forster <lewurm@gmail.com>2019-11-13 03:35:44 +0300
commitfe0f824db5fa1f3021aad6dc4a6eb428133d8a4e (patch)
tree92ebfcb48d89c539dc8a45978973b86c3dea0124 /scripts/ci
parenteaf895f2d0ec8c6056ed6b4777579d2e08a8444d (diff)
[llvm] Use explicit null checks with LLVM. (#16954)
* [llvm] Use explicit null checks with LLVM. When the LLVM backend is used for a method, explicit null checks will unconditionally be used at the mini IR level. We had previously used implicit null checks at the mini IR level combined with llvm-volatile loads and stores to avoid mis-optimization of the generated code. During AOT compilation, LLVM's `ImplicitNullChecks` pass is enabled. This conservatively elides these explicit null checks. This pass only modifies branches tagged with `make.implicit` metadata. Null check branches are now tagged with `make.implicit` metadata, with three exceptions: 1. For platforms with backends that do not support zero page fault handling, null check branches are not tagged with `make.implicit`. 2. This commit also adds a `MONO_DEBUG` option: `llvm-disable-implicit-null-checks`. When it is enabled, null check branches are not tagged with `make.implicit`. 3. This commit alters the behavior of the `explicit-null-checks` `MONO_DEBUG` option. Enabling `explicit-null-checks` also implies `llvm-disable-implicit-null-checks`, because this option is documented (e.g. in https://www.mono-project.com/docs/debug+profile/debug/) to completely disable signal/seh-based null checks. * Add llvm-disable-implicit-null-checks to the MONO_DEBUG help string. * Add llvm-disable-implicit-null-checks to mono.1. * Don't tag null checks in EH regions with `make.implicit`. This relocates the logic formerly used to guard individual LLVM-level loads and stores with explicit null checks inside EH regions. * Use atomic/volatile loads and stores for the terimation flag in thread-suspend-suspended. LLVM was hoisting the load of and branch against `finished` out of thread t1's loop, resulting in an infinite spin. * Use ImplicitNullChecks with LLVM JIT. * Suppress emission of the .llvm_faultmaps section. Bump external/llvm to release_60 (7a8dc89adbe7e123220e070a527e096ee91e66d5). * [ci] use LLVM built from repository
Diffstat (limited to 'scripts/ci')
-rwxr-xr-xscripts/ci/run-test-make-install.sh2
1 files changed, 1 insertions, 1 deletions
diff --git a/scripts/ci/run-test-make-install.sh b/scripts/ci/run-test-make-install.sh
index e0322582986..5cd4d47e384 100755
--- a/scripts/ci/run-test-make-install.sh
+++ b/scripts/ci/run-test-make-install.sh
@@ -11,5 +11,5 @@ export PATH=$MONO_PREFIX/bin:$PATH
${TESTCMD} --label=check-prefix-mcs --timeout=1m mcs /out:${MONO_REPO_ROOT}/tmp/hello.exe ${MONO_REPO_ROOT}/tmp/hello.cs
${TESTCMD} --label=check-prefix-roslyn --timeout=1m csc /out:${MONO_REPO_ROOT}/tmp/hello.exe ${MONO_REPO_ROOT}/tmp/hello.cs
${TESTCMD} --label=check-prefix-aot --timeout=1m mono --aot ${MONO_REPO_ROOT}/tmp/hello.exe
-${TESTCMD} --label=check-prefix-llvmaot --timeout=1m mono --aot=llvm,llvm-path=/usr/lib/mono/llvm/bin ${MONO_REPO_ROOT}/tmp/hello.exe
+${TESTCMD} --label=check-prefix-llvmaot --timeout=1m mono --aot=llvm,llvm-path=${MONO_REPO_ROOT}/llvm/usr/bin ${MONO_REPO_ROOT}/tmp/hello.exe
${TESTCMD} --label=check-prefix-llvmjit --timeout=1m mono --llvm ${MONO_REPO_ROOT}/tmp/hello.exe