From aa77f39ccf2786b864206f24e85661eee63022a8 Mon Sep 17 00:00:00 2001 From: Andrea Canciani Date: Mon, 4 Jan 2016 17:35:06 +0100 Subject: [PATCH] Improve the range comparison As mentioned in #29734, the range comparison closure can be improved. The LLVM IR and the assembly from the new version are much simpler and unfortunately we cannot rely on the compiler to optimise this much, as it would need to know that `lo <= hi`. Besides from simpler code, there might also be a performance advantage, although it is unlikely to appear on benchmarks, as we are doing a binary search, which should always involve few comparisons. The code is available on the playpen for ease of comparison: http://is.gd/4raMmH --- src/etc/unicode.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/etc/unicode.py b/src/etc/unicode.py index 57bb36ce994..10b864a902d 100755 --- a/src/etc/unicode.py +++ b/src/etc/unicode.py @@ -279,12 +279,12 @@ def emit_bsearch_range_table(f): fn bsearch_range_table(c: char, r: &'static [(char, char)]) -> bool { use core::cmp::Ordering::{Equal, Less, Greater}; r.binary_search_by(|&(lo, hi)| { - if lo <= c && c <= hi { - Equal + if c < lo { + Greater } else if hi < c { Less } else { - Greater + Equal } }) .is_ok()