mirror of
				https://github.com/postgres/postgres.git
				synced 2025-10-31 00:03:57 -04: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