Skip to content

Commit efb96af

Browse files
authored
Rollup merge of rust-lang#109895 - nikic:llvm-16-tests, r=cuviper
Add codegen tests for issues fixed by LLVM 16 Fixes rust-lang#75978. Fixes rust-lang#99960. Fixes rust-lang#101048. Fixes rust-lang#101082. Fixes rust-lang#101814. Fixes rust-lang#103132. Fixes rust-lang#103327.
2 parents 30458d1 + 73f40d4 commit efb96af

7 files changed

+116
-0
lines changed

tests/codegen/issues/issue-101048.rs

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// compile-flags: -O
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn all_zero(data: &[u64]) -> bool {
8+
// CHECK-LABEL: @all_zero(
9+
// CHECK: [[PHI:%.*]] = phi i1
10+
// CHECK-NOT: phi i8
11+
// CHECK-NOT: zext
12+
data.iter().copied().fold(true, |acc, x| acc & (x == 0))
13+
}

tests/codegen/issues/issue-101082.rs

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// compile-flags: -O
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn test() -> usize {
8+
// CHECK-LABEL: @test(
9+
// CHECK: ret i64 165
10+
let values = [23, 16, 54, 3, 60, 9];
11+
let mut acc = 0;
12+
for item in values {
13+
acc += item;
14+
}
15+
acc
16+
}

tests/codegen/issues/issue-101814.rs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// compile-flags: -O
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn test(a: [i32; 10]) -> i32 {
8+
// CHECK-LABEL: @test(
9+
// CHECK: [[L1:%.+]] = load i32
10+
// CHECK: [[L2:%.+]] = load i32
11+
// CHECK: [[R:%.+]] = add i32 [[L1]], [[L2]]
12+
// CHECK: ret i32 [[R]]
13+
let mut sum = 0;
14+
for v in a.iter().skip(8) {
15+
sum += v;
16+
}
17+
18+
sum
19+
}

tests/codegen/issues/issue-103132.rs

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// compile-flags: -O -C overflow-checks
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn test(arr: &[u8], weight: u32) {
8+
// CHECK-LABEL: @test(
9+
// CHECK-NOT: panic
10+
let weight = weight.min(256 * 256 * 256);
11+
12+
for x in arr {
13+
assert!(weight <= 256 * 256 * 256);
14+
let result = *x as u32 * weight;
15+
}
16+
}

tests/codegen/issues/issue-103327.rs

+18
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
// compile-flags: -O
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn test(a: i32, b: i32) -> bool {
8+
// CHECK-LABEL: @test(
9+
// CHECK: ret i1 true
10+
let c1 = (a >= 0) && (a <= 10);
11+
let c2 = (b >= 0) && (b <= 20);
12+
13+
if c1 & c2 {
14+
a + 100 != b
15+
} else {
16+
true
17+
}
18+
}

tests/codegen/issues/issue-75978.rs

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
// compile-flags: -O
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn test() -> u32 {
8+
// CHECK-LABEL: @test(
9+
// CHECK: ret i32 13
10+
let s = [1, 2, 3, 4, 5, 6, 7];
11+
12+
let mut iter = s.iter();
13+
let mut sum = 0;
14+
while let Some(_) = iter.next() {
15+
sum += iter.next().map_or(1, |&x| x)
16+
}
17+
18+
sum
19+
}

tests/codegen/issues/issue-99960.rs

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
// compile-flags: -O
2+
// min-llvm-version: 16
3+
4+
#![crate_type = "lib"]
5+
6+
#[no_mangle]
7+
pub fn test(dividend: i64, divisor: i64) -> Option<i64> {
8+
// CHECK-LABEL: @test(
9+
// CHECK-NOT: panic
10+
if dividend > i64::min_value() && divisor != 0 {
11+
Some(dividend / divisor)
12+
} else {
13+
None
14+
}
15+
}

0 commit comments

Comments
 (0)