commit a4e93477f4bd1416c36fff4dbd3b38af9ebe81f2
parent 27e6e6fad1e691987aa7dd825ff4b3f095fc6e5b
Author: d.levin256@gmail.com <d.levin256@gmail.com>
Date: Mon, 17 Jun 2019 16:56:34 +0000
Workaround for Clang 8.0
Diffstat:
7 files changed, 20 insertions(+), 60 deletions(-)
diff --git a/azure-pipelines.yml b/azure-pipelines.yml
@@ -8,15 +8,6 @@ jobs:
sudo apt-get update && sudo apt-get install -y ninja-build libmpfr-dev
ci/run.sh build-release -DCPU_ARCH=detect -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Release
-- job: Linux_x86_64_Clang_Debug
- pool:
- vmImage: 'ubuntu-16.04'
- steps:
- - bash: |
- set -e
- sudo apt-get update && sudo apt-get install -y ninja-build libmpfr-dev
- ci/run.sh build-debug -DCPU_ARCH=detect -DCMAKE_CXX_COMPILER=clang++ -DCMAKE_BUILD_TYPE=Debug
-
- job: Linux_x86_64_GCC7
pool:
vmImage: 'ubuntu-16.04'
@@ -77,22 +68,6 @@ jobs:
brew install ninja
ci/run.sh build-release -DCPU_ARCH=detect -DCMAKE_BUILD_TYPE=Release
-- job: macOS_x86_64_Clang_Debug
- strategy:
- matrix:
- xcode10.1:
- XCODE_VER: 10.1
- xcode10:
- XCODE_VER: 10
- pool:
- vmImage: 'macOS-10.13'
- steps:
- - bash: |
- set -e
- /bin/bash -c "sudo xcode-select -s /Applications/Xcode_$(XCODE_VER).app/Contents/Developer"
- brew install ninja
- ci/run.sh build-release -DCPU_ARCH=detect -DCMAKE_BUILD_TYPE=Release
-
- job: iOS_ARM_Clang_Release
strategy:
matrix:
@@ -145,18 +120,6 @@ jobs:
set PATH=%PATH:C:\Program Files\Git\mingw64\bin;=%
ci\run.cmd build-release -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DCPU_ARCH=detect -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_BUILD_TYPE=Release
-- job: Windows_MSVC_x86_Clang_Debug
- pool:
- vmImage: 'vs2017-win2016'
- steps:
- - script: |
- choco install llvm --version 7.0.1
- choco install ninja
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build\vcvars32.bat"
- set PATH=%PATH:C:\tools\mingw64\bin;=%
- set PATH=%PATH:C:\Program Files\Git\mingw64\bin;=%
- ci\run.cmd build-debug -DCMAKE_CXX_COMPILER="C:/Program Files/LLVM/bin/clang-cl.exe" -DCPU_ARCH=detect -DCMAKE_CXX_FLAGS=-m32 -DCMAKE_BUILD_TYPE=Debug
-
- job: Android_ARMv7_Clang_Release
pool:
vmImage: 'vs2017-win2016'
@@ -190,13 +153,6 @@ jobs:
set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\local\bin;C:\msys64\usr\bin;%PATH%
bash -c "ci/run.sh build-release -DCMAKE_CXX_COMPILER=/c/LLVM/bin/clang++.exe -DCPU_ARCH=avx512 -DCMAKE_CXX_FLAGS=--target=x86_64-w64-windows-gnu -DCMAKE_BUILD_TYPE=Release"
-- job: Windows_MinGW_x86_64_AVX512_Clang_Debug
- pool: WIN-AVX512
- steps:
- - script: |
- set PATH=C:\msys64\mingw64\bin;C:\msys64\usr\local\bin;C:\msys64\usr\bin;%PATH%
- bash -c "ci/run.sh build-debug -DCMAKE_CXX_COMPILER=/c/LLVM/bin/clang++.exe -DCPU_ARCH=avx512 -DCMAKE_CXX_FLAGS=--target=x86_64-w64-windows-gnu -DCMAKE_BUILD_TYPE=Debug"
-
- job: Windows_MSVC_x86_64_AVX512_Clang_Release
pool: WIN-AVX512
steps:
@@ -204,13 +160,6 @@ jobs:
call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
ci\run.cmd build-release -DARCH_TESTS=ON -DCMAKE_CXX_COMPILER="C:/LLVM/bin/clang-cl.exe" -DCPU_ARCH=avx512 -DCMAKE_CXX_FLAGS=-m64 -DCMAKE_BUILD_TYPE=Release
-- job: Windows_MSVC_x86_64_AVX512_Clang_Debug
- pool: WIN-AVX512
- steps:
- - script: |
- call "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat"
- ci\run.cmd build-debug -DARCH_TESTS=ON -DCMAKE_CXX_COMPILER="C:/LLVM/bin/clang-cl.exe" -DCPU_ARCH=avx512 -DCMAKE_CXX_FLAGS=-m64 -DCMAKE_BUILD_TYPE=Debug
-
- job: Windows_MSVC_x86_64_AVX512_MSVC2017_Release
pool: WIN-AVX512
steps:
diff --git a/include/kfr/dft/impl/fft-impl.hpp b/include/kfr/dft/impl/fft-impl.hpp
@@ -953,7 +953,11 @@ KFR_INTRINSIC void generate_real_twiddles(dft_plan_real<T>* self, size_t size)
}
template <typename T>
-KFR_INTRINSIC void to_fmt(size_t real_size, const complex<T>* rtwiddle, complex<T>* out, const complex<T>* in,
+#ifdef CMT_ARCH_X32
+// Fix Clang 8.0 bug
+__attribute__((target("no-fma"), flatten, noinline))
+#endif
+void to_fmt(size_t real_size, const complex<T>* rtwiddle, complex<T>* out, const complex<T>* in,
dft_pack_format fmt)
{
using namespace intrinsics;
@@ -996,7 +1000,11 @@ KFR_INTRINSIC void to_fmt(size_t real_size, const complex<T>* rtwiddle, complex<
}
template <typename T>
-KFR_INTRINSIC void from_fmt(size_t real_size, complex<T>* rtwiddle, complex<T>* out, const complex<T>* in,
+#ifdef CMT_ARCH_X32
+// Fix Clang 8.0 bug
+__attribute__((target("no-fma"), flatten, noinline))
+#endif
+void from_fmt(size_t real_size, complex<T>* rtwiddle, complex<T>* out, const complex<T>* in,
dft_pack_format fmt)
{
using namespace intrinsics;
diff --git a/include/kfr/kfr.h b/include/kfr/kfr.h
@@ -68,3 +68,6 @@ constexpr const char version_full[] = KFR_VERSION_FULL;
#define KFR_INTRINSIC CMT_INTRINSIC
#define KFR_MEM_INTRINSIC CMT_MEM_INTRINSIC
#define KFR_FUNCTION CMT_FUNCTION
+#ifdef CMT_NATIVE_F64
+#define KFR_NATIVE_F64 CMT_NATIVE_F64
+#endif
diff --git a/include/kfr/simd/types.hpp b/include/kfr/simd/types.hpp
@@ -135,14 +135,14 @@ constexpr ctypes_t<i8, i16, i32, i64> signed_types{};
constexpr ctypes_t<u8, u16, u32, u64> unsigned_types{};
constexpr ctypes_t<i8, i16, i32, i64, u8, u16, u32, u64> integer_types{};
constexpr ctypes_t<f32
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
,
f64
#endif
>
float_types{};
constexpr ctypes_t<i8, i16, i32, i64, u8, u16, u32, u64, f32
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
,
f64
#endif
@@ -203,7 +203,7 @@ constexpr integer_vector_types_t<vec_tpl> integer_vector_types{};
template <template <typename, size_t> class vec_tpl>
using float_vector_types_t = concat_lists<vector_types_for_size_t<vec_tpl, f32>
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
,
vector_types_for_size_t<vec_tpl, f64>
#endif
diff --git a/tests/complex_test.cpp b/tests/complex_test.cpp
@@ -108,7 +108,7 @@ TEST(complex_math)
CHECK(cexp2(c32{ 1.f, 1.f }) == c32{ 1.5384778027279442f, 1.2779225526272695f });
CHECK(cexp10(c32{ 1.f, 1.f }) == c32{ -6.682015101903131f, 7.439803369574931f });
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
CHECK(csin(c64{ 1.0, 1.0 }) == c64{ 1.2984575814159773, 0.634963914784736 });
CHECK(ccos(c64{ 1.0, 1.0 }) == c64{ 0.8337300251311489, -0.9888977057628651 });
CHECK(csinh(c64{ 1.0, 1.0 }) == c64{ 0.634963914784736, 1.2984575814159773 });
diff --git a/tests/dft_test.cpp b/tests/dft_test.cpp
@@ -17,7 +17,7 @@ using namespace kfr;
namespace CMT_ARCH_NAME
{
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
constexpr ctypes_t<float, double> dft_float_types{};
#else
constexpr ctypes_t<float> dft_float_types{};
diff --git a/tests/dsp_test.cpp b/tests/dsp_test.cpp
@@ -343,7 +343,7 @@ TEST(fir)
}
#else
testo::matrix(named("type") = ctypes_t<float
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
,
double
#endif
@@ -372,7 +372,7 @@ TEST(fir)
#endif
}
-#ifdef KFR_NATIVE_F64
+#ifdef CMT_NATIVE_F64
TEST(fir_different)
{
const univector<float, 100> data = counter() + sequence(1, 2, -10, 100) + sequence(0, -7, 0.5f);