|
1 | 1 | //@ compile-flags: -C opt-level=1 -Z merge-functions=disabled
|
2 | 2 | //@ only-x86_64
|
| 3 | +//@ revisions: llvm-pre-20 llvm-20 |
| 4 | +//@[llvm-20]min-llvm-version: 20 |
| 5 | +//@[llvm-pre-20]ignore-llvm-version: 20 - 99 |
3 | 6 |
|
4 | 7 | #![crate_type = "lib"]
|
5 | 8 |
|
@@ -77,11 +80,17 @@ pub fn check_ge_direct(a: TwoTuple, b: TwoTuple) -> bool {
|
77 | 80 | // CHECK-SAME: (i16 noundef %[[A0:.+]], i16 noundef %[[A1:.+]], i16 noundef %[[B0:.+]], i16 noundef %[[B1:.+]])
|
78 | 81 | #[no_mangle]
|
79 | 82 | pub fn check_lt_via_cmp(a: TwoTuple, b: TwoTuple) -> bool {
|
80 |
| - // CHECK-DAG: %[[EQ:.+]] = icmp eq i16 %[[A0]], %[[B0]] |
81 |
| - // CHECK-DAG: %[[CMP0:.+]] = icmp slt i16 %[[A0]], %[[B0]] |
82 |
| - // CHECK-DAG: %[[CMP1:.+]] = icmp ult i16 %[[A1]], %[[B1]] |
83 |
| - // CHECK: %[[R:.+]] = select i1 %[[EQ]], i1 %[[CMP1]], i1 %[[CMP0]] |
84 |
| - // CHECK: ret i1 %[[R]] |
| 83 | + // llvm-20-DAG: %[[CMP0:.+]] = tail call noundef range(i8 -1, 2) i8 @llvm.scmp.i8.i16(i16 %[[A0]], i16 %[[B0]]) |
| 84 | + // llvm-20-DAG: %[[EQ:.+]] = icmp eq i16 %[[A0]], %[[B0]] |
| 85 | + // llvm-20-DAG: %[[CMP1:.+]] = tail call range(i8 -1, 2) i8 @llvm.ucmp.i8.i16(i16 %[[A1]], i16 %[[B1]]) |
| 86 | + // llvm-20: %[[S:.+]] = select i1 %[[EQ]], i8 %[[CMP1]], i8 %[[CMP0]] |
| 87 | + // llvm-20: %[[R:.+]] = icmp eq i8 %[[S]], -1 |
| 88 | + // llvm-20: ret i1 %[[R]] |
| 89 | + // llvm-pre-20-DAG: icmp eq i16 %[[A0]], %[[B0]] |
| 90 | + // llvm-pre-20-DAG: %[[CMP0:.+]] = icmp slt i16 %[[A0]], %[[B0]] |
| 91 | + // llvm-pre-20-DAG: %[[CMP1:.+]] = icmp ult i16 %[[A1]], %[[B1]] |
| 92 | + // llvm-pre-20: %[[R:.+]] = select i1 %[[EQ]], i1 %[[CMP1]], i1 %[[CMP0]] |
| 93 | + // llvm-pre-20: ret i1 %[[R]] |
85 | 94 | Ord::cmp(&a, &b).is_lt()
|
86 | 95 | }
|
87 | 96 |
|
|
0 commit comments