brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.2 KiB · ac1db2b Raw
456 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-linux-gnu < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s4 5define void @foo_st2_v16i8(<16 x i1> %mask, <16 x i8> %val1, <16 x i8> %val2, ptr %p) {6; CHECK-LABEL: foo_st2_v16i8:7; CHECK:       // %bb.0:8; CHECK-NEXT:    zip2 v3.16b, v0.16b, v0.16b9; CHECK-NEXT:    zip1 v0.16b, v0.16b, v0.16b10; CHECK-NEXT:    adrp x8, .LCPI0_011; CHECK-NEXT:    ldr q4, [x8, :lo12:.LCPI0_0]12; CHECK-NEXT:    shl v3.16b, v3.16b, #713; CHECK-NEXT:    shl v0.16b, v0.16b, #714; CHECK-NEXT:    cmlt v3.16b, v3.16b, #015; CHECK-NEXT:    cmlt v0.16b, v0.16b, #016; CHECK-NEXT:    and v3.16b, v3.16b, v4.16b17; CHECK-NEXT:    and v0.16b, v0.16b, v4.16b18; CHECK-NEXT:    ext v4.16b, v3.16b, v3.16b, #819; CHECK-NEXT:    ext v5.16b, v0.16b, v0.16b, #820; CHECK-NEXT:    zip1 v3.16b, v3.16b, v4.16b21; CHECK-NEXT:    zip1 v0.16b, v0.16b, v5.16b22; CHECK-NEXT:    addv h3, v3.8h23; CHECK-NEXT:    addv h0, v0.8h24; CHECK-NEXT:    fmov w9, s325; CHECK-NEXT:    fmov w8, s026; CHECK-NEXT:    zip1 v0.16b, v1.16b, v2.16b27; CHECK-NEXT:    bfi w8, w9, #16, #1628; CHECK-NEXT:    tbnz w8, #0, .LBB0_3329; CHECK-NEXT:  // %bb.1: // %else30; CHECK-NEXT:    tbnz w8, #1, .LBB0_3431; CHECK-NEXT:  .LBB0_2: // %else232; CHECK-NEXT:    tbnz w8, #2, .LBB0_3533; CHECK-NEXT:  .LBB0_3: // %else434; CHECK-NEXT:    tbnz w8, #3, .LBB0_3635; CHECK-NEXT:  .LBB0_4: // %else636; CHECK-NEXT:    tbnz w8, #4, .LBB0_3737; CHECK-NEXT:  .LBB0_5: // %else838; CHECK-NEXT:    tbnz w8, #5, .LBB0_3839; CHECK-NEXT:  .LBB0_6: // %else1040; CHECK-NEXT:    tbnz w8, #6, .LBB0_3941; CHECK-NEXT:  .LBB0_7: // %else1242; CHECK-NEXT:    tbnz w8, #7, .LBB0_4043; CHECK-NEXT:  .LBB0_8: // %else1444; CHECK-NEXT:    tbnz w8, #8, .LBB0_4145; CHECK-NEXT:  .LBB0_9: // %else1646; CHECK-NEXT:    tbnz w8, #9, .LBB0_4247; CHECK-NEXT:  .LBB0_10: // %else1848; CHECK-NEXT:    tbnz w8, #10, .LBB0_4349; CHECK-NEXT:  .LBB0_11: // %else2050; CHECK-NEXT:    tbnz w8, #11, .LBB0_4451; CHECK-NEXT:  .LBB0_12: // %else2252; CHECK-NEXT:    tbnz w8, #12, .LBB0_4553; CHECK-NEXT:  .LBB0_13: // %else2454; CHECK-NEXT:    tbnz w8, #13, .LBB0_4655; CHECK-NEXT:  .LBB0_14: // %else2656; CHECK-NEXT:    tbnz w8, #14, .LBB0_4757; CHECK-NEXT:  .LBB0_15: // %else2858; CHECK-NEXT:    tbnz w8, #15, .LBB0_4859; CHECK-NEXT:  .LBB0_16: // %else3060; CHECK-NEXT:    zip2 v0.16b, v1.16b, v2.16b61; CHECK-NEXT:    tbnz w8, #16, .LBB0_4962; CHECK-NEXT:  .LBB0_17: // %else3263; CHECK-NEXT:    tbnz w8, #17, .LBB0_5064; CHECK-NEXT:  .LBB0_18: // %else3465; CHECK-NEXT:    tbnz w8, #18, .LBB0_5166; CHECK-NEXT:  .LBB0_19: // %else3667; CHECK-NEXT:    tbnz w8, #19, .LBB0_5268; CHECK-NEXT:  .LBB0_20: // %else3869; CHECK-NEXT:    tbnz w8, #20, .LBB0_5370; CHECK-NEXT:  .LBB0_21: // %else4071; CHECK-NEXT:    tbnz w8, #21, .LBB0_5472; CHECK-NEXT:  .LBB0_22: // %else4273; CHECK-NEXT:    tbnz w8, #22, .LBB0_5574; CHECK-NEXT:  .LBB0_23: // %else4475; CHECK-NEXT:    tbnz w8, #23, .LBB0_5676; CHECK-NEXT:  .LBB0_24: // %else4677; CHECK-NEXT:    tbnz w8, #24, .LBB0_5778; CHECK-NEXT:  .LBB0_25: // %else4879; CHECK-NEXT:    tbnz w8, #25, .LBB0_5880; CHECK-NEXT:  .LBB0_26: // %else5081; CHECK-NEXT:    tbnz w8, #26, .LBB0_5982; CHECK-NEXT:  .LBB0_27: // %else5283; CHECK-NEXT:    tbnz w8, #27, .LBB0_6084; CHECK-NEXT:  .LBB0_28: // %else5485; CHECK-NEXT:    tbnz w8, #28, .LBB0_6186; CHECK-NEXT:  .LBB0_29: // %else5687; CHECK-NEXT:    tbnz w8, #29, .LBB0_6288; CHECK-NEXT:  .LBB0_30: // %else5889; CHECK-NEXT:    tbnz w8, #30, .LBB0_6390; CHECK-NEXT:  .LBB0_31: // %else6091; CHECK-NEXT:    tbnz w8, #31, .LBB0_6492; CHECK-NEXT:  .LBB0_32: // %else6293; CHECK-NEXT:    ret94; CHECK-NEXT:  .LBB0_33: // %cond.store95; CHECK-NEXT:    str b0, [x0]96; CHECK-NEXT:    tbz w8, #1, .LBB0_297; CHECK-NEXT:  .LBB0_34: // %cond.store198; CHECK-NEXT:    mov b3, v0.b[1]99; CHECK-NEXT:    stur b3, [x0, #1]100; CHECK-NEXT:    tbz w8, #2, .LBB0_3101; CHECK-NEXT:  .LBB0_35: // %cond.store3102; CHECK-NEXT:    mov b3, v0.b[2]103; CHECK-NEXT:    stur b3, [x0, #2]104; CHECK-NEXT:    tbz w8, #3, .LBB0_4105; CHECK-NEXT:  .LBB0_36: // %cond.store5106; CHECK-NEXT:    mov b3, v0.b[3]107; CHECK-NEXT:    stur b3, [x0, #3]108; CHECK-NEXT:    tbz w8, #4, .LBB0_5109; CHECK-NEXT:  .LBB0_37: // %cond.store7110; CHECK-NEXT:    mov b3, v0.b[4]111; CHECK-NEXT:    stur b3, [x0, #4]112; CHECK-NEXT:    tbz w8, #5, .LBB0_6113; CHECK-NEXT:  .LBB0_38: // %cond.store9114; CHECK-NEXT:    mov b3, v0.b[5]115; CHECK-NEXT:    stur b3, [x0, #5]116; CHECK-NEXT:    tbz w8, #6, .LBB0_7117; CHECK-NEXT:  .LBB0_39: // %cond.store11118; CHECK-NEXT:    mov b3, v0.b[6]119; CHECK-NEXT:    stur b3, [x0, #6]120; CHECK-NEXT:    tbz w8, #7, .LBB0_8121; CHECK-NEXT:  .LBB0_40: // %cond.store13122; CHECK-NEXT:    mov b3, v0.b[7]123; CHECK-NEXT:    stur b3, [x0, #7]124; CHECK-NEXT:    tbz w8, #8, .LBB0_9125; CHECK-NEXT:  .LBB0_41: // %cond.store15126; CHECK-NEXT:    mov b3, v0.b[8]127; CHECK-NEXT:    stur b3, [x0, #8]128; CHECK-NEXT:    tbz w8, #9, .LBB0_10129; CHECK-NEXT:  .LBB0_42: // %cond.store17130; CHECK-NEXT:    mov b3, v0.b[9]131; CHECK-NEXT:    stur b3, [x0, #9]132; CHECK-NEXT:    tbz w8, #10, .LBB0_11133; CHECK-NEXT:  .LBB0_43: // %cond.store19134; CHECK-NEXT:    mov b3, v0.b[10]135; CHECK-NEXT:    stur b3, [x0, #10]136; CHECK-NEXT:    tbz w8, #11, .LBB0_12137; CHECK-NEXT:  .LBB0_44: // %cond.store21138; CHECK-NEXT:    mov b3, v0.b[11]139; CHECK-NEXT:    stur b3, [x0, #11]140; CHECK-NEXT:    tbz w8, #12, .LBB0_13141; CHECK-NEXT:  .LBB0_45: // %cond.store23142; CHECK-NEXT:    mov b3, v0.b[12]143; CHECK-NEXT:    stur b3, [x0, #12]144; CHECK-NEXT:    tbz w8, #13, .LBB0_14145; CHECK-NEXT:  .LBB0_46: // %cond.store25146; CHECK-NEXT:    mov b3, v0.b[13]147; CHECK-NEXT:    stur b3, [x0, #13]148; CHECK-NEXT:    tbz w8, #14, .LBB0_15149; CHECK-NEXT:  .LBB0_47: // %cond.store27150; CHECK-NEXT:    mov b3, v0.b[14]151; CHECK-NEXT:    stur b3, [x0, #14]152; CHECK-NEXT:    tbz w8, #15, .LBB0_16153; CHECK-NEXT:  .LBB0_48: // %cond.store29154; CHECK-NEXT:    mov b0, v0.b[15]155; CHECK-NEXT:    stur b0, [x0, #15]156; CHECK-NEXT:    zip2 v0.16b, v1.16b, v2.16b157; CHECK-NEXT:    tbz w8, #16, .LBB0_17158; CHECK-NEXT:  .LBB0_49: // %cond.store31159; CHECK-NEXT:    stur b0, [x0, #16]160; CHECK-NEXT:    tbz w8, #17, .LBB0_18161; CHECK-NEXT:  .LBB0_50: // %cond.store33162; CHECK-NEXT:    mov b1, v0.b[1]163; CHECK-NEXT:    stur b1, [x0, #17]164; CHECK-NEXT:    tbz w8, #18, .LBB0_19165; CHECK-NEXT:  .LBB0_51: // %cond.store35166; CHECK-NEXT:    mov b1, v0.b[2]167; CHECK-NEXT:    stur b1, [x0, #18]168; CHECK-NEXT:    tbz w8, #19, .LBB0_20169; CHECK-NEXT:  .LBB0_52: // %cond.store37170; CHECK-NEXT:    mov b1, v0.b[3]171; CHECK-NEXT:    stur b1, [x0, #19]172; CHECK-NEXT:    tbz w8, #20, .LBB0_21173; CHECK-NEXT:  .LBB0_53: // %cond.store39174; CHECK-NEXT:    mov b1, v0.b[4]175; CHECK-NEXT:    stur b1, [x0, #20]176; CHECK-NEXT:    tbz w8, #21, .LBB0_22177; CHECK-NEXT:  .LBB0_54: // %cond.store41178; CHECK-NEXT:    mov b1, v0.b[5]179; CHECK-NEXT:    stur b1, [x0, #21]180; CHECK-NEXT:    tbz w8, #22, .LBB0_23181; CHECK-NEXT:  .LBB0_55: // %cond.store43182; CHECK-NEXT:    mov b1, v0.b[6]183; CHECK-NEXT:    stur b1, [x0, #22]184; CHECK-NEXT:    tbz w8, #23, .LBB0_24185; CHECK-NEXT:  .LBB0_56: // %cond.store45186; CHECK-NEXT:    mov b1, v0.b[7]187; CHECK-NEXT:    stur b1, [x0, #23]188; CHECK-NEXT:    tbz w8, #24, .LBB0_25189; CHECK-NEXT:  .LBB0_57: // %cond.store47190; CHECK-NEXT:    mov b1, v0.b[8]191; CHECK-NEXT:    stur b1, [x0, #24]192; CHECK-NEXT:    tbz w8, #25, .LBB0_26193; CHECK-NEXT:  .LBB0_58: // %cond.store49194; CHECK-NEXT:    mov b1, v0.b[9]195; CHECK-NEXT:    stur b1, [x0, #25]196; CHECK-NEXT:    tbz w8, #26, .LBB0_27197; CHECK-NEXT:  .LBB0_59: // %cond.store51198; CHECK-NEXT:    mov b1, v0.b[10]199; CHECK-NEXT:    stur b1, [x0, #26]200; CHECK-NEXT:    tbz w8, #27, .LBB0_28201; CHECK-NEXT:  .LBB0_60: // %cond.store53202; CHECK-NEXT:    mov b1, v0.b[11]203; CHECK-NEXT:    stur b1, [x0, #27]204; CHECK-NEXT:    tbz w8, #28, .LBB0_29205; CHECK-NEXT:  .LBB0_61: // %cond.store55206; CHECK-NEXT:    mov b1, v0.b[12]207; CHECK-NEXT:    stur b1, [x0, #28]208; CHECK-NEXT:    tbz w8, #29, .LBB0_30209; CHECK-NEXT:  .LBB0_62: // %cond.store57210; CHECK-NEXT:    mov b1, v0.b[13]211; CHECK-NEXT:    stur b1, [x0, #29]212; CHECK-NEXT:    tbz w8, #30, .LBB0_31213; CHECK-NEXT:  .LBB0_63: // %cond.store59214; CHECK-NEXT:    mov b1, v0.b[14]215; CHECK-NEXT:    stur b1, [x0, #30]216; CHECK-NEXT:    tbz w8, #31, .LBB0_32217; CHECK-NEXT:  .LBB0_64: // %cond.store61218; CHECK-NEXT:    mov b0, v0.b[15]219; CHECK-NEXT:    stur b0, [x0, #31]220; CHECK-NEXT:    ret221  %interleaved.mask = call <32 x i1> @llvm.vector.interleave2.v32i1(<16 x i1> %mask, <16 x i1> %mask)222  %strided.vec = call <32 x i8> @llvm.vector.interleave2.v32i8(<16 x i8> %val1, <16 x i8> %val2)223  call void @llvm.masked.store.v32i8.p0(<32 x i8> %strided.vec, ptr %p, i32 1, <32 x i1> %interleaved.mask)224  ret void225}226 227define void @foo_st2_v8i16(<8 x i1> %mask, <8 x i16> %val1, <8 x i16> %val2, ptr %p) {228; CHECK-LABEL: foo_st2_v8i16:229; CHECK:       // %bb.0:230; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0231; CHECK-NEXT:    adrp x8, .LCPI1_0232; CHECK-NEXT:    zip1 v0.16b, v0.16b, v0.16b233; CHECK-NEXT:    ldr q3, [x8, :lo12:.LCPI1_0]234; CHECK-NEXT:    shl v0.16b, v0.16b, #7235; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0236; CHECK-NEXT:    and v0.16b, v0.16b, v3.16b237; CHECK-NEXT:    ext v3.16b, v0.16b, v0.16b, #8238; CHECK-NEXT:    zip1 v0.16b, v0.16b, v3.16b239; CHECK-NEXT:    addv h3, v0.8h240; CHECK-NEXT:    zip1 v0.8h, v1.8h, v2.8h241; CHECK-NEXT:    fmov w8, s3242; CHECK-NEXT:    tbnz w8, #0, .LBB1_17243; CHECK-NEXT:  // %bb.1: // %else244; CHECK-NEXT:    tbnz w8, #1, .LBB1_18245; CHECK-NEXT:  .LBB1_2: // %else2246; CHECK-NEXT:    tbnz w8, #2, .LBB1_19247; CHECK-NEXT:  .LBB1_3: // %else4248; CHECK-NEXT:    tbnz w8, #3, .LBB1_20249; CHECK-NEXT:  .LBB1_4: // %else6250; CHECK-NEXT:    tbnz w8, #4, .LBB1_21251; CHECK-NEXT:  .LBB1_5: // %else8252; CHECK-NEXT:    tbnz w8, #5, .LBB1_22253; CHECK-NEXT:  .LBB1_6: // %else10254; CHECK-NEXT:    tbnz w8, #6, .LBB1_23255; CHECK-NEXT:  .LBB1_7: // %else12256; CHECK-NEXT:    tbnz w8, #7, .LBB1_24257; CHECK-NEXT:  .LBB1_8: // %else14258; CHECK-NEXT:    zip2 v0.8h, v1.8h, v2.8h259; CHECK-NEXT:    tbnz w8, #8, .LBB1_25260; CHECK-NEXT:  .LBB1_9: // %else16261; CHECK-NEXT:    tbnz w8, #9, .LBB1_26262; CHECK-NEXT:  .LBB1_10: // %else18263; CHECK-NEXT:    tbnz w8, #10, .LBB1_27264; CHECK-NEXT:  .LBB1_11: // %else20265; CHECK-NEXT:    tbnz w8, #11, .LBB1_28266; CHECK-NEXT:  .LBB1_12: // %else22267; CHECK-NEXT:    tbnz w8, #12, .LBB1_29268; CHECK-NEXT:  .LBB1_13: // %else24269; CHECK-NEXT:    tbnz w8, #13, .LBB1_30270; CHECK-NEXT:  .LBB1_14: // %else26271; CHECK-NEXT:    tbnz w8, #14, .LBB1_31272; CHECK-NEXT:  .LBB1_15: // %else28273; CHECK-NEXT:    tbnz w8, #15, .LBB1_32274; CHECK-NEXT:  .LBB1_16: // %else30275; CHECK-NEXT:    ret276; CHECK-NEXT:  .LBB1_17: // %cond.store277; CHECK-NEXT:    str h0, [x0]278; CHECK-NEXT:    tbz w8, #1, .LBB1_2279; CHECK-NEXT:  .LBB1_18: // %cond.store1280; CHECK-NEXT:    mov h3, v0.h[1]281; CHECK-NEXT:    str h3, [x0, #2]282; CHECK-NEXT:    tbz w8, #2, .LBB1_3283; CHECK-NEXT:  .LBB1_19: // %cond.store3284; CHECK-NEXT:    mov h3, v0.h[2]285; CHECK-NEXT:    str h3, [x0, #4]286; CHECK-NEXT:    tbz w8, #3, .LBB1_4287; CHECK-NEXT:  .LBB1_20: // %cond.store5288; CHECK-NEXT:    mov h3, v0.h[3]289; CHECK-NEXT:    str h3, [x0, #6]290; CHECK-NEXT:    tbz w8, #4, .LBB1_5291; CHECK-NEXT:  .LBB1_21: // %cond.store7292; CHECK-NEXT:    mov h3, v0.h[4]293; CHECK-NEXT:    str h3, [x0, #8]294; CHECK-NEXT:    tbz w8, #5, .LBB1_6295; CHECK-NEXT:  .LBB1_22: // %cond.store9296; CHECK-NEXT:    mov h3, v0.h[5]297; CHECK-NEXT:    str h3, [x0, #10]298; CHECK-NEXT:    tbz w8, #6, .LBB1_7299; CHECK-NEXT:  .LBB1_23: // %cond.store11300; CHECK-NEXT:    mov h3, v0.h[6]301; CHECK-NEXT:    str h3, [x0, #12]302; CHECK-NEXT:    tbz w8, #7, .LBB1_8303; CHECK-NEXT:  .LBB1_24: // %cond.store13304; CHECK-NEXT:    mov h0, v0.h[7]305; CHECK-NEXT:    str h0, [x0, #14]306; CHECK-NEXT:    zip2 v0.8h, v1.8h, v2.8h307; CHECK-NEXT:    tbz w8, #8, .LBB1_9308; CHECK-NEXT:  .LBB1_25: // %cond.store15309; CHECK-NEXT:    str h0, [x0, #16]310; CHECK-NEXT:    tbz w8, #9, .LBB1_10311; CHECK-NEXT:  .LBB1_26: // %cond.store17312; CHECK-NEXT:    mov h1, v0.h[1]313; CHECK-NEXT:    str h1, [x0, #18]314; CHECK-NEXT:    tbz w8, #10, .LBB1_11315; CHECK-NEXT:  .LBB1_27: // %cond.store19316; CHECK-NEXT:    mov h1, v0.h[2]317; CHECK-NEXT:    str h1, [x0, #20]318; CHECK-NEXT:    tbz w8, #11, .LBB1_12319; CHECK-NEXT:  .LBB1_28: // %cond.store21320; CHECK-NEXT:    mov h1, v0.h[3]321; CHECK-NEXT:    str h1, [x0, #22]322; CHECK-NEXT:    tbz w8, #12, .LBB1_13323; CHECK-NEXT:  .LBB1_29: // %cond.store23324; CHECK-NEXT:    mov h1, v0.h[4]325; CHECK-NEXT:    str h1, [x0, #24]326; CHECK-NEXT:    tbz w8, #13, .LBB1_14327; CHECK-NEXT:  .LBB1_30: // %cond.store25328; CHECK-NEXT:    mov h1, v0.h[5]329; CHECK-NEXT:    str h1, [x0, #26]330; CHECK-NEXT:    tbz w8, #14, .LBB1_15331; CHECK-NEXT:  .LBB1_31: // %cond.store27332; CHECK-NEXT:    mov h1, v0.h[6]333; CHECK-NEXT:    str h1, [x0, #28]334; CHECK-NEXT:    tbz w8, #15, .LBB1_16335; CHECK-NEXT:  .LBB1_32: // %cond.store29336; CHECK-NEXT:    mov h0, v0.h[7]337; CHECK-NEXT:    str h0, [x0, #30]338; CHECK-NEXT:    ret339  %interleaved.mask = call <16 x i1> @llvm.vector.interleave2.v16i1(<8 x i1> %mask, <8 x i1> %mask)340  %strided.vec = call <16 x i16> @llvm.vector.interleave2.v16i16(<8 x i16> %val1, <8 x i16> %val2)341  call void @llvm.masked.store.v16i16.p0(<16 x i16> %strided.vec, ptr %p, i32 1, <16 x i1> %interleaved.mask)342  ret void343}344 345define void @foo_st2_v4i32(<4 x i1> %mask, <4 x i32> %val1, <4 x i32> %val2, ptr %p) {346; CHECK-LABEL: foo_st2_v4i32:347; CHECK:       // %bb.0:348; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v0.8b349; CHECK-NEXT:    adrp x8, .LCPI2_0350; CHECK-NEXT:    ldr d3, [x8, :lo12:.LCPI2_0]351; CHECK-NEXT:    zip1 v0.8b, v0.8b, v0.8b352; CHECK-NEXT:    shl v0.8b, v0.8b, #7353; CHECK-NEXT:    cmlt v0.8b, v0.8b, #0354; CHECK-NEXT:    and v0.8b, v0.8b, v3.8b355; CHECK-NEXT:    addv b3, v0.8b356; CHECK-NEXT:    zip1 v0.4s, v1.4s, v2.4s357; CHECK-NEXT:    fmov w8, s3358; CHECK-NEXT:    tbnz w8, #0, .LBB2_9359; CHECK-NEXT:  // %bb.1: // %else360; CHECK-NEXT:    tbnz w8, #1, .LBB2_10361; CHECK-NEXT:  .LBB2_2: // %else2362; CHECK-NEXT:    tbnz w8, #2, .LBB2_11363; CHECK-NEXT:  .LBB2_3: // %else4364; CHECK-NEXT:    tbnz w8, #3, .LBB2_12365; CHECK-NEXT:  .LBB2_4: // %else6366; CHECK-NEXT:    zip2 v0.4s, v1.4s, v2.4s367; CHECK-NEXT:    tbnz w8, #4, .LBB2_13368; CHECK-NEXT:  .LBB2_5: // %else8369; CHECK-NEXT:    tbnz w8, #5, .LBB2_14370; CHECK-NEXT:  .LBB2_6: // %else10371; CHECK-NEXT:    tbnz w8, #6, .LBB2_15372; CHECK-NEXT:  .LBB2_7: // %else12373; CHECK-NEXT:    tbnz w8, #7, .LBB2_16374; CHECK-NEXT:  .LBB2_8: // %else14375; CHECK-NEXT:    ret376; CHECK-NEXT:  .LBB2_9: // %cond.store377; CHECK-NEXT:    str s0, [x0]378; CHECK-NEXT:    tbz w8, #1, .LBB2_2379; CHECK-NEXT:  .LBB2_10: // %cond.store1380; CHECK-NEXT:    mov s3, v0.s[1]381; CHECK-NEXT:    str s3, [x0, #4]382; CHECK-NEXT:    tbz w8, #2, .LBB2_3383; CHECK-NEXT:  .LBB2_11: // %cond.store3384; CHECK-NEXT:    mov s3, v0.s[2]385; CHECK-NEXT:    str s3, [x0, #8]386; CHECK-NEXT:    tbz w8, #3, .LBB2_4387; CHECK-NEXT:  .LBB2_12: // %cond.store5388; CHECK-NEXT:    mov s0, v0.s[3]389; CHECK-NEXT:    str s0, [x0, #12]390; CHECK-NEXT:    zip2 v0.4s, v1.4s, v2.4s391; CHECK-NEXT:    tbz w8, #4, .LBB2_5392; CHECK-NEXT:  .LBB2_13: // %cond.store7393; CHECK-NEXT:    str s0, [x0, #16]394; CHECK-NEXT:    tbz w8, #5, .LBB2_6395; CHECK-NEXT:  .LBB2_14: // %cond.store9396; CHECK-NEXT:    mov s1, v0.s[1]397; CHECK-NEXT:    str s1, [x0, #20]398; CHECK-NEXT:    tbz w8, #6, .LBB2_7399; CHECK-NEXT:  .LBB2_15: // %cond.store11400; CHECK-NEXT:    mov s1, v0.s[2]401; CHECK-NEXT:    str s1, [x0, #24]402; CHECK-NEXT:    tbz w8, #7, .LBB2_8403; CHECK-NEXT:  .LBB2_16: // %cond.store13404; CHECK-NEXT:    mov s0, v0.s[3]405; CHECK-NEXT:    str s0, [x0, #28]406; CHECK-NEXT:    ret407  %interleaved.mask = call <8 x i1> @llvm.vector.interleave2.v8i1(<4 x i1> %mask, <4 x i1> %mask)408  %strided.vec = call <8 x i32> @llvm.vector.interleave2.v8i32(<4 x i32> %val1, <4 x i32> %val2)409  call void @llvm.masked.store.v8i32.p0(<8 x i32> %strided.vec, ptr %p, i32 1, <8 x i1> %interleaved.mask)410  ret void411}412 413define void @foo_st2_v2i64(<2 x i1> %mask, <2 x i64> %val1, <2 x i64> %val2, ptr %p) {414; CHECK-LABEL: foo_st2_v2i64:415; CHECK:       // %bb.0:416; CHECK-NEXT:    uzp1 v0.4h, v0.4h, v0.4h417; CHECK-NEXT:    adrp x8, .LCPI3_0418; CHECK-NEXT:    ldr d3, [x8, :lo12:.LCPI3_0]419; CHECK-NEXT:    zip1 v0.4h, v0.4h, v0.4h420; CHECK-NEXT:    shl v0.4h, v0.4h, #15421; CHECK-NEXT:    cmlt v0.4h, v0.4h, #0422; CHECK-NEXT:    and v0.8b, v0.8b, v3.8b423; CHECK-NEXT:    addv h3, v0.4h424; CHECK-NEXT:    zip1 v0.2d, v1.2d, v2.2d425; CHECK-NEXT:    fmov w8, s3426; CHECK-NEXT:    tbnz w8, #0, .LBB3_5427; CHECK-NEXT:  // %bb.1: // %else428; CHECK-NEXT:    tbnz w8, #1, .LBB3_6429; CHECK-NEXT:  .LBB3_2: // %else2430; CHECK-NEXT:    zip2 v0.2d, v1.2d, v2.2d431; CHECK-NEXT:    tbnz w8, #2, .LBB3_7432; CHECK-NEXT:  .LBB3_3: // %else4433; CHECK-NEXT:    tbnz w8, #3, .LBB3_8434; CHECK-NEXT:  .LBB3_4: // %else6435; CHECK-NEXT:    ret436; CHECK-NEXT:  .LBB3_5: // %cond.store437; CHECK-NEXT:    str d0, [x0]438; CHECK-NEXT:    tbz w8, #1, .LBB3_2439; CHECK-NEXT:  .LBB3_6: // %cond.store1440; CHECK-NEXT:    mov d0, v0.d[1]441; CHECK-NEXT:    str d0, [x0, #8]442; CHECK-NEXT:    zip2 v0.2d, v1.2d, v2.2d443; CHECK-NEXT:    tbz w8, #2, .LBB3_3444; CHECK-NEXT:  .LBB3_7: // %cond.store3445; CHECK-NEXT:    str d0, [x0, #16]446; CHECK-NEXT:    tbz w8, #3, .LBB3_4447; CHECK-NEXT:  .LBB3_8: // %cond.store5448; CHECK-NEXT:    mov d0, v0.d[1]449; CHECK-NEXT:    str d0, [x0, #24]450; CHECK-NEXT:    ret451  %interleaved.mask = call <4 x i1> @llvm.vector.interleave2.v4i1(<2 x i1> %mask, <2 x i1> %mask)452  %strided.vec = call <4 x i64> @llvm.vector.interleave2.v4i64(<2 x i64> %val1, <2 x i64> %val2)453  call void @llvm.masked.store.v4i64.p0(<4 x i64> %strided.vec, ptr %p, i32 1, <4 x i1> %interleaved.mask)454  ret void455}456