kou opened a new issue, #36902:
URL: https://github.com/apache/arrow/issues/36902

   ### Describe the enhancement requested
   
   Contexts:
   
   * https://github.com/apache/arrow/issues/31132#issuecomment-1378082076
   * GH-14342
   * GH-36685
   
   We have runtime SIMD dispatch feature. For example, it's used in 
`cpp/src/parquet/level_conversion.cc` to run BMI2 based `DefLevelsToBitmap` 
implementation if available.
   
   `DefLevelsToBitmap` (`DefLevelsToBitmapSimd`) is implemented in 
`cpp/src/parquet/level_conversion_inc.h` and it's built with/without BMI2. 
`DefLevelsToBitmapSimd` uses `arrow::internal::BitmapWriter`. If 
`arrow::internal::BitmapWriter` in `DefLevelsToBitmapSimd` is not inlined, 
one-definition-rule violation is happen. If it's happen, `libparquet.dylib` has 
two `BitmapWriter` definitions for with/without BMI2. If BMI2 version 
`BitmapWriter` 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++


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to