1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -mattr=+sve -force-streaming-compatible < %s | FileCheck %s 3; RUN: llc -force-streaming-compatible < %s | FileCheck %s --check-prefix=NONEON-NOSVE 4 5 6target triple = "aarch64-unknown-linux-gnu" 7 8; 9; Masked Load 10; 11 12define <4 x i8> @masked_load_v4i8(ptr %src, <4 x i1> %mask) { 13; CHECK-LABEL: masked_load_v4i8: 14; CHECK: // %bb.0: 15; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 16; CHECK-NEXT: ptrue p0.h, vl4 17; CHECK-NEXT: lsl z0.h, z0.h, #15 18; CHECK-NEXT: asr z0.h, z0.h, #15 19; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 20; CHECK-NEXT: ld1b { z0.h }, p0/z, [x0] 21; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 22; CHECK-NEXT: ret 23; 24; NONEON-NOSVE-LABEL: masked_load_v4i8: 25; NONEON-NOSVE: // %bb.0: 26; NONEON-NOSVE-NEXT: sub sp, sp, #128 27; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 128 28; NONEON-NOSVE-NEXT: str d0, [sp, #112] 29; NONEON-NOSVE-NEXT: ldrh w8, [sp, #114] 30; NONEON-NOSVE-NEXT: ldrh w9, [sp, #116] 31; NONEON-NOSVE-NEXT: ldrh w10, [sp, #118] 32; NONEON-NOSVE-NEXT: ldrh w11, [sp, #112] 33; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 34; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 35; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 36; NONEON-NOSVE-NEXT: and w8, w8, #0x2 37; NONEON-NOSVE-NEXT: and w9, w9, #0x4 38; NONEON-NOSVE-NEXT: and w10, w10, #0x8 39; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1 40; NONEON-NOSVE-NEXT: orr w9, w9, w10 41; NONEON-NOSVE-NEXT: orr w8, w8, w9 42; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB0_2 43; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 44; NONEON-NOSVE-NEXT: ldrb w9, [x0] 45; NONEON-NOSVE-NEXT: strh wzr, [sp, #110] 46; NONEON-NOSVE-NEXT: stur wzr, [sp, #106] 47; NONEON-NOSVE-NEXT: strh w9, [sp, #104] 48; NONEON-NOSVE-NEXT: ldr d0, [sp, #104] 49; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB0_3 50; NONEON-NOSVE-NEXT: b .LBB0_4 51; NONEON-NOSVE-NEXT: .LBB0_2: 52; NONEON-NOSVE-NEXT: adrp x9, .LCPI0_0 53; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI0_0] 54; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB0_4 55; NONEON-NOSVE-NEXT: .LBB0_3: // %cond.load1 56; NONEON-NOSVE-NEXT: ldrb w9, [x0, #1] 57; NONEON-NOSVE-NEXT: str d0, [sp, #80] 58; NONEON-NOSVE-NEXT: strh w9, [sp, #96] 59; NONEON-NOSVE-NEXT: ldr w9, [sp, #84] 60; NONEON-NOSVE-NEXT: ldr d0, [sp, #96] 61; NONEON-NOSVE-NEXT: str w9, [sp, #92] 62; NONEON-NOSVE-NEXT: ldrh w9, [sp, #80] 63; NONEON-NOSVE-NEXT: str d0, [sp, #72] 64; NONEON-NOSVE-NEXT: strh w9, [sp, #88] 65; NONEON-NOSVE-NEXT: ldrh w9, [sp, #72] 66; NONEON-NOSVE-NEXT: strh w9, [sp, #90] 67; NONEON-NOSVE-NEXT: ldr d0, [sp, #88] 68; NONEON-NOSVE-NEXT: .LBB0_4: // %else2 69; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB0_7 70; NONEON-NOSVE-NEXT: // %bb.5: // %else5 71; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB0_8 72; NONEON-NOSVE-NEXT: .LBB0_6: // %else8 73; NONEON-NOSVE-NEXT: add sp, sp, #128 74; NONEON-NOSVE-NEXT: ret 75; NONEON-NOSVE-NEXT: .LBB0_7: // %cond.load4 76; NONEON-NOSVE-NEXT: ldrb w9, [x0, #2] 77; NONEON-NOSVE-NEXT: str d0, [sp, #48] 78; NONEON-NOSVE-NEXT: strh w9, [sp, #64] 79; NONEON-NOSVE-NEXT: ldrh w9, [sp, #54] 80; NONEON-NOSVE-NEXT: ldr d0, [sp, #64] 81; NONEON-NOSVE-NEXT: strh w9, [sp, #62] 82; NONEON-NOSVE-NEXT: ldr w9, [sp, #48] 83; NONEON-NOSVE-NEXT: str d0, [sp, #40] 84; NONEON-NOSVE-NEXT: str w9, [sp, #56] 85; NONEON-NOSVE-NEXT: ldrh w9, [sp, #40] 86; NONEON-NOSVE-NEXT: strh w9, [sp, #60] 87; NONEON-NOSVE-NEXT: ldr d0, [sp, #56] 88; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB0_6 89; NONEON-NOSVE-NEXT: .LBB0_8: // %cond.load7 90; NONEON-NOSVE-NEXT: ldrb w8, [x0, #3] 91; NONEON-NOSVE-NEXT: str d0, [sp, #8] 92; NONEON-NOSVE-NEXT: strh w8, [sp, #32] 93; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 94; NONEON-NOSVE-NEXT: ldr d0, [sp, #32] 95; NONEON-NOSVE-NEXT: strh w8, [sp, #28] 96; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 97; NONEON-NOSVE-NEXT: str d0, [sp, #16] 98; NONEON-NOSVE-NEXT: str w8, [sp, #24] 99; NONEON-NOSVE-NEXT: ldrh w8, [sp, #16] 100; NONEON-NOSVE-NEXT: strh w8, [sp, #30] 101; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 102; NONEON-NOSVE-NEXT: add sp, sp, #128 103; NONEON-NOSVE-NEXT: ret 104 %load = call <4 x i8> @llvm.masked.load.v4i8(ptr %src, i32 8, <4 x i1> %mask, <4 x i8> zeroinitializer) 105 ret <4 x i8> %load 106} 107 108define <8 x i8> @masked_load_v8i8(ptr %src, <8 x i1> %mask) { 109; CHECK-LABEL: masked_load_v8i8: 110; CHECK: // %bb.0: 111; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 112; CHECK-NEXT: ptrue p0.b, vl8 113; CHECK-NEXT: lsl z0.b, z0.b, #7 114; CHECK-NEXT: asr z0.b, z0.b, #7 115; CHECK-NEXT: cmpne p0.b, p0/z, z0.b, #0 116; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] 117; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 118; CHECK-NEXT: ret 119; 120; NONEON-NOSVE-LABEL: masked_load_v8i8: 121; NONEON-NOSVE: // %bb.0: 122; NONEON-NOSVE-NEXT: sub sp, sp, #272 123; NONEON-NOSVE-NEXT: str x29, [sp, #256] // 8-byte Folded Spill 124; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 272 125; NONEON-NOSVE-NEXT: .cfi_offset w29, -16 126; NONEON-NOSVE-NEXT: str d0, [sp, #240] 127; NONEON-NOSVE-NEXT: add x9, sp, #176 128; NONEON-NOSVE-NEXT: ldrb w8, [sp, #242] 129; NONEON-NOSVE-NEXT: ldrb w10, [sp, #243] 130; NONEON-NOSVE-NEXT: ldrb w11, [sp, #241] 131; NONEON-NOSVE-NEXT: ldrb w13, [sp, #244] 132; NONEON-NOSVE-NEXT: ldrb w14, [sp, #245] 133; NONEON-NOSVE-NEXT: ldrb w15, [sp, #246] 134; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 135; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 136; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1 137; NONEON-NOSVE-NEXT: ldrb w12, [sp, #240] 138; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1 139; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1 140; NONEON-NOSVE-NEXT: and w8, w8, #0x4 141; NONEON-NOSVE-NEXT: and w10, w10, #0x8 142; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1 143; NONEON-NOSVE-NEXT: orr w8, w8, w10 144; NONEON-NOSVE-NEXT: ldrb w10, [sp, #247] 145; NONEON-NOSVE-NEXT: and w11, w11, #0x2 146; NONEON-NOSVE-NEXT: and w13, w13, #0x10 147; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1 148; NONEON-NOSVE-NEXT: and w12, w14, #0x20 149; NONEON-NOSVE-NEXT: orr w8, w8, w13 150; NONEON-NOSVE-NEXT: and w13, w15, #0x40 151; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 152; NONEON-NOSVE-NEXT: orr w8, w11, w8 153; NONEON-NOSVE-NEXT: orr w11, w12, w13 154; NONEON-NOSVE-NEXT: orr w8, w8, w11 155; NONEON-NOSVE-NEXT: and w10, w10, #0x80 156; NONEON-NOSVE-NEXT: add w10, w8, w10 157; NONEON-NOSVE-NEXT: and w8, w10, #0xff 158; NONEON-NOSVE-NEXT: tbz w10, #0, .LBB1_2 159; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 160; NONEON-NOSVE-NEXT: ldrb w10, [x0] 161; NONEON-NOSVE-NEXT: strb wzr, [sp, #239] 162; NONEON-NOSVE-NEXT: sturh wzr, [x9, #61] 163; NONEON-NOSVE-NEXT: stur wzr, [x9, #57] 164; NONEON-NOSVE-NEXT: strb w10, [sp, #232] 165; NONEON-NOSVE-NEXT: ldr d0, [sp, #232] 166; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB1_3 167; NONEON-NOSVE-NEXT: b .LBB1_4 168; NONEON-NOSVE-NEXT: .LBB1_2: 169; NONEON-NOSVE-NEXT: adrp x10, .LCPI1_0 170; NONEON-NOSVE-NEXT: ldr d0, [x10, :lo12:.LCPI1_0] 171; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB1_4 172; NONEON-NOSVE-NEXT: .LBB1_3: // %cond.load1 173; NONEON-NOSVE-NEXT: ldrb w10, [x0, #1] 174; NONEON-NOSVE-NEXT: str d0, [sp, #208] 175; NONEON-NOSVE-NEXT: strb w10, [sp, #224] 176; NONEON-NOSVE-NEXT: ldrh w10, [sp, #214] 177; NONEON-NOSVE-NEXT: ldr d0, [sp, #224] 178; NONEON-NOSVE-NEXT: strh w10, [sp, #222] 179; NONEON-NOSVE-NEXT: str d0, [sp, #200] 180; NONEON-NOSVE-NEXT: ldur w10, [x9, #34] 181; NONEON-NOSVE-NEXT: stur w10, [x9, #42] 182; NONEON-NOSVE-NEXT: ldrb w10, [sp, #208] 183; NONEON-NOSVE-NEXT: strb w10, [sp, #216] 184; NONEON-NOSVE-NEXT: ldrb w10, [sp, #200] 185; NONEON-NOSVE-NEXT: strb w10, [sp, #217] 186; NONEON-NOSVE-NEXT: ldr d0, [sp, #216] 187; NONEON-NOSVE-NEXT: .LBB1_4: // %else2 188; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB1_12 189; NONEON-NOSVE-NEXT: // %bb.5: // %else5 190; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB1_13 191; NONEON-NOSVE-NEXT: .LBB1_6: // %else8 192; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB1_14 193; NONEON-NOSVE-NEXT: .LBB1_7: // %else11 194; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB1_15 195; NONEON-NOSVE-NEXT: .LBB1_8: // %else14 196; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB1_16 197; NONEON-NOSVE-NEXT: .LBB1_9: // %else17 198; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB1_11 199; NONEON-NOSVE-NEXT: .LBB1_10: // %cond.load19 200; NONEON-NOSVE-NEXT: ldrb w8, [x0, #7] 201; NONEON-NOSVE-NEXT: str d0, [sp, #8] 202; NONEON-NOSVE-NEXT: strb w8, [sp, #32] 203; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14] 204; NONEON-NOSVE-NEXT: ldr d0, [sp, #32] 205; NONEON-NOSVE-NEXT: strb w8, [sp, #30] 206; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 207; NONEON-NOSVE-NEXT: str d0, [sp, #16] 208; NONEON-NOSVE-NEXT: strh w8, [sp, #28] 209; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 210; NONEON-NOSVE-NEXT: str w8, [sp, #24] 211; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16] 212; NONEON-NOSVE-NEXT: strb w8, [sp, #31] 213; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 214; NONEON-NOSVE-NEXT: .LBB1_11: // %else20 215; NONEON-NOSVE-NEXT: ldr x29, [sp, #256] // 8-byte Folded Reload 216; NONEON-NOSVE-NEXT: add sp, sp, #272 217; NONEON-NOSVE-NEXT: ret 218; NONEON-NOSVE-NEXT: .LBB1_12: // %cond.load4 219; NONEON-NOSVE-NEXT: ldrb w10, [x0, #2] 220; NONEON-NOSVE-NEXT: str d0, [sp, #176] 221; NONEON-NOSVE-NEXT: strb w10, [sp, #192] 222; NONEON-NOSVE-NEXT: ldrb w10, [sp, #183] 223; NONEON-NOSVE-NEXT: ldr d0, [sp, #192] 224; NONEON-NOSVE-NEXT: strb w10, [sp, #191] 225; NONEON-NOSVE-NEXT: str d0, [sp, #168] 226; NONEON-NOSVE-NEXT: ldur w10, [x9, #3] 227; NONEON-NOSVE-NEXT: stur w10, [x9, #11] 228; NONEON-NOSVE-NEXT: ldrh w9, [sp, #176] 229; NONEON-NOSVE-NEXT: strh w9, [sp, #184] 230; NONEON-NOSVE-NEXT: ldrb w9, [sp, #168] 231; NONEON-NOSVE-NEXT: strb w9, [sp, #186] 232; NONEON-NOSVE-NEXT: ldr d0, [sp, #184] 233; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB1_6 234; NONEON-NOSVE-NEXT: .LBB1_13: // %cond.load7 235; NONEON-NOSVE-NEXT: ldrb w9, [x0, #3] 236; NONEON-NOSVE-NEXT: str d0, [sp, #144] 237; NONEON-NOSVE-NEXT: strb w9, [sp, #160] 238; NONEON-NOSVE-NEXT: ldr w9, [sp, #148] 239; NONEON-NOSVE-NEXT: ldr d0, [sp, #160] 240; NONEON-NOSVE-NEXT: str w9, [sp, #156] 241; NONEON-NOSVE-NEXT: ldrb w9, [sp, #146] 242; NONEON-NOSVE-NEXT: str d0, [sp, #136] 243; NONEON-NOSVE-NEXT: strb w9, [sp, #154] 244; NONEON-NOSVE-NEXT: ldrh w9, [sp, #144] 245; NONEON-NOSVE-NEXT: strh w9, [sp, #152] 246; NONEON-NOSVE-NEXT: ldrb w9, [sp, #136] 247; NONEON-NOSVE-NEXT: strb w9, [sp, #155] 248; NONEON-NOSVE-NEXT: ldr d0, [sp, #152] 249; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB1_7 250; NONEON-NOSVE-NEXT: .LBB1_14: // %cond.load10 251; NONEON-NOSVE-NEXT: ldrb w9, [x0, #4] 252; NONEON-NOSVE-NEXT: str d0, [sp, #112] 253; NONEON-NOSVE-NEXT: strb w9, [sp, #128] 254; NONEON-NOSVE-NEXT: ldrb w9, [sp, #119] 255; NONEON-NOSVE-NEXT: ldr d0, [sp, #128] 256; NONEON-NOSVE-NEXT: strb w9, [sp, #127] 257; NONEON-NOSVE-NEXT: ldurh w9, [sp, #117] 258; NONEON-NOSVE-NEXT: str d0, [sp, #104] 259; NONEON-NOSVE-NEXT: sturh w9, [sp, #125] 260; NONEON-NOSVE-NEXT: ldr w9, [sp, #112] 261; NONEON-NOSVE-NEXT: str w9, [sp, #120] 262; NONEON-NOSVE-NEXT: ldrb w9, [sp, #104] 263; NONEON-NOSVE-NEXT: strb w9, [sp, #124] 264; NONEON-NOSVE-NEXT: ldr d0, [sp, #120] 265; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB1_8 266; NONEON-NOSVE-NEXT: .LBB1_15: // %cond.load13 267; NONEON-NOSVE-NEXT: ldrb w9, [x0, #5] 268; NONEON-NOSVE-NEXT: str d0, [sp, #80] 269; NONEON-NOSVE-NEXT: strb w9, [sp, #96] 270; NONEON-NOSVE-NEXT: ldrh w9, [sp, #86] 271; NONEON-NOSVE-NEXT: ldr d0, [sp, #96] 272; NONEON-NOSVE-NEXT: strh w9, [sp, #94] 273; NONEON-NOSVE-NEXT: ldrb w9, [sp, #84] 274; NONEON-NOSVE-NEXT: str d0, [sp, #72] 275; NONEON-NOSVE-NEXT: strb w9, [sp, #92] 276; NONEON-NOSVE-NEXT: ldr w9, [sp, #80] 277; NONEON-NOSVE-NEXT: str w9, [sp, #88] 278; NONEON-NOSVE-NEXT: ldrb w9, [sp, #72] 279; NONEON-NOSVE-NEXT: strb w9, [sp, #93] 280; NONEON-NOSVE-NEXT: ldr d0, [sp, #88] 281; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB1_9 282; NONEON-NOSVE-NEXT: .LBB1_16: // %cond.load16 283; NONEON-NOSVE-NEXT: ldrb w9, [x0, #6] 284; NONEON-NOSVE-NEXT: str d0, [sp, #48] 285; NONEON-NOSVE-NEXT: strb w9, [sp, #64] 286; NONEON-NOSVE-NEXT: ldrb w9, [sp, #55] 287; NONEON-NOSVE-NEXT: ldr d0, [sp, #64] 288; NONEON-NOSVE-NEXT: strb w9, [sp, #63] 289; NONEON-NOSVE-NEXT: ldrh w9, [sp, #52] 290; NONEON-NOSVE-NEXT: str d0, [sp, #40] 291; NONEON-NOSVE-NEXT: strh w9, [sp, #60] 292; NONEON-NOSVE-NEXT: ldr w9, [sp, #48] 293; NONEON-NOSVE-NEXT: str w9, [sp, #56] 294; NONEON-NOSVE-NEXT: ldrb w9, [sp, #40] 295; NONEON-NOSVE-NEXT: strb w9, [sp, #62] 296; NONEON-NOSVE-NEXT: ldr d0, [sp, #56] 297; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB1_10 298; NONEON-NOSVE-NEXT: b .LBB1_11 299 %load = call <8 x i8> @llvm.masked.load.v8i8(ptr %src, i32 8, <8 x i1> %mask, <8 x i8> zeroinitializer) 300 ret <8 x i8> %load 301} 302 303define <16 x i8> @masked_load_v16i8(ptr %src, <16 x i1> %mask) { 304; CHECK-LABEL: masked_load_v16i8: 305; CHECK: // %bb.0: 306; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 307; CHECK-NEXT: ptrue p0.b, vl16 308; CHECK-NEXT: lsl z0.b, z0.b, #7 309; CHECK-NEXT: asr z0.b, z0.b, #7 310; CHECK-NEXT: cmpne p0.b, p0/z, z0.b, #0 311; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] 312; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 313; CHECK-NEXT: ret 314; 315; NONEON-NOSVE-LABEL: masked_load_v16i8: 316; NONEON-NOSVE: // %bb.0: 317; NONEON-NOSVE-NEXT: str x29, [sp, #-16]! // 8-byte Folded Spill 318; NONEON-NOSVE-NEXT: sub sp, sp, #992 319; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 1008 320; NONEON-NOSVE-NEXT: .cfi_offset w29, -16 321; NONEON-NOSVE-NEXT: str q0, [sp, #976] 322; NONEON-NOSVE-NEXT: ldrb w8, [sp, #978] 323; NONEON-NOSVE-NEXT: ldrb w9, [sp, #979] 324; NONEON-NOSVE-NEXT: ldrb w10, [sp, #977] 325; NONEON-NOSVE-NEXT: ldrb w12, [sp, #980] 326; NONEON-NOSVE-NEXT: ldrb w13, [sp, #981] 327; NONEON-NOSVE-NEXT: ldrb w14, [sp, #982] 328; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 329; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 330; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 331; NONEON-NOSVE-NEXT: ldrb w11, [sp, #976] 332; NONEON-NOSVE-NEXT: sbfx w12, w12, #0, #1 333; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1 334; NONEON-NOSVE-NEXT: and w8, w8, #0x4 335; NONEON-NOSVE-NEXT: and w9, w9, #0x8 336; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1 337; NONEON-NOSVE-NEXT: orr w8, w8, w9 338; NONEON-NOSVE-NEXT: ldrb w9, [sp, #983] 339; NONEON-NOSVE-NEXT: and w10, w10, #0x2 340; NONEON-NOSVE-NEXT: and w12, w12, #0x10 341; NONEON-NOSVE-NEXT: bfxil w10, w11, #0, #1 342; NONEON-NOSVE-NEXT: and w11, w13, #0x20 343; NONEON-NOSVE-NEXT: orr w8, w8, w12 344; NONEON-NOSVE-NEXT: and w12, w14, #0x40 345; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 346; NONEON-NOSVE-NEXT: orr w8, w10, w8 347; NONEON-NOSVE-NEXT: orr w10, w11, w12 348; NONEON-NOSVE-NEXT: orr w8, w8, w10 349; NONEON-NOSVE-NEXT: and w9, w9, #0xffffff80 350; NONEON-NOSVE-NEXT: add w8, w8, w9 351; NONEON-NOSVE-NEXT: add x9, sp, #720 352; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB2_2 353; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 354; NONEON-NOSVE-NEXT: ldrb w10, [x0] 355; NONEON-NOSVE-NEXT: strb wzr, [sp, #975] 356; NONEON-NOSVE-NEXT: sturh wzr, [x9, #253] 357; NONEON-NOSVE-NEXT: stur wzr, [x9, #249] 358; NONEON-NOSVE-NEXT: stur xzr, [x9, #241] 359; NONEON-NOSVE-NEXT: strb w10, [sp, #960] 360; NONEON-NOSVE-NEXT: ldr q0, [sp, #960] 361; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB2_3 362; NONEON-NOSVE-NEXT: b .LBB2_4 363; NONEON-NOSVE-NEXT: .LBB2_2: 364; NONEON-NOSVE-NEXT: adrp x10, .LCPI2_0 365; NONEON-NOSVE-NEXT: ldr q0, [x10, :lo12:.LCPI2_0] 366; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB2_4 367; NONEON-NOSVE-NEXT: .LBB2_3: // %cond.load1 368; NONEON-NOSVE-NEXT: ldrb w10, [x0, #1] 369; NONEON-NOSVE-NEXT: str q0, [sp, #912] 370; NONEON-NOSVE-NEXT: strb w10, [sp, #944] 371; NONEON-NOSVE-NEXT: ldrh w10, [sp, #926] 372; NONEON-NOSVE-NEXT: ldr q0, [sp, #944] 373; NONEON-NOSVE-NEXT: strh w10, [sp, #942] 374; NONEON-NOSVE-NEXT: str q0, [sp, #896] 375; NONEON-NOSVE-NEXT: ldur w10, [x9, #202] 376; NONEON-NOSVE-NEXT: ldur x11, [x9, #194] 377; NONEON-NOSVE-NEXT: stur w10, [x9, #218] 378; NONEON-NOSVE-NEXT: stur x11, [x9, #210] 379; NONEON-NOSVE-NEXT: ldrb w10, [sp, #912] 380; NONEON-NOSVE-NEXT: strb w10, [sp, #928] 381; NONEON-NOSVE-NEXT: ldrb w10, [sp, #896] 382; NONEON-NOSVE-NEXT: strb w10, [sp, #929] 383; NONEON-NOSVE-NEXT: ldr q0, [sp, #928] 384; NONEON-NOSVE-NEXT: .LBB2_4: // %else2 385; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB2_20 386; NONEON-NOSVE-NEXT: // %bb.5: // %else5 387; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB2_21 388; NONEON-NOSVE-NEXT: .LBB2_6: // %else8 389; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB2_22 390; NONEON-NOSVE-NEXT: .LBB2_7: // %else11 391; NONEON-NOSVE-NEXT: add x9, sp, #464 392; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB2_23 393; NONEON-NOSVE-NEXT: .LBB2_8: // %else14 394; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB2_24 395; NONEON-NOSVE-NEXT: .LBB2_9: // %else17 396; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB2_25 397; NONEON-NOSVE-NEXT: .LBB2_10: // %else20 398; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB2_26 399; NONEON-NOSVE-NEXT: .LBB2_11: // %else23 400; NONEON-NOSVE-NEXT: add x9, sp, #208 401; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB2_27 402; NONEON-NOSVE-NEXT: .LBB2_12: // %else26 403; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB2_28 404; NONEON-NOSVE-NEXT: .LBB2_13: // %else29 405; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB2_29 406; NONEON-NOSVE-NEXT: .LBB2_14: // %else32 407; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB2_30 408; NONEON-NOSVE-NEXT: .LBB2_15: // %else35 409; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB2_31 410; NONEON-NOSVE-NEXT: .LBB2_16: // %else38 411; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB2_32 412; NONEON-NOSVE-NEXT: .LBB2_17: // %else41 413; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB2_19 414; NONEON-NOSVE-NEXT: .LBB2_18: // %cond.load43 415; NONEON-NOSVE-NEXT: ldrb w8, [x0, #15] 416; NONEON-NOSVE-NEXT: str q0, [sp] 417; NONEON-NOSVE-NEXT: strb w8, [sp, #48] 418; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14] 419; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 420; NONEON-NOSVE-NEXT: strb w8, [sp, #46] 421; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 422; NONEON-NOSVE-NEXT: str q0, [sp, #16] 423; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 424; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 425; NONEON-NOSVE-NEXT: str w8, [sp, #40] 426; NONEON-NOSVE-NEXT: ldr x8, [sp] 427; NONEON-NOSVE-NEXT: str x8, [sp, #32] 428; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16] 429; NONEON-NOSVE-NEXT: strb w8, [sp, #47] 430; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 431; NONEON-NOSVE-NEXT: .LBB2_19: // %else44 432; NONEON-NOSVE-NEXT: add sp, sp, #992 433; NONEON-NOSVE-NEXT: ldr x29, [sp], #16 // 8-byte Folded Reload 434; NONEON-NOSVE-NEXT: ret 435; NONEON-NOSVE-NEXT: .LBB2_20: // %cond.load4 436; NONEON-NOSVE-NEXT: ldrb w10, [x0, #2] 437; NONEON-NOSVE-NEXT: str q0, [sp, #848] 438; NONEON-NOSVE-NEXT: strb w10, [sp, #880] 439; NONEON-NOSVE-NEXT: ldrb w10, [sp, #863] 440; NONEON-NOSVE-NEXT: ldr q0, [sp, #880] 441; NONEON-NOSVE-NEXT: strb w10, [sp, #879] 442; NONEON-NOSVE-NEXT: str q0, [sp, #832] 443; NONEON-NOSVE-NEXT: ldur w10, [x9, #139] 444; NONEON-NOSVE-NEXT: ldur x11, [x9, #131] 445; NONEON-NOSVE-NEXT: stur w10, [x9, #155] 446; NONEON-NOSVE-NEXT: stur x11, [x9, #147] 447; NONEON-NOSVE-NEXT: ldrh w10, [sp, #848] 448; NONEON-NOSVE-NEXT: strh w10, [sp, #864] 449; NONEON-NOSVE-NEXT: ldrb w10, [sp, #832] 450; NONEON-NOSVE-NEXT: strb w10, [sp, #866] 451; NONEON-NOSVE-NEXT: ldr q0, [sp, #864] 452; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB2_6 453; NONEON-NOSVE-NEXT: .LBB2_21: // %cond.load7 454; NONEON-NOSVE-NEXT: ldrb w10, [x0, #3] 455; NONEON-NOSVE-NEXT: str q0, [sp, #784] 456; NONEON-NOSVE-NEXT: strb w10, [sp, #816] 457; NONEON-NOSVE-NEXT: ldr w10, [sp, #796] 458; NONEON-NOSVE-NEXT: ldr q0, [sp, #816] 459; NONEON-NOSVE-NEXT: str w10, [sp, #812] 460; NONEON-NOSVE-NEXT: str q0, [sp, #768] 461; NONEON-NOSVE-NEXT: ldur x10, [x9, #68] 462; NONEON-NOSVE-NEXT: stur x10, [x9, #84] 463; NONEON-NOSVE-NEXT: ldrb w10, [sp, #786] 464; NONEON-NOSVE-NEXT: strb w10, [sp, #802] 465; NONEON-NOSVE-NEXT: ldrh w10, [sp, #784] 466; NONEON-NOSVE-NEXT: strh w10, [sp, #800] 467; NONEON-NOSVE-NEXT: ldrb w10, [sp, #768] 468; NONEON-NOSVE-NEXT: strb w10, [sp, #803] 469; NONEON-NOSVE-NEXT: ldr q0, [sp, #800] 470; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB2_7 471; NONEON-NOSVE-NEXT: .LBB2_22: // %cond.load10 472; NONEON-NOSVE-NEXT: ldrb w10, [x0, #4] 473; NONEON-NOSVE-NEXT: str q0, [sp, #720] 474; NONEON-NOSVE-NEXT: strb w10, [sp, #752] 475; NONEON-NOSVE-NEXT: ldrb w10, [sp, #735] 476; NONEON-NOSVE-NEXT: ldr q0, [sp, #752] 477; NONEON-NOSVE-NEXT: strb w10, [sp, #751] 478; NONEON-NOSVE-NEXT: str q0, [sp, #704] 479; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 480; NONEON-NOSVE-NEXT: ldur x11, [x9, #5] 481; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 482; NONEON-NOSVE-NEXT: stur x11, [x9, #21] 483; NONEON-NOSVE-NEXT: ldr w9, [sp, #720] 484; NONEON-NOSVE-NEXT: str w9, [sp, #736] 485; NONEON-NOSVE-NEXT: ldrb w9, [sp, #704] 486; NONEON-NOSVE-NEXT: strb w9, [sp, #740] 487; NONEON-NOSVE-NEXT: ldr q0, [sp, #736] 488; NONEON-NOSVE-NEXT: add x9, sp, #464 489; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB2_8 490; NONEON-NOSVE-NEXT: .LBB2_23: // %cond.load13 491; NONEON-NOSVE-NEXT: ldrb w10, [x0, #5] 492; NONEON-NOSVE-NEXT: str q0, [sp, #656] 493; NONEON-NOSVE-NEXT: strb w10, [sp, #688] 494; NONEON-NOSVE-NEXT: ldrh w10, [sp, #670] 495; NONEON-NOSVE-NEXT: ldr q0, [sp, #688] 496; NONEON-NOSVE-NEXT: strh w10, [sp, #686] 497; NONEON-NOSVE-NEXT: str q0, [sp, #640] 498; NONEON-NOSVE-NEXT: ldur x10, [x9, #198] 499; NONEON-NOSVE-NEXT: stur x10, [x9, #214] 500; NONEON-NOSVE-NEXT: ldrb w10, [sp, #660] 501; NONEON-NOSVE-NEXT: strb w10, [sp, #676] 502; NONEON-NOSVE-NEXT: ldr w10, [sp, #656] 503; NONEON-NOSVE-NEXT: str w10, [sp, #672] 504; NONEON-NOSVE-NEXT: ldrb w10, [sp, #640] 505; NONEON-NOSVE-NEXT: strb w10, [sp, #677] 506; NONEON-NOSVE-NEXT: ldr q0, [sp, #672] 507; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB2_9 508; NONEON-NOSVE-NEXT: .LBB2_24: // %cond.load16 509; NONEON-NOSVE-NEXT: ldrb w10, [x0, #6] 510; NONEON-NOSVE-NEXT: str q0, [sp, #592] 511; NONEON-NOSVE-NEXT: strb w10, [sp, #624] 512; NONEON-NOSVE-NEXT: ldrb w10, [sp, #607] 513; NONEON-NOSVE-NEXT: ldr q0, [sp, #624] 514; NONEON-NOSVE-NEXT: strb w10, [sp, #623] 515; NONEON-NOSVE-NEXT: str q0, [sp, #576] 516; NONEON-NOSVE-NEXT: ldur x10, [x9, #135] 517; NONEON-NOSVE-NEXT: stur x10, [x9, #151] 518; NONEON-NOSVE-NEXT: ldrh w10, [sp, #596] 519; NONEON-NOSVE-NEXT: strh w10, [sp, #612] 520; NONEON-NOSVE-NEXT: ldr w10, [sp, #592] 521; NONEON-NOSVE-NEXT: str w10, [sp, #608] 522; NONEON-NOSVE-NEXT: ldrb w10, [sp, #576] 523; NONEON-NOSVE-NEXT: strb w10, [sp, #614] 524; NONEON-NOSVE-NEXT: ldr q0, [sp, #608] 525; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB2_10 526; NONEON-NOSVE-NEXT: .LBB2_25: // %cond.load19 527; NONEON-NOSVE-NEXT: ldrb w10, [x0, #7] 528; NONEON-NOSVE-NEXT: str q0, [sp, #528] 529; NONEON-NOSVE-NEXT: strb w10, [sp, #560] 530; NONEON-NOSVE-NEXT: ldr x10, [sp, #536] 531; NONEON-NOSVE-NEXT: ldr q0, [sp, #560] 532; NONEON-NOSVE-NEXT: str x10, [sp, #552] 533; NONEON-NOSVE-NEXT: ldrb w10, [sp, #534] 534; NONEON-NOSVE-NEXT: str q0, [sp, #512] 535; NONEON-NOSVE-NEXT: strb w10, [sp, #550] 536; NONEON-NOSVE-NEXT: ldrh w10, [sp, #532] 537; NONEON-NOSVE-NEXT: strh w10, [sp, #548] 538; NONEON-NOSVE-NEXT: ldr w10, [sp, #528] 539; NONEON-NOSVE-NEXT: str w10, [sp, #544] 540; NONEON-NOSVE-NEXT: ldrb w10, [sp, #512] 541; NONEON-NOSVE-NEXT: strb w10, [sp, #551] 542; NONEON-NOSVE-NEXT: ldr q0, [sp, #544] 543; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB2_11 544; NONEON-NOSVE-NEXT: .LBB2_26: // %cond.load22 545; NONEON-NOSVE-NEXT: ldrb w10, [x0, #8] 546; NONEON-NOSVE-NEXT: str q0, [sp, #464] 547; NONEON-NOSVE-NEXT: strb w10, [sp, #496] 548; NONEON-NOSVE-NEXT: ldrb w10, [sp, #479] 549; NONEON-NOSVE-NEXT: ldr q0, [sp, #496] 550; NONEON-NOSVE-NEXT: strb w10, [sp, #495] 551; NONEON-NOSVE-NEXT: str q0, [sp, #448] 552; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 553; NONEON-NOSVE-NEXT: ldur w11, [x9, #9] 554; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 555; NONEON-NOSVE-NEXT: stur w11, [x9, #25] 556; NONEON-NOSVE-NEXT: ldr x9, [sp, #464] 557; NONEON-NOSVE-NEXT: str x9, [sp, #480] 558; NONEON-NOSVE-NEXT: ldrb w9, [sp, #448] 559; NONEON-NOSVE-NEXT: strb w9, [sp, #488] 560; NONEON-NOSVE-NEXT: ldr q0, [sp, #480] 561; NONEON-NOSVE-NEXT: add x9, sp, #208 562; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB2_12 563; NONEON-NOSVE-NEXT: .LBB2_27: // %cond.load25 564; NONEON-NOSVE-NEXT: ldrb w10, [x0, #9] 565; NONEON-NOSVE-NEXT: str q0, [sp, #400] 566; NONEON-NOSVE-NEXT: strb w10, [sp, #432] 567; NONEON-NOSVE-NEXT: ldrh w10, [sp, #414] 568; NONEON-NOSVE-NEXT: ldr q0, [sp, #432] 569; NONEON-NOSVE-NEXT: strh w10, [sp, #430] 570; NONEON-NOSVE-NEXT: str q0, [sp, #384] 571; NONEON-NOSVE-NEXT: ldur w10, [x9, #202] 572; NONEON-NOSVE-NEXT: stur w10, [x9, #218] 573; NONEON-NOSVE-NEXT: ldrb w10, [sp, #408] 574; NONEON-NOSVE-NEXT: strb w10, [sp, #424] 575; NONEON-NOSVE-NEXT: ldr x10, [sp, #400] 576; NONEON-NOSVE-NEXT: str x10, [sp, #416] 577; NONEON-NOSVE-NEXT: ldrb w10, [sp, #384] 578; NONEON-NOSVE-NEXT: strb w10, [sp, #425] 579; NONEON-NOSVE-NEXT: ldr q0, [sp, #416] 580; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB2_13 581; NONEON-NOSVE-NEXT: .LBB2_28: // %cond.load28 582; NONEON-NOSVE-NEXT: ldrb w10, [x0, #10] 583; NONEON-NOSVE-NEXT: str q0, [sp, #336] 584; NONEON-NOSVE-NEXT: strb w10, [sp, #368] 585; NONEON-NOSVE-NEXT: ldrb w10, [sp, #351] 586; NONEON-NOSVE-NEXT: ldr q0, [sp, #368] 587; NONEON-NOSVE-NEXT: strb w10, [sp, #367] 588; NONEON-NOSVE-NEXT: str q0, [sp, #320] 589; NONEON-NOSVE-NEXT: ldur w10, [x9, #139] 590; NONEON-NOSVE-NEXT: stur w10, [x9, #155] 591; NONEON-NOSVE-NEXT: ldrh w10, [sp, #344] 592; NONEON-NOSVE-NEXT: strh w10, [sp, #360] 593; NONEON-NOSVE-NEXT: ldr x10, [sp, #336] 594; NONEON-NOSVE-NEXT: str x10, [sp, #352] 595; NONEON-NOSVE-NEXT: ldrb w10, [sp, #320] 596; NONEON-NOSVE-NEXT: strb w10, [sp, #362] 597; NONEON-NOSVE-NEXT: ldr q0, [sp, #352] 598; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB2_14 599; NONEON-NOSVE-NEXT: .LBB2_29: // %cond.load31 600; NONEON-NOSVE-NEXT: ldrb w10, [x0, #11] 601; NONEON-NOSVE-NEXT: str q0, [sp, #272] 602; NONEON-NOSVE-NEXT: strb w10, [sp, #304] 603; NONEON-NOSVE-NEXT: ldr w10, [sp, #284] 604; NONEON-NOSVE-NEXT: ldr q0, [sp, #304] 605; NONEON-NOSVE-NEXT: str w10, [sp, #300] 606; NONEON-NOSVE-NEXT: ldrb w10, [sp, #282] 607; NONEON-NOSVE-NEXT: str q0, [sp, #256] 608; NONEON-NOSVE-NEXT: strb w10, [sp, #298] 609; NONEON-NOSVE-NEXT: ldrh w10, [sp, #280] 610; NONEON-NOSVE-NEXT: strh w10, [sp, #296] 611; NONEON-NOSVE-NEXT: ldr x10, [sp, #272] 612; NONEON-NOSVE-NEXT: str x10, [sp, #288] 613; NONEON-NOSVE-NEXT: ldrb w10, [sp, #256] 614; NONEON-NOSVE-NEXT: strb w10, [sp, #299] 615; NONEON-NOSVE-NEXT: ldr q0, [sp, #288] 616; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB2_15 617; NONEON-NOSVE-NEXT: .LBB2_30: // %cond.load34 618; NONEON-NOSVE-NEXT: ldrb w10, [x0, #12] 619; NONEON-NOSVE-NEXT: str q0, [sp, #208] 620; NONEON-NOSVE-NEXT: strb w10, [sp, #240] 621; NONEON-NOSVE-NEXT: ldrb w10, [sp, #223] 622; NONEON-NOSVE-NEXT: ldr q0, [sp, #240] 623; NONEON-NOSVE-NEXT: strb w10, [sp, #239] 624; NONEON-NOSVE-NEXT: str q0, [sp, #192] 625; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 626; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 627; NONEON-NOSVE-NEXT: ldr w9, [sp, #216] 628; NONEON-NOSVE-NEXT: str w9, [sp, #232] 629; NONEON-NOSVE-NEXT: ldr x9, [sp, #208] 630; NONEON-NOSVE-NEXT: str x9, [sp, #224] 631; NONEON-NOSVE-NEXT: ldrb w9, [sp, #192] 632; NONEON-NOSVE-NEXT: strb w9, [sp, #236] 633; NONEON-NOSVE-NEXT: ldr q0, [sp, #224] 634; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB2_16 635; NONEON-NOSVE-NEXT: .LBB2_31: // %cond.load37 636; NONEON-NOSVE-NEXT: ldrb w9, [x0, #13] 637; NONEON-NOSVE-NEXT: str q0, [sp, #144] 638; NONEON-NOSVE-NEXT: strb w9, [sp, #176] 639; NONEON-NOSVE-NEXT: ldrh w9, [sp, #158] 640; NONEON-NOSVE-NEXT: ldr q0, [sp, #176] 641; NONEON-NOSVE-NEXT: strh w9, [sp, #174] 642; NONEON-NOSVE-NEXT: ldrb w9, [sp, #156] 643; NONEON-NOSVE-NEXT: str q0, [sp, #128] 644; NONEON-NOSVE-NEXT: strb w9, [sp, #172] 645; NONEON-NOSVE-NEXT: ldr w9, [sp, #152] 646; NONEON-NOSVE-NEXT: str w9, [sp, #168] 647; NONEON-NOSVE-NEXT: ldr x9, [sp, #144] 648; NONEON-NOSVE-NEXT: str x9, [sp, #160] 649; NONEON-NOSVE-NEXT: ldrb w9, [sp, #128] 650; NONEON-NOSVE-NEXT: strb w9, [sp, #173] 651; NONEON-NOSVE-NEXT: ldr q0, [sp, #160] 652; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB2_17 653; NONEON-NOSVE-NEXT: .LBB2_32: // %cond.load40 654; NONEON-NOSVE-NEXT: ldrb w9, [x0, #14] 655; NONEON-NOSVE-NEXT: str q0, [sp, #80] 656; NONEON-NOSVE-NEXT: strb w9, [sp, #112] 657; NONEON-NOSVE-NEXT: ldrb w9, [sp, #95] 658; NONEON-NOSVE-NEXT: ldr q0, [sp, #112] 659; NONEON-NOSVE-NEXT: strb w9, [sp, #111] 660; NONEON-NOSVE-NEXT: ldrh w9, [sp, #92] 661; NONEON-NOSVE-NEXT: str q0, [sp, #64] 662; NONEON-NOSVE-NEXT: strh w9, [sp, #108] 663; NONEON-NOSVE-NEXT: ldr w9, [sp, #88] 664; NONEON-NOSVE-NEXT: str w9, [sp, #104] 665; NONEON-NOSVE-NEXT: ldr x9, [sp, #80] 666; NONEON-NOSVE-NEXT: str x9, [sp, #96] 667; NONEON-NOSVE-NEXT: ldrb w9, [sp, #64] 668; NONEON-NOSVE-NEXT: strb w9, [sp, #110] 669; NONEON-NOSVE-NEXT: ldr q0, [sp, #96] 670; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB2_18 671; NONEON-NOSVE-NEXT: b .LBB2_19 672 %load = call <16 x i8> @llvm.masked.load.v16i8(ptr %src, i32 8, <16 x i1> %mask, <16 x i8> zeroinitializer) 673 ret <16 x i8> %load 674} 675 676define <32 x i8> @masked_load_v32i8(ptr %src, <32 x i1> %mask) { 677; CHECK-LABEL: masked_load_v32i8: 678; CHECK: // %bb.0: 679; CHECK-NEXT: sub sp, sp, #32 680; CHECK-NEXT: .cfi_def_cfa_offset 32 681; CHECK-NEXT: ldr w8, [sp, #224] 682; CHECK-NEXT: ldr w9, [sp, #216] 683; CHECK-NEXT: ptrue p0.b, vl16 684; CHECK-NEXT: strb w7, [sp, #6] 685; CHECK-NEXT: strb w8, [sp, #31] 686; CHECK-NEXT: ldr w8, [sp, #208] 687; CHECK-NEXT: strb w9, [sp, #30] 688; CHECK-NEXT: ldr w9, [sp, #200] 689; CHECK-NEXT: strb w8, [sp, #29] 690; CHECK-NEXT: ldr w8, [sp, #192] 691; CHECK-NEXT: strb w9, [sp, #28] 692; CHECK-NEXT: ldr w9, [sp, #184] 693; CHECK-NEXT: strb w8, [sp, #27] 694; CHECK-NEXT: ldr w8, [sp, #176] 695; CHECK-NEXT: strb w9, [sp, #26] 696; CHECK-NEXT: ldr w9, [sp, #168] 697; CHECK-NEXT: strb w8, [sp, #25] 698; CHECK-NEXT: ldr w8, [sp, #160] 699; CHECK-NEXT: strb w9, [sp, #24] 700; CHECK-NEXT: ldr w9, [sp, #152] 701; CHECK-NEXT: strb w8, [sp, #23] 702; CHECK-NEXT: ldr w8, [sp, #144] 703; CHECK-NEXT: strb w9, [sp, #22] 704; CHECK-NEXT: ldr w9, [sp, #136] 705; CHECK-NEXT: strb w8, [sp, #21] 706; CHECK-NEXT: ldr w8, [sp, #128] 707; CHECK-NEXT: strb w9, [sp, #20] 708; CHECK-NEXT: ldr w9, [sp, #120] 709; CHECK-NEXT: strb w8, [sp, #19] 710; CHECK-NEXT: ldr w8, [sp, #112] 711; CHECK-NEXT: strb w9, [sp, #18] 712; CHECK-NEXT: ldr w9, [sp, #104] 713; CHECK-NEXT: strb w8, [sp, #17] 714; CHECK-NEXT: ldr w8, [sp, #96] 715; CHECK-NEXT: strb w9, [sp, #16] 716; CHECK-NEXT: ldr w9, [sp, #88] 717; CHECK-NEXT: strb w8, [sp, #15] 718; CHECK-NEXT: ldr w8, [sp, #80] 719; CHECK-NEXT: strb w9, [sp, #14] 720; CHECK-NEXT: ldr w9, [sp, #72] 721; CHECK-NEXT: strb w8, [sp, #13] 722; CHECK-NEXT: ldr w8, [sp, #64] 723; CHECK-NEXT: strb w9, [sp, #12] 724; CHECK-NEXT: ldr w9, [sp, #56] 725; CHECK-NEXT: strb w8, [sp, #11] 726; CHECK-NEXT: ldr w8, [sp, #48] 727; CHECK-NEXT: strb w9, [sp, #10] 728; CHECK-NEXT: ldr w9, [sp, #40] 729; CHECK-NEXT: strb w8, [sp, #9] 730; CHECK-NEXT: ldr w8, [sp, #32] 731; CHECK-NEXT: strb w9, [sp, #8] 732; CHECK-NEXT: strb w8, [sp, #7] 733; CHECK-NEXT: mov w8, #16 // =0x10 734; CHECK-NEXT: strb w6, [sp, #5] 735; CHECK-NEXT: strb w5, [sp, #4] 736; CHECK-NEXT: strb w4, [sp, #3] 737; CHECK-NEXT: strb w3, [sp, #2] 738; CHECK-NEXT: strb w2, [sp, #1] 739; CHECK-NEXT: strb w1, [sp] 740; CHECK-NEXT: ldp q1, q0, [sp] 741; CHECK-NEXT: lsl z0.b, z0.b, #7 742; CHECK-NEXT: lsl z1.b, z1.b, #7 743; CHECK-NEXT: asr z0.b, z0.b, #7 744; CHECK-NEXT: asr z1.b, z1.b, #7 745; CHECK-NEXT: cmpne p1.b, p0/z, z0.b, #0 746; CHECK-NEXT: cmpne p0.b, p0/z, z1.b, #0 747; CHECK-NEXT: ld1b { z0.b }, p0/z, [x0] 748; CHECK-NEXT: ld1b { z1.b }, p1/z, [x0, x8] 749; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 750; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 751; CHECK-NEXT: add sp, sp, #32 752; CHECK-NEXT: ret 753; 754; NONEON-NOSVE-LABEL: masked_load_v32i8: 755; NONEON-NOSVE: // %bb.0: 756; NONEON-NOSVE-NEXT: str x29, [sp, #-16]! // 8-byte Folded Spill 757; NONEON-NOSVE-NEXT: sub sp, sp, #2000 758; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 2016 759; NONEON-NOSVE-NEXT: .cfi_offset w29, -16 760; NONEON-NOSVE-NEXT: ldr w8, [sp, #2096] 761; NONEON-NOSVE-NEXT: ldr w9, [sp, #2104] 762; NONEON-NOSVE-NEXT: sbfx w15, w7, #0, #1 763; NONEON-NOSVE-NEXT: ldr w10, [sp, #2112] 764; NONEON-NOSVE-NEXT: ldr w11, [sp, #2088] 765; NONEON-NOSVE-NEXT: ldr w12, [sp, #2120] 766; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 767; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 768; NONEON-NOSVE-NEXT: ldr w13, [sp, #2136] 769; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 770; NONEON-NOSVE-NEXT: ldr w14, [sp, #2144] 771; NONEON-NOSVE-NEXT: ldr w16, [sp, #2016] 772; NONEON-NOSVE-NEXT: and w8, w8, #0x2 773; NONEON-NOSVE-NEXT: and w9, w9, #0x4 774; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1 775; NONEON-NOSVE-NEXT: sbfx w11, w12, #0, #1 776; NONEON-NOSVE-NEXT: ldr w12, [sp, #2128] 777; NONEON-NOSVE-NEXT: and w10, w10, #0x8 778; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1 779; NONEON-NOSVE-NEXT: orr w9, w9, w10 780; NONEON-NOSVE-NEXT: and w10, w11, #0x10 781; NONEON-NOSVE-NEXT: sbfx w11, w12, #0, #1 782; NONEON-NOSVE-NEXT: orr w9, w9, w10 783; NONEON-NOSVE-NEXT: sbfx w10, w13, #0, #1 784; NONEON-NOSVE-NEXT: sbfx w12, w4, #0, #1 785; NONEON-NOSVE-NEXT: orr w8, w8, w9 786; NONEON-NOSVE-NEXT: and w9, w11, #0x20 787; NONEON-NOSVE-NEXT: sbfx w11, w3, #0, #1 788; NONEON-NOSVE-NEXT: and w10, w10, #0x40 789; NONEON-NOSVE-NEXT: sbfx w13, w5, #0, #1 790; NONEON-NOSVE-NEXT: and w12, w12, #0x8 791; NONEON-NOSVE-NEXT: orr w9, w9, w10 792; NONEON-NOSVE-NEXT: sbfx w10, w2, #0, #1 793; NONEON-NOSVE-NEXT: and w11, w11, #0x4 794; NONEON-NOSVE-NEXT: orr w11, w11, w12 795; NONEON-NOSVE-NEXT: and w12, w13, #0x10 796; NONEON-NOSVE-NEXT: sbfx w13, w6, #0, #1 797; NONEON-NOSVE-NEXT: and w10, w10, #0x2 798; NONEON-NOSVE-NEXT: orr w11, w11, w12 799; NONEON-NOSVE-NEXT: orr w8, w8, w9 800; NONEON-NOSVE-NEXT: bfxil w10, w1, #0, #1 801; NONEON-NOSVE-NEXT: and w12, w13, #0x20 802; NONEON-NOSVE-NEXT: and w13, w15, #0x40 803; NONEON-NOSVE-NEXT: sbfx w15, w16, #0, #1 804; NONEON-NOSVE-NEXT: orr w9, w10, w11 805; NONEON-NOSVE-NEXT: orr w10, w12, w13 806; NONEON-NOSVE-NEXT: and w11, w14, #0xff80 807; NONEON-NOSVE-NEXT: orr w9, w9, w10 808; NONEON-NOSVE-NEXT: and w10, w15, #0xff80 809; NONEON-NOSVE-NEXT: add w11, w8, w11 810; NONEON-NOSVE-NEXT: add w8, w9, w10 811; NONEON-NOSVE-NEXT: adrp x9, .LCPI3_0 812; NONEON-NOSVE-NEXT: bfi w8, w11, #16, #16 813; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI3_0] 814; NONEON-NOSVE-NEXT: add x9, sp, #1744 815; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB3_2 816; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 817; NONEON-NOSVE-NEXT: ldrb w10, [x0] 818; NONEON-NOSVE-NEXT: strb wzr, [sp, #1999] 819; NONEON-NOSVE-NEXT: sturh wzr, [x9, #253] 820; NONEON-NOSVE-NEXT: stur wzr, [x9, #249] 821; NONEON-NOSVE-NEXT: stur xzr, [x9, #241] 822; NONEON-NOSVE-NEXT: strb w10, [sp, #1984] 823; NONEON-NOSVE-NEXT: ldr q0, [sp, #1984] 824; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB3_3 825; NONEON-NOSVE-NEXT: b .LBB3_4 826; NONEON-NOSVE-NEXT: .LBB3_2: 827; NONEON-NOSVE-NEXT: str q1, [sp, #-16]! 828; NONEON-NOSVE-NEXT: ldr q0, [sp], #16 829; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB3_4 830; NONEON-NOSVE-NEXT: .LBB3_3: // %cond.load1 831; NONEON-NOSVE-NEXT: ldrb w10, [x0, #1] 832; NONEON-NOSVE-NEXT: str q0, [sp, #1936] 833; NONEON-NOSVE-NEXT: strb w10, [sp, #1968] 834; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1950] 835; NONEON-NOSVE-NEXT: ldr q0, [sp, #1968] 836; NONEON-NOSVE-NEXT: strh w10, [sp, #1966] 837; NONEON-NOSVE-NEXT: str q0, [sp, #1920] 838; NONEON-NOSVE-NEXT: ldur w10, [x9, #202] 839; NONEON-NOSVE-NEXT: ldur x11, [x9, #194] 840; NONEON-NOSVE-NEXT: stur w10, [x9, #218] 841; NONEON-NOSVE-NEXT: stur x11, [x9, #210] 842; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1936] 843; NONEON-NOSVE-NEXT: strb w10, [sp, #1952] 844; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1920] 845; NONEON-NOSVE-NEXT: strb w10, [sp, #1953] 846; NONEON-NOSVE-NEXT: ldr q0, [sp, #1952] 847; NONEON-NOSVE-NEXT: .LBB3_4: // %else2 848; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB3_36 849; NONEON-NOSVE-NEXT: // %bb.5: // %else5 850; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB3_37 851; NONEON-NOSVE-NEXT: .LBB3_6: // %else8 852; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB3_38 853; NONEON-NOSVE-NEXT: .LBB3_7: // %else11 854; NONEON-NOSVE-NEXT: add x9, sp, #1488 855; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB3_39 856; NONEON-NOSVE-NEXT: .LBB3_8: // %else14 857; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB3_40 858; NONEON-NOSVE-NEXT: .LBB3_9: // %else17 859; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB3_41 860; NONEON-NOSVE-NEXT: .LBB3_10: // %else20 861; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB3_42 862; NONEON-NOSVE-NEXT: .LBB3_11: // %else23 863; NONEON-NOSVE-NEXT: add x9, sp, #1232 864; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB3_43 865; NONEON-NOSVE-NEXT: .LBB3_12: // %else26 866; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB3_44 867; NONEON-NOSVE-NEXT: .LBB3_13: // %else29 868; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB3_45 869; NONEON-NOSVE-NEXT: .LBB3_14: // %else32 870; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB3_46 871; NONEON-NOSVE-NEXT: .LBB3_15: // %else35 872; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB3_47 873; NONEON-NOSVE-NEXT: .LBB3_16: // %else38 874; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB3_48 875; NONEON-NOSVE-NEXT: .LBB3_17: // %else41 876; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB3_49 877; NONEON-NOSVE-NEXT: .LBB3_18: // %else44 878; NONEON-NOSVE-NEXT: tbnz w8, #16, .LBB3_50 879; NONEON-NOSVE-NEXT: .LBB3_19: // %else47 880; NONEON-NOSVE-NEXT: add x9, sp, #720 881; NONEON-NOSVE-NEXT: tbnz w8, #17, .LBB3_51 882; NONEON-NOSVE-NEXT: .LBB3_20: // %else50 883; NONEON-NOSVE-NEXT: tbnz w8, #18, .LBB3_52 884; NONEON-NOSVE-NEXT: .LBB3_21: // %else53 885; NONEON-NOSVE-NEXT: tbnz w8, #19, .LBB3_53 886; NONEON-NOSVE-NEXT: .LBB3_22: // %else56 887; NONEON-NOSVE-NEXT: tbnz w8, #20, .LBB3_54 888; NONEON-NOSVE-NEXT: .LBB3_23: // %else59 889; NONEON-NOSVE-NEXT: add x9, sp, #464 890; NONEON-NOSVE-NEXT: tbnz w8, #21, .LBB3_55 891; NONEON-NOSVE-NEXT: .LBB3_24: // %else62 892; NONEON-NOSVE-NEXT: tbnz w8, #22, .LBB3_56 893; NONEON-NOSVE-NEXT: .LBB3_25: // %else65 894; NONEON-NOSVE-NEXT: tbnz w8, #23, .LBB3_57 895; NONEON-NOSVE-NEXT: .LBB3_26: // %else68 896; NONEON-NOSVE-NEXT: tbnz w8, #24, .LBB3_58 897; NONEON-NOSVE-NEXT: .LBB3_27: // %else71 898; NONEON-NOSVE-NEXT: add x9, sp, #208 899; NONEON-NOSVE-NEXT: tbnz w8, #25, .LBB3_59 900; NONEON-NOSVE-NEXT: .LBB3_28: // %else74 901; NONEON-NOSVE-NEXT: tbnz w8, #26, .LBB3_60 902; NONEON-NOSVE-NEXT: .LBB3_29: // %else77 903; NONEON-NOSVE-NEXT: tbnz w8, #27, .LBB3_61 904; NONEON-NOSVE-NEXT: .LBB3_30: // %else80 905; NONEON-NOSVE-NEXT: tbnz w8, #28, .LBB3_62 906; NONEON-NOSVE-NEXT: .LBB3_31: // %else83 907; NONEON-NOSVE-NEXT: tbnz w8, #29, .LBB3_63 908; NONEON-NOSVE-NEXT: .LBB3_32: // %else86 909; NONEON-NOSVE-NEXT: tbnz w8, #30, .LBB3_64 910; NONEON-NOSVE-NEXT: .LBB3_33: // %else89 911; NONEON-NOSVE-NEXT: tbz w8, #31, .LBB3_35 912; NONEON-NOSVE-NEXT: .LBB3_34: // %cond.load91 913; NONEON-NOSVE-NEXT: ldrb w8, [x0, #31] 914; NONEON-NOSVE-NEXT: str q1, [sp] 915; NONEON-NOSVE-NEXT: strb w8, [sp, #48] 916; NONEON-NOSVE-NEXT: ldrb w8, [sp, #14] 917; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 918; NONEON-NOSVE-NEXT: strb w8, [sp, #46] 919; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 920; NONEON-NOSVE-NEXT: str q1, [sp, #16] 921; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 922; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 923; NONEON-NOSVE-NEXT: str w8, [sp, #40] 924; NONEON-NOSVE-NEXT: ldr x8, [sp] 925; NONEON-NOSVE-NEXT: str x8, [sp, #32] 926; NONEON-NOSVE-NEXT: ldrb w8, [sp, #16] 927; NONEON-NOSVE-NEXT: strb w8, [sp, #47] 928; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 929; NONEON-NOSVE-NEXT: .LBB3_35: // %else92 930; NONEON-NOSVE-NEXT: add sp, sp, #2000 931; NONEON-NOSVE-NEXT: ldr x29, [sp], #16 // 8-byte Folded Reload 932; NONEON-NOSVE-NEXT: ret 933; NONEON-NOSVE-NEXT: .LBB3_36: // %cond.load4 934; NONEON-NOSVE-NEXT: ldrb w10, [x0, #2] 935; NONEON-NOSVE-NEXT: str q0, [sp, #1872] 936; NONEON-NOSVE-NEXT: strb w10, [sp, #1904] 937; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1887] 938; NONEON-NOSVE-NEXT: ldr q0, [sp, #1904] 939; NONEON-NOSVE-NEXT: strb w10, [sp, #1903] 940; NONEON-NOSVE-NEXT: str q0, [sp, #1856] 941; NONEON-NOSVE-NEXT: ldur w10, [x9, #139] 942; NONEON-NOSVE-NEXT: ldur x11, [x9, #131] 943; NONEON-NOSVE-NEXT: stur w10, [x9, #155] 944; NONEON-NOSVE-NEXT: stur x11, [x9, #147] 945; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1872] 946; NONEON-NOSVE-NEXT: strh w10, [sp, #1888] 947; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1856] 948; NONEON-NOSVE-NEXT: strb w10, [sp, #1890] 949; NONEON-NOSVE-NEXT: ldr q0, [sp, #1888] 950; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB3_6 951; NONEON-NOSVE-NEXT: .LBB3_37: // %cond.load7 952; NONEON-NOSVE-NEXT: ldrb w10, [x0, #3] 953; NONEON-NOSVE-NEXT: str q0, [sp, #1808] 954; NONEON-NOSVE-NEXT: strb w10, [sp, #1840] 955; NONEON-NOSVE-NEXT: ldr w10, [sp, #1820] 956; NONEON-NOSVE-NEXT: ldr q0, [sp, #1840] 957; NONEON-NOSVE-NEXT: str w10, [sp, #1836] 958; NONEON-NOSVE-NEXT: str q0, [sp, #1792] 959; NONEON-NOSVE-NEXT: ldur x10, [x9, #68] 960; NONEON-NOSVE-NEXT: stur x10, [x9, #84] 961; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1810] 962; NONEON-NOSVE-NEXT: strb w10, [sp, #1826] 963; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1808] 964; NONEON-NOSVE-NEXT: strh w10, [sp, #1824] 965; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1792] 966; NONEON-NOSVE-NEXT: strb w10, [sp, #1827] 967; NONEON-NOSVE-NEXT: ldr q0, [sp, #1824] 968; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB3_7 969; NONEON-NOSVE-NEXT: .LBB3_38: // %cond.load10 970; NONEON-NOSVE-NEXT: ldrb w10, [x0, #4] 971; NONEON-NOSVE-NEXT: str q0, [sp, #1744] 972; NONEON-NOSVE-NEXT: strb w10, [sp, #1776] 973; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1759] 974; NONEON-NOSVE-NEXT: ldr q0, [sp, #1776] 975; NONEON-NOSVE-NEXT: strb w10, [sp, #1775] 976; NONEON-NOSVE-NEXT: str q0, [sp, #1728] 977; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 978; NONEON-NOSVE-NEXT: ldur x11, [x9, #5] 979; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 980; NONEON-NOSVE-NEXT: stur x11, [x9, #21] 981; NONEON-NOSVE-NEXT: ldr w9, [sp, #1744] 982; NONEON-NOSVE-NEXT: str w9, [sp, #1760] 983; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1728] 984; NONEON-NOSVE-NEXT: strb w9, [sp, #1764] 985; NONEON-NOSVE-NEXT: ldr q0, [sp, #1760] 986; NONEON-NOSVE-NEXT: add x9, sp, #1488 987; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB3_8 988; NONEON-NOSVE-NEXT: .LBB3_39: // %cond.load13 989; NONEON-NOSVE-NEXT: ldrb w10, [x0, #5] 990; NONEON-NOSVE-NEXT: str q0, [sp, #1680] 991; NONEON-NOSVE-NEXT: strb w10, [sp, #1712] 992; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1694] 993; NONEON-NOSVE-NEXT: ldr q0, [sp, #1712] 994; NONEON-NOSVE-NEXT: strh w10, [sp, #1710] 995; NONEON-NOSVE-NEXT: str q0, [sp, #1664] 996; NONEON-NOSVE-NEXT: ldur x10, [x9, #198] 997; NONEON-NOSVE-NEXT: stur x10, [x9, #214] 998; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1684] 999; NONEON-NOSVE-NEXT: strb w10, [sp, #1700] 1000; NONEON-NOSVE-NEXT: ldr w10, [sp, #1680] 1001; NONEON-NOSVE-NEXT: str w10, [sp, #1696] 1002; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1664] 1003; NONEON-NOSVE-NEXT: strb w10, [sp, #1701] 1004; NONEON-NOSVE-NEXT: ldr q0, [sp, #1696] 1005; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB3_9 1006; NONEON-NOSVE-NEXT: .LBB3_40: // %cond.load16 1007; NONEON-NOSVE-NEXT: ldrb w10, [x0, #6] 1008; NONEON-NOSVE-NEXT: str q0, [sp, #1616] 1009; NONEON-NOSVE-NEXT: strb w10, [sp, #1648] 1010; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1631] 1011; NONEON-NOSVE-NEXT: ldr q0, [sp, #1648] 1012; NONEON-NOSVE-NEXT: strb w10, [sp, #1647] 1013; NONEON-NOSVE-NEXT: str q0, [sp, #1600] 1014; NONEON-NOSVE-NEXT: ldur x10, [x9, #135] 1015; NONEON-NOSVE-NEXT: stur x10, [x9, #151] 1016; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1620] 1017; NONEON-NOSVE-NEXT: strh w10, [sp, #1636] 1018; NONEON-NOSVE-NEXT: ldr w10, [sp, #1616] 1019; NONEON-NOSVE-NEXT: str w10, [sp, #1632] 1020; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1600] 1021; NONEON-NOSVE-NEXT: strb w10, [sp, #1638] 1022; NONEON-NOSVE-NEXT: ldr q0, [sp, #1632] 1023; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB3_10 1024; NONEON-NOSVE-NEXT: .LBB3_41: // %cond.load19 1025; NONEON-NOSVE-NEXT: ldrb w10, [x0, #7] 1026; NONEON-NOSVE-NEXT: str q0, [sp, #1552] 1027; NONEON-NOSVE-NEXT: strb w10, [sp, #1584] 1028; NONEON-NOSVE-NEXT: ldr x10, [sp, #1560] 1029; NONEON-NOSVE-NEXT: ldr q0, [sp, #1584] 1030; NONEON-NOSVE-NEXT: str x10, [sp, #1576] 1031; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1558] 1032; NONEON-NOSVE-NEXT: str q0, [sp, #1536] 1033; NONEON-NOSVE-NEXT: strb w10, [sp, #1574] 1034; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1556] 1035; NONEON-NOSVE-NEXT: strh w10, [sp, #1572] 1036; NONEON-NOSVE-NEXT: ldr w10, [sp, #1552] 1037; NONEON-NOSVE-NEXT: str w10, [sp, #1568] 1038; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1536] 1039; NONEON-NOSVE-NEXT: strb w10, [sp, #1575] 1040; NONEON-NOSVE-NEXT: ldr q0, [sp, #1568] 1041; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB3_11 1042; NONEON-NOSVE-NEXT: .LBB3_42: // %cond.load22 1043; NONEON-NOSVE-NEXT: ldrb w10, [x0, #8] 1044; NONEON-NOSVE-NEXT: str q0, [sp, #1488] 1045; NONEON-NOSVE-NEXT: strb w10, [sp, #1520] 1046; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1503] 1047; NONEON-NOSVE-NEXT: ldr q0, [sp, #1520] 1048; NONEON-NOSVE-NEXT: strb w10, [sp, #1519] 1049; NONEON-NOSVE-NEXT: str q0, [sp, #1472] 1050; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 1051; NONEON-NOSVE-NEXT: ldur w11, [x9, #9] 1052; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 1053; NONEON-NOSVE-NEXT: stur w11, [x9, #25] 1054; NONEON-NOSVE-NEXT: ldr x9, [sp, #1488] 1055; NONEON-NOSVE-NEXT: str x9, [sp, #1504] 1056; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1472] 1057; NONEON-NOSVE-NEXT: strb w9, [sp, #1512] 1058; NONEON-NOSVE-NEXT: ldr q0, [sp, #1504] 1059; NONEON-NOSVE-NEXT: add x9, sp, #1232 1060; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB3_12 1061; NONEON-NOSVE-NEXT: .LBB3_43: // %cond.load25 1062; NONEON-NOSVE-NEXT: ldrb w10, [x0, #9] 1063; NONEON-NOSVE-NEXT: str q0, [sp, #1424] 1064; NONEON-NOSVE-NEXT: strb w10, [sp, #1456] 1065; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1438] 1066; NONEON-NOSVE-NEXT: ldr q0, [sp, #1456] 1067; NONEON-NOSVE-NEXT: strh w10, [sp, #1454] 1068; NONEON-NOSVE-NEXT: str q0, [sp, #1408] 1069; NONEON-NOSVE-NEXT: ldur w10, [x9, #202] 1070; NONEON-NOSVE-NEXT: stur w10, [x9, #218] 1071; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1432] 1072; NONEON-NOSVE-NEXT: strb w10, [sp, #1448] 1073; NONEON-NOSVE-NEXT: ldr x10, [sp, #1424] 1074; NONEON-NOSVE-NEXT: str x10, [sp, #1440] 1075; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1408] 1076; NONEON-NOSVE-NEXT: strb w10, [sp, #1449] 1077; NONEON-NOSVE-NEXT: ldr q0, [sp, #1440] 1078; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB3_13 1079; NONEON-NOSVE-NEXT: .LBB3_44: // %cond.load28 1080; NONEON-NOSVE-NEXT: ldrb w10, [x0, #10] 1081; NONEON-NOSVE-NEXT: str q0, [sp, #1360] 1082; NONEON-NOSVE-NEXT: strb w10, [sp, #1392] 1083; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1375] 1084; NONEON-NOSVE-NEXT: ldr q0, [sp, #1392] 1085; NONEON-NOSVE-NEXT: strb w10, [sp, #1391] 1086; NONEON-NOSVE-NEXT: str q0, [sp, #1344] 1087; NONEON-NOSVE-NEXT: ldur w10, [x9, #139] 1088; NONEON-NOSVE-NEXT: stur w10, [x9, #155] 1089; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1368] 1090; NONEON-NOSVE-NEXT: strh w10, [sp, #1384] 1091; NONEON-NOSVE-NEXT: ldr x10, [sp, #1360] 1092; NONEON-NOSVE-NEXT: str x10, [sp, #1376] 1093; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1344] 1094; NONEON-NOSVE-NEXT: strb w10, [sp, #1386] 1095; NONEON-NOSVE-NEXT: ldr q0, [sp, #1376] 1096; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB3_14 1097; NONEON-NOSVE-NEXT: .LBB3_45: // %cond.load31 1098; NONEON-NOSVE-NEXT: ldrb w10, [x0, #11] 1099; NONEON-NOSVE-NEXT: str q0, [sp, #1296] 1100; NONEON-NOSVE-NEXT: strb w10, [sp, #1328] 1101; NONEON-NOSVE-NEXT: ldr w10, [sp, #1308] 1102; NONEON-NOSVE-NEXT: ldr q0, [sp, #1328] 1103; NONEON-NOSVE-NEXT: str w10, [sp, #1324] 1104; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1306] 1105; NONEON-NOSVE-NEXT: str q0, [sp, #1280] 1106; NONEON-NOSVE-NEXT: strb w10, [sp, #1322] 1107; NONEON-NOSVE-NEXT: ldrh w10, [sp, #1304] 1108; NONEON-NOSVE-NEXT: strh w10, [sp, #1320] 1109; NONEON-NOSVE-NEXT: ldr x10, [sp, #1296] 1110; NONEON-NOSVE-NEXT: str x10, [sp, #1312] 1111; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1280] 1112; NONEON-NOSVE-NEXT: strb w10, [sp, #1323] 1113; NONEON-NOSVE-NEXT: ldr q0, [sp, #1312] 1114; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB3_15 1115; NONEON-NOSVE-NEXT: .LBB3_46: // %cond.load34 1116; NONEON-NOSVE-NEXT: ldrb w10, [x0, #12] 1117; NONEON-NOSVE-NEXT: str q0, [sp, #1232] 1118; NONEON-NOSVE-NEXT: strb w10, [sp, #1264] 1119; NONEON-NOSVE-NEXT: ldrb w10, [sp, #1247] 1120; NONEON-NOSVE-NEXT: ldr q0, [sp, #1264] 1121; NONEON-NOSVE-NEXT: strb w10, [sp, #1263] 1122; NONEON-NOSVE-NEXT: str q0, [sp, #1216] 1123; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 1124; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 1125; NONEON-NOSVE-NEXT: ldr w9, [sp, #1240] 1126; NONEON-NOSVE-NEXT: str w9, [sp, #1256] 1127; NONEON-NOSVE-NEXT: ldr x9, [sp, #1232] 1128; NONEON-NOSVE-NEXT: str x9, [sp, #1248] 1129; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1216] 1130; NONEON-NOSVE-NEXT: strb w9, [sp, #1260] 1131; NONEON-NOSVE-NEXT: ldr q0, [sp, #1248] 1132; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB3_16 1133; NONEON-NOSVE-NEXT: .LBB3_47: // %cond.load37 1134; NONEON-NOSVE-NEXT: ldrb w9, [x0, #13] 1135; NONEON-NOSVE-NEXT: str q0, [sp, #1168] 1136; NONEON-NOSVE-NEXT: strb w9, [sp, #1200] 1137; NONEON-NOSVE-NEXT: ldrh w9, [sp, #1182] 1138; NONEON-NOSVE-NEXT: ldr q0, [sp, #1200] 1139; NONEON-NOSVE-NEXT: strh w9, [sp, #1198] 1140; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1180] 1141; NONEON-NOSVE-NEXT: str q0, [sp, #1152] 1142; NONEON-NOSVE-NEXT: strb w9, [sp, #1196] 1143; NONEON-NOSVE-NEXT: ldr w9, [sp, #1176] 1144; NONEON-NOSVE-NEXT: str w9, [sp, #1192] 1145; NONEON-NOSVE-NEXT: ldr x9, [sp, #1168] 1146; NONEON-NOSVE-NEXT: str x9, [sp, #1184] 1147; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1152] 1148; NONEON-NOSVE-NEXT: strb w9, [sp, #1197] 1149; NONEON-NOSVE-NEXT: ldr q0, [sp, #1184] 1150; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB3_17 1151; NONEON-NOSVE-NEXT: .LBB3_48: // %cond.load40 1152; NONEON-NOSVE-NEXT: ldrb w9, [x0, #14] 1153; NONEON-NOSVE-NEXT: str q0, [sp, #1104] 1154; NONEON-NOSVE-NEXT: strb w9, [sp, #1136] 1155; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1119] 1156; NONEON-NOSVE-NEXT: ldr q0, [sp, #1136] 1157; NONEON-NOSVE-NEXT: strb w9, [sp, #1135] 1158; NONEON-NOSVE-NEXT: ldrh w9, [sp, #1116] 1159; NONEON-NOSVE-NEXT: str q0, [sp, #1088] 1160; NONEON-NOSVE-NEXT: strh w9, [sp, #1132] 1161; NONEON-NOSVE-NEXT: ldr w9, [sp, #1112] 1162; NONEON-NOSVE-NEXT: str w9, [sp, #1128] 1163; NONEON-NOSVE-NEXT: ldr x9, [sp, #1104] 1164; NONEON-NOSVE-NEXT: str x9, [sp, #1120] 1165; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1088] 1166; NONEON-NOSVE-NEXT: strb w9, [sp, #1134] 1167; NONEON-NOSVE-NEXT: ldr q0, [sp, #1120] 1168; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB3_18 1169; NONEON-NOSVE-NEXT: .LBB3_49: // %cond.load43 1170; NONEON-NOSVE-NEXT: ldrb w9, [x0, #15] 1171; NONEON-NOSVE-NEXT: str q0, [sp, #1024] 1172; NONEON-NOSVE-NEXT: strb w9, [sp, #1072] 1173; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1038] 1174; NONEON-NOSVE-NEXT: ldr q0, [sp, #1072] 1175; NONEON-NOSVE-NEXT: strb w9, [sp, #1070] 1176; NONEON-NOSVE-NEXT: ldrh w9, [sp, #1036] 1177; NONEON-NOSVE-NEXT: str q0, [sp, #1040] 1178; NONEON-NOSVE-NEXT: strh w9, [sp, #1068] 1179; NONEON-NOSVE-NEXT: ldr w9, [sp, #1032] 1180; NONEON-NOSVE-NEXT: str w9, [sp, #1064] 1181; NONEON-NOSVE-NEXT: ldr x9, [sp, #1024] 1182; NONEON-NOSVE-NEXT: str x9, [sp, #1056] 1183; NONEON-NOSVE-NEXT: ldrb w9, [sp, #1040] 1184; NONEON-NOSVE-NEXT: strb w9, [sp, #1071] 1185; NONEON-NOSVE-NEXT: ldr q0, [sp, #1056] 1186; NONEON-NOSVE-NEXT: tbz w8, #16, .LBB3_19 1187; NONEON-NOSVE-NEXT: .LBB3_50: // %cond.load46 1188; NONEON-NOSVE-NEXT: ldrb w9, [x0, #16] 1189; NONEON-NOSVE-NEXT: str q1, [sp, #976] 1190; NONEON-NOSVE-NEXT: add x10, sp, #976 1191; NONEON-NOSVE-NEXT: strb w9, [sp, #1008] 1192; NONEON-NOSVE-NEXT: ldrb w9, [sp, #991] 1193; NONEON-NOSVE-NEXT: ldr q1, [sp, #1008] 1194; NONEON-NOSVE-NEXT: strb w9, [sp, #1007] 1195; NONEON-NOSVE-NEXT: str q1, [sp, #960] 1196; NONEON-NOSVE-NEXT: ldurh w9, [x10, #13] 1197; NONEON-NOSVE-NEXT: ldur w11, [x10, #9] 1198; NONEON-NOSVE-NEXT: sturh w9, [x10, #29] 1199; NONEON-NOSVE-NEXT: ldur x9, [x10, #1] 1200; NONEON-NOSVE-NEXT: stur w11, [x10, #25] 1201; NONEON-NOSVE-NEXT: stur x9, [x10, #17] 1202; NONEON-NOSVE-NEXT: ldrb w9, [sp, #960] 1203; NONEON-NOSVE-NEXT: strb w9, [sp, #992] 1204; NONEON-NOSVE-NEXT: ldr q1, [sp, #992] 1205; NONEON-NOSVE-NEXT: add x9, sp, #720 1206; NONEON-NOSVE-NEXT: tbz w8, #17, .LBB3_20 1207; NONEON-NOSVE-NEXT: .LBB3_51: // %cond.load49 1208; NONEON-NOSVE-NEXT: ldrb w10, [x0, #17] 1209; NONEON-NOSVE-NEXT: str q1, [sp, #912] 1210; NONEON-NOSVE-NEXT: strb w10, [sp, #944] 1211; NONEON-NOSVE-NEXT: ldrh w10, [sp, #926] 1212; NONEON-NOSVE-NEXT: ldr q1, [sp, #944] 1213; NONEON-NOSVE-NEXT: strh w10, [sp, #942] 1214; NONEON-NOSVE-NEXT: str q1, [sp, #896] 1215; NONEON-NOSVE-NEXT: ldur w10, [x9, #202] 1216; NONEON-NOSVE-NEXT: ldur x11, [x9, #194] 1217; NONEON-NOSVE-NEXT: stur w10, [x9, #218] 1218; NONEON-NOSVE-NEXT: stur x11, [x9, #210] 1219; NONEON-NOSVE-NEXT: ldrb w10, [sp, #912] 1220; NONEON-NOSVE-NEXT: strb w10, [sp, #928] 1221; NONEON-NOSVE-NEXT: ldrb w10, [sp, #896] 1222; NONEON-NOSVE-NEXT: strb w10, [sp, #929] 1223; NONEON-NOSVE-NEXT: ldr q1, [sp, #928] 1224; NONEON-NOSVE-NEXT: tbz w8, #18, .LBB3_21 1225; NONEON-NOSVE-NEXT: .LBB3_52: // %cond.load52 1226; NONEON-NOSVE-NEXT: ldrb w10, [x0, #18] 1227; NONEON-NOSVE-NEXT: str q1, [sp, #848] 1228; NONEON-NOSVE-NEXT: strb w10, [sp, #880] 1229; NONEON-NOSVE-NEXT: ldrb w10, [sp, #863] 1230; NONEON-NOSVE-NEXT: ldr q1, [sp, #880] 1231; NONEON-NOSVE-NEXT: strb w10, [sp, #879] 1232; NONEON-NOSVE-NEXT: str q1, [sp, #832] 1233; NONEON-NOSVE-NEXT: ldur w10, [x9, #139] 1234; NONEON-NOSVE-NEXT: ldur x11, [x9, #131] 1235; NONEON-NOSVE-NEXT: stur w10, [x9, #155] 1236; NONEON-NOSVE-NEXT: stur x11, [x9, #147] 1237; NONEON-NOSVE-NEXT: ldrh w10, [sp, #848] 1238; NONEON-NOSVE-NEXT: strh w10, [sp, #864] 1239; NONEON-NOSVE-NEXT: ldrb w10, [sp, #832] 1240; NONEON-NOSVE-NEXT: strb w10, [sp, #866] 1241; NONEON-NOSVE-NEXT: ldr q1, [sp, #864] 1242; NONEON-NOSVE-NEXT: tbz w8, #19, .LBB3_22 1243; NONEON-NOSVE-NEXT: .LBB3_53: // %cond.load55 1244; NONEON-NOSVE-NEXT: ldrb w10, [x0, #19] 1245; NONEON-NOSVE-NEXT: str q1, [sp, #784] 1246; NONEON-NOSVE-NEXT: strb w10, [sp, #816] 1247; NONEON-NOSVE-NEXT: ldr w10, [sp, #796] 1248; NONEON-NOSVE-NEXT: ldr q1, [sp, #816] 1249; NONEON-NOSVE-NEXT: str w10, [sp, #812] 1250; NONEON-NOSVE-NEXT: str q1, [sp, #768] 1251; NONEON-NOSVE-NEXT: ldur x10, [x9, #68] 1252; NONEON-NOSVE-NEXT: stur x10, [x9, #84] 1253; NONEON-NOSVE-NEXT: ldrb w10, [sp, #786] 1254; NONEON-NOSVE-NEXT: strb w10, [sp, #802] 1255; NONEON-NOSVE-NEXT: ldrh w10, [sp, #784] 1256; NONEON-NOSVE-NEXT: strh w10, [sp, #800] 1257; NONEON-NOSVE-NEXT: ldrb w10, [sp, #768] 1258; NONEON-NOSVE-NEXT: strb w10, [sp, #803] 1259; NONEON-NOSVE-NEXT: ldr q1, [sp, #800] 1260; NONEON-NOSVE-NEXT: tbz w8, #20, .LBB3_23 1261; NONEON-NOSVE-NEXT: .LBB3_54: // %cond.load58 1262; NONEON-NOSVE-NEXT: ldrb w10, [x0, #20] 1263; NONEON-NOSVE-NEXT: str q1, [sp, #720] 1264; NONEON-NOSVE-NEXT: strb w10, [sp, #752] 1265; NONEON-NOSVE-NEXT: ldrb w10, [sp, #735] 1266; NONEON-NOSVE-NEXT: ldr q1, [sp, #752] 1267; NONEON-NOSVE-NEXT: strb w10, [sp, #751] 1268; NONEON-NOSVE-NEXT: str q1, [sp, #704] 1269; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 1270; NONEON-NOSVE-NEXT: ldur x11, [x9, #5] 1271; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 1272; NONEON-NOSVE-NEXT: stur x11, [x9, #21] 1273; NONEON-NOSVE-NEXT: ldr w9, [sp, #720] 1274; NONEON-NOSVE-NEXT: str w9, [sp, #736] 1275; NONEON-NOSVE-NEXT: ldrb w9, [sp, #704] 1276; NONEON-NOSVE-NEXT: strb w9, [sp, #740] 1277; NONEON-NOSVE-NEXT: ldr q1, [sp, #736] 1278; NONEON-NOSVE-NEXT: add x9, sp, #464 1279; NONEON-NOSVE-NEXT: tbz w8, #21, .LBB3_24 1280; NONEON-NOSVE-NEXT: .LBB3_55: // %cond.load61 1281; NONEON-NOSVE-NEXT: ldrb w10, [x0, #21] 1282; NONEON-NOSVE-NEXT: str q1, [sp, #656] 1283; NONEON-NOSVE-NEXT: strb w10, [sp, #688] 1284; NONEON-NOSVE-NEXT: ldrh w10, [sp, #670] 1285; NONEON-NOSVE-NEXT: ldr q1, [sp, #688] 1286; NONEON-NOSVE-NEXT: strh w10, [sp, #686] 1287; NONEON-NOSVE-NEXT: str q1, [sp, #640] 1288; NONEON-NOSVE-NEXT: ldur x10, [x9, #198] 1289; NONEON-NOSVE-NEXT: stur x10, [x9, #214] 1290; NONEON-NOSVE-NEXT: ldrb w10, [sp, #660] 1291; NONEON-NOSVE-NEXT: strb w10, [sp, #676] 1292; NONEON-NOSVE-NEXT: ldr w10, [sp, #656] 1293; NONEON-NOSVE-NEXT: str w10, [sp, #672] 1294; NONEON-NOSVE-NEXT: ldrb w10, [sp, #640] 1295; NONEON-NOSVE-NEXT: strb w10, [sp, #677] 1296; NONEON-NOSVE-NEXT: ldr q1, [sp, #672] 1297; NONEON-NOSVE-NEXT: tbz w8, #22, .LBB3_25 1298; NONEON-NOSVE-NEXT: .LBB3_56: // %cond.load64 1299; NONEON-NOSVE-NEXT: ldrb w10, [x0, #22] 1300; NONEON-NOSVE-NEXT: str q1, [sp, #592] 1301; NONEON-NOSVE-NEXT: strb w10, [sp, #624] 1302; NONEON-NOSVE-NEXT: ldrb w10, [sp, #607] 1303; NONEON-NOSVE-NEXT: ldr q1, [sp, #624] 1304; NONEON-NOSVE-NEXT: strb w10, [sp, #623] 1305; NONEON-NOSVE-NEXT: str q1, [sp, #576] 1306; NONEON-NOSVE-NEXT: ldur x10, [x9, #135] 1307; NONEON-NOSVE-NEXT: stur x10, [x9, #151] 1308; NONEON-NOSVE-NEXT: ldrh w10, [sp, #596] 1309; NONEON-NOSVE-NEXT: strh w10, [sp, #612] 1310; NONEON-NOSVE-NEXT: ldr w10, [sp, #592] 1311; NONEON-NOSVE-NEXT: str w10, [sp, #608] 1312; NONEON-NOSVE-NEXT: ldrb w10, [sp, #576] 1313; NONEON-NOSVE-NEXT: strb w10, [sp, #614] 1314; NONEON-NOSVE-NEXT: ldr q1, [sp, #608] 1315; NONEON-NOSVE-NEXT: tbz w8, #23, .LBB3_26 1316; NONEON-NOSVE-NEXT: .LBB3_57: // %cond.load67 1317; NONEON-NOSVE-NEXT: ldrb w10, [x0, #23] 1318; NONEON-NOSVE-NEXT: str q1, [sp, #528] 1319; NONEON-NOSVE-NEXT: strb w10, [sp, #560] 1320; NONEON-NOSVE-NEXT: ldr x10, [sp, #536] 1321; NONEON-NOSVE-NEXT: ldr q1, [sp, #560] 1322; NONEON-NOSVE-NEXT: str x10, [sp, #552] 1323; NONEON-NOSVE-NEXT: ldrb w10, [sp, #534] 1324; NONEON-NOSVE-NEXT: str q1, [sp, #512] 1325; NONEON-NOSVE-NEXT: strb w10, [sp, #550] 1326; NONEON-NOSVE-NEXT: ldrh w10, [sp, #532] 1327; NONEON-NOSVE-NEXT: strh w10, [sp, #548] 1328; NONEON-NOSVE-NEXT: ldr w10, [sp, #528] 1329; NONEON-NOSVE-NEXT: str w10, [sp, #544] 1330; NONEON-NOSVE-NEXT: ldrb w10, [sp, #512] 1331; NONEON-NOSVE-NEXT: strb w10, [sp, #551] 1332; NONEON-NOSVE-NEXT: ldr q1, [sp, #544] 1333; NONEON-NOSVE-NEXT: tbz w8, #24, .LBB3_27 1334; NONEON-NOSVE-NEXT: .LBB3_58: // %cond.load70 1335; NONEON-NOSVE-NEXT: ldrb w10, [x0, #24] 1336; NONEON-NOSVE-NEXT: str q1, [sp, #464] 1337; NONEON-NOSVE-NEXT: strb w10, [sp, #496] 1338; NONEON-NOSVE-NEXT: ldrb w10, [sp, #479] 1339; NONEON-NOSVE-NEXT: ldr q1, [sp, #496] 1340; NONEON-NOSVE-NEXT: strb w10, [sp, #495] 1341; NONEON-NOSVE-NEXT: str q1, [sp, #448] 1342; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 1343; NONEON-NOSVE-NEXT: ldur w11, [x9, #9] 1344; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 1345; NONEON-NOSVE-NEXT: stur w11, [x9, #25] 1346; NONEON-NOSVE-NEXT: ldr x9, [sp, #464] 1347; NONEON-NOSVE-NEXT: str x9, [sp, #480] 1348; NONEON-NOSVE-NEXT: ldrb w9, [sp, #448] 1349; NONEON-NOSVE-NEXT: strb w9, [sp, #488] 1350; NONEON-NOSVE-NEXT: ldr q1, [sp, #480] 1351; NONEON-NOSVE-NEXT: add x9, sp, #208 1352; NONEON-NOSVE-NEXT: tbz w8, #25, .LBB3_28 1353; NONEON-NOSVE-NEXT: .LBB3_59: // %cond.load73 1354; NONEON-NOSVE-NEXT: ldrb w10, [x0, #25] 1355; NONEON-NOSVE-NEXT: str q1, [sp, #400] 1356; NONEON-NOSVE-NEXT: strb w10, [sp, #432] 1357; NONEON-NOSVE-NEXT: ldrh w10, [sp, #414] 1358; NONEON-NOSVE-NEXT: ldr q1, [sp, #432] 1359; NONEON-NOSVE-NEXT: strh w10, [sp, #430] 1360; NONEON-NOSVE-NEXT: str q1, [sp, #384] 1361; NONEON-NOSVE-NEXT: ldur w10, [x9, #202] 1362; NONEON-NOSVE-NEXT: stur w10, [x9, #218] 1363; NONEON-NOSVE-NEXT: ldrb w10, [sp, #408] 1364; NONEON-NOSVE-NEXT: strb w10, [sp, #424] 1365; NONEON-NOSVE-NEXT: ldr x10, [sp, #400] 1366; NONEON-NOSVE-NEXT: str x10, [sp, #416] 1367; NONEON-NOSVE-NEXT: ldrb w10, [sp, #384] 1368; NONEON-NOSVE-NEXT: strb w10, [sp, #425] 1369; NONEON-NOSVE-NEXT: ldr q1, [sp, #416] 1370; NONEON-NOSVE-NEXT: tbz w8, #26, .LBB3_29 1371; NONEON-NOSVE-NEXT: .LBB3_60: // %cond.load76 1372; NONEON-NOSVE-NEXT: ldrb w10, [x0, #26] 1373; NONEON-NOSVE-NEXT: str q1, [sp, #336] 1374; NONEON-NOSVE-NEXT: strb w10, [sp, #368] 1375; NONEON-NOSVE-NEXT: ldrb w10, [sp, #351] 1376; NONEON-NOSVE-NEXT: ldr q1, [sp, #368] 1377; NONEON-NOSVE-NEXT: strb w10, [sp, #367] 1378; NONEON-NOSVE-NEXT: str q1, [sp, #320] 1379; NONEON-NOSVE-NEXT: ldur w10, [x9, #139] 1380; NONEON-NOSVE-NEXT: stur w10, [x9, #155] 1381; NONEON-NOSVE-NEXT: ldrh w10, [sp, #344] 1382; NONEON-NOSVE-NEXT: strh w10, [sp, #360] 1383; NONEON-NOSVE-NEXT: ldr x10, [sp, #336] 1384; NONEON-NOSVE-NEXT: str x10, [sp, #352] 1385; NONEON-NOSVE-NEXT: ldrb w10, [sp, #320] 1386; NONEON-NOSVE-NEXT: strb w10, [sp, #362] 1387; NONEON-NOSVE-NEXT: ldr q1, [sp, #352] 1388; NONEON-NOSVE-NEXT: tbz w8, #27, .LBB3_30 1389; NONEON-NOSVE-NEXT: .LBB3_61: // %cond.load79 1390; NONEON-NOSVE-NEXT: ldrb w10, [x0, #27] 1391; NONEON-NOSVE-NEXT: str q1, [sp, #272] 1392; NONEON-NOSVE-NEXT: strb w10, [sp, #304] 1393; NONEON-NOSVE-NEXT: ldr w10, [sp, #284] 1394; NONEON-NOSVE-NEXT: ldr q1, [sp, #304] 1395; NONEON-NOSVE-NEXT: str w10, [sp, #300] 1396; NONEON-NOSVE-NEXT: ldrb w10, [sp, #282] 1397; NONEON-NOSVE-NEXT: str q1, [sp, #256] 1398; NONEON-NOSVE-NEXT: strb w10, [sp, #298] 1399; NONEON-NOSVE-NEXT: ldrh w10, [sp, #280] 1400; NONEON-NOSVE-NEXT: strh w10, [sp, #296] 1401; NONEON-NOSVE-NEXT: ldr x10, [sp, #272] 1402; NONEON-NOSVE-NEXT: str x10, [sp, #288] 1403; NONEON-NOSVE-NEXT: ldrb w10, [sp, #256] 1404; NONEON-NOSVE-NEXT: strb w10, [sp, #299] 1405; NONEON-NOSVE-NEXT: ldr q1, [sp, #288] 1406; NONEON-NOSVE-NEXT: tbz w8, #28, .LBB3_31 1407; NONEON-NOSVE-NEXT: .LBB3_62: // %cond.load82 1408; NONEON-NOSVE-NEXT: ldrb w10, [x0, #28] 1409; NONEON-NOSVE-NEXT: str q1, [sp, #208] 1410; NONEON-NOSVE-NEXT: strb w10, [sp, #240] 1411; NONEON-NOSVE-NEXT: ldrb w10, [sp, #223] 1412; NONEON-NOSVE-NEXT: ldr q1, [sp, #240] 1413; NONEON-NOSVE-NEXT: strb w10, [sp, #239] 1414; NONEON-NOSVE-NEXT: str q1, [sp, #192] 1415; NONEON-NOSVE-NEXT: ldurh w10, [x9, #13] 1416; NONEON-NOSVE-NEXT: sturh w10, [x9, #29] 1417; NONEON-NOSVE-NEXT: ldr w9, [sp, #216] 1418; NONEON-NOSVE-NEXT: str w9, [sp, #232] 1419; NONEON-NOSVE-NEXT: ldr x9, [sp, #208] 1420; NONEON-NOSVE-NEXT: str x9, [sp, #224] 1421; NONEON-NOSVE-NEXT: ldrb w9, [sp, #192] 1422; NONEON-NOSVE-NEXT: strb w9, [sp, #236] 1423; NONEON-NOSVE-NEXT: ldr q1, [sp, #224] 1424; NONEON-NOSVE-NEXT: tbz w8, #29, .LBB3_32 1425; NONEON-NOSVE-NEXT: .LBB3_63: // %cond.load85 1426; NONEON-NOSVE-NEXT: ldrb w9, [x0, #29] 1427; NONEON-NOSVE-NEXT: str q1, [sp, #144] 1428; NONEON-NOSVE-NEXT: strb w9, [sp, #176] 1429; NONEON-NOSVE-NEXT: ldrh w9, [sp, #158] 1430; NONEON-NOSVE-NEXT: ldr q1, [sp, #176] 1431; NONEON-NOSVE-NEXT: strh w9, [sp, #174] 1432; NONEON-NOSVE-NEXT: ldrb w9, [sp, #156] 1433; NONEON-NOSVE-NEXT: str q1, [sp, #128] 1434; NONEON-NOSVE-NEXT: strb w9, [sp, #172] 1435; NONEON-NOSVE-NEXT: ldr w9, [sp, #152] 1436; NONEON-NOSVE-NEXT: str w9, [sp, #168] 1437; NONEON-NOSVE-NEXT: ldr x9, [sp, #144] 1438; NONEON-NOSVE-NEXT: str x9, [sp, #160] 1439; NONEON-NOSVE-NEXT: ldrb w9, [sp, #128] 1440; NONEON-NOSVE-NEXT: strb w9, [sp, #173] 1441; NONEON-NOSVE-NEXT: ldr q1, [sp, #160] 1442; NONEON-NOSVE-NEXT: tbz w8, #30, .LBB3_33 1443; NONEON-NOSVE-NEXT: .LBB3_64: // %cond.load88 1444; NONEON-NOSVE-NEXT: ldrb w9, [x0, #30] 1445; NONEON-NOSVE-NEXT: str q1, [sp, #80] 1446; NONEON-NOSVE-NEXT: strb w9, [sp, #112] 1447; NONEON-NOSVE-NEXT: ldrb w9, [sp, #95] 1448; NONEON-NOSVE-NEXT: ldr q1, [sp, #112] 1449; NONEON-NOSVE-NEXT: strb w9, [sp, #111] 1450; NONEON-NOSVE-NEXT: ldrh w9, [sp, #92] 1451; NONEON-NOSVE-NEXT: str q1, [sp, #64] 1452; NONEON-NOSVE-NEXT: strh w9, [sp, #108] 1453; NONEON-NOSVE-NEXT: ldr w9, [sp, #88] 1454; NONEON-NOSVE-NEXT: str w9, [sp, #104] 1455; NONEON-NOSVE-NEXT: ldr x9, [sp, #80] 1456; NONEON-NOSVE-NEXT: str x9, [sp, #96] 1457; NONEON-NOSVE-NEXT: ldrb w9, [sp, #64] 1458; NONEON-NOSVE-NEXT: strb w9, [sp, #110] 1459; NONEON-NOSVE-NEXT: ldr q1, [sp, #96] 1460; NONEON-NOSVE-NEXT: tbnz w8, #31, .LBB3_34 1461; NONEON-NOSVE-NEXT: b .LBB3_35 1462 %load = call <32 x i8> @llvm.masked.load.v32i8(ptr %src, i32 8, <32 x i1> %mask, <32 x i8> zeroinitializer) 1463 ret <32 x i8> %load 1464} 1465 1466define <2 x half> @masked_load_v2f16(ptr %src, <2 x i1> %mask) { 1467; CHECK-LABEL: masked_load_v2f16: 1468; CHECK: // %bb.0: 1469; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 1470; CHECK-NEXT: fmov s1, wzr 1471; CHECK-NEXT: mov z2.s, z0.s[1] 1472; CHECK-NEXT: ptrue p0.h, vl4 1473; CHECK-NEXT: zip1 z0.h, z0.h, z2.h 1474; CHECK-NEXT: zip1 z1.h, z1.h, z1.h 1475; CHECK-NEXT: zip1 z0.s, z0.s, z1.s 1476; CHECK-NEXT: lsl z0.h, z0.h, #15 1477; CHECK-NEXT: asr z0.h, z0.h, #15 1478; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 1479; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] 1480; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 1481; CHECK-NEXT: ret 1482; 1483; NONEON-NOSVE-LABEL: masked_load_v2f16: 1484; NONEON-NOSVE: // %bb.0: 1485; NONEON-NOSVE-NEXT: sub sp, sp, #48 1486; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 48 1487; NONEON-NOSVE-NEXT: str d0, [sp, #32] 1488; NONEON-NOSVE-NEXT: ldr w8, [sp, #36] 1489; NONEON-NOSVE-NEXT: ldrb w9, [sp, #32] 1490; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 1491; NONEON-NOSVE-NEXT: and w8, w8, #0x2 1492; NONEON-NOSVE-NEXT: bfxil w8, w9, #0, #1 1493; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB4_2 1494; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 1495; NONEON-NOSVE-NEXT: fmov s0, wzr 1496; NONEON-NOSVE-NEXT: ldr h1, [x0] 1497; NONEON-NOSVE-NEXT: str h1, [sp, #24] 1498; NONEON-NOSVE-NEXT: str h0, [sp, #26] 1499; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 1500; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB4_3 1501; NONEON-NOSVE-NEXT: b .LBB4_4 1502; NONEON-NOSVE-NEXT: .LBB4_2: 1503; NONEON-NOSVE-NEXT: adrp x9, .LCPI4_0 1504; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI4_0] 1505; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB4_4 1506; NONEON-NOSVE-NEXT: .LBB4_3: // %cond.load1 1507; NONEON-NOSVE-NEXT: ldr h1, [x0, #2] 1508; NONEON-NOSVE-NEXT: str d0, [sp, #8] 1509; NONEON-NOSVE-NEXT: ldr h0, [sp, #8] 1510; NONEON-NOSVE-NEXT: str h1, [sp, #18] 1511; NONEON-NOSVE-NEXT: str h0, [sp, #16] 1512; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 1513; NONEON-NOSVE-NEXT: .LBB4_4: // %else2 1514; NONEON-NOSVE-NEXT: add sp, sp, #48 1515; NONEON-NOSVE-NEXT: ret 1516 %load = call <2 x half> @llvm.masked.load.v2f16(ptr %src, i32 8, <2 x i1> %mask, <2 x half> zeroinitializer) 1517 ret <2 x half> %load 1518} 1519 1520define <4 x half> @masked_load_v4f16(ptr %src, <4 x i1> %mask) { 1521; CHECK-LABEL: masked_load_v4f16: 1522; CHECK: // %bb.0: 1523; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 1524; CHECK-NEXT: ptrue p0.h, vl4 1525; CHECK-NEXT: lsl z0.h, z0.h, #15 1526; CHECK-NEXT: asr z0.h, z0.h, #15 1527; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 1528; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] 1529; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 1530; CHECK-NEXT: ret 1531; 1532; NONEON-NOSVE-LABEL: masked_load_v4f16: 1533; NONEON-NOSVE: // %bb.0: 1534; NONEON-NOSVE-NEXT: sub sp, sp, #128 1535; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 128 1536; NONEON-NOSVE-NEXT: str d0, [sp, #112] 1537; NONEON-NOSVE-NEXT: ldrh w8, [sp, #114] 1538; NONEON-NOSVE-NEXT: ldrh w9, [sp, #116] 1539; NONEON-NOSVE-NEXT: ldrh w10, [sp, #118] 1540; NONEON-NOSVE-NEXT: ldrh w11, [sp, #112] 1541; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 1542; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 1543; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 1544; NONEON-NOSVE-NEXT: and w8, w8, #0x2 1545; NONEON-NOSVE-NEXT: and w9, w9, #0x4 1546; NONEON-NOSVE-NEXT: and w10, w10, #0x8 1547; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1 1548; NONEON-NOSVE-NEXT: orr w9, w9, w10 1549; NONEON-NOSVE-NEXT: orr w8, w8, w9 1550; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB5_2 1551; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 1552; NONEON-NOSVE-NEXT: fmov s0, wzr 1553; NONEON-NOSVE-NEXT: ldr h1, [x0] 1554; NONEON-NOSVE-NEXT: stur wzr, [sp, #106] 1555; NONEON-NOSVE-NEXT: str h1, [sp, #104] 1556; NONEON-NOSVE-NEXT: str h0, [sp, #110] 1557; NONEON-NOSVE-NEXT: ldr d0, [sp, #104] 1558; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB5_3 1559; NONEON-NOSVE-NEXT: b .LBB5_4 1560; NONEON-NOSVE-NEXT: .LBB5_2: 1561; NONEON-NOSVE-NEXT: adrp x9, .LCPI5_0 1562; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI5_0] 1563; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB5_4 1564; NONEON-NOSVE-NEXT: .LBB5_3: // %cond.load1 1565; NONEON-NOSVE-NEXT: ldr h1, [x0, #2] 1566; NONEON-NOSVE-NEXT: str d0, [sp, #80] 1567; NONEON-NOSVE-NEXT: ldr w9, [sp, #84] 1568; NONEON-NOSVE-NEXT: str h1, [sp, #96] 1569; NONEON-NOSVE-NEXT: ldr d0, [sp, #96] 1570; NONEON-NOSVE-NEXT: str w9, [sp, #92] 1571; NONEON-NOSVE-NEXT: str d0, [sp, #72] 1572; NONEON-NOSVE-NEXT: ldr h0, [sp, #80] 1573; NONEON-NOSVE-NEXT: str h0, [sp, #88] 1574; NONEON-NOSVE-NEXT: ldr h0, [sp, #72] 1575; NONEON-NOSVE-NEXT: str h0, [sp, #90] 1576; NONEON-NOSVE-NEXT: ldr d0, [sp, #88] 1577; NONEON-NOSVE-NEXT: .LBB5_4: // %else2 1578; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB5_7 1579; NONEON-NOSVE-NEXT: // %bb.5: // %else5 1580; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB5_8 1581; NONEON-NOSVE-NEXT: .LBB5_6: // %else8 1582; NONEON-NOSVE-NEXT: add sp, sp, #128 1583; NONEON-NOSVE-NEXT: ret 1584; NONEON-NOSVE-NEXT: .LBB5_7: // %cond.load4 1585; NONEON-NOSVE-NEXT: ldr h1, [x0, #4] 1586; NONEON-NOSVE-NEXT: str d0, [sp, #48] 1587; NONEON-NOSVE-NEXT: ldr w9, [sp, #48] 1588; NONEON-NOSVE-NEXT: str h1, [sp, #64] 1589; NONEON-NOSVE-NEXT: ldr d0, [sp, #64] 1590; NONEON-NOSVE-NEXT: str w9, [sp, #56] 1591; NONEON-NOSVE-NEXT: str d0, [sp, #40] 1592; NONEON-NOSVE-NEXT: ldr h0, [sp, #54] 1593; NONEON-NOSVE-NEXT: str h0, [sp, #62] 1594; NONEON-NOSVE-NEXT: ldr h0, [sp, #40] 1595; NONEON-NOSVE-NEXT: str h0, [sp, #60] 1596; NONEON-NOSVE-NEXT: ldr d0, [sp, #56] 1597; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB5_6 1598; NONEON-NOSVE-NEXT: .LBB5_8: // %cond.load7 1599; NONEON-NOSVE-NEXT: ldr h1, [x0, #6] 1600; NONEON-NOSVE-NEXT: str d0, [sp, #8] 1601; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 1602; NONEON-NOSVE-NEXT: str h1, [sp, #32] 1603; NONEON-NOSVE-NEXT: ldr d0, [sp, #32] 1604; NONEON-NOSVE-NEXT: str w8, [sp, #24] 1605; NONEON-NOSVE-NEXT: str d0, [sp, #16] 1606; NONEON-NOSVE-NEXT: ldr h0, [sp, #12] 1607; NONEON-NOSVE-NEXT: str h0, [sp, #28] 1608; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1609; NONEON-NOSVE-NEXT: str h0, [sp, #30] 1610; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 1611; NONEON-NOSVE-NEXT: add sp, sp, #128 1612; NONEON-NOSVE-NEXT: ret 1613 %load = call <4 x half> @llvm.masked.load.v4f16(ptr %src, i32 8, <4 x i1> %mask, <4 x half> zeroinitializer) 1614 ret <4 x half> %load 1615} 1616 1617define <8 x half> @masked_load_v8f16(ptr %src, <8 x i1> %mask) { 1618; CHECK-LABEL: masked_load_v8f16: 1619; CHECK: // %bb.0: 1620; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 1621; CHECK-NEXT: ptrue p0.h, vl8 1622; CHECK-NEXT: uunpklo z0.h, z0.b 1623; CHECK-NEXT: lsl z0.h, z0.h, #15 1624; CHECK-NEXT: asr z0.h, z0.h, #15 1625; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 1626; CHECK-NEXT: ld1h { z0.h }, p0/z, [x0] 1627; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 1628; CHECK-NEXT: ret 1629; 1630; NONEON-NOSVE-LABEL: masked_load_v8f16: 1631; NONEON-NOSVE: // %bb.0: 1632; NONEON-NOSVE-NEXT: sub sp, sp, #496 1633; NONEON-NOSVE-NEXT: str x29, [sp, #480] // 8-byte Folded Spill 1634; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 496 1635; NONEON-NOSVE-NEXT: .cfi_offset w29, -16 1636; NONEON-NOSVE-NEXT: str d0, [sp, #464] 1637; NONEON-NOSVE-NEXT: add x9, sp, #208 1638; NONEON-NOSVE-NEXT: ldrb w8, [sp, #466] 1639; NONEON-NOSVE-NEXT: ldrb w10, [sp, #467] 1640; NONEON-NOSVE-NEXT: ldrb w11, [sp, #465] 1641; NONEON-NOSVE-NEXT: ldrb w13, [sp, #468] 1642; NONEON-NOSVE-NEXT: ldrb w14, [sp, #469] 1643; NONEON-NOSVE-NEXT: ldrb w15, [sp, #470] 1644; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 1645; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 1646; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1 1647; NONEON-NOSVE-NEXT: ldrb w12, [sp, #464] 1648; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1 1649; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1 1650; NONEON-NOSVE-NEXT: and w8, w8, #0x4 1651; NONEON-NOSVE-NEXT: and w10, w10, #0x8 1652; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1 1653; NONEON-NOSVE-NEXT: orr w8, w8, w10 1654; NONEON-NOSVE-NEXT: ldrb w10, [sp, #471] 1655; NONEON-NOSVE-NEXT: and w11, w11, #0x2 1656; NONEON-NOSVE-NEXT: and w13, w13, #0x10 1657; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1 1658; NONEON-NOSVE-NEXT: and w12, w14, #0x20 1659; NONEON-NOSVE-NEXT: orr w8, w8, w13 1660; NONEON-NOSVE-NEXT: and w13, w15, #0x40 1661; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 1662; NONEON-NOSVE-NEXT: orr w8, w11, w8 1663; NONEON-NOSVE-NEXT: orr w11, w12, w13 1664; NONEON-NOSVE-NEXT: orr w8, w8, w11 1665; NONEON-NOSVE-NEXT: and w10, w10, #0x80 1666; NONEON-NOSVE-NEXT: add w10, w8, w10 1667; NONEON-NOSVE-NEXT: and w8, w10, #0xff 1668; NONEON-NOSVE-NEXT: tbz w10, #0, .LBB6_2 1669; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 1670; NONEON-NOSVE-NEXT: fmov s0, wzr 1671; NONEON-NOSVE-NEXT: ldr h1, [x0] 1672; NONEON-NOSVE-NEXT: stur wzr, [x9, #250] 1673; NONEON-NOSVE-NEXT: stur xzr, [x9, #242] 1674; NONEON-NOSVE-NEXT: str h1, [sp, #448] 1675; NONEON-NOSVE-NEXT: str h0, [sp, #462] 1676; NONEON-NOSVE-NEXT: ldr q0, [sp, #448] 1677; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB6_3 1678; NONEON-NOSVE-NEXT: b .LBB6_4 1679; NONEON-NOSVE-NEXT: .LBB6_2: 1680; NONEON-NOSVE-NEXT: adrp x10, .LCPI6_0 1681; NONEON-NOSVE-NEXT: ldr q0, [x10, :lo12:.LCPI6_0] 1682; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB6_4 1683; NONEON-NOSVE-NEXT: .LBB6_3: // %cond.load1 1684; NONEON-NOSVE-NEXT: ldr h1, [x0, #2] 1685; NONEON-NOSVE-NEXT: str q0, [sp, #400] 1686; NONEON-NOSVE-NEXT: ldr w10, [sp, #412] 1687; NONEON-NOSVE-NEXT: str h1, [sp, #432] 1688; NONEON-NOSVE-NEXT: ldr q0, [sp, #432] 1689; NONEON-NOSVE-NEXT: str w10, [sp, #428] 1690; NONEON-NOSVE-NEXT: str q0, [sp, #384] 1691; NONEON-NOSVE-NEXT: ldur x10, [x9, #196] 1692; NONEON-NOSVE-NEXT: stur x10, [x9, #212] 1693; NONEON-NOSVE-NEXT: ldr h0, [sp, #400] 1694; NONEON-NOSVE-NEXT: str h0, [sp, #416] 1695; NONEON-NOSVE-NEXT: ldr h0, [sp, #384] 1696; NONEON-NOSVE-NEXT: str h0, [sp, #418] 1697; NONEON-NOSVE-NEXT: ldr q0, [sp, #416] 1698; NONEON-NOSVE-NEXT: .LBB6_4: // %else2 1699; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB6_12 1700; NONEON-NOSVE-NEXT: // %bb.5: // %else5 1701; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB6_13 1702; NONEON-NOSVE-NEXT: .LBB6_6: // %else8 1703; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB6_14 1704; NONEON-NOSVE-NEXT: .LBB6_7: // %else11 1705; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB6_15 1706; NONEON-NOSVE-NEXT: .LBB6_8: // %else14 1707; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB6_16 1708; NONEON-NOSVE-NEXT: .LBB6_9: // %else17 1709; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB6_11 1710; NONEON-NOSVE-NEXT: .LBB6_10: // %cond.load19 1711; NONEON-NOSVE-NEXT: ldr h1, [x0, #14] 1712; NONEON-NOSVE-NEXT: str q0, [sp] 1713; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 1714; NONEON-NOSVE-NEXT: str h1, [sp, #48] 1715; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 1716; NONEON-NOSVE-NEXT: str w8, [sp, #40] 1717; NONEON-NOSVE-NEXT: ldr x8, [sp] 1718; NONEON-NOSVE-NEXT: str q0, [sp, #16] 1719; NONEON-NOSVE-NEXT: ldr h0, [sp, #12] 1720; NONEON-NOSVE-NEXT: str x8, [sp, #32] 1721; NONEON-NOSVE-NEXT: str h0, [sp, #44] 1722; NONEON-NOSVE-NEXT: ldr h0, [sp, #16] 1723; NONEON-NOSVE-NEXT: str h0, [sp, #46] 1724; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 1725; NONEON-NOSVE-NEXT: .LBB6_11: // %else20 1726; NONEON-NOSVE-NEXT: ldr x29, [sp, #480] // 8-byte Folded Reload 1727; NONEON-NOSVE-NEXT: add sp, sp, #496 1728; NONEON-NOSVE-NEXT: ret 1729; NONEON-NOSVE-NEXT: .LBB6_12: // %cond.load4 1730; NONEON-NOSVE-NEXT: ldr h1, [x0, #4] 1731; NONEON-NOSVE-NEXT: str q0, [sp, #336] 1732; NONEON-NOSVE-NEXT: str h1, [sp, #368] 1733; NONEON-NOSVE-NEXT: ldr q0, [sp, #368] 1734; NONEON-NOSVE-NEXT: str q0, [sp, #320] 1735; NONEON-NOSVE-NEXT: ldr h0, [sp, #350] 1736; NONEON-NOSVE-NEXT: str h0, [sp, #366] 1737; NONEON-NOSVE-NEXT: ldur x10, [x9, #134] 1738; NONEON-NOSVE-NEXT: stur x10, [x9, #150] 1739; NONEON-NOSVE-NEXT: ldr w10, [sp, #336] 1740; NONEON-NOSVE-NEXT: ldr h0, [sp, #320] 1741; NONEON-NOSVE-NEXT: str w10, [sp, #352] 1742; NONEON-NOSVE-NEXT: str h0, [sp, #356] 1743; NONEON-NOSVE-NEXT: ldr q0, [sp, #352] 1744; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB6_6 1745; NONEON-NOSVE-NEXT: .LBB6_13: // %cond.load7 1746; NONEON-NOSVE-NEXT: ldr h1, [x0, #6] 1747; NONEON-NOSVE-NEXT: str q0, [sp, #272] 1748; NONEON-NOSVE-NEXT: ldr x10, [sp, #280] 1749; NONEON-NOSVE-NEXT: str h1, [sp, #304] 1750; NONEON-NOSVE-NEXT: ldr q0, [sp, #304] 1751; NONEON-NOSVE-NEXT: str x10, [sp, #296] 1752; NONEON-NOSVE-NEXT: ldr w10, [sp, #272] 1753; NONEON-NOSVE-NEXT: str q0, [sp, #256] 1754; NONEON-NOSVE-NEXT: ldr h0, [sp, #276] 1755; NONEON-NOSVE-NEXT: str w10, [sp, #288] 1756; NONEON-NOSVE-NEXT: str h0, [sp, #292] 1757; NONEON-NOSVE-NEXT: ldr h0, [sp, #256] 1758; NONEON-NOSVE-NEXT: str h0, [sp, #294] 1759; NONEON-NOSVE-NEXT: ldr q0, [sp, #288] 1760; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB6_7 1761; NONEON-NOSVE-NEXT: .LBB6_14: // %cond.load10 1762; NONEON-NOSVE-NEXT: ldr h1, [x0, #8] 1763; NONEON-NOSVE-NEXT: str q0, [sp, #208] 1764; NONEON-NOSVE-NEXT: str h1, [sp, #240] 1765; NONEON-NOSVE-NEXT: ldr q0, [sp, #240] 1766; NONEON-NOSVE-NEXT: str q0, [sp, #192] 1767; NONEON-NOSVE-NEXT: ldr h0, [sp, #222] 1768; NONEON-NOSVE-NEXT: str h0, [sp, #238] 1769; NONEON-NOSVE-NEXT: ldur w10, [x9, #10] 1770; NONEON-NOSVE-NEXT: stur w10, [x9, #26] 1771; NONEON-NOSVE-NEXT: ldr x9, [sp, #208] 1772; NONEON-NOSVE-NEXT: ldr h0, [sp, #192] 1773; NONEON-NOSVE-NEXT: str x9, [sp, #224] 1774; NONEON-NOSVE-NEXT: str h0, [sp, #232] 1775; NONEON-NOSVE-NEXT: ldr q0, [sp, #224] 1776; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB6_8 1777; NONEON-NOSVE-NEXT: .LBB6_15: // %cond.load13 1778; NONEON-NOSVE-NEXT: ldr h1, [x0, #10] 1779; NONEON-NOSVE-NEXT: str q0, [sp, #144] 1780; NONEON-NOSVE-NEXT: ldr w9, [sp, #156] 1781; NONEON-NOSVE-NEXT: str h1, [sp, #176] 1782; NONEON-NOSVE-NEXT: ldr q0, [sp, #176] 1783; NONEON-NOSVE-NEXT: str w9, [sp, #172] 1784; NONEON-NOSVE-NEXT: ldr x9, [sp, #144] 1785; NONEON-NOSVE-NEXT: str q0, [sp, #128] 1786; NONEON-NOSVE-NEXT: ldr h0, [sp, #152] 1787; NONEON-NOSVE-NEXT: str x9, [sp, #160] 1788; NONEON-NOSVE-NEXT: str h0, [sp, #168] 1789; NONEON-NOSVE-NEXT: ldr h0, [sp, #128] 1790; NONEON-NOSVE-NEXT: str h0, [sp, #170] 1791; NONEON-NOSVE-NEXT: ldr q0, [sp, #160] 1792; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB6_9 1793; NONEON-NOSVE-NEXT: .LBB6_16: // %cond.load16 1794; NONEON-NOSVE-NEXT: ldr h1, [x0, #12] 1795; NONEON-NOSVE-NEXT: str q0, [sp, #80] 1796; NONEON-NOSVE-NEXT: ldr w9, [sp, #88] 1797; NONEON-NOSVE-NEXT: str h1, [sp, #112] 1798; NONEON-NOSVE-NEXT: ldr q0, [sp, #112] 1799; NONEON-NOSVE-NEXT: str w9, [sp, #104] 1800; NONEON-NOSVE-NEXT: ldr x9, [sp, #80] 1801; NONEON-NOSVE-NEXT: str q0, [sp, #64] 1802; NONEON-NOSVE-NEXT: ldr h0, [sp, #94] 1803; NONEON-NOSVE-NEXT: str x9, [sp, #96] 1804; NONEON-NOSVE-NEXT: str h0, [sp, #110] 1805; NONEON-NOSVE-NEXT: ldr h0, [sp, #64] 1806; NONEON-NOSVE-NEXT: str h0, [sp, #108] 1807; NONEON-NOSVE-NEXT: ldr q0, [sp, #96] 1808; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB6_10 1809; NONEON-NOSVE-NEXT: b .LBB6_11 1810 %load = call <8 x half> @llvm.masked.load.v8f16(ptr %src, i32 8, <8 x i1> %mask, <8 x half> zeroinitializer) 1811 ret <8 x half> %load 1812} 1813 1814define <16 x half> @masked_load_v16f16(ptr %src, <16 x i1> %mask) { 1815; CHECK-LABEL: masked_load_v16f16: 1816; CHECK: // %bb.0: 1817; CHECK-NEXT: // kill: def $q0 killed $q0 def $z0 1818; CHECK-NEXT: uunpklo z1.h, z0.b 1819; CHECK-NEXT: ptrue p0.h, vl8 1820; CHECK-NEXT: mov x8, #8 // =0x8 1821; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8 1822; CHECK-NEXT: uunpklo z0.h, z0.b 1823; CHECK-NEXT: lsl z1.h, z1.h, #15 1824; CHECK-NEXT: asr z1.h, z1.h, #15 1825; CHECK-NEXT: lsl z0.h, z0.h, #15 1826; CHECK-NEXT: cmpne p1.h, p0/z, z1.h, #0 1827; CHECK-NEXT: asr z0.h, z0.h, #15 1828; CHECK-NEXT: cmpne p0.h, p0/z, z0.h, #0 1829; CHECK-NEXT: ld1h { z0.h }, p1/z, [x0] 1830; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 1831; CHECK-NEXT: ld1h { z1.h }, p0/z, [x0, x8, lsl #1] 1832; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 1833; CHECK-NEXT: ret 1834; 1835; NONEON-NOSVE-LABEL: masked_load_v16f16: 1836; NONEON-NOSVE: // %bb.0: 1837; NONEON-NOSVE-NEXT: str x29, [sp, #-16]! // 8-byte Folded Spill 1838; NONEON-NOSVE-NEXT: sub sp, sp, #992 1839; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 1008 1840; NONEON-NOSVE-NEXT: .cfi_offset w29, -16 1841; NONEON-NOSVE-NEXT: str q0, [sp, #976] 1842; NONEON-NOSVE-NEXT: adrp x9, .LCPI7_0 1843; NONEON-NOSVE-NEXT: ldrb w8, [sp, #978] 1844; NONEON-NOSVE-NEXT: ldrb w10, [sp, #979] 1845; NONEON-NOSVE-NEXT: ldrb w11, [sp, #977] 1846; NONEON-NOSVE-NEXT: ldrb w13, [sp, #980] 1847; NONEON-NOSVE-NEXT: ldrb w14, [sp, #981] 1848; NONEON-NOSVE-NEXT: ldrb w15, [sp, #982] 1849; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 1850; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 1851; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1 1852; NONEON-NOSVE-NEXT: ldrb w12, [sp, #976] 1853; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1 1854; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1 1855; NONEON-NOSVE-NEXT: and w8, w8, #0x4 1856; NONEON-NOSVE-NEXT: and w10, w10, #0x8 1857; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1 1858; NONEON-NOSVE-NEXT: orr w8, w8, w10 1859; NONEON-NOSVE-NEXT: ldrb w10, [sp, #983] 1860; NONEON-NOSVE-NEXT: and w11, w11, #0x2 1861; NONEON-NOSVE-NEXT: and w13, w13, #0x10 1862; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1 1863; NONEON-NOSVE-NEXT: and w12, w14, #0x20 1864; NONEON-NOSVE-NEXT: orr w8, w8, w13 1865; NONEON-NOSVE-NEXT: and w13, w15, #0x40 1866; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 1867; NONEON-NOSVE-NEXT: orr w8, w11, w8 1868; NONEON-NOSVE-NEXT: orr w11, w12, w13 1869; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI7_0] 1870; NONEON-NOSVE-NEXT: orr w8, w8, w11 1871; NONEON-NOSVE-NEXT: and w10, w10, #0xffffff80 1872; NONEON-NOSVE-NEXT: add x9, sp, #720 1873; NONEON-NOSVE-NEXT: add w8, w8, w10 1874; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB7_2 1875; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 1876; NONEON-NOSVE-NEXT: fmov s0, wzr 1877; NONEON-NOSVE-NEXT: ldr h2, [x0] 1878; NONEON-NOSVE-NEXT: stur wzr, [x9, #250] 1879; NONEON-NOSVE-NEXT: stur xzr, [x9, #242] 1880; NONEON-NOSVE-NEXT: str h2, [sp, #960] 1881; NONEON-NOSVE-NEXT: str h0, [sp, #974] 1882; NONEON-NOSVE-NEXT: ldr q0, [sp, #960] 1883; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB7_3 1884; NONEON-NOSVE-NEXT: b .LBB7_4 1885; NONEON-NOSVE-NEXT: .LBB7_2: 1886; NONEON-NOSVE-NEXT: str q1, [sp, #-16]! 1887; NONEON-NOSVE-NEXT: ldr q0, [sp], #16 1888; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB7_4 1889; NONEON-NOSVE-NEXT: .LBB7_3: // %cond.load1 1890; NONEON-NOSVE-NEXT: ldr h2, [x0, #2] 1891; NONEON-NOSVE-NEXT: str q0, [sp, #912] 1892; NONEON-NOSVE-NEXT: ldr w10, [sp, #924] 1893; NONEON-NOSVE-NEXT: str h2, [sp, #944] 1894; NONEON-NOSVE-NEXT: ldr q0, [sp, #944] 1895; NONEON-NOSVE-NEXT: str w10, [sp, #940] 1896; NONEON-NOSVE-NEXT: str q0, [sp, #896] 1897; NONEON-NOSVE-NEXT: ldur x10, [x9, #196] 1898; NONEON-NOSVE-NEXT: stur x10, [x9, #212] 1899; NONEON-NOSVE-NEXT: ldr h0, [sp, #912] 1900; NONEON-NOSVE-NEXT: str h0, [sp, #928] 1901; NONEON-NOSVE-NEXT: ldr h0, [sp, #896] 1902; NONEON-NOSVE-NEXT: str h0, [sp, #930] 1903; NONEON-NOSVE-NEXT: ldr q0, [sp, #928] 1904; NONEON-NOSVE-NEXT: .LBB7_4: // %else2 1905; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB7_20 1906; NONEON-NOSVE-NEXT: // %bb.5: // %else5 1907; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB7_21 1908; NONEON-NOSVE-NEXT: .LBB7_6: // %else8 1909; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB7_22 1910; NONEON-NOSVE-NEXT: .LBB7_7: // %else11 1911; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB7_23 1912; NONEON-NOSVE-NEXT: .LBB7_8: // %else14 1913; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB7_24 1914; NONEON-NOSVE-NEXT: .LBB7_9: // %else17 1915; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB7_25 1916; NONEON-NOSVE-NEXT: .LBB7_10: // %else20 1917; NONEON-NOSVE-NEXT: tbnz w8, #8, .LBB7_26 1918; NONEON-NOSVE-NEXT: .LBB7_11: // %else23 1919; NONEON-NOSVE-NEXT: add x9, sp, #208 1920; NONEON-NOSVE-NEXT: tbnz w8, #9, .LBB7_27 1921; NONEON-NOSVE-NEXT: .LBB7_12: // %else26 1922; NONEON-NOSVE-NEXT: tbnz w8, #10, .LBB7_28 1923; NONEON-NOSVE-NEXT: .LBB7_13: // %else29 1924; NONEON-NOSVE-NEXT: tbnz w8, #11, .LBB7_29 1925; NONEON-NOSVE-NEXT: .LBB7_14: // %else32 1926; NONEON-NOSVE-NEXT: tbnz w8, #12, .LBB7_30 1927; NONEON-NOSVE-NEXT: .LBB7_15: // %else35 1928; NONEON-NOSVE-NEXT: tbnz w8, #13, .LBB7_31 1929; NONEON-NOSVE-NEXT: .LBB7_16: // %else38 1930; NONEON-NOSVE-NEXT: tbnz w8, #14, .LBB7_32 1931; NONEON-NOSVE-NEXT: .LBB7_17: // %else41 1932; NONEON-NOSVE-NEXT: tbz w8, #15, .LBB7_19 1933; NONEON-NOSVE-NEXT: .LBB7_18: // %cond.load43 1934; NONEON-NOSVE-NEXT: ldr h2, [x0, #30] 1935; NONEON-NOSVE-NEXT: str q1, [sp] 1936; NONEON-NOSVE-NEXT: ldr w8, [sp, #8] 1937; NONEON-NOSVE-NEXT: str h2, [sp, #48] 1938; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 1939; NONEON-NOSVE-NEXT: str w8, [sp, #40] 1940; NONEON-NOSVE-NEXT: ldr x8, [sp] 1941; NONEON-NOSVE-NEXT: str q1, [sp, #16] 1942; NONEON-NOSVE-NEXT: ldr h1, [sp, #12] 1943; NONEON-NOSVE-NEXT: str x8, [sp, #32] 1944; NONEON-NOSVE-NEXT: str h1, [sp, #44] 1945; NONEON-NOSVE-NEXT: ldr h1, [sp, #16] 1946; NONEON-NOSVE-NEXT: str h1, [sp, #46] 1947; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 1948; NONEON-NOSVE-NEXT: .LBB7_19: // %else44 1949; NONEON-NOSVE-NEXT: add sp, sp, #992 1950; NONEON-NOSVE-NEXT: ldr x29, [sp], #16 // 8-byte Folded Reload 1951; NONEON-NOSVE-NEXT: ret 1952; NONEON-NOSVE-NEXT: .LBB7_20: // %cond.load4 1953; NONEON-NOSVE-NEXT: ldr h2, [x0, #4] 1954; NONEON-NOSVE-NEXT: str q0, [sp, #848] 1955; NONEON-NOSVE-NEXT: str h2, [sp, #880] 1956; NONEON-NOSVE-NEXT: ldr q0, [sp, #880] 1957; NONEON-NOSVE-NEXT: str q0, [sp, #832] 1958; NONEON-NOSVE-NEXT: ldr h0, [sp, #862] 1959; NONEON-NOSVE-NEXT: str h0, [sp, #878] 1960; NONEON-NOSVE-NEXT: ldur x10, [x9, #134] 1961; NONEON-NOSVE-NEXT: stur x10, [x9, #150] 1962; NONEON-NOSVE-NEXT: ldr w10, [sp, #848] 1963; NONEON-NOSVE-NEXT: ldr h0, [sp, #832] 1964; NONEON-NOSVE-NEXT: str w10, [sp, #864] 1965; NONEON-NOSVE-NEXT: str h0, [sp, #868] 1966; NONEON-NOSVE-NEXT: ldr q0, [sp, #864] 1967; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB7_6 1968; NONEON-NOSVE-NEXT: .LBB7_21: // %cond.load7 1969; NONEON-NOSVE-NEXT: ldr h2, [x0, #6] 1970; NONEON-NOSVE-NEXT: str q0, [sp, #784] 1971; NONEON-NOSVE-NEXT: ldr x10, [sp, #792] 1972; NONEON-NOSVE-NEXT: str h2, [sp, #816] 1973; NONEON-NOSVE-NEXT: ldr q0, [sp, #816] 1974; NONEON-NOSVE-NEXT: str x10, [sp, #808] 1975; NONEON-NOSVE-NEXT: ldr w10, [sp, #784] 1976; NONEON-NOSVE-NEXT: str q0, [sp, #768] 1977; NONEON-NOSVE-NEXT: ldr h0, [sp, #788] 1978; NONEON-NOSVE-NEXT: str w10, [sp, #800] 1979; NONEON-NOSVE-NEXT: str h0, [sp, #804] 1980; NONEON-NOSVE-NEXT: ldr h0, [sp, #768] 1981; NONEON-NOSVE-NEXT: str h0, [sp, #806] 1982; NONEON-NOSVE-NEXT: ldr q0, [sp, #800] 1983; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB7_7 1984; NONEON-NOSVE-NEXT: .LBB7_22: // %cond.load10 1985; NONEON-NOSVE-NEXT: ldr h2, [x0, #8] 1986; NONEON-NOSVE-NEXT: str q0, [sp, #720] 1987; NONEON-NOSVE-NEXT: str h2, [sp, #752] 1988; NONEON-NOSVE-NEXT: ldr q0, [sp, #752] 1989; NONEON-NOSVE-NEXT: str q0, [sp, #704] 1990; NONEON-NOSVE-NEXT: ldr h0, [sp, #734] 1991; NONEON-NOSVE-NEXT: str h0, [sp, #750] 1992; NONEON-NOSVE-NEXT: ldur w10, [x9, #10] 1993; NONEON-NOSVE-NEXT: stur w10, [x9, #26] 1994; NONEON-NOSVE-NEXT: ldr x9, [sp, #720] 1995; NONEON-NOSVE-NEXT: ldr h0, [sp, #704] 1996; NONEON-NOSVE-NEXT: str x9, [sp, #736] 1997; NONEON-NOSVE-NEXT: str h0, [sp, #744] 1998; NONEON-NOSVE-NEXT: ldr q0, [sp, #736] 1999; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB7_8 2000; NONEON-NOSVE-NEXT: .LBB7_23: // %cond.load13 2001; NONEON-NOSVE-NEXT: ldr h2, [x0, #10] 2002; NONEON-NOSVE-NEXT: str q0, [sp, #656] 2003; NONEON-NOSVE-NEXT: ldr w9, [sp, #668] 2004; NONEON-NOSVE-NEXT: str h2, [sp, #688] 2005; NONEON-NOSVE-NEXT: ldr q0, [sp, #688] 2006; NONEON-NOSVE-NEXT: str w9, [sp, #684] 2007; NONEON-NOSVE-NEXT: ldr x9, [sp, #656] 2008; NONEON-NOSVE-NEXT: str q0, [sp, #640] 2009; NONEON-NOSVE-NEXT: ldr h0, [sp, #664] 2010; NONEON-NOSVE-NEXT: str x9, [sp, #672] 2011; NONEON-NOSVE-NEXT: str h0, [sp, #680] 2012; NONEON-NOSVE-NEXT: ldr h0, [sp, #640] 2013; NONEON-NOSVE-NEXT: str h0, [sp, #682] 2014; NONEON-NOSVE-NEXT: ldr q0, [sp, #672] 2015; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB7_9 2016; NONEON-NOSVE-NEXT: .LBB7_24: // %cond.load16 2017; NONEON-NOSVE-NEXT: ldr h2, [x0, #12] 2018; NONEON-NOSVE-NEXT: str q0, [sp, #592] 2019; NONEON-NOSVE-NEXT: ldr w9, [sp, #600] 2020; NONEON-NOSVE-NEXT: str h2, [sp, #624] 2021; NONEON-NOSVE-NEXT: ldr q0, [sp, #624] 2022; NONEON-NOSVE-NEXT: str w9, [sp, #616] 2023; NONEON-NOSVE-NEXT: ldr x9, [sp, #592] 2024; NONEON-NOSVE-NEXT: str q0, [sp, #576] 2025; NONEON-NOSVE-NEXT: ldr h0, [sp, #606] 2026; NONEON-NOSVE-NEXT: str x9, [sp, #608] 2027; NONEON-NOSVE-NEXT: str h0, [sp, #622] 2028; NONEON-NOSVE-NEXT: ldr h0, [sp, #576] 2029; NONEON-NOSVE-NEXT: str h0, [sp, #620] 2030; NONEON-NOSVE-NEXT: ldr q0, [sp, #608] 2031; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB7_10 2032; NONEON-NOSVE-NEXT: .LBB7_25: // %cond.load19 2033; NONEON-NOSVE-NEXT: ldr h2, [x0, #14] 2034; NONEON-NOSVE-NEXT: str q0, [sp, #512] 2035; NONEON-NOSVE-NEXT: ldr w9, [sp, #520] 2036; NONEON-NOSVE-NEXT: str h2, [sp, #560] 2037; NONEON-NOSVE-NEXT: ldr q0, [sp, #560] 2038; NONEON-NOSVE-NEXT: str w9, [sp, #552] 2039; NONEON-NOSVE-NEXT: ldr x9, [sp, #512] 2040; NONEON-NOSVE-NEXT: str q0, [sp, #528] 2041; NONEON-NOSVE-NEXT: ldr h0, [sp, #524] 2042; NONEON-NOSVE-NEXT: str x9, [sp, #544] 2043; NONEON-NOSVE-NEXT: str h0, [sp, #556] 2044; NONEON-NOSVE-NEXT: ldr h0, [sp, #528] 2045; NONEON-NOSVE-NEXT: str h0, [sp, #558] 2046; NONEON-NOSVE-NEXT: ldr q0, [sp, #544] 2047; NONEON-NOSVE-NEXT: tbz w8, #8, .LBB7_11 2048; NONEON-NOSVE-NEXT: .LBB7_26: // %cond.load22 2049; NONEON-NOSVE-NEXT: ldr h2, [x0, #16] 2050; NONEON-NOSVE-NEXT: str q1, [sp, #464] 2051; NONEON-NOSVE-NEXT: add x9, sp, #464 2052; NONEON-NOSVE-NEXT: str h2, [sp, #496] 2053; NONEON-NOSVE-NEXT: ldr q1, [sp, #496] 2054; NONEON-NOSVE-NEXT: str q1, [sp, #448] 2055; NONEON-NOSVE-NEXT: ldr h1, [sp, #478] 2056; NONEON-NOSVE-NEXT: str h1, [sp, #494] 2057; NONEON-NOSVE-NEXT: ldur w10, [x9, #10] 2058; NONEON-NOSVE-NEXT: ldur x11, [x9, #2] 2059; NONEON-NOSVE-NEXT: stur w10, [x9, #26] 2060; NONEON-NOSVE-NEXT: stur x11, [x9, #18] 2061; NONEON-NOSVE-NEXT: ldr h1, [sp, #448] 2062; NONEON-NOSVE-NEXT: str h1, [sp, #480] 2063; NONEON-NOSVE-NEXT: ldr q1, [sp, #480] 2064; NONEON-NOSVE-NEXT: add x9, sp, #208 2065; NONEON-NOSVE-NEXT: tbz w8, #9, .LBB7_12 2066; NONEON-NOSVE-NEXT: .LBB7_27: // %cond.load25 2067; NONEON-NOSVE-NEXT: ldr h2, [x0, #18] 2068; NONEON-NOSVE-NEXT: str q1, [sp, #400] 2069; NONEON-NOSVE-NEXT: ldr w10, [sp, #412] 2070; NONEON-NOSVE-NEXT: str h2, [sp, #432] 2071; NONEON-NOSVE-NEXT: ldr q1, [sp, #432] 2072; NONEON-NOSVE-NEXT: str w10, [sp, #428] 2073; NONEON-NOSVE-NEXT: str q1, [sp, #384] 2074; NONEON-NOSVE-NEXT: ldur x10, [x9, #196] 2075; NONEON-NOSVE-NEXT: stur x10, [x9, #212] 2076; NONEON-NOSVE-NEXT: ldr h1, [sp, #400] 2077; NONEON-NOSVE-NEXT: str h1, [sp, #416] 2078; NONEON-NOSVE-NEXT: ldr h1, [sp, #384] 2079; NONEON-NOSVE-NEXT: str h1, [sp, #418] 2080; NONEON-NOSVE-NEXT: ldr q1, [sp, #416] 2081; NONEON-NOSVE-NEXT: tbz w8, #10, .LBB7_13 2082; NONEON-NOSVE-NEXT: .LBB7_28: // %cond.load28 2083; NONEON-NOSVE-NEXT: ldr h2, [x0, #20] 2084; NONEON-NOSVE-NEXT: str q1, [sp, #336] 2085; NONEON-NOSVE-NEXT: str h2, [sp, #368] 2086; NONEON-NOSVE-NEXT: ldr q1, [sp, #368] 2087; NONEON-NOSVE-NEXT: str q1, [sp, #320] 2088; NONEON-NOSVE-NEXT: ldr h1, [sp, #350] 2089; NONEON-NOSVE-NEXT: str h1, [sp, #366] 2090; NONEON-NOSVE-NEXT: ldur x10, [x9, #134] 2091; NONEON-NOSVE-NEXT: stur x10, [x9, #150] 2092; NONEON-NOSVE-NEXT: ldr w10, [sp, #336] 2093; NONEON-NOSVE-NEXT: ldr h1, [sp, #320] 2094; NONEON-NOSVE-NEXT: str w10, [sp, #352] 2095; NONEON-NOSVE-NEXT: str h1, [sp, #356] 2096; NONEON-NOSVE-NEXT: ldr q1, [sp, #352] 2097; NONEON-NOSVE-NEXT: tbz w8, #11, .LBB7_14 2098; NONEON-NOSVE-NEXT: .LBB7_29: // %cond.load31 2099; NONEON-NOSVE-NEXT: ldr h2, [x0, #22] 2100; NONEON-NOSVE-NEXT: str q1, [sp, #272] 2101; NONEON-NOSVE-NEXT: ldr x10, [sp, #280] 2102; NONEON-NOSVE-NEXT: str h2, [sp, #304] 2103; NONEON-NOSVE-NEXT: ldr q1, [sp, #304] 2104; NONEON-NOSVE-NEXT: str x10, [sp, #296] 2105; NONEON-NOSVE-NEXT: ldr w10, [sp, #272] 2106; NONEON-NOSVE-NEXT: str q1, [sp, #256] 2107; NONEON-NOSVE-NEXT: ldr h1, [sp, #276] 2108; NONEON-NOSVE-NEXT: str w10, [sp, #288] 2109; NONEON-NOSVE-NEXT: str h1, [sp, #292] 2110; NONEON-NOSVE-NEXT: ldr h1, [sp, #256] 2111; NONEON-NOSVE-NEXT: str h1, [sp, #294] 2112; NONEON-NOSVE-NEXT: ldr q1, [sp, #288] 2113; NONEON-NOSVE-NEXT: tbz w8, #12, .LBB7_15 2114; NONEON-NOSVE-NEXT: .LBB7_30: // %cond.load34 2115; NONEON-NOSVE-NEXT: ldr h2, [x0, #24] 2116; NONEON-NOSVE-NEXT: str q1, [sp, #208] 2117; NONEON-NOSVE-NEXT: str h2, [sp, #240] 2118; NONEON-NOSVE-NEXT: ldr q1, [sp, #240] 2119; NONEON-NOSVE-NEXT: str q1, [sp, #192] 2120; NONEON-NOSVE-NEXT: ldr h1, [sp, #222] 2121; NONEON-NOSVE-NEXT: str h1, [sp, #238] 2122; NONEON-NOSVE-NEXT: ldur w10, [x9, #10] 2123; NONEON-NOSVE-NEXT: stur w10, [x9, #26] 2124; NONEON-NOSVE-NEXT: ldr x9, [sp, #208] 2125; NONEON-NOSVE-NEXT: ldr h1, [sp, #192] 2126; NONEON-NOSVE-NEXT: str x9, [sp, #224] 2127; NONEON-NOSVE-NEXT: str h1, [sp, #232] 2128; NONEON-NOSVE-NEXT: ldr q1, [sp, #224] 2129; NONEON-NOSVE-NEXT: tbz w8, #13, .LBB7_16 2130; NONEON-NOSVE-NEXT: .LBB7_31: // %cond.load37 2131; NONEON-NOSVE-NEXT: ldr h2, [x0, #26] 2132; NONEON-NOSVE-NEXT: str q1, [sp, #144] 2133; NONEON-NOSVE-NEXT: ldr w9, [sp, #156] 2134; NONEON-NOSVE-NEXT: str h2, [sp, #176] 2135; NONEON-NOSVE-NEXT: ldr q1, [sp, #176] 2136; NONEON-NOSVE-NEXT: str w9, [sp, #172] 2137; NONEON-NOSVE-NEXT: ldr x9, [sp, #144] 2138; NONEON-NOSVE-NEXT: str q1, [sp, #128] 2139; NONEON-NOSVE-NEXT: ldr h1, [sp, #152] 2140; NONEON-NOSVE-NEXT: str x9, [sp, #160] 2141; NONEON-NOSVE-NEXT: str h1, [sp, #168] 2142; NONEON-NOSVE-NEXT: ldr h1, [sp, #128] 2143; NONEON-NOSVE-NEXT: str h1, [sp, #170] 2144; NONEON-NOSVE-NEXT: ldr q1, [sp, #160] 2145; NONEON-NOSVE-NEXT: tbz w8, #14, .LBB7_17 2146; NONEON-NOSVE-NEXT: .LBB7_32: // %cond.load40 2147; NONEON-NOSVE-NEXT: ldr h2, [x0, #28] 2148; NONEON-NOSVE-NEXT: str q1, [sp, #80] 2149; NONEON-NOSVE-NEXT: ldr w9, [sp, #88] 2150; NONEON-NOSVE-NEXT: str h2, [sp, #112] 2151; NONEON-NOSVE-NEXT: ldr q1, [sp, #112] 2152; NONEON-NOSVE-NEXT: str w9, [sp, #104] 2153; NONEON-NOSVE-NEXT: ldr x9, [sp, #80] 2154; NONEON-NOSVE-NEXT: str q1, [sp, #64] 2155; NONEON-NOSVE-NEXT: ldr h1, [sp, #94] 2156; NONEON-NOSVE-NEXT: str x9, [sp, #96] 2157; NONEON-NOSVE-NEXT: str h1, [sp, #110] 2158; NONEON-NOSVE-NEXT: ldr h1, [sp, #64] 2159; NONEON-NOSVE-NEXT: str h1, [sp, #108] 2160; NONEON-NOSVE-NEXT: ldr q1, [sp, #96] 2161; NONEON-NOSVE-NEXT: tbnz w8, #15, .LBB7_18 2162; NONEON-NOSVE-NEXT: b .LBB7_19 2163 %load = call <16 x half> @llvm.masked.load.v16f16(ptr %src, i32 8, <16 x i1> %mask, <16 x half> zeroinitializer) 2164 ret <16 x half> %load 2165} 2166 2167define <2 x float> @masked_load_v2f32(ptr %src, <2 x i1> %mask) { 2168; CHECK-LABEL: masked_load_v2f32: 2169; CHECK: // %bb.0: 2170; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 2171; CHECK-NEXT: ptrue p0.s, vl2 2172; CHECK-NEXT: lsl z0.s, z0.s, #31 2173; CHECK-NEXT: asr z0.s, z0.s, #31 2174; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 2175; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] 2176; CHECK-NEXT: // kill: def $d0 killed $d0 killed $z0 2177; CHECK-NEXT: ret 2178; 2179; NONEON-NOSVE-LABEL: masked_load_v2f32: 2180; NONEON-NOSVE: // %bb.0: 2181; NONEON-NOSVE-NEXT: sub sp, sp, #64 2182; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 64 2183; NONEON-NOSVE-NEXT: str d0, [sp, #48] 2184; NONEON-NOSVE-NEXT: ldr w8, [sp, #52] 2185; NONEON-NOSVE-NEXT: ldrb w9, [sp, #48] 2186; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 2187; NONEON-NOSVE-NEXT: and w8, w8, #0x2 2188; NONEON-NOSVE-NEXT: bfxil w8, w9, #0, #1 2189; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB8_2 2190; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2191; NONEON-NOSVE-NEXT: ldr s0, [x0] 2192; NONEON-NOSVE-NEXT: str wzr, [sp, #44] 2193; NONEON-NOSVE-NEXT: str s0, [sp, #40] 2194; NONEON-NOSVE-NEXT: ldr d0, [sp, #40] 2195; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB8_3 2196; NONEON-NOSVE-NEXT: b .LBB8_4 2197; NONEON-NOSVE-NEXT: .LBB8_2: 2198; NONEON-NOSVE-NEXT: adrp x9, .LCPI8_0 2199; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI8_0] 2200; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB8_4 2201; NONEON-NOSVE-NEXT: .LBB8_3: // %cond.load1 2202; NONEON-NOSVE-NEXT: ldr s1, [x0, #4] 2203; NONEON-NOSVE-NEXT: str d0, [sp, #8] 2204; NONEON-NOSVE-NEXT: str s1, [sp, #32] 2205; NONEON-NOSVE-NEXT: ldr s1, [sp, #8] 2206; NONEON-NOSVE-NEXT: ldr d0, [sp, #32] 2207; NONEON-NOSVE-NEXT: str d0, [sp, #16] 2208; NONEON-NOSVE-NEXT: ldr s0, [sp, #16] 2209; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #24] 2210; NONEON-NOSVE-NEXT: ldr d0, [sp, #24] 2211; NONEON-NOSVE-NEXT: .LBB8_4: // %else2 2212; NONEON-NOSVE-NEXT: add sp, sp, #64 2213; NONEON-NOSVE-NEXT: ret 2214 %load = call <2 x float> @llvm.masked.load.v2f32(ptr %src, i32 8, <2 x i1> %mask, <2 x float> zeroinitializer) 2215 ret <2 x float> %load 2216} 2217 2218define <4 x float> @masked_load_v4f32(ptr %src, <4 x i1> %mask) { 2219; CHECK-LABEL: masked_load_v4f32: 2220; CHECK: // %bb.0: 2221; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 2222; CHECK-NEXT: ptrue p0.s, vl4 2223; CHECK-NEXT: uunpklo z0.s, z0.h 2224; CHECK-NEXT: lsl z0.s, z0.s, #31 2225; CHECK-NEXT: asr z0.s, z0.s, #31 2226; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 2227; CHECK-NEXT: ld1w { z0.s }, p0/z, [x0] 2228; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 2229; CHECK-NEXT: ret 2230; 2231; NONEON-NOSVE-LABEL: masked_load_v4f32: 2232; NONEON-NOSVE: // %bb.0: 2233; NONEON-NOSVE-NEXT: sub sp, sp, #224 2234; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 224 2235; NONEON-NOSVE-NEXT: str d0, [sp, #208] 2236; NONEON-NOSVE-NEXT: ldrh w8, [sp, #210] 2237; NONEON-NOSVE-NEXT: ldrh w9, [sp, #212] 2238; NONEON-NOSVE-NEXT: ldrh w10, [sp, #214] 2239; NONEON-NOSVE-NEXT: ldrh w11, [sp, #208] 2240; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 2241; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 2242; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 2243; NONEON-NOSVE-NEXT: and w8, w8, #0x2 2244; NONEON-NOSVE-NEXT: and w9, w9, #0x4 2245; NONEON-NOSVE-NEXT: and w10, w10, #0x8 2246; NONEON-NOSVE-NEXT: bfxil w8, w11, #0, #1 2247; NONEON-NOSVE-NEXT: orr w9, w9, w10 2248; NONEON-NOSVE-NEXT: orr w8, w8, w9 2249; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB9_2 2250; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2251; NONEON-NOSVE-NEXT: ldr s0, [x0] 2252; NONEON-NOSVE-NEXT: str wzr, [sp, #204] 2253; NONEON-NOSVE-NEXT: stur xzr, [sp, #196] 2254; NONEON-NOSVE-NEXT: str s0, [sp, #192] 2255; NONEON-NOSVE-NEXT: ldr q0, [sp, #192] 2256; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB9_3 2257; NONEON-NOSVE-NEXT: b .LBB9_4 2258; NONEON-NOSVE-NEXT: .LBB9_2: 2259; NONEON-NOSVE-NEXT: adrp x9, .LCPI9_0 2260; NONEON-NOSVE-NEXT: ldr q0, [x9, :lo12:.LCPI9_0] 2261; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB9_4 2262; NONEON-NOSVE-NEXT: .LBB9_3: // %cond.load1 2263; NONEON-NOSVE-NEXT: ldr s1, [x0, #4] 2264; NONEON-NOSVE-NEXT: str q0, [sp, #144] 2265; NONEON-NOSVE-NEXT: str s1, [sp, #176] 2266; NONEON-NOSVE-NEXT: ldr q0, [sp, #176] 2267; NONEON-NOSVE-NEXT: str q0, [sp, #128] 2268; NONEON-NOSVE-NEXT: ldp s0, s1, [sp, #152] 2269; NONEON-NOSVE-NEXT: stp s0, s1, [sp, #168] 2270; NONEON-NOSVE-NEXT: ldr s1, [sp, #144] 2271; NONEON-NOSVE-NEXT: ldr s0, [sp, #128] 2272; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #160] 2273; NONEON-NOSVE-NEXT: ldr q0, [sp, #160] 2274; NONEON-NOSVE-NEXT: .LBB9_4: // %else2 2275; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB9_7 2276; NONEON-NOSVE-NEXT: // %bb.5: // %else5 2277; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB9_8 2278; NONEON-NOSVE-NEXT: .LBB9_6: // %else8 2279; NONEON-NOSVE-NEXT: add sp, sp, #224 2280; NONEON-NOSVE-NEXT: ret 2281; NONEON-NOSVE-NEXT: .LBB9_7: // %cond.load4 2282; NONEON-NOSVE-NEXT: ldr s1, [x0, #8] 2283; NONEON-NOSVE-NEXT: str q0, [sp, #80] 2284; NONEON-NOSVE-NEXT: str s1, [sp, #112] 2285; NONEON-NOSVE-NEXT: ldr s1, [sp, #92] 2286; NONEON-NOSVE-NEXT: ldr q0, [sp, #112] 2287; NONEON-NOSVE-NEXT: str q0, [sp, #64] 2288; NONEON-NOSVE-NEXT: ldp s0, s2, [sp, #80] 2289; NONEON-NOSVE-NEXT: stp s0, s2, [sp, #96] 2290; NONEON-NOSVE-NEXT: ldr s0, [sp, #64] 2291; NONEON-NOSVE-NEXT: stp s0, s1, [sp, #104] 2292; NONEON-NOSVE-NEXT: ldr q0, [sp, #96] 2293; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB9_6 2294; NONEON-NOSVE-NEXT: .LBB9_8: // %cond.load7 2295; NONEON-NOSVE-NEXT: ldr s1, [x0, #12] 2296; NONEON-NOSVE-NEXT: str q0, [sp] 2297; NONEON-NOSVE-NEXT: ldr x8, [sp] 2298; NONEON-NOSVE-NEXT: str s1, [sp, #48] 2299; NONEON-NOSVE-NEXT: ldr s1, [sp, #8] 2300; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 2301; NONEON-NOSVE-NEXT: str x8, [sp, #32] 2302; NONEON-NOSVE-NEXT: str q0, [sp, #16] 2303; NONEON-NOSVE-NEXT: ldr s0, [sp, #16] 2304; NONEON-NOSVE-NEXT: stp s1, s0, [sp, #40] 2305; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 2306; NONEON-NOSVE-NEXT: add sp, sp, #224 2307; NONEON-NOSVE-NEXT: ret 2308 %load = call <4 x float> @llvm.masked.load.v4f32(ptr %src, i32 8, <4 x i1> %mask, <4 x float> zeroinitializer) 2309 ret <4 x float> %load 2310} 2311 2312define <8 x float> @masked_load_v8f32(ptr %src, <8 x i1> %mask) { 2313; CHECK-LABEL: masked_load_v8f32: 2314; CHECK: // %bb.0: 2315; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 2316; CHECK-NEXT: mov z1.b, z0.b[3] 2317; CHECK-NEXT: mov z2.b, z0.b[2] 2318; CHECK-NEXT: mov x8, #4 // =0x4 2319; CHECK-NEXT: mov z3.b, z0.b[1] 2320; CHECK-NEXT: mov z4.b, z0.b[7] 2321; CHECK-NEXT: mov z5.b, z0.b[6] 2322; CHECK-NEXT: mov z6.b, z0.b[5] 2323; CHECK-NEXT: mov z7.b, z0.b[4] 2324; CHECK-NEXT: ptrue p0.s, vl4 2325; CHECK-NEXT: zip1 z1.h, z2.h, z1.h 2326; CHECK-NEXT: zip1 z0.h, z0.h, z3.h 2327; CHECK-NEXT: zip1 z2.h, z5.h, z4.h 2328; CHECK-NEXT: zip1 z3.h, z7.h, z6.h 2329; CHECK-NEXT: zip1 z0.s, z0.s, z1.s 2330; CHECK-NEXT: zip1 z1.s, z3.s, z2.s 2331; CHECK-NEXT: uunpklo z0.s, z0.h 2332; CHECK-NEXT: uunpklo z1.s, z1.h 2333; CHECK-NEXT: lsl z0.s, z0.s, #31 2334; CHECK-NEXT: lsl z1.s, z1.s, #31 2335; CHECK-NEXT: asr z0.s, z0.s, #31 2336; CHECK-NEXT: asr z1.s, z1.s, #31 2337; CHECK-NEXT: cmpne p1.s, p0/z, z0.s, #0 2338; CHECK-NEXT: cmpne p0.s, p0/z, z1.s, #0 2339; CHECK-NEXT: ld1w { z0.s }, p1/z, [x0] 2340; CHECK-NEXT: ld1w { z1.s }, p0/z, [x0, x8, lsl #2] 2341; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 2342; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 2343; CHECK-NEXT: ret 2344; 2345; NONEON-NOSVE-LABEL: masked_load_v8f32: 2346; NONEON-NOSVE: // %bb.0: 2347; NONEON-NOSVE-NEXT: sub sp, sp, #496 2348; NONEON-NOSVE-NEXT: str x29, [sp, #480] // 8-byte Folded Spill 2349; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 496 2350; NONEON-NOSVE-NEXT: .cfi_offset w29, -16 2351; NONEON-NOSVE-NEXT: str d0, [sp, #464] 2352; NONEON-NOSVE-NEXT: adrp x8, .LCPI10_0 2353; NONEON-NOSVE-NEXT: ldrb w9, [sp, #466] 2354; NONEON-NOSVE-NEXT: ldrb w10, [sp, #467] 2355; NONEON-NOSVE-NEXT: ldrb w11, [sp, #465] 2356; NONEON-NOSVE-NEXT: ldrb w13, [sp, #468] 2357; NONEON-NOSVE-NEXT: ldrb w14, [sp, #469] 2358; NONEON-NOSVE-NEXT: ldrb w15, [sp, #470] 2359; NONEON-NOSVE-NEXT: sbfx w9, w9, #0, #1 2360; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 2361; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1 2362; NONEON-NOSVE-NEXT: ldrb w12, [sp, #464] 2363; NONEON-NOSVE-NEXT: sbfx w13, w13, #0, #1 2364; NONEON-NOSVE-NEXT: sbfx w14, w14, #0, #1 2365; NONEON-NOSVE-NEXT: and w9, w9, #0x4 2366; NONEON-NOSVE-NEXT: and w10, w10, #0x8 2367; NONEON-NOSVE-NEXT: sbfx w15, w15, #0, #1 2368; NONEON-NOSVE-NEXT: orr w9, w9, w10 2369; NONEON-NOSVE-NEXT: ldrb w10, [sp, #471] 2370; NONEON-NOSVE-NEXT: and w11, w11, #0x2 2371; NONEON-NOSVE-NEXT: and w13, w13, #0x10 2372; NONEON-NOSVE-NEXT: bfxil w11, w12, #0, #1 2373; NONEON-NOSVE-NEXT: and w12, w14, #0x20 2374; NONEON-NOSVE-NEXT: orr w9, w9, w13 2375; NONEON-NOSVE-NEXT: and w13, w15, #0x40 2376; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 2377; NONEON-NOSVE-NEXT: orr w9, w11, w9 2378; NONEON-NOSVE-NEXT: orr w11, w12, w13 2379; NONEON-NOSVE-NEXT: ldr q1, [x8, :lo12:.LCPI10_0] 2380; NONEON-NOSVE-NEXT: orr w9, w9, w11 2381; NONEON-NOSVE-NEXT: and w10, w10, #0x80 2382; NONEON-NOSVE-NEXT: add w10, w9, w10 2383; NONEON-NOSVE-NEXT: add x9, sp, #208 2384; NONEON-NOSVE-NEXT: and w8, w10, #0xff 2385; NONEON-NOSVE-NEXT: tbz w10, #0, .LBB10_2 2386; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2387; NONEON-NOSVE-NEXT: ldr s0, [x0] 2388; NONEON-NOSVE-NEXT: str wzr, [sp, #460] 2389; NONEON-NOSVE-NEXT: stur xzr, [x9, #244] 2390; NONEON-NOSVE-NEXT: str s0, [sp, #448] 2391; NONEON-NOSVE-NEXT: ldr q0, [sp, #448] 2392; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB10_3 2393; NONEON-NOSVE-NEXT: b .LBB10_4 2394; NONEON-NOSVE-NEXT: .LBB10_2: 2395; NONEON-NOSVE-NEXT: str q1, [sp, #-16]! 2396; NONEON-NOSVE-NEXT: ldr q0, [sp], #16 2397; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB10_4 2398; NONEON-NOSVE-NEXT: .LBB10_3: // %cond.load1 2399; NONEON-NOSVE-NEXT: ldr s2, [x0, #4] 2400; NONEON-NOSVE-NEXT: str q0, [sp, #400] 2401; NONEON-NOSVE-NEXT: str s2, [sp, #432] 2402; NONEON-NOSVE-NEXT: ldr q0, [sp, #432] 2403; NONEON-NOSVE-NEXT: str q0, [sp, #384] 2404; NONEON-NOSVE-NEXT: ldr s0, [sp, #412] 2405; NONEON-NOSVE-NEXT: str s0, [sp, #428] 2406; NONEON-NOSVE-NEXT: ldr s0, [sp, #408] 2407; NONEON-NOSVE-NEXT: str s0, [sp, #424] 2408; NONEON-NOSVE-NEXT: ldr s0, [sp, #400] 2409; NONEON-NOSVE-NEXT: str s0, [sp, #416] 2410; NONEON-NOSVE-NEXT: ldr s0, [sp, #384] 2411; NONEON-NOSVE-NEXT: str s0, [sp, #420] 2412; NONEON-NOSVE-NEXT: ldr q0, [sp, #416] 2413; NONEON-NOSVE-NEXT: .LBB10_4: // %else2 2414; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB10_12 2415; NONEON-NOSVE-NEXT: // %bb.5: // %else5 2416; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB10_13 2417; NONEON-NOSVE-NEXT: .LBB10_6: // %else8 2418; NONEON-NOSVE-NEXT: tbnz w8, #4, .LBB10_14 2419; NONEON-NOSVE-NEXT: .LBB10_7: // %else11 2420; NONEON-NOSVE-NEXT: tbnz w8, #5, .LBB10_15 2421; NONEON-NOSVE-NEXT: .LBB10_8: // %else14 2422; NONEON-NOSVE-NEXT: tbnz w8, #6, .LBB10_16 2423; NONEON-NOSVE-NEXT: .LBB10_9: // %else17 2424; NONEON-NOSVE-NEXT: tbz w8, #7, .LBB10_11 2425; NONEON-NOSVE-NEXT: .LBB10_10: // %cond.load19 2426; NONEON-NOSVE-NEXT: ldr s2, [x0, #28] 2427; NONEON-NOSVE-NEXT: str q1, [sp] 2428; NONEON-NOSVE-NEXT: ldr x8, [sp] 2429; NONEON-NOSVE-NEXT: str s2, [sp, #48] 2430; NONEON-NOSVE-NEXT: ldr s2, [sp, #8] 2431; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 2432; NONEON-NOSVE-NEXT: str x8, [sp, #32] 2433; NONEON-NOSVE-NEXT: str q1, [sp, #16] 2434; NONEON-NOSVE-NEXT: ldr s1, [sp, #16] 2435; NONEON-NOSVE-NEXT: stp s2, s1, [sp, #40] 2436; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 2437; NONEON-NOSVE-NEXT: .LBB10_11: // %else20 2438; NONEON-NOSVE-NEXT: ldr x29, [sp, #480] // 8-byte Folded Reload 2439; NONEON-NOSVE-NEXT: add sp, sp, #496 2440; NONEON-NOSVE-NEXT: ret 2441; NONEON-NOSVE-NEXT: .LBB10_12: // %cond.load4 2442; NONEON-NOSVE-NEXT: ldr s2, [x0, #8] 2443; NONEON-NOSVE-NEXT: str q0, [sp, #336] 2444; NONEON-NOSVE-NEXT: str s2, [sp, #368] 2445; NONEON-NOSVE-NEXT: ldr q0, [sp, #368] 2446; NONEON-NOSVE-NEXT: str q0, [sp, #320] 2447; NONEON-NOSVE-NEXT: ldr s0, [sp, #348] 2448; NONEON-NOSVE-NEXT: str s0, [sp, #364] 2449; NONEON-NOSVE-NEXT: ldr s0, [sp, #340] 2450; NONEON-NOSVE-NEXT: str s0, [sp, #356] 2451; NONEON-NOSVE-NEXT: ldr s0, [sp, #336] 2452; NONEON-NOSVE-NEXT: str s0, [sp, #352] 2453; NONEON-NOSVE-NEXT: ldr s0, [sp, #320] 2454; NONEON-NOSVE-NEXT: str s0, [sp, #360] 2455; NONEON-NOSVE-NEXT: ldr q0, [sp, #352] 2456; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB10_6 2457; NONEON-NOSVE-NEXT: .LBB10_13: // %cond.load7 2458; NONEON-NOSVE-NEXT: ldr s2, [x0, #12] 2459; NONEON-NOSVE-NEXT: str q0, [sp, #256] 2460; NONEON-NOSVE-NEXT: ldr x10, [sp, #256] 2461; NONEON-NOSVE-NEXT: str s2, [sp, #304] 2462; NONEON-NOSVE-NEXT: ldr q0, [sp, #304] 2463; NONEON-NOSVE-NEXT: str x10, [sp, #288] 2464; NONEON-NOSVE-NEXT: str q0, [sp, #272] 2465; NONEON-NOSVE-NEXT: ldr s0, [sp, #264] 2466; NONEON-NOSVE-NEXT: str s0, [sp, #296] 2467; NONEON-NOSVE-NEXT: ldr s0, [sp, #272] 2468; NONEON-NOSVE-NEXT: str s0, [sp, #300] 2469; NONEON-NOSVE-NEXT: ldr q0, [sp, #288] 2470; NONEON-NOSVE-NEXT: tbz w8, #4, .LBB10_7 2471; NONEON-NOSVE-NEXT: .LBB10_14: // %cond.load10 2472; NONEON-NOSVE-NEXT: ldr s2, [x0, #16] 2473; NONEON-NOSVE-NEXT: str q1, [sp, #208] 2474; NONEON-NOSVE-NEXT: str s2, [sp, #240] 2475; NONEON-NOSVE-NEXT: ldr q1, [sp, #240] 2476; NONEON-NOSVE-NEXT: str q1, [sp, #192] 2477; NONEON-NOSVE-NEXT: ldr s1, [sp, #220] 2478; NONEON-NOSVE-NEXT: str s1, [sp, #236] 2479; NONEON-NOSVE-NEXT: ldur x10, [x9, #4] 2480; NONEON-NOSVE-NEXT: stur x10, [x9, #20] 2481; NONEON-NOSVE-NEXT: ldr s1, [sp, #192] 2482; NONEON-NOSVE-NEXT: str s1, [sp, #224] 2483; NONEON-NOSVE-NEXT: ldr q1, [sp, #224] 2484; NONEON-NOSVE-NEXT: tbz w8, #5, .LBB10_8 2485; NONEON-NOSVE-NEXT: .LBB10_15: // %cond.load13 2486; NONEON-NOSVE-NEXT: ldr s2, [x0, #20] 2487; NONEON-NOSVE-NEXT: str q1, [sp, #144] 2488; NONEON-NOSVE-NEXT: str s2, [sp, #176] 2489; NONEON-NOSVE-NEXT: ldr q1, [sp, #176] 2490; NONEON-NOSVE-NEXT: str q1, [sp, #128] 2491; NONEON-NOSVE-NEXT: ldp s1, s2, [sp, #152] 2492; NONEON-NOSVE-NEXT: stp s1, s2, [sp, #168] 2493; NONEON-NOSVE-NEXT: ldr s2, [sp, #144] 2494; NONEON-NOSVE-NEXT: ldr s1, [sp, #128] 2495; NONEON-NOSVE-NEXT: stp s2, s1, [sp, #160] 2496; NONEON-NOSVE-NEXT: ldr q1, [sp, #160] 2497; NONEON-NOSVE-NEXT: tbz w8, #6, .LBB10_9 2498; NONEON-NOSVE-NEXT: .LBB10_16: // %cond.load16 2499; NONEON-NOSVE-NEXT: ldr s2, [x0, #24] 2500; NONEON-NOSVE-NEXT: str q1, [sp, #80] 2501; NONEON-NOSVE-NEXT: str s2, [sp, #112] 2502; NONEON-NOSVE-NEXT: ldr s2, [sp, #92] 2503; NONEON-NOSVE-NEXT: ldr q1, [sp, #112] 2504; NONEON-NOSVE-NEXT: str q1, [sp, #64] 2505; NONEON-NOSVE-NEXT: ldp s1, s3, [sp, #80] 2506; NONEON-NOSVE-NEXT: stp s1, s3, [sp, #96] 2507; NONEON-NOSVE-NEXT: ldr s1, [sp, #64] 2508; NONEON-NOSVE-NEXT: stp s1, s2, [sp, #104] 2509; NONEON-NOSVE-NEXT: ldr q1, [sp, #96] 2510; NONEON-NOSVE-NEXT: tbnz w8, #7, .LBB10_10 2511; NONEON-NOSVE-NEXT: b .LBB10_11 2512 %load = call <8 x float> @llvm.masked.load.v8f32(ptr %src, i32 8, <8 x i1> %mask, <8 x float> zeroinitializer) 2513 ret <8 x float> %load 2514} 2515 2516define <2 x double> @masked_load_v2f64(ptr %src, <2 x i1> %mask) { 2517; CHECK-LABEL: masked_load_v2f64: 2518; CHECK: // %bb.0: 2519; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 2520; CHECK-NEXT: ptrue p0.d, vl2 2521; CHECK-NEXT: uunpklo z0.d, z0.s 2522; CHECK-NEXT: lsl z0.d, z0.d, #63 2523; CHECK-NEXT: asr z0.d, z0.d, #63 2524; CHECK-NEXT: cmpne p0.d, p0/z, z0.d, #0 2525; CHECK-NEXT: ld1d { z0.d }, p0/z, [x0] 2526; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 2527; CHECK-NEXT: ret 2528; 2529; NONEON-NOSVE-LABEL: masked_load_v2f64: 2530; NONEON-NOSVE: // %bb.0: 2531; NONEON-NOSVE-NEXT: sub sp, sp, #96 2532; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 96 2533; NONEON-NOSVE-NEXT: str d0, [sp, #80] 2534; NONEON-NOSVE-NEXT: ldr w8, [sp, #84] 2535; NONEON-NOSVE-NEXT: ldrb w9, [sp, #80] 2536; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 2537; NONEON-NOSVE-NEXT: and w8, w8, #0x2 2538; NONEON-NOSVE-NEXT: bfxil w8, w9, #0, #1 2539; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB11_2 2540; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2541; NONEON-NOSVE-NEXT: ldr d0, [x0] 2542; NONEON-NOSVE-NEXT: str xzr, [sp, #72] 2543; NONEON-NOSVE-NEXT: str d0, [sp, #64] 2544; NONEON-NOSVE-NEXT: ldr q0, [sp, #64] 2545; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB11_3 2546; NONEON-NOSVE-NEXT: b .LBB11_4 2547; NONEON-NOSVE-NEXT: .LBB11_2: 2548; NONEON-NOSVE-NEXT: adrp x9, .LCPI11_0 2549; NONEON-NOSVE-NEXT: ldr q0, [x9, :lo12:.LCPI11_0] 2550; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB11_4 2551; NONEON-NOSVE-NEXT: .LBB11_3: // %cond.load1 2552; NONEON-NOSVE-NEXT: ldr d1, [x0, #8] 2553; NONEON-NOSVE-NEXT: str q0, [sp] 2554; NONEON-NOSVE-NEXT: str d1, [sp, #48] 2555; NONEON-NOSVE-NEXT: ldr d1, [sp] 2556; NONEON-NOSVE-NEXT: ldr q0, [sp, #48] 2557; NONEON-NOSVE-NEXT: str q0, [sp, #16] 2558; NONEON-NOSVE-NEXT: ldr d0, [sp, #16] 2559; NONEON-NOSVE-NEXT: stp d1, d0, [sp, #32] 2560; NONEON-NOSVE-NEXT: ldr q0, [sp, #32] 2561; NONEON-NOSVE-NEXT: .LBB11_4: // %else2 2562; NONEON-NOSVE-NEXT: add sp, sp, #96 2563; NONEON-NOSVE-NEXT: ret 2564 %load = call <2 x double> @llvm.masked.load.v2f64(ptr %src, i32 8, <2 x i1> %mask, <2 x double> zeroinitializer) 2565 ret <2 x double> %load 2566} 2567 2568define <4 x double> @masked_load_v4f64(ptr %src, <4 x i1> %mask) { 2569; CHECK-LABEL: masked_load_v4f64: 2570; CHECK: // %bb.0: 2571; CHECK-NEXT: // kill: def $d0 killed $d0 def $z0 2572; CHECK-NEXT: ptrue p0.d, vl2 2573; CHECK-NEXT: mov x8, #2 // =0x2 2574; CHECK-NEXT: uunpklo z0.s, z0.h 2575; CHECK-NEXT: uunpklo z1.d, z0.s 2576; CHECK-NEXT: ext z0.b, z0.b, z0.b, #8 2577; CHECK-NEXT: uunpklo z0.d, z0.s 2578; CHECK-NEXT: lsl z1.d, z1.d, #63 2579; CHECK-NEXT: lsl z0.d, z0.d, #63 2580; CHECK-NEXT: asr z1.d, z1.d, #63 2581; CHECK-NEXT: asr z0.d, z0.d, #63 2582; CHECK-NEXT: cmpne p1.d, p0/z, z1.d, #0 2583; CHECK-NEXT: cmpne p0.d, p0/z, z0.d, #0 2584; CHECK-NEXT: ld1d { z0.d }, p1/z, [x0] 2585; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 2586; CHECK-NEXT: ld1d { z1.d }, p0/z, [x0, x8, lsl #3] 2587; CHECK-NEXT: // kill: def $q1 killed $q1 killed $z1 2588; CHECK-NEXT: ret 2589; 2590; NONEON-NOSVE-LABEL: masked_load_v4f64: 2591; NONEON-NOSVE: // %bb.0: 2592; NONEON-NOSVE-NEXT: sub sp, sp, #224 2593; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 224 2594; NONEON-NOSVE-NEXT: str d0, [sp, #208] 2595; NONEON-NOSVE-NEXT: adrp x9, .LCPI12_0 2596; NONEON-NOSVE-NEXT: ldrh w8, [sp, #210] 2597; NONEON-NOSVE-NEXT: ldrh w10, [sp, #212] 2598; NONEON-NOSVE-NEXT: ldrh w11, [sp, #214] 2599; NONEON-NOSVE-NEXT: ldrh w12, [sp, #208] 2600; NONEON-NOSVE-NEXT: ldr q1, [x9, :lo12:.LCPI12_0] 2601; NONEON-NOSVE-NEXT: sbfx w8, w8, #0, #1 2602; NONEON-NOSVE-NEXT: sbfx w10, w10, #0, #1 2603; NONEON-NOSVE-NEXT: sbfx w11, w11, #0, #1 2604; NONEON-NOSVE-NEXT: and w8, w8, #0x2 2605; NONEON-NOSVE-NEXT: and w10, w10, #0x4 2606; NONEON-NOSVE-NEXT: and w11, w11, #0x8 2607; NONEON-NOSVE-NEXT: bfxil w8, w12, #0, #1 2608; NONEON-NOSVE-NEXT: orr w10, w10, w11 2609; NONEON-NOSVE-NEXT: orr w8, w8, w10 2610; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB12_2 2611; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2612; NONEON-NOSVE-NEXT: ldr d0, [x0] 2613; NONEON-NOSVE-NEXT: str xzr, [sp, #200] 2614; NONEON-NOSVE-NEXT: str d0, [sp, #192] 2615; NONEON-NOSVE-NEXT: ldr q0, [sp, #192] 2616; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB12_3 2617; NONEON-NOSVE-NEXT: b .LBB12_4 2618; NONEON-NOSVE-NEXT: .LBB12_2: 2619; NONEON-NOSVE-NEXT: str q1, [sp, #-16]! 2620; NONEON-NOSVE-NEXT: ldr q0, [sp], #16 2621; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB12_4 2622; NONEON-NOSVE-NEXT: .LBB12_3: // %cond.load1 2623; NONEON-NOSVE-NEXT: ldr d2, [x0, #8] 2624; NONEON-NOSVE-NEXT: str q0, [sp, #128] 2625; NONEON-NOSVE-NEXT: str d2, [sp, #176] 2626; NONEON-NOSVE-NEXT: ldr d2, [sp, #128] 2627; NONEON-NOSVE-NEXT: ldr q0, [sp, #176] 2628; NONEON-NOSVE-NEXT: str q0, [sp, #144] 2629; NONEON-NOSVE-NEXT: ldr d0, [sp, #144] 2630; NONEON-NOSVE-NEXT: stp d2, d0, [sp, #160] 2631; NONEON-NOSVE-NEXT: ldr q0, [sp, #160] 2632; NONEON-NOSVE-NEXT: .LBB12_4: // %else2 2633; NONEON-NOSVE-NEXT: tbnz w8, #2, .LBB12_7 2634; NONEON-NOSVE-NEXT: // %bb.5: // %else5 2635; NONEON-NOSVE-NEXT: tbnz w8, #3, .LBB12_8 2636; NONEON-NOSVE-NEXT: .LBB12_6: // %else8 2637; NONEON-NOSVE-NEXT: add sp, sp, #224 2638; NONEON-NOSVE-NEXT: ret 2639; NONEON-NOSVE-NEXT: .LBB12_7: // %cond.load4 2640; NONEON-NOSVE-NEXT: ldr d2, [x0, #16] 2641; NONEON-NOSVE-NEXT: str q1, [sp, #80] 2642; NONEON-NOSVE-NEXT: str d2, [sp, #112] 2643; NONEON-NOSVE-NEXT: ldr d2, [sp, #88] 2644; NONEON-NOSVE-NEXT: ldr q1, [sp, #112] 2645; NONEON-NOSVE-NEXT: str q1, [sp, #64] 2646; NONEON-NOSVE-NEXT: ldr d1, [sp, #64] 2647; NONEON-NOSVE-NEXT: stp d1, d2, [sp, #96] 2648; NONEON-NOSVE-NEXT: ldr q1, [sp, #96] 2649; NONEON-NOSVE-NEXT: tbz w8, #3, .LBB12_6 2650; NONEON-NOSVE-NEXT: .LBB12_8: // %cond.load7 2651; NONEON-NOSVE-NEXT: ldr d2, [x0, #24] 2652; NONEON-NOSVE-NEXT: str q1, [sp] 2653; NONEON-NOSVE-NEXT: str d2, [sp, #48] 2654; NONEON-NOSVE-NEXT: ldr d2, [sp] 2655; NONEON-NOSVE-NEXT: ldr q1, [sp, #48] 2656; NONEON-NOSVE-NEXT: str q1, [sp, #16] 2657; NONEON-NOSVE-NEXT: ldr d1, [sp, #16] 2658; NONEON-NOSVE-NEXT: stp d2, d1, [sp, #32] 2659; NONEON-NOSVE-NEXT: ldr q1, [sp, #32] 2660; NONEON-NOSVE-NEXT: add sp, sp, #224 2661; NONEON-NOSVE-NEXT: ret 2662 %load = call <4 x double> @llvm.masked.load.v4f64(ptr %src, i32 8, <4 x i1> %mask, <4 x double> zeroinitializer) 2663 ret <4 x double> %load 2664} 2665 2666define <3 x i32> @masked_load_zext_v3i32(ptr %load_ptr, <3 x i1> %pm) { 2667; CHECK-LABEL: masked_load_zext_v3i32: 2668; CHECK: // %bb.0: 2669; CHECK-NEXT: fmov s0, w2 2670; CHECK-NEXT: fmov s1, w1 2671; CHECK-NEXT: adrp x8, .LCPI13_0 2672; CHECK-NEXT: ptrue p0.s, vl4 2673; CHECK-NEXT: zip1 z0.h, z1.h, z0.h 2674; CHECK-NEXT: fmov s1, w3 2675; CHECK-NEXT: zip1 z0.s, z0.s, z1.s 2676; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI13_0] 2677; CHECK-NEXT: and z0.d, z0.d, z1.d 2678; CHECK-NEXT: lsl z0.h, z0.h, #15 2679; CHECK-NEXT: asr z0.h, z0.h, #15 2680; CHECK-NEXT: sunpklo z0.s, z0.h 2681; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 2682; CHECK-NEXT: ld1h { z0.s }, p0/z, [x0] 2683; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 2684; CHECK-NEXT: ret 2685; 2686; NONEON-NOSVE-LABEL: masked_load_zext_v3i32: 2687; NONEON-NOSVE: // %bb.0: 2688; NONEON-NOSVE-NEXT: sub sp, sp, #80 2689; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80 2690; NONEON-NOSVE-NEXT: and w8, w1, #0x1 2691; NONEON-NOSVE-NEXT: bfi w8, w2, #1, #1 2692; NONEON-NOSVE-NEXT: bfi w8, w3, #2, #1 2693; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB13_2 2694; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2695; NONEON-NOSVE-NEXT: ldrh w9, [x0] 2696; NONEON-NOSVE-NEXT: stur wzr, [sp, #66] 2697; NONEON-NOSVE-NEXT: strh w9, [sp, #64] 2698; NONEON-NOSVE-NEXT: ldr d0, [sp, #64] 2699; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB13_3 2700; NONEON-NOSVE-NEXT: b .LBB13_4 2701; NONEON-NOSVE-NEXT: .LBB13_2: 2702; NONEON-NOSVE-NEXT: adrp x9, .LCPI13_0 2703; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI13_0] 2704; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB13_4 2705; NONEON-NOSVE-NEXT: .LBB13_3: // %cond.load1 2706; NONEON-NOSVE-NEXT: ldrh w9, [x0, #2] 2707; NONEON-NOSVE-NEXT: str d0, [sp, #48] 2708; NONEON-NOSVE-NEXT: strh w9, [sp, #58] 2709; NONEON-NOSVE-NEXT: ldrh w9, [sp, #52] 2710; NONEON-NOSVE-NEXT: strh w9, [sp, #60] 2711; NONEON-NOSVE-NEXT: ldrh w9, [sp, #48] 2712; NONEON-NOSVE-NEXT: strh w9, [sp, #56] 2713; NONEON-NOSVE-NEXT: ldr d0, [sp, #56] 2714; NONEON-NOSVE-NEXT: .LBB13_4: // %else2 2715; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB13_6 2716; NONEON-NOSVE-NEXT: // %bb.5: // %cond.load4 2717; NONEON-NOSVE-NEXT: ldrh w8, [x0, #4] 2718; NONEON-NOSVE-NEXT: str d0, [sp, #32] 2719; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 2720; NONEON-NOSVE-NEXT: ldr w8, [sp, #32] 2721; NONEON-NOSVE-NEXT: str w8, [sp, #40] 2722; NONEON-NOSVE-NEXT: ldr d0, [sp, #40] 2723; NONEON-NOSVE-NEXT: .LBB13_6: // %else5 2724; NONEON-NOSVE-NEXT: str d0, [sp, #8] 2725; NONEON-NOSVE-NEXT: ldrh w9, [sp, #14] 2726; NONEON-NOSVE-NEXT: ldrh w8, [sp, #12] 2727; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24] 2728; NONEON-NOSVE-NEXT: ldrh w9, [sp, #10] 2729; NONEON-NOSVE-NEXT: ldrh w8, [sp, #8] 2730; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16] 2731; NONEON-NOSVE-NEXT: ldr q0, [sp, #16] 2732; NONEON-NOSVE-NEXT: add sp, sp, #80 2733; NONEON-NOSVE-NEXT: ret 2734 %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) 2735 %extend = zext <3 x i16> %load_value to <3 x i32> 2736 ret <3 x i32> %extend; 2737} 2738 2739define <3 x i32> @masked_load_sext_v3i32(ptr %load_ptr, <3 x i1> %pm) { 2740; CHECK-LABEL: masked_load_sext_v3i32: 2741; CHECK: // %bb.0: 2742; CHECK-NEXT: fmov s0, w2 2743; CHECK-NEXT: fmov s1, w1 2744; CHECK-NEXT: adrp x8, .LCPI14_0 2745; CHECK-NEXT: ptrue p0.s, vl4 2746; CHECK-NEXT: zip1 z0.h, z1.h, z0.h 2747; CHECK-NEXT: fmov s1, w3 2748; CHECK-NEXT: zip1 z0.s, z0.s, z1.s 2749; CHECK-NEXT: ldr d1, [x8, :lo12:.LCPI14_0] 2750; CHECK-NEXT: and z0.d, z0.d, z1.d 2751; CHECK-NEXT: lsl z0.h, z0.h, #15 2752; CHECK-NEXT: asr z0.h, z0.h, #15 2753; CHECK-NEXT: sunpklo z0.s, z0.h 2754; CHECK-NEXT: cmpne p0.s, p0/z, z0.s, #0 2755; CHECK-NEXT: ld1sh { z0.s }, p0/z, [x0] 2756; CHECK-NEXT: // kill: def $q0 killed $q0 killed $z0 2757; CHECK-NEXT: ret 2758; 2759; NONEON-NOSVE-LABEL: masked_load_sext_v3i32: 2760; NONEON-NOSVE: // %bb.0: 2761; NONEON-NOSVE-NEXT: sub sp, sp, #80 2762; NONEON-NOSVE-NEXT: .cfi_def_cfa_offset 80 2763; NONEON-NOSVE-NEXT: and w8, w1, #0x1 2764; NONEON-NOSVE-NEXT: bfi w8, w2, #1, #1 2765; NONEON-NOSVE-NEXT: bfi w8, w3, #2, #1 2766; NONEON-NOSVE-NEXT: tbz w8, #0, .LBB14_2 2767; NONEON-NOSVE-NEXT: // %bb.1: // %cond.load 2768; NONEON-NOSVE-NEXT: ldrh w9, [x0] 2769; NONEON-NOSVE-NEXT: stur wzr, [sp, #66] 2770; NONEON-NOSVE-NEXT: strh w9, [sp, #64] 2771; NONEON-NOSVE-NEXT: ldr d0, [sp, #64] 2772; NONEON-NOSVE-NEXT: tbnz w8, #1, .LBB14_3 2773; NONEON-NOSVE-NEXT: b .LBB14_4 2774; NONEON-NOSVE-NEXT: .LBB14_2: 2775; NONEON-NOSVE-NEXT: adrp x9, .LCPI14_0 2776; NONEON-NOSVE-NEXT: ldr d0, [x9, :lo12:.LCPI14_0] 2777; NONEON-NOSVE-NEXT: tbz w8, #1, .LBB14_4 2778; NONEON-NOSVE-NEXT: .LBB14_3: // %cond.load1 2779; NONEON-NOSVE-NEXT: ldrh w9, [x0, #2] 2780; NONEON-NOSVE-NEXT: str d0, [sp, #48] 2781; NONEON-NOSVE-NEXT: strh w9, [sp, #58] 2782; NONEON-NOSVE-NEXT: ldrh w9, [sp, #52] 2783; NONEON-NOSVE-NEXT: strh w9, [sp, #60] 2784; NONEON-NOSVE-NEXT: ldrh w9, [sp, #48] 2785; NONEON-NOSVE-NEXT: strh w9, [sp, #56] 2786; NONEON-NOSVE-NEXT: ldr d0, [sp, #56] 2787; NONEON-NOSVE-NEXT: .LBB14_4: // %else2 2788; NONEON-NOSVE-NEXT: tbz w8, #2, .LBB14_6 2789; NONEON-NOSVE-NEXT: // %bb.5: // %cond.load4 2790; NONEON-NOSVE-NEXT: ldrh w8, [x0, #4] 2791; NONEON-NOSVE-NEXT: str d0, [sp, #32] 2792; NONEON-NOSVE-NEXT: strh w8, [sp, #44] 2793; NONEON-NOSVE-NEXT: ldr w8, [sp, #32] 2794; NONEON-NOSVE-NEXT: str w8, [sp, #40] 2795; NONEON-NOSVE-NEXT: ldr d0, [sp, #40] 2796; NONEON-NOSVE-NEXT: .LBB14_6: // %else5 2797; NONEON-NOSVE-NEXT: str d0, [sp, #8] 2798; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #14] 2799; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #12] 2800; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #24] 2801; NONEON-NOSVE-NEXT: ldrsh w9, [sp, #10] 2802; NONEON-NOSVE-NEXT: ldrsh w8, [sp, #8] 2803; NONEON-NOSVE-NEXT: stp w8, w9, [sp, #16] 2804; NONEON-NOSVE-NEXT: ldr q0, [sp, #16] 2805; NONEON-NOSVE-NEXT: add sp, sp, #80 2806; NONEON-NOSVE-NEXT: ret 2807 %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) 2808 %extend = sext <3 x i16> %load_value to <3 x i32> 2809 ret <3 x i32> %extend; 2810} 2811 2812declare <4 x i8> @llvm.masked.load.v4i8(ptr, i32, <4 x i1>, <4 x i8>) 2813declare <8 x i8> @llvm.masked.load.v8i8(ptr, i32, <8 x i1>, <8 x i8>) 2814declare <16 x i8> @llvm.masked.load.v16i8(ptr, i32, <16 x i1>, <16 x i8>) 2815declare <32 x i8> @llvm.masked.load.v32i8(ptr, i32, <32 x i1>, <32 x i8>) 2816 2817declare <2 x half> @llvm.masked.load.v2f16(ptr, i32, <2 x i1>, <2 x half>) 2818declare <4 x half> @llvm.masked.load.v4f16(ptr, i32, <4 x i1>, <4 x half>) 2819declare <8 x half> @llvm.masked.load.v8f16(ptr, i32, <8 x i1>, <8 x half>) 2820declare <16 x half> @llvm.masked.load.v16f16(ptr, i32, <16 x i1>, <16 x half>) 2821 2822declare <2 x float> @llvm.masked.load.v2f32(ptr, i32, <2 x i1>, <2 x float>) 2823declare <4 x float> @llvm.masked.load.v4f32(ptr, i32, <4 x i1>, <4 x float>) 2824declare <8 x float> @llvm.masked.load.v8f32(ptr, i32, <8 x i1>, <8 x float>) 2825 2826declare <2 x double> @llvm.masked.load.v2f64(ptr, i32, <2 x i1>, <2 x double>) 2827declare <4 x double> @llvm.masked.load.v4f64(ptr, i32, <4 x i1>, <4 x double>) 2828 2829declare <3 x i16> @llvm.masked.load.v3i16.p0(ptr, i32, <3 x i1>, <3 x i16>) 2830