brintos

brintos / llvm-project-archived public Read only

0
0
Text · 26.6 KiB · 3c8b09f Raw
539 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mattr=+sve2 -force-streaming-compatible -aarch64-sve-vector-bits-min=128 -aarch64-sve-vector-bits-max=128  < %s | FileCheck %s -check-prefixes=CHECK,SVE2_1283; RUN: llc -mattr=+sve2 -force-streaming-compatible -aarch64-sve-vector-bits-min=128 < %s | FileCheck %s -check-prefixes=CHECK,SVE2_128_NOMAX4; RUN: llc -mattr=+sve2 -force-streaming-compatible < %s | FileCheck %s -check-prefixes=CHECK,SVE2_NOMIN_NOMAX5; RUN: llc -mattr=+sve2 -force-streaming-compatible -aarch64-sve-vector-bits-min=256 < %s | FileCheck %s -check-prefixes=CHECK,SVE2_MIN_256_NOMAX6 7target triple = "aarch64-unknown-linux-gnu"8 9; SVE2_128: .LCPI0_0:10; SVE2_128-NEXT:        .byte   0                               // 0x011; SVE2_128-NEXT:        .byte   7                               // 0x712; SVE2_128-NEXT:        .byte   2                               // 0x213; SVE2_128-NEXT:        .byte   3                               // 0x314; SVE2_128-NEXT:        .byte   4                               // 0x415; SVE2_128-NEXT:        .byte   5                               // 0x516; SVE2_128-NEXT:        .byte   6                               // 0x617; SVE2_128-NEXT:        .byte   7                               // 0x718; SVE2_128-NEXT:        .byte   255                             // 0xff19; SVE2_128-NEXT:        .byte   255                             // 0xff20define <8 x i8> @shuffle_index_indices_from_op1(ptr %a, ptr %b) {21; SVE2_128-LABEL: shuffle_index_indices_from_op1:22; SVE2_128:       // %bb.0:23; SVE2_128-NEXT:    adrp x8, .LCPI0_024; SVE2_128-NEXT:    ldr d0, [x0]25; SVE2_128-NEXT:    ldr q1, [x8, :lo12:.LCPI0_0]26; SVE2_128-NEXT:    tbl z0.b, { z0.b }, z1.b27; SVE2_128-NEXT:    // kill: def $d0 killed $d0 killed $z028; SVE2_128-NEXT:    ret29;30; SVE2_128_NOMAX-LABEL: shuffle_index_indices_from_op1:31; SVE2_128_NOMAX:       // %bb.0:32; SVE2_128_NOMAX-NEXT:    adrp x8, .LCPI0_033; SVE2_128_NOMAX-NEXT:    ldr d0, [x0]34; SVE2_128_NOMAX-NEXT:    ldr q1, [x8, :lo12:.LCPI0_0]35; SVE2_128_NOMAX-NEXT:    tbl z0.b, { z0.b }, z1.b36; SVE2_128_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z037; SVE2_128_NOMAX-NEXT:    ret38;39; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_op1:40; SVE2_NOMIN_NOMAX:       // %bb.0:41; SVE2_NOMIN_NOMAX-NEXT:    adrp x8, .LCPI0_042; SVE2_NOMIN_NOMAX-NEXT:    ldr d0, [x0]43; SVE2_NOMIN_NOMAX-NEXT:    ldr q1, [x8, :lo12:.LCPI0_0]44; SVE2_NOMIN_NOMAX-NEXT:    tbl z0.b, { z0.b }, z1.b45; SVE2_NOMIN_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z046; SVE2_NOMIN_NOMAX-NEXT:    ret47;48; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_op1:49; SVE2_MIN_256_NOMAX:       // %bb.0:50; SVE2_MIN_256_NOMAX-NEXT:    ptrue p0.b, vl3251; SVE2_MIN_256_NOMAX-NEXT:    adrp x8, .LCPI0_052; SVE2_MIN_256_NOMAX-NEXT:    add x8, x8, :lo12:.LCPI0_053; SVE2_MIN_256_NOMAX-NEXT:    ldr d1, [x0]54; SVE2_MIN_256_NOMAX-NEXT:    ld1b { z0.b }, p0/z, [x8]55; SVE2_MIN_256_NOMAX-NEXT:    tbl z0.b, { z1.b }, z0.b56; SVE2_MIN_256_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z057; SVE2_MIN_256_NOMAX-NEXT:    ret58  %op1 = load <8 x i8>, ptr %a59  %op2 = load <8 x i8>, ptr %b60  %1 = shufflevector <8 x i8> %op1, <8 x i8> %op2, <8 x i32> <i32 0, i32 7, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>61  ret <8 x i8> %162}63 64; SVE2_128: .LCPI1_0:65; SVE2_128-NEXT:        .byte   0                               // 0x066; SVE2_128-NEXT:        .byte   1                               // 0x167; SVE2_128-NEXT:        .byte   1                               // 0x168; SVE2_128-NEXT:        .byte   3                               // 0x369; SVE2_128-NEXT:        .byte   4                               // 0x470; SVE2_128-NEXT:        .byte   7                               // 0x771; SVE2_128-NEXT:        .byte   6                               // 0x672; SVE2_128-NEXT:        .byte   7                               // 0x773; SVE2_128-NEXT:        .byte   255                             // 0xff74; SVE2_128-NEXT:        .byte   255                             // 0xff75define <8 x i8> @shuffle_index_indices_from_op2(ptr %a, ptr %b) {76; SVE2_128-LABEL: shuffle_index_indices_from_op2:77; SVE2_128:       // %bb.0:78; SVE2_128-NEXT:    adrp x8, .LCPI1_079; SVE2_128-NEXT:    ldr d0, [x1]80; SVE2_128-NEXT:    ldr q1, [x8, :lo12:.LCPI1_0]81; SVE2_128-NEXT:    tbl z0.b, { z0.b }, z1.b82; SVE2_128-NEXT:    // kill: def $d0 killed $d0 killed $z083; SVE2_128-NEXT:    ret84;85; SVE2_128_NOMAX-LABEL: shuffle_index_indices_from_op2:86; SVE2_128_NOMAX:       // %bb.0:87; SVE2_128_NOMAX-NEXT:    adrp x8, .LCPI1_088; SVE2_128_NOMAX-NEXT:    ldr d0, [x1]89; SVE2_128_NOMAX-NEXT:    ldr q1, [x8, :lo12:.LCPI1_0]90; SVE2_128_NOMAX-NEXT:    tbl z0.b, { z0.b }, z1.b91; SVE2_128_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z092; SVE2_128_NOMAX-NEXT:    ret93;94; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_op2:95; SVE2_NOMIN_NOMAX:       // %bb.0:96; SVE2_NOMIN_NOMAX-NEXT:    adrp x8, .LCPI1_097; SVE2_NOMIN_NOMAX-NEXT:    ldr d0, [x1]98; SVE2_NOMIN_NOMAX-NEXT:    ldr q1, [x8, :lo12:.LCPI1_0]99; SVE2_NOMIN_NOMAX-NEXT:    tbl z0.b, { z0.b }, z1.b100; SVE2_NOMIN_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0101; SVE2_NOMIN_NOMAX-NEXT:    ret102;103; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_op2:104; SVE2_MIN_256_NOMAX:       // %bb.0:105; SVE2_MIN_256_NOMAX-NEXT:    ptrue p0.b, vl32106; SVE2_MIN_256_NOMAX-NEXT:    adrp x8, .LCPI1_0107; SVE2_MIN_256_NOMAX-NEXT:    add x8, x8, :lo12:.LCPI1_0108; SVE2_MIN_256_NOMAX-NEXT:    ldr d1, [x1]109; SVE2_MIN_256_NOMAX-NEXT:    ld1b { z0.b }, p0/z, [x8]110; SVE2_MIN_256_NOMAX-NEXT:    tbl z0.b, { z1.b }, z0.b111; SVE2_MIN_256_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0112; SVE2_MIN_256_NOMAX-NEXT:    ret113  %op1 = load <8 x i8>, ptr %a114  %op2 = load <8 x i8>, ptr %b115  %1 = shufflevector <8 x i8> %op1, <8 x i8> %op2, <8 x i32> <i32 8, i32 9, i32 9, i32 11, i32 12, i32 15, i32 14, i32 15>116  ret <8 x i8> %1117}118 119; SVE2_128: .LCPI2_0:120; SVE2_128-NEXT:        .byte   1                               // 0x1121; SVE2_128-NEXT:        .byte   17                              // 0x11122; SVE2_128-NEXT:        .byte   18                              // 0x12123; SVE2_128-NEXT:        .byte   19                              // 0x13124; SVE2_128-NEXT:        .byte   20                              // 0x14125; SVE2_128-NEXT:        .byte   20                              // 0x14126; SVE2_128-NEXT:        .byte   22                              // 0x16127; SVE2_128-NEXT:        .byte   23                              // 0x17128; SVE2_128-NEXT:        .byte   255                             // 0xff129; SVE2_128-NEXT:        .byte   255                             // 0xff130define <8 x i8> @shuffle_index_indices_from_both_ops(ptr %a, ptr %b) {131; SVE2_128-LABEL: shuffle_index_indices_from_both_ops:132; SVE2_128:       // %bb.0:133; SVE2_128-NEXT:    adrp x8, .LCPI2_0134; SVE2_128-NEXT:    ldr d0, [x0]135; SVE2_128-NEXT:    ldr d1, [x1]136; SVE2_128-NEXT:    ldr q2, [x8, :lo12:.LCPI2_0]137; SVE2_128-NEXT:    tbl z0.b, { z0.b, z1.b }, z2.b138; SVE2_128-NEXT:    // kill: def $d0 killed $d0 killed $z0139; SVE2_128-NEXT:    ret140;141; SVE2_128_NOMAX-LABEL: shuffle_index_indices_from_both_ops:142; SVE2_128_NOMAX:       // %bb.0:143; SVE2_128_NOMAX-NEXT:    ldr d0, [x1]144; SVE2_128_NOMAX-NEXT:    ldr d1, [x0]145; SVE2_128_NOMAX-NEXT:    mov z2.b, z0.b[3]146; SVE2_128_NOMAX-NEXT:    mov z3.b, z0.b[2]147; SVE2_128_NOMAX-NEXT:    mov z4.b, z0.b[1]148; SVE2_128_NOMAX-NEXT:    mov z1.b, z1.b[1]149; SVE2_128_NOMAX-NEXT:    mov z5.b, z0.b[7]150; SVE2_128_NOMAX-NEXT:    mov z6.b, z0.b[6]151; SVE2_128_NOMAX-NEXT:    mov z0.b, z0.b[4]152; SVE2_128_NOMAX-NEXT:    zip1 z2.b, z3.b, z2.b153; SVE2_128_NOMAX-NEXT:    zip1 z1.b, z1.b, z4.b154; SVE2_128_NOMAX-NEXT:    zip1 z3.b, z6.b, z5.b155; SVE2_128_NOMAX-NEXT:    zip1 z0.b, z0.b, z0.b156; SVE2_128_NOMAX-NEXT:    zip1 z1.h, z1.h, z2.h157; SVE2_128_NOMAX-NEXT:    zip1 z0.h, z0.h, z3.h158; SVE2_128_NOMAX-NEXT:    zip1 z0.s, z1.s, z0.s159; SVE2_128_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0160; SVE2_128_NOMAX-NEXT:    ret161;162; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_both_ops:163; SVE2_NOMIN_NOMAX:       // %bb.0:164; SVE2_NOMIN_NOMAX-NEXT:    ldr d0, [x1]165; SVE2_NOMIN_NOMAX-NEXT:    ldr d1, [x0]166; SVE2_NOMIN_NOMAX-NEXT:    mov z2.b, z0.b[3]167; SVE2_NOMIN_NOMAX-NEXT:    mov z3.b, z0.b[2]168; SVE2_NOMIN_NOMAX-NEXT:    mov z4.b, z0.b[1]169; SVE2_NOMIN_NOMAX-NEXT:    mov z1.b, z1.b[1]170; SVE2_NOMIN_NOMAX-NEXT:    mov z5.b, z0.b[7]171; SVE2_NOMIN_NOMAX-NEXT:    mov z6.b, z0.b[6]172; SVE2_NOMIN_NOMAX-NEXT:    mov z0.b, z0.b[4]173; SVE2_NOMIN_NOMAX-NEXT:    zip1 z2.b, z3.b, z2.b174; SVE2_NOMIN_NOMAX-NEXT:    zip1 z1.b, z1.b, z4.b175; SVE2_NOMIN_NOMAX-NEXT:    zip1 z3.b, z6.b, z5.b176; SVE2_NOMIN_NOMAX-NEXT:    zip1 z0.b, z0.b, z0.b177; SVE2_NOMIN_NOMAX-NEXT:    zip1 z1.h, z1.h, z2.h178; SVE2_NOMIN_NOMAX-NEXT:    zip1 z0.h, z0.h, z3.h179; SVE2_NOMIN_NOMAX-NEXT:    zip1 z0.s, z1.s, z0.s180; SVE2_NOMIN_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0181; SVE2_NOMIN_NOMAX-NEXT:    ret182;183; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_both_ops:184; SVE2_MIN_256_NOMAX:       // %bb.0:185; SVE2_MIN_256_NOMAX-NEXT:    ldr d0, [x1]186; SVE2_MIN_256_NOMAX-NEXT:    ldr d1, [x0]187; SVE2_MIN_256_NOMAX-NEXT:    mov z2.b, z0.b[3]188; SVE2_MIN_256_NOMAX-NEXT:    mov z3.b, z0.b[2]189; SVE2_MIN_256_NOMAX-NEXT:    mov z4.b, z0.b[1]190; SVE2_MIN_256_NOMAX-NEXT:    mov z1.b, z1.b[1]191; SVE2_MIN_256_NOMAX-NEXT:    mov z5.b, z0.b[7]192; SVE2_MIN_256_NOMAX-NEXT:    mov z6.b, z0.b[6]193; SVE2_MIN_256_NOMAX-NEXT:    mov z0.b, z0.b[4]194; SVE2_MIN_256_NOMAX-NEXT:    zip1 z2.b, z3.b, z2.b195; SVE2_MIN_256_NOMAX-NEXT:    zip1 z1.b, z1.b, z4.b196; SVE2_MIN_256_NOMAX-NEXT:    zip1 z3.b, z6.b, z5.b197; SVE2_MIN_256_NOMAX-NEXT:    zip1 z0.b, z0.b, z0.b198; SVE2_MIN_256_NOMAX-NEXT:    zip1 z1.h, z1.h, z2.h199; SVE2_MIN_256_NOMAX-NEXT:    zip1 z0.h, z0.h, z3.h200; SVE2_MIN_256_NOMAX-NEXT:    zip1 z0.s, z1.s, z0.s201; SVE2_MIN_256_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0202; SVE2_MIN_256_NOMAX-NEXT:    ret203  %op1 = load <8 x i8>, ptr %a204  %op2 = load <8 x i8>, ptr %b205  %1 = shufflevector <8 x i8> %op1, <8 x i8> %op2, <8 x i32> <i32 1, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 15>206  ret <8 x i8> %1207}208 209; SVE2_128: .LCPI3_0:210; SVE2_128-NEXT:        .byte   1                               // 0x1211; SVE2_128-NEXT:        .byte   17                              // 0x11212; SVE2_128-NEXT:        .byte   18                              // 0x12213; SVE2_128-NEXT:        .byte   19                              // 0x13214; SVE2_128-NEXT:        .byte   20                              // 0x14215; SVE2_128-NEXT:        .byte   20                              // 0x14216; SVE2_128-NEXT:        .byte   22                              // 0x16217; SVE2_128-NEXT:        .byte   0                               // 0x0218; SVE2_128-NEXT:        .byte   255                             // 0xff219; SVE2_128-NEXT:        .byte   255                             // 0xff220define <8 x i8> @shuffle_index_poison_value(ptr %a, ptr %b) {221; SVE2_128-LABEL: shuffle_index_poison_value:222; SVE2_128:       // %bb.0:223; SVE2_128-NEXT:    adrp x8, .LCPI3_0224; SVE2_128-NEXT:    ldr d0, [x0]225; SVE2_128-NEXT:    ldr d1, [x1]226; SVE2_128-NEXT:    ldr q2, [x8, :lo12:.LCPI3_0]227; SVE2_128-NEXT:    tbl z0.b, { z0.b, z1.b }, z2.b228; SVE2_128-NEXT:    // kill: def $d0 killed $d0 killed $z0229; SVE2_128-NEXT:    ret230;231; SVE2_128_NOMAX-LABEL: shuffle_index_poison_value:232; SVE2_128_NOMAX:       // %bb.0:233; SVE2_128_NOMAX-NEXT:    ldr d0, [x1]234; SVE2_128_NOMAX-NEXT:    ldr d1, [x0]235; SVE2_128_NOMAX-NEXT:    mov z2.b, z0.b[3]236; SVE2_128_NOMAX-NEXT:    mov z3.b, z0.b[2]237; SVE2_128_NOMAX-NEXT:    mov z4.b, z0.b[1]238; SVE2_128_NOMAX-NEXT:    mov z1.b, z1.b[1]239; SVE2_128_NOMAX-NEXT:    mov z5.b, z0.b[4]240; SVE2_128_NOMAX-NEXT:    mov z0.b, z0.b[6]241; SVE2_128_NOMAX-NEXT:    zip1 z2.b, z3.b, z2.b242; SVE2_128_NOMAX-NEXT:    zip1 z1.b, z1.b, z4.b243; SVE2_128_NOMAX-NEXT:    zip1 z3.b, z5.b, z5.b244; SVE2_128_NOMAX-NEXT:    zip1 z1.h, z1.h, z2.h245; SVE2_128_NOMAX-NEXT:    zip1 z0.h, z3.h, z0.h246; SVE2_128_NOMAX-NEXT:    zip1 z0.s, z1.s, z0.s247; SVE2_128_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0248; SVE2_128_NOMAX-NEXT:    ret249;250; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_poison_value:251; SVE2_NOMIN_NOMAX:       // %bb.0:252; SVE2_NOMIN_NOMAX-NEXT:    ldr d0, [x1]253; SVE2_NOMIN_NOMAX-NEXT:    ldr d1, [x0]254; SVE2_NOMIN_NOMAX-NEXT:    mov z2.b, z0.b[3]255; SVE2_NOMIN_NOMAX-NEXT:    mov z3.b, z0.b[2]256; SVE2_NOMIN_NOMAX-NEXT:    mov z4.b, z0.b[1]257; SVE2_NOMIN_NOMAX-NEXT:    mov z1.b, z1.b[1]258; SVE2_NOMIN_NOMAX-NEXT:    mov z5.b, z0.b[4]259; SVE2_NOMIN_NOMAX-NEXT:    mov z0.b, z0.b[6]260; SVE2_NOMIN_NOMAX-NEXT:    zip1 z2.b, z3.b, z2.b261; SVE2_NOMIN_NOMAX-NEXT:    zip1 z1.b, z1.b, z4.b262; SVE2_NOMIN_NOMAX-NEXT:    zip1 z3.b, z5.b, z5.b263; SVE2_NOMIN_NOMAX-NEXT:    zip1 z1.h, z1.h, z2.h264; SVE2_NOMIN_NOMAX-NEXT:    zip1 z0.h, z3.h, z0.h265; SVE2_NOMIN_NOMAX-NEXT:    zip1 z0.s, z1.s, z0.s266; SVE2_NOMIN_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0267; SVE2_NOMIN_NOMAX-NEXT:    ret268;269; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_poison_value:270; SVE2_MIN_256_NOMAX:       // %bb.0:271; SVE2_MIN_256_NOMAX-NEXT:    ldr d0, [x1]272; SVE2_MIN_256_NOMAX-NEXT:    ldr d1, [x0]273; SVE2_MIN_256_NOMAX-NEXT:    mov z2.b, z0.b[3]274; SVE2_MIN_256_NOMAX-NEXT:    mov z3.b, z0.b[2]275; SVE2_MIN_256_NOMAX-NEXT:    mov z4.b, z0.b[1]276; SVE2_MIN_256_NOMAX-NEXT:    mov z1.b, z1.b[1]277; SVE2_MIN_256_NOMAX-NEXT:    mov z5.b, z0.b[4]278; SVE2_MIN_256_NOMAX-NEXT:    mov z0.b, z0.b[6]279; SVE2_MIN_256_NOMAX-NEXT:    zip1 z2.b, z3.b, z2.b280; SVE2_MIN_256_NOMAX-NEXT:    zip1 z1.b, z1.b, z4.b281; SVE2_MIN_256_NOMAX-NEXT:    zip1 z3.b, z5.b, z5.b282; SVE2_MIN_256_NOMAX-NEXT:    zip1 z1.h, z1.h, z2.h283; SVE2_MIN_256_NOMAX-NEXT:    zip1 z0.h, z3.h, z0.h284; SVE2_MIN_256_NOMAX-NEXT:    zip1 z0.s, z1.s, z0.s285; SVE2_MIN_256_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0286; SVE2_MIN_256_NOMAX-NEXT:    ret287  %op1 = load <8 x i8>, ptr %a288  %op2 = load <8 x i8>, ptr %b289  %1 = shufflevector <8 x i8> %op1, <8 x i8> %op2, <8 x i32> <i32 1, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 poison>290  ret <8 x i8> %1291}292 293define <8 x i8> @shuffle_op1_poison(ptr %a, ptr %b) {294; SVE2_128-LABEL: shuffle_op1_poison:295; SVE2_128:       // %bb.0:296; SVE2_128-NEXT:    adrp x8, .LCPI4_0297; SVE2_128-NEXT:    ldr d0, [x1]298; SVE2_128-NEXT:    ldr q1, [x8, :lo12:.LCPI4_0]299; SVE2_128-NEXT:    tbl z0.b, { z0.b }, z1.b300; SVE2_128-NEXT:    // kill: def $d0 killed $d0 killed $z0301; SVE2_128-NEXT:    ret302;303; SVE2_128_NOMAX-LABEL: shuffle_op1_poison:304; SVE2_128_NOMAX:       // %bb.0:305; SVE2_128_NOMAX-NEXT:    adrp x8, .LCPI4_0306; SVE2_128_NOMAX-NEXT:    ldr d0, [x1]307; SVE2_128_NOMAX-NEXT:    ldr q1, [x8, :lo12:.LCPI4_0]308; SVE2_128_NOMAX-NEXT:    tbl z0.b, { z0.b }, z1.b309; SVE2_128_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0310; SVE2_128_NOMAX-NEXT:    ret311;312; SVE2_NOMIN_NOMAX-LABEL: shuffle_op1_poison:313; SVE2_NOMIN_NOMAX:       // %bb.0:314; SVE2_NOMIN_NOMAX-NEXT:    adrp x8, .LCPI4_0315; SVE2_NOMIN_NOMAX-NEXT:    ldr d0, [x1]316; SVE2_NOMIN_NOMAX-NEXT:    ldr q1, [x8, :lo12:.LCPI4_0]317; SVE2_NOMIN_NOMAX-NEXT:    tbl z0.b, { z0.b }, z1.b318; SVE2_NOMIN_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0319; SVE2_NOMIN_NOMAX-NEXT:    ret320;321; SVE2_MIN_256_NOMAX-LABEL: shuffle_op1_poison:322; SVE2_MIN_256_NOMAX:       // %bb.0:323; SVE2_MIN_256_NOMAX-NEXT:    ptrue p0.b, vl32324; SVE2_MIN_256_NOMAX-NEXT:    adrp x8, .LCPI4_0325; SVE2_MIN_256_NOMAX-NEXT:    add x8, x8, :lo12:.LCPI4_0326; SVE2_MIN_256_NOMAX-NEXT:    ldr d1, [x1]327; SVE2_MIN_256_NOMAX-NEXT:    ld1b { z0.b }, p0/z, [x8]328; SVE2_MIN_256_NOMAX-NEXT:    tbl z0.b, { z1.b }, z0.b329; SVE2_MIN_256_NOMAX-NEXT:    // kill: def $d0 killed $d0 killed $z0330; SVE2_MIN_256_NOMAX-NEXT:    ret331  %op2 = load <8 x i8>, ptr %b332  %1 = shufflevector <8 x i8> poison, <8 x i8> %op2, <8 x i32> <i32 1, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 15>333  ret <8 x i8> %1334}335 336; In this function, we could not represent indexes for the second operand337; because for i8 type, the maximum constant in the mask is 256.338define <8 x i8> @negative_test_shuffle_index_size_op_both_maxhw(ptr %a, ptr %b) "target-features"="+sve2" vscale_range(16,16) {339; CHECK-LABEL: negative_test_shuffle_index_size_op_both_maxhw:340; CHECK:       // %bb.0:341; CHECK-NEXT:    ldr d0, [x1]342; CHECK-NEXT:    ldr d1, [x0]343; CHECK-NEXT:    mov z2.b, z0.b[3]344; CHECK-NEXT:    mov z3.b, z0.b[2]345; CHECK-NEXT:    mov z4.b, z0.b[1]346; CHECK-NEXT:    mov z1.b, z1.b[1]347; CHECK-NEXT:    mov z5.b, z0.b[7]348; CHECK-NEXT:    mov z6.b, z0.b[6]349; CHECK-NEXT:    mov z0.b, z0.b[4]350; CHECK-NEXT:    zip1 z2.b, z3.b, z2.b351; CHECK-NEXT:    zip1 z1.b, z1.b, z4.b352; CHECK-NEXT:    zip1 z3.b, z6.b, z5.b353; CHECK-NEXT:    zip1 z0.b, z0.b, z0.b354; CHECK-NEXT:    zip1 z1.h, z1.h, z2.h355; CHECK-NEXT:    zip1 z0.h, z0.h, z3.h356; CHECK-NEXT:    zip1 z0.s, z1.s, z0.s357; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0358; CHECK-NEXT:    ret359  %op1 = load <8 x i8>, ptr %a360  %op2 = load <8 x i8>, ptr %b361  %1 = shufflevector <8 x i8> %op1, <8 x i8> %op2, <8 x i32> <i32 1, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 15>362  ret <8 x i8> %1363}364 365; CHECK: .LCPI6_0:366; CHECK-NEXT:        .byte   0                               // 0x0367; CHECK-NEXT:        .byte   7                               // 0x7368; CHECK-NEXT:        .byte   2                               // 0x2369; CHECK-NEXT:        .byte   3                               // 0x3370; CHECK-NEXT:        .byte   4                               // 0x4371; CHECK-NEXT:        .byte   5                               // 0x5372; CHECK-NEXT:        .byte   6                               // 0x6373; CHECK-NEXT:        .byte   7                               // 0x7374; CHECK-NEXT:        .byte   255                             // 0xff375; CHECK-NEXT:        .byte   255                             // 0xff376define <8 x i8> @shuffle_index_size_op1_maxhw(ptr %a, ptr %b) "target-features"="+sve2" vscale_range(16,16) {377; CHECK-LABEL: shuffle_index_size_op1_maxhw:378; CHECK:       // %bb.0:379; CHECK-NEXT:    adrp x8, .LCPI6_0380; CHECK-NEXT:    add x8, x8, :lo12:.LCPI6_0381; CHECK-NEXT:    ldr d1, [x0]382; CHECK-NEXT:    ldr z0, [x8]383; CHECK-NEXT:    tbl z0.b, { z1.b }, z0.b384; CHECK-NEXT:    // kill: def $d0 killed $d0 killed $z0385; CHECK-NEXT:    ret386  %op1 = load <8 x i8>, ptr %a387  %op2 = load <8 x i8>, ptr %b388  %1 = shufflevector <8 x i8> %op1, <8 x i8> %op2, <8 x i32> <i32 0, i32 7, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7>389  ret <8 x i8> %1390}391 392; SVE2_128: .LCPI7_0:393; SVE2_128-NEXT:        .hword  1                               // 0x1394; SVE2_128-NEXT:        .hword  9                               // 0x9395; SVE2_128-NEXT:        .hword  10                              // 0xa396; SVE2_128-NEXT:        .hword  11                              // 0xb397; SVE2_128-NEXT:        .hword  12                              // 0xc398; SVE2_128-NEXT:        .hword  12                              // 0xc399; SVE2_128-NEXT:        .hword  14                              // 0xe400; SVE2_128-NEXT:        .hword  15                              // 0xf401 402; SVE2_128_NOMAX: .LCPI7_0:403; SVE2_128_NOMAX-NEXT:        .hword  0                               // 0x0404; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1405; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1406; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1407; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1408; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1409; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1410; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1411; SVE2_128_NOMAX-NEXT:.LCPI7_1:412; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1413; SVE2_128_NOMAX-NEXT:        .hword  1                               // 0x1414; SVE2_128_NOMAX-NEXT:        .hword  2                               // 0x2415; SVE2_128_NOMAX-NEXT:        .hword  3                               // 0x3416; SVE2_128_NOMAX-NEXT:        .hword  4                               // 0x4417; SVE2_128_NOMAX-NEXT:        .hword  4                               // 0x4418; SVE2_128_NOMAX-NEXT:        .hword  6                               // 0x6419; SVE2_128_NOMAX-NEXT:        .hword  7                               // 0x7420 421; SVE2_NOMIN_NOMAX: .LCPI7_0:422; SVE2_NOMIN_NOMAX-NEXT:        .hword  0                               // 0x0423; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1424; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1425; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1426; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1427; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1428; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1429; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1430; SVE2_NOMIN_NOMAX-NEXT:.LCPI7_1:431; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1432; SVE2_NOMIN_NOMAX-NEXT:        .hword  1                               // 0x1433; SVE2_NOMIN_NOMAX-NEXT:        .hword  2                               // 0x2434; SVE2_NOMIN_NOMAX-NEXT:        .hword  3                               // 0x3435; SVE2_NOMIN_NOMAX-NEXT:        .hword  4                               // 0x4436; SVE2_NOMIN_NOMAX-NEXT:        .hword  4                               // 0x4437; SVE2_NOMIN_NOMAX-NEXT:        .hword  6                               // 0x6438; SVE2_NOMIN_NOMAX-NEXT:        .hword  7                               // 0x7439 440; SVE2_MIN_256_NOMAX: .LCPI7_0:441; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0442; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1443; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1444; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1445; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1446; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1447; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1448; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1449; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0450; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0451; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0452; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0453; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0454; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0455; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0456; SVE2_MIN_256_NOMAX-NEXT:        .hword  0                               // 0x0457; SVE2_MIN_256_NOMAX-NEXT:.LCPI7_1:458; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1459; SVE2_MIN_256_NOMAX-NEXT:        .hword  1                               // 0x1460; SVE2_MIN_256_NOMAX-NEXT:        .hword  2                               // 0x2461; SVE2_MIN_256_NOMAX-NEXT:        .hword  3                               // 0x3462; SVE2_MIN_256_NOMAX-NEXT:        .hword  4                               // 0x4463; SVE2_MIN_256_NOMAX-NEXT:        .hword  4                               // 0x4464; SVE2_MIN_256_NOMAX-NEXT:        .hword  6                               // 0x6465; SVE2_MIN_256_NOMAX-NEXT:        .hword  7                               // 0x7466; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff467; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff468; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff469; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff470; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff471; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff472; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff473; SVE2_MIN_256_NOMAX-NEXT:        .hword  65535                           // 0xffff474define <8 x i16> @shuffle_index_indices_from_both_ops_i16(ptr %a, ptr %b) {475; SVE2_128-LABEL: shuffle_index_indices_from_both_ops_i16:476; SVE2_128:       // %bb.0:477; SVE2_128-NEXT:    adrp x8, .LCPI7_0478; SVE2_128-NEXT:    ldr q0, [x0]479; SVE2_128-NEXT:    ldr q1, [x1]480; SVE2_128-NEXT:    ldr q2, [x8, :lo12:.LCPI7_0]481; SVE2_128-NEXT:    tbl z0.h, { z0.h, z1.h }, z2.h482; SVE2_128-NEXT:    // kill: def $q0 killed $q0 killed $z0483; SVE2_128-NEXT:    ret484;485; SVE2_128_NOMAX-LABEL: shuffle_index_indices_from_both_ops_i16:486; SVE2_128_NOMAX:       // %bb.0:487; SVE2_128_NOMAX-NEXT:    cnth x8488; SVE2_128_NOMAX-NEXT:    adrp x9, .LCPI7_0489; SVE2_128_NOMAX-NEXT:    adrp x10, .LCPI7_1490; SVE2_128_NOMAX-NEXT:    mov z0.h, w8491; SVE2_128_NOMAX-NEXT:    ldr q1, [x9, :lo12:.LCPI7_0]492; SVE2_128_NOMAX-NEXT:    ldr q2, [x10, :lo12:.LCPI7_1]493; SVE2_128_NOMAX-NEXT:    ptrue p0.h, vl8494; SVE2_128_NOMAX-NEXT:    mad z0.h, p0/m, z1.h, z2.h495; SVE2_128_NOMAX-NEXT:    ldr q1, [x0]496; SVE2_128_NOMAX-NEXT:    ldr q2, [x1]497; SVE2_128_NOMAX-NEXT:    tbl z0.h, { z1.h, z2.h }, z0.h498; SVE2_128_NOMAX-NEXT:    // kill: def $q0 killed $q0 killed $z0499; SVE2_128_NOMAX-NEXT:    ret500;501; SVE2_NOMIN_NOMAX-LABEL: shuffle_index_indices_from_both_ops_i16:502; SVE2_NOMIN_NOMAX:       // %bb.0:503; SVE2_NOMIN_NOMAX-NEXT:    cnth x8504; SVE2_NOMIN_NOMAX-NEXT:    adrp x9, .LCPI7_0505; SVE2_NOMIN_NOMAX-NEXT:    adrp x10, .LCPI7_1506; SVE2_NOMIN_NOMAX-NEXT:    mov z0.h, w8507; SVE2_NOMIN_NOMAX-NEXT:    ldr q1, [x9, :lo12:.LCPI7_0]508; SVE2_NOMIN_NOMAX-NEXT:    ldr q2, [x10, :lo12:.LCPI7_1]509; SVE2_NOMIN_NOMAX-NEXT:    ptrue p0.h, vl8510; SVE2_NOMIN_NOMAX-NEXT:    mad z0.h, p0/m, z1.h, z2.h511; SVE2_NOMIN_NOMAX-NEXT:    ldr q1, [x0]512; SVE2_NOMIN_NOMAX-NEXT:    ldr q2, [x1]513; SVE2_NOMIN_NOMAX-NEXT:    tbl z0.h, { z1.h, z2.h }, z0.h514; SVE2_NOMIN_NOMAX-NEXT:    // kill: def $q0 killed $q0 killed $z0515; SVE2_NOMIN_NOMAX-NEXT:    ret516;517; SVE2_MIN_256_NOMAX-LABEL: shuffle_index_indices_from_both_ops_i16:518; SVE2_MIN_256_NOMAX:       // %bb.0:519; SVE2_MIN_256_NOMAX-NEXT:    ptrue p0.h, vl16520; SVE2_MIN_256_NOMAX-NEXT:    adrp x8, .LCPI7_0521; SVE2_MIN_256_NOMAX-NEXT:    add x8, x8, :lo12:.LCPI7_0522; SVE2_MIN_256_NOMAX-NEXT:    adrp x9, .LCPI7_1523; SVE2_MIN_256_NOMAX-NEXT:    add x9, x9, :lo12:.LCPI7_1524; SVE2_MIN_256_NOMAX-NEXT:    cnth x10525; SVE2_MIN_256_NOMAX-NEXT:    ld1h { z0.h }, p0/z, [x8]526; SVE2_MIN_256_NOMAX-NEXT:    ld1h { z1.h }, p0/z, [x9]527; SVE2_MIN_256_NOMAX-NEXT:    mov z2.h, w10528; SVE2_MIN_256_NOMAX-NEXT:    mad z0.h, p0/m, z2.h, z1.h529; SVE2_MIN_256_NOMAX-NEXT:    ldr q1, [x0]530; SVE2_MIN_256_NOMAX-NEXT:    ldr q2, [x1]531; SVE2_MIN_256_NOMAX-NEXT:    tbl z0.h, { z1.h, z2.h }, z0.h532; SVE2_MIN_256_NOMAX-NEXT:    // kill: def $q0 killed $q0 killed $z0533; SVE2_MIN_256_NOMAX-NEXT:    ret534  %op1 = load <8 x i16>, ptr %a535  %op2 = load <8 x i16>, ptr %b536  %1 = shufflevector <8 x i16> %op1, <8 x i16> %op2, <8 x i32> <i32 1, i32 9, i32 10, i32 11, i32 12, i32 12, i32 14, i32 15>537  ret <8 x i16> %1538}539