30 lines
847 B
Rust
30 lines
847 B
Rust
//@ compile-flags: -Copt-level=3
|
|
|
|
#![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);
|
|
}
|
|
}
|