31 lines
803 B
Rust
31 lines
803 B
Rust
// Ensure the asm for array comparisons is properly optimized.
|
|
|
|
//@ compile-flags: -C opt-level=2
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
// CHECK-LABEL: @compare
|
|
// CHECK: start:
|
|
// CHECK-NEXT: ret i1 true
|
|
#[no_mangle]
|
|
pub fn compare() -> bool {
|
|
let bytes = 12.5f32.to_ne_bytes();
|
|
bytes
|
|
== if cfg!(target_endian = "big") {
|
|
[0x41, 0x48, 0x00, 0x00]
|
|
} else {
|
|
[0x00, 0x00, 0x48, 0x41]
|
|
}
|
|
}
|
|
|
|
// CHECK-LABEL: @array_of_tuple_le
|
|
// CHECK: call{{.+}}i8 @llvm.scmp.i8.i16
|
|
// CHECK: call{{.+}}i8 @llvm.ucmp.i8.i16
|
|
// CHECK: call{{.+}}i8 @llvm.scmp.i8.i16
|
|
// CHECK: call{{.+}}i8 @llvm.ucmp.i8.i16
|
|
// CHECK: %[[RET:.+]] = icmp slt i8 {{.+}}, 1
|
|
// CHECK: ret i8 %[[RET]]
|
|
#[no_mangle]
|
|
pub fn array_of_tuple_le(a: &[(i16, u16); 2], b: &[(i16, u16); 2]) -> bool {
|
|
a <= b
|
|
}
|