mirror of
https://github.com/rust-lang/rust.git
synced 2025-04-29 19:47:38 +00:00
31 lines
836 B
Rust
31 lines
836 B
Rust
![]() |
//@ compile-flags: -O
|
||
|
|
||
|
#![crate_type = "lib"]
|
||
|
|
||
|
// Ensure that the simple case of rotating by a constant 1 optimizes to the obvious thing
|
||
|
|
||
|
// CHECK-LABEL: @rotate_left_by_one
|
||
|
#[no_mangle]
|
||
|
pub fn rotate_left_by_one(slice: &mut [i32]) {
|
||
|
// CHECK-NOT: phi
|
||
|
// CHECK-NOT: call
|
||
|
// CHECK-NOT: load
|
||
|
// CHECK-NOT: store
|
||
|
// CHECK-NOT: getelementptr
|
||
|
// CHECK: %[[END:.+]] = getelementptr
|
||
|
// CHECK-NEXT: %[[DIM:.+]] = getelementptr
|
||
|
// CHECK-NEXT: %[[LAST:.+]] = load
|
||
|
// CHECK-NEXT: %[[FIRST:.+]] = shl
|
||
|
// CHECK-NEXT: call void @llvm.memmove
|
||
|
// CHECK-NEXT: store i32 %[[LAST]], ptr %[[DIM:.+]]
|
||
|
// CHECK-NOT: phi
|
||
|
// CHECK-NOT: call
|
||
|
// CHECK-NOT: load
|
||
|
// CHECK-NOT: store
|
||
|
// CHECK-NOT: getelementptr
|
||
|
// CHECK: ret void
|
||
|
if !slice.is_empty() {
|
||
|
slice.rotate_left(1);
|
||
|
}
|
||
|
}
|