Skip to content

Commit bc8bdf7

Browse files
AntoinePrvthisisnic
authored andcommitted
apacheGH-49579: [C++] Fix xsimd 14.1.0 build failure (apache#49580)
### Rationale for this change Fix the build on MacOS with newest xsimd version. A fix for an internal bug in xsimd had been added in apacheGH-49449 apacheGH-49450 to boost performances. Now that the fix has been merged in xsimd 14.1.0, the internals have changed leading to the failure. The ported fix is kept for older xsimd versions until we can set a minimum xsimd version of 14.1.0. ### What changes are included in this PR? Remove a backported fix on xsimd versions that include it. ### Are these changes tested? Yes. ### Are there any user-facing changes? No. * GitHub Issue: apache#49579 Authored-by: AntoinePrv <AntoinePrv@users.noreply.github.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
1 parent b9a0d42 commit bc8bdf7

File tree

1 file changed

+16
-10
lines changed

1 file changed

+16
-10
lines changed

cpp/src/arrow/util/bpacking_simd_kernel_internal.h

Lines changed: 16 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -153,14 +153,15 @@ template <typename Arch>
153153
constexpr bool IsNeon = std::is_base_of_v<xsimd::neon, Arch>;
154154

155155
/// Wrapper around ``xsimd::bitwise_lshift`` with optimizations for non implemented sizes.
156-
//
157-
// We replace the variable left shift by a variable multiply with a power of two.
158-
//
159-
// This trick is borrowed from Daniel Lemire and Leonid Boytsov, Decoding billions of
160-
// integers per second through vectorization, Software Practice & Experience 45 (1), 2015.
161-
// http://arxiv.org/abs/1209.2137
162-
//
156+
///
157+
/// We replace the variable left shift by a variable multiply with a power of two.
158+
///
159+
/// This trick is borrowed from Daniel Lemire and Leonid Boytsov, Decoding billions of
160+
/// integers per second through vectorization, Software Practice & Experience 45 (1),
161+
/// 2015. http://arxiv.org/abs/1209.2137
162+
///
163163
/// TODO(xsimd) Tracking in https://github.com/xtensor-stack/xsimd/pull/1220
164+
/// When migrating, be sure to use batch_constant overload, and not the batch one.
164165
template <typename Arch, typename Int, Int... kShifts>
165166
auto left_shift(const xsimd::batch<Int, Arch>& batch,
166167
xsimd::batch_constant<Int, Arch, kShifts...> shifts)
@@ -200,14 +201,16 @@ auto left_shift(const xsimd::batch<Int, Arch>& batch,
200201
return xsimd::bitwise_cast<Int>(shifted0 | shifted1);
201202
}
202203

203-
// TODO(xsimd) bug fixed likely in xsimd>14.0.0
204+
// TODO(xsimd) bug fixed in xsimd 14.1.0
204205
// https://github.com/xtensor-stack/xsimd/pull/1266
206+
#if XSIMD_VERSION_MAJOR < 14 || ((XSIMD_VERSION_MAJOR == 14) && XSIMD_VERSION_MINOR == 0)
205207
if constexpr (IsNeon<Arch>) {
206208
using SInt = std::make_signed_t<Int>;
207209
constexpr auto signed_shifts =
208210
xsimd::batch_constant<SInt, Arch, static_cast<SInt>(kShifts)...>();
209211
return xsimd::kernel::bitwise_lshift(batch, signed_shifts.as_batch(), Arch{});
210212
}
213+
#endif
211214

212215
return batch << shifts;
213216
}
@@ -237,7 +240,8 @@ auto right_shift_by_excess(const xsimd::batch<Int, Arch>& batch,
237240
constexpr auto IntSize = sizeof(Int);
238241

239242
// Architecture for which there is no variable right shift but a larger fallback exists.
240-
/// TODO(xsimd) Tracking for Avx2 in https://github.com/xtensor-stack/xsimd/pull/1220
243+
// TODO(xsimd) Tracking for Avx2 in https://github.com/xtensor-stack/xsimd/pull/1220
244+
// When migrating, be sure to use batch_constant overload, and not the batch one.
241245
if constexpr (kIsAvx2 && (IntSize == sizeof(uint8_t) || IntSize == sizeof(uint16_t))) {
242246
using twice_uint = SizedUint<2 * IntSize>;
243247

@@ -265,14 +269,16 @@ auto right_shift_by_excess(const xsimd::batch<Int, Arch>& batch,
265269
return xsimd::bitwise_rshift<kMaxRShift>(left_shift(batch, kLShifts));
266270
}
267271

268-
// TODO(xsimd) bug fixed likely in xsimd>14.0.0
272+
// TODO(xsimd) bug fixed in xsimd 14.1.0
269273
// https://github.com/xtensor-stack/xsimd/pull/1266
274+
#if XSIMD_VERSION_MAJOR < 14 || ((XSIMD_VERSION_MAJOR == 14) && XSIMD_VERSION_MINOR == 0)
270275
if constexpr (IsNeon<Arch>) {
271276
using SInt = std::make_signed_t<Int>;
272277
constexpr auto signed_shifts =
273278
xsimd::batch_constant<SInt, Arch, static_cast<SInt>(kShifts)...>();
274279
return xsimd::kernel::bitwise_rshift(batch, signed_shifts.as_batch(), Arch{});
275280
}
281+
#endif
276282

277283
return batch >> shifts;
278284
}

0 commit comments

Comments
 (0)