Files
TheRock/compiler/amd-llvm/llvm/test/CodeGen/AArch64/sve-streaming-mode-fixed-length-masked-expandload.ll
T
derek.holloway 7502bf64a4
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
Flatten subprojects into a single base monorepo
2026-09-02 16:34:47 -07:00

4079 lines
161 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 Load
;
define <4 x i8> @masked_load_v4i8(ptr %src, <4 x i1> %mask) {
; CHECK-LABEL: masked_load_v4i8:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI0_0
; CHECK-NEXT: ptrue p0.h, vl4
; CHECK-NEXT: lsl z0.h, z0.h, #15
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI0_0]
; CHECK-NEXT: asr z0.h, z0.h, #15
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.h
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB0_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: fmov s0, wzr
; CHECK-NEXT: fmov s2, w9
; CHECK-NEXT: zip1 z1.h, z0.h, z0.h
; CHECK-NEXT: zip1 z0.h, z2.h, z0.h
; CHECK-NEXT: zip1 z0.s, z0.s, z1.s
; CHECK-NEXT: tbnz w8, #1, .LBB0_3
; CHECK-NEXT: b .LBB0_4
; CHECK-NEXT: .LBB0_2:
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB0_4
; CHECK-NEXT: .LBB0_3: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: mov z0.h, p1/m, w9
; CHECK-NEXT: .LBB0_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB0_6
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: mov z0.h, p1/m, w9
; CHECK-NEXT: tbz w8, #3, .LBB0_8
; CHECK-NEXT: b .LBB0_7
; CHECK-NEXT: .LBB0_6: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB0_8
; CHECK-NEXT: .LBB0_7: // %cond.load9
; CHECK-NEXT: mov w8, #3 // =0x3
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w8
; CHECK-NEXT: ldrb w8, [x0]
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: mov z0.h, p1/m, w8
; CHECK-NEXT: .LBB0_8: // %else10
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v4i8:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #128
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 128
; NONEON-NOSVE-NEXT: str d0, [sp, #112]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #114]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #116]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #118]
; NONEON-NOSVE-NEXT: ldrh w11, [sp, #112]
; 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: tbz w8, #0, .LBB0_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: strh wzr, [sp, #110]
; NONEON-NOSVE-NEXT: stur wzr, [sp, #106]
; NONEON-NOSVE-NEXT: strh w9, [sp, #104]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #104]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB0_3
; NONEON-NOSVE-NEXT: b .LBB0_4
; NONEON-NOSVE-NEXT: .LBB0_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI0_0
; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI0_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB0_4
; NONEON-NOSVE-NEXT: .LBB0_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #80]
; NONEON-NOSVE-NEXT: strh w9, [sp, #96]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #84]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #96]
; NONEON-NOSVE-NEXT: str w9, [sp, #92]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #80]
; NONEON-NOSVE-NEXT: str d0, [sp, #72]
; NONEON-NOSVE-NEXT: strh w9, [sp, #88]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #72]
; NONEON-NOSVE-NEXT: strh w9, [sp, #90]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #88]
; NONEON-NOSVE-NEXT: .LBB0_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB0_7
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB0_8
; NONEON-NOSVE-NEXT: .LBB0_6: // %else10
; NONEON-NOSVE-NEXT: add sp, sp, #128
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB0_7: // %cond.load5
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #48]
; NONEON-NOSVE-NEXT: strh w9, [sp, #64]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #54]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #64]
; NONEON-NOSVE-NEXT: strh w9, [sp, #62]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #48]
; NONEON-NOSVE-NEXT: str d0, [sp, #40]
; NONEON-NOSVE-NEXT: str w9, [sp, #56]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #40]
; NONEON-NOSVE-NEXT: strh w9, [sp, #60]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB0_6
; NONEON-NOSVE-NEXT: .LBB0_8: // %cond.load9
; NONEON-NOSVE-NEXT: ldrb w8, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: strh w8, [sp, #32]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #32]
; NONEON-NOSVE-NEXT: strh w8, [sp, #28]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str d0, [sp, #16]
; NONEON-NOSVE-NEXT: str w8, [sp, #24]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16]
; NONEON-NOSVE-NEXT: strh w8, [sp, #30]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]
; NONEON-NOSVE-NEXT: add sp, sp, #128
; NONEON-NOSVE-NEXT: ret
%load = call <4 x i8> @llvm.masked.expandload.v4i8(ptr %src, <4 x i1> %mask, <4 x i8> zeroinitializer)
ret <4 x i8> %load
}
define <8 x i8> @masked_load_v8i8(ptr %src, <8 x i1> %mask) {
; CHECK-LABEL: masked_load_v8i8:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI1_0
; CHECK-NEXT: ptrue p0.b, vl8
; CHECK-NEXT: lsl z0.b, z0.b, #7
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI1_0]
; CHECK-NEXT: asr z0.b, z0.b, #7
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.b
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB1_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: strh wzr, [sp, #6]
; CHECK-NEXT: strh wzr, [sp, #4]
; CHECK-NEXT: strh wzr, [sp, #2]
; CHECK-NEXT: strb wzr, [sp, #1]
; CHECK-NEXT: strb w9, [sp]
; CHECK-NEXT: ldr d0, [sp]
; CHECK-NEXT: tbnz w8, #1, .LBB1_3
; CHECK-NEXT: b .LBB1_4
; CHECK-NEXT: .LBB1_2:
; CHECK-NEXT: mov z0.b, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB1_4
; CHECK-NEXT: .LBB1_3: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: .LBB1_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB1_10
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #3, .LBB1_11
; CHECK-NEXT: .LBB1_6: // %else10
; CHECK-NEXT: tbz w8, #4, .LBB1_12
; CHECK-NEXT: .LBB1_7: // %cond.load13
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #5, .LBB1_13
; CHECK-NEXT: .LBB1_8: // %else18
; CHECK-NEXT: tbz w8, #6, .LBB1_14
; CHECK-NEXT: .LBB1_9: // %cond.load21
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbz w8, #7, .LBB1_16
; CHECK-NEXT: b .LBB1_15
; CHECK-NEXT: .LBB1_10: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB1_6
; CHECK-NEXT: .LBB1_11: // %cond.load9
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #4, .LBB1_7
; CHECK-NEXT: .LBB1_12: // %else14
; CHECK-NEXT: tbz w8, #5, .LBB1_8
; CHECK-NEXT: .LBB1_13: // %cond.load17
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #6, .LBB1_9
; CHECK-NEXT: .LBB1_14: // %else22
; CHECK-NEXT: tbz w8, #7, .LBB1_16
; CHECK-NEXT: .LBB1_15: // %cond.load25
; CHECK-NEXT: mov w8, #7 // =0x7
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w8
; CHECK-NEXT: ldrb w8, [x0]
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w8
; CHECK-NEXT: .LBB1_16: // %else26
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v8i8:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #272
; NONEON-NOSVE-NEXT: str x29, [sp, #256] // 8-byte Spill
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 272
; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
; NONEON-NOSVE-NEXT: str d0, [sp, #240]
; NONEON-NOSVE-NEXT: add x9, sp, #176
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #242]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #243]
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #241]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #244]
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #245]
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #246]
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #240]
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w8, w10
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #247]
; NONEON-NOSVE-NEXT: and w11, w11, #0x2
; NONEON-NOSVE-NEXT: and w13, w13, #0x10
; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1
; NONEON-NOSVE-NEXT: and w12, w14, #0x20
; NONEON-NOSVE-NEXT: orr w8, w8, w13
; NONEON-NOSVE-NEXT: and w13, w15, #0x40
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w11, w8
; NONEON-NOSVE-NEXT: orr w11, w12, w13
; NONEON-NOSVE-NEXT: orr w8, w8, w11
; NONEON-NOSVE-NEXT: and w10, w10, #0x80
; NONEON-NOSVE-NEXT: add w10, w8, w10
; NONEON-NOSVE-NEXT: and w8, w10, #0xff
; NONEON-NOSVE-NEXT: tbz w10, #0, .LBB1_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: strb wzr, [sp, #239]
; NONEON-NOSVE-NEXT: sturh wzr, [x9, #61]
; NONEON-NOSVE-NEXT: stur wzr, [x9, #57]
; NONEON-NOSVE-NEXT: strb w10, [sp, #232]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #232]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB1_3
; NONEON-NOSVE-NEXT: b .LBB1_4
; NONEON-NOSVE-NEXT: .LBB1_2:
; NONEON-NOSVE-NEXT: adrp x10, .LCPI1_0
; NONEON-NOSVE-NEXT: ldr d0, [x10, :lo12:.LCPI1_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB1_4
; NONEON-NOSVE-NEXT: .LBB1_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #208]
; NONEON-NOSVE-NEXT: strb w10, [sp, #224]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #214]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #224]
; NONEON-NOSVE-NEXT: strh w10, [sp, #222]
; NONEON-NOSVE-NEXT: str d0, [sp, #200]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #34]
; NONEON-NOSVE-NEXT: stur w10, [x9, #42]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #208]
; NONEON-NOSVE-NEXT: strb w10, [sp, #216]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #200]
; NONEON-NOSVE-NEXT: strb w10, [sp, #217]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #216]
; NONEON-NOSVE-NEXT: .LBB1_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB1_12
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB1_13
; NONEON-NOSVE-NEXT: .LBB1_6: // %else10
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB1_14
; NONEON-NOSVE-NEXT: .LBB1_7: // %else14
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB1_15
; NONEON-NOSVE-NEXT: .LBB1_8: // %else18
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB1_16
; NONEON-NOSVE-NEXT: .LBB1_9: // %else22
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB1_11
; NONEON-NOSVE-NEXT: .LBB1_10: // %cond.load25
; NONEON-NOSVE-NEXT: ldrb w8, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: strb w8, [sp, #32]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #32]
; NONEON-NOSVE-NEXT: strb w8, [sp, #30]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
; NONEON-NOSVE-NEXT: str d0, [sp, #16]
; NONEON-NOSVE-NEXT: strh w8, [sp, #28]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str w8, [sp, #24]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]
; NONEON-NOSVE-NEXT: strb w8, [sp, #31]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]
; NONEON-NOSVE-NEXT: .LBB1_11: // %else26
; NONEON-NOSVE-NEXT: ldr x29, [sp, #256] // 8-byte Reload
; NONEON-NOSVE-NEXT: add sp, sp, #272
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB1_12: // %cond.load5
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #176]
; NONEON-NOSVE-NEXT: strb w10, [sp, #192]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #183]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #192]
; NONEON-NOSVE-NEXT: strb w10, [sp, #191]
; NONEON-NOSVE-NEXT: str d0, [sp, #168]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #3]
; NONEON-NOSVE-NEXT: stur w10, [x9, #11]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #176]
; NONEON-NOSVE-NEXT: strh w9, [sp, #184]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #168]
; NONEON-NOSVE-NEXT: strb w9, [sp, #186]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #184]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB1_6
; NONEON-NOSVE-NEXT: .LBB1_13: // %cond.load9
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #144]
; NONEON-NOSVE-NEXT: strb w9, [sp, #160]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #148]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #160]
; NONEON-NOSVE-NEXT: str w9, [sp, #156]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #146]
; NONEON-NOSVE-NEXT: str d0, [sp, #136]
; NONEON-NOSVE-NEXT: strb w9, [sp, #154]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #144]
; NONEON-NOSVE-NEXT: strh w9, [sp, #152]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #136]
; NONEON-NOSVE-NEXT: strb w9, [sp, #155]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #152]
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB1_7
; NONEON-NOSVE-NEXT: .LBB1_14: // %cond.load13
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #112]
; NONEON-NOSVE-NEXT: strb w9, [sp, #128]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #119]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #128]
; NONEON-NOSVE-NEXT: strb w9, [sp, #127]
; NONEON-NOSVE-NEXT: ldurh w9, [sp, #117]
; NONEON-NOSVE-NEXT: str d0, [sp, #104]
; NONEON-NOSVE-NEXT: sturh w9, [sp, #125]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #112]
; NONEON-NOSVE-NEXT: str w9, [sp, #120]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #104]
; NONEON-NOSVE-NEXT: strb w9, [sp, #124]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #120]
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB1_8
; NONEON-NOSVE-NEXT: .LBB1_15: // %cond.load17
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #80]
; NONEON-NOSVE-NEXT: strb w9, [sp, #96]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #86]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #96]
; NONEON-NOSVE-NEXT: strh w9, [sp, #94]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #84]
; NONEON-NOSVE-NEXT: str d0, [sp, #72]
; NONEON-NOSVE-NEXT: strb w9, [sp, #92]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #80]
; NONEON-NOSVE-NEXT: str w9, [sp, #88]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #72]
; NONEON-NOSVE-NEXT: strb w9, [sp, #93]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #88]
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB1_9
; NONEON-NOSVE-NEXT: .LBB1_16: // %cond.load21
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str d0, [sp, #48]
; NONEON-NOSVE-NEXT: strb w9, [sp, #64]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #55]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #64]
; NONEON-NOSVE-NEXT: strb w9, [sp, #63]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #52]
; NONEON-NOSVE-NEXT: str d0, [sp, #40]
; NONEON-NOSVE-NEXT: strh w9, [sp, #60]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #48]
; NONEON-NOSVE-NEXT: str w9, [sp, #56]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40]
; NONEON-NOSVE-NEXT: strb w9, [sp, #62]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB1_10
; NONEON-NOSVE-NEXT: b .LBB1_11
%load = call <8 x i8> @llvm.masked.expandload.v8i8(ptr %src, <8 x i1> %mask, <8 x i8> zeroinitializer)
ret <8 x i8> %load
}
define <16 x i8> @masked_load_v16i8(ptr %src, <16 x i1> %mask) {
; CHECK-LABEL: masked_load_v16i8:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
; CHECK-NEXT: adrp x8, .LCPI2_0
; CHECK-NEXT: ptrue p0.b, vl16
; CHECK-NEXT: lsl z0.b, z0.b, #7
; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI2_0]
; CHECK-NEXT: asr z0.b, z0.b, #7
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.b
; CHECK-NEXT: fmov w8, s0
; CHECK-NEXT: tbz w8, #0, .LBB2_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: strh wzr, [sp, #14]
; CHECK-NEXT: strh wzr, [sp, #12]
; CHECK-NEXT: strh wzr, [sp, #10]
; CHECK-NEXT: strh wzr, [sp, #8]
; CHECK-NEXT: strh wzr, [sp, #6]
; CHECK-NEXT: strh wzr, [sp, #4]
; CHECK-NEXT: strh wzr, [sp, #2]
; CHECK-NEXT: strb wzr, [sp, #1]
; CHECK-NEXT: strb w9, [sp]
; CHECK-NEXT: ldr q0, [sp]
; CHECK-NEXT: tbnz w8, #1, .LBB2_3
; CHECK-NEXT: b .LBB2_4
; CHECK-NEXT: .LBB2_2:
; CHECK-NEXT: mov z0.b, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB2_4
; CHECK-NEXT: .LBB2_3: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: .LBB2_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB2_18
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #3, .LBB2_19
; CHECK-NEXT: .LBB2_6: // %else10
; CHECK-NEXT: tbz w8, #4, .LBB2_20
; CHECK-NEXT: .LBB2_7: // %cond.load13
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #5, .LBB2_21
; CHECK-NEXT: .LBB2_8: // %else18
; CHECK-NEXT: tbz w8, #6, .LBB2_22
; CHECK-NEXT: .LBB2_9: // %cond.load21
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #7, .LBB2_23
; CHECK-NEXT: .LBB2_10: // %else26
; CHECK-NEXT: tbz w8, #8, .LBB2_24
; CHECK-NEXT: .LBB2_11: // %cond.load29
; CHECK-NEXT: mov w9, #8 // =0x8
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #9, .LBB2_25
; CHECK-NEXT: .LBB2_12: // %else34
; CHECK-NEXT: tbz w8, #10, .LBB2_26
; CHECK-NEXT: .LBB2_13: // %cond.load37
; CHECK-NEXT: mov w9, #10 // =0xa
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #11, .LBB2_27
; CHECK-NEXT: .LBB2_14: // %else42
; CHECK-NEXT: tbz w8, #12, .LBB2_28
; CHECK-NEXT: .LBB2_15: // %cond.load45
; CHECK-NEXT: mov w9, #12 // =0xc
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #13, .LBB2_29
; CHECK-NEXT: .LBB2_16: // %else50
; CHECK-NEXT: tbz w8, #14, .LBB2_30
; CHECK-NEXT: .LBB2_17: // %cond.load53
; CHECK-NEXT: mov w9, #14 // =0xe
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbz w8, #15, .LBB2_32
; CHECK-NEXT: b .LBB2_31
; CHECK-NEXT: .LBB2_18: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB2_6
; CHECK-NEXT: .LBB2_19: // %cond.load9
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #4, .LBB2_7
; CHECK-NEXT: .LBB2_20: // %else14
; CHECK-NEXT: tbz w8, #5, .LBB2_8
; CHECK-NEXT: .LBB2_21: // %cond.load17
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #6, .LBB2_9
; CHECK-NEXT: .LBB2_22: // %else22
; CHECK-NEXT: tbz w8, #7, .LBB2_10
; CHECK-NEXT: .LBB2_23: // %cond.load25
; CHECK-NEXT: mov w9, #7 // =0x7
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #8, .LBB2_11
; CHECK-NEXT: .LBB2_24: // %else30
; CHECK-NEXT: tbz w8, #9, .LBB2_12
; CHECK-NEXT: .LBB2_25: // %cond.load33
; CHECK-NEXT: mov w9, #9 // =0x9
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #10, .LBB2_13
; CHECK-NEXT: .LBB2_26: // %else38
; CHECK-NEXT: tbz w8, #11, .LBB2_14
; CHECK-NEXT: .LBB2_27: // %cond.load41
; CHECK-NEXT: mov w9, #11 // =0xb
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #12, .LBB2_15
; CHECK-NEXT: .LBB2_28: // %else46
; CHECK-NEXT: tbz w8, #13, .LBB2_16
; CHECK-NEXT: .LBB2_29: // %cond.load49
; CHECK-NEXT: mov w9, #13 // =0xd
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #14, .LBB2_17
; CHECK-NEXT: .LBB2_30: // %else54
; CHECK-NEXT: tbz w8, #15, .LBB2_32
; CHECK-NEXT: .LBB2_31: // %cond.load57
; CHECK-NEXT: mov w8, #15 // =0xf
; CHECK-NEXT: index z1.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z2.b, w8
; CHECK-NEXT: ldrb w8, [x0]
; CHECK-NEXT: cmpeq p1.b, p0/z, z1.b, z2.b
; CHECK-NEXT: mov z0.b, p1/m, w8
; CHECK-NEXT: .LBB2_32: // %else58
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v16i8:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: str x29, [sp, #-16]! // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: sub sp, sp, #992
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 1008
; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
; NONEON-NOSVE-NEXT: str q0, [sp, #976]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #978]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #979]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #977]
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #980]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #981]
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #982]
; 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, #976]
; 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, #983]
; 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: add x9, sp, #720
; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB2_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: strb wzr, [sp, #975]
; NONEON-NOSVE-NEXT: sturh wzr, [x9, #253]
; NONEON-NOSVE-NEXT: stur wzr, [x9, #249]
; NONEON-NOSVE-NEXT: stur xzr, [x9, #241]
; NONEON-NOSVE-NEXT: strb w10, [sp, #960]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #960]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB2_3
; NONEON-NOSVE-NEXT: b .LBB2_4
; NONEON-NOSVE-NEXT: .LBB2_2:
; NONEON-NOSVE-NEXT: adrp x10, .LCPI2_0
; NONEON-NOSVE-NEXT: ldr q0, [x10, :lo12:.LCPI2_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB2_4
; NONEON-NOSVE-NEXT: .LBB2_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #912]
; NONEON-NOSVE-NEXT: strb w10, [sp, #944]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #926]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #944]
; NONEON-NOSVE-NEXT: strh w10, [sp, #942]
; NONEON-NOSVE-NEXT: str q0, [sp, #896]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #202]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #194]
; NONEON-NOSVE-NEXT: stur w10, [x9, #218]
; NONEON-NOSVE-NEXT: stur x11, [x9, #210]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #912]
; NONEON-NOSVE-NEXT: strb w10, [sp, #928]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #896]
; NONEON-NOSVE-NEXT: strb w10, [sp, #929]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #928]
; NONEON-NOSVE-NEXT: .LBB2_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB2_20
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB2_21
; NONEON-NOSVE-NEXT: .LBB2_6: // %else10
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB2_22
; NONEON-NOSVE-NEXT: .LBB2_7: // %else14
; NONEON-NOSVE-NEXT: add x9, sp, #464
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB2_23
; NONEON-NOSVE-NEXT: .LBB2_8: // %else18
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB2_24
; NONEON-NOSVE-NEXT: .LBB2_9: // %else22
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB2_25
; NONEON-NOSVE-NEXT: .LBB2_10: // %else26
; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB2_26
; NONEON-NOSVE-NEXT: .LBB2_11: // %else30
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB2_27
; NONEON-NOSVE-NEXT: .LBB2_12: // %else34
; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB2_28
; NONEON-NOSVE-NEXT: .LBB2_13: // %else38
; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB2_29
; NONEON-NOSVE-NEXT: .LBB2_14: // %else42
; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB2_30
; NONEON-NOSVE-NEXT: .LBB2_15: // %else46
; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB2_31
; NONEON-NOSVE-NEXT: .LBB2_16: // %else50
; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB2_32
; NONEON-NOSVE-NEXT: .LBB2_17: // %else54
; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB2_19
; NONEON-NOSVE-NEXT: .LBB2_18: // %cond.load57
; NONEON-NOSVE-NEXT: ldrb w8, [x0]
; NONEON-NOSVE-NEXT: str q0, [sp]
; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #48]
; NONEON-NOSVE-NEXT: strb w8, [sp, #46]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
; NONEON-NOSVE-NEXT: str q0, [sp, #16]
; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str w8, [sp, #40]
; NONEON-NOSVE-NEXT: ldr x8, [sp]
; NONEON-NOSVE-NEXT: str x8, [sp, #32]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]
; NONEON-NOSVE-NEXT: strb w8, [sp, #47]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]
; NONEON-NOSVE-NEXT: .LBB2_19: // %else58
; NONEON-NOSVE-NEXT: add sp, sp, #992
; NONEON-NOSVE-NEXT: ldr x29, [sp], #16 // 8-byte Folded Reload
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB2_20: // %cond.load5
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #848]
; NONEON-NOSVE-NEXT: strb w10, [sp, #880]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #863]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #880]
; NONEON-NOSVE-NEXT: strb w10, [sp, #879]
; NONEON-NOSVE-NEXT: str q0, [sp, #832]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #139]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #131]
; NONEON-NOSVE-NEXT: stur w10, [x9, #155]
; NONEON-NOSVE-NEXT: stur x11, [x9, #147]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #848]
; NONEON-NOSVE-NEXT: strh w10, [sp, #864]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #832]
; NONEON-NOSVE-NEXT: strb w10, [sp, #866]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #864]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB2_6
; NONEON-NOSVE-NEXT: .LBB2_21: // %cond.load9
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #784]
; NONEON-NOSVE-NEXT: strb w10, [sp, #816]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #796]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #816]
; NONEON-NOSVE-NEXT: str w10, [sp, #812]
; NONEON-NOSVE-NEXT: str q0, [sp, #768]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #68]
; NONEON-NOSVE-NEXT: stur x10, [x9, #84]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #786]
; NONEON-NOSVE-NEXT: strb w10, [sp, #802]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #784]
; NONEON-NOSVE-NEXT: strh w10, [sp, #800]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #768]
; NONEON-NOSVE-NEXT: strb w10, [sp, #803]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #800]
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB2_7
; NONEON-NOSVE-NEXT: .LBB2_22: // %cond.load13
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #720]
; NONEON-NOSVE-NEXT: strb w10, [sp, #752]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #735]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #752]
; NONEON-NOSVE-NEXT: strb w10, [sp, #751]
; NONEON-NOSVE-NEXT: str q0, [sp, #704]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #5]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: stur x11, [x9, #21]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #720]
; NONEON-NOSVE-NEXT: str w9, [sp, #736]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #704]
; NONEON-NOSVE-NEXT: strb w9, [sp, #740]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #736]
; NONEON-NOSVE-NEXT: add x9, sp, #464
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB2_8
; NONEON-NOSVE-NEXT: .LBB2_23: // %cond.load17
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #656]
; NONEON-NOSVE-NEXT: strb w10, [sp, #688]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #670]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #688]
; NONEON-NOSVE-NEXT: strh w10, [sp, #686]
; NONEON-NOSVE-NEXT: str q0, [sp, #640]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #198]
; NONEON-NOSVE-NEXT: stur x10, [x9, #214]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #660]
; NONEON-NOSVE-NEXT: strb w10, [sp, #676]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #656]
; NONEON-NOSVE-NEXT: str w10, [sp, #672]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #640]
; NONEON-NOSVE-NEXT: strb w10, [sp, #677]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #672]
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB2_9
; NONEON-NOSVE-NEXT: .LBB2_24: // %cond.load21
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #592]
; NONEON-NOSVE-NEXT: strb w10, [sp, #624]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #607]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #624]
; NONEON-NOSVE-NEXT: strb w10, [sp, #623]
; NONEON-NOSVE-NEXT: str q0, [sp, #576]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #135]
; NONEON-NOSVE-NEXT: stur x10, [x9, #151]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #596]
; NONEON-NOSVE-NEXT: strh w10, [sp, #612]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #592]
; NONEON-NOSVE-NEXT: str w10, [sp, #608]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #576]
; NONEON-NOSVE-NEXT: strb w10, [sp, #614]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #608]
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB2_10
; NONEON-NOSVE-NEXT: .LBB2_25: // %cond.load25
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #528]
; NONEON-NOSVE-NEXT: strb w10, [sp, #560]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #536]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #560]
; NONEON-NOSVE-NEXT: str x10, [sp, #552]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #534]
; NONEON-NOSVE-NEXT: str q0, [sp, #512]
; NONEON-NOSVE-NEXT: strb w10, [sp, #550]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #532]
; NONEON-NOSVE-NEXT: strh w10, [sp, #548]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #528]
; NONEON-NOSVE-NEXT: str w10, [sp, #544]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #512]
; NONEON-NOSVE-NEXT: strb w10, [sp, #551]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #544]
; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB2_11
; NONEON-NOSVE-NEXT: .LBB2_26: // %cond.load29
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #464]
; NONEON-NOSVE-NEXT: strb w10, [sp, #496]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #479]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #496]
; NONEON-NOSVE-NEXT: strb w10, [sp, #495]
; NONEON-NOSVE-NEXT: str q0, [sp, #448]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: ldur w11, [x9, #9]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: stur w11, [x9, #25]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #464]
; NONEON-NOSVE-NEXT: str x9, [sp, #480]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #448]
; NONEON-NOSVE-NEXT: strb w9, [sp, #488]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #480]
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB2_12
; NONEON-NOSVE-NEXT: .LBB2_27: // %cond.load33
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #400]
; NONEON-NOSVE-NEXT: strb w10, [sp, #432]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #414]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #432]
; NONEON-NOSVE-NEXT: strh w10, [sp, #430]
; NONEON-NOSVE-NEXT: str q0, [sp, #384]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #202]
; NONEON-NOSVE-NEXT: stur w10, [x9, #218]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #408]
; NONEON-NOSVE-NEXT: strb w10, [sp, #424]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #400]
; NONEON-NOSVE-NEXT: str x10, [sp, #416]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #384]
; NONEON-NOSVE-NEXT: strb w10, [sp, #425]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #416]
; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB2_13
; NONEON-NOSVE-NEXT: .LBB2_28: // %cond.load37
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #336]
; NONEON-NOSVE-NEXT: strb w10, [sp, #368]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #351]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #368]
; NONEON-NOSVE-NEXT: strb w10, [sp, #367]
; NONEON-NOSVE-NEXT: str q0, [sp, #320]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #139]
; NONEON-NOSVE-NEXT: stur w10, [x9, #155]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #344]
; NONEON-NOSVE-NEXT: strh w10, [sp, #360]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #336]
; NONEON-NOSVE-NEXT: str x10, [sp, #352]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #320]
; NONEON-NOSVE-NEXT: strb w10, [sp, #362]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #352]
; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB2_14
; NONEON-NOSVE-NEXT: .LBB2_29: // %cond.load41
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #272]
; NONEON-NOSVE-NEXT: strb w10, [sp, #304]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #284]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #304]
; NONEON-NOSVE-NEXT: str w10, [sp, #300]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #282]
; NONEON-NOSVE-NEXT: str q0, [sp, #256]
; NONEON-NOSVE-NEXT: strb w10, [sp, #298]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #280]
; NONEON-NOSVE-NEXT: strh w10, [sp, #296]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #272]
; NONEON-NOSVE-NEXT: str x10, [sp, #288]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #256]
; NONEON-NOSVE-NEXT: strb w10, [sp, #299]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #288]
; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB2_15
; NONEON-NOSVE-NEXT: .LBB2_30: // %cond.load45
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #208]
; NONEON-NOSVE-NEXT: strb w10, [sp, #240]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #223]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #240]
; NONEON-NOSVE-NEXT: strb w10, [sp, #239]
; NONEON-NOSVE-NEXT: str q0, [sp, #192]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #216]
; NONEON-NOSVE-NEXT: str w9, [sp, #232]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #208]
; NONEON-NOSVE-NEXT: str x9, [sp, #224]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #192]
; NONEON-NOSVE-NEXT: strb w9, [sp, #236]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #224]
; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB2_16
; NONEON-NOSVE-NEXT: .LBB2_31: // %cond.load49
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #144]
; NONEON-NOSVE-NEXT: strb w9, [sp, #176]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #158]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #176]
; NONEON-NOSVE-NEXT: strh w9, [sp, #174]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #156]
; NONEON-NOSVE-NEXT: str q0, [sp, #128]
; NONEON-NOSVE-NEXT: strb w9, [sp, #172]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #152]
; NONEON-NOSVE-NEXT: str w9, [sp, #168]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #144]
; NONEON-NOSVE-NEXT: str x9, [sp, #160]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #128]
; NONEON-NOSVE-NEXT: strb w9, [sp, #173]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #160]
; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB2_17
; NONEON-NOSVE-NEXT: .LBB2_32: // %cond.load53
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #80]
; NONEON-NOSVE-NEXT: strb w9, [sp, #112]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #95]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #112]
; NONEON-NOSVE-NEXT: strb w9, [sp, #111]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #92]
; NONEON-NOSVE-NEXT: str q0, [sp, #64]
; NONEON-NOSVE-NEXT: strh w9, [sp, #108]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #88]
; NONEON-NOSVE-NEXT: str w9, [sp, #104]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #80]
; NONEON-NOSVE-NEXT: str x9, [sp, #96]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #64]
; NONEON-NOSVE-NEXT: strb w9, [sp, #110]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #96]
; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB2_18
; NONEON-NOSVE-NEXT: b .LBB2_19
%load = call <16 x i8> @llvm.masked.expandload.v16i8(ptr %src, <16 x i1> %mask, <16 x i8> zeroinitializer)
ret <16 x i8> %load
}
define <32 x i8> @masked_load_v32i8(ptr %src, <32 x i1> %mask) {
; CHECK-LABEL: masked_load_v32i8:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #48
; CHECK-NEXT: .cfi_def_cfa_offset 48
; CHECK-NEXT: ldr w8, [sp, #240]
; CHECK-NEXT: ldr w9, [sp, #232]
; CHECK-NEXT: ptrue p0.b, vl16
; CHECK-NEXT: strb w7, [sp, #22]
; CHECK-NEXT: strb w8, [sp, #47]
; CHECK-NEXT: ldr w8, [sp, #224]
; CHECK-NEXT: strb w9, [sp, #46]
; CHECK-NEXT: ldr w9, [sp, #216]
; CHECK-NEXT: strb w8, [sp, #45]
; CHECK-NEXT: ldr w8, [sp, #208]
; CHECK-NEXT: strb w9, [sp, #44]
; CHECK-NEXT: ldr w9, [sp, #200]
; CHECK-NEXT: strb w8, [sp, #43]
; CHECK-NEXT: ldr w8, [sp, #192]
; CHECK-NEXT: strb w9, [sp, #42]
; CHECK-NEXT: ldr w9, [sp, #184]
; CHECK-NEXT: strb w8, [sp, #41]
; CHECK-NEXT: ldr w8, [sp, #176]
; CHECK-NEXT: strb w9, [sp, #40]
; CHECK-NEXT: ldr w9, [sp, #168]
; CHECK-NEXT: strb w8, [sp, #39]
; CHECK-NEXT: ldr w8, [sp, #160]
; CHECK-NEXT: strb w9, [sp, #38]
; CHECK-NEXT: ldr w9, [sp, #152]
; CHECK-NEXT: strb w8, [sp, #37]
; CHECK-NEXT: ldr w8, [sp, #144]
; CHECK-NEXT: strb w9, [sp, #36]
; CHECK-NEXT: ldr w9, [sp, #136]
; CHECK-NEXT: strb w8, [sp, #35]
; CHECK-NEXT: ldr w8, [sp, #128]
; CHECK-NEXT: strb w9, [sp, #34]
; CHECK-NEXT: ldr w9, [sp, #120]
; CHECK-NEXT: strb w8, [sp, #33]
; CHECK-NEXT: ldr w8, [sp, #112]
; CHECK-NEXT: strb w9, [sp, #32]
; CHECK-NEXT: ldr w9, [sp, #104]
; CHECK-NEXT: strb w8, [sp, #31]
; CHECK-NEXT: ldr w8, [sp, #96]
; CHECK-NEXT: strb w9, [sp, #30]
; CHECK-NEXT: ldr w9, [sp, #88]
; CHECK-NEXT: strb w8, [sp, #29]
; CHECK-NEXT: ldr w8, [sp, #80]
; CHECK-NEXT: strb w9, [sp, #28]
; CHECK-NEXT: ldr w9, [sp, #72]
; CHECK-NEXT: strb w8, [sp, #27]
; CHECK-NEXT: ldr w8, [sp, #64]
; CHECK-NEXT: strb w9, [sp, #26]
; CHECK-NEXT: ldr w9, [sp, #56]
; CHECK-NEXT: strb w8, [sp, #25]
; CHECK-NEXT: ldr w8, [sp, #48]
; CHECK-NEXT: strb w9, [sp, #24]
; CHECK-NEXT: strb w8, [sp, #23]
; CHECK-NEXT: adrp x8, .LCPI3_0
; CHECK-NEXT: strb w6, [sp, #21]
; CHECK-NEXT: ldr q2, [x8, :lo12:.LCPI3_0]
; CHECK-NEXT: strb w5, [sp, #20]
; CHECK-NEXT: strb w4, [sp, #19]
; CHECK-NEXT: strb w3, [sp, #18]
; CHECK-NEXT: strb w2, [sp, #17]
; CHECK-NEXT: strb w1, [sp, #16]
; CHECK-NEXT: ldp q1, q0, [sp, #16]
; 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: and z0.d, z0.d, z2.d
; CHECK-NEXT: and z1.d, z1.d, z2.d
; CHECK-NEXT: uaddv d0, p0, z0.b
; CHECK-NEXT: uaddv d1, p0, z1.b
; CHECK-NEXT: fmov w9, s0
; CHECK-NEXT: mov z0.b, #0 // =0x0
; CHECK-NEXT: fmov w8, s1
; CHECK-NEXT: mov z1.b, #0 // =0x0
; CHECK-NEXT: bfi w8, w9, #16, #16
; CHECK-NEXT: tbz w8, #0, .LBB3_32
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: strh wzr, [sp, #14]
; CHECK-NEXT: strh wzr, [sp, #12]
; CHECK-NEXT: mov z1.b, #0 // =0x0
; CHECK-NEXT: strh wzr, [sp, #10]
; CHECK-NEXT: strh wzr, [sp, #8]
; CHECK-NEXT: strh wzr, [sp, #6]
; CHECK-NEXT: strh wzr, [sp, #4]
; CHECK-NEXT: strh wzr, [sp, #2]
; CHECK-NEXT: strb wzr, [sp, #1]
; CHECK-NEXT: strb w9, [sp]
; CHECK-NEXT: ldr q0, [sp]
; CHECK-NEXT: tbnz w8, #1, .LBB3_33
; CHECK-NEXT: .LBB3_2: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB3_34
; CHECK-NEXT: .LBB3_3: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #3, .LBB3_35
; CHECK-NEXT: .LBB3_4: // %else10
; CHECK-NEXT: tbz w8, #4, .LBB3_36
; CHECK-NEXT: .LBB3_5: // %cond.load13
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #5, .LBB3_37
; CHECK-NEXT: .LBB3_6: // %else18
; CHECK-NEXT: tbz w8, #6, .LBB3_38
; CHECK-NEXT: .LBB3_7: // %cond.load21
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #7, .LBB3_39
; CHECK-NEXT: .LBB3_8: // %else26
; CHECK-NEXT: tbz w8, #8, .LBB3_40
; CHECK-NEXT: .LBB3_9: // %cond.load29
; CHECK-NEXT: mov w9, #8 // =0x8
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #9, .LBB3_41
; CHECK-NEXT: .LBB3_10: // %else34
; CHECK-NEXT: tbz w8, #10, .LBB3_42
; CHECK-NEXT: .LBB3_11: // %cond.load37
; CHECK-NEXT: mov w9, #10 // =0xa
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #11, .LBB3_43
; CHECK-NEXT: .LBB3_12: // %else42
; CHECK-NEXT: tbz w8, #12, .LBB3_44
; CHECK-NEXT: .LBB3_13: // %cond.load45
; CHECK-NEXT: mov w9, #12 // =0xc
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #13, .LBB3_45
; CHECK-NEXT: .LBB3_14: // %else50
; CHECK-NEXT: tbz w8, #14, .LBB3_46
; CHECK-NEXT: .LBB3_15: // %cond.load53
; CHECK-NEXT: mov w9, #14 // =0xe
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #15, .LBB3_47
; CHECK-NEXT: .LBB3_16: // %else58
; CHECK-NEXT: tbz w8, #16, .LBB3_48
; CHECK-NEXT: .LBB3_17: // %cond.load61
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: ptrue p0.b, vl1
; CHECK-NEXT: mov z1.b, p0/m, w9
; CHECK-NEXT: tbnz w8, #17, .LBB3_49
; CHECK-NEXT: .LBB3_18: // %else66
; CHECK-NEXT: tbz w8, #18, .LBB3_50
; CHECK-NEXT: .LBB3_19: // %cond.load69
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #19, .LBB3_51
; CHECK-NEXT: .LBB3_20: // %else74
; CHECK-NEXT: tbz w8, #20, .LBB3_52
; CHECK-NEXT: .LBB3_21: // %cond.load77
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #21, .LBB3_53
; CHECK-NEXT: .LBB3_22: // %else82
; CHECK-NEXT: tbz w8, #22, .LBB3_54
; CHECK-NEXT: .LBB3_23: // %cond.load85
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #23, .LBB3_55
; CHECK-NEXT: .LBB3_24: // %else90
; CHECK-NEXT: tbz w8, #24, .LBB3_56
; CHECK-NEXT: .LBB3_25: // %cond.load93
; CHECK-NEXT: mov w9, #8 // =0x8
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #25, .LBB3_57
; CHECK-NEXT: .LBB3_26: // %else98
; CHECK-NEXT: tbz w8, #26, .LBB3_58
; CHECK-NEXT: .LBB3_27: // %cond.load101
; CHECK-NEXT: mov w9, #10 // =0xa
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #27, .LBB3_59
; CHECK-NEXT: .LBB3_28: // %else106
; CHECK-NEXT: tbz w8, #28, .LBB3_60
; CHECK-NEXT: .LBB3_29: // %cond.load109
; CHECK-NEXT: mov w9, #12 // =0xc
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #29, .LBB3_61
; CHECK-NEXT: .LBB3_30: // %else114
; CHECK-NEXT: tbz w8, #30, .LBB3_62
; CHECK-NEXT: .LBB3_31: // %cond.load117
; CHECK-NEXT: mov w9, #14 // =0xe
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbz w8, #31, .LBB3_64
; CHECK-NEXT: b .LBB3_63
; CHECK-NEXT: .LBB3_32: // %else
; CHECK-NEXT: tbz w8, #1, .LBB3_2
; CHECK-NEXT: .LBB3_33: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #2, .LBB3_3
; CHECK-NEXT: .LBB3_34: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB3_4
; CHECK-NEXT: .LBB3_35: // %cond.load9
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #4, .LBB3_5
; CHECK-NEXT: .LBB3_36: // %else14
; CHECK-NEXT: tbz w8, #5, .LBB3_6
; CHECK-NEXT: .LBB3_37: // %cond.load17
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #6, .LBB3_7
; CHECK-NEXT: .LBB3_38: // %else22
; CHECK-NEXT: tbz w8, #7, .LBB3_8
; CHECK-NEXT: .LBB3_39: // %cond.load25
; CHECK-NEXT: mov w9, #7 // =0x7
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #8, .LBB3_9
; CHECK-NEXT: .LBB3_40: // %else30
; CHECK-NEXT: tbz w8, #9, .LBB3_10
; CHECK-NEXT: .LBB3_41: // %cond.load33
; CHECK-NEXT: mov w9, #9 // =0x9
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #10, .LBB3_11
; CHECK-NEXT: .LBB3_42: // %else38
; CHECK-NEXT: tbz w8, #11, .LBB3_12
; CHECK-NEXT: .LBB3_43: // %cond.load41
; CHECK-NEXT: mov w9, #11 // =0xb
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #12, .LBB3_13
; CHECK-NEXT: .LBB3_44: // %else46
; CHECK-NEXT: tbz w8, #13, .LBB3_14
; CHECK-NEXT: .LBB3_45: // %cond.load49
; CHECK-NEXT: mov w9, #13 // =0xd
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #14, .LBB3_15
; CHECK-NEXT: .LBB3_46: // %else54
; CHECK-NEXT: tbz w8, #15, .LBB3_16
; CHECK-NEXT: .LBB3_47: // %cond.load57
; CHECK-NEXT: mov w9, #15 // =0xf
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z0.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #16, .LBB3_17
; CHECK-NEXT: .LBB3_48: // %else62
; CHECK-NEXT: tbz w8, #17, .LBB3_18
; CHECK-NEXT: .LBB3_49: // %cond.load65
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #18, .LBB3_19
; CHECK-NEXT: .LBB3_50: // %else70
; CHECK-NEXT: tbz w8, #19, .LBB3_20
; CHECK-NEXT: .LBB3_51: // %cond.load73
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #20, .LBB3_21
; CHECK-NEXT: .LBB3_52: // %else78
; CHECK-NEXT: tbz w8, #21, .LBB3_22
; CHECK-NEXT: .LBB3_53: // %cond.load81
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #22, .LBB3_23
; CHECK-NEXT: .LBB3_54: // %else86
; CHECK-NEXT: tbz w8, #23, .LBB3_24
; CHECK-NEXT: .LBB3_55: // %cond.load89
; CHECK-NEXT: mov w9, #7 // =0x7
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #24, .LBB3_25
; CHECK-NEXT: .LBB3_56: // %else94
; CHECK-NEXT: tbz w8, #25, .LBB3_26
; CHECK-NEXT: .LBB3_57: // %cond.load97
; CHECK-NEXT: mov w9, #9 // =0x9
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #26, .LBB3_27
; CHECK-NEXT: .LBB3_58: // %else102
; CHECK-NEXT: tbz w8, #27, .LBB3_28
; CHECK-NEXT: .LBB3_59: // %cond.load105
; CHECK-NEXT: mov w9, #11 // =0xb
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #28, .LBB3_29
; CHECK-NEXT: .LBB3_60: // %else110
; CHECK-NEXT: tbz w8, #29, .LBB3_30
; CHECK-NEXT: .LBB3_61: // %cond.load113
; CHECK-NEXT: mov w9, #13 // =0xd
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w9
; CHECK-NEXT: ldrb w9, [x0], #1
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w9
; CHECK-NEXT: tbnz w8, #30, .LBB3_31
; CHECK-NEXT: .LBB3_62: // %else118
; CHECK-NEXT: tbz w8, #31, .LBB3_64
; CHECK-NEXT: .LBB3_63: // %cond.load121
; CHECK-NEXT: mov w8, #15 // =0xf
; CHECK-NEXT: index z2.b, #0, #1
; CHECK-NEXT: ptrue p0.b
; CHECK-NEXT: mov z3.b, w8
; CHECK-NEXT: ldrb w8, [x0]
; CHECK-NEXT: cmpeq p1.b, p0/z, z2.b, z3.b
; CHECK-NEXT: mov z1.b, p1/m, w8
; CHECK-NEXT: .LBB3_64: // %else122
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
; CHECK-NEXT: add sp, sp, #48
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v32i8:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: str x29, [sp, #-16]! // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: sub sp, sp, #2000
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 2016
; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
; NONEON-NOSVE-NEXT: ldr w8, [sp, #2096]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #2104]
; NONEON-NOSVE-NEXT: sbfx w15, w7, #0, #1
; NONEON-NOSVE-NEXT: ldr w10, [sp, #2112]
; NONEON-NOSVE-NEXT: ldr w11, [sp, #2088]
; NONEON-NOSVE-NEXT: ldr w12, [sp, #2120]
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
; NONEON-NOSVE-NEXT: ldr w13, [sp, #2136]
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: ldr w14, [sp, #2144]
; NONEON-NOSVE-NEXT: ldr w16, [sp, #2016]
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1
; NONEON-NOSVE-NEXT: sbfx w11, w12, #0, #1
; NONEON-NOSVE-NEXT: ldr w12, [sp, #2128]
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
; NONEON-NOSVE-NEXT: orr w9, w9, w10
; NONEON-NOSVE-NEXT: and w10, w11, #0x10
; NONEON-NOSVE-NEXT: sbfx w11, w12, #0, #1
; NONEON-NOSVE-NEXT: orr w9, w9, w10
; NONEON-NOSVE-NEXT: sbfx w10, w13, #0, #1
; NONEON-NOSVE-NEXT: sbfx w12, w4, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w8, w9
; NONEON-NOSVE-NEXT: and w9, w11, #0x20
; NONEON-NOSVE-NEXT: sbfx w11, w3, #0, #1
; NONEON-NOSVE-NEXT: and w10, w10, #0x40
; NONEON-NOSVE-NEXT: sbfx w13, w5, #0, #1
; NONEON-NOSVE-NEXT: and w12, w12, #0x8
; NONEON-NOSVE-NEXT: orr w9, w9, w10
; NONEON-NOSVE-NEXT: sbfx w10, w2, #0, #1
; NONEON-NOSVE-NEXT: and w11, w11, #0x4
; 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: and w10, w10, #0x2
; NONEON-NOSVE-NEXT: orr w11, w11, w12
; NONEON-NOSVE-NEXT: orr w8, w8, w9
; NONEON-NOSVE-NEXT: bfxil w10, w1, #0, #1
; 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: adrp x9, .LCPI3_0
; NONEON-NOSVE-NEXT: bfi w8, w11, #16, #16
; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI3_0]
; NONEON-NOSVE-NEXT: add x9, sp, #1744
; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB3_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: strb wzr, [sp, #1999]
; NONEON-NOSVE-NEXT: sturh wzr, [x9, #253]
; NONEON-NOSVE-NEXT: stur wzr, [x9, #249]
; NONEON-NOSVE-NEXT: stur xzr, [x9, #241]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1984]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1984]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB3_3
; NONEON-NOSVE-NEXT: b .LBB3_4
; NONEON-NOSVE-NEXT: .LBB3_2:
; NONEON-NOSVE-NEXT: str q1, [sp, #-16]!
; NONEON-NOSVE-NEXT: ldr q0, [sp], #16
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB3_4
; NONEON-NOSVE-NEXT: .LBB3_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1936]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1968]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1950]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1968]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1966]
; NONEON-NOSVE-NEXT: str q0, [sp, #1920]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #202]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #194]
; NONEON-NOSVE-NEXT: stur w10, [x9, #218]
; NONEON-NOSVE-NEXT: stur x11, [x9, #210]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1936]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1952]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1920]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1953]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1952]
; NONEON-NOSVE-NEXT: .LBB3_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB3_36
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB3_37
; NONEON-NOSVE-NEXT: .LBB3_6: // %else10
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB3_38
; NONEON-NOSVE-NEXT: .LBB3_7: // %else14
; NONEON-NOSVE-NEXT: add x9, sp, #1488
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB3_39
; NONEON-NOSVE-NEXT: .LBB3_8: // %else18
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB3_40
; NONEON-NOSVE-NEXT: .LBB3_9: // %else22
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB3_41
; NONEON-NOSVE-NEXT: .LBB3_10: // %else26
; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB3_42
; NONEON-NOSVE-NEXT: .LBB3_11: // %else30
; NONEON-NOSVE-NEXT: add x9, sp, #1232
; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB3_43
; NONEON-NOSVE-NEXT: .LBB3_12: // %else34
; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB3_44
; NONEON-NOSVE-NEXT: .LBB3_13: // %else38
; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB3_45
; NONEON-NOSVE-NEXT: .LBB3_14: // %else42
; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB3_46
; NONEON-NOSVE-NEXT: .LBB3_15: // %else46
; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB3_47
; NONEON-NOSVE-NEXT: .LBB3_16: // %else50
; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB3_48
; NONEON-NOSVE-NEXT: .LBB3_17: // %else54
; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB3_49
; NONEON-NOSVE-NEXT: .LBB3_18: // %else58
; NONEON-NOSVE-NEXT: tbnz w8, #16, .LBB3_50
; NONEON-NOSVE-NEXT: .LBB3_19: // %else62
; NONEON-NOSVE-NEXT: add x9, sp, #720
; NONEON-NOSVE-NEXT: tbnz w8, #17, .LBB3_51
; NONEON-NOSVE-NEXT: .LBB3_20: // %else66
; NONEON-NOSVE-NEXT: tbnz w8, #18, .LBB3_52
; NONEON-NOSVE-NEXT: .LBB3_21: // %else70
; NONEON-NOSVE-NEXT: tbnz w8, #19, .LBB3_53
; NONEON-NOSVE-NEXT: .LBB3_22: // %else74
; NONEON-NOSVE-NEXT: tbnz w8, #20, .LBB3_54
; NONEON-NOSVE-NEXT: .LBB3_23: // %else78
; NONEON-NOSVE-NEXT: add x9, sp, #464
; NONEON-NOSVE-NEXT: tbnz w8, #21, .LBB3_55
; NONEON-NOSVE-NEXT: .LBB3_24: // %else82
; NONEON-NOSVE-NEXT: tbnz w8, #22, .LBB3_56
; NONEON-NOSVE-NEXT: .LBB3_25: // %else86
; NONEON-NOSVE-NEXT: tbnz w8, #23, .LBB3_57
; NONEON-NOSVE-NEXT: .LBB3_26: // %else90
; NONEON-NOSVE-NEXT: tbnz w8, #24, .LBB3_58
; NONEON-NOSVE-NEXT: .LBB3_27: // %else94
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: tbnz w8, #25, .LBB3_59
; NONEON-NOSVE-NEXT: .LBB3_28: // %else98
; NONEON-NOSVE-NEXT: tbnz w8, #26, .LBB3_60
; NONEON-NOSVE-NEXT: .LBB3_29: // %else102
; NONEON-NOSVE-NEXT: tbnz w8, #27, .LBB3_61
; NONEON-NOSVE-NEXT: .LBB3_30: // %else106
; NONEON-NOSVE-NEXT: tbnz w8, #28, .LBB3_62
; NONEON-NOSVE-NEXT: .LBB3_31: // %else110
; NONEON-NOSVE-NEXT: tbnz w8, #29, .LBB3_63
; NONEON-NOSVE-NEXT: .LBB3_32: // %else114
; NONEON-NOSVE-NEXT: tbnz w8, #30, .LBB3_64
; NONEON-NOSVE-NEXT: .LBB3_33: // %else118
; NONEON-NOSVE-NEXT: tbz w8, #31, .LBB3_35
; NONEON-NOSVE-NEXT: .LBB3_34: // %cond.load121
; NONEON-NOSVE-NEXT: ldrb w8, [x0]
; NONEON-NOSVE-NEXT: str q1, [sp]
; NONEON-NOSVE-NEXT: strb w8, [sp, #48]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #48]
; NONEON-NOSVE-NEXT: strb w8, [sp, #46]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
; NONEON-NOSVE-NEXT: str q1, [sp, #16]
; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str w8, [sp, #40]
; NONEON-NOSVE-NEXT: ldr x8, [sp]
; NONEON-NOSVE-NEXT: str x8, [sp, #32]
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16]
; NONEON-NOSVE-NEXT: strb w8, [sp, #47]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #32]
; NONEON-NOSVE-NEXT: .LBB3_35: // %else122
; NONEON-NOSVE-NEXT: add sp, sp, #2000
; NONEON-NOSVE-NEXT: ldr x29, [sp], #16 // 8-byte Folded Reload
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB3_36: // %cond.load5
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1872]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1904]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1887]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1904]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1903]
; NONEON-NOSVE-NEXT: str q0, [sp, #1856]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #139]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #131]
; NONEON-NOSVE-NEXT: stur w10, [x9, #155]
; NONEON-NOSVE-NEXT: stur x11, [x9, #147]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1872]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1888]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1856]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1890]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1888]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB3_6
; NONEON-NOSVE-NEXT: .LBB3_37: // %cond.load9
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1808]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1840]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #1820]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1840]
; NONEON-NOSVE-NEXT: str w10, [sp, #1836]
; NONEON-NOSVE-NEXT: str q0, [sp, #1792]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #68]
; NONEON-NOSVE-NEXT: stur x10, [x9, #84]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1810]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1826]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1808]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1824]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1792]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1827]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1824]
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB3_7
; NONEON-NOSVE-NEXT: .LBB3_38: // %cond.load13
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1744]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1776]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1759]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1776]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1775]
; NONEON-NOSVE-NEXT: str q0, [sp, #1728]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #5]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: stur x11, [x9, #21]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #1744]
; NONEON-NOSVE-NEXT: str w9, [sp, #1760]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1728]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1764]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1760]
; NONEON-NOSVE-NEXT: add x9, sp, #1488
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB3_8
; NONEON-NOSVE-NEXT: .LBB3_39: // %cond.load17
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1680]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1712]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1694]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1712]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1710]
; NONEON-NOSVE-NEXT: str q0, [sp, #1664]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #198]
; NONEON-NOSVE-NEXT: stur x10, [x9, #214]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1684]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1700]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #1680]
; NONEON-NOSVE-NEXT: str w10, [sp, #1696]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1664]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1701]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1696]
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB3_9
; NONEON-NOSVE-NEXT: .LBB3_40: // %cond.load21
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1616]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1648]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1631]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1648]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1647]
; NONEON-NOSVE-NEXT: str q0, [sp, #1600]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #135]
; NONEON-NOSVE-NEXT: stur x10, [x9, #151]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1620]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1636]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #1616]
; NONEON-NOSVE-NEXT: str w10, [sp, #1632]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1600]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1638]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1632]
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB3_10
; NONEON-NOSVE-NEXT: .LBB3_41: // %cond.load25
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1552]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1584]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #1560]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1584]
; NONEON-NOSVE-NEXT: str x10, [sp, #1576]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1558]
; NONEON-NOSVE-NEXT: str q0, [sp, #1536]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1574]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1556]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1572]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #1552]
; NONEON-NOSVE-NEXT: str w10, [sp, #1568]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1536]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1575]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1568]
; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB3_11
; NONEON-NOSVE-NEXT: .LBB3_42: // %cond.load29
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1488]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1520]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1503]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1520]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1519]
; NONEON-NOSVE-NEXT: str q0, [sp, #1472]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: ldur w11, [x9, #9]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: stur w11, [x9, #25]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #1488]
; NONEON-NOSVE-NEXT: str x9, [sp, #1504]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1472]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1512]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1504]
; NONEON-NOSVE-NEXT: add x9, sp, #1232
; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB3_12
; NONEON-NOSVE-NEXT: .LBB3_43: // %cond.load33
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1424]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1456]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1438]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1456]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1454]
; NONEON-NOSVE-NEXT: str q0, [sp, #1408]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #202]
; NONEON-NOSVE-NEXT: stur w10, [x9, #218]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1432]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1448]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #1424]
; NONEON-NOSVE-NEXT: str x10, [sp, #1440]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1408]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1449]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1440]
; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB3_13
; NONEON-NOSVE-NEXT: .LBB3_44: // %cond.load37
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1360]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1392]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1375]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1392]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1391]
; NONEON-NOSVE-NEXT: str q0, [sp, #1344]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #139]
; NONEON-NOSVE-NEXT: stur w10, [x9, #155]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1368]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1384]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #1360]
; NONEON-NOSVE-NEXT: str x10, [sp, #1376]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1344]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1386]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1376]
; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB3_14
; NONEON-NOSVE-NEXT: .LBB3_45: // %cond.load41
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1296]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1328]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #1308]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1328]
; NONEON-NOSVE-NEXT: str w10, [sp, #1324]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1306]
; NONEON-NOSVE-NEXT: str q0, [sp, #1280]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1322]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1304]
; NONEON-NOSVE-NEXT: strh w10, [sp, #1320]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #1296]
; NONEON-NOSVE-NEXT: str x10, [sp, #1312]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1280]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1323]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1312]
; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB3_15
; NONEON-NOSVE-NEXT: .LBB3_46: // %cond.load45
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1232]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1264]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1247]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1264]
; NONEON-NOSVE-NEXT: strb w10, [sp, #1263]
; NONEON-NOSVE-NEXT: str q0, [sp, #1216]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #1240]
; NONEON-NOSVE-NEXT: str w9, [sp, #1256]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #1232]
; NONEON-NOSVE-NEXT: str x9, [sp, #1248]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1216]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1260]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1248]
; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB3_16
; NONEON-NOSVE-NEXT: .LBB3_47: // %cond.load49
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1168]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1200]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #1182]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1200]
; NONEON-NOSVE-NEXT: strh w9, [sp, #1198]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1180]
; NONEON-NOSVE-NEXT: str q0, [sp, #1152]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1196]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #1176]
; NONEON-NOSVE-NEXT: str w9, [sp, #1192]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #1168]
; NONEON-NOSVE-NEXT: str x9, [sp, #1184]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1152]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1197]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1184]
; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB3_17
; NONEON-NOSVE-NEXT: .LBB3_48: // %cond.load53
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1104]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1136]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1119]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1136]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1135]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #1116]
; NONEON-NOSVE-NEXT: str q0, [sp, #1088]
; NONEON-NOSVE-NEXT: strh w9, [sp, #1132]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #1112]
; NONEON-NOSVE-NEXT: str w9, [sp, #1128]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #1104]
; NONEON-NOSVE-NEXT: str x9, [sp, #1120]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1088]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1134]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1120]
; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB3_18
; NONEON-NOSVE-NEXT: .LBB3_49: // %cond.load57
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q0, [sp, #1024]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1072]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1038]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1072]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1070]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #1036]
; NONEON-NOSVE-NEXT: str q0, [sp, #1040]
; NONEON-NOSVE-NEXT: strh w9, [sp, #1068]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #1032]
; NONEON-NOSVE-NEXT: str w9, [sp, #1064]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #1024]
; NONEON-NOSVE-NEXT: str x9, [sp, #1056]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1040]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1071]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #1056]
; NONEON-NOSVE-NEXT: tbz w8, #16, .LBB3_19
; NONEON-NOSVE-NEXT: .LBB3_50: // %cond.load61
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #976]
; NONEON-NOSVE-NEXT: add x10, sp, #976
; NONEON-NOSVE-NEXT: strb w9, [sp, #1008]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #991]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #1008]
; NONEON-NOSVE-NEXT: strb w9, [sp, #1007]
; NONEON-NOSVE-NEXT: str q1, [sp, #960]
; NONEON-NOSVE-NEXT: ldurh w9, [x10, #13]
; NONEON-NOSVE-NEXT: ldur w11, [x10, #9]
; NONEON-NOSVE-NEXT: sturh w9, [x10, #29]
; NONEON-NOSVE-NEXT: ldur x9, [x10, #1]
; NONEON-NOSVE-NEXT: stur w11, [x10, #25]
; NONEON-NOSVE-NEXT: stur x9, [x10, #17]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #960]
; NONEON-NOSVE-NEXT: strb w9, [sp, #992]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #992]
; NONEON-NOSVE-NEXT: add x9, sp, #720
; NONEON-NOSVE-NEXT: tbz w8, #17, .LBB3_20
; NONEON-NOSVE-NEXT: .LBB3_51: // %cond.load65
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #912]
; NONEON-NOSVE-NEXT: strb w10, [sp, #944]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #926]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #944]
; NONEON-NOSVE-NEXT: strh w10, [sp, #942]
; NONEON-NOSVE-NEXT: str q1, [sp, #896]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #202]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #194]
; NONEON-NOSVE-NEXT: stur w10, [x9, #218]
; NONEON-NOSVE-NEXT: stur x11, [x9, #210]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #912]
; NONEON-NOSVE-NEXT: strb w10, [sp, #928]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #896]
; NONEON-NOSVE-NEXT: strb w10, [sp, #929]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #928]
; NONEON-NOSVE-NEXT: tbz w8, #18, .LBB3_21
; NONEON-NOSVE-NEXT: .LBB3_52: // %cond.load69
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #848]
; NONEON-NOSVE-NEXT: strb w10, [sp, #880]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #863]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #880]
; NONEON-NOSVE-NEXT: strb w10, [sp, #879]
; NONEON-NOSVE-NEXT: str q1, [sp, #832]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #139]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #131]
; NONEON-NOSVE-NEXT: stur w10, [x9, #155]
; NONEON-NOSVE-NEXT: stur x11, [x9, #147]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #848]
; NONEON-NOSVE-NEXT: strh w10, [sp, #864]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #832]
; NONEON-NOSVE-NEXT: strb w10, [sp, #866]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #864]
; NONEON-NOSVE-NEXT: tbz w8, #19, .LBB3_22
; NONEON-NOSVE-NEXT: .LBB3_53: // %cond.load73
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #784]
; NONEON-NOSVE-NEXT: strb w10, [sp, #816]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #796]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #816]
; NONEON-NOSVE-NEXT: str w10, [sp, #812]
; NONEON-NOSVE-NEXT: str q1, [sp, #768]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #68]
; NONEON-NOSVE-NEXT: stur x10, [x9, #84]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #786]
; NONEON-NOSVE-NEXT: strb w10, [sp, #802]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #784]
; NONEON-NOSVE-NEXT: strh w10, [sp, #800]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #768]
; NONEON-NOSVE-NEXT: strb w10, [sp, #803]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #800]
; NONEON-NOSVE-NEXT: tbz w8, #20, .LBB3_23
; NONEON-NOSVE-NEXT: .LBB3_54: // %cond.load77
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #720]
; NONEON-NOSVE-NEXT: strb w10, [sp, #752]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #735]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #752]
; NONEON-NOSVE-NEXT: strb w10, [sp, #751]
; NONEON-NOSVE-NEXT: str q1, [sp, #704]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #5]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: stur x11, [x9, #21]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #720]
; NONEON-NOSVE-NEXT: str w9, [sp, #736]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #704]
; NONEON-NOSVE-NEXT: strb w9, [sp, #740]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #736]
; NONEON-NOSVE-NEXT: add x9, sp, #464
; NONEON-NOSVE-NEXT: tbz w8, #21, .LBB3_24
; NONEON-NOSVE-NEXT: .LBB3_55: // %cond.load81
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #656]
; NONEON-NOSVE-NEXT: strb w10, [sp, #688]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #670]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #688]
; NONEON-NOSVE-NEXT: strh w10, [sp, #686]
; NONEON-NOSVE-NEXT: str q1, [sp, #640]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #198]
; NONEON-NOSVE-NEXT: stur x10, [x9, #214]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #660]
; NONEON-NOSVE-NEXT: strb w10, [sp, #676]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #656]
; NONEON-NOSVE-NEXT: str w10, [sp, #672]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #640]
; NONEON-NOSVE-NEXT: strb w10, [sp, #677]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #672]
; NONEON-NOSVE-NEXT: tbz w8, #22, .LBB3_25
; NONEON-NOSVE-NEXT: .LBB3_56: // %cond.load85
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #592]
; NONEON-NOSVE-NEXT: strb w10, [sp, #624]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #607]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #624]
; NONEON-NOSVE-NEXT: strb w10, [sp, #623]
; NONEON-NOSVE-NEXT: str q1, [sp, #576]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #135]
; NONEON-NOSVE-NEXT: stur x10, [x9, #151]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #596]
; NONEON-NOSVE-NEXT: strh w10, [sp, #612]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #592]
; NONEON-NOSVE-NEXT: str w10, [sp, #608]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #576]
; NONEON-NOSVE-NEXT: strb w10, [sp, #614]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #608]
; NONEON-NOSVE-NEXT: tbz w8, #23, .LBB3_26
; NONEON-NOSVE-NEXT: .LBB3_57: // %cond.load89
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #528]
; NONEON-NOSVE-NEXT: strb w10, [sp, #560]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #536]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #560]
; NONEON-NOSVE-NEXT: str x10, [sp, #552]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #534]
; NONEON-NOSVE-NEXT: str q1, [sp, #512]
; NONEON-NOSVE-NEXT: strb w10, [sp, #550]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #532]
; NONEON-NOSVE-NEXT: strh w10, [sp, #548]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #528]
; NONEON-NOSVE-NEXT: str w10, [sp, #544]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #512]
; NONEON-NOSVE-NEXT: strb w10, [sp, #551]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #544]
; NONEON-NOSVE-NEXT: tbz w8, #24, .LBB3_27
; NONEON-NOSVE-NEXT: .LBB3_58: // %cond.load93
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #464]
; NONEON-NOSVE-NEXT: strb w10, [sp, #496]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #479]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #496]
; NONEON-NOSVE-NEXT: strb w10, [sp, #495]
; NONEON-NOSVE-NEXT: str q1, [sp, #448]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: ldur w11, [x9, #9]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: stur w11, [x9, #25]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #464]
; NONEON-NOSVE-NEXT: str x9, [sp, #480]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #448]
; NONEON-NOSVE-NEXT: strb w9, [sp, #488]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #480]
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: tbz w8, #25, .LBB3_28
; NONEON-NOSVE-NEXT: .LBB3_59: // %cond.load97
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #400]
; NONEON-NOSVE-NEXT: strb w10, [sp, #432]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #414]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #432]
; NONEON-NOSVE-NEXT: strh w10, [sp, #430]
; NONEON-NOSVE-NEXT: str q1, [sp, #384]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #202]
; NONEON-NOSVE-NEXT: stur w10, [x9, #218]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #408]
; NONEON-NOSVE-NEXT: strb w10, [sp, #424]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #400]
; NONEON-NOSVE-NEXT: str x10, [sp, #416]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #384]
; NONEON-NOSVE-NEXT: strb w10, [sp, #425]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #416]
; NONEON-NOSVE-NEXT: tbz w8, #26, .LBB3_29
; NONEON-NOSVE-NEXT: .LBB3_60: // %cond.load101
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #336]
; NONEON-NOSVE-NEXT: strb w10, [sp, #368]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #351]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #368]
; NONEON-NOSVE-NEXT: strb w10, [sp, #367]
; NONEON-NOSVE-NEXT: str q1, [sp, #320]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #139]
; NONEON-NOSVE-NEXT: stur w10, [x9, #155]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #344]
; NONEON-NOSVE-NEXT: strh w10, [sp, #360]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #336]
; NONEON-NOSVE-NEXT: str x10, [sp, #352]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #320]
; NONEON-NOSVE-NEXT: strb w10, [sp, #362]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #352]
; NONEON-NOSVE-NEXT: tbz w8, #27, .LBB3_30
; NONEON-NOSVE-NEXT: .LBB3_61: // %cond.load105
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #272]
; NONEON-NOSVE-NEXT: strb w10, [sp, #304]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #284]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #304]
; NONEON-NOSVE-NEXT: str w10, [sp, #300]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #282]
; NONEON-NOSVE-NEXT: str q1, [sp, #256]
; NONEON-NOSVE-NEXT: strb w10, [sp, #298]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #280]
; NONEON-NOSVE-NEXT: strh w10, [sp, #296]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #272]
; NONEON-NOSVE-NEXT: str x10, [sp, #288]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #256]
; NONEON-NOSVE-NEXT: strb w10, [sp, #299]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #288]
; NONEON-NOSVE-NEXT: tbz w8, #28, .LBB3_31
; NONEON-NOSVE-NEXT: .LBB3_62: // %cond.load109
; NONEON-NOSVE-NEXT: ldrb w10, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #208]
; NONEON-NOSVE-NEXT: strb w10, [sp, #240]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #223]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #240]
; NONEON-NOSVE-NEXT: strb w10, [sp, #239]
; NONEON-NOSVE-NEXT: str q1, [sp, #192]
; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13]
; NONEON-NOSVE-NEXT: sturh w10, [x9, #29]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #216]
; NONEON-NOSVE-NEXT: str w9, [sp, #232]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #208]
; NONEON-NOSVE-NEXT: str x9, [sp, #224]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #192]
; NONEON-NOSVE-NEXT: strb w9, [sp, #236]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #224]
; NONEON-NOSVE-NEXT: tbz w8, #29, .LBB3_32
; NONEON-NOSVE-NEXT: .LBB3_63: // %cond.load113
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #144]
; NONEON-NOSVE-NEXT: strb w9, [sp, #176]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #158]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #176]
; NONEON-NOSVE-NEXT: strh w9, [sp, #174]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #156]
; NONEON-NOSVE-NEXT: str q1, [sp, #128]
; NONEON-NOSVE-NEXT: strb w9, [sp, #172]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #152]
; NONEON-NOSVE-NEXT: str w9, [sp, #168]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #144]
; NONEON-NOSVE-NEXT: str x9, [sp, #160]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #128]
; NONEON-NOSVE-NEXT: strb w9, [sp, #173]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #160]
; NONEON-NOSVE-NEXT: tbz w8, #30, .LBB3_33
; NONEON-NOSVE-NEXT: .LBB3_64: // %cond.load117
; NONEON-NOSVE-NEXT: ldrb w9, [x0], #1
; NONEON-NOSVE-NEXT: str q1, [sp, #80]
; NONEON-NOSVE-NEXT: strb w9, [sp, #112]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #95]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #112]
; NONEON-NOSVE-NEXT: strb w9, [sp, #111]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #92]
; NONEON-NOSVE-NEXT: str q1, [sp, #64]
; NONEON-NOSVE-NEXT: strh w9, [sp, #108]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #88]
; NONEON-NOSVE-NEXT: str w9, [sp, #104]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #80]
; NONEON-NOSVE-NEXT: str x9, [sp, #96]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #64]
; NONEON-NOSVE-NEXT: strb w9, [sp, #110]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #96]
; NONEON-NOSVE-NEXT: tbnz w8, #31, .LBB3_34
; NONEON-NOSVE-NEXT: b .LBB3_35
%load = call <32 x i8> @llvm.masked.expandload.v32i8(ptr %src, <32 x i1> %mask, <32 x i8> zeroinitializer)
ret <32 x i8> %load
}
define <2 x half> @masked_load_v2f16(ptr %src, <2 x i1> %mask) {
; CHECK-LABEL: masked_load_v2f16:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: index z1.s, #1, #1
; CHECK-NEXT: ptrue p0.s, vl2
; CHECK-NEXT: lsl z0.s, z0.s, #31
; CHECK-NEXT: asr z0.s, z0.s, #31
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.s
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB4_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov h0, wzr
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: zip1 z0.h, z1.h, z0.h
; CHECK-NEXT: tbnz w8, #1, .LBB4_3
; CHECK-NEXT: b .LBB4_4
; CHECK-NEXT: .LBB4_2:
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB4_4
; CHECK-NEXT: .LBB4_3: // %cond.load1
; CHECK-NEXT: ldr h1, [x0]
; CHECK-NEXT: zip1 z0.h, z0.h, z1.h
; CHECK-NEXT: .LBB4_4: // %else2
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v2f16:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #48
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48
; NONEON-NOSVE-NEXT: str d0, [sp, #32]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #36]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32]
; 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: tbz w8, #0, .LBB4_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: fmov s0, wzr
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str h1, [sp, #24]
; NONEON-NOSVE-NEXT: str h0, [sp, #26]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB4_3
; NONEON-NOSVE-NEXT: b .LBB4_4
; NONEON-NOSVE-NEXT: .LBB4_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI4_0
; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI4_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB4_4
; NONEON-NOSVE-NEXT: .LBB4_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr h1, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #8]
; NONEON-NOSVE-NEXT: str h1, [sp, #18]
; NONEON-NOSVE-NEXT: str h0, [sp, #16]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]
; NONEON-NOSVE-NEXT: .LBB4_4: // %else2
; NONEON-NOSVE-NEXT: add sp, sp, #48
; NONEON-NOSVE-NEXT: ret
%load = call <2 x half> @llvm.masked.expandload.v2f16(ptr %src, <2 x i1> %mask, <2 x half> zeroinitializer)
ret <2 x half> %load
}
define <4 x half> @masked_load_v4f16(ptr %src, <4 x i1> %mask) {
; CHECK-LABEL: masked_load_v4f16:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI5_0
; CHECK-NEXT: ptrue p0.h, vl4
; CHECK-NEXT: lsl z0.h, z0.h, #15
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI5_0]
; CHECK-NEXT: asr z0.h, z0.h, #15
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.h
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB5_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov h0, wzr
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: zip1 z1.h, z1.h, z0.h
; CHECK-NEXT: zip1 z0.h, z0.h, z0.h
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
; CHECK-NEXT: tbnz w8, #1, .LBB5_3
; CHECK-NEXT: b .LBB5_4
; CHECK-NEXT: .LBB5_2:
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB5_4
; CHECK-NEXT: .LBB5_3: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: .LBB5_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB5_6
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: tbz w8, #3, .LBB5_8
; CHECK-NEXT: b .LBB5_7
; CHECK-NEXT: .LBB5_6: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB5_8
; CHECK-NEXT: .LBB5_7: // %cond.load9
; CHECK-NEXT: mov w8, #3 // =0x3
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w8
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0]
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: .LBB5_8: // %else10
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v4f16:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #128
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 128
; NONEON-NOSVE-NEXT: str d0, [sp, #112]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #114]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #116]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #118]
; NONEON-NOSVE-NEXT: ldrh w11, [sp, #112]
; 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: tbz w8, #0, .LBB5_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: fmov s0, wzr
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: stur wzr, [sp, #106]
; NONEON-NOSVE-NEXT: str h1, [sp, #104]
; NONEON-NOSVE-NEXT: str h0, [sp, #110]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #104]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB5_3
; NONEON-NOSVE-NEXT: b .LBB5_4
; NONEON-NOSVE-NEXT: .LBB5_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI5_0
; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI5_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB5_4
; NONEON-NOSVE-NEXT: .LBB5_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str d0, [sp, #80]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #84]
; NONEON-NOSVE-NEXT: str h1, [sp, #96]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #96]
; NONEON-NOSVE-NEXT: str w9, [sp, #92]
; NONEON-NOSVE-NEXT: str d0, [sp, #72]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #80]
; NONEON-NOSVE-NEXT: str h0, [sp, #88]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #72]
; NONEON-NOSVE-NEXT: str h0, [sp, #90]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #88]
; NONEON-NOSVE-NEXT: .LBB5_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB5_7
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB5_8
; NONEON-NOSVE-NEXT: .LBB5_6: // %else10
; NONEON-NOSVE-NEXT: add sp, sp, #128
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB5_7: // %cond.load5
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str d0, [sp, #48]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #48]
; NONEON-NOSVE-NEXT: str h1, [sp, #64]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #64]
; NONEON-NOSVE-NEXT: str w9, [sp, #56]
; NONEON-NOSVE-NEXT: str d0, [sp, #40]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #54]
; NONEON-NOSVE-NEXT: str h0, [sp, #62]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #40]
; NONEON-NOSVE-NEXT: str h0, [sp, #60]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB5_6
; NONEON-NOSVE-NEXT: .LBB5_8: // %cond.load9
; NONEON-NOSVE-NEXT: ldr h1, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str h1, [sp, #32]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #32]
; NONEON-NOSVE-NEXT: str w8, [sp, #24]
; NONEON-NOSVE-NEXT: str d0, [sp, #16]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #12]
; NONEON-NOSVE-NEXT: str h0, [sp, #28]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]
; NONEON-NOSVE-NEXT: str h0, [sp, #30]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]
; NONEON-NOSVE-NEXT: add sp, sp, #128
; NONEON-NOSVE-NEXT: ret
%load = call <4 x half> @llvm.masked.expandload.v4f16(ptr %src, <4 x i1> %mask, <4 x half> zeroinitializer)
ret <4 x half> %load
}
define <8 x half> @masked_load_v8f16(ptr %src, <8 x i1> %mask) {
; CHECK-LABEL: masked_load_v8f16:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI6_0
; CHECK-NEXT: ptrue p0.b, vl8
; CHECK-NEXT: lsl z0.b, z0.b, #7
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI6_0]
; CHECK-NEXT: asr z0.b, z0.b, #7
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.b
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB6_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov h0, wzr
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: zip1 z1.h, z1.h, z0.h
; CHECK-NEXT: zip1 z0.h, z0.h, z0.h
; CHECK-NEXT: zip1 z1.s, z1.s, z0.s
; CHECK-NEXT: zip1 z0.s, z0.s, z0.s
; CHECK-NEXT: zip1 z0.d, z1.d, z0.d
; CHECK-NEXT: tbnz w8, #1, .LBB6_3
; CHECK-NEXT: b .LBB6_4
; CHECK-NEXT: .LBB6_2:
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB6_4
; CHECK-NEXT: .LBB6_3: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: .LBB6_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB6_10
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: tbnz w8, #3, .LBB6_11
; CHECK-NEXT: .LBB6_6: // %else10
; CHECK-NEXT: tbz w8, #4, .LBB6_12
; CHECK-NEXT: .LBB6_7: // %cond.load13
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: tbnz w8, #5, .LBB6_13
; CHECK-NEXT: .LBB6_8: // %else18
; CHECK-NEXT: tbz w8, #6, .LBB6_14
; CHECK-NEXT: .LBB6_9: // %cond.load21
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: tbz w8, #7, .LBB6_16
; CHECK-NEXT: b .LBB6_15
; CHECK-NEXT: .LBB6_10: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB6_6
; CHECK-NEXT: .LBB6_11: // %cond.load9
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: tbnz w8, #4, .LBB6_7
; CHECK-NEXT: .LBB6_12: // %else14
; CHECK-NEXT: tbz w8, #5, .LBB6_8
; CHECK-NEXT: .LBB6_13: // %cond.load17
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: tbnz w8, #6, .LBB6_9
; CHECK-NEXT: .LBB6_14: // %else22
; CHECK-NEXT: tbz w8, #7, .LBB6_16
; CHECK-NEXT: .LBB6_15: // %cond.load25
; CHECK-NEXT: mov w8, #7 // =0x7
; CHECK-NEXT: index z1.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z2.h, w8
; CHECK-NEXT: cmpeq p1.h, p0/z, z1.h, z2.h
; CHECK-NEXT: ldr h1, [x0]
; CHECK-NEXT: mov z0.h, p1/m, h1
; CHECK-NEXT: .LBB6_16: // %else26
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v8f16:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #496
; NONEON-NOSVE-NEXT: str x29, [sp, #480] // 8-byte Spill
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 496
; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
; NONEON-NOSVE-NEXT: str d0, [sp, #464]
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #466]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #467]
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #465]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #468]
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #469]
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #470]
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #464]
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w8, w10
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #471]
; NONEON-NOSVE-NEXT: and w11, w11, #0x2
; NONEON-NOSVE-NEXT: and w13, w13, #0x10
; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1
; NONEON-NOSVE-NEXT: and w12, w14, #0x20
; NONEON-NOSVE-NEXT: orr w8, w8, w13
; NONEON-NOSVE-NEXT: and w13, w15, #0x40
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w11, w8
; NONEON-NOSVE-NEXT: orr w11, w12, w13
; NONEON-NOSVE-NEXT: orr w8, w8, w11
; NONEON-NOSVE-NEXT: and w10, w10, #0x80
; NONEON-NOSVE-NEXT: add w10, w8, w10
; NONEON-NOSVE-NEXT: and w8, w10, #0xff
; NONEON-NOSVE-NEXT: tbz w10, #0, .LBB6_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: fmov s0, wzr
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: stur wzr, [x9, #250]
; NONEON-NOSVE-NEXT: stur xzr, [x9, #242]
; NONEON-NOSVE-NEXT: str h1, [sp, #448]
; NONEON-NOSVE-NEXT: str h0, [sp, #462]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #448]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB6_3
; NONEON-NOSVE-NEXT: b .LBB6_4
; NONEON-NOSVE-NEXT: .LBB6_2:
; NONEON-NOSVE-NEXT: adrp x10, .LCPI6_0
; NONEON-NOSVE-NEXT: ldr q0, [x10, :lo12:.LCPI6_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB6_4
; NONEON-NOSVE-NEXT: .LBB6_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #400]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #412]
; NONEON-NOSVE-NEXT: str h1, [sp, #432]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #432]
; NONEON-NOSVE-NEXT: str w10, [sp, #428]
; NONEON-NOSVE-NEXT: str q0, [sp, #384]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #196]
; NONEON-NOSVE-NEXT: stur x10, [x9, #212]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #400]
; NONEON-NOSVE-NEXT: str h0, [sp, #416]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #384]
; NONEON-NOSVE-NEXT: str h0, [sp, #418]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #416]
; NONEON-NOSVE-NEXT: .LBB6_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB6_12
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB6_13
; NONEON-NOSVE-NEXT: .LBB6_6: // %else10
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB6_14
; NONEON-NOSVE-NEXT: .LBB6_7: // %else14
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB6_15
; NONEON-NOSVE-NEXT: .LBB6_8: // %else18
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB6_16
; NONEON-NOSVE-NEXT: .LBB6_9: // %else22
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB6_11
; NONEON-NOSVE-NEXT: .LBB6_10: // %cond.load25
; NONEON-NOSVE-NEXT: ldr h1, [x0]
; NONEON-NOSVE-NEXT: str q0, [sp]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str h1, [sp, #48]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #48]
; NONEON-NOSVE-NEXT: str w8, [sp, #40]
; NONEON-NOSVE-NEXT: ldr x8, [sp]
; NONEON-NOSVE-NEXT: str q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #12]
; NONEON-NOSVE-NEXT: str x8, [sp, #32]
; NONEON-NOSVE-NEXT: str h0, [sp, #44]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #16]
; NONEON-NOSVE-NEXT: str h0, [sp, #46]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]
; NONEON-NOSVE-NEXT: .LBB6_11: // %else26
; NONEON-NOSVE-NEXT: ldr x29, [sp, #480] // 8-byte Reload
; NONEON-NOSVE-NEXT: add sp, sp, #496
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB6_12: // %cond.load5
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #336]
; NONEON-NOSVE-NEXT: str h1, [sp, #368]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #368]
; NONEON-NOSVE-NEXT: str q0, [sp, #320]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #350]
; NONEON-NOSVE-NEXT: str h0, [sp, #366]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #134]
; NONEON-NOSVE-NEXT: stur x10, [x9, #150]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #336]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #320]
; NONEON-NOSVE-NEXT: str w10, [sp, #352]
; NONEON-NOSVE-NEXT: str h0, [sp, #356]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #352]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB6_6
; NONEON-NOSVE-NEXT: .LBB6_13: // %cond.load9
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #272]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #280]
; NONEON-NOSVE-NEXT: str h1, [sp, #304]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #304]
; NONEON-NOSVE-NEXT: str x10, [sp, #296]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #272]
; NONEON-NOSVE-NEXT: str q0, [sp, #256]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #276]
; NONEON-NOSVE-NEXT: str w10, [sp, #288]
; NONEON-NOSVE-NEXT: str h0, [sp, #292]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #256]
; NONEON-NOSVE-NEXT: str h0, [sp, #294]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #288]
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB6_7
; NONEON-NOSVE-NEXT: .LBB6_14: // %cond.load13
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #208]
; NONEON-NOSVE-NEXT: str h1, [sp, #240]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #240]
; NONEON-NOSVE-NEXT: str q0, [sp, #192]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #222]
; NONEON-NOSVE-NEXT: str h0, [sp, #238]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #10]
; NONEON-NOSVE-NEXT: stur w10, [x9, #26]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #208]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #192]
; NONEON-NOSVE-NEXT: str x9, [sp, #224]
; NONEON-NOSVE-NEXT: str h0, [sp, #232]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #224]
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB6_8
; NONEON-NOSVE-NEXT: .LBB6_15: // %cond.load17
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #144]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #156]
; NONEON-NOSVE-NEXT: str h1, [sp, #176]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #176]
; NONEON-NOSVE-NEXT: str w9, [sp, #172]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #144]
; NONEON-NOSVE-NEXT: str q0, [sp, #128]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #152]
; NONEON-NOSVE-NEXT: str x9, [sp, #160]
; NONEON-NOSVE-NEXT: str h0, [sp, #168]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #128]
; NONEON-NOSVE-NEXT: str h0, [sp, #170]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #160]
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB6_9
; NONEON-NOSVE-NEXT: .LBB6_16: // %cond.load21
; NONEON-NOSVE-NEXT: ldr h1, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #80]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #88]
; NONEON-NOSVE-NEXT: str h1, [sp, #112]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #112]
; NONEON-NOSVE-NEXT: str w9, [sp, #104]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #80]
; NONEON-NOSVE-NEXT: str q0, [sp, #64]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #94]
; NONEON-NOSVE-NEXT: str x9, [sp, #96]
; NONEON-NOSVE-NEXT: str h0, [sp, #110]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #64]
; NONEON-NOSVE-NEXT: str h0, [sp, #108]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #96]
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB6_10
; NONEON-NOSVE-NEXT: b .LBB6_11
%load = call <8 x half> @llvm.masked.expandload.v8f16(ptr %src, <8 x i1> %mask, <8 x half> zeroinitializer)
ret <8 x half> %load
}
define <16 x half> @masked_load_v16f16(ptr %src, <16 x i1> %mask) {
; CHECK-LABEL: masked_load_v16f16:
; CHECK: // %bb.0:
; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0
; CHECK-NEXT: adrp x8, .LCPI7_0
; CHECK-NEXT: ptrue p0.b, vl16
; CHECK-NEXT: lsl z0.b, z0.b, #7
; CHECK-NEXT: ldr q1, [x8, :lo12:.LCPI7_0]
; CHECK-NEXT: asr z0.b, z0.b, #7
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: mov z1.h, #0 // =0x0
; CHECK-NEXT: uaddv d2, p0, z0.b
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: fmov w8, s2
; CHECK-NEXT: tbz w8, #0, .LBB7_16
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov h0, wzr
; CHECK-NEXT: ldr h1, [x0], #2
; CHECK-NEXT: zip1 z1.h, z1.h, z0.h
; CHECK-NEXT: zip1 z0.h, z0.h, z0.h
; CHECK-NEXT: zip1 z1.s, z1.s, z0.s
; CHECK-NEXT: zip1 z0.s, z0.s, z0.s
; CHECK-NEXT: zip1 z0.d, z1.d, z0.d
; CHECK-NEXT: mov z1.h, #0 // =0x0
; CHECK-NEXT: tbnz w8, #1, .LBB7_17
; CHECK-NEXT: .LBB7_2: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB7_18
; CHECK-NEXT: .LBB7_3: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #3, .LBB7_19
; CHECK-NEXT: .LBB7_4: // %else10
; CHECK-NEXT: tbz w8, #4, .LBB7_20
; CHECK-NEXT: .LBB7_5: // %cond.load13
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #5, .LBB7_21
; CHECK-NEXT: .LBB7_6: // %else18
; CHECK-NEXT: tbz w8, #6, .LBB7_22
; CHECK-NEXT: .LBB7_7: // %cond.load21
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #7, .LBB7_23
; CHECK-NEXT: .LBB7_8: // %else26
; CHECK-NEXT: tbz w8, #8, .LBB7_24
; CHECK-NEXT: .LBB7_9: // %cond.load29
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: ptrue p0.h, vl1
; CHECK-NEXT: mov z1.h, p0/m, z2.h
; CHECK-NEXT: tbnz w8, #9, .LBB7_25
; CHECK-NEXT: .LBB7_10: // %else34
; CHECK-NEXT: tbz w8, #10, .LBB7_26
; CHECK-NEXT: .LBB7_11: // %cond.load37
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #11, .LBB7_27
; CHECK-NEXT: .LBB7_12: // %else42
; CHECK-NEXT: tbz w8, #12, .LBB7_28
; CHECK-NEXT: .LBB7_13: // %cond.load45
; CHECK-NEXT: mov w9, #4 // =0x4
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #13, .LBB7_29
; CHECK-NEXT: .LBB7_14: // %else50
; CHECK-NEXT: tbz w8, #14, .LBB7_30
; CHECK-NEXT: .LBB7_15: // %cond.load53
; CHECK-NEXT: mov w9, #6 // =0x6
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: tbz w8, #15, .LBB7_32
; CHECK-NEXT: b .LBB7_31
; CHECK-NEXT: .LBB7_16: // %else
; CHECK-NEXT: tbz w8, #1, .LBB7_2
; CHECK-NEXT: .LBB7_17: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #2, .LBB7_3
; CHECK-NEXT: .LBB7_18: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB7_4
; CHECK-NEXT: .LBB7_19: // %cond.load9
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #4, .LBB7_5
; CHECK-NEXT: .LBB7_20: // %else14
; CHECK-NEXT: tbz w8, #5, .LBB7_6
; CHECK-NEXT: .LBB7_21: // %cond.load17
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #6, .LBB7_7
; CHECK-NEXT: .LBB7_22: // %else22
; CHECK-NEXT: tbz w8, #7, .LBB7_8
; CHECK-NEXT: .LBB7_23: // %cond.load25
; CHECK-NEXT: mov w9, #7 // =0x7
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z0.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #8, .LBB7_9
; CHECK-NEXT: .LBB7_24: // %else30
; CHECK-NEXT: tbz w8, #9, .LBB7_10
; CHECK-NEXT: .LBB7_25: // %cond.load33
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #10, .LBB7_11
; CHECK-NEXT: .LBB7_26: // %else38
; CHECK-NEXT: tbz w8, #11, .LBB7_12
; CHECK-NEXT: .LBB7_27: // %cond.load41
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #12, .LBB7_13
; CHECK-NEXT: .LBB7_28: // %else46
; CHECK-NEXT: tbz w8, #13, .LBB7_14
; CHECK-NEXT: .LBB7_29: // %cond.load49
; CHECK-NEXT: mov w9, #5 // =0x5
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w9
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0], #2
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: tbnz w8, #14, .LBB7_15
; CHECK-NEXT: .LBB7_30: // %else54
; CHECK-NEXT: tbz w8, #15, .LBB7_32
; CHECK-NEXT: .LBB7_31: // %cond.load57
; CHECK-NEXT: mov w8, #7 // =0x7
; CHECK-NEXT: index z2.h, #0, #1
; CHECK-NEXT: ptrue p0.h
; CHECK-NEXT: mov z3.h, w8
; CHECK-NEXT: cmpeq p1.h, p0/z, z2.h, z3.h
; CHECK-NEXT: ldr h2, [x0]
; CHECK-NEXT: mov z1.h, p1/m, h2
; CHECK-NEXT: .LBB7_32: // %else58
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v16f16:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: str x29, [sp, #-16]! // 8-byte Folded Spill
; NONEON-NOSVE-NEXT: sub sp, sp, #992
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 1008
; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
; NONEON-NOSVE-NEXT: str q0, [sp, #976]
; NONEON-NOSVE-NEXT: adrp x9, .LCPI7_0
; NONEON-NOSVE-NEXT: ldrb w8, [sp, #978]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #979]
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #977]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #980]
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #981]
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #982]
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #976]
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
; NONEON-NOSVE-NEXT: and w8, w8, #0x4
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w8, w10
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #983]
; NONEON-NOSVE-NEXT: and w11, w11, #0x2
; NONEON-NOSVE-NEXT: and w13, w13, #0x10
; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1
; NONEON-NOSVE-NEXT: and w12, w14, #0x20
; NONEON-NOSVE-NEXT: orr w8, w8, w13
; NONEON-NOSVE-NEXT: and w13, w15, #0x40
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: orr w8, w11, w8
; NONEON-NOSVE-NEXT: orr w11, w12, w13
; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI7_0]
; NONEON-NOSVE-NEXT: orr w8, w8, w11
; NONEON-NOSVE-NEXT: and w10, w10, #0xffffff80
; NONEON-NOSVE-NEXT: add x9, sp, #720
; NONEON-NOSVE-NEXT: add w8, w8, w10
; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB7_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: fmov s0, wzr
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: stur wzr, [x9, #250]
; NONEON-NOSVE-NEXT: stur xzr, [x9, #242]
; NONEON-NOSVE-NEXT: str h2, [sp, #960]
; NONEON-NOSVE-NEXT: str h0, [sp, #974]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #960]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB7_3
; NONEON-NOSVE-NEXT: b .LBB7_4
; NONEON-NOSVE-NEXT: .LBB7_2:
; NONEON-NOSVE-NEXT: str q1, [sp, #-16]!
; NONEON-NOSVE-NEXT: ldr q0, [sp], #16
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB7_4
; NONEON-NOSVE-NEXT: .LBB7_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #912]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #924]
; NONEON-NOSVE-NEXT: str h2, [sp, #944]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #944]
; NONEON-NOSVE-NEXT: str w10, [sp, #940]
; NONEON-NOSVE-NEXT: str q0, [sp, #896]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #196]
; NONEON-NOSVE-NEXT: stur x10, [x9, #212]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #912]
; NONEON-NOSVE-NEXT: str h0, [sp, #928]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #896]
; NONEON-NOSVE-NEXT: str h0, [sp, #930]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #928]
; NONEON-NOSVE-NEXT: .LBB7_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB7_20
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB7_21
; NONEON-NOSVE-NEXT: .LBB7_6: // %else10
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB7_22
; NONEON-NOSVE-NEXT: .LBB7_7: // %else14
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB7_23
; NONEON-NOSVE-NEXT: .LBB7_8: // %else18
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB7_24
; NONEON-NOSVE-NEXT: .LBB7_9: // %else22
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB7_25
; NONEON-NOSVE-NEXT: .LBB7_10: // %else26
; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB7_26
; NONEON-NOSVE-NEXT: .LBB7_11: // %else30
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB7_27
; NONEON-NOSVE-NEXT: .LBB7_12: // %else34
; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB7_28
; NONEON-NOSVE-NEXT: .LBB7_13: // %else38
; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB7_29
; NONEON-NOSVE-NEXT: .LBB7_14: // %else42
; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB7_30
; NONEON-NOSVE-NEXT: .LBB7_15: // %else46
; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB7_31
; NONEON-NOSVE-NEXT: .LBB7_16: // %else50
; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB7_32
; NONEON-NOSVE-NEXT: .LBB7_17: // %else54
; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB7_19
; NONEON-NOSVE-NEXT: .LBB7_18: // %cond.load57
; NONEON-NOSVE-NEXT: ldr h2, [x0]
; NONEON-NOSVE-NEXT: str q1, [sp]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #8]
; NONEON-NOSVE-NEXT: str h2, [sp, #48]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #48]
; NONEON-NOSVE-NEXT: str w8, [sp, #40]
; NONEON-NOSVE-NEXT: ldr x8, [sp]
; NONEON-NOSVE-NEXT: str q1, [sp, #16]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #12]
; NONEON-NOSVE-NEXT: str x8, [sp, #32]
; NONEON-NOSVE-NEXT: str h1, [sp, #44]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #16]
; NONEON-NOSVE-NEXT: str h1, [sp, #46]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #32]
; NONEON-NOSVE-NEXT: .LBB7_19: // %else58
; NONEON-NOSVE-NEXT: add sp, sp, #992
; NONEON-NOSVE-NEXT: ldr x29, [sp], #16 // 8-byte Folded Reload
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB7_20: // %cond.load5
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #848]
; NONEON-NOSVE-NEXT: str h2, [sp, #880]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #880]
; NONEON-NOSVE-NEXT: str q0, [sp, #832]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #862]
; NONEON-NOSVE-NEXT: str h0, [sp, #878]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #134]
; NONEON-NOSVE-NEXT: stur x10, [x9, #150]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #848]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #832]
; NONEON-NOSVE-NEXT: str w10, [sp, #864]
; NONEON-NOSVE-NEXT: str h0, [sp, #868]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #864]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB7_6
; NONEON-NOSVE-NEXT: .LBB7_21: // %cond.load9
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #784]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #792]
; NONEON-NOSVE-NEXT: str h2, [sp, #816]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #816]
; NONEON-NOSVE-NEXT: str x10, [sp, #808]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #784]
; NONEON-NOSVE-NEXT: str q0, [sp, #768]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #788]
; NONEON-NOSVE-NEXT: str w10, [sp, #800]
; NONEON-NOSVE-NEXT: str h0, [sp, #804]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #768]
; NONEON-NOSVE-NEXT: str h0, [sp, #806]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #800]
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB7_7
; NONEON-NOSVE-NEXT: .LBB7_22: // %cond.load13
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #720]
; NONEON-NOSVE-NEXT: str h2, [sp, #752]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #752]
; NONEON-NOSVE-NEXT: str q0, [sp, #704]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #734]
; NONEON-NOSVE-NEXT: str h0, [sp, #750]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #10]
; NONEON-NOSVE-NEXT: stur w10, [x9, #26]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #720]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #704]
; NONEON-NOSVE-NEXT: str x9, [sp, #736]
; NONEON-NOSVE-NEXT: str h0, [sp, #744]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #736]
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB7_8
; NONEON-NOSVE-NEXT: .LBB7_23: // %cond.load17
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #656]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #668]
; NONEON-NOSVE-NEXT: str h2, [sp, #688]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #688]
; NONEON-NOSVE-NEXT: str w9, [sp, #684]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #656]
; NONEON-NOSVE-NEXT: str q0, [sp, #640]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #664]
; NONEON-NOSVE-NEXT: str x9, [sp, #672]
; NONEON-NOSVE-NEXT: str h0, [sp, #680]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #640]
; NONEON-NOSVE-NEXT: str h0, [sp, #682]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #672]
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB7_9
; NONEON-NOSVE-NEXT: .LBB7_24: // %cond.load21
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #592]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #600]
; NONEON-NOSVE-NEXT: str h2, [sp, #624]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #624]
; NONEON-NOSVE-NEXT: str w9, [sp, #616]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #592]
; NONEON-NOSVE-NEXT: str q0, [sp, #576]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #606]
; NONEON-NOSVE-NEXT: str x9, [sp, #608]
; NONEON-NOSVE-NEXT: str h0, [sp, #622]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #576]
; NONEON-NOSVE-NEXT: str h0, [sp, #620]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #608]
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB7_10
; NONEON-NOSVE-NEXT: .LBB7_25: // %cond.load25
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q0, [sp, #512]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #520]
; NONEON-NOSVE-NEXT: str h2, [sp, #560]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #560]
; NONEON-NOSVE-NEXT: str w9, [sp, #552]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #512]
; NONEON-NOSVE-NEXT: str q0, [sp, #528]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #524]
; NONEON-NOSVE-NEXT: str x9, [sp, #544]
; NONEON-NOSVE-NEXT: str h0, [sp, #556]
; NONEON-NOSVE-NEXT: ldr h0, [sp, #528]
; NONEON-NOSVE-NEXT: str h0, [sp, #558]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #544]
; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB7_11
; NONEON-NOSVE-NEXT: .LBB7_26: // %cond.load29
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #464]
; NONEON-NOSVE-NEXT: add x9, sp, #464
; NONEON-NOSVE-NEXT: str h2, [sp, #496]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #496]
; NONEON-NOSVE-NEXT: str q1, [sp, #448]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #478]
; NONEON-NOSVE-NEXT: str h1, [sp, #494]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #10]
; NONEON-NOSVE-NEXT: ldur x11, [x9, #2]
; NONEON-NOSVE-NEXT: stur w10, [x9, #26]
; NONEON-NOSVE-NEXT: stur x11, [x9, #18]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #448]
; NONEON-NOSVE-NEXT: str h1, [sp, #480]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #480]
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB7_12
; NONEON-NOSVE-NEXT: .LBB7_27: // %cond.load33
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #400]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #412]
; NONEON-NOSVE-NEXT: str h2, [sp, #432]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #432]
; NONEON-NOSVE-NEXT: str w10, [sp, #428]
; NONEON-NOSVE-NEXT: str q1, [sp, #384]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #196]
; NONEON-NOSVE-NEXT: stur x10, [x9, #212]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #400]
; NONEON-NOSVE-NEXT: str h1, [sp, #416]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #384]
; NONEON-NOSVE-NEXT: str h1, [sp, #418]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #416]
; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB7_13
; NONEON-NOSVE-NEXT: .LBB7_28: // %cond.load37
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #336]
; NONEON-NOSVE-NEXT: str h2, [sp, #368]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #368]
; NONEON-NOSVE-NEXT: str q1, [sp, #320]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #350]
; NONEON-NOSVE-NEXT: str h1, [sp, #366]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #134]
; NONEON-NOSVE-NEXT: stur x10, [x9, #150]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #336]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #320]
; NONEON-NOSVE-NEXT: str w10, [sp, #352]
; NONEON-NOSVE-NEXT: str h1, [sp, #356]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #352]
; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB7_14
; NONEON-NOSVE-NEXT: .LBB7_29: // %cond.load41
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #272]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #280]
; NONEON-NOSVE-NEXT: str h2, [sp, #304]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #304]
; NONEON-NOSVE-NEXT: str x10, [sp, #296]
; NONEON-NOSVE-NEXT: ldr w10, [sp, #272]
; NONEON-NOSVE-NEXT: str q1, [sp, #256]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #276]
; NONEON-NOSVE-NEXT: str w10, [sp, #288]
; NONEON-NOSVE-NEXT: str h1, [sp, #292]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #256]
; NONEON-NOSVE-NEXT: str h1, [sp, #294]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #288]
; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB7_15
; NONEON-NOSVE-NEXT: .LBB7_30: // %cond.load45
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #208]
; NONEON-NOSVE-NEXT: str h2, [sp, #240]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #240]
; NONEON-NOSVE-NEXT: str q1, [sp, #192]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #222]
; NONEON-NOSVE-NEXT: str h1, [sp, #238]
; NONEON-NOSVE-NEXT: ldur w10, [x9, #10]
; NONEON-NOSVE-NEXT: stur w10, [x9, #26]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #208]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #192]
; NONEON-NOSVE-NEXT: str x9, [sp, #224]
; NONEON-NOSVE-NEXT: str h1, [sp, #232]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #224]
; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB7_16
; NONEON-NOSVE-NEXT: .LBB7_31: // %cond.load49
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #144]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #156]
; NONEON-NOSVE-NEXT: str h2, [sp, #176]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #176]
; NONEON-NOSVE-NEXT: str w9, [sp, #172]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #144]
; NONEON-NOSVE-NEXT: str q1, [sp, #128]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #152]
; NONEON-NOSVE-NEXT: str x9, [sp, #160]
; NONEON-NOSVE-NEXT: str h1, [sp, #168]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #128]
; NONEON-NOSVE-NEXT: str h1, [sp, #170]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #160]
; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB7_17
; NONEON-NOSVE-NEXT: .LBB7_32: // %cond.load53
; NONEON-NOSVE-NEXT: ldr h2, [x0], #2
; NONEON-NOSVE-NEXT: str q1, [sp, #80]
; NONEON-NOSVE-NEXT: ldr w9, [sp, #88]
; NONEON-NOSVE-NEXT: str h2, [sp, #112]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #112]
; NONEON-NOSVE-NEXT: str w9, [sp, #104]
; NONEON-NOSVE-NEXT: ldr x9, [sp, #80]
; NONEON-NOSVE-NEXT: str q1, [sp, #64]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #94]
; NONEON-NOSVE-NEXT: str x9, [sp, #96]
; NONEON-NOSVE-NEXT: str h1, [sp, #110]
; NONEON-NOSVE-NEXT: ldr h1, [sp, #64]
; NONEON-NOSVE-NEXT: str h1, [sp, #108]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #96]
; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB7_18
; NONEON-NOSVE-NEXT: b .LBB7_19
%load = call <16 x half> @llvm.masked.expandload.v16f16(ptr %src, <16 x i1> %mask, <16 x half> zeroinitializer)
ret <16 x half> %load
}
define <2 x float> @masked_load_v2f32(ptr %src, <2 x i1> %mask) {
; CHECK-LABEL: masked_load_v2f32:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: index z1.s, #1, #1
; CHECK-NEXT: ptrue p0.s, vl2
; CHECK-NEXT: lsl z0.s, z0.s, #31
; CHECK-NEXT: asr z0.s, z0.s, #31
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.s
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB8_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov s0, wzr
; CHECK-NEXT: ldr s1, [x0], #4
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
; CHECK-NEXT: tbnz w8, #1, .LBB8_3
; CHECK-NEXT: b .LBB8_4
; CHECK-NEXT: .LBB8_2:
; CHECK-NEXT: mov z0.s, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB8_4
; CHECK-NEXT: .LBB8_3: // %cond.load1
; CHECK-NEXT: mov w8, #1 // =0x1
; CHECK-NEXT: index z1.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z2.s, w8
; CHECK-NEXT: cmpeq p1.s, p0/z, z1.s, z2.s
; CHECK-NEXT: ldr s1, [x0]
; CHECK-NEXT: mov z0.s, p1/m, s1
; CHECK-NEXT: .LBB8_4: // %else2
; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v2f32:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #64
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64
; NONEON-NOSVE-NEXT: str d0, [sp, #48]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #52]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #48]
; 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: tbz w8, #0, .LBB8_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldr s0, [x0], #4
; NONEON-NOSVE-NEXT: str wzr, [sp, #44]
; NONEON-NOSVE-NEXT: str s0, [sp, #40]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #40]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB8_3
; NONEON-NOSVE-NEXT: b .LBB8_4
; NONEON-NOSVE-NEXT: .LBB8_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI8_0
; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI8_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB8_4
; NONEON-NOSVE-NEXT: .LBB8_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr s1, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: str s1, [sp, #32]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #8]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #32]
; NONEON-NOSVE-NEXT: str d0, [sp, #16]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]
; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #24]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #24]
; NONEON-NOSVE-NEXT: .LBB8_4: // %else2
; NONEON-NOSVE-NEXT: add sp, sp, #64
; NONEON-NOSVE-NEXT: ret
%load = call <2 x float> @llvm.masked.expandload.v2f32(ptr %src, <2 x i1> %mask, <2 x float> zeroinitializer)
ret <2 x float> %load
}
define <4 x float> @masked_load_v4f32(ptr %src, <4 x i1> %mask) {
; CHECK-LABEL: masked_load_v4f32:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI9_0
; CHECK-NEXT: ptrue p0.h, vl4
; CHECK-NEXT: lsl z0.h, z0.h, #15
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI9_0]
; CHECK-NEXT: asr z0.h, z0.h, #15
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.h
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB9_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov s0, wzr
; CHECK-NEXT: ldr s1, [x0], #4
; CHECK-NEXT: zip1 z1.s, z1.s, z0.s
; CHECK-NEXT: zip1 z0.s, z0.s, z0.s
; CHECK-NEXT: zip1 z0.d, z1.d, z0.d
; CHECK-NEXT: tbnz w8, #1, .LBB9_3
; CHECK-NEXT: b .LBB9_4
; CHECK-NEXT: .LBB9_2:
; CHECK-NEXT: mov z0.s, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB9_4
; CHECK-NEXT: .LBB9_3: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z1.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z2.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z1.s, z2.s
; CHECK-NEXT: ldr s1, [x0], #4
; CHECK-NEXT: mov z0.s, p1/m, s1
; CHECK-NEXT: .LBB9_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB9_6
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z1.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z2.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z1.s, z2.s
; CHECK-NEXT: ldr s1, [x0], #4
; CHECK-NEXT: mov z0.s, p1/m, s1
; CHECK-NEXT: tbz w8, #3, .LBB9_8
; CHECK-NEXT: b .LBB9_7
; CHECK-NEXT: .LBB9_6: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB9_8
; CHECK-NEXT: .LBB9_7: // %cond.load9
; CHECK-NEXT: mov w8, #3 // =0x3
; CHECK-NEXT: index z1.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z2.s, w8
; CHECK-NEXT: cmpeq p1.s, p0/z, z1.s, z2.s
; CHECK-NEXT: ldr s1, [x0]
; CHECK-NEXT: mov z0.s, p1/m, s1
; CHECK-NEXT: .LBB9_8: // %else10
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v4f32:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #224
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 224
; NONEON-NOSVE-NEXT: str d0, [sp, #208]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #210]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #212]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #214]
; NONEON-NOSVE-NEXT: ldrh w11, [sp, #208]
; 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: tbz w8, #0, .LBB9_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldr s0, [x0], #4
; NONEON-NOSVE-NEXT: str wzr, [sp, #204]
; NONEON-NOSVE-NEXT: stur xzr, [sp, #196]
; NONEON-NOSVE-NEXT: str s0, [sp, #192]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #192]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB9_3
; NONEON-NOSVE-NEXT: b .LBB9_4
; NONEON-NOSVE-NEXT: .LBB9_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI9_0
; NONEON-NOSVE-NEXT: ldr q0, [x9, :lo12:.LCPI9_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB9_4
; NONEON-NOSVE-NEXT: .LBB9_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr s1, [x0], #4
; NONEON-NOSVE-NEXT: str q0, [sp, #144]
; NONEON-NOSVE-NEXT: str s1, [sp, #176]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #176]
; NONEON-NOSVE-NEXT: str q0, [sp, #128]
; NONEON-NOSVE-NEXT: ldp s0, s1, [sp, #152]
; NONEON-NOSVE-NEXT: stp s0, s1, [sp, #168]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #144]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #128]
; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #160]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #160]
; NONEON-NOSVE-NEXT: .LBB9_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB9_7
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB9_8
; NONEON-NOSVE-NEXT: .LBB9_6: // %else10
; NONEON-NOSVE-NEXT: add sp, sp, #224
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB9_7: // %cond.load5
; NONEON-NOSVE-NEXT: ldr s1, [x0], #4
; NONEON-NOSVE-NEXT: str q0, [sp, #80]
; NONEON-NOSVE-NEXT: str s1, [sp, #112]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #92]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #112]
; NONEON-NOSVE-NEXT: str q0, [sp, #64]
; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #80]
; NONEON-NOSVE-NEXT: stp s0, s2, [sp, #96]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #64]
; NONEON-NOSVE-NEXT: stp s0, s1, [sp, #104]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #96]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB9_6
; NONEON-NOSVE-NEXT: .LBB9_8: // %cond.load9
; NONEON-NOSVE-NEXT: ldr s1, [x0]
; NONEON-NOSVE-NEXT: str q0, [sp]
; NONEON-NOSVE-NEXT: ldr x8, [sp]
; NONEON-NOSVE-NEXT: str s1, [sp, #48]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #8]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #48]
; NONEON-NOSVE-NEXT: str x8, [sp, #32]
; NONEON-NOSVE-NEXT: str q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #16]
; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #40]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]
; NONEON-NOSVE-NEXT: add sp, sp, #224
; NONEON-NOSVE-NEXT: ret
%load = call <4 x float> @llvm.masked.expandload.v4f32(ptr %src, <4 x i1> %mask, <4 x float> zeroinitializer)
ret <4 x float> %load
}
define <8 x float> @masked_load_v8f32(ptr %src, <8 x i1> %mask) {
; CHECK-LABEL: masked_load_v8f32:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI10_0
; CHECK-NEXT: ptrue p0.b, vl8
; CHECK-NEXT: lsl z0.b, z0.b, #7
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI10_0]
; CHECK-NEXT: asr z0.b, z0.b, #7
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: mov z1.s, #0 // =0x0
; CHECK-NEXT: uaddv d0, p0, z0.b
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: mov z0.s, #0 // =0x0
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB10_8
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov s0, wzr
; CHECK-NEXT: ldr s1, [x0], #4
; CHECK-NEXT: zip1 z1.s, z1.s, z0.s
; CHECK-NEXT: zip1 z0.s, z0.s, z0.s
; CHECK-NEXT: zip1 z0.d, z1.d, z0.d
; CHECK-NEXT: mov z1.s, #0 // =0x0
; CHECK-NEXT: tbnz w8, #1, .LBB10_9
; CHECK-NEXT: .LBB10_2: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB10_10
; CHECK-NEXT: .LBB10_3: // %cond.load5
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z2.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z3.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z2.s, z3.s
; CHECK-NEXT: ldr s2, [x0], #4
; CHECK-NEXT: mov z0.s, p1/m, s2
; CHECK-NEXT: tbnz w8, #3, .LBB10_11
; CHECK-NEXT: .LBB10_4: // %else10
; CHECK-NEXT: tbz w8, #4, .LBB10_12
; CHECK-NEXT: .LBB10_5: // %cond.load13
; CHECK-NEXT: ldr s2, [x0], #4
; CHECK-NEXT: ptrue p0.s, vl1
; CHECK-NEXT: mov z1.s, p0/m, z2.s
; CHECK-NEXT: tbnz w8, #5, .LBB10_13
; CHECK-NEXT: .LBB10_6: // %else18
; CHECK-NEXT: tbz w8, #6, .LBB10_14
; CHECK-NEXT: .LBB10_7: // %cond.load21
; CHECK-NEXT: mov w9, #2 // =0x2
; CHECK-NEXT: index z2.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z3.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z2.s, z3.s
; CHECK-NEXT: ldr s2, [x0], #4
; CHECK-NEXT: mov z1.s, p1/m, s2
; CHECK-NEXT: tbz w8, #7, .LBB10_16
; CHECK-NEXT: b .LBB10_15
; CHECK-NEXT: .LBB10_8: // %else
; CHECK-NEXT: tbz w8, #1, .LBB10_2
; CHECK-NEXT: .LBB10_9: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z3.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z2.s, z3.s
; CHECK-NEXT: ldr s2, [x0], #4
; CHECK-NEXT: mov z0.s, p1/m, s2
; CHECK-NEXT: tbnz w8, #2, .LBB10_3
; CHECK-NEXT: .LBB10_10: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB10_4
; CHECK-NEXT: .LBB10_11: // %cond.load9
; CHECK-NEXT: mov w9, #3 // =0x3
; CHECK-NEXT: index z2.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z3.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z2.s, z3.s
; CHECK-NEXT: ldr s2, [x0], #4
; CHECK-NEXT: mov z0.s, p1/m, s2
; CHECK-NEXT: tbnz w8, #4, .LBB10_5
; CHECK-NEXT: .LBB10_12: // %else14
; CHECK-NEXT: tbz w8, #5, .LBB10_6
; CHECK-NEXT: .LBB10_13: // %cond.load17
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z3.s, w9
; CHECK-NEXT: cmpeq p1.s, p0/z, z2.s, z3.s
; CHECK-NEXT: ldr s2, [x0], #4
; CHECK-NEXT: mov z1.s, p1/m, s2
; CHECK-NEXT: tbnz w8, #6, .LBB10_7
; CHECK-NEXT: .LBB10_14: // %else22
; CHECK-NEXT: tbz w8, #7, .LBB10_16
; CHECK-NEXT: .LBB10_15: // %cond.load25
; CHECK-NEXT: mov w8, #3 // =0x3
; CHECK-NEXT: index z2.s, #0, #1
; CHECK-NEXT: ptrue p0.s
; CHECK-NEXT: mov z3.s, w8
; CHECK-NEXT: cmpeq p1.s, p0/z, z2.s, z3.s
; CHECK-NEXT: ldr s2, [x0]
; CHECK-NEXT: mov z1.s, p1/m, s2
; CHECK-NEXT: .LBB10_16: // %else26
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v8f32:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #496
; NONEON-NOSVE-NEXT: str x29, [sp, #480] // 8-byte Spill
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 496
; NONEON-NOSVE-NEXT: .cfi_offset w29, -16
; NONEON-NOSVE-NEXT: str d0, [sp, #464]
; NONEON-NOSVE-NEXT: adrp x8, .LCPI10_0
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #466]
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #467]
; NONEON-NOSVE-NEXT: ldrb w11, [sp, #465]
; NONEON-NOSVE-NEXT: ldrb w13, [sp, #468]
; NONEON-NOSVE-NEXT: ldrb w14, [sp, #469]
; NONEON-NOSVE-NEXT: ldrb w15, [sp, #470]
; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1
; NONEON-NOSVE-NEXT: ldrb w12, [sp, #464]
; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1
; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1
; NONEON-NOSVE-NEXT: and w9, w9, #0x4
; NONEON-NOSVE-NEXT: and w10, w10, #0x8
; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1
; NONEON-NOSVE-NEXT: orr w9, w9, w10
; NONEON-NOSVE-NEXT: ldrb w10, [sp, #471]
; NONEON-NOSVE-NEXT: and w11, w11, #0x2
; NONEON-NOSVE-NEXT: and w13, w13, #0x10
; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1
; NONEON-NOSVE-NEXT: and w12, w14, #0x20
; NONEON-NOSVE-NEXT: orr w9, w9, w13
; NONEON-NOSVE-NEXT: and w13, w15, #0x40
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: orr w9, w11, w9
; NONEON-NOSVE-NEXT: orr w11, w12, w13
; NONEON-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI10_0]
; NONEON-NOSVE-NEXT: orr w9, w9, w11
; NONEON-NOSVE-NEXT: and w10, w10, #0x80
; NONEON-NOSVE-NEXT: add w10, w9, w10
; NONEON-NOSVE-NEXT: add x9, sp, #208
; NONEON-NOSVE-NEXT: and w8, w10, #0xff
; NONEON-NOSVE-NEXT: tbz w10, #0, .LBB10_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldr s0, [x0], #4
; NONEON-NOSVE-NEXT: str wzr, [sp, #460]
; NONEON-NOSVE-NEXT: stur xzr, [x9, #244]
; NONEON-NOSVE-NEXT: str s0, [sp, #448]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #448]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB10_3
; NONEON-NOSVE-NEXT: b .LBB10_4
; NONEON-NOSVE-NEXT: .LBB10_2:
; NONEON-NOSVE-NEXT: str q1, [sp, #-16]!
; NONEON-NOSVE-NEXT: ldr q0, [sp], #16
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB10_4
; NONEON-NOSVE-NEXT: .LBB10_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr s2, [x0], #4
; NONEON-NOSVE-NEXT: str q0, [sp, #400]
; NONEON-NOSVE-NEXT: str s2, [sp, #432]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #432]
; NONEON-NOSVE-NEXT: str q0, [sp, #384]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #412]
; NONEON-NOSVE-NEXT: str s0, [sp, #428]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #408]
; NONEON-NOSVE-NEXT: str s0, [sp, #424]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #400]
; NONEON-NOSVE-NEXT: str s0, [sp, #416]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #384]
; NONEON-NOSVE-NEXT: str s0, [sp, #420]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #416]
; NONEON-NOSVE-NEXT: .LBB10_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB10_12
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB10_13
; NONEON-NOSVE-NEXT: .LBB10_6: // %else10
; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB10_14
; NONEON-NOSVE-NEXT: .LBB10_7: // %else14
; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB10_15
; NONEON-NOSVE-NEXT: .LBB10_8: // %else18
; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB10_16
; NONEON-NOSVE-NEXT: .LBB10_9: // %else22
; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB10_11
; NONEON-NOSVE-NEXT: .LBB10_10: // %cond.load25
; NONEON-NOSVE-NEXT: ldr s2, [x0]
; NONEON-NOSVE-NEXT: str q1, [sp]
; NONEON-NOSVE-NEXT: ldr x8, [sp]
; NONEON-NOSVE-NEXT: str s2, [sp, #48]
; NONEON-NOSVE-NEXT: ldr s2, [sp, #8]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #48]
; NONEON-NOSVE-NEXT: str x8, [sp, #32]
; NONEON-NOSVE-NEXT: str q1, [sp, #16]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #16]
; NONEON-NOSVE-NEXT: stp s2, s1, [sp, #40]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #32]
; NONEON-NOSVE-NEXT: .LBB10_11: // %else26
; NONEON-NOSVE-NEXT: ldr x29, [sp, #480] // 8-byte Reload
; NONEON-NOSVE-NEXT: add sp, sp, #496
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB10_12: // %cond.load5
; NONEON-NOSVE-NEXT: ldr s2, [x0], #4
; NONEON-NOSVE-NEXT: str q0, [sp, #336]
; NONEON-NOSVE-NEXT: str s2, [sp, #368]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #368]
; NONEON-NOSVE-NEXT: str q0, [sp, #320]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #348]
; NONEON-NOSVE-NEXT: str s0, [sp, #364]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #340]
; NONEON-NOSVE-NEXT: str s0, [sp, #356]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #336]
; NONEON-NOSVE-NEXT: str s0, [sp, #352]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #320]
; NONEON-NOSVE-NEXT: str s0, [sp, #360]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #352]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB10_6
; NONEON-NOSVE-NEXT: .LBB10_13: // %cond.load9
; NONEON-NOSVE-NEXT: ldr s2, [x0], #4
; NONEON-NOSVE-NEXT: str q0, [sp, #256]
; NONEON-NOSVE-NEXT: ldr x10, [sp, #256]
; NONEON-NOSVE-NEXT: str s2, [sp, #304]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #304]
; NONEON-NOSVE-NEXT: str x10, [sp, #288]
; NONEON-NOSVE-NEXT: str q0, [sp, #272]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #264]
; NONEON-NOSVE-NEXT: str s0, [sp, #296]
; NONEON-NOSVE-NEXT: ldr s0, [sp, #272]
; NONEON-NOSVE-NEXT: str s0, [sp, #300]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #288]
; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB10_7
; NONEON-NOSVE-NEXT: .LBB10_14: // %cond.load13
; NONEON-NOSVE-NEXT: ldr s2, [x0], #4
; NONEON-NOSVE-NEXT: str q1, [sp, #208]
; NONEON-NOSVE-NEXT: str s2, [sp, #240]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #240]
; NONEON-NOSVE-NEXT: str q1, [sp, #192]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #220]
; NONEON-NOSVE-NEXT: str s1, [sp, #236]
; NONEON-NOSVE-NEXT: ldur x10, [x9, #4]
; NONEON-NOSVE-NEXT: stur x10, [x9, #20]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #192]
; NONEON-NOSVE-NEXT: str s1, [sp, #224]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #224]
; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB10_8
; NONEON-NOSVE-NEXT: .LBB10_15: // %cond.load17
; NONEON-NOSVE-NEXT: ldr s2, [x0], #4
; NONEON-NOSVE-NEXT: str q1, [sp, #144]
; NONEON-NOSVE-NEXT: str s2, [sp, #176]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #176]
; NONEON-NOSVE-NEXT: str q1, [sp, #128]
; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #152]
; NONEON-NOSVE-NEXT: stp s1, s2, [sp, #168]
; NONEON-NOSVE-NEXT: ldr s2, [sp, #144]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #128]
; NONEON-NOSVE-NEXT: stp s2, s1, [sp, #160]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #160]
; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB10_9
; NONEON-NOSVE-NEXT: .LBB10_16: // %cond.load21
; NONEON-NOSVE-NEXT: ldr s2, [x0], #4
; NONEON-NOSVE-NEXT: str q1, [sp, #80]
; NONEON-NOSVE-NEXT: str s2, [sp, #112]
; NONEON-NOSVE-NEXT: ldr s2, [sp, #92]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #112]
; NONEON-NOSVE-NEXT: str q1, [sp, #64]
; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #80]
; NONEON-NOSVE-NEXT: stp s1, s3, [sp, #96]
; NONEON-NOSVE-NEXT: ldr s1, [sp, #64]
; NONEON-NOSVE-NEXT: stp s1, s2, [sp, #104]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #96]
; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB10_10
; NONEON-NOSVE-NEXT: b .LBB10_11
%load = call <8 x float> @llvm.masked.expandload.v8f32(ptr %src, <8 x i1> %mask, <8 x float> zeroinitializer)
ret <8 x float> %load
}
define <2 x double> @masked_load_v2f64(ptr %src, <2 x i1> %mask) {
; CHECK-LABEL: masked_load_v2f64:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: index z1.s, #1, #1
; CHECK-NEXT: ptrue p0.s, vl2
; CHECK-NEXT: lsl z0.s, z0.s, #31
; CHECK-NEXT: asr z0.s, z0.s, #31
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: uaddv d0, p0, z0.s
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB11_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov d0, xzr
; CHECK-NEXT: ldr d1, [x0], #8
; CHECK-NEXT: zip1 z0.d, z1.d, z0.d
; CHECK-NEXT: tbnz w8, #1, .LBB11_3
; CHECK-NEXT: b .LBB11_4
; CHECK-NEXT: .LBB11_2:
; CHECK-NEXT: mov z0.d, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB11_4
; CHECK-NEXT: .LBB11_3: // %cond.load1
; CHECK-NEXT: mov w8, #1 // =0x1
; CHECK-NEXT: index z1.d, #0, #1
; CHECK-NEXT: ptrue p0.d
; CHECK-NEXT: mov z2.d, x8
; CHECK-NEXT: cmpeq p1.d, p0/z, z1.d, z2.d
; CHECK-NEXT: ldr d1, [x0]
; CHECK-NEXT: mov z0.d, p1/m, d1
; CHECK-NEXT: .LBB11_4: // %else2
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v2f64:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #96
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96
; NONEON-NOSVE-NEXT: str d0, [sp, #80]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #84]
; NONEON-NOSVE-NEXT: ldrb w9, [sp, #80]
; 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: tbz w8, #0, .LBB11_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldr d0, [x0], #8
; NONEON-NOSVE-NEXT: str xzr, [sp, #72]
; NONEON-NOSVE-NEXT: str d0, [sp, #64]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #64]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB11_3
; NONEON-NOSVE-NEXT: b .LBB11_4
; NONEON-NOSVE-NEXT: .LBB11_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI11_0
; NONEON-NOSVE-NEXT: ldr q0, [x9, :lo12:.LCPI11_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB11_4
; NONEON-NOSVE-NEXT: .LBB11_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr d1, [x0]
; NONEON-NOSVE-NEXT: str q0, [sp]
; NONEON-NOSVE-NEXT: str d1, [sp, #48]
; NONEON-NOSVE-NEXT: ldr d1, [sp]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #48]
; NONEON-NOSVE-NEXT: str q0, [sp, #16]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #16]
; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #32]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #32]
; NONEON-NOSVE-NEXT: .LBB11_4: // %else2
; NONEON-NOSVE-NEXT: add sp, sp, #96
; NONEON-NOSVE-NEXT: ret
%load = call <2 x double> @llvm.masked.expandload.v2f64(ptr %src, <2 x i1> %mask, <2 x double> zeroinitializer)
ret <2 x double> %load
}
define <4 x double> @masked_load_v4f64(ptr %src, <4 x i1> %mask) {
; CHECK-LABEL: masked_load_v4f64:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0
; CHECK-NEXT: adrp x8, .LCPI12_0
; CHECK-NEXT: ptrue p0.h, vl4
; CHECK-NEXT: lsl z0.h, z0.h, #15
; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI12_0]
; CHECK-NEXT: asr z0.h, z0.h, #15
; CHECK-NEXT: and z0.d, z0.d, z1.d
; CHECK-NEXT: mov z1.d, #0 // =0x0
; CHECK-NEXT: uaddv d0, p0, z0.h
; CHECK-NEXT: str b0, [sp, #12]
; CHECK-NEXT: mov z0.d, #0 // =0x0
; CHECK-NEXT: ldrb w8, [sp, #12]
; CHECK-NEXT: tbz w8, #0, .LBB12_4
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: fmov d0, xzr
; CHECK-NEXT: ldr d1, [x0], #8
; CHECK-NEXT: zip1 z0.d, z1.d, z0.d
; CHECK-NEXT: mov z1.d, #0 // =0x0
; CHECK-NEXT: tbnz w8, #1, .LBB12_5
; CHECK-NEXT: .LBB12_2: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB12_6
; CHECK-NEXT: .LBB12_3: // %cond.load5
; CHECK-NEXT: ldr d2, [x0], #8
; CHECK-NEXT: ptrue p0.d, vl1
; CHECK-NEXT: mov z1.d, p0/m, z2.d
; CHECK-NEXT: tbz w8, #3, .LBB12_8
; CHECK-NEXT: b .LBB12_7
; CHECK-NEXT: .LBB12_4: // %else
; CHECK-NEXT: tbz w8, #1, .LBB12_2
; CHECK-NEXT: .LBB12_5: // %cond.load1
; CHECK-NEXT: mov w9, #1 // =0x1
; CHECK-NEXT: index z2.d, #0, #1
; CHECK-NEXT: ptrue p0.d
; CHECK-NEXT: mov z3.d, x9
; CHECK-NEXT: cmpeq p1.d, p0/z, z2.d, z3.d
; CHECK-NEXT: ldr d2, [x0], #8
; CHECK-NEXT: mov z0.d, p1/m, d2
; CHECK-NEXT: tbnz w8, #2, .LBB12_3
; CHECK-NEXT: .LBB12_6: // %else6
; CHECK-NEXT: tbz w8, #3, .LBB12_8
; CHECK-NEXT: .LBB12_7: // %cond.load9
; CHECK-NEXT: mov w8, #1 // =0x1
; CHECK-NEXT: index z2.d, #0, #1
; CHECK-NEXT: ptrue p0.d
; CHECK-NEXT: mov z3.d, x8
; CHECK-NEXT: cmpeq p1.d, p0/z, z2.d, z3.d
; CHECK-NEXT: ldr d2, [x0]
; CHECK-NEXT: mov z1.d, p1/m, d2
; CHECK-NEXT: .LBB12_8: // %else10
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_v4f64:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #224
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 224
; NONEON-NOSVE-NEXT: str d0, [sp, #208]
; NONEON-NOSVE-NEXT: adrp x9, .LCPI12_0
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #210]
; NONEON-NOSVE-NEXT: ldrh w10, [sp, #212]
; NONEON-NOSVE-NEXT: ldrh w11, [sp, #214]
; NONEON-NOSVE-NEXT: ldrh w12, [sp, #208]
; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI12_0]
; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1
; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1
; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1
; NONEON-NOSVE-NEXT: and w8, w8, #0x2
; NONEON-NOSVE-NEXT: and w10, w10, #0x4
; NONEON-NOSVE-NEXT: and w11, w11, #0x8
; NONEON-NOSVE-NEXT: bfxil w8, w12, #0, #1
; NONEON-NOSVE-NEXT: orr w10, w10, w11
; NONEON-NOSVE-NEXT: orr w8, w8, w10
; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB12_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldr d0, [x0], #8
; NONEON-NOSVE-NEXT: str xzr, [sp, #200]
; NONEON-NOSVE-NEXT: str d0, [sp, #192]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #192]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB12_3
; NONEON-NOSVE-NEXT: b .LBB12_4
; NONEON-NOSVE-NEXT: .LBB12_2:
; NONEON-NOSVE-NEXT: str q1, [sp, #-16]!
; NONEON-NOSVE-NEXT: ldr q0, [sp], #16
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB12_4
; NONEON-NOSVE-NEXT: .LBB12_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldr d2, [x0], #8
; NONEON-NOSVE-NEXT: str q0, [sp, #128]
; NONEON-NOSVE-NEXT: str d2, [sp, #176]
; NONEON-NOSVE-NEXT: ldr d2, [sp, #128]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #176]
; NONEON-NOSVE-NEXT: str q0, [sp, #144]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #144]
; NONEON-NOSVE-NEXT: stp d2, d0, [sp, #160]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #160]
; NONEON-NOSVE-NEXT: .LBB12_4: // %else2
; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB12_7
; NONEON-NOSVE-NEXT: // %bb.5: // %else6
; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB12_8
; NONEON-NOSVE-NEXT: .LBB12_6: // %else10
; NONEON-NOSVE-NEXT: add sp, sp, #224
; NONEON-NOSVE-NEXT: ret
; NONEON-NOSVE-NEXT: .LBB12_7: // %cond.load5
; NONEON-NOSVE-NEXT: ldr d2, [x0], #8
; NONEON-NOSVE-NEXT: str q1, [sp, #80]
; NONEON-NOSVE-NEXT: str d2, [sp, #112]
; NONEON-NOSVE-NEXT: ldr d2, [sp, #88]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #112]
; NONEON-NOSVE-NEXT: str q1, [sp, #64]
; NONEON-NOSVE-NEXT: ldr d1, [sp, #64]
; NONEON-NOSVE-NEXT: stp d1, d2, [sp, #96]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #96]
; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB12_6
; NONEON-NOSVE-NEXT: .LBB12_8: // %cond.load9
; NONEON-NOSVE-NEXT: ldr d2, [x0]
; NONEON-NOSVE-NEXT: str q1, [sp]
; NONEON-NOSVE-NEXT: str d2, [sp, #48]
; NONEON-NOSVE-NEXT: ldr d2, [sp]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #48]
; NONEON-NOSVE-NEXT: str q1, [sp, #16]
; NONEON-NOSVE-NEXT: ldr d1, [sp, #16]
; NONEON-NOSVE-NEXT: stp d2, d1, [sp, #32]
; NONEON-NOSVE-NEXT: ldr q1, [sp, #32]
; NONEON-NOSVE-NEXT: add sp, sp, #224
; NONEON-NOSVE-NEXT: ret
%load = call <4 x double> @llvm.masked.expandload.v4f64(ptr %src, <4 x i1> %mask, <4 x double> zeroinitializer)
ret <4 x double> %load
}
define <3 x i32> @masked_load_zext_v3i32(ptr %load_ptr, <3 x i1> %pm) {
; CHECK-LABEL: masked_load_zext_v3i32:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: and w8, w1, #0x1
; CHECK-NEXT: bfi w8, w2, #1, #1
; CHECK-NEXT: bfi w8, w3, #2, #1
; CHECK-NEXT: tbz w8, #0, .LBB13_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: ldrh w9, [x0], #2
; CHECK-NEXT: fmov s0, wzr
; CHECK-NEXT: fmov s1, w9
; CHECK-NEXT: zip1 z1.h, z1.h, z0.h
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
; CHECK-NEXT: tbnz w8, #1, .LBB13_3
; CHECK-NEXT: b .LBB13_4
; CHECK-NEXT: .LBB13_2:
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB13_4
; CHECK-NEXT: .LBB13_3: // %cond.load1
; CHECK-NEXT: ldrh w9, [x0], #2
; CHECK-NEXT: fmov s1, w9
; CHECK-NEXT: zip1 z1.h, z0.h, z1.h
; CHECK-NEXT: mov z0.h, z0.h[2]
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
; CHECK-NEXT: .LBB13_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB13_6
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov z1.h, z0.h[1]
; CHECK-NEXT: zip1 z0.h, z0.h, z1.h
; CHECK-NEXT: ldr h1, [x0]
; CHECK-NEXT: zip1 z0.s, z0.s, z1.s
; CHECK-NEXT: .LBB13_6: // %else6
; CHECK-NEXT: uunpklo z0.s, z0.h
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_zext_v3i32:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #80
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
; NONEON-NOSVE-NEXT: and w8, w1, #0x1
; NONEON-NOSVE-NEXT: bfi w8, w2, #1, #1
; NONEON-NOSVE-NEXT: bfi w8, w3, #2, #1
; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB13_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldrh w9, [x0], #2
; NONEON-NOSVE-NEXT: stur wzr, [sp, #66]
; NONEON-NOSVE-NEXT: strh w9, [sp, #64]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #64]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB13_3
; NONEON-NOSVE-NEXT: b .LBB13_4
; NONEON-NOSVE-NEXT: .LBB13_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI13_0
; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI13_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB13_4
; NONEON-NOSVE-NEXT: .LBB13_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldrh w9, [x0], #2
; NONEON-NOSVE-NEXT: str d0, [sp, #48]
; NONEON-NOSVE-NEXT: strh w9, [sp, #58]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #52]
; NONEON-NOSVE-NEXT: strh w9, [sp, #60]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #48]
; NONEON-NOSVE-NEXT: strh w9, [sp, #56]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]
; NONEON-NOSVE-NEXT: .LBB13_4: // %else2
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB13_6
; NONEON-NOSVE-NEXT: // %bb.5: // %cond.load5
; NONEON-NOSVE-NEXT: ldrh w8, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #32]
; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #32]
; NONEON-NOSVE-NEXT: str w8, [sp, #40]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #40]
; NONEON-NOSVE-NEXT: .LBB13_6: // %else6
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10]
; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
; NONEON-NOSVE-NEXT: add sp, sp, #80
; NONEON-NOSVE-NEXT: ret
%load_value = tail call <3 x i16> @llvm.masked.expandload.v3i16.p0(ptr %load_ptr, <3 x i1> %pm, <3 x i16> zeroinitializer)
%extend = zext <3 x i16> %load_value to <3 x i32>
ret <3 x i32> %extend;
}
define <3 x i32> @masked_load_sext_v3i32(ptr %load_ptr, <3 x i1> %pm) {
; CHECK-LABEL: masked_load_sext_v3i32:
; CHECK: // %bb.0:
; CHECK-NEXT: sub sp, sp, #16
; CHECK-NEXT: .cfi_def_cfa_offset 16
; CHECK-NEXT: and w8, w1, #0x1
; CHECK-NEXT: bfi w8, w2, #1, #1
; CHECK-NEXT: bfi w8, w3, #2, #1
; CHECK-NEXT: tbz w8, #0, .LBB14_2
; CHECK-NEXT: // %bb.1: // %cond.load
; CHECK-NEXT: ldrh w9, [x0], #2
; CHECK-NEXT: fmov s0, wzr
; CHECK-NEXT: fmov s1, w9
; CHECK-NEXT: zip1 z1.h, z1.h, z0.h
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
; CHECK-NEXT: tbnz w8, #1, .LBB14_3
; CHECK-NEXT: b .LBB14_4
; CHECK-NEXT: .LBB14_2:
; CHECK-NEXT: mov z0.h, #0 // =0x0
; CHECK-NEXT: tbz w8, #1, .LBB14_4
; CHECK-NEXT: .LBB14_3: // %cond.load1
; CHECK-NEXT: ldrh w9, [x0], #2
; CHECK-NEXT: fmov s1, w9
; CHECK-NEXT: zip1 z1.h, z0.h, z1.h
; CHECK-NEXT: mov z0.h, z0.h[2]
; CHECK-NEXT: zip1 z0.s, z1.s, z0.s
; CHECK-NEXT: .LBB14_4: // %else2
; CHECK-NEXT: tbz w8, #2, .LBB14_6
; CHECK-NEXT: // %bb.5: // %cond.load5
; CHECK-NEXT: mov z1.h, z0.h[1]
; CHECK-NEXT: zip1 z0.h, z0.h, z1.h
; CHECK-NEXT: ldr h1, [x0]
; CHECK-NEXT: zip1 z0.s, z0.s, z1.s
; CHECK-NEXT: .LBB14_6: // %else6
; CHECK-NEXT: sunpklo z0.s, z0.h
; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0
; CHECK-NEXT: add sp, sp, #16
; CHECK-NEXT: ret
;
; NONEON-NOSVE-LABEL: masked_load_sext_v3i32:
; NONEON-NOSVE: // %bb.0:
; NONEON-NOSVE-NEXT: sub sp, sp, #80
; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80
; NONEON-NOSVE-NEXT: and w8, w1, #0x1
; NONEON-NOSVE-NEXT: bfi w8, w2, #1, #1
; NONEON-NOSVE-NEXT: bfi w8, w3, #2, #1
; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB14_2
; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load
; NONEON-NOSVE-NEXT: ldrh w9, [x0], #2
; NONEON-NOSVE-NEXT: stur wzr, [sp, #66]
; NONEON-NOSVE-NEXT: strh w9, [sp, #64]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #64]
; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB14_3
; NONEON-NOSVE-NEXT: b .LBB14_4
; NONEON-NOSVE-NEXT: .LBB14_2:
; NONEON-NOSVE-NEXT: adrp x9, .LCPI14_0
; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI14_0]
; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB14_4
; NONEON-NOSVE-NEXT: .LBB14_3: // %cond.load1
; NONEON-NOSVE-NEXT: ldrh w9, [x0], #2
; NONEON-NOSVE-NEXT: str d0, [sp, #48]
; NONEON-NOSVE-NEXT: strh w9, [sp, #58]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #52]
; NONEON-NOSVE-NEXT: strh w9, [sp, #60]
; NONEON-NOSVE-NEXT: ldrh w9, [sp, #48]
; NONEON-NOSVE-NEXT: strh w9, [sp, #56]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #56]
; NONEON-NOSVE-NEXT: .LBB14_4: // %else2
; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB14_6
; NONEON-NOSVE-NEXT: // %bb.5: // %cond.load5
; NONEON-NOSVE-NEXT: ldrh w8, [x0]
; NONEON-NOSVE-NEXT: str d0, [sp, #32]
; NONEON-NOSVE-NEXT: strh w8, [sp, #44]
; NONEON-NOSVE-NEXT: ldr w8, [sp, #32]
; NONEON-NOSVE-NEXT: str w8, [sp, #40]
; NONEON-NOSVE-NEXT: ldr d0, [sp, #40]
; NONEON-NOSVE-NEXT: .LBB14_6: // %else6
; NONEON-NOSVE-NEXT: str d0, [sp, #8]
; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14]
; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #12]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24]
; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10]
; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #8]
; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16]
; NONEON-NOSVE-NEXT: ldr q0, [sp, #16]
; NONEON-NOSVE-NEXT: add sp, sp, #80
; NONEON-NOSVE-NEXT: ret
%load_value = tail call <3 x i16> @llvm.masked.expandload.v3i16.p0(ptr %load_ptr, <3 x i1> %pm, <3 x i16> zeroinitializer)
%extend = sext <3 x i16> %load_value to <3 x i32>
ret <3 x i32> %extend;
}