kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Log | Files | Refs | README

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:
Mazure-pipelines.yml | 51---------------------------------------------------
Minclude/kfr/dft/impl/fft-impl.hpp | 12++++++++++--
Minclude/kfr/kfr.h | 3+++
Minclude/kfr/simd/types.hpp | 6+++---
Mtests/complex_test.cpp | 2+-
Mtests/dft_test.cpp | 2+-
Mtests/dsp_test.cpp | 4++--
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);