Avoid unnecessary division in interval_cmp_value().
Splitting the time field into days and microseconds is pretty useless when we're just going to recombine those values. It's unclear if anyone will notice the speedup in real-world cases, but a cycle shaved is a cycle earned. Discussion: https://postgr.es/m/2629129.1632675713@sss.pgh.pa.us
This commit is contained in:
parent
7c1d8a243f
commit
e94c1a55da
@ -2352,20 +2352,17 @@ static inline INT128
|
|||||||
interval_cmp_value(const Interval *interval)
|
interval_cmp_value(const Interval *interval)
|
||||||
{
|
{
|
||||||
INT128 span;
|
INT128 span;
|
||||||
int64 dayfraction;
|
|
||||||
int64 days;
|
int64 days;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Separate time field into days and dayfraction, then add the month and
|
* Combine the month and day fields into an integral number of days.
|
||||||
* day fields to the days part. We cannot overflow int64 days here.
|
* Because the inputs are int32, int64 arithmetic suffices here.
|
||||||
*/
|
*/
|
||||||
dayfraction = interval->time % USECS_PER_DAY;
|
days = interval->month * INT64CONST(30);
|
||||||
days = interval->time / USECS_PER_DAY;
|
|
||||||
days += interval->month * INT64CONST(30);
|
|
||||||
days += interval->day;
|
days += interval->day;
|
||||||
|
|
||||||
/* Widen dayfraction to 128 bits */
|
/* Widen time field to 128 bits */
|
||||||
span = int64_to_int128(dayfraction);
|
span = int64_to_int128(interval->time);
|
||||||
|
|
||||||
/* Scale up days to microseconds, forming a 128-bit product */
|
/* Scale up days to microseconds, forming a 128-bit product */
|
||||||
int128_add_int64_mul_int64(&span, days, USECS_PER_DAY);
|
int128_add_int64_mul_int64(&span, days, USECS_PER_DAY);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user