https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111366

--- Comment #8 from Mathieu Malaterre <malat at debian dot org> ---
Further reduced:

#include <stddef.h>
#define HWY_PRAGMA(tokens) _Pragma(#tokens)
#define HWY_PUSH_ATTRIBUTES(targets_str) HWY_PRAGMA(GCC target targets_str)
__attribute__((always_inline)) void PreventElision() { asm(""); }
#define HWY_BEFORE_NAMESPACE() HWY_PUSH_ATTRIBUTES(",cpu=power10")
HWY_BEFORE_NAMESPACE() namespace detail {
  template <typename, size_t, int> struct CappedTagChecker {};
}
template <typename T, size_t kLimit, int kPow2 = 0>
using CappedTag = detail::CappedTagChecker<T, kLimit, kPow2>;
template <typename, size_t, size_t kMinArg, class Test> struct ForeachCappedR {
  static void Do(size_t, size_t) {
    CappedTag<int, kMinArg> d;
    Test()(int(), d);
  }
};
template <class Test> struct ForPartialVectors {
  template <typename T> void operator()(T) {
    ForeachCappedR<T, 1, 1, Test>::Do(1, 1);
  }
};
struct TestFloorLog2 {
  template <class T, class DF> void operator()(T, DF) { PreventElision(); }
};
void TestAllFloorLog2() { ForPartialVectors<TestFloorLog2>()(float()); }

Reply via email to