brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.0 KiB · fdd0a6a Raw
893 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 -mattr=+sve2 %s -o - | FileCheck %s3 4define <16 x i1> @whilewr_8(ptr %a, ptr %b) {5; CHECK-LABEL: whilewr_8:6; CHECK:       // %bb.0: // %entry7; CHECK-NEXT:    whilewr p0.b, x0, x18; CHECK-NEXT:    mov z0.b, p0/z, #-1 // =0xffffffffffffffff9; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z010; CHECK-NEXT:    ret11entry:12  %0 = call <16 x i1> @llvm.loop.dependence.war.mask.v16i1(ptr %a, ptr %b, i64 1)13  ret <16 x i1> %014}15 16define <8 x i1> @whilewr_16(ptr %a, ptr %b) {17; CHECK-LABEL: whilewr_16:18; CHECK:       // %bb.0: // %entry19; CHECK-NEXT:    whilewr p0.h, x0, x120; CHECK-NEXT:    mov z0.h, p0/z, #-1 // =0xffffffffffffffff21; CHECK-NEXT:    xtn v0.8b, v0.8h22; CHECK-NEXT:    ret23entry:24  %0 = call <8 x i1> @llvm.loop.dependence.war.mask.v8i1(ptr %a, ptr %b, i64 2)25  ret <8 x i1> %026}27 28define <4 x i1> @whilewr_32(ptr %a, ptr %b) {29; CHECK-LABEL: whilewr_32:30; CHECK:       // %bb.0: // %entry31; CHECK-NEXT:    whilewr p0.s, x0, x132; CHECK-NEXT:    mov z0.s, p0/z, #-1 // =0xffffffffffffffff33; CHECK-NEXT:    xtn v0.4h, v0.4s34; CHECK-NEXT:    ret35entry:36  %0 = call <4 x i1> @llvm.loop.dependence.war.mask.v4i1(ptr %a, ptr %b, i64 4)37  ret <4 x i1> %038}39 40define <2 x i1> @whilewr_64(ptr %a, ptr %b) {41; CHECK-LABEL: whilewr_64:42; CHECK:       // %bb.0: // %entry43; CHECK-NEXT:    whilewr p0.d, x0, x144; CHECK-NEXT:    mov z0.d, p0/z, #-1 // =0xffffffffffffffff45; CHECK-NEXT:    xtn v0.2s, v0.2d46; CHECK-NEXT:    ret47entry:48  %0 = call <2 x i1> @llvm.loop.dependence.war.mask.v2i1(ptr %a, ptr %b, i64 8)49  ret <2 x i1> %050}51 52define <16 x i1> @whilerw_8(ptr %a, ptr %b) {53; CHECK-LABEL: whilerw_8:54; CHECK:       // %bb.0: // %entry55; CHECK-NEXT:    whilerw p0.b, x0, x156; CHECK-NEXT:    mov z0.b, p0/z, #-1 // =0xffffffffffffffff57; CHECK-NEXT:    // kill: def $q0 killed $q0 killed $z058; CHECK-NEXT:    ret59entry:60  %0 = call <16 x i1> @llvm.loop.dependence.raw.mask.v16i1(ptr %a, ptr %b, i64 1)61  ret <16 x i1> %062}63 64define <8 x i1> @whilerw_16(ptr %a, ptr %b) {65; CHECK-LABEL: whilerw_16:66; CHECK:       // %bb.0: // %entry67; CHECK-NEXT:    whilerw p0.h, x0, x168; CHECK-NEXT:    mov z0.h, p0/z, #-1 // =0xffffffffffffffff69; CHECK-NEXT:    xtn v0.8b, v0.8h70; CHECK-NEXT:    ret71entry:72  %0 = call <8 x i1> @llvm.loop.dependence.raw.mask.v8i1(ptr %a, ptr %b, i64 2)73  ret <8 x i1> %074}75 76define <4 x i1> @whilerw_32(ptr %a, ptr %b) {77; CHECK-LABEL: whilerw_32:78; CHECK:       // %bb.0: // %entry79; CHECK-NEXT:    whilerw p0.s, x0, x180; CHECK-NEXT:    mov z0.s, p0/z, #-1 // =0xffffffffffffffff81; CHECK-NEXT:    xtn v0.4h, v0.4s82; CHECK-NEXT:    ret83entry:84  %0 = call <4 x i1> @llvm.loop.dependence.raw.mask.v4i1(ptr %a, ptr %b, i64 4)85  ret <4 x i1> %086}87 88define <2 x i1> @whilerw_64(ptr %a, ptr %b) {89; CHECK-LABEL: whilerw_64:90; CHECK:       // %bb.0: // %entry91; CHECK-NEXT:    whilerw p0.d, x0, x192; CHECK-NEXT:    mov z0.d, p0/z, #-1 // =0xffffffffffffffff93; CHECK-NEXT:    xtn v0.2s, v0.2d94; CHECK-NEXT:    ret95entry:96  %0 = call <2 x i1> @llvm.loop.dependence.raw.mask.v2i1(ptr %a, ptr %b, i64 8)97  ret <2 x i1> %098}99 100define <32 x i1> @whilewr_8_split(ptr %a, ptr %b) {101; CHECK-LABEL: whilewr_8_split:102; CHECK:       // %bb.0: // %entry103; CHECK-NEXT:    add x9, x0, #16104; CHECK-NEXT:    whilewr p0.b, x0, x1105; CHECK-NEXT:    whilewr p1.b, x9, x1106; CHECK-NEXT:    adrp x9, .LCPI8_0107; CHECK-NEXT:    mov z0.b, p0/z, #-1 // =0xffffffffffffffff108; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI8_0]109; CHECK-NEXT:    mov z1.b, p1/z, #-1 // =0xffffffffffffffff110; CHECK-NEXT:    shl v0.16b, v0.16b, #7111; CHECK-NEXT:    shl v1.16b, v1.16b, #7112; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0113; CHECK-NEXT:    cmlt v1.16b, v1.16b, #0114; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b115; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b116; CHECK-NEXT:    ext v2.16b, v0.16b, v0.16b, #8117; CHECK-NEXT:    ext v3.16b, v1.16b, v1.16b, #8118; CHECK-NEXT:    zip1 v0.16b, v0.16b, v2.16b119; CHECK-NEXT:    zip1 v1.16b, v1.16b, v3.16b120; CHECK-NEXT:    addv h0, v0.8h121; CHECK-NEXT:    addv h1, v1.8h122; CHECK-NEXT:    str h0, [x8]123; CHECK-NEXT:    str h1, [x8, #2]124; CHECK-NEXT:    ret125entry:126  %0 = call <32 x i1> @llvm.loop.dependence.war.mask.v32i1(ptr %a, ptr %b, i64 1)127  ret <32 x i1> %0128}129 130define <64 x i1> @whilewr_8_split2(ptr %a, ptr %b) {131; CHECK-LABEL: whilewr_8_split2:132; CHECK:       // %bb.0: // %entry133; CHECK-NEXT:    add x9, x0, #48134; CHECK-NEXT:    whilewr p0.b, x0, x1135; CHECK-NEXT:    add x10, x0, #16136; CHECK-NEXT:    whilewr p1.b, x9, x1137; CHECK-NEXT:    add x9, x0, #32138; CHECK-NEXT:    mov z0.b, p0/z, #-1 // =0xffffffffffffffff139; CHECK-NEXT:    whilewr p0.b, x9, x1140; CHECK-NEXT:    adrp x9, .LCPI9_0141; CHECK-NEXT:    mov z1.b, p1/z, #-1 // =0xffffffffffffffff142; CHECK-NEXT:    whilewr p1.b, x10, x1143; CHECK-NEXT:    ldr q4, [x9, :lo12:.LCPI9_0]144; CHECK-NEXT:    mov z2.b, p0/z, #-1 // =0xffffffffffffffff145; CHECK-NEXT:    mov z3.b, p1/z, #-1 // =0xffffffffffffffff146; CHECK-NEXT:    shl v0.16b, v0.16b, #7147; CHECK-NEXT:    shl v1.16b, v1.16b, #7148; CHECK-NEXT:    shl v2.16b, v2.16b, #7149; CHECK-NEXT:    shl v3.16b, v3.16b, #7150; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0151; CHECK-NEXT:    cmlt v1.16b, v1.16b, #0152; CHECK-NEXT:    cmlt v2.16b, v2.16b, #0153; CHECK-NEXT:    cmlt v3.16b, v3.16b, #0154; CHECK-NEXT:    and v0.16b, v0.16b, v4.16b155; CHECK-NEXT:    and v1.16b, v1.16b, v4.16b156; CHECK-NEXT:    and v2.16b, v2.16b, v4.16b157; CHECK-NEXT:    and v3.16b, v3.16b, v4.16b158; CHECK-NEXT:    ext v4.16b, v0.16b, v0.16b, #8159; CHECK-NEXT:    ext v5.16b, v1.16b, v1.16b, #8160; CHECK-NEXT:    ext v6.16b, v2.16b, v2.16b, #8161; CHECK-NEXT:    ext v7.16b, v3.16b, v3.16b, #8162; CHECK-NEXT:    zip1 v0.16b, v0.16b, v4.16b163; CHECK-NEXT:    zip1 v1.16b, v1.16b, v5.16b164; CHECK-NEXT:    zip1 v2.16b, v2.16b, v6.16b165; CHECK-NEXT:    zip1 v3.16b, v3.16b, v7.16b166; CHECK-NEXT:    addv h0, v0.8h167; CHECK-NEXT:    addv h1, v1.8h168; CHECK-NEXT:    addv h2, v2.8h169; CHECK-NEXT:    addv h3, v3.8h170; CHECK-NEXT:    str h0, [x8]171; CHECK-NEXT:    str h1, [x8, #6]172; CHECK-NEXT:    str h2, [x8, #4]173; CHECK-NEXT:    str h3, [x8, #2]174; CHECK-NEXT:    ret175entry:176  %0 = call <64 x i1> @llvm.loop.dependence.war.mask.v64i1(ptr %a, ptr %b, i64 1)177  ret <64 x i1> %0178}179 180define <16 x i1> @whilewr_16_expand(ptr %a, ptr %b) {181; CHECK-LABEL: whilewr_16_expand:182; CHECK:       // %bb.0: // %entry183; CHECK-NEXT:    index z0.d, #0, #1184; CHECK-NEXT:    sub x8, x1, x0185; CHECK-NEXT:    add x8, x8, x8, lsr #63186; CHECK-NEXT:    asr x8, x8, #1187; CHECK-NEXT:    mov z1.d, z0.d188; CHECK-NEXT:    mov z2.d, z0.d189; CHECK-NEXT:    mov z4.d, z0.d190; CHECK-NEXT:    mov z5.d, z0.d191; CHECK-NEXT:    mov z6.d, z0.d192; CHECK-NEXT:    mov z7.d, z0.d193; CHECK-NEXT:    mov z16.d, z0.d194; CHECK-NEXT:    dup v3.2d, x8195; CHECK-NEXT:    cmp x8, #1196; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc197; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa198; CHECK-NEXT:    add z4.d, z4.d, #8 // =0x8199; CHECK-NEXT:    add z5.d, z5.d, #6 // =0x6200; CHECK-NEXT:    add z6.d, z6.d, #4 // =0x4201; CHECK-NEXT:    add z7.d, z7.d, #2 // =0x2202; CHECK-NEXT:    add z16.d, z16.d, #14 // =0xe203; CHECK-NEXT:    cmhi v0.2d, v3.2d, v0.2d204; CHECK-NEXT:    cset w8, lt205; CHECK-NEXT:    cmhi v1.2d, v3.2d, v1.2d206; CHECK-NEXT:    cmhi v2.2d, v3.2d, v2.2d207; CHECK-NEXT:    cmhi v4.2d, v3.2d, v4.2d208; CHECK-NEXT:    cmhi v5.2d, v3.2d, v5.2d209; CHECK-NEXT:    cmhi v6.2d, v3.2d, v6.2d210; CHECK-NEXT:    cmhi v16.2d, v3.2d, v16.2d211; CHECK-NEXT:    cmhi v3.2d, v3.2d, v7.2d212; CHECK-NEXT:    uzp1 v2.4s, v4.4s, v2.4s213; CHECK-NEXT:    uzp1 v4.4s, v6.4s, v5.4s214; CHECK-NEXT:    uzp1 v1.4s, v1.4s, v16.4s215; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v3.4s216; CHECK-NEXT:    uzp1 v1.8h, v2.8h, v1.8h217; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v4.8h218; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v1.16b219; CHECK-NEXT:    dup v1.16b, w8220; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b221; CHECK-NEXT:    ret222entry:223  %0 = call <16 x i1> @llvm.loop.dependence.war.mask.v16i1(ptr %a, ptr %b, i64 2)224  ret <16 x i1> %0225}226 227define <32 x i1> @whilewr_16_expand2(ptr %a, ptr %b) {228; CHECK-LABEL: whilewr_16_expand2:229; CHECK:       // %bb.0: // %entry230; CHECK-NEXT:    sub x9, x1, x0231; CHECK-NEXT:    index z0.d, #0, #1232; CHECK-NEXT:    sub x10, x9, #32233; CHECK-NEXT:    add x9, x9, x9, lsr #63234; CHECK-NEXT:    add x10, x10, x10, lsr #63235; CHECK-NEXT:    asr x9, x9, #1236; CHECK-NEXT:    asr x10, x10, #1237; CHECK-NEXT:    mov z1.d, z0.d238; CHECK-NEXT:    mov z2.d, z0.d239; CHECK-NEXT:    mov z3.d, z0.d240; CHECK-NEXT:    mov z4.d, z0.d241; CHECK-NEXT:    mov z5.d, z0.d242; CHECK-NEXT:    mov z6.d, z0.d243; CHECK-NEXT:    dup v7.2d, x9244; CHECK-NEXT:    dup v16.2d, x10245; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc246; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa247; CHECK-NEXT:    cmp x10, #1248; CHECK-NEXT:    add z3.d, z3.d, #8 // =0x8249; CHECK-NEXT:    add z4.d, z4.d, #6 // =0x6250; CHECK-NEXT:    add z5.d, z5.d, #4 // =0x4251; CHECK-NEXT:    add z6.d, z6.d, #2 // =0x2252; CHECK-NEXT:    cmhi v17.2d, v7.2d, v0.2d253; CHECK-NEXT:    cmhi v18.2d, v16.2d, v0.2d254; CHECK-NEXT:    add z0.d, z0.d, #14 // =0xe255; CHECK-NEXT:    cmhi v19.2d, v7.2d, v1.2d256; CHECK-NEXT:    cmhi v20.2d, v7.2d, v2.2d257; CHECK-NEXT:    cmhi v21.2d, v7.2d, v3.2d258; CHECK-NEXT:    cmhi v22.2d, v7.2d, v4.2d259; CHECK-NEXT:    cmhi v23.2d, v7.2d, v5.2d260; CHECK-NEXT:    cmhi v24.2d, v7.2d, v6.2d261; CHECK-NEXT:    cmhi v1.2d, v16.2d, v1.2d262; CHECK-NEXT:    cmhi v2.2d, v16.2d, v2.2d263; CHECK-NEXT:    cmhi v3.2d, v16.2d, v3.2d264; CHECK-NEXT:    cmhi v4.2d, v16.2d, v4.2d265; CHECK-NEXT:    cmhi v7.2d, v7.2d, v0.2d266; CHECK-NEXT:    cmhi v5.2d, v16.2d, v5.2d267; CHECK-NEXT:    cmhi v6.2d, v16.2d, v6.2d268; CHECK-NEXT:    cset w10, lt269; CHECK-NEXT:    cmhi v0.2d, v16.2d, v0.2d270; CHECK-NEXT:    uzp1 v16.4s, v21.4s, v20.4s271; CHECK-NEXT:    cmp x9, #1272; CHECK-NEXT:    uzp1 v20.4s, v23.4s, v22.4s273; CHECK-NEXT:    uzp1 v17.4s, v17.4s, v24.4s274; CHECK-NEXT:    cset w9, lt275; CHECK-NEXT:    uzp1 v2.4s, v3.4s, v2.4s276; CHECK-NEXT:    uzp1 v3.4s, v19.4s, v7.4s277; CHECK-NEXT:    uzp1 v4.4s, v5.4s, v4.4s278; CHECK-NEXT:    uzp1 v5.4s, v18.4s, v6.4s279; CHECK-NEXT:    uzp1 v0.4s, v1.4s, v0.4s280; CHECK-NEXT:    uzp1 v1.8h, v17.8h, v20.8h281; CHECK-NEXT:    uzp1 v3.8h, v16.8h, v3.8h282; CHECK-NEXT:    uzp1 v4.8h, v5.8h, v4.8h283; CHECK-NEXT:    uzp1 v0.8h, v2.8h, v0.8h284; CHECK-NEXT:    dup v2.16b, w9285; CHECK-NEXT:    adrp x9, .LCPI11_0286; CHECK-NEXT:    uzp1 v1.16b, v1.16b, v3.16b287; CHECK-NEXT:    dup v3.16b, w10288; CHECK-NEXT:    uzp1 v0.16b, v4.16b, v0.16b289; CHECK-NEXT:    orr v1.16b, v1.16b, v2.16b290; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI11_0]291; CHECK-NEXT:    orr v0.16b, v0.16b, v3.16b292; CHECK-NEXT:    shl v1.16b, v1.16b, #7293; CHECK-NEXT:    shl v0.16b, v0.16b, #7294; CHECK-NEXT:    cmlt v1.16b, v1.16b, #0295; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0296; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b297; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b298; CHECK-NEXT:    ext v2.16b, v1.16b, v1.16b, #8299; CHECK-NEXT:    ext v3.16b, v0.16b, v0.16b, #8300; CHECK-NEXT:    zip1 v1.16b, v1.16b, v2.16b301; CHECK-NEXT:    zip1 v0.16b, v0.16b, v3.16b302; CHECK-NEXT:    addv h1, v1.8h303; CHECK-NEXT:    addv h0, v0.8h304; CHECK-NEXT:    str h1, [x8]305; CHECK-NEXT:    str h0, [x8, #2]306; CHECK-NEXT:    ret307entry:308  %0 = call <32 x i1> @llvm.loop.dependence.war.mask.v32i1(ptr %a, ptr %b, i64 2)309  ret <32 x i1> %0310}311 312define <8 x i1> @whilewr_32_expand(ptr %a, ptr %b) {313; CHECK-LABEL: whilewr_32_expand:314; CHECK:       // %bb.0: // %entry315; CHECK-NEXT:    index z0.d, #0, #1316; CHECK-NEXT:    subs x8, x1, x0317; CHECK-NEXT:    add x9, x8, #3318; CHECK-NEXT:    csel x8, x9, x8, mi319; CHECK-NEXT:    asr x8, x8, #2320; CHECK-NEXT:    mov z2.d, z0.d321; CHECK-NEXT:    mov z3.d, z0.d322; CHECK-NEXT:    mov z4.d, z0.d323; CHECK-NEXT:    dup v1.2d, x8324; CHECK-NEXT:    cmp x8, #1325; CHECK-NEXT:    cset w8, lt326; CHECK-NEXT:    add z4.d, z4.d, #6 // =0x6327; CHECK-NEXT:    add z2.d, z2.d, #4 // =0x4328; CHECK-NEXT:    add z3.d, z3.d, #2 // =0x2329; CHECK-NEXT:    cmhi v0.2d, v1.2d, v0.2d330; CHECK-NEXT:    cmhi v4.2d, v1.2d, v4.2d331; CHECK-NEXT:    cmhi v2.2d, v1.2d, v2.2d332; CHECK-NEXT:    cmhi v1.2d, v1.2d, v3.2d333; CHECK-NEXT:    uzp1 v2.4s, v2.4s, v4.4s334; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v1.4s335; CHECK-NEXT:    dup v1.8b, w8336; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v2.8h337; CHECK-NEXT:    xtn v0.8b, v0.8h338; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b339; CHECK-NEXT:    ret340entry:341  %0 = call <8 x i1> @llvm.loop.dependence.war.mask.v8i1(ptr %a, ptr %b, i64 4)342  ret <8 x i1> %0343}344 345define <16 x i1> @whilewr_32_expand2(ptr %a, ptr %b) {346; CHECK-LABEL: whilewr_32_expand2:347; CHECK:       // %bb.0: // %entry348; CHECK-NEXT:    index z0.d, #0, #1349; CHECK-NEXT:    subs x8, x1, x0350; CHECK-NEXT:    add x9, x8, #3351; CHECK-NEXT:    csel x8, x9, x8, mi352; CHECK-NEXT:    asr x8, x8, #2353; CHECK-NEXT:    mov z1.d, z0.d354; CHECK-NEXT:    mov z2.d, z0.d355; CHECK-NEXT:    mov z4.d, z0.d356; CHECK-NEXT:    mov z5.d, z0.d357; CHECK-NEXT:    mov z6.d, z0.d358; CHECK-NEXT:    mov z7.d, z0.d359; CHECK-NEXT:    mov z16.d, z0.d360; CHECK-NEXT:    dup v3.2d, x8361; CHECK-NEXT:    cmp x8, #1362; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc363; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa364; CHECK-NEXT:    add z4.d, z4.d, #8 // =0x8365; CHECK-NEXT:    add z5.d, z5.d, #6 // =0x6366; CHECK-NEXT:    add z6.d, z6.d, #4 // =0x4367; CHECK-NEXT:    add z7.d, z7.d, #2 // =0x2368; CHECK-NEXT:    add z16.d, z16.d, #14 // =0xe369; CHECK-NEXT:    cmhi v0.2d, v3.2d, v0.2d370; CHECK-NEXT:    cset w8, lt371; CHECK-NEXT:    cmhi v1.2d, v3.2d, v1.2d372; CHECK-NEXT:    cmhi v2.2d, v3.2d, v2.2d373; CHECK-NEXT:    cmhi v4.2d, v3.2d, v4.2d374; CHECK-NEXT:    cmhi v5.2d, v3.2d, v5.2d375; CHECK-NEXT:    cmhi v6.2d, v3.2d, v6.2d376; CHECK-NEXT:    cmhi v16.2d, v3.2d, v16.2d377; CHECK-NEXT:    cmhi v3.2d, v3.2d, v7.2d378; CHECK-NEXT:    uzp1 v2.4s, v4.4s, v2.4s379; CHECK-NEXT:    uzp1 v4.4s, v6.4s, v5.4s380; CHECK-NEXT:    uzp1 v1.4s, v1.4s, v16.4s381; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v3.4s382; CHECK-NEXT:    uzp1 v1.8h, v2.8h, v1.8h383; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v4.8h384; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v1.16b385; CHECK-NEXT:    dup v1.16b, w8386; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b387; CHECK-NEXT:    ret388entry:389  %0 = call <16 x i1> @llvm.loop.dependence.war.mask.v16i1(ptr %a, ptr %b, i64 4)390  ret <16 x i1> %0391}392 393define <32 x i1> @whilewr_32_expand3(ptr %a, ptr %b) {394; CHECK-LABEL: whilewr_32_expand3:395; CHECK:       // %bb.0: // %entry396; CHECK-NEXT:    sub x10, x1, x0397; CHECK-NEXT:    index z0.d, #0, #1398; CHECK-NEXT:    sub x9, x10, #61399; CHECK-NEXT:    subs x11, x10, #64400; CHECK-NEXT:    add x12, x10, #3401; CHECK-NEXT:    csel x9, x9, x11, mi402; CHECK-NEXT:    asr x11, x9, #2403; CHECK-NEXT:    mov z1.d, z0.d404; CHECK-NEXT:    mov z2.d, z0.d405; CHECK-NEXT:    mov z3.d, z0.d406; CHECK-NEXT:    cmp x11, #1407; CHECK-NEXT:    mov z4.d, z0.d408; CHECK-NEXT:    mov z5.d, z0.d409; CHECK-NEXT:    cset w9, lt410; CHECK-NEXT:    cmp x10, #0411; CHECK-NEXT:    mov z6.d, z0.d412; CHECK-NEXT:    csel x10, x12, x10, mi413; CHECK-NEXT:    dup v7.2d, x11414; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc415; CHECK-NEXT:    asr x10, x10, #2416; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa417; CHECK-NEXT:    add z3.d, z3.d, #8 // =0x8418; CHECK-NEXT:    add z4.d, z4.d, #6 // =0x6419; CHECK-NEXT:    add z5.d, z5.d, #4 // =0x4420; CHECK-NEXT:    add z6.d, z6.d, #2 // =0x2421; CHECK-NEXT:    dup v16.2d, x10422; CHECK-NEXT:    cmhi v17.2d, v7.2d, v0.2d423; CHECK-NEXT:    cmhi v19.2d, v7.2d, v1.2d424; CHECK-NEXT:    cmhi v20.2d, v7.2d, v2.2d425; CHECK-NEXT:    cmhi v21.2d, v7.2d, v3.2d426; CHECK-NEXT:    cmp x10, #1427; CHECK-NEXT:    cmhi v22.2d, v7.2d, v4.2d428; CHECK-NEXT:    cset w10, lt429; CHECK-NEXT:    cmhi v18.2d, v16.2d, v0.2d430; CHECK-NEXT:    add z0.d, z0.d, #14 // =0xe431; CHECK-NEXT:    cmhi v1.2d, v16.2d, v1.2d432; CHECK-NEXT:    cmhi v2.2d, v16.2d, v2.2d433; CHECK-NEXT:    cmhi v3.2d, v16.2d, v3.2d434; CHECK-NEXT:    cmhi v4.2d, v16.2d, v4.2d435; CHECK-NEXT:    cmhi v23.2d, v16.2d, v5.2d436; CHECK-NEXT:    cmhi v24.2d, v16.2d, v6.2d437; CHECK-NEXT:    cmhi v5.2d, v7.2d, v5.2d438; CHECK-NEXT:    cmhi v16.2d, v16.2d, v0.2d439; CHECK-NEXT:    cmhi v6.2d, v7.2d, v6.2d440; CHECK-NEXT:    cmhi v0.2d, v7.2d, v0.2d441; CHECK-NEXT:    uzp1 v7.4s, v21.4s, v20.4s442; CHECK-NEXT:    uzp1 v2.4s, v3.4s, v2.4s443; CHECK-NEXT:    uzp1 v3.4s, v23.4s, v4.4s444; CHECK-NEXT:    uzp1 v4.4s, v18.4s, v24.4s445; CHECK-NEXT:    uzp1 v5.4s, v5.4s, v22.4s446; CHECK-NEXT:    uzp1 v1.4s, v1.4s, v16.4s447; CHECK-NEXT:    uzp1 v6.4s, v17.4s, v6.4s448; CHECK-NEXT:    uzp1 v0.4s, v19.4s, v0.4s449; CHECK-NEXT:    uzp1 v3.8h, v4.8h, v3.8h450; CHECK-NEXT:    uzp1 v1.8h, v2.8h, v1.8h451; CHECK-NEXT:    uzp1 v2.8h, v6.8h, v5.8h452; CHECK-NEXT:    uzp1 v0.8h, v7.8h, v0.8h453; CHECK-NEXT:    uzp1 v1.16b, v3.16b, v1.16b454; CHECK-NEXT:    uzp1 v0.16b, v2.16b, v0.16b455; CHECK-NEXT:    dup v3.16b, w10456; CHECK-NEXT:    dup v2.16b, w9457; CHECK-NEXT:    adrp x9, .LCPI14_0458; CHECK-NEXT:    orr v1.16b, v1.16b, v3.16b459; CHECK-NEXT:    orr v0.16b, v0.16b, v2.16b460; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI14_0]461; CHECK-NEXT:    shl v1.16b, v1.16b, #7462; CHECK-NEXT:    shl v0.16b, v0.16b, #7463; CHECK-NEXT:    cmlt v1.16b, v1.16b, #0464; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0465; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b466; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b467; CHECK-NEXT:    ext v2.16b, v1.16b, v1.16b, #8468; CHECK-NEXT:    ext v3.16b, v0.16b, v0.16b, #8469; CHECK-NEXT:    zip1 v1.16b, v1.16b, v2.16b470; CHECK-NEXT:    zip1 v0.16b, v0.16b, v3.16b471; CHECK-NEXT:    addv h1, v1.8h472; CHECK-NEXT:    addv h0, v0.8h473; CHECK-NEXT:    str h1, [x8]474; CHECK-NEXT:    str h0, [x8, #2]475; CHECK-NEXT:    ret476entry:477  %0 = call <32 x i1> @llvm.loop.dependence.war.mask.v32i1(ptr %a, ptr %b, i64 4)478  ret <32 x i1> %0479}480 481define <4 x i1> @whilewr_64_expand(ptr %a, ptr %b) {482; CHECK-LABEL: whilewr_64_expand:483; CHECK:       // %bb.0: // %entry484; CHECK-NEXT:    index z0.d, #0, #1485; CHECK-NEXT:    subs x8, x1, x0486; CHECK-NEXT:    add x9, x8, #7487; CHECK-NEXT:    csel x8, x9, x8, mi488; CHECK-NEXT:    asr x8, x8, #3489; CHECK-NEXT:    mov z1.d, z0.d490; CHECK-NEXT:    dup v2.2d, x8491; CHECK-NEXT:    cmp x8, #1492; CHECK-NEXT:    cset w8, lt493; CHECK-NEXT:    add z1.d, z1.d, #2 // =0x2494; CHECK-NEXT:    cmhi v0.2d, v2.2d, v0.2d495; CHECK-NEXT:    cmhi v1.2d, v2.2d, v1.2d496; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v1.4s497; CHECK-NEXT:    dup v1.4h, w8498; CHECK-NEXT:    xtn v0.4h, v0.4s499; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b500; CHECK-NEXT:    ret501entry:502  %0 = call <4 x i1> @llvm.loop.dependence.war.mask.v4i1(ptr %a, ptr %b, i64 8)503  ret <4 x i1> %0504}505 506define <8 x i1> @whilewr_64_expand2(ptr %a, ptr %b) {507; CHECK-LABEL: whilewr_64_expand2:508; CHECK:       // %bb.0: // %entry509; CHECK-NEXT:    index z0.d, #0, #1510; CHECK-NEXT:    subs x8, x1, x0511; CHECK-NEXT:    add x9, x8, #7512; CHECK-NEXT:    csel x8, x9, x8, mi513; CHECK-NEXT:    asr x8, x8, #3514; CHECK-NEXT:    mov z2.d, z0.d515; CHECK-NEXT:    mov z3.d, z0.d516; CHECK-NEXT:    mov z4.d, z0.d517; CHECK-NEXT:    dup v1.2d, x8518; CHECK-NEXT:    cmp x8, #1519; CHECK-NEXT:    cset w8, lt520; CHECK-NEXT:    add z4.d, z4.d, #6 // =0x6521; CHECK-NEXT:    add z2.d, z2.d, #4 // =0x4522; CHECK-NEXT:    add z3.d, z3.d, #2 // =0x2523; CHECK-NEXT:    cmhi v0.2d, v1.2d, v0.2d524; CHECK-NEXT:    cmhi v4.2d, v1.2d, v4.2d525; CHECK-NEXT:    cmhi v2.2d, v1.2d, v2.2d526; CHECK-NEXT:    cmhi v1.2d, v1.2d, v3.2d527; CHECK-NEXT:    uzp1 v2.4s, v2.4s, v4.4s528; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v1.4s529; CHECK-NEXT:    dup v1.8b, w8530; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v2.8h531; CHECK-NEXT:    xtn v0.8b, v0.8h532; CHECK-NEXT:    orr v0.8b, v0.8b, v1.8b533; CHECK-NEXT:    ret534entry:535  %0 = call <8 x i1> @llvm.loop.dependence.war.mask.v8i1(ptr %a, ptr %b, i64 8)536  ret <8 x i1> %0537}538 539define <16 x i1> @whilewr_64_expand3(ptr %a, ptr %b) {540; CHECK-LABEL: whilewr_64_expand3:541; CHECK:       // %bb.0: // %entry542; CHECK-NEXT:    index z0.d, #0, #1543; CHECK-NEXT:    subs x8, x1, x0544; CHECK-NEXT:    add x9, x8, #7545; CHECK-NEXT:    csel x8, x9, x8, mi546; CHECK-NEXT:    asr x8, x8, #3547; CHECK-NEXT:    mov z1.d, z0.d548; CHECK-NEXT:    mov z2.d, z0.d549; CHECK-NEXT:    mov z4.d, z0.d550; CHECK-NEXT:    mov z5.d, z0.d551; CHECK-NEXT:    mov z6.d, z0.d552; CHECK-NEXT:    mov z7.d, z0.d553; CHECK-NEXT:    mov z16.d, z0.d554; CHECK-NEXT:    dup v3.2d, x8555; CHECK-NEXT:    cmp x8, #1556; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc557; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa558; CHECK-NEXT:    add z4.d, z4.d, #8 // =0x8559; CHECK-NEXT:    add z5.d, z5.d, #6 // =0x6560; CHECK-NEXT:    add z6.d, z6.d, #4 // =0x4561; CHECK-NEXT:    add z7.d, z7.d, #2 // =0x2562; CHECK-NEXT:    add z16.d, z16.d, #14 // =0xe563; CHECK-NEXT:    cmhi v0.2d, v3.2d, v0.2d564; CHECK-NEXT:    cset w8, lt565; CHECK-NEXT:    cmhi v1.2d, v3.2d, v1.2d566; CHECK-NEXT:    cmhi v2.2d, v3.2d, v2.2d567; CHECK-NEXT:    cmhi v4.2d, v3.2d, v4.2d568; CHECK-NEXT:    cmhi v5.2d, v3.2d, v5.2d569; CHECK-NEXT:    cmhi v6.2d, v3.2d, v6.2d570; CHECK-NEXT:    cmhi v16.2d, v3.2d, v16.2d571; CHECK-NEXT:    cmhi v3.2d, v3.2d, v7.2d572; CHECK-NEXT:    uzp1 v2.4s, v4.4s, v2.4s573; CHECK-NEXT:    uzp1 v4.4s, v6.4s, v5.4s574; CHECK-NEXT:    uzp1 v1.4s, v1.4s, v16.4s575; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v3.4s576; CHECK-NEXT:    uzp1 v1.8h, v2.8h, v1.8h577; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v4.8h578; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v1.16b579; CHECK-NEXT:    dup v1.16b, w8580; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b581; CHECK-NEXT:    ret582entry:583  %0 = call <16 x i1> @llvm.loop.dependence.war.mask.v16i1(ptr %a, ptr %b, i64 8)584  ret <16 x i1> %0585}586 587define <32 x i1> @whilewr_64_expand4(ptr %a, ptr %b) {588; CHECK-LABEL: whilewr_64_expand4:589; CHECK:       // %bb.0: // %entry590; CHECK-NEXT:    sub x10, x1, x0591; CHECK-NEXT:    index z0.d, #0, #1592; CHECK-NEXT:    sub x9, x10, #121593; CHECK-NEXT:    subs x11, x10, #128594; CHECK-NEXT:    add x12, x10, #7595; CHECK-NEXT:    csel x9, x9, x11, mi596; CHECK-NEXT:    asr x11, x9, #3597; CHECK-NEXT:    mov z1.d, z0.d598; CHECK-NEXT:    mov z2.d, z0.d599; CHECK-NEXT:    mov z3.d, z0.d600; CHECK-NEXT:    cmp x11, #1601; CHECK-NEXT:    mov z4.d, z0.d602; CHECK-NEXT:    mov z5.d, z0.d603; CHECK-NEXT:    cset w9, lt604; CHECK-NEXT:    cmp x10, #0605; CHECK-NEXT:    mov z6.d, z0.d606; CHECK-NEXT:    csel x10, x12, x10, mi607; CHECK-NEXT:    dup v7.2d, x11608; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc609; CHECK-NEXT:    asr x10, x10, #3610; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa611; CHECK-NEXT:    add z3.d, z3.d, #8 // =0x8612; CHECK-NEXT:    add z4.d, z4.d, #6 // =0x6613; CHECK-NEXT:    add z5.d, z5.d, #4 // =0x4614; CHECK-NEXT:    add z6.d, z6.d, #2 // =0x2615; CHECK-NEXT:    dup v16.2d, x10616; CHECK-NEXT:    cmhi v17.2d, v7.2d, v0.2d617; CHECK-NEXT:    cmhi v19.2d, v7.2d, v1.2d618; CHECK-NEXT:    cmhi v20.2d, v7.2d, v2.2d619; CHECK-NEXT:    cmhi v21.2d, v7.2d, v3.2d620; CHECK-NEXT:    cmp x10, #1621; CHECK-NEXT:    cmhi v22.2d, v7.2d, v4.2d622; CHECK-NEXT:    cset w10, lt623; CHECK-NEXT:    cmhi v18.2d, v16.2d, v0.2d624; CHECK-NEXT:    add z0.d, z0.d, #14 // =0xe625; CHECK-NEXT:    cmhi v1.2d, v16.2d, v1.2d626; CHECK-NEXT:    cmhi v2.2d, v16.2d, v2.2d627; CHECK-NEXT:    cmhi v3.2d, v16.2d, v3.2d628; CHECK-NEXT:    cmhi v4.2d, v16.2d, v4.2d629; CHECK-NEXT:    cmhi v23.2d, v16.2d, v5.2d630; CHECK-NEXT:    cmhi v24.2d, v16.2d, v6.2d631; CHECK-NEXT:    cmhi v5.2d, v7.2d, v5.2d632; CHECK-NEXT:    cmhi v16.2d, v16.2d, v0.2d633; CHECK-NEXT:    cmhi v6.2d, v7.2d, v6.2d634; CHECK-NEXT:    cmhi v0.2d, v7.2d, v0.2d635; CHECK-NEXT:    uzp1 v7.4s, v21.4s, v20.4s636; CHECK-NEXT:    uzp1 v2.4s, v3.4s, v2.4s637; CHECK-NEXT:    uzp1 v3.4s, v23.4s, v4.4s638; CHECK-NEXT:    uzp1 v4.4s, v18.4s, v24.4s639; CHECK-NEXT:    uzp1 v5.4s, v5.4s, v22.4s640; CHECK-NEXT:    uzp1 v1.4s, v1.4s, v16.4s641; CHECK-NEXT:    uzp1 v6.4s, v17.4s, v6.4s642; CHECK-NEXT:    uzp1 v0.4s, v19.4s, v0.4s643; CHECK-NEXT:    uzp1 v3.8h, v4.8h, v3.8h644; CHECK-NEXT:    uzp1 v1.8h, v2.8h, v1.8h645; CHECK-NEXT:    uzp1 v2.8h, v6.8h, v5.8h646; CHECK-NEXT:    uzp1 v0.8h, v7.8h, v0.8h647; CHECK-NEXT:    uzp1 v1.16b, v3.16b, v1.16b648; CHECK-NEXT:    uzp1 v0.16b, v2.16b, v0.16b649; CHECK-NEXT:    dup v3.16b, w10650; CHECK-NEXT:    dup v2.16b, w9651; CHECK-NEXT:    adrp x9, .LCPI18_0652; CHECK-NEXT:    orr v1.16b, v1.16b, v3.16b653; CHECK-NEXT:    orr v0.16b, v0.16b, v2.16b654; CHECK-NEXT:    ldr q2, [x9, :lo12:.LCPI18_0]655; CHECK-NEXT:    shl v1.16b, v1.16b, #7656; CHECK-NEXT:    shl v0.16b, v0.16b, #7657; CHECK-NEXT:    cmlt v1.16b, v1.16b, #0658; CHECK-NEXT:    cmlt v0.16b, v0.16b, #0659; CHECK-NEXT:    and v1.16b, v1.16b, v2.16b660; CHECK-NEXT:    and v0.16b, v0.16b, v2.16b661; CHECK-NEXT:    ext v2.16b, v1.16b, v1.16b, #8662; CHECK-NEXT:    ext v3.16b, v0.16b, v0.16b, #8663; CHECK-NEXT:    zip1 v1.16b, v1.16b, v2.16b664; CHECK-NEXT:    zip1 v0.16b, v0.16b, v3.16b665; CHECK-NEXT:    addv h1, v1.8h666; CHECK-NEXT:    addv h0, v0.8h667; CHECK-NEXT:    str h1, [x8]668; CHECK-NEXT:    str h0, [x8, #2]669; CHECK-NEXT:    ret670entry:671  %0 = call <32 x i1> @llvm.loop.dependence.war.mask.v32i1(ptr %a, ptr %b, i64 8)672  ret <32 x i1> %0673}674 675define <9 x i1> @whilewr_8_widen(ptr %a, ptr %b) {676; CHECK-LABEL: whilewr_8_widen:677; CHECK:       // %bb.0: // %entry678; CHECK-NEXT:    whilewr p0.b, x0, x1679; CHECK-NEXT:    mov z0.b, p0/z, #-1 // =0xffffffffffffffff680; CHECK-NEXT:    umov w9, v0.b[0]681; CHECK-NEXT:    umov w10, v0.b[1]682; CHECK-NEXT:    umov w11, v0.b[2]683; CHECK-NEXT:    umov w12, v0.b[7]684; CHECK-NEXT:    and w9, w9, #0x1685; CHECK-NEXT:    bfi w9, w10, #1, #1686; CHECK-NEXT:    umov w10, v0.b[3]687; CHECK-NEXT:    bfi w9, w11, #2, #1688; CHECK-NEXT:    umov w11, v0.b[4]689; CHECK-NEXT:    bfi w9, w10, #3, #1690; CHECK-NEXT:    umov w10, v0.b[5]691; CHECK-NEXT:    bfi w9, w11, #4, #1692; CHECK-NEXT:    umov w11, v0.b[6]693; CHECK-NEXT:    bfi w9, w10, #5, #1694; CHECK-NEXT:    umov w10, v0.b[8]695; CHECK-NEXT:    bfi w9, w11, #6, #1696; CHECK-NEXT:    ubfiz w11, w12, #7, #1697; CHECK-NEXT:    orr w9, w9, w11698; CHECK-NEXT:    orr w9, w9, w10, lsl #8699; CHECK-NEXT:    and w9, w9, #0x1ff700; CHECK-NEXT:    strh w9, [x8]701; CHECK-NEXT:    ret702entry:703  %0 = call <9 x i1> @llvm.loop.dependence.war.mask.v9i1(ptr %a, ptr %b, i64 1)704  ret <9 x i1> %0705}706 707define <7 x i1> @whilewr_16_widen(ptr %a, ptr %b) {708; CHECK-LABEL: whilewr_16_widen:709; CHECK:       // %bb.0: // %entry710; CHECK-NEXT:    whilewr p0.h, x0, x1711; CHECK-NEXT:    mov z0.h, p0/z, #-1 // =0xffffffffffffffff712; CHECK-NEXT:    xtn v0.8b, v0.8h713; CHECK-NEXT:    umov w0, v0.b[0]714; CHECK-NEXT:    umov w1, v0.b[1]715; CHECK-NEXT:    umov w2, v0.b[2]716; CHECK-NEXT:    umov w3, v0.b[3]717; CHECK-NEXT:    umov w4, v0.b[4]718; CHECK-NEXT:    umov w5, v0.b[5]719; CHECK-NEXT:    umov w6, v0.b[6]720; CHECK-NEXT:    ret721entry:722  %0 = call <7 x i1> @llvm.loop.dependence.war.mask.v7i1(ptr %a, ptr %b, i64 2)723  ret <7 x i1> %0724}725 726define <3 x i1> @whilewr_32_widen(ptr %a, ptr %b) {727; CHECK-LABEL: whilewr_32_widen:728; CHECK:       // %bb.0: // %entry729; CHECK-NEXT:    whilewr p0.s, x0, x1730; CHECK-NEXT:    mov z0.s, p0/z, #-1 // =0xffffffffffffffff731; CHECK-NEXT:    xtn v0.4h, v0.4s732; CHECK-NEXT:    umov w0, v0.h[0]733; CHECK-NEXT:    umov w1, v0.h[1]734; CHECK-NEXT:    umov w2, v0.h[2]735; CHECK-NEXT:    ret736entry:737  %0 = call <3 x i1> @llvm.loop.dependence.war.mask.v3i1(ptr %a, ptr %b, i64 4)738  ret <3 x i1> %0739}740 741define <16 x i1> @whilewr_badimm(ptr %a, ptr %b) {742; CHECK-LABEL: whilewr_badimm:743; CHECK:       // %bb.0: // %entry744; CHECK-NEXT:    mov x8, #6148914691236517205 // =0x5555555555555555745; CHECK-NEXT:    sub x9, x1, x0746; CHECK-NEXT:    index z0.d, #0, #1747; CHECK-NEXT:    movk x8, #21846748; CHECK-NEXT:    smulh x8, x9, x8749; CHECK-NEXT:    mov z1.d, z0.d750; CHECK-NEXT:    mov z2.d, z0.d751; CHECK-NEXT:    mov z4.d, z0.d752; CHECK-NEXT:    mov z5.d, z0.d753; CHECK-NEXT:    mov z6.d, z0.d754; CHECK-NEXT:    mov z7.d, z0.d755; CHECK-NEXT:    mov z16.d, z0.d756; CHECK-NEXT:    add x8, x8, x8, lsr #63757; CHECK-NEXT:    add z1.d, z1.d, #12 // =0xc758; CHECK-NEXT:    add z2.d, z2.d, #10 // =0xa759; CHECK-NEXT:    add z4.d, z4.d, #8 // =0x8760; CHECK-NEXT:    add z5.d, z5.d, #6 // =0x6761; CHECK-NEXT:    add z6.d, z6.d, #4 // =0x4762; CHECK-NEXT:    dup v3.2d, x8763; CHECK-NEXT:    add z16.d, z16.d, #14 // =0xe764; CHECK-NEXT:    add z7.d, z7.d, #2 // =0x2765; CHECK-NEXT:    cmp x8, #1766; CHECK-NEXT:    cset w8, lt767; CHECK-NEXT:    cmhi v0.2d, v3.2d, v0.2d768; CHECK-NEXT:    cmhi v1.2d, v3.2d, v1.2d769; CHECK-NEXT:    cmhi v2.2d, v3.2d, v2.2d770; CHECK-NEXT:    cmhi v4.2d, v3.2d, v4.2d771; CHECK-NEXT:    cmhi v16.2d, v3.2d, v16.2d772; CHECK-NEXT:    cmhi v5.2d, v3.2d, v5.2d773; CHECK-NEXT:    cmhi v6.2d, v3.2d, v6.2d774; CHECK-NEXT:    cmhi v3.2d, v3.2d, v7.2d775; CHECK-NEXT:    uzp1 v1.4s, v1.4s, v16.4s776; CHECK-NEXT:    uzp1 v2.4s, v4.4s, v2.4s777; CHECK-NEXT:    uzp1 v4.4s, v6.4s, v5.4s778; CHECK-NEXT:    uzp1 v0.4s, v0.4s, v3.4s779; CHECK-NEXT:    uzp1 v1.8h, v2.8h, v1.8h780; CHECK-NEXT:    uzp1 v0.8h, v0.8h, v4.8h781; CHECK-NEXT:    uzp1 v0.16b, v0.16b, v1.16b782; CHECK-NEXT:    dup v1.16b, w8783; CHECK-NEXT:    orr v0.16b, v0.16b, v1.16b784; CHECK-NEXT:    ret785entry:786  %0 = call <16 x i1> @llvm.loop.dependence.war.mask.v16i1(ptr %a, ptr %b, i64 3)787  ret <16 x i1> %0788}789 790; Scalarizing <1 x i1> types791 792define <1 x i1> @whilewr_8_scalarize(ptr %a, ptr %b) {793; CHECK-LABEL: whilewr_8_scalarize:794; CHECK:       // %bb.0: // %entry795; CHECK-NEXT:    sub x8, x1, x0796; CHECK-NEXT:    cmn x8, #1797; CHECK-NEXT:    cset w0, gt798; CHECK-NEXT:    ret799entry:800  %0 = call <1 x i1> @llvm.loop.dependence.war.mask.v1i1(ptr %a, ptr %b, i64 1)801  ret <1 x i1> %0802}803 804define <1 x i1> @whilewr_16_scalarize(ptr %a, ptr %b) {805; CHECK-LABEL: whilewr_16_scalarize:806; CHECK:       // %bb.0: // %entry807; CHECK-NEXT:    sub x8, x1, x0808; CHECK-NEXT:    cmp x8, #1809; CHECK-NEXT:    ccmp x8, #0, #4, le810; CHECK-NEXT:    cset w0, eq811; CHECK-NEXT:    ret812entry:813  %0 = call <1 x i1> @llvm.loop.dependence.war.mask.v1i1(ptr %a, ptr %b, i64 2)814  ret <1 x i1> %0815}816 817define <1 x i1> @whilewr_32_scalarize(ptr %a, ptr %b) {818; CHECK-LABEL: whilewr_32_scalarize:819; CHECK:       // %bb.0: // %entry820; CHECK-NEXT:    sub x8, x1, x0821; CHECK-NEXT:    cmp x8, #3822; CHECK-NEXT:    ccmp x8, #0, #4, le823; CHECK-NEXT:    cset w0, eq824; CHECK-NEXT:    ret825entry:826  %0 = call <1 x i1> @llvm.loop.dependence.war.mask.v1i1(ptr %a, ptr %b, i64 4)827  ret <1 x i1> %0828}829 830define <1 x i1> @whilewr_64_scalarize(ptr %a, ptr %b) {831; CHECK-LABEL: whilewr_64_scalarize:832; CHECK:       // %bb.0: // %entry833; CHECK-NEXT:    sub x8, x1, x0834; CHECK-NEXT:    cmp x8, #7835; CHECK-NEXT:    ccmp x8, #0, #4, le836; CHECK-NEXT:    cset w0, eq837; CHECK-NEXT:    ret838entry:839  %0 = call <1 x i1> @llvm.loop.dependence.war.mask.v1i1(ptr %a, ptr %b, i64 8)840  ret <1 x i1> %0841}842 843define <1 x i1> @whilerw_8_scalarize(ptr %a, ptr %b) {844; CHECK-LABEL: whilerw_8_scalarize:845; CHECK:       // %bb.0: // %entry846; CHECK-NEXT:    sub x8, x1, x0847; CHECK-NEXT:    cmn x8, #1848; CHECK-NEXT:    cset w0, gt849; CHECK-NEXT:    ret850entry:851  %0 = call <1 x i1> @llvm.loop.dependence.raw.mask.v1i1(ptr %a, ptr %b, i64 1)852  ret <1 x i1> %0853}854 855define <1 x i1> @whilerw_16_scalarize(ptr %a, ptr %b) {856; CHECK-LABEL: whilerw_16_scalarize:857; CHECK:       // %bb.0: // %entry858; CHECK-NEXT:    sub x8, x1, x0859; CHECK-NEXT:    cmp x8, #1860; CHECK-NEXT:    ccmp x8, #0, #4, le861; CHECK-NEXT:    cset w0, eq862; CHECK-NEXT:    ret863entry:864  %0 = call <1 x i1> @llvm.loop.dependence.raw.mask.v1i1(ptr %a, ptr %b, i64 2)865  ret <1 x i1> %0866}867 868define <1 x i1> @whilerw_32_scalarize(ptr %a, ptr %b) {869; CHECK-LABEL: whilerw_32_scalarize:870; CHECK:       // %bb.0: // %entry871; CHECK-NEXT:    sub x8, x1, x0872; CHECK-NEXT:    cmp x8, #3873; CHECK-NEXT:    ccmp x8, #0, #4, le874; CHECK-NEXT:    cset w0, eq875; CHECK-NEXT:    ret876entry:877  %0 = call <1 x i1> @llvm.loop.dependence.raw.mask.v1i1(ptr %a, ptr %b, i64 4)878  ret <1 x i1> %0879}880 881define <1 x i1> @whilerw_64_scalarize(ptr %a, ptr %b) {882; CHECK-LABEL: whilerw_64_scalarize:883; CHECK:       // %bb.0: // %entry884; CHECK-NEXT:    sub x8, x1, x0885; CHECK-NEXT:    cmp x8, #7886; CHECK-NEXT:    ccmp x8, #0, #4, le887; CHECK-NEXT:    cset w0, eq888; CHECK-NEXT:    ret889entry:890  %0 = call <1 x i1> @llvm.loop.dependence.raw.mask.v1i1(ptr %a, ptr %b, i64 8)891  ret <1 x i1> %0892}893