[C++][SIMD] Avoid one-definition-rule violation of arrow::internal::BitmapWriter
without depending on -O2
#36902
Labels
arrow::internal::BitmapWriter
without depending on -O2
#36902
Describe the enhancement requested
Contexts:
We have runtime SIMD dispatch feature. For example, it's used in
cpp/src/parquet/level_conversion.cc
to run BMI2 basedDefLevelsToBitmap
implementation if available.DefLevelsToBitmap
(DefLevelsToBitmapSimd
) is implemented incpp/src/parquet/level_conversion_inc.h
and it's built with/without BMI2.DefLevelsToBitmapSimd
usesarrow::internal::BitmapWriter
. Ifarrow::internal::BitmapWriter
inDefLevelsToBitmapSimd
is not inlined, one-definition-rule violation is happen. If it's happen,libparquet.dylib
has twoBitmapWriter
definitions for with/without BMI2. If BMI2 versionBitmapWriter
is used on BMI2 unavailable machine, "illegal opcode" is happen.GH-14342 resolved this by forcing to use
-O2
to enforce inlining. But it doesn't work with Homebrew. Because Homebrew overrides-O*
specified by us.If we can avoid one-definition-rule violation of
arrow::internal::BitmapWriter
without depending on-O2
, we can provide a Homebrew bottle that can use the BMI2 based implementation on machines that support BMI2.Component(s)
C++
The text was updated successfully, but these errors were encountered: