From b4becd5d48c553589e5ad399ecfecf84cb44e258 Mon Sep 17 00:00:00 2001 From: Marcus Holland-Moritz Date: Mon, 4 Sep 2023 22:50:44 +0200 Subject: [PATCH] Simplify multiversioning using target_clones() --- src/dwarfs/similarity_ordering.cpp | 21 +++------------------ test/multiversioning_benchmark.cpp | 21 +++------------------ 2 files changed, 6 insertions(+), 36 deletions(-) diff --git a/src/dwarfs/similarity_ordering.cpp b/src/dwarfs/similarity_ordering.cpp index 341d2b4e..c2864fad 100644 --- a/src/dwarfs/similarity_ordering.cpp +++ b/src/dwarfs/similarity_ordering.cpp @@ -79,25 +79,10 @@ int distance(std::array const& a, std::array const& b) { #ifdef DWARFS_MULTIVERSIONING #ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-function" -__attribute__((target("avx512vpopcntdq"))) int -distance(std::array const& a, std::array const& b) { - return distance(a, b); -} +__attribute__((target_clones("avx512vpopcntdq", "popcnt", "default"))) +#else +__attribute__((target_clones("popcnt", "default"))) #endif - -__attribute__((target("popcnt"))) int -distance(std::array const& a, std::array const& b) { - return distance(a, b); -} -#ifdef __clang__ -#pragma clang diagnostic pop -#endif -#endif - -#ifdef DWARFS_MULTIVERSIONING -__attribute__((target("default"))) #endif int distance(std::array const& a, std::array const& b) { return distance(a, b); diff --git a/test/multiversioning_benchmark.cpp b/test/multiversioning_benchmark.cpp index bcf73e47..1cc97c7e 100644 --- a/test/multiversioning_benchmark.cpp +++ b/test/multiversioning_benchmark.cpp @@ -46,25 +46,10 @@ int distance(std::array const& a, std::array const& b) { #ifdef DWARFS_MULTIVERSIONING #ifdef __clang__ -#pragma clang diagnostic push -#pragma clang diagnostic ignored "-Wunused-function" -__attribute__((target("avx512vpopcntdq"))) int -distance(std::array const& a, std::array const& b) { - return distance(a, b); -} +__attribute__((target_clones("avx512vpopcntdq", "popcnt", "default"))) +#else +__attribute__((target_clones("popcnt", "default"))) #endif - -__attribute__((target("popcnt"))) int -distance(std::array const& a, std::array const& b) { - return distance(a, b); -} -#ifdef __clang__ -#pragma clang diagnostic pop -#endif -#endif - -#ifdef DWARFS_MULTIVERSIONING -__attribute__((target("default"))) #endif int distance(std::array const& a, std::array const& b) { return distance(a, b);