//@ 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); } }