Commit fd734f38 authored by Jeff Davis's avatar Jeff Davis

Use pg_bitutils for HyperLogLog.

Using pg_leftmost_one_post32() yields substantial performance benefits.

Backpatching to version 13 because HLL is used for HashAgg
improvements in 9878b643, which was also backpatched to 13.

Reviewed-by: Peter Geoghegan
Discussion: https://postgr.es/m/CAH2-WzkGvDKVDo+0YvfvZ+1CE=iCi88DCOGFF3i1hTGGaxcKPw@mail.gmail.com
Backpatch-through: 13
parent f1af75c5
......@@ -49,6 +49,7 @@
#include <math.h>
#include "lib/hyperloglog.h"
#include "port/pg_bitutils.h"
#define POW_2_32 (4294967296.0)
#define NEG_POW_2_32 (-4294967296.0)
......@@ -242,11 +243,13 @@ rho(uint32 x, uint8 b)
{
uint8 j = 1;
while (j <= b && !(x & 0x80000000))
{
j++;
x <<= 1;
}
if (x == 0)
return b + 1;
j = 32 - pg_leftmost_one_pos32(x);
if (j > b)
return b + 1;
return j;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment