mirror of
https://github.com/rust-lang/rust.git
synced 2024-11-23 07:14:28 +00:00
7a2678de7d
Similar to #114370 for VecDeque instead of Vec. It now uses `core::hint::assert_unchecked`.
68 lines
1.4 KiB
Rust
68 lines
1.4 KiB
Rust
//@ compile-flags: -O
|
|
|
|
#![crate_type = "lib"]
|
|
|
|
use std::collections::VecDeque;
|
|
|
|
#[no_mangle]
|
|
// CHECK-LABEL: @noop_back(
|
|
pub fn noop_back(v: &mut VecDeque<u8>) {
|
|
// CHECK-NOT: grow
|
|
// CHECK: tail call void @llvm.assume
|
|
// CHECK-NOT: grow
|
|
// CHECK: ret
|
|
if let Some(x) = v.pop_back() {
|
|
v.push_back(x);
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
// CHECK-LABEL: @noop_front(
|
|
pub fn noop_front(v: &mut VecDeque<u8>) {
|
|
// CHECK-NOT: grow
|
|
// CHECK: tail call void @llvm.assume
|
|
// CHECK-NOT: grow
|
|
// CHECK: ret
|
|
if let Some(x) = v.pop_front() {
|
|
v.push_front(x);
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
// CHECK-LABEL: @move_byte_front_to_back(
|
|
pub fn move_byte_front_to_back(v: &mut VecDeque<u8>) {
|
|
// CHECK-NOT: grow
|
|
// CHECK: tail call void @llvm.assume
|
|
// CHECK-NOT: grow
|
|
// CHECK: ret
|
|
if let Some(x) = v.pop_front() {
|
|
v.push_back(x);
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
// CHECK-LABEL: @move_byte_back_to_front(
|
|
pub fn move_byte_back_to_front(v: &mut VecDeque<u8>) {
|
|
// CHECK-NOT: grow
|
|
// CHECK: tail call void @llvm.assume
|
|
// CHECK-NOT: grow
|
|
// CHECK: ret
|
|
if let Some(x) = v.pop_back() {
|
|
v.push_front(x);
|
|
}
|
|
}
|
|
|
|
#[no_mangle]
|
|
// CHECK-LABEL: @push_back_byte(
|
|
pub fn push_back_byte(v: &mut VecDeque<u8>) {
|
|
// CHECK: call {{.*}}grow
|
|
v.push_back(3);
|
|
}
|
|
|
|
#[no_mangle]
|
|
// CHECK-LABEL: @push_front_byte(
|
|
pub fn push_front_byte(v: &mut VecDeque<u8>) {
|
|
// CHECK: call {{.*}}grow
|
|
v.push_front(3);
|
|
}
|