CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
549 lines
14 KiB
LLVM
549 lines
14 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 5
|
|
; RUN: llc < %s -mtriple=aarch64 | FileCheck %s
|
|
|
|
|
|
define i1 @lt8_u8(i8 %0) {
|
|
; CHECK-LABEL: lt8_u8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: tst w0, #0xf8
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i8 %0, 8
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt32_u8(i8 %0) {
|
|
; CHECK-LABEL: lt32_u8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: tst w0, #0xe0
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i8 %0, 32
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt64_u8(i8 %0) {
|
|
; CHECK-LABEL: lt64_u8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: tst w0, #0xc0
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i8 %0, 64
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt8_u32(i32 %0) {
|
|
; CHECK-LABEL: lt8_u32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp w0, #8
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i32 %0, 8
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt32_u32(i32 %0) {
|
|
; CHECK-LABEL: lt32_u32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp w0, #32
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i32 %0, 32
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt64_u32(i32 %0) {
|
|
; CHECK-LABEL: lt64_u32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp w0, #64
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i32 %0, 64
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt8_u64(i64 %0) {
|
|
; CHECK-LABEL: lt8_u64:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp x0, #8
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i64 %0, 8
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt32_u64(i64 %0) {
|
|
; CHECK-LABEL: lt32_u64:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp x0, #32
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i64 %0, 32
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt64_u64(i64 %0) {
|
|
; CHECK-LABEL: lt64_u64:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp x0, #64
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i64 %0, 64
|
|
ret i1 %2
|
|
}
|
|
|
|
define i1 @lt8_u16_and_5(i8 %0) {
|
|
; CHECK-LABEL: lt8_u16_and_5:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov w8, wzr
|
|
; CHECK-NEXT: cmp w8, #0
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = and i8 %0, 5
|
|
%3 = icmp ult i8 %2, 16
|
|
ret i1 %3
|
|
}
|
|
|
|
define i1 @lt8_u16_and_19(i8 %0) {
|
|
; CHECK-LABEL: lt8_u16_and_19:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: tst w0, #0x10
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = and i8 %0, 19
|
|
%3 = icmp ult i8 %2, 16
|
|
ret i1 %3
|
|
}
|
|
|
|
define i1 @lt32_u16_and_7(i32 %0) {
|
|
; CHECK-LABEL: lt32_u16_and_7:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov w8, wzr
|
|
; CHECK-NEXT: cmp w8, #0
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = and i32 %0, 7
|
|
%3 = icmp ult i32 %2, 16
|
|
ret i1 %3
|
|
}
|
|
|
|
define i1 @lt32_u16_and_21(i32 %0) {
|
|
; CHECK-LABEL: lt32_u16_and_21:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: tst w0, #0x10
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = and i32 %0, 21
|
|
%3 = icmp ult i32 %2, 16
|
|
ret i1 %3
|
|
}
|
|
|
|
define i1 @lt64_u16_and_9(i64 %0) {
|
|
; CHECK-LABEL: lt64_u16_and_9:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov x8, xzr
|
|
; CHECK-NEXT: cmp x8, #0
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = and i64 %0, 9
|
|
%3 = icmp ult i64 %2, 16
|
|
ret i1 %3
|
|
}
|
|
|
|
define i1 @lt64_u16_and_23(i64 %0) {
|
|
; CHECK-LABEL: lt64_u16_and_23:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: tst x0, #0x10
|
|
; CHECK-NEXT: cset w0, eq
|
|
; CHECK-NEXT: ret
|
|
%2 = and i64 %0, 23
|
|
%3 = icmp ult i64 %2, 16
|
|
ret i1 %3
|
|
}
|
|
|
|
define i1 @test_disjoint(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: tst w9, w8
|
|
; CHECK-NEXT: cset w8, eq
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%5 = and i32 %3, %4
|
|
%6 = icmp eq i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint2(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint2:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: tst w9, w8
|
|
; CHECK-NEXT: cset w8, gt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%5 = and i32 %3, %4
|
|
%6 = icmp sgt i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint3(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint3:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: tst w9, w8
|
|
; CHECK-NEXT: cset w8, mi
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%5 = and i32 %3, %4
|
|
%6 = icmp slt i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint4(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint4:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: and w8, w9, w8
|
|
; CHECK-NEXT: cmp w8, #1
|
|
; CHECK-NEXT: cset w8, lt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%5 = and i32 %3, %4
|
|
%6 = icmp sle i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint_inverse_4(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint_inverse_4:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: bic w8, w9, w8
|
|
; CHECK-NEXT: cmp w8, #1
|
|
; CHECK-NEXT: cset w8, lt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%not = xor i32 %4, -1
|
|
%5 = and i32 %3, %not
|
|
%6 = icmp sle i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint_inverse(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint_inverse:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: bics wzr, w9, w8
|
|
; CHECK-NEXT: cset w8, eq
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%not = xor i32 %4, -1
|
|
%5 = and i32 %3, %not
|
|
%6 = icmp eq i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint2_inverse(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint2_inverse:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: bics wzr, w9, w8
|
|
; CHECK-NEXT: cset w8, gt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%not = xor i32 %4, -1
|
|
%5 = and i32 %3, %not
|
|
%6 = icmp sgt i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint3_inverse(i1 %0, i32 %1, i32 %2) {
|
|
; CHECK-LABEL: test_disjoint3_inverse:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr w9, w2, #0x800000
|
|
; CHECK-NEXT: lsl w8, w8, w1
|
|
; CHECK-NEXT: bics wzr, w9, w8
|
|
; CHECK-NEXT: cset w8, mi
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i32 %2, 8388608
|
|
%4 = shl nuw i32 1, %1
|
|
%not = xor i32 %4, -1
|
|
%5 = and i32 %3, %not
|
|
%6 = icmp slt i32 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: tst x9, x8
|
|
; CHECK-NEXT: cset w8, eq
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%5 = and i64 %3, %4
|
|
%6 = icmp eq i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint2_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint2_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: tst x9, x8
|
|
; CHECK-NEXT: cset w8, gt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%5 = and i64 %3, %4
|
|
%6 = icmp sgt i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint3_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint3_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: tst x9, x8
|
|
; CHECK-NEXT: cset w8, mi
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%5 = and i64 %3, %4
|
|
%6 = icmp slt i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint4_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint4_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: and x8, x9, x8
|
|
; CHECK-NEXT: cmp x8, #1
|
|
; CHECK-NEXT: cset w8, lt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%5 = and i64 %3, %4
|
|
%6 = icmp sle i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint_inverse_4_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint_inverse_4_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: bic x8, x9, x8
|
|
; CHECK-NEXT: cmp x8, #1
|
|
; CHECK-NEXT: cset w8, lt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%not = xor i64 %4, -1
|
|
%5 = and i64 %3, %not
|
|
%6 = icmp sle i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint_inverse_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint_inverse_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: bics xzr, x9, x8
|
|
; CHECK-NEXT: cset w8, eq
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%not = xor i64 %4, -1
|
|
%5 = and i64 %3, %not
|
|
%6 = icmp eq i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint2_inverse_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint2_inverse_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: bics xzr, x9, x8
|
|
; CHECK-NEXT: cset w8, gt
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%not = xor i64 %4, -1
|
|
%5 = and i64 %3, %not
|
|
%6 = icmp sgt i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
define i1 @test_disjoint3_inverse_64(i1 %0, i64 %1, i64 %2) {
|
|
; CHECK-LABEL: test_disjoint3_inverse_64:
|
|
; CHECK: // %bb.0: // %entry
|
|
; CHECK-NEXT: mov w8, #1 // =0x1
|
|
; CHECK-NEXT: orr x9, x2, #0x80000000000000
|
|
; CHECK-NEXT: lsl x8, x8, x1
|
|
; CHECK-NEXT: bics xzr, x9, x8
|
|
; CHECK-NEXT: cset w8, mi
|
|
; CHECK-NEXT: orr w8, w0, w8
|
|
; CHECK-NEXT: and w0, w8, #0x1
|
|
; CHECK-NEXT: ret
|
|
entry:
|
|
%3 = or disjoint i64 %2, 36028797018963968
|
|
%4 = shl nuw i64 1, %1
|
|
%not = xor i64 %4, -1
|
|
%5 = and i64 %3, %not
|
|
%6 = icmp slt i64 %5, 0
|
|
%7 = select i1 %0, i1 true, i1 %6
|
|
ret i1 %7
|
|
}
|
|
|
|
; negative test
|
|
define i1 @lt3_u8(i8 %0) {
|
|
; CHECK-LABEL: lt3_u8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: and w8, w0, #0xff
|
|
; CHECK-NEXT: cmp w8, #3
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i8 %0, 3
|
|
ret i1 %2
|
|
}
|
|
|
|
; negative test
|
|
define i1 @lt3_u32(i32 %0) {
|
|
; CHECK-LABEL: lt3_u32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp w0, #3
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i32 %0, 3
|
|
ret i1 %2
|
|
}
|
|
|
|
; negative test
|
|
define i1 @lt3_u64(i64 %0) {
|
|
; CHECK-LABEL: lt3_u64:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: cmp x0, #3
|
|
; CHECK-NEXT: cset w0, lo
|
|
; CHECK-NEXT: ret
|
|
%2 = icmp ult i64 %0, 3
|
|
ret i1 %2
|
|
}
|
|
|
|
; negative test
|
|
define i32 @lt32_u16_multiple_use(i32 %0) {
|
|
; CHECK-LABEL: lt32_u16_multiple_use:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: mov w8, #21 // =0x15
|
|
; CHECK-NEXT: mov w9, #10 // =0xa
|
|
; CHECK-NEXT: and w8, w0, w8
|
|
; CHECK-NEXT: cmp w8, #16
|
|
; CHECK-NEXT: orr w8, w8, w9
|
|
; CHECK-NEXT: cset w10, lo
|
|
; CHECK-NEXT: mul w0, w8, w10
|
|
; CHECK-NEXT: ret
|
|
%2 = and i32 %0, 21
|
|
%3 = icmp ult i32 %2, 16
|
|
%4 = add i32 %2, 10
|
|
%5 = zext i1 %3 to i32
|
|
%6 = mul i32 %4, %5
|
|
ret i32 %6
|
|
}
|