Date: Monday, April 13, 2020 @ 03:18:41 Author: foutrelis Revision: 613556
upgpkg: ldc 2:1.20.1-3: LLVM 10 rebuild Added: ldc/trunk/fix-llvm_prefetch-for-LLVM-10.patch Modified: ldc/trunk/PKGBUILD -------------------------------------+ PKGBUILD | 15 ++++++--- fix-llvm_prefetch-for-LLVM-10.patch | 55 ++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 5 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2020-04-13 03:17:44 UTC (rev 613555) +++ PKGBUILD 2020-04-13 03:18:41 UTC (rev 613556) @@ -7,14 +7,14 @@ pkgver=1.20.1 _pkgcommit=96437a25c28a2a6fbeb36dc6a46b600e56021051 _dversion=2.090.1 -_clangversion=9.0.1 # related to where ldc2 looks for compiler-rt sanitizers +_clangversion=10.0.0 # related to where ldc2 looks for compiler-rt sanitizers epoch=2 -pkgrel=2 +pkgrel=3 pkgdesc="A D Compiler based on the LLVM Compiler Infrastructure including D runtime and libphobos2" arch=('x86_64') url="https://github.com/ldc-developers/ldc" license=('BSD') -makedepends=('git' 'cmake' 'llvm9' 'ldc') +makedepends=('git' 'cmake' 'llvm' 'ldc') source=( "git+https://github.com/ldc-developers/ldc#commit=$_pkgcommit" @@ -21,12 +21,14 @@ "ldc-druntime::git+https://github.com/ldc-developers/druntime.git" "ldc-phobos::git+https://github.com/ldc-developers/phobos.git" "ldc-testsuite::git+https://github.com/ldc-developers/dmd-testsuite.git" + "fix-llvm_prefetch-for-LLVM-10.patch" ) sha256sums=('SKIP' 'SKIP' 'SKIP' - 'SKIP') + 'SKIP' + 'f123e482402416d262739a21de4c156cc37912c0f796f9d2239607a173680e28') prepare() { cd "$srcdir/ldc" @@ -37,6 +39,9 @@ git config submodule.tests/d2/dmd-testsuite.url "$srcdir/ldc-testsuite" git submodule update + # https://github.com/ldc-developers/ldc/issues/3397 + patch -Np1 -d runtime/druntime <../fix-llvm_prefetch-for-LLVM-10.patch + # Set version used for path construction in getFullClangCompilerRTLibPath() sed -i "s/ldc::llvm_version_base/\"$_clangversion\"/" driver/linker-gcc.cpp } @@ -66,7 +71,7 @@ } package_ldc() { - depends=('liblphobos' 'llvm9-libs' 'gcc' 'compiler-rt') + depends=('liblphobos' 'llvm-libs' 'gcc' 'compiler-rt') backup=('etc/ldc2.conf') provides=("d-compiler=$_dversion") Added: fix-llvm_prefetch-for-LLVM-10.patch =================================================================== --- fix-llvm_prefetch-for-LLVM-10.patch (rev 0) +++ fix-llvm_prefetch-for-LLVM-10.patch 2020-04-13 03:18:41 UTC (rev 613556) @@ -0,0 +1,55 @@ +diff --git a/src/core/simd.d b/src/core/simd.d +index c27dc4c1..7641c8a9 100644 +--- a/src/core/simd.d ++++ b/src/core/simd.d +@@ -84,6 +84,20 @@ version (LDC) + enum dataCache = 1; + llvm_prefetch(address, writeFetch, locality, dataCache); + } ++ ++ unittest ++ { ++ float[4] data = [ 0.5, 1, 1.5, 2 ]; ++ auto ptr = &data[0]; ++ ++ prefetch!(false, 0)(ptr); ++ auto v = loadUnaligned!float4(ptr); ++ v *= 2; ++ storeUnaligned!float4(v, ptr); ++ ++ float[4] expected = [ 1, 2, 3, 4 ]; ++ assert(data == expected); ++ } + } + else version (D_SIMD) + { +diff --git a/src/ldc/intrinsics.di b/src/ldc/intrinsics.di +index 914cd5e1..091b2aac 100644 +--- a/src/ldc/intrinsics.di ++++ b/src/ldc/intrinsics.di +@@ -129,6 +129,14 @@ pragma(LDC_intrinsic, "llvm.stacksave") + pragma(LDC_intrinsic, "llvm.stackrestore") + void llvm_stackrestore(void* ptr); + ++version(INTRINSICS_FROM_1000) ++{ ++ private enum llvm_prefetch_fullname = "llvm.prefetch.p0i8"; ++} ++else ++{ ++ private enum llvm_prefetch_fullname = "llvm.prefetch"; ++} + /// The 'llvm.prefetch' intrinsic is a hint to the code generator to insert a + /// prefetch instruction if supported; otherwise, it is a noop. Prefetches have + /// no effect on the behavior of the program but can change its performance +@@ -139,8 +147,8 @@ pragma(LDC_intrinsic, "llvm.stackrestore") + /// keep in cache. The cache type specifies whether the prefetch is performed on + /// the data (1) or instruction (0) cache. The rw, locality and cache type + /// arguments must be constant integers. +-pragma(LDC_intrinsic, "llvm.prefetch") +- void llvm_prefetch(void* ptr, uint rw, uint locality, uint cachetype) pure @safe; ++pragma(LDC_intrinsic, llvm_prefetch_fullname) ++ void llvm_prefetch(const(void)* ptr, uint rw, uint locality, uint cachetype) pure @safe; + + /// The 'llvm.pcmarker' intrinsic is a method to export a Program Counter (PC) + /// in a region of code to simulators and other tools. The method is target