brintos

brintos / llvm-project-archived public Read only

0
0
Text · 17.7 KiB · 730dfed Raw
465 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 { <16 x i8>, <16 x i8> } @foo_ld2_v16i8(<16 x i1> %mask, ptr %p) {6; CHECK-LABEL: foo_ld2_v16i8:7; CHECK:       // %bb.0:8; CHECK-NEXT:    zip2 v1.16b, v0.16b, v0.16b9; CHECK-NEXT:    zip1 v0.16b, v0.16b, v0.16b10; CHECK-NEXT:    adrp x8, .LCPI0_011; CHECK-NEXT:    ldr q2, [x8, :lo12:.LCPI0_0]12; CHECK-NEXT:    shl v1.16b, v1.16b, #713; CHECK-NEXT:    shl v0.16b, v0.16b, #714; CHECK-NEXT:    cmlt v1.16b, v1.16b, #015; CHECK-NEXT:    cmlt v0.16b, v0.16b, #016; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b17; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b18; CHECK-NEXT:    ext v2.16b, v1.16b, v1.16b, #819; CHECK-NEXT:    ext v3.16b, v0.16b, v0.16b, #820; CHECK-NEXT:    zip1 v1.16b, v1.16b, v2.16b21; CHECK-NEXT:    zip1 v0.16b, v0.16b, v3.16b22; CHECK-NEXT:    addv h1, v1.8h23; CHECK-NEXT:    addv h0, v0.8h24; CHECK-NEXT:    fmov w9, s125; CHECK-NEXT:    fmov w8, s026; CHECK-NEXT:    bfi w8, w9, #16, #1627; CHECK-NEXT:    tbz w8, #0, .LBB0_228; CHECK-NEXT:  // %bb.1: // %cond.load29; CHECK-NEXT:    ldr b1, [x0]30; CHECK-NEXT:    tbnz w8, #1, .LBB0_331; CHECK-NEXT:    b .LBB0_432; CHECK-NEXT:  .LBB0_2:33; CHECK-NEXT:    // implicit-def: $q134; CHECK-NEXT:    tbz w8, #1, .LBB0_435; CHECK-NEXT:  .LBB0_3: // %cond.load136; CHECK-NEXT:    add x9, x0, #137; CHECK-NEXT:    ld1 { v1.b }[1], [x9]38; CHECK-NEXT:  .LBB0_4: // %else239; CHECK-NEXT:    tbnz w8, #2, .LBB0_2040; CHECK-NEXT:  // %bb.5: // %else541; CHECK-NEXT:    tbnz w8, #3, .LBB0_2142; CHECK-NEXT:  .LBB0_6: // %else843; CHECK-NEXT:    tbnz w8, #4, .LBB0_2244; CHECK-NEXT:  .LBB0_7: // %else1145; CHECK-NEXT:    tbnz w8, #5, .LBB0_2346; CHECK-NEXT:  .LBB0_8: // %else1447; CHECK-NEXT:    tbnz w8, #6, .LBB0_2448; CHECK-NEXT:  .LBB0_9: // %else1749; CHECK-NEXT:    tbnz w8, #7, .LBB0_2550; CHECK-NEXT:  .LBB0_10: // %else2051; CHECK-NEXT:    tbnz w8, #8, .LBB0_2652; CHECK-NEXT:  .LBB0_11: // %else2353; CHECK-NEXT:    tbnz w8, #9, .LBB0_2754; CHECK-NEXT:  .LBB0_12: // %else2655; CHECK-NEXT:    tbnz w8, #10, .LBB0_2856; CHECK-NEXT:  .LBB0_13: // %else2957; CHECK-NEXT:    tbnz w8, #11, .LBB0_2958; CHECK-NEXT:  .LBB0_14: // %else3259; CHECK-NEXT:    tbnz w8, #12, .LBB0_3060; CHECK-NEXT:  .LBB0_15: // %else3561; CHECK-NEXT:    tbnz w8, #13, .LBB0_3162; CHECK-NEXT:  .LBB0_16: // %else3863; CHECK-NEXT:    tbnz w8, #14, .LBB0_3264; CHECK-NEXT:  .LBB0_17: // %else4165; CHECK-NEXT:    tbnz w8, #15, .LBB0_3366; CHECK-NEXT:  .LBB0_18: // %else4467; CHECK-NEXT:    tbz w8, #16, .LBB0_3468; CHECK-NEXT:  .LBB0_19: // %cond.load4669; CHECK-NEXT:    add x9, x0, #1670; CHECK-NEXT:    ld1 { v2.b }[0], [x9]71; CHECK-NEXT:    tbnz w8, #17, .LBB0_3572; CHECK-NEXT:    b .LBB0_3673; CHECK-NEXT:  .LBB0_20: // %cond.load474; CHECK-NEXT:    add x9, x0, #275; CHECK-NEXT:    ld1 { v1.b }[2], [x9]76; CHECK-NEXT:    tbz w8, #3, .LBB0_677; CHECK-NEXT:  .LBB0_21: // %cond.load778; CHECK-NEXT:    add x9, x0, #379; CHECK-NEXT:    ld1 { v1.b }[3], [x9]80; CHECK-NEXT:    tbz w8, #4, .LBB0_781; CHECK-NEXT:  .LBB0_22: // %cond.load1082; CHECK-NEXT:    add x9, x0, #483; CHECK-NEXT:    ld1 { v1.b }[4], [x9]84; CHECK-NEXT:    tbz w8, #5, .LBB0_885; CHECK-NEXT:  .LBB0_23: // %cond.load1386; CHECK-NEXT:    add x9, x0, #587; CHECK-NEXT:    ld1 { v1.b }[5], [x9]88; CHECK-NEXT:    tbz w8, #6, .LBB0_989; CHECK-NEXT:  .LBB0_24: // %cond.load1690; CHECK-NEXT:    add x9, x0, #691; CHECK-NEXT:    ld1 { v1.b }[6], [x9]92; CHECK-NEXT:    tbz w8, #7, .LBB0_1093; CHECK-NEXT:  .LBB0_25: // %cond.load1994; CHECK-NEXT:    add x9, x0, #795; CHECK-NEXT:    ld1 { v1.b }[7], [x9]96; CHECK-NEXT:    tbz w8, #8, .LBB0_1197; CHECK-NEXT:  .LBB0_26: // %cond.load2298; CHECK-NEXT:    add x9, x0, #899; CHECK-NEXT:    ld1 { v1.b }[8], [x9]100; CHECK-NEXT:    tbz w8, #9, .LBB0_12101; CHECK-NEXT:  .LBB0_27: // %cond.load25102; CHECK-NEXT:    add x9, x0, #9103; CHECK-NEXT:    ld1 { v1.b }[9], [x9]104; CHECK-NEXT:    tbz w8, #10, .LBB0_13105; CHECK-NEXT:  .LBB0_28: // %cond.load28106; CHECK-NEXT:    add x9, x0, #10107; CHECK-NEXT:    ld1 { v1.b }[10], [x9]108; CHECK-NEXT:    tbz w8, #11, .LBB0_14109; CHECK-NEXT:  .LBB0_29: // %cond.load31110; CHECK-NEXT:    add x9, x0, #11111; CHECK-NEXT:    ld1 { v1.b }[11], [x9]112; CHECK-NEXT:    tbz w8, #12, .LBB0_15113; CHECK-NEXT:  .LBB0_30: // %cond.load34114; CHECK-NEXT:    add x9, x0, #12115; CHECK-NEXT:    ld1 { v1.b }[12], [x9]116; CHECK-NEXT:    tbz w8, #13, .LBB0_16117; CHECK-NEXT:  .LBB0_31: // %cond.load37118; CHECK-NEXT:    add x9, x0, #13119; CHECK-NEXT:    ld1 { v1.b }[13], [x9]120; CHECK-NEXT:    tbz w8, #14, .LBB0_17121; CHECK-NEXT:  .LBB0_32: // %cond.load40122; CHECK-NEXT:    add x9, x0, #14123; CHECK-NEXT:    ld1 { v1.b }[14], [x9]124; CHECK-NEXT:    tbz w8, #15, .LBB0_18125; CHECK-NEXT:  .LBB0_33: // %cond.load43126; CHECK-NEXT:    add x9, x0, #15127; CHECK-NEXT:    ld1 { v1.b }[15], [x9]128; CHECK-NEXT:    tbnz w8, #16, .LBB0_19129; CHECK-NEXT:  .LBB0_34:130; CHECK-NEXT:    // implicit-def: $q2131; CHECK-NEXT:    tbz w8, #17, .LBB0_36132; CHECK-NEXT:  .LBB0_35: // %cond.load49133; CHECK-NEXT:    add x9, x0, #17134; CHECK-NEXT:    ld1 { v2.b }[1], [x9]135; CHECK-NEXT:  .LBB0_36: // %else50136; CHECK-NEXT:    tbnz w8, #18, .LBB0_52137; CHECK-NEXT:  // %bb.37: // %else53138; CHECK-NEXT:    tbnz w8, #19, .LBB0_53139; CHECK-NEXT:  .LBB0_38: // %else56140; CHECK-NEXT:    tbnz w8, #20, .LBB0_54141; CHECK-NEXT:  .LBB0_39: // %else59142; CHECK-NEXT:    tbnz w8, #21, .LBB0_55143; CHECK-NEXT:  .LBB0_40: // %else62144; CHECK-NEXT:    tbnz w8, #22, .LBB0_56145; CHECK-NEXT:  .LBB0_41: // %else65146; CHECK-NEXT:    tbnz w8, #23, .LBB0_57147; CHECK-NEXT:  .LBB0_42: // %else68148; CHECK-NEXT:    tbnz w8, #24, .LBB0_58149; CHECK-NEXT:  .LBB0_43: // %else71150; CHECK-NEXT:    tbnz w8, #25, .LBB0_59151; CHECK-NEXT:  .LBB0_44: // %else74152; CHECK-NEXT:    tbnz w8, #26, .LBB0_60153; CHECK-NEXT:  .LBB0_45: // %else77154; CHECK-NEXT:    tbnz w8, #27, .LBB0_61155; CHECK-NEXT:  .LBB0_46: // %else80156; CHECK-NEXT:    tbnz w8, #28, .LBB0_62157; CHECK-NEXT:  .LBB0_47: // %else83158; CHECK-NEXT:    tbnz w8, #29, .LBB0_63159; CHECK-NEXT:  .LBB0_48: // %else86160; CHECK-NEXT:    tbnz w8, #30, .LBB0_64161; CHECK-NEXT:  .LBB0_49: // %else89162; CHECK-NEXT:    tbz w8, #31, .LBB0_51163; CHECK-NEXT:  .LBB0_50: // %cond.load91164; CHECK-NEXT:    add x8, x0, #31165; CHECK-NEXT:    ld1 { v2.b }[15], [x8]166; CHECK-NEXT:  .LBB0_51: // %else92167; CHECK-NEXT:    uzp1 v0.16b, v1.16b, v2.16b168; CHECK-NEXT:    uzp2 v1.16b, v1.16b, v2.16b169; CHECK-NEXT:    ret170; CHECK-NEXT:  .LBB0_52: // %cond.load52171; CHECK-NEXT:    add x9, x0, #18172; CHECK-NEXT:    ld1 { v2.b }[2], [x9]173; CHECK-NEXT:    tbz w8, #19, .LBB0_38174; CHECK-NEXT:  .LBB0_53: // %cond.load55175; CHECK-NEXT:    add x9, x0, #19176; CHECK-NEXT:    ld1 { v2.b }[3], [x9]177; CHECK-NEXT:    tbz w8, #20, .LBB0_39178; CHECK-NEXT:  .LBB0_54: // %cond.load58179; CHECK-NEXT:    add x9, x0, #20180; CHECK-NEXT:    ld1 { v2.b }[4], [x9]181; CHECK-NEXT:    tbz w8, #21, .LBB0_40182; CHECK-NEXT:  .LBB0_55: // %cond.load61183; CHECK-NEXT:    add x9, x0, #21184; CHECK-NEXT:    ld1 { v2.b }[5], [x9]185; CHECK-NEXT:    tbz w8, #22, .LBB0_41186; CHECK-NEXT:  .LBB0_56: // %cond.load64187; CHECK-NEXT:    add x9, x0, #22188; CHECK-NEXT:    ld1 { v2.b }[6], [x9]189; CHECK-NEXT:    tbz w8, #23, .LBB0_42190; CHECK-NEXT:  .LBB0_57: // %cond.load67191; CHECK-NEXT:    add x9, x0, #23192; CHECK-NEXT:    ld1 { v2.b }[7], [x9]193; CHECK-NEXT:    tbz w8, #24, .LBB0_43194; CHECK-NEXT:  .LBB0_58: // %cond.load70195; CHECK-NEXT:    add x9, x0, #24196; CHECK-NEXT:    ld1 { v2.b }[8], [x9]197; CHECK-NEXT:    tbz w8, #25, .LBB0_44198; CHECK-NEXT:  .LBB0_59: // %cond.load73199; CHECK-NEXT:    add x9, x0, #25200; CHECK-NEXT:    ld1 { v2.b }[9], [x9]201; CHECK-NEXT:    tbz w8, #26, .LBB0_45202; CHECK-NEXT:  .LBB0_60: // %cond.load76203; CHECK-NEXT:    add x9, x0, #26204; CHECK-NEXT:    ld1 { v2.b }[10], [x9]205; CHECK-NEXT:    tbz w8, #27, .LBB0_46206; CHECK-NEXT:  .LBB0_61: // %cond.load79207; CHECK-NEXT:    add x9, x0, #27208; CHECK-NEXT:    ld1 { v2.b }[11], [x9]209; CHECK-NEXT:    tbz w8, #28, .LBB0_47210; CHECK-NEXT:  .LBB0_62: // %cond.load82211; CHECK-NEXT:    add x9, x0, #28212; CHECK-NEXT:    ld1 { v2.b }[12], [x9]213; CHECK-NEXT:    tbz w8, #29, .LBB0_48214; CHECK-NEXT:  .LBB0_63: // %cond.load85215; CHECK-NEXT:    add x9, x0, #29216; CHECK-NEXT:    ld1 { v2.b }[13], [x9]217; CHECK-NEXT:    tbz w8, #30, .LBB0_49218; CHECK-NEXT:  .LBB0_64: // %cond.load88219; CHECK-NEXT:    add x9, x0, #30220; CHECK-NEXT:    ld1 { v2.b }[14], [x9]221; CHECK-NEXT:    tbnz w8, #31, .LBB0_50222; CHECK-NEXT:    b .LBB0_51223  %interleaved.mask = call <32 x i1> @llvm.vector.interleave2.v32i1(<16 x i1> %mask, <16 x i1> %mask)224  %wide.masked.vec = call <32 x i8> @llvm.masked.load.v32i8.p0(ptr %p, i32 1, <32 x i1> %interleaved.mask, <32 x i8> poison)225  %deinterleaved.vec = call { <16 x i8>, <16 x i8> } @llvm.vector.deinterleave2.v32i8(<32 x i8> %wide.masked.vec)226  ret { <16 x i8>, <16 x i8> } %deinterleaved.vec227}228 229define { <8 x i16>, <8 x i16> } @foo_ld2_v8i16(<8 x i1> %mask, ptr %p) {230; CHECK-LABEL: foo_ld2_v8i16:231; CHECK:       // %bb.0:232; CHECK-NEXT:    // kill: def $d0 killed $d0 def $q0233; CHECK-NEXT:    adrp x8, .LCPI1_0234; CHECK-NEXT:    zip1 v0.16b, v0.16b, v0.16b235; CHECK-NEXT:    ldr q1, [x8, :lo12:.LCPI1_0]236; CHECK-NEXT:    shl v0.16b, v0.16b, #7237; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0238; CHECK-NEXT:    and v0.16b, v0.16b, v1.16b239; CHECK-NEXT:    ext v1.16b, v0.16b, v0.16b, #8240; CHECK-NEXT:    zip1 v0.16b, v0.16b, v1.16b241; CHECK-NEXT:    addv h0, v0.8h242; CHECK-NEXT:    fmov w8, s0243; CHECK-NEXT:    tbz w8, #0, .LBB1_2244; CHECK-NEXT:  // %bb.1: // %cond.load245; CHECK-NEXT:    ldr h1, [x0]246; CHECK-NEXT:    tbnz w8, #1, .LBB1_3247; CHECK-NEXT:    b .LBB1_4248; CHECK-NEXT:  .LBB1_2:249; CHECK-NEXT:    // implicit-def: $q1250; CHECK-NEXT:    tbz w8, #1, .LBB1_4251; CHECK-NEXT:  .LBB1_3: // %cond.load1252; CHECK-NEXT:    add x9, x0, #2253; CHECK-NEXT:    ld1 { v1.h }[1], [x9]254; CHECK-NEXT:  .LBB1_4: // %else2255; CHECK-NEXT:    tbnz w8, #2, .LBB1_12256; CHECK-NEXT:  // %bb.5: // %else5257; CHECK-NEXT:    tbnz w8, #3, .LBB1_13258; CHECK-NEXT:  .LBB1_6: // %else8259; CHECK-NEXT:    tbnz w8, #4, .LBB1_14260; CHECK-NEXT:  .LBB1_7: // %else11261; CHECK-NEXT:    tbnz w8, #5, .LBB1_15262; CHECK-NEXT:  .LBB1_8: // %else14263; CHECK-NEXT:    tbnz w8, #6, .LBB1_16264; CHECK-NEXT:  .LBB1_9: // %else17265; CHECK-NEXT:    tbnz w8, #7, .LBB1_17266; CHECK-NEXT:  .LBB1_10: // %else20267; CHECK-NEXT:    tbz w8, #8, .LBB1_18268; CHECK-NEXT:  .LBB1_11: // %cond.load22269; CHECK-NEXT:    add x9, x0, #16270; CHECK-NEXT:    ld1 { v2.h }[0], [x9]271; CHECK-NEXT:    tbnz w8, #9, .LBB1_19272; CHECK-NEXT:    b .LBB1_20273; CHECK-NEXT:  .LBB1_12: // %cond.load4274; CHECK-NEXT:    add x9, x0, #4275; CHECK-NEXT:    ld1 { v1.h }[2], [x9]276; CHECK-NEXT:    tbz w8, #3, .LBB1_6277; CHECK-NEXT:  .LBB1_13: // %cond.load7278; CHECK-NEXT:    add x9, x0, #6279; CHECK-NEXT:    ld1 { v1.h }[3], [x9]280; CHECK-NEXT:    tbz w8, #4, .LBB1_7281; CHECK-NEXT:  .LBB1_14: // %cond.load10282; CHECK-NEXT:    add x9, x0, #8283; CHECK-NEXT:    ld1 { v1.h }[4], [x9]284; CHECK-NEXT:    tbz w8, #5, .LBB1_8285; CHECK-NEXT:  .LBB1_15: // %cond.load13286; CHECK-NEXT:    add x9, x0, #10287; CHECK-NEXT:    ld1 { v1.h }[5], [x9]288; CHECK-NEXT:    tbz w8, #6, .LBB1_9289; CHECK-NEXT:  .LBB1_16: // %cond.load16290; CHECK-NEXT:    add x9, x0, #12291; CHECK-NEXT:    ld1 { v1.h }[6], [x9]292; CHECK-NEXT:    tbz w8, #7, .LBB1_10293; CHECK-NEXT:  .LBB1_17: // %cond.load19294; CHECK-NEXT:    add x9, x0, #14295; CHECK-NEXT:    ld1 { v1.h }[7], [x9]296; CHECK-NEXT:    tbnz w8, #8, .LBB1_11297; CHECK-NEXT:  .LBB1_18:298; CHECK-NEXT:    // implicit-def: $q2299; CHECK-NEXT:    tbz w8, #9, .LBB1_20300; CHECK-NEXT:  .LBB1_19: // %cond.load25301; CHECK-NEXT:    add x9, x0, #18302; CHECK-NEXT:    ld1 { v2.h }[1], [x9]303; CHECK-NEXT:  .LBB1_20: // %else26304; CHECK-NEXT:    tbnz w8, #10, .LBB1_28305; CHECK-NEXT:  // %bb.21: // %else29306; CHECK-NEXT:    tbnz w8, #11, .LBB1_29307; CHECK-NEXT:  .LBB1_22: // %else32308; CHECK-NEXT:    tbnz w8, #12, .LBB1_30309; CHECK-NEXT:  .LBB1_23: // %else35310; CHECK-NEXT:    tbnz w8, #13, .LBB1_31311; CHECK-NEXT:  .LBB1_24: // %else38312; CHECK-NEXT:    tbnz w8, #14, .LBB1_32313; CHECK-NEXT:  .LBB1_25: // %else41314; CHECK-NEXT:    tbz w8, #15, .LBB1_27315; CHECK-NEXT:  .LBB1_26: // %cond.load43316; CHECK-NEXT:    add x8, x0, #30317; CHECK-NEXT:    ld1 { v2.h }[7], [x8]318; CHECK-NEXT:  .LBB1_27: // %else44319; CHECK-NEXT:    uzp1 v0.8h, v1.8h, v2.8h320; CHECK-NEXT:    uzp2 v1.8h, v1.8h, v2.8h321; CHECK-NEXT:    ret322; CHECK-NEXT:  .LBB1_28: // %cond.load28323; CHECK-NEXT:    add x9, x0, #20324; CHECK-NEXT:    ld1 { v2.h }[2], [x9]325; CHECK-NEXT:    tbz w8, #11, .LBB1_22326; CHECK-NEXT:  .LBB1_29: // %cond.load31327; CHECK-NEXT:    add x9, x0, #22328; CHECK-NEXT:    ld1 { v2.h }[3], [x9]329; CHECK-NEXT:    tbz w8, #12, .LBB1_23330; CHECK-NEXT:  .LBB1_30: // %cond.load34331; CHECK-NEXT:    add x9, x0, #24332; CHECK-NEXT:    ld1 { v2.h }[4], [x9]333; CHECK-NEXT:    tbz w8, #13, .LBB1_24334; CHECK-NEXT:  .LBB1_31: // %cond.load37335; CHECK-NEXT:    add x9, x0, #26336; CHECK-NEXT:    ld1 { v2.h }[5], [x9]337; CHECK-NEXT:    tbz w8, #14, .LBB1_25338; CHECK-NEXT:  .LBB1_32: // %cond.load40339; CHECK-NEXT:    add x9, x0, #28340; CHECK-NEXT:    ld1 { v2.h }[6], [x9]341; CHECK-NEXT:    tbnz w8, #15, .LBB1_26342; CHECK-NEXT:    b .LBB1_27343  %interleaved.mask = call <16 x i1> @llvm.vector.interleave2.v16i1(<8 x i1> %mask, <8 x i1> %mask)344  %wide.masked.vec = call <16 x i16> @llvm.masked.load.v16i16.p0(ptr %p, i32 2, <16 x i1> %interleaved.mask, <16 x i16> poison)345  %deinterleaved.vec = call { <8 x i16>, <8 x i16> } @llvm.vector.deinterleave2.v16i16(<16 x i16> %wide.masked.vec)346  ret { <8 x i16>, <8 x i16> } %deinterleaved.vec347}348 349define { <4 x float>, <4 x float> } @foo_ld2_v4f32(<4 x i1> %mask, ptr %p) {350; CHECK-LABEL: foo_ld2_v4f32:351; CHECK:       // %bb.0:352; CHECK-NEXT:    uzp1 v0.8b, v0.8b, v0.8b353; CHECK-NEXT:    adrp x8, .LCPI2_0354; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI2_0]355; CHECK-NEXT:    zip1 v0.8b, v0.8b, v0.8b356; CHECK-NEXT:    shl v0.8b, v0.8b, #7357; CHECK-NEXT:    cmlt v0.8b, v0.8b, #0358; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b359; CHECK-NEXT:    addv b0, v0.8b360; CHECK-NEXT:    fmov w8, s0361; CHECK-NEXT:    tbz w8, #0, .LBB2_2362; CHECK-NEXT:  // %bb.1: // %cond.load363; CHECK-NEXT:    ldr s1, [x0]364; CHECK-NEXT:    tbnz w8, #1, .LBB2_3365; CHECK-NEXT:    b .LBB2_4366; CHECK-NEXT:  .LBB2_2:367; CHECK-NEXT:    // implicit-def: $q1368; CHECK-NEXT:    tbz w8, #1, .LBB2_4369; CHECK-NEXT:  .LBB2_3: // %cond.load1370; CHECK-NEXT:    add x9, x0, #4371; CHECK-NEXT:    ld1 { v1.s }[1], [x9]372; CHECK-NEXT:  .LBB2_4: // %else2373; CHECK-NEXT:    tbnz w8, #2, .LBB2_8374; CHECK-NEXT:  // %bb.5: // %else5375; CHECK-NEXT:    tbnz w8, #3, .LBB2_9376; CHECK-NEXT:  .LBB2_6: // %else8377; CHECK-NEXT:    tbz w8, #4, .LBB2_10378; CHECK-NEXT:  .LBB2_7: // %cond.load10379; CHECK-NEXT:    add x9, x0, #16380; CHECK-NEXT:    ld1 { v2.s }[0], [x9]381; CHECK-NEXT:    tbnz w8, #5, .LBB2_11382; CHECK-NEXT:    b .LBB2_12383; CHECK-NEXT:  .LBB2_8: // %cond.load4384; CHECK-NEXT:    add x9, x0, #8385; CHECK-NEXT:    ld1 { v1.s }[2], [x9]386; CHECK-NEXT:    tbz w8, #3, .LBB2_6387; CHECK-NEXT:  .LBB2_9: // %cond.load7388; CHECK-NEXT:    add x9, x0, #12389; CHECK-NEXT:    ld1 { v1.s }[3], [x9]390; CHECK-NEXT:    tbnz w8, #4, .LBB2_7391; CHECK-NEXT:  .LBB2_10:392; CHECK-NEXT:    // implicit-def: $q2393; CHECK-NEXT:    tbz w8, #5, .LBB2_12394; CHECK-NEXT:  .LBB2_11: // %cond.load13395; CHECK-NEXT:    add x9, x0, #20396; CHECK-NEXT:    ld1 { v2.s }[1], [x9]397; CHECK-NEXT:  .LBB2_12: // %else14398; CHECK-NEXT:    tbnz w8, #6, .LBB2_16399; CHECK-NEXT:  // %bb.13: // %else17400; CHECK-NEXT:    tbz w8, #7, .LBB2_15401; CHECK-NEXT:  .LBB2_14: // %cond.load19402; CHECK-NEXT:    add x8, x0, #28403; CHECK-NEXT:    ld1 { v2.s }[3], [x8]404; CHECK-NEXT:  .LBB2_15: // %else20405; CHECK-NEXT:    uzp1 v0.4s, v1.4s, v2.4s406; CHECK-NEXT:    uzp2 v1.4s, v1.4s, v2.4s407; CHECK-NEXT:    ret408; CHECK-NEXT:  .LBB2_16: // %cond.load16409; CHECK-NEXT:    add x9, x0, #24410; CHECK-NEXT:    ld1 { v2.s }[2], [x9]411; CHECK-NEXT:    tbnz w8, #7, .LBB2_14412; CHECK-NEXT:    b .LBB2_15413  %interleaved.mask = call <8 x i1> @llvm.vector.interleave2.v8i1(<4 x i1> %mask, <4 x i1> %mask)414  %wide.masked.vec = call <8 x float> @llvm.masked.load.v8f32.p0(ptr %p, i32 4, <8 x i1> %interleaved.mask, <8 x float> poison)415  %deinterleaved.vec = call { <4 x float>, <4 x float> } @llvm.vector.deinterleave2.v16f32(<8 x float> %wide.masked.vec)416  ret { <4 x float>, <4 x float> } %deinterleaved.vec417}418 419define { <2 x double>, <2 x double> } @foo_ld2_v2f64(<2 x i1> %mask, ptr %p) {420; CHECK-LABEL: foo_ld2_v2f64:421; CHECK:       // %bb.0:422; CHECK-NEXT:    uzp1 v0.4h, v0.4h, v0.4h423; CHECK-NEXT:    adrp x8, .LCPI3_0424; CHECK-NEXT:    ldr d1, [x8, :lo12:.LCPI3_0]425; CHECK-NEXT:    zip1 v0.4h, v0.4h, v0.4h426; CHECK-NEXT:    shl v0.4h, v0.4h, #15427; CHECK-NEXT:    cmlt v0.4h, v0.4h, #0428; CHECK-NEXT:    and v0.8b, v0.8b, v1.8b429; CHECK-NEXT:    addv h0, v0.4h430; CHECK-NEXT:    fmov w8, s0431; CHECK-NEXT:    tbz w8, #0, .LBB3_2432; CHECK-NEXT:  // %bb.1: // %cond.load433; CHECK-NEXT:    ldr d1, [x0]434; CHECK-NEXT:    tbnz w8, #1, .LBB3_3435; CHECK-NEXT:    b .LBB3_4436; CHECK-NEXT:  .LBB3_2:437; CHECK-NEXT:    // implicit-def: $q1438; CHECK-NEXT:    tbz w8, #1, .LBB3_4439; CHECK-NEXT:  .LBB3_3: // %cond.load1440; CHECK-NEXT:    add x9, x0, #8441; CHECK-NEXT:    ld1 { v1.d }[1], [x9]442; CHECK-NEXT:  .LBB3_4: // %else2443; CHECK-NEXT:    tbz w8, #2, .LBB3_6444; CHECK-NEXT:  // %bb.5: // %cond.load4445; CHECK-NEXT:    add x9, x0, #16446; CHECK-NEXT:    ld1 { v2.d }[0], [x9]447; CHECK-NEXT:    tbnz w8, #3, .LBB3_7448; CHECK-NEXT:    b .LBB3_8449; CHECK-NEXT:  .LBB3_6:450; CHECK-NEXT:    // implicit-def: $q2451; CHECK-NEXT:    tbz w8, #3, .LBB3_8452; CHECK-NEXT:  .LBB3_7: // %cond.load7453; CHECK-NEXT:    add x8, x0, #24454; CHECK-NEXT:    ld1 { v2.d }[1], [x8]455; CHECK-NEXT:  .LBB3_8: // %else8456; CHECK-NEXT:    zip1 v0.2d, v1.2d, v2.2d457; CHECK-NEXT:    zip2 v1.2d, v1.2d, v2.2d458; CHECK-NEXT:    ret459  %interleaved.mask = call <4 x i1> @llvm.vector.interleave2.v4i1(<2 x i1> %mask, <2 x i1> %mask)460  %wide.masked.vec = call <4 x double> @llvm.masked.load.v4f64.p0(ptr %p, i32 8, <4 x i1> %interleaved.mask, <4 x double> poison)461  %deinterleaved.vec = call { <2 x double>, <2 x double> } @llvm.vector.deinterleave2.v4f64(<4 x double> %wide.masked.vec)462  ret { <2 x double>, <2 x double> } %deinterleaved.vec463}464 465