[arch-commits] Commit in ldc/trunk (PKGBUILD fix-llvm_prefetch-for-LLVM-10.patch)
Evangelos Foutras
foutrelis at archlinux.org
Mon Apr 13 03:18:41 UTC 2020
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
More information about the arch-commits
mailing list