9prady9 commented on a change in pull request #11674:
URL: https://github.com/apache/arrow/pull/11674#discussion_r748737834



##########
File path: cpp/src/arrow/util/bitmap_ops.cc
##########
@@ -237,71 +237,105 @@ bool OptionalBitmapEquals(const std::shared_ptr<Buffer>& 
left, int64_t left_offs
 
 namespace {
 
-template <template <typename> class BitOp>
-void AlignedBitmapOp(const uint8_t* left, int64_t left_offset, const uint8_t* 
right,
-                     int64_t right_offset, uint8_t* out, int64_t out_offset,
-                     int64_t length) {
+template <template <typename> class BitOp, bool ComputeNewValidityCount>
+int64_t AlignedBitmapOp(const uint8_t* left, int64_t left_offset, const 
uint8_t* right,
+                        int64_t right_offset, uint8_t* out, int64_t out_offset,
+                        int64_t length) {
   BitOp<uint8_t> op;
   DCHECK_EQ(left_offset % 8, right_offset % 8);
   DCHECK_EQ(left_offset % 8, out_offset % 8);
 
+  uint8_t* outFront = out;
   const int64_t nbytes = BitUtil::BytesForBits(length + left_offset % 8);
   left += left_offset / 8;
   right += right_offset / 8;
   out += out_offset / 8;
+  uint64_t outPopCount = 0;
   for (int64_t i = 0; i < nbytes; ++i) {
     out[i] = op(left[i], right[i]);
   }
+  if (ComputeNewValidityCount) {
+    outPopCount = CountSetBits(outFront, out_offset, length);
+  }
+  return outPopCount;
 }
 
-template <template <typename> class BitOp>
-void UnalignedBitmapOp(const uint8_t* left, int64_t left_offset, const 
uint8_t* right,
-                       int64_t right_offset, uint8_t* out, int64_t out_offset,
-                       int64_t length) {
+template <template <typename> class BitOp, bool ComputeNewValidityCount>

Review comment:
       No, there is an performance difference, quite good I would think (first 
two columns) - for the aligned code-path. Hence, I added the template bool 
expecting the compiler to optimize out the validity count calculation when it 
is requested.




-- 
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: github-unsubscr...@arrow.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


Reply via email to