1
Fork 0

Refactor some char, u8 ascii functions to be branchless

Decompose singular `matches!` with or-patterns to individual `matches!`
statements to enable branchless code output. The following functions
were changed:
- `is_ascii_alphanumeric`
- `is_ascii_hexdigit`
- `is_ascii_punctuation`

Add codegen tests

Co-authored-by: George Bateman <george.bateman16@gmail.com>
Co-authored-by: scottmcm <scottmcm@users.noreply.github.com>
This commit is contained in:
okaneco 2023-10-26 20:23:56 -04:00
parent 8396efecf7
commit 465ffc9ca7
3 changed files with 59 additions and 6 deletions

View file

@ -0,0 +1,47 @@
// Checks that these functions are branchless.
//
// compile-flags: -O
#![crate_type = "lib"]
// CHECK-LABEL: @is_ascii_alphanumeric_char
#[no_mangle]
pub fn is_ascii_alphanumeric_char(x: char) -> bool {
// CHECK-NOT: br
x.is_ascii_alphanumeric()
}
// CHECK-LABEL: @is_ascii_alphanumeric_u8
#[no_mangle]
pub fn is_ascii_alphanumeric_u8(x: u8) -> bool {
// CHECK-NOT: br
x.is_ascii_alphanumeric()
}
// CHECK-LABEL: @is_ascii_hexdigit_char
#[no_mangle]
pub fn is_ascii_hexdigit_char(x: char) -> bool {
// CHECK-NOT: br
x.is_ascii_hexdigit()
}
// CHECK-LABEL: @is_ascii_hexdigit_u8
#[no_mangle]
pub fn is_ascii_hexdigit_u8(x: u8) -> bool {
// CHECK-NOT: br
x.is_ascii_hexdigit()
}
// CHECK-LABEL: @is_ascii_punctuation_char
#[no_mangle]
pub fn is_ascii_punctuation_char(x: char) -> bool {
// CHECK-NOT: br
x.is_ascii_punctuation()
}
// CHECK-LABEL: @is_ascii_punctuation_u8
#[no_mangle]
pub fn is_ascii_punctuation_u8(x: u8) -> bool {
// CHECK-NOT: br
x.is_ascii_punctuation()
}