mirror of
				https://github.com/postgres/postgres.git
				synced 2025-11-04 00:02:52 -05:00 
			
		
		
		
	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)
 | 
			
		||||
{
 | 
			
		||||
	INT128		span;
 | 
			
		||||
	int64		dayfraction;
 | 
			
		||||
	int64		days;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Separate time field into days and dayfraction, then add the month and
 | 
			
		||||
	 * day fields to the days part.  We cannot overflow int64 days here.
 | 
			
		||||
	 * Combine the month and day fields into an integral number of days.
 | 
			
		||||
	 * Because the inputs are int32, int64 arithmetic suffices here.
 | 
			
		||||
	 */
 | 
			
		||||
	dayfraction = interval->time % USECS_PER_DAY;
 | 
			
		||||
	days = interval->time / USECS_PER_DAY;
 | 
			
		||||
	days += interval->month * INT64CONST(30);
 | 
			
		||||
	days = interval->month * INT64CONST(30);
 | 
			
		||||
	days += interval->day;
 | 
			
		||||
 | 
			
		||||
	/* Widen dayfraction to 128 bits */
 | 
			
		||||
	span = int64_to_int128(dayfraction);
 | 
			
		||||
	/* Widen time field to 128 bits */
 | 
			
		||||
	span = int64_to_int128(interval->time);
 | 
			
		||||
 | 
			
		||||
	/* Scale up days to microseconds, forming a 128-bit product */
 | 
			
		||||
	int128_add_int64_mul_int64(&span, days, USECS_PER_DAY);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user