// Ensure the asm for array comparisons is properly optimized.

//@ compile-flags: -C opt-level=2
//@ needs-deterministic-layouts (checks depend on tuple layout)
//@ revisions: LLVM22 LLVM23
//@ [LLVM22] max-llvm-major-version: 22
//@ [LLVM23] min-llvm-version: 23

#![crate_type = "lib"]

// CHECK-LABEL: @compare
// CHECK: start:
// CHECK-NEXT: ret i1 true
#[no_mangle]
pub fn compare() -> bool {
    let bytes = 12.5f32.to_ne_bytes();
    bytes
        == if cfg!(target_endian = "big") {
            [0x41, 0x48, 0x00, 0x00]
        } else {
            [0x00, 0x00, 0x48, 0x41]
        }
}

// CHECK-LABEL: @array_of_tuple_le
#[no_mangle]
pub fn array_of_tuple_le(a: &[(i16, u16); 2], b: &[(i16, u16); 2]) -> bool {
    // Ensure that, after all the optimizations have run, the happy path just checks
    // `eq` on each corresponding pair and moves onto the next one if it is.
    // Then there's a dedup'd comparison for the place that's different.
    // (As opposed to, say, running a full `[su]cmp` as part of checking equality.)

    // This is written quite specifically because different library code was triggering
    // <https://github.com/llvm/llvm-project/issues/132678> along the way, so this
    // has enough checks to make sure that's not happening. It doesn't need to be
    // *exactly* this IR, but be careful if you ever need to update these checks.

    // CHECK: start:
    // CHECK: %[[A00:.+]] = load i16, ptr %a
    // CHECK: %[[B00:.+]] = load i16, ptr %b
    // CHECK-NOT: cmp
    // CHECK: %[[EQ00:.+]] = icmp eq i16 %[[A00]], %[[B00]]
    // CHECK-NEXT: br i1 %[[EQ00]], label %[[L01:.+]], label %[[EXIT_S:.+]]

    // CHECK: %[[PA10:.+]] = getelementptr{{.+}}i8, ptr %a, {{i32|i64}} 4
    // CHECK: %[[PB10:.+]] = getelementptr{{.+}}i8, ptr %b, {{i32|i64}} 4
    // CHECK: %[[A10:.+]] = load i16, ptr %[[PA10]]
    // CHECK: %[[B10:.+]] = load i16, ptr %[[PB10]]
    // CHECK-NOT: cmp
    // CHECK: %[[EQ10:.+]] = icmp eq i16 %[[A10]], %[[B10]]
    // CHECK-NEXT: br i1 %[[EQ10]], label %[[L11:.+]], label %[[EXIT_S]]

    // CHECK: [[L11]]:
    // CHECK: %[[PA11:.+]] = getelementptr{{.+}}i8, ptr %a, {{i32|i64}} 6
    // CHECK: %[[PB11:.+]] = getelementptr{{.+}}i8, ptr %b, {{i32|i64}} 6
    // CHECK: %[[A11:.+]] = load i16, ptr %[[PA11]]
    // CHECK: %[[B11:.+]] = load i16, ptr %[[PB11]]
    // CHECK-NOT: cmp
    // CHECK: %[[EQ11:.+]] = icmp eq i16 %[[A11]], %[[B11]]
    // CHECK-NEXT: br i1 %[[EQ11]], label %[[DONE:.+]], label %[[EXIT_U:.+]]

    // CHECK: [[L01]]:
    // CHECK: %[[PA01:.+]] = getelementptr{{.+}}i8, ptr %a, {{i32|i64}} 2
    // CHECK: %[[PB01:.+]] = getelementptr{{.+}}i8, ptr %b, {{i32|i64}} 2
    // CHECK: %[[A01:.+]] = load i16, ptr %[[PA01]]
    // CHECK: %[[B01:.+]] = load i16, ptr %[[PB01]]
    // CHECK-NOT: cmp
    // CHECK: %[[EQ01:.+]] = icmp eq i16 %[[A01]], %[[B01]]
    // CHECK-NEXT: br i1 %[[EQ01]], label %{{.+}}, label %[[EXIT_U]]

    // CHECK: [[DONE]]:
    // LLVM22: %[[RET:.+]] = phi i1 [ %{{.+}}, %[[EXIT_S]] ], [ %{{.+}}, %[[EXIT_U]] ], [ true, %[[L11]] ]
    // LLVM23: %[[RET:.+]] = phi i1 [ %{{.+}}, %[[EXIT_U]] ], [ %{{.+}}, %[[EXIT_S]] ], [ true, %[[L11]] ]
    // CHECK: ret i1 %[[RET]]

    a <= b
}
