| ; 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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.h, vl4 |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 |
| ; CHECK-NEXT: ld1b { z0.h }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB0_8 |
| ; NONEON-NOSVE-NEXT: .LBB0_6: // %else8 |
| ; NONEON-NOSVE-NEXT: add sp, sp, #128 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB0_7: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #2] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldrb w8, [x0, #3] |
| ; 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.load.v4i8(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.b, vl8 |
| ; CHECK-NEXT: lsl z0.b, z0.b, #7 |
| ; CHECK-NEXT: asr z0.b, z0.b, #7 |
| ; CHECK-NEXT: cmpne p0.b, p0/z, z0.b, #0 |
| ; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 |
| ; 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 Folded 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB1_13 |
| ; NONEON-NOSVE-NEXT: .LBB1_6: // %else8 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB1_14 |
| ; NONEON-NOSVE-NEXT: .LBB1_7: // %else11 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB1_15 |
| ; NONEON-NOSVE-NEXT: .LBB1_8: // %else14 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB1_16 |
| ; NONEON-NOSVE-NEXT: .LBB1_9: // %else17 |
| ; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB1_11 |
| ; NONEON-NOSVE-NEXT: .LBB1_10: // %cond.load19 |
| ; NONEON-NOSVE-NEXT: ldrb w8, [x0, #7] |
| ; 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: // %else20 |
| ; NONEON-NOSVE-NEXT: ldr x29, [sp, #256] // 8-byte Folded Reload |
| ; NONEON-NOSVE-NEXT: add sp, sp, #272 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB1_12: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #2] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #3] |
| ; 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.load10 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #4] |
| ; 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.load13 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #5] |
| ; 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.load16 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #6] |
| ; 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.load.v8i8(ptr %src, i32 8, <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: // kill: def $q0 killed $q0 def $z0 |
| ; CHECK-NEXT: ptrue p0.b, vl16 |
| ; CHECK-NEXT: lsl z0.b, z0.b, #7 |
| ; CHECK-NEXT: asr z0.b, z0.b, #7 |
| ; CHECK-NEXT: cmpne p0.b, p0/z, z0.b, #0 |
| ; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB2_21 |
| ; NONEON-NOSVE-NEXT: .LBB2_6: // %else8 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB2_22 |
| ; NONEON-NOSVE-NEXT: .LBB2_7: // %else11 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #464 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB2_23 |
| ; NONEON-NOSVE-NEXT: .LBB2_8: // %else14 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB2_24 |
| ; NONEON-NOSVE-NEXT: .LBB2_9: // %else17 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB2_25 |
| ; NONEON-NOSVE-NEXT: .LBB2_10: // %else20 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB2_26 |
| ; NONEON-NOSVE-NEXT: .LBB2_11: // %else23 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #208 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB2_27 |
| ; NONEON-NOSVE-NEXT: .LBB2_12: // %else26 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB2_28 |
| ; NONEON-NOSVE-NEXT: .LBB2_13: // %else29 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB2_29 |
| ; NONEON-NOSVE-NEXT: .LBB2_14: // %else32 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB2_30 |
| ; NONEON-NOSVE-NEXT: .LBB2_15: // %else35 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB2_31 |
| ; NONEON-NOSVE-NEXT: .LBB2_16: // %else38 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB2_32 |
| ; NONEON-NOSVE-NEXT: .LBB2_17: // %else41 |
| ; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB2_19 |
| ; NONEON-NOSVE-NEXT: .LBB2_18: // %cond.load43 |
| ; NONEON-NOSVE-NEXT: ldrb w8, [x0, #15] |
| ; 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: // %else44 |
| ; 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.load4 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #2] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #3] |
| ; 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.load10 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #4] |
| ; 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.load13 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #5] |
| ; 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.load16 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #6] |
| ; 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.load19 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #7] |
| ; 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.load22 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #8] |
| ; 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.load25 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #9] |
| ; 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.load28 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #10] |
| ; 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.load31 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #11] |
| ; 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.load34 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #12] |
| ; 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.load37 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #13] |
| ; 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.load40 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #14] |
| ; 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.load.v16i8(ptr %src, i32 8, <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, #32 |
| ; CHECK-NEXT: .cfi_def_cfa_offset 32 |
| ; CHECK-NEXT: ldr w8, [sp, #224] |
| ; CHECK-NEXT: ldr w9, [sp, #216] |
| ; CHECK-NEXT: ptrue p0.b, vl16 |
| ; CHECK-NEXT: strb w7, [sp, #6] |
| ; CHECK-NEXT: strb w8, [sp, #31] |
| ; CHECK-NEXT: ldr w8, [sp, #208] |
| ; CHECK-NEXT: strb w9, [sp, #30] |
| ; CHECK-NEXT: ldr w9, [sp, #200] |
| ; CHECK-NEXT: strb w8, [sp, #29] |
| ; CHECK-NEXT: ldr w8, [sp, #192] |
| ; CHECK-NEXT: strb w9, [sp, #28] |
| ; CHECK-NEXT: ldr w9, [sp, #184] |
| ; CHECK-NEXT: strb w8, [sp, #27] |
| ; CHECK-NEXT: ldr w8, [sp, #176] |
| ; CHECK-NEXT: strb w9, [sp, #26] |
| ; CHECK-NEXT: ldr w9, [sp, #168] |
| ; CHECK-NEXT: strb w8, [sp, #25] |
| ; CHECK-NEXT: ldr w8, [sp, #160] |
| ; CHECK-NEXT: strb w9, [sp, #24] |
| ; CHECK-NEXT: ldr w9, [sp, #152] |
| ; CHECK-NEXT: strb w8, [sp, #23] |
| ; CHECK-NEXT: ldr w8, [sp, #144] |
| ; CHECK-NEXT: strb w9, [sp, #22] |
| ; CHECK-NEXT: ldr w9, [sp, #136] |
| ; CHECK-NEXT: strb w8, [sp, #21] |
| ; CHECK-NEXT: ldr w8, [sp, #128] |
| ; CHECK-NEXT: strb w9, [sp, #20] |
| ; CHECK-NEXT: ldr w9, [sp, #120] |
| ; CHECK-NEXT: strb w8, [sp, #19] |
| ; CHECK-NEXT: ldr w8, [sp, #112] |
| ; CHECK-NEXT: strb w9, [sp, #18] |
| ; CHECK-NEXT: ldr w9, [sp, #104] |
| ; CHECK-NEXT: strb w8, [sp, #17] |
| ; CHECK-NEXT: ldr w8, [sp, #96] |
| ; CHECK-NEXT: strb w9, [sp, #16] |
| ; CHECK-NEXT: ldr w9, [sp, #88] |
| ; CHECK-NEXT: strb w8, [sp, #15] |
| ; CHECK-NEXT: ldr w8, [sp, #80] |
| ; CHECK-NEXT: strb w9, [sp, #14] |
| ; CHECK-NEXT: ldr w9, [sp, #72] |
| ; CHECK-NEXT: strb w8, [sp, #13] |
| ; CHECK-NEXT: ldr w8, [sp, #64] |
| ; CHECK-NEXT: strb w9, [sp, #12] |
| ; CHECK-NEXT: ldr w9, [sp, #56] |
| ; CHECK-NEXT: strb w8, [sp, #11] |
| ; CHECK-NEXT: ldr w8, [sp, #48] |
| ; CHECK-NEXT: strb w9, [sp, #10] |
| ; CHECK-NEXT: ldr w9, [sp, #40] |
| ; CHECK-NEXT: strb w8, [sp, #9] |
| ; CHECK-NEXT: ldr w8, [sp, #32] |
| ; CHECK-NEXT: strb w9, [sp, #8] |
| ; CHECK-NEXT: strb w8, [sp, #7] |
| ; CHECK-NEXT: mov w8, #16 // =0x10 |
| ; CHECK-NEXT: strb w6, [sp, #5] |
| ; CHECK-NEXT: strb w5, [sp, #4] |
| ; CHECK-NEXT: strb w4, [sp, #3] |
| ; CHECK-NEXT: strb w3, [sp, #2] |
| ; CHECK-NEXT: strb w2, [sp, #1] |
| ; CHECK-NEXT: strb w1, [sp] |
| ; CHECK-NEXT: ldp q1, q0, [sp] |
| ; CHECK-NEXT: lsl z0.b, z0.b, #7 |
| ; CHECK-NEXT: lsl z1.b, z1.b, #7 |
| ; CHECK-NEXT: asr z0.b, z0.b, #7 |
| ; CHECK-NEXT: asr z1.b, z1.b, #7 |
| ; CHECK-NEXT: cmpne p1.b, p0/z, z0.b, #0 |
| ; CHECK-NEXT: cmpne p0.b, p0/z, z1.b, #0 |
| ; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] |
| ; CHECK-NEXT: ld1b { z1.b }, p1/z, [x0, x8] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 |
| ; CHECK-NEXT: add sp, sp, #32 |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB3_37 |
| ; NONEON-NOSVE-NEXT: .LBB3_6: // %else8 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB3_38 |
| ; NONEON-NOSVE-NEXT: .LBB3_7: // %else11 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #1488 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB3_39 |
| ; NONEON-NOSVE-NEXT: .LBB3_8: // %else14 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB3_40 |
| ; NONEON-NOSVE-NEXT: .LBB3_9: // %else17 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB3_41 |
| ; NONEON-NOSVE-NEXT: .LBB3_10: // %else20 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB3_42 |
| ; NONEON-NOSVE-NEXT: .LBB3_11: // %else23 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #1232 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB3_43 |
| ; NONEON-NOSVE-NEXT: .LBB3_12: // %else26 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB3_44 |
| ; NONEON-NOSVE-NEXT: .LBB3_13: // %else29 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB3_45 |
| ; NONEON-NOSVE-NEXT: .LBB3_14: // %else32 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB3_46 |
| ; NONEON-NOSVE-NEXT: .LBB3_15: // %else35 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB3_47 |
| ; NONEON-NOSVE-NEXT: .LBB3_16: // %else38 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB3_48 |
| ; NONEON-NOSVE-NEXT: .LBB3_17: // %else41 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB3_49 |
| ; NONEON-NOSVE-NEXT: .LBB3_18: // %else44 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #16, .LBB3_50 |
| ; NONEON-NOSVE-NEXT: .LBB3_19: // %else47 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #720 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #17, .LBB3_51 |
| ; NONEON-NOSVE-NEXT: .LBB3_20: // %else50 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #18, .LBB3_52 |
| ; NONEON-NOSVE-NEXT: .LBB3_21: // %else53 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #19, .LBB3_53 |
| ; NONEON-NOSVE-NEXT: .LBB3_22: // %else56 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #20, .LBB3_54 |
| ; NONEON-NOSVE-NEXT: .LBB3_23: // %else59 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #464 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #21, .LBB3_55 |
| ; NONEON-NOSVE-NEXT: .LBB3_24: // %else62 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #22, .LBB3_56 |
| ; NONEON-NOSVE-NEXT: .LBB3_25: // %else65 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #23, .LBB3_57 |
| ; NONEON-NOSVE-NEXT: .LBB3_26: // %else68 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #24, .LBB3_58 |
| ; NONEON-NOSVE-NEXT: .LBB3_27: // %else71 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #208 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #25, .LBB3_59 |
| ; NONEON-NOSVE-NEXT: .LBB3_28: // %else74 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #26, .LBB3_60 |
| ; NONEON-NOSVE-NEXT: .LBB3_29: // %else77 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #27, .LBB3_61 |
| ; NONEON-NOSVE-NEXT: .LBB3_30: // %else80 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #28, .LBB3_62 |
| ; NONEON-NOSVE-NEXT: .LBB3_31: // %else83 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #29, .LBB3_63 |
| ; NONEON-NOSVE-NEXT: .LBB3_32: // %else86 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #30, .LBB3_64 |
| ; NONEON-NOSVE-NEXT: .LBB3_33: // %else89 |
| ; NONEON-NOSVE-NEXT: tbz w8, #31, .LBB3_35 |
| ; NONEON-NOSVE-NEXT: .LBB3_34: // %cond.load91 |
| ; NONEON-NOSVE-NEXT: ldrb w8, [x0, #31] |
| ; 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: // %else92 |
| ; 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.load4 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #2] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #3] |
| ; 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.load10 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #4] |
| ; 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.load13 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #5] |
| ; 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.load16 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #6] |
| ; 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.load19 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #7] |
| ; 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.load22 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #8] |
| ; 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.load25 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #9] |
| ; 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.load28 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #10] |
| ; 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.load31 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #11] |
| ; 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.load34 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #12] |
| ; 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.load37 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #13] |
| ; 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.load40 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #14] |
| ; 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.load43 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #15] |
| ; 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.load46 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #16] |
| ; 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.load49 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #17] |
| ; 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.load52 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #18] |
| ; 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.load55 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #19] |
| ; 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.load58 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #20] |
| ; 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.load61 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #21] |
| ; 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.load64 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #22] |
| ; 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.load67 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #23] |
| ; 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.load70 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #24] |
| ; 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.load73 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #25] |
| ; 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.load76 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #26] |
| ; 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.load79 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #27] |
| ; 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.load82 |
| ; NONEON-NOSVE-NEXT: ldrb w10, [x0, #28] |
| ; 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.load85 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #29] |
| ; 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.load88 |
| ; NONEON-NOSVE-NEXT: ldrb w9, [x0, #30] |
| ; 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.load.v32i8(ptr %src, i32 8, <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: fmov s1, wzr |
| ; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: mov z2.s, z0.s[1] |
| ; CHECK-NEXT: ptrue p0.h, vl4 |
| ; CHECK-NEXT: zip1 z0.h, z0.h, z2.h |
| ; CHECK-NEXT: zip1 z1.h, z1.h, z1.h |
| ; CHECK-NEXT: zip1 z0.s, z0.s, z1.s |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 |
| ; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 |
| ; 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] |
| ; 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, #2] |
| ; 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.load.v2f16(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.h, vl4 |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 |
| ; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB5_8 |
| ; NONEON-NOSVE-NEXT: .LBB5_6: // %else8 |
| ; NONEON-NOSVE-NEXT: add sp, sp, #128 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB5_7: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #4] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #6] |
| ; 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.load.v4f16(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.h, vl8 |
| ; CHECK-NEXT: uunpklo z0.h, z0.b |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 |
| ; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; 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 Folded 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB6_13 |
| ; NONEON-NOSVE-NEXT: .LBB6_6: // %else8 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB6_14 |
| ; NONEON-NOSVE-NEXT: .LBB6_7: // %else11 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB6_15 |
| ; NONEON-NOSVE-NEXT: .LBB6_8: // %else14 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB6_16 |
| ; NONEON-NOSVE-NEXT: .LBB6_9: // %else17 |
| ; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB6_11 |
| ; NONEON-NOSVE-NEXT: .LBB6_10: // %cond.load19 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #14] |
| ; 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: // %else20 |
| ; NONEON-NOSVE-NEXT: ldr x29, [sp, #480] // 8-byte Folded Reload |
| ; NONEON-NOSVE-NEXT: add sp, sp, #496 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB6_12: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #4] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #6] |
| ; 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.load10 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #8] |
| ; 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.load13 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #10] |
| ; 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.load16 |
| ; NONEON-NOSVE-NEXT: ldr h1, [x0, #12] |
| ; 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.load.v8f16(ptr %src, i32 8, <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: movprfx z1, z0 |
| ; CHECK-NEXT: ext z1.b, z1.b, z0.b, #8 |
| ; CHECK-NEXT: ptrue p0.h, vl8 |
| ; CHECK-NEXT: mov x8, #8 // =0x8 |
| ; CHECK-NEXT: uunpklo z0.h, z0.b |
| ; CHECK-NEXT: uunpklo z1.h, z1.b |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: lsl z1.h, z1.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z1.h, z1.h, #15 |
| ; CHECK-NEXT: cmpne p1.h, p0/z, z0.h, #0 |
| ; CHECK-NEXT: cmpne p0.h, p0/z, z1.h, #0 |
| ; CHECK-NEXT: ld1h { z0.h }, p1/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; CHECK-NEXT: ld1h { z1.h }, p0/z, [x0, x8, lsl #1] |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB7_21 |
| ; NONEON-NOSVE-NEXT: .LBB7_6: // %else8 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB7_22 |
| ; NONEON-NOSVE-NEXT: .LBB7_7: // %else11 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB7_23 |
| ; NONEON-NOSVE-NEXT: .LBB7_8: // %else14 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB7_24 |
| ; NONEON-NOSVE-NEXT: .LBB7_9: // %else17 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB7_25 |
| ; NONEON-NOSVE-NEXT: .LBB7_10: // %else20 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB7_26 |
| ; NONEON-NOSVE-NEXT: .LBB7_11: // %else23 |
| ; NONEON-NOSVE-NEXT: add x9, sp, #208 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB7_27 |
| ; NONEON-NOSVE-NEXT: .LBB7_12: // %else26 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB7_28 |
| ; NONEON-NOSVE-NEXT: .LBB7_13: // %else29 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB7_29 |
| ; NONEON-NOSVE-NEXT: .LBB7_14: // %else32 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB7_30 |
| ; NONEON-NOSVE-NEXT: .LBB7_15: // %else35 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB7_31 |
| ; NONEON-NOSVE-NEXT: .LBB7_16: // %else38 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB7_32 |
| ; NONEON-NOSVE-NEXT: .LBB7_17: // %else41 |
| ; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB7_19 |
| ; NONEON-NOSVE-NEXT: .LBB7_18: // %cond.load43 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #30] |
| ; 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: // %else44 |
| ; 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.load4 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #4] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #6] |
| ; 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.load10 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #8] |
| ; 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.load13 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #10] |
| ; 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.load16 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #12] |
| ; 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.load19 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #14] |
| ; 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.load22 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #16] |
| ; 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.load25 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #18] |
| ; 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.load28 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #20] |
| ; 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.load31 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #22] |
| ; 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.load34 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #24] |
| ; 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.load37 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #26] |
| ; 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.load40 |
| ; NONEON-NOSVE-NEXT: ldr h2, [x0, #28] |
| ; 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.load.v16f16(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.s, vl2 |
| ; CHECK-NEXT: lsl z0.s, z0.s, #31 |
| ; CHECK-NEXT: asr z0.s, z0.s, #31 |
| ; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 |
| ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 |
| ; 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] |
| ; 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, #4] |
| ; 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.load.v2f32(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.s, vl4 |
| ; CHECK-NEXT: uunpklo z0.s, z0.h |
| ; CHECK-NEXT: lsl z0.s, z0.s, #31 |
| ; CHECK-NEXT: asr z0.s, z0.s, #31 |
| ; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 |
| ; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB9_8 |
| ; NONEON-NOSVE-NEXT: .LBB9_6: // %else8 |
| ; NONEON-NOSVE-NEXT: add sp, sp, #224 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB9_7: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldr s1, [x0, #8] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldr s1, [x0, #12] |
| ; 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.load.v4f32(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: mov z1.b, z0.b[3] |
| ; CHECK-NEXT: mov z2.b, z0.b[2] |
| ; CHECK-NEXT: mov x8, #4 // =0x4 |
| ; CHECK-NEXT: mov z3.b, z0.b[1] |
| ; CHECK-NEXT: mov z4.b, z0.b[7] |
| ; CHECK-NEXT: mov z5.b, z0.b[6] |
| ; CHECK-NEXT: mov z6.b, z0.b[5] |
| ; CHECK-NEXT: mov z7.b, z0.b[4] |
| ; CHECK-NEXT: ptrue p0.s, vl4 |
| ; CHECK-NEXT: zip1 z1.h, z2.h, z1.h |
| ; CHECK-NEXT: zip1 z0.h, z0.h, z3.h |
| ; CHECK-NEXT: zip1 z2.h, z5.h, z4.h |
| ; CHECK-NEXT: zip1 z3.h, z7.h, z6.h |
| ; CHECK-NEXT: zip1 z0.s, z0.s, z1.s |
| ; CHECK-NEXT: zip1 z1.s, z3.s, z2.s |
| ; CHECK-NEXT: uunpklo z0.s, z0.h |
| ; CHECK-NEXT: uunpklo z1.s, z1.h |
| ; CHECK-NEXT: lsl z0.s, z0.s, #31 |
| ; CHECK-NEXT: lsl z1.s, z1.s, #31 |
| ; CHECK-NEXT: asr z0.s, z0.s, #31 |
| ; CHECK-NEXT: asr z1.s, z1.s, #31 |
| ; CHECK-NEXT: cmpne p1.s, p0/z, z0.s, #0 |
| ; CHECK-NEXT: cmpne p0.s, p0/z, z1.s, #0 |
| ; CHECK-NEXT: ld1w { z0.s }, p1/z, [x0] |
| ; CHECK-NEXT: ld1w { z1.s }, p0/z, [x0, x8, lsl #2] |
| ; 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_v8f32: |
| ; NONEON-NOSVE: // %bb.0: |
| ; NONEON-NOSVE-NEXT: sub sp, sp, #496 |
| ; NONEON-NOSVE-NEXT: str x29, [sp, #480] // 8-byte Folded 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB10_13 |
| ; NONEON-NOSVE-NEXT: .LBB10_6: // %else8 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB10_14 |
| ; NONEON-NOSVE-NEXT: .LBB10_7: // %else11 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB10_15 |
| ; NONEON-NOSVE-NEXT: .LBB10_8: // %else14 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB10_16 |
| ; NONEON-NOSVE-NEXT: .LBB10_9: // %else17 |
| ; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB10_11 |
| ; NONEON-NOSVE-NEXT: .LBB10_10: // %cond.load19 |
| ; NONEON-NOSVE-NEXT: ldr s2, [x0, #28] |
| ; 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: // %else20 |
| ; NONEON-NOSVE-NEXT: ldr x29, [sp, #480] // 8-byte Folded Reload |
| ; NONEON-NOSVE-NEXT: add sp, sp, #496 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB10_12: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldr s2, [x0, #8] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldr s2, [x0, #12] |
| ; 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.load10 |
| ; NONEON-NOSVE-NEXT: ldr s2, [x0, #16] |
| ; 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.load13 |
| ; NONEON-NOSVE-NEXT: ldr s2, [x0, #20] |
| ; 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.load16 |
| ; NONEON-NOSVE-NEXT: ldr s2, [x0, #24] |
| ; 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.load.v8f32(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.d, vl2 |
| ; CHECK-NEXT: uunpklo z0.d, z0.s |
| ; CHECK-NEXT: lsl z0.d, z0.d, #63 |
| ; CHECK-NEXT: asr z0.d, z0.d, #63 |
| ; CHECK-NEXT: cmpne p0.d, p0/z, z0.d, #0 |
| ; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; 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] |
| ; 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, #8] |
| ; 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.load.v2f64(ptr %src, i32 8, <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: // kill: def $d0 killed $d0 def $z0 |
| ; CHECK-NEXT: ptrue p0.d, vl2 |
| ; CHECK-NEXT: mov x8, #2 // =0x2 |
| ; CHECK-NEXT: uunpklo z0.s, z0.h |
| ; CHECK-NEXT: movprfx z1, z0 |
| ; CHECK-NEXT: ext z1.b, z1.b, z0.b, #8 |
| ; CHECK-NEXT: uunpklo z0.d, z0.s |
| ; CHECK-NEXT: uunpklo z1.d, z1.s |
| ; CHECK-NEXT: lsl z0.d, z0.d, #63 |
| ; CHECK-NEXT: lsl z1.d, z1.d, #63 |
| ; CHECK-NEXT: asr z0.d, z0.d, #63 |
| ; CHECK-NEXT: asr z1.d, z1.d, #63 |
| ; CHECK-NEXT: cmpne p1.d, p0/z, z0.d, #0 |
| ; CHECK-NEXT: cmpne p0.d, p0/z, z1.d, #0 |
| ; CHECK-NEXT: ld1d { z0.d }, p1/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; CHECK-NEXT: ld1d { z1.d }, p0/z, [x0, x8, lsl #3] |
| ; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 |
| ; 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] |
| ; 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: // %else5 |
| ; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB12_8 |
| ; NONEON-NOSVE-NEXT: .LBB12_6: // %else8 |
| ; NONEON-NOSVE-NEXT: add sp, sp, #224 |
| ; NONEON-NOSVE-NEXT: ret |
| ; NONEON-NOSVE-NEXT: .LBB12_7: // %cond.load4 |
| ; NONEON-NOSVE-NEXT: ldr d2, [x0, #16] |
| ; 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.load7 |
| ; NONEON-NOSVE-NEXT: ldr d2, [x0, #24] |
| ; 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.load.v4f64(ptr %src, i32 8, <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: fmov s0, w2 |
| ; CHECK-NEXT: fmov s1, w1 |
| ; CHECK-NEXT: adrp x8, .LCPI13_0 |
| ; CHECK-NEXT: ptrue p0.s, vl4 |
| ; CHECK-NEXT: zip1 z0.h, z1.h, z0.h |
| ; CHECK-NEXT: fmov s1, w3 |
| ; CHECK-NEXT: zip1 z0.s, z0.s, z1.s |
| ; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI13_0] |
| ; CHECK-NEXT: and z0.d, z0.d, z1.d |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: sunpklo z0.s, z0.h |
| ; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 |
| ; CHECK-NEXT: ld1h { z0.s }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; 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] |
| ; 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.load4 |
| ; NONEON-NOSVE-NEXT: ldrh w8, [x0, #4] |
| ; 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: // %else5 |
| ; 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.load.v3i16.p0(ptr %load_ptr, i32 4, <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: fmov s0, w2 |
| ; CHECK-NEXT: fmov s1, w1 |
| ; CHECK-NEXT: adrp x8, .LCPI14_0 |
| ; CHECK-NEXT: ptrue p0.s, vl4 |
| ; CHECK-NEXT: zip1 z0.h, z1.h, z0.h |
| ; CHECK-NEXT: fmov s1, w3 |
| ; CHECK-NEXT: zip1 z0.s, z0.s, z1.s |
| ; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI14_0] |
| ; CHECK-NEXT: and z0.d, z0.d, z1.d |
| ; CHECK-NEXT: lsl z0.h, z0.h, #15 |
| ; CHECK-NEXT: asr z0.h, z0.h, #15 |
| ; CHECK-NEXT: sunpklo z0.s, z0.h |
| ; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 |
| ; CHECK-NEXT: ld1sh { z0.s }, p0/z, [x0] |
| ; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 |
| ; 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] |
| ; 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.load4 |
| ; NONEON-NOSVE-NEXT: ldrh w8, [x0, #4] |
| ; 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: // %else5 |
| ; 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.load.v3i16.p0(ptr %load_ptr, i32 4, <3 x i1> %pm, <3 x i16> zeroinitializer) |
| %extend = sext <3 x i16> %load_value to <3 x i32> |
| ret <3 x i32> %extend; |
| } |
| |
| declare <4 x i8> @llvm.masked.load.v4i8(ptr, i32, <4 x i1>, <4 x i8>) |
| declare <8 x i8> @llvm.masked.load.v8i8(ptr, i32, <8 x i1>, <8 x i8>) |
| declare <16 x i8> @llvm.masked.load.v16i8(ptr, i32, <16 x i1>, <16 x i8>) |
| declare <32 x i8> @llvm.masked.load.v32i8(ptr, i32, <32 x i1>, <32 x i8>) |
| |
| declare <2 x half> @llvm.masked.load.v2f16(ptr, i32, <2 x i1>, <2 x half>) |
| declare <4 x half> @llvm.masked.load.v4f16(ptr, i32, <4 x i1>, <4 x half>) |
| declare <8 x half> @llvm.masked.load.v8f16(ptr, i32, <8 x i1>, <8 x half>) |
| declare <16 x half> @llvm.masked.load.v16f16(ptr, i32, <16 x i1>, <16 x half>) |
| |
| declare <2 x float> @llvm.masked.load.v2f32(ptr, i32, <2 x i1>, <2 x float>) |
| declare <4 x float> @llvm.masked.load.v4f32(ptr, i32, <4 x i1>, <4 x float>) |
| declare <8 x float> @llvm.masked.load.v8f32(ptr, i32, <8 x i1>, <8 x float>) |
| |
| declare <2 x double> @llvm.masked.load.v2f64(ptr, i32, <2 x i1>, <2 x double>) |
| declare <4 x double> @llvm.masked.load.v4f64(ptr, i32, <4 x i1>, <4 x double>) |
| |
| declare <3 x i16> @llvm.masked.load.v3i16.p0(ptr, i32, <3 x i1>, <3 x i16>) |