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
1240 lines
50 KiB
LLVM
1240 lines
50 KiB
LLVM
; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
|
|
; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s
|
|
; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE
|
|
|
|
|
|
target triple = "aarch64-unknown-linux-gnu"
|
|
|
|
;
|
|
; Masked Store
|
|
;
|
|
|
|
define void @masked_store_v4i8(ptr %dst, <4 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v4i8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.h, vl4
|
|
; CHECK-NEXT: lsl z0.h, z0.h, #15
|
|
; CHECK-NEXT: asr z0.h, z0.h, #15
|
|
; CHECK-NEXT: cmpne p1.h, p0/z, z0.h, #0
|
|
; CHECK-NEXT: mov z0.h, #0 // =0x0
|
|
; CHECK-NEXT: st1b { z0.h }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v4i8:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: ldrh w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB0_5
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB0_6
|
|
; NONEON-NOSVE-NEXT: .LBB0_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB0_7
|
|
; NONEON-NOSVE-NEXT: .LBB0_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB0_8
|
|
; NONEON-NOSVE-NEXT: .LBB0_4: // %else6
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB0_5: // %cond.store
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB0_2
|
|
; NONEON-NOSVE-NEXT: .LBB0_6: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #1]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB0_3
|
|
; NONEON-NOSVE-NEXT: .LBB0_7: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB0_4
|
|
; NONEON-NOSVE-NEXT: .LBB0_8: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #3]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v4i8(<4 x i8> zeroinitializer, ptr %dst, i32 8, <4 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v8i8(ptr %dst, <8 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v8i8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.b, vl8
|
|
; CHECK-NEXT: lsl z0.b, z0.b, #7
|
|
; CHECK-NEXT: asr z0.b, z0.b, #7
|
|
; CHECK-NEXT: cmpne p1.b, p0/z, z0.b, #0
|
|
; CHECK-NEXT: mov z0.b, #0 // =0x0
|
|
; CHECK-NEXT: st1b { z0.b }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v8i8:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]
|
|
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1]
|
|
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #5]
|
|
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldrb w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x8
|
|
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x2
|
|
; NONEON-NOSVE-NEXT: and w12, w12, #0x10
|
|
; NONEON-NOSVE-NEXT: bfxil w10, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w11, w13, #0x20
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w14, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w10, w8
|
|
; NONEON-NOSVE-NEXT: orr w10, w11, w12
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w10
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x80
|
|
; NONEON-NOSVE-NEXT: add w9, w8, w9
|
|
; NONEON-NOSVE-NEXT: and w8, w9, #0xff
|
|
; NONEON-NOSVE-NEXT: tbnz w9, #0, .LBB1_9
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB1_10
|
|
; NONEON-NOSVE-NEXT: .LBB1_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB1_11
|
|
; NONEON-NOSVE-NEXT: .LBB1_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB1_12
|
|
; NONEON-NOSVE-NEXT: .LBB1_4: // %else6
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB1_13
|
|
; NONEON-NOSVE-NEXT: .LBB1_5: // %else8
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB1_14
|
|
; NONEON-NOSVE-NEXT: .LBB1_6: // %else10
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB1_15
|
|
; NONEON-NOSVE-NEXT: .LBB1_7: // %else12
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB1_16
|
|
; NONEON-NOSVE-NEXT: .LBB1_8: // %else14
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB1_9: // %cond.store
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB1_2
|
|
; NONEON-NOSVE-NEXT: .LBB1_10: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #1]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB1_3
|
|
; NONEON-NOSVE-NEXT: .LBB1_11: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB1_4
|
|
; NONEON-NOSVE-NEXT: .LBB1_12: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #3]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB1_5
|
|
; NONEON-NOSVE-NEXT: .LBB1_13: // %cond.store7
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB1_6
|
|
; NONEON-NOSVE-NEXT: .LBB1_14: // %cond.store9
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #5]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB1_7
|
|
; NONEON-NOSVE-NEXT: .LBB1_15: // %cond.store11
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #6]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB1_8
|
|
; NONEON-NOSVE-NEXT: .LBB1_16: // %cond.store13
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #7]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v8i8(<8 x i8> zeroinitializer, ptr %dst, i32 8, <8 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v16i8(ptr %dst, <16 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v16i8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
|
|
; CHECK-NEXT: ptrue p0.b, vl16
|
|
; CHECK-NEXT: lsl z0.b, z0.b, #7
|
|
; CHECK-NEXT: asr z0.b, z0.b, #7
|
|
; CHECK-NEXT: cmpne p1.b, p0/z, z0.b, #0
|
|
; CHECK-NEXT: mov z0.b, #0 // =0x0
|
|
; CHECK-NEXT: st1b { z0.b }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v16i8:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str q0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]
|
|
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1]
|
|
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #5]
|
|
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldrb w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x8
|
|
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x2
|
|
; NONEON-NOSVE-NEXT: and w12, w12, #0x10
|
|
; NONEON-NOSVE-NEXT: bfxil w10, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w11, w13, #0x20
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w14, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w10, w8
|
|
; NONEON-NOSVE-NEXT: orr w10, w11, w12
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w10
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0xffffff80
|
|
; NONEON-NOSVE-NEXT: add w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB2_17
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB2_18
|
|
; NONEON-NOSVE-NEXT: .LBB2_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB2_19
|
|
; NONEON-NOSVE-NEXT: .LBB2_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB2_20
|
|
; NONEON-NOSVE-NEXT: .LBB2_4: // %else6
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB2_21
|
|
; NONEON-NOSVE-NEXT: .LBB2_5: // %else8
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB2_22
|
|
; NONEON-NOSVE-NEXT: .LBB2_6: // %else10
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB2_23
|
|
; NONEON-NOSVE-NEXT: .LBB2_7: // %else12
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB2_24
|
|
; NONEON-NOSVE-NEXT: .LBB2_8: // %else14
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB2_25
|
|
; NONEON-NOSVE-NEXT: .LBB2_9: // %else16
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB2_26
|
|
; NONEON-NOSVE-NEXT: .LBB2_10: // %else18
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB2_27
|
|
; NONEON-NOSVE-NEXT: .LBB2_11: // %else20
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB2_28
|
|
; NONEON-NOSVE-NEXT: .LBB2_12: // %else22
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB2_29
|
|
; NONEON-NOSVE-NEXT: .LBB2_13: // %else24
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB2_30
|
|
; NONEON-NOSVE-NEXT: .LBB2_14: // %else26
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB2_31
|
|
; NONEON-NOSVE-NEXT: .LBB2_15: // %else28
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB2_32
|
|
; NONEON-NOSVE-NEXT: .LBB2_16: // %else30
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB2_17: // %cond.store
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB2_2
|
|
; NONEON-NOSVE-NEXT: .LBB2_18: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #1]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB2_3
|
|
; NONEON-NOSVE-NEXT: .LBB2_19: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB2_4
|
|
; NONEON-NOSVE-NEXT: .LBB2_20: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #3]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB2_5
|
|
; NONEON-NOSVE-NEXT: .LBB2_21: // %cond.store7
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB2_6
|
|
; NONEON-NOSVE-NEXT: .LBB2_22: // %cond.store9
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #5]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB2_7
|
|
; NONEON-NOSVE-NEXT: .LBB2_23: // %cond.store11
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #6]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB2_8
|
|
; NONEON-NOSVE-NEXT: .LBB2_24: // %cond.store13
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #7]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB2_9
|
|
; NONEON-NOSVE-NEXT: .LBB2_25: // %cond.store15
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB2_10
|
|
; NONEON-NOSVE-NEXT: .LBB2_26: // %cond.store17
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #9]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB2_11
|
|
; NONEON-NOSVE-NEXT: .LBB2_27: // %cond.store19
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #10]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB2_12
|
|
; NONEON-NOSVE-NEXT: .LBB2_28: // %cond.store21
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #11]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB2_13
|
|
; NONEON-NOSVE-NEXT: .LBB2_29: // %cond.store23
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #12]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB2_14
|
|
; NONEON-NOSVE-NEXT: .LBB2_30: // %cond.store25
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #13]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB2_15
|
|
; NONEON-NOSVE-NEXT: .LBB2_31: // %cond.store27
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #14]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB2_16
|
|
; NONEON-NOSVE-NEXT: .LBB2_32: // %cond.store29
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #15]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v16i8(<16 x i8> zeroinitializer, ptr %dst, i32 8, <16 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v32i8(ptr %dst, <32 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v32i8:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: sub sp, sp, #32
|
|
; CHECK-NEXT: .cfi_def_cfa_offset 32
|
|
; CHECK-NEXT: ldr w8, [sp, #96]
|
|
; CHECK-NEXT: ldr w9, [sp, #88]
|
|
; CHECK-NEXT: ptrue p0.b, vl16
|
|
; CHECK-NEXT: ldr w10, [sp, #120]
|
|
; CHECK-NEXT: strb w7, [sp, #6]
|
|
; CHECK-NEXT: strb w8, [sp, #15]
|
|
; CHECK-NEXT: ldr w8, [sp, #80]
|
|
; CHECK-NEXT: strb w9, [sp, #14]
|
|
; CHECK-NEXT: ldr w9, [sp, #72]
|
|
; CHECK-NEXT: strb w8, [sp, #13]
|
|
; CHECK-NEXT: ldr w8, [sp, #64]
|
|
; CHECK-NEXT: strb w9, [sp, #12]
|
|
; CHECK-NEXT: ldr w9, [sp, #56]
|
|
; CHECK-NEXT: strb w8, [sp, #11]
|
|
; CHECK-NEXT: ldr w8, [sp, #48]
|
|
; CHECK-NEXT: strb w9, [sp, #10]
|
|
; CHECK-NEXT: ldr w9, [sp, #40]
|
|
; CHECK-NEXT: strb w8, [sp, #9]
|
|
; CHECK-NEXT: ldr w8, [sp, #32]
|
|
; CHECK-NEXT: strb w9, [sp, #8]
|
|
; CHECK-NEXT: ldr w9, [sp, #216]
|
|
; CHECK-NEXT: strb w8, [sp, #7]
|
|
; CHECK-NEXT: ldr w8, [sp, #224]
|
|
; CHECK-NEXT: strb w9, [sp, #30]
|
|
; CHECK-NEXT: ldr w9, [sp, #200]
|
|
; CHECK-NEXT: strb w8, [sp, #31]
|
|
; CHECK-NEXT: ldr w8, [sp, #208]
|
|
; CHECK-NEXT: strb w9, [sp, #28]
|
|
; CHECK-NEXT: ldr w9, [sp, #184]
|
|
; CHECK-NEXT: strb w8, [sp, #29]
|
|
; CHECK-NEXT: ldr w8, [sp, #192]
|
|
; CHECK-NEXT: strb w9, [sp, #26]
|
|
; CHECK-NEXT: ldr w9, [sp, #168]
|
|
; CHECK-NEXT: strb w8, [sp, #27]
|
|
; CHECK-NEXT: ldr w8, [sp, #176]
|
|
; CHECK-NEXT: strb w9, [sp, #24]
|
|
; CHECK-NEXT: ldr w9, [sp, #152]
|
|
; CHECK-NEXT: strb w8, [sp, #25]
|
|
; CHECK-NEXT: ldr w8, [sp, #160]
|
|
; CHECK-NEXT: strb w9, [sp, #22]
|
|
; CHECK-NEXT: ldr w9, [sp, #136]
|
|
; CHECK-NEXT: strb w8, [sp, #23]
|
|
; CHECK-NEXT: ldr w8, [sp, #144]
|
|
; CHECK-NEXT: strb w9, [sp, #20]
|
|
; CHECK-NEXT: ldr w9, [sp, #112]
|
|
; CHECK-NEXT: strb w8, [sp, #21]
|
|
; CHECK-NEXT: ldr w8, [sp, #128]
|
|
; CHECK-NEXT: strb w6, [sp, #5]
|
|
; CHECK-NEXT: strb w8, [sp, #19]
|
|
; CHECK-NEXT: ldr w8, [sp, #104]
|
|
; CHECK-NEXT: strb w5, [sp, #4]
|
|
; CHECK-NEXT: strb w4, [sp, #3]
|
|
; CHECK-NEXT: strb w3, [sp, #2]
|
|
; CHECK-NEXT: strb w2, [sp, #1]
|
|
; CHECK-NEXT: strb w1, [sp]
|
|
; CHECK-NEXT: strb w10, [sp, #18]
|
|
; CHECK-NEXT: strb w9, [sp, #17]
|
|
; CHECK-NEXT: strb w8, [sp, #16]
|
|
; CHECK-NEXT: mov w8, #16 // =0x10
|
|
; CHECK-NEXT: ldp q1, q0, [sp]
|
|
; CHECK-NEXT: lsl z0.b, z0.b, #7
|
|
; CHECK-NEXT: lsl z1.b, z1.b, #7
|
|
; CHECK-NEXT: asr z0.b, z0.b, #7
|
|
; CHECK-NEXT: asr z1.b, z1.b, #7
|
|
; CHECK-NEXT: cmpne p1.b, p0/z, z0.b, #0
|
|
; CHECK-NEXT: cmpne p2.b, p0/z, z1.b, #0
|
|
; CHECK-NEXT: mov z0.b, #0 // =0x0
|
|
; CHECK-NEXT: st1b { z0.b }, p1, [x0, x8]
|
|
; CHECK-NEXT: st1b { z0.b }, p2, [x0]
|
|
; CHECK-NEXT: add sp, sp, #32
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v32i8:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: ldr w8, [sp, #80]
|
|
; NONEON-NOSVE-NEXT: ldr w9, [sp, #88]
|
|
; NONEON-NOSVE-NEXT: sbfx w15, w7, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldr w10, [sp, #96]
|
|
; NONEON-NOSVE-NEXT: ldr w12, [sp, #104]
|
|
; NONEON-NOSVE-NEXT: ldr w11, [sp, #72]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldr w13, [sp, #120]
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldr w14, [sp, #128]
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
|
|
; NONEON-NOSVE-NEXT: ldr w16, [sp]
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldr w11, [sp, #112]
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: and w10, w12, #0x10
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w4, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w13, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w5, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w12, w12, #0x8
|
|
; NONEON-NOSVE-NEXT: and w9, w11, #0x20
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w11, w3, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w2, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w11, w11, #0x4
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x2
|
|
; NONEON-NOSVE-NEXT: orr w11, w11, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w13, #0x10
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w6, #0, #1
|
|
; NONEON-NOSVE-NEXT: bfxil w10, w1, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w11, w11, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w13, #0x20
|
|
; NONEON-NOSVE-NEXT: and w13, w15, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w15, w16, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w10, w11
|
|
; NONEON-NOSVE-NEXT: orr w10, w12, w13
|
|
; NONEON-NOSVE-NEXT: and w11, w14, #0xff80
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: and w10, w15, #0xff80
|
|
; NONEON-NOSVE-NEXT: add w11, w8, w11
|
|
; NONEON-NOSVE-NEXT: add w8, w9, w10
|
|
; NONEON-NOSVE-NEXT: bfi w8, w11, #16, #16
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB3_33
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB3_34
|
|
; NONEON-NOSVE-NEXT: .LBB3_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB3_35
|
|
; NONEON-NOSVE-NEXT: .LBB3_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB3_36
|
|
; NONEON-NOSVE-NEXT: .LBB3_4: // %else6
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB3_37
|
|
; NONEON-NOSVE-NEXT: .LBB3_5: // %else8
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB3_38
|
|
; NONEON-NOSVE-NEXT: .LBB3_6: // %else10
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB3_39
|
|
; NONEON-NOSVE-NEXT: .LBB3_7: // %else12
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB3_40
|
|
; NONEON-NOSVE-NEXT: .LBB3_8: // %else14
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB3_41
|
|
; NONEON-NOSVE-NEXT: .LBB3_9: // %else16
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB3_42
|
|
; NONEON-NOSVE-NEXT: .LBB3_10: // %else18
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB3_43
|
|
; NONEON-NOSVE-NEXT: .LBB3_11: // %else20
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB3_44
|
|
; NONEON-NOSVE-NEXT: .LBB3_12: // %else22
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB3_45
|
|
; NONEON-NOSVE-NEXT: .LBB3_13: // %else24
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB3_46
|
|
; NONEON-NOSVE-NEXT: .LBB3_14: // %else26
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB3_47
|
|
; NONEON-NOSVE-NEXT: .LBB3_15: // %else28
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB3_48
|
|
; NONEON-NOSVE-NEXT: .LBB3_16: // %else30
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #16, .LBB3_49
|
|
; NONEON-NOSVE-NEXT: .LBB3_17: // %else32
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #17, .LBB3_50
|
|
; NONEON-NOSVE-NEXT: .LBB3_18: // %else34
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #18, .LBB3_51
|
|
; NONEON-NOSVE-NEXT: .LBB3_19: // %else36
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #19, .LBB3_52
|
|
; NONEON-NOSVE-NEXT: .LBB3_20: // %else38
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #20, .LBB3_53
|
|
; NONEON-NOSVE-NEXT: .LBB3_21: // %else40
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #21, .LBB3_54
|
|
; NONEON-NOSVE-NEXT: .LBB3_22: // %else42
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #22, .LBB3_55
|
|
; NONEON-NOSVE-NEXT: .LBB3_23: // %else44
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #23, .LBB3_56
|
|
; NONEON-NOSVE-NEXT: .LBB3_24: // %else46
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #24, .LBB3_57
|
|
; NONEON-NOSVE-NEXT: .LBB3_25: // %else48
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #25, .LBB3_58
|
|
; NONEON-NOSVE-NEXT: .LBB3_26: // %else50
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #26, .LBB3_59
|
|
; NONEON-NOSVE-NEXT: .LBB3_27: // %else52
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #27, .LBB3_60
|
|
; NONEON-NOSVE-NEXT: .LBB3_28: // %else54
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #28, .LBB3_61
|
|
; NONEON-NOSVE-NEXT: .LBB3_29: // %else56
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #29, .LBB3_62
|
|
; NONEON-NOSVE-NEXT: .LBB3_30: // %else58
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #30, .LBB3_63
|
|
; NONEON-NOSVE-NEXT: .LBB3_31: // %else60
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #31, .LBB3_64
|
|
; NONEON-NOSVE-NEXT: .LBB3_32: // %else62
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB3_33: // %cond.store
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB3_2
|
|
; NONEON-NOSVE-NEXT: .LBB3_34: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #1]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB3_3
|
|
; NONEON-NOSVE-NEXT: .LBB3_35: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB3_4
|
|
; NONEON-NOSVE-NEXT: .LBB3_36: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #3]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB3_5
|
|
; NONEON-NOSVE-NEXT: .LBB3_37: // %cond.store7
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB3_6
|
|
; NONEON-NOSVE-NEXT: .LBB3_38: // %cond.store9
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #5]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB3_7
|
|
; NONEON-NOSVE-NEXT: .LBB3_39: // %cond.store11
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #6]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB3_8
|
|
; NONEON-NOSVE-NEXT: .LBB3_40: // %cond.store13
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #7]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB3_9
|
|
; NONEON-NOSVE-NEXT: .LBB3_41: // %cond.store15
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB3_10
|
|
; NONEON-NOSVE-NEXT: .LBB3_42: // %cond.store17
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #9]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB3_11
|
|
; NONEON-NOSVE-NEXT: .LBB3_43: // %cond.store19
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #10]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB3_12
|
|
; NONEON-NOSVE-NEXT: .LBB3_44: // %cond.store21
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #11]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB3_13
|
|
; NONEON-NOSVE-NEXT: .LBB3_45: // %cond.store23
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #12]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB3_14
|
|
; NONEON-NOSVE-NEXT: .LBB3_46: // %cond.store25
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #13]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB3_15
|
|
; NONEON-NOSVE-NEXT: .LBB3_47: // %cond.store27
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #14]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB3_16
|
|
; NONEON-NOSVE-NEXT: .LBB3_48: // %cond.store29
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #15]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #16, .LBB3_17
|
|
; NONEON-NOSVE-NEXT: .LBB3_49: // %cond.store31
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #16]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #17, .LBB3_18
|
|
; NONEON-NOSVE-NEXT: .LBB3_50: // %cond.store33
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #17]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #18, .LBB3_19
|
|
; NONEON-NOSVE-NEXT: .LBB3_51: // %cond.store35
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #18]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #19, .LBB3_20
|
|
; NONEON-NOSVE-NEXT: .LBB3_52: // %cond.store37
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #19]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #20, .LBB3_21
|
|
; NONEON-NOSVE-NEXT: .LBB3_53: // %cond.store39
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #20]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #21, .LBB3_22
|
|
; NONEON-NOSVE-NEXT: .LBB3_54: // %cond.store41
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #21]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #22, .LBB3_23
|
|
; NONEON-NOSVE-NEXT: .LBB3_55: // %cond.store43
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #22]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #23, .LBB3_24
|
|
; NONEON-NOSVE-NEXT: .LBB3_56: // %cond.store45
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #23]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #24, .LBB3_25
|
|
; NONEON-NOSVE-NEXT: .LBB3_57: // %cond.store47
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #24]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #25, .LBB3_26
|
|
; NONEON-NOSVE-NEXT: .LBB3_58: // %cond.store49
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #25]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #26, .LBB3_27
|
|
; NONEON-NOSVE-NEXT: .LBB3_59: // %cond.store51
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #26]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #27, .LBB3_28
|
|
; NONEON-NOSVE-NEXT: .LBB3_60: // %cond.store53
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #27]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #28, .LBB3_29
|
|
; NONEON-NOSVE-NEXT: .LBB3_61: // %cond.store55
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #28]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #29, .LBB3_30
|
|
; NONEON-NOSVE-NEXT: .LBB3_62: // %cond.store57
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #29]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #30, .LBB3_31
|
|
; NONEON-NOSVE-NEXT: .LBB3_63: // %cond.store59
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #30]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #31, .LBB3_32
|
|
; NONEON-NOSVE-NEXT: .LBB3_64: // %cond.store61
|
|
; NONEON-NOSVE-NEXT: strb wzr, [x0, #31]
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v32i8(<32 x i8> zeroinitializer, ptr %dst, i32 8, <32 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v2f16(ptr %dst, <2 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v2f16:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: fmov s1, wzr
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: mov z2.s, z0.s[1]
|
|
; CHECK-NEXT: ptrue p0.h, vl4
|
|
; CHECK-NEXT: zip1 z0.h, z0.h, z2.h
|
|
; CHECK-NEXT: zip1 z1.h, z1.h, z1.h
|
|
; CHECK-NEXT: zip1 z0.s, z0.s, z1.s
|
|
; CHECK-NEXT: lsl z0.h, z0.h, #15
|
|
; CHECK-NEXT: asr z0.h, z0.h, #15
|
|
; CHECK-NEXT: cmpne p1.h, p0/z, z0.h, #0
|
|
; CHECK-NEXT: mov z0.h, #0 // =0x0
|
|
; CHECK-NEXT: st1h { z0.h }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v2f16:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB4_3
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB4_4
|
|
; NONEON-NOSVE-NEXT: .LBB4_2: // %else2
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB4_3: // %cond.store
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB4_2
|
|
; NONEON-NOSVE-NEXT: .LBB4_4: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v2f16(<2 x half> zeroinitializer, ptr %dst, i32 8, <2 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v4f16(ptr %dst, <4 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v4f16:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.h, vl4
|
|
; CHECK-NEXT: lsl z0.h, z0.h, #15
|
|
; CHECK-NEXT: asr z0.h, z0.h, #15
|
|
; CHECK-NEXT: cmpne p1.h, p0/z, z0.h, #0
|
|
; CHECK-NEXT: mov z0.h, #0 // =0x0
|
|
; CHECK-NEXT: st1h { z0.h }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v4f16:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: ldrh w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB5_5
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB5_6
|
|
; NONEON-NOSVE-NEXT: .LBB5_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB5_7
|
|
; NONEON-NOSVE-NEXT: .LBB5_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB5_8
|
|
; NONEON-NOSVE-NEXT: .LBB5_4: // %else6
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB5_5: // %cond.store
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB5_2
|
|
; NONEON-NOSVE-NEXT: .LBB5_6: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB5_3
|
|
; NONEON-NOSVE-NEXT: .LBB5_7: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB5_4
|
|
; NONEON-NOSVE-NEXT: .LBB5_8: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #6]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v4f16(<4 x half> zeroinitializer, ptr %dst, i32 8, <4 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v8f16(ptr %dst, <8 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v8f16:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.h, vl8
|
|
; CHECK-NEXT: uunpklo z0.h, z0.b
|
|
; CHECK-NEXT: lsl z0.h, z0.h, #15
|
|
; CHECK-NEXT: asr z0.h, z0.h, #15
|
|
; CHECK-NEXT: cmpne p1.h, p0/z, z0.h, #0
|
|
; CHECK-NEXT: mov z0.h, #0 // =0x0
|
|
; CHECK-NEXT: st1h { z0.h }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v8f16:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]
|
|
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1]
|
|
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #5]
|
|
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldrb w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x8
|
|
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x2
|
|
; NONEON-NOSVE-NEXT: and w12, w12, #0x10
|
|
; NONEON-NOSVE-NEXT: bfxil w10, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w11, w13, #0x20
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w14, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w10, w8
|
|
; NONEON-NOSVE-NEXT: orr w10, w11, w12
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w10
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x80
|
|
; NONEON-NOSVE-NEXT: add w9, w8, w9
|
|
; NONEON-NOSVE-NEXT: and w8, w9, #0xff
|
|
; NONEON-NOSVE-NEXT: tbnz w9, #0, .LBB6_9
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB6_10
|
|
; NONEON-NOSVE-NEXT: .LBB6_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB6_11
|
|
; NONEON-NOSVE-NEXT: .LBB6_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB6_12
|
|
; NONEON-NOSVE-NEXT: .LBB6_4: // %else6
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB6_13
|
|
; NONEON-NOSVE-NEXT: .LBB6_5: // %else8
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB6_14
|
|
; NONEON-NOSVE-NEXT: .LBB6_6: // %else10
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB6_15
|
|
; NONEON-NOSVE-NEXT: .LBB6_7: // %else12
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB6_16
|
|
; NONEON-NOSVE-NEXT: .LBB6_8: // %else14
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB6_9: // %cond.store
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB6_2
|
|
; NONEON-NOSVE-NEXT: .LBB6_10: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB6_3
|
|
; NONEON-NOSVE-NEXT: .LBB6_11: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB6_4
|
|
; NONEON-NOSVE-NEXT: .LBB6_12: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #6]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB6_5
|
|
; NONEON-NOSVE-NEXT: .LBB6_13: // %cond.store7
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB6_6
|
|
; NONEON-NOSVE-NEXT: .LBB6_14: // %cond.store9
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #10]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB6_7
|
|
; NONEON-NOSVE-NEXT: .LBB6_15: // %cond.store11
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #12]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB6_8
|
|
; NONEON-NOSVE-NEXT: .LBB6_16: // %cond.store13
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #14]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v8f16(<8 x half> zeroinitializer, ptr %dst, i32 8, <8 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v16f16(ptr %dst, <16 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v16f16:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
|
|
; CHECK-NEXT: movprfx z1, z0
|
|
; CHECK-NEXT: ext z1.b, z1.b, z0.b, #8
|
|
; CHECK-NEXT: ptrue p0.h, vl8
|
|
; CHECK-NEXT: mov x8, #8 // =0x8
|
|
; CHECK-NEXT: uunpklo z0.h, z0.b
|
|
; CHECK-NEXT: uunpklo z1.h, z1.b
|
|
; CHECK-NEXT: lsl z0.h, z0.h, #15
|
|
; CHECK-NEXT: lsl z1.h, z1.h, #15
|
|
; CHECK-NEXT: asr z0.h, z0.h, #15
|
|
; CHECK-NEXT: asr z1.h, z1.h, #15
|
|
; CHECK-NEXT: cmpne p2.h, p0/z, z0.h, #0
|
|
; CHECK-NEXT: cmpne p1.h, p0/z, z1.h, #0
|
|
; CHECK-NEXT: mov z1.h, #0 // =0x0
|
|
; CHECK-NEXT: st1h { z1.h }, p1, [x0, x8, lsl #1]
|
|
; CHECK-NEXT: st1h { z1.h }, p2, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v16f16:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str q0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]
|
|
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1]
|
|
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #5]
|
|
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldrb w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x8
|
|
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x2
|
|
; NONEON-NOSVE-NEXT: and w12, w12, #0x10
|
|
; NONEON-NOSVE-NEXT: bfxil w10, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w11, w13, #0x20
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w14, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w10, w8
|
|
; NONEON-NOSVE-NEXT: orr w10, w11, w12
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w10
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0xffffff80
|
|
; NONEON-NOSVE-NEXT: add w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB7_17
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB7_18
|
|
; NONEON-NOSVE-NEXT: .LBB7_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB7_19
|
|
; NONEON-NOSVE-NEXT: .LBB7_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB7_20
|
|
; NONEON-NOSVE-NEXT: .LBB7_4: // %else6
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB7_21
|
|
; NONEON-NOSVE-NEXT: .LBB7_5: // %else8
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB7_22
|
|
; NONEON-NOSVE-NEXT: .LBB7_6: // %else10
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB7_23
|
|
; NONEON-NOSVE-NEXT: .LBB7_7: // %else12
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB7_24
|
|
; NONEON-NOSVE-NEXT: .LBB7_8: // %else14
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB7_25
|
|
; NONEON-NOSVE-NEXT: .LBB7_9: // %else16
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB7_26
|
|
; NONEON-NOSVE-NEXT: .LBB7_10: // %else18
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB7_27
|
|
; NONEON-NOSVE-NEXT: .LBB7_11: // %else20
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB7_28
|
|
; NONEON-NOSVE-NEXT: .LBB7_12: // %else22
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB7_29
|
|
; NONEON-NOSVE-NEXT: .LBB7_13: // %else24
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB7_30
|
|
; NONEON-NOSVE-NEXT: .LBB7_14: // %else26
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB7_31
|
|
; NONEON-NOSVE-NEXT: .LBB7_15: // %else28
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB7_32
|
|
; NONEON-NOSVE-NEXT: .LBB7_16: // %else30
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB7_17: // %cond.store
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB7_2
|
|
; NONEON-NOSVE-NEXT: .LBB7_18: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #2]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB7_3
|
|
; NONEON-NOSVE-NEXT: .LBB7_19: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB7_4
|
|
; NONEON-NOSVE-NEXT: .LBB7_20: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #6]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB7_5
|
|
; NONEON-NOSVE-NEXT: .LBB7_21: // %cond.store7
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB7_6
|
|
; NONEON-NOSVE-NEXT: .LBB7_22: // %cond.store9
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #10]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB7_7
|
|
; NONEON-NOSVE-NEXT: .LBB7_23: // %cond.store11
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #12]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB7_8
|
|
; NONEON-NOSVE-NEXT: .LBB7_24: // %cond.store13
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #14]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB7_9
|
|
; NONEON-NOSVE-NEXT: .LBB7_25: // %cond.store15
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #16]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB7_10
|
|
; NONEON-NOSVE-NEXT: .LBB7_26: // %cond.store17
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #18]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB7_11
|
|
; NONEON-NOSVE-NEXT: .LBB7_27: // %cond.store19
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #20]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB7_12
|
|
; NONEON-NOSVE-NEXT: .LBB7_28: // %cond.store21
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #22]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB7_13
|
|
; NONEON-NOSVE-NEXT: .LBB7_29: // %cond.store23
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #24]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB7_14
|
|
; NONEON-NOSVE-NEXT: .LBB7_30: // %cond.store25
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #26]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB7_15
|
|
; NONEON-NOSVE-NEXT: .LBB7_31: // %cond.store27
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #28]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB7_16
|
|
; NONEON-NOSVE-NEXT: .LBB7_32: // %cond.store29
|
|
; NONEON-NOSVE-NEXT: fmov s0, wzr
|
|
; NONEON-NOSVE-NEXT: str h0, [x0, #30]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v16f16(<16 x half> zeroinitializer, ptr %dst, i32 8, <16 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v4f32(ptr %dst, <4 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v4f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.s, vl4
|
|
; CHECK-NEXT: uunpklo z0.s, z0.h
|
|
; CHECK-NEXT: lsl z0.s, z0.s, #31
|
|
; CHECK-NEXT: asr z0.s, z0.s, #31
|
|
; CHECK-NEXT: cmpne p1.s, p0/z, z0.s, #0
|
|
; CHECK-NEXT: mov z0.s, #0 // =0x0
|
|
; CHECK-NEXT: st1w { z0.s }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v4f32:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: ldrh w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB8_5
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB8_6
|
|
; NONEON-NOSVE-NEXT: .LBB8_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB8_7
|
|
; NONEON-NOSVE-NEXT: .LBB8_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB8_8
|
|
; NONEON-NOSVE-NEXT: .LBB8_4: // %else6
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB8_5: // %cond.store
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB8_2
|
|
; NONEON-NOSVE-NEXT: .LBB8_6: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB8_3
|
|
; NONEON-NOSVE-NEXT: .LBB8_7: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB8_4
|
|
; NONEON-NOSVE-NEXT: .LBB8_8: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #12]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v4f32(<4 x float> zeroinitializer, ptr %dst, i32 8, <4 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v8f32(ptr %dst, <8 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v8f32:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: mov z1.b, z0.b[7]
|
|
; CHECK-NEXT: mov z2.b, z0.b[6]
|
|
; CHECK-NEXT: mov x8, #4 // =0x4
|
|
; CHECK-NEXT: mov z3.b, z0.b[5]
|
|
; CHECK-NEXT: mov z4.b, z0.b[4]
|
|
; CHECK-NEXT: mov z5.b, z0.b[3]
|
|
; CHECK-NEXT: mov z6.b, z0.b[2]
|
|
; CHECK-NEXT: mov z7.b, z0.b[1]
|
|
; CHECK-NEXT: ptrue p0.s, vl4
|
|
; CHECK-NEXT: zip1 z1.h, z2.h, z1.h
|
|
; CHECK-NEXT: zip1 z2.h, z4.h, z3.h
|
|
; CHECK-NEXT: zip1 z3.h, z6.h, z5.h
|
|
; CHECK-NEXT: zip1 z0.h, z0.h, z7.h
|
|
; CHECK-NEXT: zip1 z1.s, z2.s, z1.s
|
|
; CHECK-NEXT: zip1 z0.s, z0.s, z3.s
|
|
; CHECK-NEXT: uunpklo z1.s, z1.h
|
|
; CHECK-NEXT: uunpklo z0.s, z0.h
|
|
; CHECK-NEXT: lsl z1.s, z1.s, #31
|
|
; CHECK-NEXT: lsl z0.s, z0.s, #31
|
|
; CHECK-NEXT: asr z1.s, z1.s, #31
|
|
; CHECK-NEXT: asr z0.s, z0.s, #31
|
|
; CHECK-NEXT: cmpne p1.s, p0/z, z1.s, #0
|
|
; CHECK-NEXT: mov z1.s, #0 // =0x0
|
|
; CHECK-NEXT: cmpne p2.s, p0/z, z0.s, #0
|
|
; CHECK-NEXT: st1w { z1.s }, p1, [x0, x8, lsl #2]
|
|
; CHECK-NEXT: st1w { z1.s }, p2, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v8f32:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #3]
|
|
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1]
|
|
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #5]
|
|
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: ldrb w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x8
|
|
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #7]
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x2
|
|
; NONEON-NOSVE-NEXT: and w12, w12, #0x10
|
|
; NONEON-NOSVE-NEXT: bfxil w10, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w11, w13, #0x20
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w12
|
|
; NONEON-NOSVE-NEXT: and w12, w14, #0x40
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w8, w10, w8
|
|
; NONEON-NOSVE-NEXT: orr w10, w11, w12
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w10
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x80
|
|
; NONEON-NOSVE-NEXT: add w9, w8, w9
|
|
; NONEON-NOSVE-NEXT: and w8, w9, #0xff
|
|
; NONEON-NOSVE-NEXT: tbnz w9, #0, .LBB9_9
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB9_10
|
|
; NONEON-NOSVE-NEXT: .LBB9_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB9_11
|
|
; NONEON-NOSVE-NEXT: .LBB9_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB9_12
|
|
; NONEON-NOSVE-NEXT: .LBB9_4: // %else6
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB9_13
|
|
; NONEON-NOSVE-NEXT: .LBB9_5: // %else8
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB9_14
|
|
; NONEON-NOSVE-NEXT: .LBB9_6: // %else10
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB9_15
|
|
; NONEON-NOSVE-NEXT: .LBB9_7: // %else12
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB9_16
|
|
; NONEON-NOSVE-NEXT: .LBB9_8: // %else14
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB9_9: // %cond.store
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB9_2
|
|
; NONEON-NOSVE-NEXT: .LBB9_10: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #4]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB9_3
|
|
; NONEON-NOSVE-NEXT: .LBB9_11: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB9_4
|
|
; NONEON-NOSVE-NEXT: .LBB9_12: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #12]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB9_5
|
|
; NONEON-NOSVE-NEXT: .LBB9_13: // %cond.store7
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #16]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB9_6
|
|
; NONEON-NOSVE-NEXT: .LBB9_14: // %cond.store9
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #20]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB9_7
|
|
; NONEON-NOSVE-NEXT: .LBB9_15: // %cond.store11
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #24]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB9_8
|
|
; NONEON-NOSVE-NEXT: .LBB9_16: // %cond.store13
|
|
; NONEON-NOSVE-NEXT: str wzr, [x0, #28]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v8f32(<8 x float> zeroinitializer, ptr %dst, i32 8, <8 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v2f64(ptr %dst, <2 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v2f64:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.d, vl2
|
|
; CHECK-NEXT: uunpklo z0.d, z0.s
|
|
; CHECK-NEXT: lsl z0.d, z0.d, #63
|
|
; CHECK-NEXT: asr z0.d, z0.d, #63
|
|
; CHECK-NEXT: cmpne p1.d, p0/z, z0.d, #0
|
|
; CHECK-NEXT: mov z0.d, #0 // =0x0
|
|
; CHECK-NEXT: st1d { z0.d }, p1, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v2f64:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldr w8, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrb w9, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB10_3
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB10_4
|
|
; NONEON-NOSVE-NEXT: .LBB10_2: // %else2
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB10_3: // %cond.store
|
|
; NONEON-NOSVE-NEXT: str xzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB10_2
|
|
; NONEON-NOSVE-NEXT: .LBB10_4: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: str xzr, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v2f64(<2 x double> zeroinitializer, ptr %dst, i32 8, <2 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
define void @masked_store_v4f64(ptr %dst, <4 x i1> %mask) {
|
|
; CHECK-LABEL: masked_store_v4f64:
|
|
; CHECK: // %bb.0:
|
|
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
|
|
; CHECK-NEXT: ptrue p0.d, vl2
|
|
; CHECK-NEXT: mov x8, #2 // =0x2
|
|
; CHECK-NEXT: uunpklo z0.s, z0.h
|
|
; CHECK-NEXT: movprfx z1, z0
|
|
; CHECK-NEXT: ext z1.b, z1.b, z0.b, #8
|
|
; CHECK-NEXT: uunpklo z0.d, z0.s
|
|
; CHECK-NEXT: uunpklo z1.d, z1.s
|
|
; CHECK-NEXT: lsl z0.d, z0.d, #63
|
|
; CHECK-NEXT: lsl z1.d, z1.d, #63
|
|
; CHECK-NEXT: asr z0.d, z0.d, #63
|
|
; CHECK-NEXT: asr z1.d, z1.d, #63
|
|
; CHECK-NEXT: cmpne p2.d, p0/z, z0.d, #0
|
|
; CHECK-NEXT: cmpne p1.d, p0/z, z1.d, #0
|
|
; CHECK-NEXT: mov z1.d, #0 // =0x0
|
|
; CHECK-NEXT: st1d { z1.d }, p1, [x0, x8, lsl #3]
|
|
; CHECK-NEXT: st1d { z1.d }, p2, [x0]
|
|
; CHECK-NEXT: ret
|
|
;
|
|
; NONEON-NOSVE-LABEL: masked_store_v4f64:
|
|
; NONEON-NOSVE: // %bb.0:
|
|
; NONEON-NOSVE-NEXT: str d0, [sp, #-16]!
|
|
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 16
|
|
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #2]
|
|
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #4]
|
|
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #6]
|
|
; NONEON-NOSVE-NEXT: ldrh w11, [sp]
|
|
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
|
|
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
|
|
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
|
|
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
|
|
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
|
|
; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1
|
|
; NONEON-NOSVE-NEXT: orr w9, w9, w10
|
|
; NONEON-NOSVE-NEXT: orr w8, w8, w9
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #0, .LBB11_5
|
|
; NONEON-NOSVE-NEXT: // %bb.1: // %else
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB11_6
|
|
; NONEON-NOSVE-NEXT: .LBB11_2: // %else2
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB11_7
|
|
; NONEON-NOSVE-NEXT: .LBB11_3: // %else4
|
|
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB11_8
|
|
; NONEON-NOSVE-NEXT: .LBB11_4: // %else6
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
; NONEON-NOSVE-NEXT: .LBB11_5: // %cond.store
|
|
; NONEON-NOSVE-NEXT: str xzr, [x0]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB11_2
|
|
; NONEON-NOSVE-NEXT: .LBB11_6: // %cond.store1
|
|
; NONEON-NOSVE-NEXT: str xzr, [x0, #8]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB11_3
|
|
; NONEON-NOSVE-NEXT: .LBB11_7: // %cond.store3
|
|
; NONEON-NOSVE-NEXT: str xzr, [x0, #16]
|
|
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB11_4
|
|
; NONEON-NOSVE-NEXT: .LBB11_8: // %cond.store5
|
|
; NONEON-NOSVE-NEXT: str xzr, [x0, #24]
|
|
; NONEON-NOSVE-NEXT: add sp, sp, #16
|
|
; NONEON-NOSVE-NEXT: ret
|
|
call void @llvm.masked.store.v4f64(<4 x double> zeroinitializer, ptr %dst, i32 8, <4 x i1> %mask)
|
|
ret void
|
|
}
|
|
|
|
declare void @llvm.masked.store.v4i8(<4 x i8>, ptr, i32, <4 x i1>)
|
|
declare void @llvm.masked.store.v8i8(<8 x i8>, ptr, i32, <8 x i1>)
|
|
declare void @llvm.masked.store.v16i8(<16 x i8>, ptr, i32, <16 x i1>)
|
|
declare void @llvm.masked.store.v32i8(<32 x i8>, ptr, i32, <32 x i1>)
|
|
declare void @llvm.masked.store.v2f16(<2 x half>, ptr, i32, <2 x i1>)
|
|
declare void @llvm.masked.store.v4f16(<4 x half>, ptr, i32, <4 x i1>)
|
|
declare void @llvm.masked.store.v8f16(<8 x half>, ptr, i32, <8 x i1>)
|
|
declare void @llvm.masked.store.v16f16(<16 x half>, ptr, i32, <16 x i1>)
|
|
declare void @llvm.masked.store.v4f32(<4 x float>, ptr, i32, <4 x i1>)
|
|
declare void @llvm.masked.store.v8f32(<8 x float>, ptr, i32, <8 x i1>)
|
|
declare void @llvm.masked.store.v2f64(<2 x double>, ptr, i32, <2 x i1>)
|
|
declare void @llvm.masked.store.v4f64(<4 x double>, ptr, i32, <4 x i1>)
|