From 26c20b50a52c121bcdda21a16b4b0f85e2c2b0c6 Mon Sep 17 00:00:00 2001 From: Kevin Mihelich <kevin@archlinuxarm.org> Date: Sun, 19 Apr 2020 16:44:48 +0000 Subject: [PATCH] community/ldc to 1.20.1-3 --- community/ldc/PKGBUILD | 23 +++++--- .../ldc/fix-llvm_prefetch-for-LLVM-10.patch | 55 +++++++++++++++++++ 2 files changed, 69 insertions(+), 9 deletions(-) create mode 100644 community/ldc/fix-llvm_prefetch-for-LLVM-10.patch diff --git a/community/ldc/PKGBUILD b/community/ldc/PKGBUILD index 4c38dc9a7..163813dac 100644 --- a/community/ldc/PKGBUILD +++ b/community/ldc/PKGBUILD @@ -13,9 +13,9 @@ groups=('dlang' 'dlang-ldc') 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=1 +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" @@ -24,25 +24,30 @@ makedepends=('git' 'cmake' 'llvm' 'ldc') source=( "git+https://github.com/ldc-developers/ldc#commit=$_pkgcommit" - "git+https://github.com/ldc-developers/druntime.git" - "git+https://github.com/ldc-developers/phobos.git" - "git+https://github.com/ldc-developers/dmd-testsuite.git" + "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" git submodule init - git config submodule.druntime.url "$srcdir/druntime" - git config submodule.phobos.url "$srcdir/phobos" - git config submodule.tests/d2/dmd-testsuite.url "$srcdir/dmd-testsuite" + git config submodule.druntime.url "$srcdir/ldc-druntime" + git config submodule.phobos.url "$srcdir/ldc-phobos" + 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 } diff --git a/community/ldc/fix-llvm_prefetch-for-LLVM-10.patch b/community/ldc/fix-llvm_prefetch-for-LLVM-10.patch new file mode 100644 index 000000000..5f8365c33 --- /dev/null +++ b/community/ldc/fix-llvm_prefetch-for-LLVM-10.patch @@ -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