Add a set of tests for LLVM 19
This commit is contained in:
parent
1df0458781
commit
b5c453d7a2
20
tests/codegen/issues/issue-107681-unwrap_unchecked.rs
Normal file
20
tests/codegen/issues/issue-107681-unwrap_unchecked.rs
Normal file
@ -0,0 +1,20 @@
|
||||
//@ compile-flags: -O
|
||||
//@ min-llvm-version: 19
|
||||
|
||||
// Test for #107681.
|
||||
// Make sure we don't create `br` or `select` instructions.
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
use std::iter::Copied;
|
||||
use std::slice::Iter;
|
||||
|
||||
#[no_mangle]
|
||||
pub unsafe fn foo(x: &mut Copied<Iter<'_, u32>>) -> u32 {
|
||||
// CHECK-LABEL: @foo(
|
||||
// CHECK-NOT: br
|
||||
// CHECK-NOT: select
|
||||
// CHECK: [[RET:%.*]] = load i32, ptr
|
||||
// CHECK-NEXT: ret i32 [[RET]]
|
||||
x.next().unwrap_unchecked()
|
||||
}
|
23
tests/codegen/issues/issue-118306.rs
Normal file
23
tests/codegen/issues/issue-118306.rs
Normal file
@ -0,0 +1,23 @@
|
||||
//@ compile-flags: -O
|
||||
//@ min-llvm-version: 19
|
||||
//@ only-x86_64
|
||||
|
||||
// Test for #118306.
|
||||
// Make sure we don't create `br` or `select` instructions.
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
#[no_mangle]
|
||||
pub fn branchy(input: u64) -> u64 {
|
||||
// CHECK-LABEL: @branchy(
|
||||
// CHECK-NEXT: start:
|
||||
// CHECK-NEXT: [[_2:%.*]] = and i64 [[INPUT:%.*]], 3
|
||||
// CHECK-NEXT: [[SWITCH_GEP:%.*]] = getelementptr inbounds [4 x i64], ptr @switch.table.branchy, i64 0, i64 [[_2]]
|
||||
// CHECK-NEXT: [[SWITCH_LOAD:%.*]] = load i64, ptr [[SWITCH_GEP]]
|
||||
// CHECK-NEXT: ret i64 [[SWITCH_LOAD]]
|
||||
match input % 4 {
|
||||
1 | 2 => 1,
|
||||
3 => 2,
|
||||
_ => 0,
|
||||
}
|
||||
}
|
24
tests/codegen/issues/issue-126585.rs
Normal file
24
tests/codegen/issues/issue-126585.rs
Normal file
@ -0,0 +1,24 @@
|
||||
//@ compile-flags: -Copt-level=s
|
||||
//@ min-llvm-version: 19
|
||||
//@ only-x86_64
|
||||
|
||||
// Test for #126585.
|
||||
// Ensure that this IR doesn't have extra undef phi input, which also guarantees that this asm
|
||||
// doesn't have subsequent labels and unnecessary `jmp` instructions.
|
||||
|
||||
#![crate_type = "lib"]
|
||||
|
||||
#[no_mangle]
|
||||
fn checked_div_round(a: u64, b: u64) -> Option<u64> {
|
||||
// CHECK-LABEL: @checked_div_round
|
||||
// CHECK: phi
|
||||
// CHECK-NOT: undef
|
||||
// CHECK: phi
|
||||
// CHECK-NOT: undef
|
||||
match b {
|
||||
0 => None,
|
||||
1 => Some(a),
|
||||
// `a / b` is computable and `(a % b) * 2` can not overflow since `b >= 2`.
|
||||
b => Some(a / b + if (a % b) * 2 >= b { 1 } else { 0 }),
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user