brintos

brintos / llvm-project-archived public Read only

0
0
Text · 72.8 KiB · fe5a6f1 Raw
1296 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc < %s -mtriple=arm64-eabi -aarch64-neon-syntax=apple -global-isel | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define <8 x i8> @tbl1_8b(<16 x i8> %A, <8 x i8> %B) nounwind {6; CHECK-LABEL: tbl1_8b:7; CHECK:       // %bb.0:8; CHECK-NEXT:    tbl.8b v0, { v0 }, v19; CHECK-NEXT:    ret10  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbl1.v8i8(<16 x i8> %A, <8 x i8> %B)11  ret <8 x i8> %tmp312}13 14define <16 x i8> @tbl1_16b(<16 x i8> %A, <16 x i8> %B) nounwind {15; CHECK-LABEL: tbl1_16b:16; CHECK:       // %bb.0:17; CHECK-NEXT:    tbl.16b v0, { v0 }, v118; CHECK-NEXT:    ret19  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbl1.v16i8(<16 x i8> %A, <16 x i8> %B)20  ret <16 x i8> %tmp321}22 23define <8 x i8> @tbl2_8b(<16 x i8> %A, <16 x i8> %B, <8 x i8> %C) {24; CHECK-SD-LABEL: tbl2_8b:25; CHECK-SD:       // %bb.0:26; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q127; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q128; CHECK-SD-NEXT:    tbl.8b v0, { v0, v1 }, v229; CHECK-SD-NEXT:    ret30;31; CHECK-GI-LABEL: tbl2_8b:32; CHECK-GI:       // %bb.0:33; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q134; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q135; CHECK-GI-NEXT:    tbl.8b v0, { v0, v1 }, v236; CHECK-GI-NEXT:    ret37  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbl2.v8i8(<16 x i8> %A, <16 x i8> %B, <8 x i8> %C)38  ret <8 x i8> %tmp339}40 41define <16 x i8> @tbl2_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) {42; CHECK-SD-LABEL: tbl2_16b:43; CHECK-SD:       // %bb.0:44; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q145; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q146; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1 }, v247; CHECK-SD-NEXT:    ret48;49; CHECK-GI-LABEL: tbl2_16b:50; CHECK-GI:       // %bb.0:51; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q152; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q153; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v254; CHECK-GI-NEXT:    ret55  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C)56  ret <16 x i8> %tmp357}58 59define <8 x i8> @tbl3_8b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <8 x i8> %D) {60; CHECK-SD-LABEL: tbl3_8b:61; CHECK-SD:       // %bb.0:62; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q263; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q264; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q265; CHECK-SD-NEXT:    tbl.8b v0, { v0, v1, v2 }, v366; CHECK-SD-NEXT:    ret67;68; CHECK-GI-LABEL: tbl3_8b:69; CHECK-GI:       // %bb.0:70; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q271; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q272; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q273; CHECK-GI-NEXT:    tbl.8b v0, { v0, v1, v2 }, v374; CHECK-GI-NEXT:    ret75  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbl3.v8i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <8 x i8> %D)76  ret <8 x i8> %tmp377}78 79define <16 x i8> @tbl3_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) {80; CHECK-SD-LABEL: tbl3_16b:81; CHECK-SD:       // %bb.0:82; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q283; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q284; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q285; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2 }, v386; CHECK-SD-NEXT:    ret87;88; CHECK-GI-LABEL: tbl3_16b:89; CHECK-GI:       // %bb.0:90; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q291; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q292; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2 def $q0_q1_q293; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1, v2 }, v394; CHECK-GI-NEXT:    ret95  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbl3.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D)96  ret <16 x i8> %tmp397}98 99define <8 x i8> @tbl4_8b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <8 x i8> %E) {100; CHECK-SD-LABEL: tbl4_8b:101; CHECK-SD:       // %bb.0:102; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3103; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3104; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3105; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3106; CHECK-SD-NEXT:    tbl.8b v0, { v0, v1, v2, v3 }, v4107; CHECK-SD-NEXT:    ret108;109; CHECK-GI-LABEL: tbl4_8b:110; CHECK-GI:       // %bb.0:111; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3112; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3113; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3114; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3115; CHECK-GI-NEXT:    tbl.8b v0, { v0, v1, v2, v3 }, v4116; CHECK-GI-NEXT:    ret117  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbl4.v8i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <8 x i8> %E)118  ret <8 x i8> %tmp3119}120 121define <16 x i8> @tbl4_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) {122; CHECK-SD-LABEL: tbl4_16b:123; CHECK-SD:       // %bb.0:124; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3125; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3126; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3127; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3128; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4129; CHECK-SD-NEXT:    ret130;131; CHECK-GI-LABEL: tbl4_16b:132; CHECK-GI:       // %bb.0:133; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3134; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3135; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3136; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3137; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4138; CHECK-GI-NEXT:    ret139  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbl4.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E)140  ret <16 x i8> %tmp3141}142 143; CHECK-SD-LABEL: .LCPI8_0:144; CHECK-SD:              .byte   0                               // 0x0145; CHECK-SD-NEXT:         .byte   4                               // 0x4146; CHECK-SD-NEXT:         .byte   8                               // 0x8147; CHECK-SD-NEXT:         .byte   12                              // 0xc148; CHECK-SD-NEXT:         .byte   255                             // 0xff149; CHECK-SD-NEXT:         .byte   255                             // 0xff150; CHECK-SD-NEXT:         .byte   255                             // 0xff151; CHECK-SD-NEXT:         .byte   255                             // 0xff152 153; CHECK-GI-LABEL: .LCPI8_0:154; CHECK-GI:              .byte   0                               // 0x0155; CHECK-GI-NEXT:         .byte   1                               // 0x1156; CHECK-GI-NEXT:         .byte   2                               // 0x2157; CHECK-GI-NEXT:         .byte   3                               // 0x3158; CHECK-GI-NEXT:         .byte   12                              // 0xc159; CHECK-GI-NEXT:         .byte   13                              // 0xd160; CHECK-GI-NEXT:         .byte   14                              // 0xe161; CHECK-GI-NEXT:         .byte   15                              // 0xf162; CHECK-GI-LABEL: .LCPI8_1:163; CHECK-GI:              .byte   0                               // 0x0164; CHECK-GI-NEXT:         .byte   4                               // 0x4165; CHECK-GI-NEXT:         .byte   8                               // 0x8166; CHECK-GI-NEXT:         .byte   12                              // 0xc167; CHECK-GI-NEXT:         .byte   255                             // 0xff168; CHECK-GI-NEXT:         .byte   255                             // 0xff169; CHECK-GI-NEXT:         .byte   255                             // 0xff170; CHECK-GI-NEXT:         .byte   255                             // 0xff171 172define <8 x i8> @shuffled_tbl2_to_tbl4_v8i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {173; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_v8i8:174; CHECK-SD:       // %bb.0:175; CHECK-SD-NEXT:    adrp x8, .LCPI8_0176; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1177; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3178; CHECK-SD-NEXT:    ldr d4, [x8, :lo12:.LCPI8_0]179; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1180; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3181; CHECK-SD-NEXT:    tbl.8b v0, { v0, v1 }, v4182; CHECK-SD-NEXT:    tbl.8b v1, { v2, v3 }, v4183; CHECK-SD-NEXT:    mov.s v0[1], v1[1]184; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0185; CHECK-SD-NEXT:    ret186;187; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_v8i8:188; CHECK-GI:       // %bb.0:189; CHECK-GI-NEXT:    adrp x8, .LCPI8_1190; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1191; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3192; CHECK-GI-NEXT:    ldr d4, [x8, :lo12:.LCPI8_1]193; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1194; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3195; CHECK-GI-NEXT:    adrp x8, .LCPI8_0196; CHECK-GI-NEXT:    tbl.8b v0, { v0, v1 }, v4197; CHECK-GI-NEXT:    tbl.8b v1, { v2, v3 }, v4198; CHECK-GI-NEXT:    mov.d v0[1], v1[0]199; CHECK-GI-NEXT:    ldr d1, [x8, :lo12:.LCPI8_0]200; CHECK-GI-NEXT:    tbl.16b v0, { v0 }, v1201; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0202; CHECK-GI-NEXT:    ret203  %t1 = call <8 x i8> @llvm.aarch64.neon.tbl2.v8i8(<16 x i8> %a, <16 x i8> %b, <8 x i8> <i8 0, i8 4, i8 8, i8 12, i8 -1, i8 -1, i8 -1, i8 -1>)204  %t2 = call <8 x i8> @llvm.aarch64.neon.tbl2.v8i8(<16 x i8> %c, <16 x i8> %d, <8 x i8> <i8 0, i8 4, i8 8, i8 12, i8 -1, i8 -1, i8 -1, i8 -1>)205  %s = shufflevector <8 x i8> %t1, <8 x i8> %t2, <8 x i32> <i32 0, i32 1, i32 2, i32 3, i32 12, i32 13, i32 14, i32 15>206  ret <8 x i8> %s207}208 209; CHECK-SD-LABEL: .LCPI9_0:210; CHECK-SD-NEXT:     .byte    0                               // 0x0211; CHECK-SD-NEXT:     .byte    4                               // 0x4212; CHECK-SD-NEXT:     .byte    8                               // 0x8213; CHECK-SD-NEXT:     .byte    12                              // 0xc214; CHECK-SD-NEXT:     .byte    16                              // 0x10215; CHECK-SD-NEXT:     .byte    20                              // 0x14216; CHECK-SD-NEXT:     .byte    24                              // 0x18217; CHECK-SD-NEXT:     .byte    28                              // 0x1c218; CHECK-SD-NEXT:     .byte   32                              // 0x20219; CHECK-SD-NEXT:     .byte   36                              // 0x24220; CHECK-SD-NEXT:     .byte   40                              // 0x28221; CHECK-SD-NEXT:     .byte   44                              // 0x2c222; CHECK-SD-NEXT:     .byte   48                              // 0x30223; CHECK-SD-NEXT:     .byte   52                              // 0x34224; CHECK-SD-NEXT:     .byte   56                              // 0x38225; CHECK-SD-NEXT:     .byte   60                              // 0x3c226 227;CHECK-GI-LABEL: .LCPI9_0:228;CHECK-GI:              .byte   0                               // 0x0229;CHECK-GI-NEXT:         .byte   1                               // 0x1230;CHECK-GI-NEXT:         .byte   2                               // 0x2231;CHECK-GI-NEXT:         .byte   3                               // 0x3232;CHECK-GI-NEXT:         .byte   4                               // 0x4233;CHECK-GI-NEXT:         .byte   5                               // 0x5234;CHECK-GI-NEXT:         .byte   6                               // 0x6235;CHECK-GI-NEXT:         .byte   7                               // 0x7236;CHECK-GI-NEXT:         .byte   16                              // 0x10237;CHECK-GI-NEXT:         .byte   17                              // 0x11238;CHECK-GI-NEXT:         .byte   18                              // 0x12239;CHECK-GI-NEXT:         .byte   19                              // 0x13240;CHECK-GI-NEXT:         .byte   20                              // 0x14241;CHECK-GI-NEXT:         .byte   21                              // 0x15242;CHECK-GI-NEXT:         .byte   22                              // 0x16243;CHECK-GI-NEXT:         .byte   23                              // 0x17244;CHECK-GI-LABEL: .LCPI9_1:245;CHECK-GI:              .byte   0                               // 0x0246;CHECK-GI-NEXT:         .byte   4                               // 0x4247;CHECK-GI-NEXT:         .byte   8                               // 0x8248;CHECK-GI-NEXT:         .byte   12                              // 0xc249;CHECK-GI-NEXT:         .byte   16                              // 0x10250;CHECK-GI-NEXT:         .byte   20                              // 0x14251;CHECK-GI-NEXT:         .byte   24                              // 0x18252;CHECK-GI-NEXT:         .byte   28                              // 0x1c253;CHECK-GI-NEXT:         .byte   255                             // 0xff254;CHECK-GI-NEXT:         .byte   255                             // 0xff255;CHECK-GI-NEXT:         .byte   255                             // 0xff256;CHECK-GI-NEXT:         .byte   255                             // 0xff257;CHECK-GI-NEXT:         .byte   255                             // 0xff258;CHECK-GI-NEXT:         .byte   255                             // 0xff259;CHECK-GI-NEXT:         .byte   255                             // 0xff260;CHECK-GI-NEXT:         .byte   255                             // 0xff261 262define <16 x i8> @shuffled_tbl2_to_tbl4(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {263; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4:264; CHECK-SD:       // %bb.0:265; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3266; CHECK-SD-NEXT:    adrp x8, .LCPI9_0267; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3268; CHECK-SD-NEXT:    ldr q4, [x8, :lo12:.LCPI9_0]269; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3270; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3271; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4272; CHECK-SD-NEXT:    ret273;274; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4:275; CHECK-GI:       // %bb.0:276; CHECK-GI-NEXT:    adrp x8, .LCPI9_1277; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1278; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3279; CHECK-GI-NEXT:    ldr q4, [x8, :lo12:.LCPI9_1]280; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1281; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3282; CHECK-GI-NEXT:    adrp x8, .LCPI9_0283; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v4284; CHECK-GI-NEXT:    tbl.16b v1, { v2, v3 }, v4285; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI9_0]286; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v2287; CHECK-GI-NEXT:    ret288  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)289  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)290  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>291  ret <16 x i8> %s292}293 294; CHECK-GI-LABEL: .LCPI10_0:295; CHECK-GI:              .byte   0                               // 0x0296; CHECK-GI-NEXT:         .byte   1                               // 0x1297; CHECK-GI-NEXT:         .byte   2                               // 0x2298; CHECK-GI-NEXT:         .byte   3                               // 0x3299; CHECK-GI-NEXT:         .byte   4                               // 0x4300; CHECK-GI-NEXT:         .byte   5                               // 0x5301; CHECK-GI-NEXT:         .byte   6                               // 0x6302; CHECK-GI-NEXT:         .byte   7                               // 0x7303; CHECK-GI-NEXT:         .byte   16                              // 0x10304; CHECK-GI-NEXT:         .byte   17                              // 0x11305; CHECK-GI-NEXT:         .byte   18                              // 0x12306; CHECK-GI-NEXT:         .byte   19                              // 0x13307; CHECK-GI-NEXT:         .byte   20                              // 0x14308; CHECK-GI-NEXT:         .byte   21                              // 0x15309; CHECK-GI-NEXT:         .byte   22                              // 0x16310; CHECK-GI-NEXT:         .byte   23                              // 0x17311; CHECK-GI-LABEL: .LCPI10_1:312; CHECK-GI:              .byte   0                               // 0x0313; CHECK-GI-NEXT:         .byte   4                               // 0x4314; CHECK-GI-NEXT:         .byte   8                               // 0x8315; CHECK-GI-NEXT:         .byte   12                              // 0xc316; CHECK-GI-NEXT:         .byte   16                              // 0x10317; CHECK-GI-NEXT:         .byte   20                              // 0x14318; CHECK-GI-NEXT:         .byte   24                              // 0x18319; CHECK-GI-NEXT:         .byte   28                              // 0x1c320; CHECK-GI-NEXT:         .byte   255                             // 0xff321; CHECK-GI-NEXT:         .byte   255                             // 0xff322; CHECK-GI-NEXT:         .byte   255                             // 0xff323; CHECK-GI-NEXT:         .byte   255                             // 0xff324; CHECK-GI-NEXT:         .byte   255                             // 0xff325; CHECK-GI-NEXT:         .byte   255                             // 0xff326; CHECK-GI-NEXT:         .byte   255                             // 0xff327; CHECK-GI-NEXT:         .byte   255                             // 0xff328 329define <16 x i8> @shuffled_tbl2_to_tbl4_nonconst_first_mask(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d, i8 %v) {330; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_nonconst_first_mask:331; CHECK-SD:       // %bb.0:332; CHECK-SD-NEXT:    fmov s4, w0333; CHECK-SD-NEXT:    mov w8, #32 // =0x20334; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3335; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3336; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3337; CHECK-SD-NEXT:    mov.b v4[1], w0338; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3339; CHECK-SD-NEXT:    mov.b v4[2], w0340; CHECK-SD-NEXT:    mov.b v4[3], w0341; CHECK-SD-NEXT:    mov.b v4[4], w0342; CHECK-SD-NEXT:    mov.b v4[5], w0343; CHECK-SD-NEXT:    mov.b v4[6], w0344; CHECK-SD-NEXT:    mov.b v4[7], w0345; CHECK-SD-NEXT:    mov.b v4[8], w8346; CHECK-SD-NEXT:    mov w8, #36 // =0x24347; CHECK-SD-NEXT:    mov.b v4[9], w8348; CHECK-SD-NEXT:    mov w8, #40 // =0x28349; CHECK-SD-NEXT:    mov.b v4[10], w8350; CHECK-SD-NEXT:    mov w8, #44 // =0x2c351; CHECK-SD-NEXT:    mov.b v4[11], w8352; CHECK-SD-NEXT:    mov w8, #48 // =0x30353; CHECK-SD-NEXT:    mov.b v4[12], w8354; CHECK-SD-NEXT:    mov w8, #52 // =0x34355; CHECK-SD-NEXT:    mov.b v4[13], w8356; CHECK-SD-NEXT:    mov w8, #56 // =0x38357; CHECK-SD-NEXT:    mov.b v4[14], w8358; CHECK-SD-NEXT:    mov w8, #60 // =0x3c359; CHECK-SD-NEXT:    mov.b v4[15], w8360; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4361; CHECK-SD-NEXT:    ret362;363; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_nonconst_first_mask:364; CHECK-GI:       // %bb.0:365; CHECK-GI-NEXT:    fmov s4, w0366; CHECK-GI-NEXT:    mov w8, #255 // =0xff367; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1368; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3369; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1370; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3371; CHECK-GI-NEXT:    mov.b v4[1], w0372; CHECK-GI-NEXT:    mov.b v4[2], w0373; CHECK-GI-NEXT:    mov.b v4[3], w0374; CHECK-GI-NEXT:    mov.b v4[4], w0375; CHECK-GI-NEXT:    mov.b v4[5], w0376; CHECK-GI-NEXT:    mov.b v4[6], w0377; CHECK-GI-NEXT:    mov.b v4[7], w0378; CHECK-GI-NEXT:    mov.b v4[8], w8379; CHECK-GI-NEXT:    mov.b v4[9], w8380; CHECK-GI-NEXT:    mov.b v4[10], w8381; CHECK-GI-NEXT:    mov.b v4[11], w8382; CHECK-GI-NEXT:    mov.b v4[12], w8383; CHECK-GI-NEXT:    mov.b v4[13], w8384; CHECK-GI-NEXT:    mov.b v4[14], w8385; CHECK-GI-NEXT:    mov.b v4[15], w8386; CHECK-GI-NEXT:    adrp x8, .LCPI10_1387; CHECK-GI-NEXT:    ldr q5, [x8, :lo12:.LCPI10_1]388; CHECK-GI-NEXT:    adrp x8, .LCPI10_0389; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v4390; CHECK-GI-NEXT:    tbl.16b v1, { v2, v3 }, v5391; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI10_0]392; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v2393; CHECK-GI-NEXT:    ret394  %ins.0 = insertelement <16 x i8> poison, i8 %v, i32 0395  %ins.1 = insertelement <16 x i8> %ins.0, i8 %v, i32 1396  %ins.2 = insertelement <16 x i8> %ins.1, i8 %v, i32 2397  %ins.3 = insertelement <16 x i8> %ins.2, i8 %v, i32 3398  %ins.4 = insertelement <16 x i8> %ins.3, i8 %v, i32 4399  %ins.5 = insertelement <16 x i8> %ins.4, i8 %v, i32 5400  %ins.6 = insertelement <16 x i8> %ins.5, i8 %v, i32 6401  %ins.7 = insertelement <16 x i8> %ins.6, i8 %v, i32 7402  %ins.8 = insertelement <16 x i8> %ins.7, i8 -1, i32 8403  %ins.9 = insertelement <16 x i8> %ins.8, i8 -1, i32 9404  %ins.10 = insertelement <16 x i8> %ins.9, i8 -1, i32 10405  %ins.11 = insertelement <16 x i8> %ins.10, i8 -1, i32 11406  %ins.12 = insertelement <16 x i8> %ins.11, i8 -1, i32 12407  %ins.13 = insertelement <16 x i8> %ins.12, i8 -1, i32 13408  %ins.14 = insertelement <16 x i8> %ins.13, i8 -1, i32 14409  %ins.15 = insertelement <16 x i8> %ins.14, i8 -1, i32 15410  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %ins.15)411  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)412  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>413  ret <16 x i8> %s414}415 416; CHECK-GI-LABEL: .LCPI11_0:417; CHECK-GI:              .byte   0                               // 0x0418; CHECK-GI-NEXT:         .byte   1                               // 0x1419; CHECK-GI-NEXT:         .byte   2                               // 0x2420; CHECK-GI-NEXT:         .byte   3                               // 0x3421; CHECK-GI-NEXT:         .byte   4                               // 0x4422; CHECK-GI-NEXT:         .byte   5                               // 0x5423; CHECK-GI-NEXT:         .byte   6                               // 0x6424; CHECK-GI-NEXT:         .byte   15                              // 0xf425; CHECK-GI-NEXT:         .byte   16                              // 0x10426; CHECK-GI-NEXT:         .byte   17                              // 0x11427; CHECK-GI-NEXT:         .byte   18                              // 0x12428; CHECK-GI-NEXT:         .byte   19                              // 0x13429; CHECK-GI-NEXT:         .byte   20                              // 0x14430; CHECK-GI-NEXT:         .byte   21                              // 0x15431; CHECK-GI-NEXT:         .byte   22                              // 0x16432; CHECK-GI-NEXT:         .byte   31                              // 0x1f433; CHECK-GI-LABEL: .LCPI11_1:434; CHECK-GI:              .byte   0                               // 0x0435; CHECK-GI-NEXT:         .byte   4                               // 0x4436; CHECK-GI-NEXT:         .byte   8                               // 0x8437; CHECK-GI-NEXT:         .byte   12                              // 0xc438; CHECK-GI-NEXT:         .byte   16                              // 0x10439; CHECK-GI-NEXT:         .byte   20                              // 0x14440; CHECK-GI-NEXT:         .byte   24                              // 0x18441; CHECK-GI-NEXT:         .byte   28                              // 0x1c442; CHECK-GI-NEXT:         .byte   255                             // 0xff443; CHECK-GI-NEXT:         .byte   255                             // 0xff444; CHECK-GI-NEXT:         .byte   255                             // 0xff445; CHECK-GI-NEXT:         .byte   255                             // 0xff446; CHECK-GI-NEXT:         .byte   255                             // 0xff447; CHECK-GI-NEXT:         .byte   255                             // 0xff448; CHECK-GI-NEXT:         .byte   255                             // 0xff449; CHECK-GI-NEXT:         .byte   255                             // 0xff450 451define <16 x i8> @shuffled_tbl2_to_tbl4_nonconst_first_mask2(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d, i8 %v) {452; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_nonconst_first_mask2:453; CHECK-SD:       // %bb.0:454; CHECK-SD-NEXT:    mov w8, #1 // =0x1455; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3456; CHECK-SD-NEXT:    fmov s4, w8457; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3458; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3459; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3460; CHECK-SD-NEXT:    mov.b v4[1], w8461; CHECK-SD-NEXT:    mov.b v4[2], w8462; CHECK-SD-NEXT:    mov.b v4[3], w8463; CHECK-SD-NEXT:    mov.b v4[4], w8464; CHECK-SD-NEXT:    mov.b v4[5], w8465; CHECK-SD-NEXT:    mov.b v4[6], w8466; CHECK-SD-NEXT:    mov w8, #32 // =0x20467; CHECK-SD-NEXT:    mov.b v4[7], w0468; CHECK-SD-NEXT:    mov.b v4[8], w8469; CHECK-SD-NEXT:    mov w8, #36 // =0x24470; CHECK-SD-NEXT:    mov.b v4[9], w8471; CHECK-SD-NEXT:    mov w8, #40 // =0x28472; CHECK-SD-NEXT:    mov.b v4[10], w8473; CHECK-SD-NEXT:    mov w8, #44 // =0x2c474; CHECK-SD-NEXT:    mov.b v4[11], w8475; CHECK-SD-NEXT:    mov w8, #48 // =0x30476; CHECK-SD-NEXT:    mov.b v4[12], w8477; CHECK-SD-NEXT:    mov w8, #52 // =0x34478; CHECK-SD-NEXT:    mov.b v4[13], w8479; CHECK-SD-NEXT:    mov w8, #56 // =0x38480; CHECK-SD-NEXT:    mov.b v4[14], w8481; CHECK-SD-NEXT:    mov w8, #31 // =0x1f482; CHECK-SD-NEXT:    mov.b v4[15], w8483; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4484; CHECK-SD-NEXT:    ret485;486; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_nonconst_first_mask2:487; CHECK-GI:       // %bb.0:488; CHECK-GI-NEXT:    mov w8, #1 // =0x1489; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1490; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3491; CHECK-GI-NEXT:    fmov s4, w8492; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1493; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3494; CHECK-GI-NEXT:    mov.b v4[1], w8495; CHECK-GI-NEXT:    mov.b v4[2], w8496; CHECK-GI-NEXT:    mov.b v4[3], w8497; CHECK-GI-NEXT:    mov.b v4[4], w8498; CHECK-GI-NEXT:    mov.b v4[5], w8499; CHECK-GI-NEXT:    mov.b v4[6], w8500; CHECK-GI-NEXT:    mov.b v4[7], w8501; CHECK-GI-NEXT:    mov w8, #255 // =0xff502; CHECK-GI-NEXT:    mov.b v4[8], w8503; CHECK-GI-NEXT:    mov.b v4[9], w8504; CHECK-GI-NEXT:    mov.b v4[10], w8505; CHECK-GI-NEXT:    mov.b v4[11], w8506; CHECK-GI-NEXT:    mov.b v4[12], w0507; CHECK-GI-NEXT:    mov.b v4[13], w0508; CHECK-GI-NEXT:    mov.b v4[14], w8509; CHECK-GI-NEXT:    adrp x8, .LCPI11_1510; CHECK-GI-NEXT:    ldr q5, [x8, :lo12:.LCPI11_1]511; CHECK-GI-NEXT:    adrp x8, .LCPI11_0512; CHECK-GI-NEXT:    mov.b v4[15], w0513; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v4514; CHECK-GI-NEXT:    tbl.16b v1, { v2, v3 }, v5515; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI11_0]516; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v2517; CHECK-GI-NEXT:    ret518  %ins.0 = insertelement <16 x i8> poison, i8 1, i32 0519  %ins.1 = insertelement <16 x i8> %ins.0, i8 1, i32 1520  %ins.2 = insertelement <16 x i8> %ins.1, i8 1, i32 2521  %ins.3 = insertelement <16 x i8> %ins.2, i8 1, i32 3522  %ins.4 = insertelement <16 x i8> %ins.3, i8 1, i32 4523  %ins.5 = insertelement <16 x i8> %ins.4, i8 1, i32 5524  %ins.6 = insertelement <16 x i8> %ins.5, i8 1, i32 6525  %ins.7 = insertelement <16 x i8> %ins.6, i8 1, i32 7526  %ins.8 = insertelement <16 x i8> %ins.7, i8 -1, i32 8527  %ins.9 = insertelement <16 x i8> %ins.8, i8 -1, i32 9528  %ins.10 = insertelement <16 x i8> %ins.9, i8 -1, i32 10529  %ins.11 = insertelement <16 x i8> %ins.10, i8 -1, i32 11530  %ins.12 = insertelement <16 x i8> %ins.11, i8 %v, i32 12531  %ins.13 = insertelement <16 x i8> %ins.12, i8 %v, i32 13532  %ins.14 = insertelement <16 x i8> %ins.13, i8 -1, i32 14533  %ins.15 = insertelement <16 x i8> %ins.14, i8 %v, i32 15534  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %ins.15)535  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)536  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 31>537  ret <16 x i8> %s538}539 540; CHECK-SD-LABEL: .LCPI12_0:541; CHECK-SD:              .byte   0                               // 0x0542; CHECK-SD-NEXT:         .byte   4                               // 0x4543; CHECK-SD-NEXT:         .byte   8                               // 0x8544; CHECK-SD-NEXT:         .byte   12                              // 0xc545; CHECK-SD-NEXT:         .byte   16                              // 0x10546; CHECK-SD-NEXT:         .byte   20                              // 0x14547; CHECK-SD-NEXT:         .byte   24                              // 0x18548; CHECK-SD-NEXT:         .byte   28                              // 0x1c549; CHECK-SD-NEXT:         .byte   255                             // 0xff550; CHECK-SD-NEXT:         .byte   255                             // 0xff551; CHECK-SD-NEXT:         .byte   255                             // 0xff552; CHECK-SD-NEXT:         .byte   255                             // 0xff553; CHECK-SD-NEXT:         .byte   255                             // 0xff554; CHECK-SD-NEXT:         .byte   255                             // 0xff555; CHECK-SD-NEXT:         .byte   255                             // 0xff556; CHECK-SD-NEXT:         .byte   255                             // 0xff557 558; CHECK-GI-LABEL: .LCPI12_0:559; CHECK-GI:              .byte   0                               // 0x0560; CHECK-GI-NEXT:         .byte   1                               // 0x1561; CHECK-GI-NEXT:         .byte   2                               // 0x2562; CHECK-GI-NEXT:         .byte   3                               // 0x3563; CHECK-GI-NEXT:         .byte   4                               // 0x4564; CHECK-GI-NEXT:         .byte   5                               // 0x5565; CHECK-GI-NEXT:         .byte   6                               // 0x6566; CHECK-GI-NEXT:         .byte   7                               // 0x7567; CHECK-GI-NEXT:         .byte   16                              // 0x10568; CHECK-GI-NEXT:         .byte   17                              // 0x11569; CHECK-GI-NEXT:         .byte   18                              // 0x12570; CHECK-GI-NEXT:         .byte   19                              // 0x13571; CHECK-GI-NEXT:         .byte   20                              // 0x14572; CHECK-GI-NEXT:         .byte   21                              // 0x15573; CHECK-GI-NEXT:         .byte   22                              // 0x16574; CHECK-GI-NEXT:         .byte   23                              // 0x17575; CHECK-GI-LABEL: .LCPI12_1:576; CHECK-GI:              .byte   0                               // 0x0577; CHECK-GI-NEXT:         .byte   4                               // 0x4578; CHECK-GI-NEXT:         .byte   8                               // 0x8579; CHECK-GI-NEXT:         .byte   12                              // 0xc580; CHECK-GI-NEXT:         .byte   16                              // 0x10581; CHECK-GI-NEXT:         .byte   20                              // 0x14582; CHECK-GI-NEXT:         .byte   24                              // 0x18583; CHECK-GI-NEXT:         .byte   28                              // 0x1c584; CHECK-GI-NEXT:         .byte   255                             // 0xff585; CHECK-GI-NEXT:         .byte   255                             // 0xff586; CHECK-GI-NEXT:         .byte   255                             // 0xff587; CHECK-GI-NEXT:         .byte   255                             // 0xff588; CHECK-GI-NEXT:         .byte   255                             // 0xff589; CHECK-GI-NEXT:         .byte   255                             // 0xff590; CHECK-GI-NEXT:         .byte   255                             // 0xff591; CHECK-GI-NEXT:         .byte   255                             // 0xff592 593define <16 x i8> @shuffled_tbl2_to_tbl4_nonconst_second_mask(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d, i8 %v) {594; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_nonconst_second_mask:595; CHECK-SD:       // %bb.0:596; CHECK-SD-NEXT:    movi.2d v4, #0xffffffffffffffff597; CHECK-SD-NEXT:    adrp x8, .LCPI12_0598; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3599; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1600; CHECK-SD-NEXT:    ldr q5, [x8, :lo12:.LCPI12_0]601; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3602; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1603; CHECK-SD-NEXT:    tbl.16b v2, { v2, v3 }, v5604; CHECK-SD-NEXT:    mov.b v4[0], w0605; CHECK-SD-NEXT:    mov.b v4[1], w0606; CHECK-SD-NEXT:    mov.b v4[2], w0607; CHECK-SD-NEXT:    mov.b v4[3], w0608; CHECK-SD-NEXT:    mov.b v4[4], w0609; CHECK-SD-NEXT:    mov.b v4[5], w0610; CHECK-SD-NEXT:    mov.b v4[6], w0611; CHECK-SD-NEXT:    mov.b v4[7], w0612; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1 }, v4613; CHECK-SD-NEXT:    mov.d v2[1], v0[0]614; CHECK-SD-NEXT:    mov.16b v0, v2615; CHECK-SD-NEXT:    ret616;617; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_nonconst_second_mask:618; CHECK-GI:       // %bb.0:619; CHECK-GI-NEXT:    fmov s4, w0620; CHECK-GI-NEXT:    mov w8, #255 // =0xff621; CHECK-GI-NEXT:    adrp x9, .LCPI12_1622; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3623; CHECK-GI-NEXT:    ldr q5, [x9, :lo12:.LCPI12_1]624; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1625; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3626; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1627; CHECK-GI-NEXT:    mov.b v4[1], w0628; CHECK-GI-NEXT:    tbl.16b v2, { v2, v3 }, v5629; CHECK-GI-NEXT:    mov.b v4[2], w0630; CHECK-GI-NEXT:    mov.b v4[3], w0631; CHECK-GI-NEXT:    mov.b v4[4], w0632; CHECK-GI-NEXT:    mov.b v4[5], w0633; CHECK-GI-NEXT:    mov.b v4[6], w0634; CHECK-GI-NEXT:    mov.b v4[7], w0635; CHECK-GI-NEXT:    mov.b v4[8], w8636; CHECK-GI-NEXT:    mov.b v4[9], w8637; CHECK-GI-NEXT:    mov.b v4[10], w8638; CHECK-GI-NEXT:    mov.b v4[11], w8639; CHECK-GI-NEXT:    mov.b v4[12], w8640; CHECK-GI-NEXT:    mov.b v4[13], w8641; CHECK-GI-NEXT:    mov.b v4[14], w8642; CHECK-GI-NEXT:    mov.b v4[15], w8643; CHECK-GI-NEXT:    adrp x8, .LCPI12_0644; CHECK-GI-NEXT:    tbl.16b v3, { v0, v1 }, v4645; CHECK-GI-NEXT:    ldr q0, [x8, :lo12:.LCPI12_0]646; CHECK-GI-NEXT:    tbl.16b v0, { v2, v3 }, v0647; CHECK-GI-NEXT:    ret648  %ins.0 = insertelement <16 x i8> poison, i8 %v, i32 0649  %ins.1 = insertelement <16 x i8> %ins.0, i8 %v, i32 1650  %ins.2 = insertelement <16 x i8> %ins.1, i8 %v, i32 2651  %ins.3 = insertelement <16 x i8> %ins.2, i8 %v, i32 3652  %ins.4 = insertelement <16 x i8> %ins.3, i8 %v, i32 4653  %ins.5 = insertelement <16 x i8> %ins.4, i8 %v, i32 5654  %ins.6 = insertelement <16 x i8> %ins.5, i8 %v, i32 6655  %ins.7 = insertelement <16 x i8> %ins.6, i8 %v, i32 7656  %ins.8 = insertelement <16 x i8> %ins.7, i8 -1, i32 8657  %ins.9 = insertelement <16 x i8> %ins.8, i8 -1, i32 9658  %ins.10 = insertelement <16 x i8> %ins.9, i8 -1, i32 10659  %ins.11 = insertelement <16 x i8> %ins.10, i8 -1, i32 11660  %ins.12 = insertelement <16 x i8> %ins.11, i8 -1, i32 12661  %ins.13 = insertelement <16 x i8> %ins.12, i8 -1, i32 13662  %ins.14 = insertelement <16 x i8> %ins.13, i8 -1, i32 14663  %ins.15 = insertelement <16 x i8> %ins.14, i8 -1, i32 15664  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)665  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %ins.15)666  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>667  ret <16 x i8> %s668}669 670; CHECK-SD-LABEL: .LCPI13_0:671; CHECK-SD:              .byte   0                               // 0x0672; CHECK-SD-NEXT:         .byte   4                               // 0x4673; CHECK-SD-NEXT:         .byte   8                               // 0x8674; CHECK-SD-NEXT:         .byte   12                              // 0xc675; CHECK-SD-NEXT:         .byte   16                              // 0x10676; CHECK-SD-NEXT:         .byte   20                              // 0x14677; CHECK-SD-NEXT:         .byte   24                              // 0x18678; CHECK-SD-NEXT:         .byte   28                              // 0x1c679; CHECK-SD-NEXT:         .byte   255                             // 0xff680; CHECK-SD-NEXT:         .byte   255                             // 0xff681; CHECK-SD-NEXT:         .byte   255                             // 0xff682; CHECK-SD-NEXT:         .byte   255                             // 0xff683; CHECK-SD-NEXT:         .byte   255                             // 0xff684; CHECK-SD-NEXT:         .byte   255                             // 0xff685; CHECK-SD-NEXT:         .byte   255                             // 0xff686; CHECK-SD-NEXT:         .byte   255                             // 0xff687; CHECK-SD-LABEL: .LCPI13_1:688; CHECK-SD:              .byte   0                               // 0x0689; CHECK-SD-NEXT:         .byte   1                               // 0x1690; CHECK-SD-NEXT:         .byte   2                               // 0x2691; CHECK-SD-NEXT:         .byte   3                               // 0x3692; CHECK-SD-NEXT:         .byte   4                               // 0x4693; CHECK-SD-NEXT:         .byte   5                               // 0x5694; CHECK-SD-NEXT:         .byte   6                               // 0x6695; CHECK-SD-NEXT:         .byte   7                               // 0x7696; CHECK-SD-NEXT:         .byte   16                              // 0x10697; CHECK-SD-NEXT:         .byte   17                              // 0x11698; CHECK-SD-NEXT:         .byte   18                              // 0x12699; CHECK-SD-NEXT:         .byte   19                              // 0x13700; CHECK-SD-NEXT:         .byte   20                              // 0x14701; CHECK-SD-NEXT:         .byte   21                              // 0x15702; CHECK-SD-NEXT:         .byte   30                              // 0x1e703; CHECK-SD-NEXT:         .byte   31                              // 0x1f704 705; CHECK-GI-LABEL: .LCPI13_0:706; CHECK-GI:              .byte   0                               // 0x0707; CHECK-GI-NEXT:         .byte   1                               // 0x1708; CHECK-GI-NEXT:         .byte   2                               // 0x2709; CHECK-GI-NEXT:         .byte   3                               // 0x3710; CHECK-GI-NEXT:         .byte   4                               // 0x4711; CHECK-GI-NEXT:         .byte   5                               // 0x5712; CHECK-GI-NEXT:         .byte   6                               // 0x6713; CHECK-GI-NEXT:         .byte   7                               // 0x7714; CHECK-GI-NEXT:         .byte   16                              // 0x10715; CHECK-GI-NEXT:         .byte   17                              // 0x11716; CHECK-GI-NEXT:         .byte   18                              // 0x12717; CHECK-GI-NEXT:         .byte   19                              // 0x13718; CHECK-GI-NEXT:         .byte   20                              // 0x14719; CHECK-GI-NEXT:         .byte   21                              // 0x15720; CHECK-GI-NEXT:         .byte   30                              // 0x1e721; CHECK-GI-NEXT:         .byte   31                              // 0x1f722; CHECK-GI-LABEL: .LCPI13_1:723; CHECK-GI:              .byte   0                               // 0x0724; CHECK-GI-NEXT:         .byte   4                               // 0x4725; CHECK-GI-NEXT:         .byte   8                               // 0x8726; CHECK-GI-NEXT:         .byte   12                              // 0xc727; CHECK-GI-NEXT:         .byte   16                              // 0x10728; CHECK-GI-NEXT:         .byte   20                              // 0x14729; CHECK-GI-NEXT:         .byte   24                              // 0x18730; CHECK-GI-NEXT:         .byte   28                              // 0x1c731; CHECK-GI-NEXT:         .byte   255                             // 0xff732; CHECK-GI-NEXT:         .byte   255                             // 0xff733; CHECK-GI-NEXT:         .byte   255                             // 0xff734; CHECK-GI-NEXT:         .byte   255                             // 0xff735; CHECK-GI-NEXT:         .byte   255                             // 0xff736; CHECK-GI-NEXT:         .byte   255                             // 0xff737; CHECK-GI-NEXT:         .byte   255                             // 0xff738; CHECK-GI-NEXT:         .byte   255                             // 0xff739 740define <16 x i8> @shuffled_tbl2_to_tbl4_nonconst_second_mask2(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d, i8 %v) {741; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_nonconst_second_mask2:742; CHECK-SD:       // %bb.0:743; CHECK-SD-NEXT:    dup.16b v4, w0744; CHECK-SD-NEXT:    mov w8, #255 // =0xff745; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3746; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1747; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3748; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1749; CHECK-SD-NEXT:    mov.b v4[8], w8750; CHECK-SD-NEXT:    mov.b v4[9], w8751; CHECK-SD-NEXT:    mov.b v4[10], w8752; CHECK-SD-NEXT:    mov.b v4[11], w8753; CHECK-SD-NEXT:    mov.b v4[12], w8754; CHECK-SD-NEXT:    mov.b v4[13], w8755; CHECK-SD-NEXT:    adrp x8, .LCPI13_0756; CHECK-SD-NEXT:    ldr q5, [x8, :lo12:.LCPI13_0]757; CHECK-SD-NEXT:    adrp x8, .LCPI13_1758; CHECK-SD-NEXT:    tbl.16b v2, { v2, v3 }, v5759; CHECK-SD-NEXT:    tbl.16b v3, { v0, v1 }, v4760; CHECK-SD-NEXT:    ldr q0, [x8, :lo12:.LCPI13_1]761; CHECK-SD-NEXT:    tbl.16b v0, { v2, v3 }, v0762; CHECK-SD-NEXT:    ret763;764; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_nonconst_second_mask2:765; CHECK-GI:       // %bb.0:766; CHECK-GI-NEXT:    fmov s4, w0767; CHECK-GI-NEXT:    mov w8, #255 // =0xff768; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3769; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1770; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3771; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1772; CHECK-GI-NEXT:    mov.b v4[1], w0773; CHECK-GI-NEXT:    mov.b v4[2], w0774; CHECK-GI-NEXT:    mov.b v4[3], w0775; CHECK-GI-NEXT:    mov.b v4[4], w0776; CHECK-GI-NEXT:    mov.b v4[5], w0777; CHECK-GI-NEXT:    mov.b v4[6], w0778; CHECK-GI-NEXT:    mov.b v4[7], w0779; CHECK-GI-NEXT:    mov.b v4[8], w8780; CHECK-GI-NEXT:    mov.b v4[9], w8781; CHECK-GI-NEXT:    mov.b v4[10], w8782; CHECK-GI-NEXT:    mov.b v4[11], w8783; CHECK-GI-NEXT:    mov.b v4[12], w8784; CHECK-GI-NEXT:    mov.b v4[13], w8785; CHECK-GI-NEXT:    adrp x8, .LCPI13_1786; CHECK-GI-NEXT:    ldr q5, [x8, :lo12:.LCPI13_1]787; CHECK-GI-NEXT:    adrp x8, .LCPI13_0788; CHECK-GI-NEXT:    tbl.16b v2, { v2, v3 }, v5789; CHECK-GI-NEXT:    mov.b v4[14], w0790; CHECK-GI-NEXT:    mov.b v4[15], w0791; CHECK-GI-NEXT:    tbl.16b v3, { v0, v1 }, v4792; CHECK-GI-NEXT:    ldr q0, [x8, :lo12:.LCPI13_0]793; CHECK-GI-NEXT:    tbl.16b v0, { v2, v3 }, v0794; CHECK-GI-NEXT:    ret795  %ins.0 = insertelement <16 x i8> poison, i8 %v, i32 0796  %ins.1 = insertelement <16 x i8> %ins.0, i8 %v, i32 1797  %ins.2 = insertelement <16 x i8> %ins.1, i8 %v, i32 2798  %ins.3 = insertelement <16 x i8> %ins.2, i8 %v, i32 3799  %ins.4 = insertelement <16 x i8> %ins.3, i8 %v, i32 4800  %ins.5 = insertelement <16 x i8> %ins.4, i8 %v, i32 5801  %ins.6 = insertelement <16 x i8> %ins.5, i8 %v, i32 6802  %ins.7 = insertelement <16 x i8> %ins.6, i8 %v, i32 7803  %ins.8 = insertelement <16 x i8> %ins.7, i8 -1, i32 8804  %ins.9 = insertelement <16 x i8> %ins.8, i8 -1, i32 9805  %ins.10 = insertelement <16 x i8> %ins.9, i8 -1, i32 10806  %ins.11 = insertelement <16 x i8> %ins.10, i8 -1, i32 11807  %ins.12 = insertelement <16 x i8> %ins.11, i8 -1, i32 12808  %ins.13 = insertelement <16 x i8> %ins.12, i8 -1, i32 13809  %ins.14 = insertelement <16 x i8> %ins.13, i8 %v, i32 14810  %ins.15 = insertelement <16 x i8> %ins.14, i8 %v, i32 15811  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)812  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> %ins.15)813  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 30, i32 31>814  ret <16 x i8> %s815}816 817; CHECK-SD-LABEL: .LCPI14_0:818; CHECK-SD:              .byte   0                               // 0x0819; CHECK-SD-NEXT:         .byte   4                               // 0x4820; CHECK-SD-NEXT:         .byte   52                              // 0x34821; CHECK-SD-NEXT:         .byte   12                              // 0xc822; CHECK-SD-NEXT:         .byte   16                              // 0x10823; CHECK-SD-NEXT:         .byte   20                              // 0x14824; CHECK-SD-NEXT:         .byte   24                              // 0x18825; CHECK-SD-NEXT:         .byte   28                              // 0x1c826; CHECK-SD-NEXT:         .byte   32                              // 0x20827; CHECK-SD-NEXT:         .byte   36                              // 0x24828; CHECK-SD-NEXT:         .byte   40                              // 0x28829; CHECK-SD-NEXT:         .byte   44                              // 0x2c830; CHECK-SD-NEXT:         .byte   48                              // 0x30831; CHECK-SD-NEXT:         .byte   52                              // 0x34832; CHECK-SD-NEXT:         .byte   56                              // 0x38833; CHECK-SD-NEXT:         .byte   60                              // 0x3c834 835; CHECK-GI-LABEL: .LCPI14_0:836; CHECK-GI:              .byte   0                               // 0x0837; CHECK-GI-NEXT:         .byte   1                               // 0x1838; CHECK-GI-NEXT:         .byte   21                              // 0x15839; CHECK-GI-NEXT:         .byte   3                               // 0x3840; CHECK-GI-NEXT:         .byte   4                               // 0x4841; CHECK-GI-NEXT:         .byte   5                               // 0x5842; CHECK-GI-NEXT:         .byte   6                               // 0x6843; CHECK-GI-NEXT:         .byte   7                               // 0x7844; CHECK-GI-NEXT:         .byte   16                              // 0x10845; CHECK-GI-NEXT:         .byte   17                              // 0x11846; CHECK-GI-NEXT:         .byte   18                              // 0x12847; CHECK-GI-NEXT:         .byte   19                              // 0x13848; CHECK-GI-NEXT:         .byte   20                              // 0x14849; CHECK-GI-NEXT:         .byte   21                              // 0x15850; CHECK-GI-NEXT:         .byte   22                              // 0x16851; CHECK-GI-NEXT:         .byte   23                              // 0x17852; CHECK-GI-LABEL: .LCPI14_1:853; CHECK-GI:              .byte   0                               // 0x0854; CHECK-GI-NEXT:         .byte   4                               // 0x4855; CHECK-GI-NEXT:         .byte   8                               // 0x8856; CHECK-GI-NEXT:         .byte   12                              // 0xc857; CHECK-GI-NEXT:         .byte   16                              // 0x10858; CHECK-GI-NEXT:         .byte   20                              // 0x14859; CHECK-GI-NEXT:         .byte   24                              // 0x18860; CHECK-GI-NEXT:         .byte   28                              // 0x1c861; CHECK-GI-NEXT:         .byte   255                             // 0xff862; CHECK-GI-NEXT:         .byte   255                             // 0xff863; CHECK-GI-NEXT:         .byte   255                             // 0xff864; CHECK-GI-NEXT:         .byte   255                             // 0xff865; CHECK-GI-NEXT:         .byte   255                             // 0xff866; CHECK-GI-NEXT:         .byte   255                             // 0xff867; CHECK-GI-NEXT:         .byte   255                             // 0xff868; CHECK-GI-NEXT:         .byte   255                             // 0xff869 870define <16 x i8> @shuffled_tbl2_to_tbl4_mixed_shuffle(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {871; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_mixed_shuffle:872; CHECK-SD:       // %bb.0:873; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3874; CHECK-SD-NEXT:    adrp x8, .LCPI14_0875; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3876; CHECK-SD-NEXT:    ldr q4, [x8, :lo12:.LCPI14_0]877; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3878; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3879; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4880; CHECK-SD-NEXT:    ret881;882; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_mixed_shuffle:883; CHECK-GI:       // %bb.0:884; CHECK-GI-NEXT:    adrp x8, .LCPI14_1885; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1886; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3887; CHECK-GI-NEXT:    ldr q4, [x8, :lo12:.LCPI14_1]888; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1889; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3890; CHECK-GI-NEXT:    adrp x8, .LCPI14_0891; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v4892; CHECK-GI-NEXT:    tbl.16b v1, { v2, v3 }, v4893; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI14_0]894; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v2895; CHECK-GI-NEXT:    ret896  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)897  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)898  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 21, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>899  ret <16 x i8> %s900}901 902; CHECK-SD-LABEL: .LCPI15_0:903; CHECK-SD:              .byte   0                               // 0x0904; CHECK-SD-NEXT:         .byte   4                               // 0x4905; CHECK-SD-NEXT:         .byte   52                              // 0x34906; CHECK-SD-NEXT:         .byte   12                              // 0xc907; CHECK-SD-NEXT:         .byte   16                              // 0x10908; CHECK-SD-NEXT:         .byte   20                              // 0x14909; CHECK-SD-NEXT:         .byte   24                              // 0x18910; CHECK-SD-NEXT:         .byte   28                              // 0x1c911; CHECK-SD-NEXT:         .byte   32                              // 0x20912; CHECK-SD-NEXT:         .byte   36                              // 0x24913; CHECK-SD-NEXT:         .byte   40                              // 0x28914; CHECK-SD-NEXT:         .byte   44                              // 0x2c915; CHECK-SD-NEXT:         .byte   48                              // 0x30916; CHECK-SD-NEXT:         .byte   52                              // 0x34917; CHECK-SD-NEXT:         .byte   56                              // 0x38918; CHECK-SD-NEXT:         .byte   60                              // 0x3c919 920; CHECK-GI-LABEL: .LCPI15_0:921; CHECK-GI:              .byte   0                               // 0x0922; CHECK-GI-NEXT:         .byte   1                               // 0x1923; CHECK-GI-NEXT:         .byte   21                              // 0x15924; CHECK-GI-NEXT:         .byte   3                               // 0x3925; CHECK-GI-NEXT:         .byte   4                               // 0x4926; CHECK-GI-NEXT:         .byte   5                               // 0x5927; CHECK-GI-NEXT:         .byte   6                               // 0x6928; CHECK-GI-NEXT:         .byte   7                               // 0x7929; CHECK-GI-NEXT:         .byte   16                              // 0x10930; CHECK-GI-NEXT:         .byte   17                              // 0x11931; CHECK-GI-NEXT:         .byte   18                              // 0x12932; CHECK-GI-NEXT:         .byte   19                              // 0x13933; CHECK-GI-NEXT:         .byte   20                              // 0x14934; CHECK-GI-NEXT:         .byte   21                              // 0x15935; CHECK-GI-NEXT:         .byte   22                              // 0x16936; CHECK-GI-NEXT:         .byte   23                              // 0x17937; CHECK-GI-LABEL: .LCPI15_1:938; CHECK-GI:              .byte   0                               // 0x0939; CHECK-GI-NEXT:         .byte   4                               // 0x4940; CHECK-GI-NEXT:         .byte   8                               // 0x8941; CHECK-GI-NEXT:         .byte   12                              // 0xc942; CHECK-GI-NEXT:         .byte   16                              // 0x10943; CHECK-GI-NEXT:         .byte   20                              // 0x14944; CHECK-GI-NEXT:         .byte   24                              // 0x18945; CHECK-GI-NEXT:         .byte   28                              // 0x1c946; CHECK-GI-NEXT:         .byte   255                             // 0xff947; CHECK-GI-NEXT:         .byte   255                             // 0xff948; CHECK-GI-NEXT:         .byte   255                             // 0xff949; CHECK-GI-NEXT:         .byte   255                             // 0xff950; CHECK-GI-NEXT:         .byte   255                             // 0xff951; CHECK-GI-NEXT:         .byte   255                             // 0xff952; CHECK-GI-NEXT:         .byte   255                             // 0xff953; CHECK-GI-NEXT:         .byte   255                             // 0xff954; CHECK-GI-LABEL: .LCPI15_2:955; CHECK-GI:              .byte   0                               // 0x0956; CHECK-GI-NEXT:         .byte   4                               // 0x4957; CHECK-GI-NEXT:         .byte   8                               // 0x8958; CHECK-GI-NEXT:         .byte   12                              // 0xc959; CHECK-GI-NEXT:         .byte   16                              // 0x10960; CHECK-GI-NEXT:         .byte   20                              // 0x14961; CHECK-GI-NEXT:         .byte   24                              // 0x18962; CHECK-GI-NEXT:         .byte   28                              // 0x1c963; CHECK-GI-NEXT:         .byte   0                               // 0x0964; CHECK-GI-NEXT:         .byte   255                             // 0xff965; CHECK-GI-NEXT:         .byte   255                             // 0xff966; CHECK-GI-NEXT:         .byte   255                             // 0xff967; CHECK-GI-NEXT:         .byte   255                             // 0xff968; CHECK-GI-NEXT:         .byte   255                             // 0xff969; CHECK-GI-NEXT:         .byte   255                             // 0xff970; CHECK-GI-NEXT:         .byte   255                             // 0xff971 972define <16 x i8> @shuffled_tbl2_to_tbl4_mixed_tbl2_mask1(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {973; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_mixed_tbl2_mask1:974; CHECK-SD:       // %bb.0:975; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q3976; CHECK-SD-NEXT:    adrp x8, .LCPI15_0977; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q3978; CHECK-SD-NEXT:    ldr q4, [x8, :lo12:.LCPI15_0]979; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q3980; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q3981; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v4982; CHECK-SD-NEXT:    ret983;984; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_mixed_tbl2_mask1:985; CHECK-GI:       // %bb.0:986; CHECK-GI-NEXT:    adrp x8, .LCPI15_2987; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1988; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q3989; CHECK-GI-NEXT:    ldr q4, [x8, :lo12:.LCPI15_2]990; CHECK-GI-NEXT:    adrp x8, .LCPI15_1991; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1992; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q3993; CHECK-GI-NEXT:    ldr q5, [x8, :lo12:.LCPI15_1]994; CHECK-GI-NEXT:    adrp x8, .LCPI15_0995; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v4996; CHECK-GI-NEXT:    tbl.16b v1, { v2, v3 }, v5997; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI15_0]998; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v2999; CHECK-GI-NEXT:    ret1000  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 0, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)1001  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)1002  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 21, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>1003  ret <16 x i8> %s1004}1005 1006; CHECK-SD-LABEL: .LCPI16_0:1007; CHECK-SD:              .byte   0                               // 0x01008; CHECK-SD-NEXT:         .byte   4                               // 0x41009; CHECK-SD-NEXT:         .byte   52                              // 0x341010; CHECK-SD-NEXT:         .byte   12                              // 0xc1011; CHECK-SD-NEXT:         .byte   16                              // 0x101012; CHECK-SD-NEXT:         .byte   20                              // 0x141013; CHECK-SD-NEXT:         .byte   24                              // 0x181014; CHECK-SD-NEXT:         .byte   28                              // 0x1c1015; CHECK-SD-NEXT:         .byte   32                              // 0x201016; CHECK-SD-NEXT:         .byte   36                              // 0x241017; CHECK-SD-NEXT:         .byte   40                              // 0x281018; CHECK-SD-NEXT:         .byte   44                              // 0x2c1019; CHECK-SD-NEXT:         .byte   48                              // 0x301020; CHECK-SD-NEXT:         .byte   52                              // 0x341021; CHECK-SD-NEXT:         .byte   56                              // 0x381022; CHECK-SD-NEXT:         .byte   60                              // 0x3c1023 1024; CHECK-GI-LABEL: .LCPI16_0:1025; CHECK-GI:              .byte   0                               // 0x01026; CHECK-GI-NEXT:         .byte   1                               // 0x11027; CHECK-GI-NEXT:         .byte   21                              // 0x151028; CHECK-GI-NEXT:         .byte   3                               // 0x31029; CHECK-GI-NEXT:         .byte   4                               // 0x41030; CHECK-GI-NEXT:         .byte   5                               // 0x51031; CHECK-GI-NEXT:         .byte   6                               // 0x61032; CHECK-GI-NEXT:         .byte   7                               // 0x71033; CHECK-GI-NEXT:         .byte   16                              // 0x101034; CHECK-GI-NEXT:         .byte   17                              // 0x111035; CHECK-GI-NEXT:         .byte   18                              // 0x121036; CHECK-GI-NEXT:         .byte   19                              // 0x131037; CHECK-GI-NEXT:         .byte   20                              // 0x141038; CHECK-GI-NEXT:         .byte   21                              // 0x151039; CHECK-GI-NEXT:         .byte   22                              // 0x161040; CHECK-GI-NEXT:         .byte   23                              // 0x171041; CHECK-GI-LABEL: .LCPI16_1:1042; CHECK-GI:              .byte   0                               // 0x01043; CHECK-GI-NEXT:         .byte   4                               // 0x41044; CHECK-GI-NEXT:         .byte   8                               // 0x81045; CHECK-GI-NEXT:         .byte   12                              // 0xc1046; CHECK-GI-NEXT:         .byte   16                              // 0x101047; CHECK-GI-NEXT:         .byte   20                              // 0x141048; CHECK-GI-NEXT:         .byte   24                              // 0x181049; CHECK-GI-NEXT:         .byte   28                              // 0x1c1050; CHECK-GI-NEXT:         .byte   0                               // 0x01051; CHECK-GI-NEXT:         .byte   255                             // 0xff1052; CHECK-GI-NEXT:         .byte   255                             // 0xff1053; CHECK-GI-NEXT:         .byte   255                             // 0xff1054; CHECK-GI-NEXT:         .byte   255                             // 0xff1055; CHECK-GI-NEXT:         .byte   255                             // 0xff1056; CHECK-GI-NEXT:         .byte   255                             // 0xff1057; CHECK-GI-NEXT:         .byte   255                             // 0xff1058; CHECK-GI-LABEL: .LCPI16_2:1059; CHECK-GI:              .byte   0                               // 0x01060; CHECK-GI-NEXT:         .byte   4                               // 0x41061; CHECK-GI-NEXT:         .byte   8                               // 0x81062; CHECK-GI-NEXT:         .byte   12                              // 0xc1063; CHECK-GI-NEXT:         .byte   16                              // 0x101064; CHECK-GI-NEXT:         .byte   20                              // 0x141065; CHECK-GI-NEXT:         .byte   24                              // 0x181066; CHECK-GI-NEXT:         .byte   28                              // 0x1c1067; CHECK-GI-NEXT:         .byte   255                             // 0xff1068; CHECK-GI-NEXT:         .byte   255                             // 0xff1069; CHECK-GI-NEXT:         .byte   255                             // 0xff1070; CHECK-GI-NEXT:         .byte   255                             // 0xff1071; CHECK-GI-NEXT:         .byte   255                             // 0xff1072; CHECK-GI-NEXT:         .byte   255                             // 0xff1073; CHECK-GI-NEXT:         .byte   255                             // 0xff1074; CHECK-GI-NEXT:         .byte   255                             // 0xff1075 1076define <16 x i8> @shuffled_tbl2_to_tbl4_mixed_tbl2_mask2(<16 x i8> %a, <16 x i8> %b, <16 x i8> %c, <16 x i8> %d) {1077; CHECK-SD-LABEL: shuffled_tbl2_to_tbl4_mixed_tbl2_mask2:1078; CHECK-SD:       // %bb.0:1079; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q0_q1_q2_q3 def $q0_q1_q2_q31080; CHECK-SD-NEXT:    adrp x8, .LCPI16_01081; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q0_q1_q2_q3 def $q0_q1_q2_q31082; CHECK-SD-NEXT:    ldr q4, [x8, :lo12:.LCPI16_0]1083; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2_q3 def $q0_q1_q2_q31084; CHECK-SD-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2_q3 def $q0_q1_q2_q31085; CHECK-SD-NEXT:    tbl.16b v0, { v0, v1, v2, v3 }, v41086; CHECK-SD-NEXT:    ret1087;1088; CHECK-GI-LABEL: shuffled_tbl2_to_tbl4_mixed_tbl2_mask2:1089; CHECK-GI:       // %bb.0:1090; CHECK-GI-NEXT:    adrp x8, .LCPI16_21091; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q11092; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q2_q3 def $q2_q31093; CHECK-GI-NEXT:    ldr q4, [x8, :lo12:.LCPI16_2]1094; CHECK-GI-NEXT:    adrp x8, .LCPI16_11095; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q11096; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q2_q3 def $q2_q31097; CHECK-GI-NEXT:    ldr q5, [x8, :lo12:.LCPI16_1]1098; CHECK-GI-NEXT:    adrp x8, .LCPI16_01099; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v41100; CHECK-GI-NEXT:    tbl.16b v1, { v2, v3 }, v51101; CHECK-GI-NEXT:    ldr q2, [x8, :lo12:.LCPI16_0]1102; CHECK-GI-NEXT:    tbl.16b v0, { v0, v1 }, v21103; CHECK-GI-NEXT:    ret1104  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %a, <16 x i8> %b, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)1105  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %c, <16 x i8> %d, <16 x i8> <i8 0, i8 4, i8 8, i8 12, i8 16, i8 20, i8 24, i8 28, i8 0, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1, i8 -1>)1106  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 1, i32 21, i32 3, i32 4, i32 5, i32 6, i32 7, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23>1107  ret <16 x i8> %s1108}1109 1110declare <8 x i8> @llvm.aarch64.neon.tbl1.v8i8(<16 x i8>, <8 x i8>) nounwind readnone1111declare <16 x i8> @llvm.aarch64.neon.tbl1.v16i8(<16 x i8>, <16 x i8>) nounwind readnone1112declare <8 x i8> @llvm.aarch64.neon.tbl2.v8i8(<16 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1113declare <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1114declare <8 x i8> @llvm.aarch64.neon.tbl3.v8i8(<16 x i8>, <16 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1115declare <16 x i8> @llvm.aarch64.neon.tbl3.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1116declare <8 x i8> @llvm.aarch64.neon.tbl4.v8i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1117declare <16 x i8> @llvm.aarch64.neon.tbl4.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1118 1119define <8 x i8> @tbx1_8b(<8 x i8> %A, <16 x i8> %B, <8 x i8> %C) nounwind {1120; CHECK-LABEL: tbx1_8b:1121; CHECK:       // %bb.0:1122; CHECK-NEXT:    tbx.8b v0, { v1 }, v21123; CHECK-NEXT:    ret1124  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbx1.v8i8(<8 x i8> %A, <16 x i8> %B, <8 x i8> %C)1125  ret <8 x i8> %tmp31126}1127 1128define <16 x i8> @tbx1_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C) nounwind {1129; CHECK-LABEL: tbx1_16b:1130; CHECK:       // %bb.0:1131; CHECK-NEXT:    tbx.16b v0, { v1 }, v21132; CHECK-NEXT:    ret1133  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbx1.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C)1134  ret <16 x i8> %tmp31135}1136 1137define <8 x i8> @tbx2_8b(<8 x i8> %A, <16 x i8> %B, <16 x i8> %C, <8 x i8> %D) {1138; CHECK-SD-LABEL: tbx2_8b:1139; CHECK-SD:       // %bb.0:1140; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2 def $q1_q21141; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2 def $q1_q21142; CHECK-SD-NEXT:    tbx.8b v0, { v1, v2 }, v31143; CHECK-SD-NEXT:    ret1144;1145; CHECK-GI-LABEL: tbx2_8b:1146; CHECK-GI:       // %bb.0:1147; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2 def $q1_q21148; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2 def $q1_q21149; CHECK-GI-NEXT:    tbx.8b v0, { v1, v2 }, v31150; CHECK-GI-NEXT:    ret1151  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbx2.v8i8(<8 x i8> %A, <16 x i8> %B, <16 x i8> %C, <8 x i8> %D)1152  ret <8 x i8> %tmp31153}1154 1155define <16 x i8> @tbx2_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D) {1156; CHECK-SD-LABEL: tbx2_16b:1157; CHECK-SD:       // %bb.0:1158; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2 def $q1_q21159; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2 def $q1_q21160; CHECK-SD-NEXT:    tbx.16b v0, { v1, v2 }, v31161; CHECK-SD-NEXT:    ret1162;1163; CHECK-GI-LABEL: tbx2_16b:1164; CHECK-GI:       // %bb.0:1165; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2 def $q1_q21166; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2 def $q1_q21167; CHECK-GI-NEXT:    tbx.16b v0, { v1, v2 }, v31168; CHECK-GI-NEXT:    ret1169  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbx2.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D)1170  ret <16 x i8> %tmp31171}1172 1173define <8 x i8> @tbx3_8b(<8 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <8 x i8> %E) {1174; CHECK-SD-LABEL: tbx3_8b:1175; CHECK-SD:       // %bb.0:1176; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3 def $q1_q2_q31177; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3 def $q1_q2_q31178; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3 def $q1_q2_q31179; CHECK-SD-NEXT:    tbx.8b v0, { v1, v2, v3 }, v41180; CHECK-SD-NEXT:    ret1181;1182; CHECK-GI-LABEL: tbx3_8b:1183; CHECK-GI:       // %bb.0:1184; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3 def $q1_q2_q31185; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3 def $q1_q2_q31186; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3 def $q1_q2_q31187; CHECK-GI-NEXT:    tbx.8b v0, { v1, v2, v3 }, v41188; CHECK-GI-NEXT:    ret1189  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbx3.v8i8(< 8 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <8 x i8> %E)1190  ret <8 x i8> %tmp31191}1192 1193define <16 x i8> @tbx3_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E) {1194; CHECK-SD-LABEL: tbx3_16b:1195; CHECK-SD:       // %bb.0:1196; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3 def $q1_q2_q31197; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3 def $q1_q2_q31198; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3 def $q1_q2_q31199; CHECK-SD-NEXT:    tbx.16b v0, { v1, v2, v3 }, v41200; CHECK-SD-NEXT:    ret1201;1202; CHECK-GI-LABEL: tbx3_16b:1203; CHECK-GI:       // %bb.0:1204; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3 def $q1_q2_q31205; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3 def $q1_q2_q31206; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3 def $q1_q2_q31207; CHECK-GI-NEXT:    tbx.16b v0, { v1, v2, v3 }, v41208; CHECK-GI-NEXT:    ret1209  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbx3.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E)1210  ret <16 x i8> %tmp31211}1212 1213define <8 x i8> @tbx4_8b(<8 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, <8 x i8> %F) {1214; CHECK-SD-LABEL: tbx4_8b:1215; CHECK-SD:       // %bb.0:1216; CHECK-SD-NEXT:    // kill: def $q4 killed $q4 killed $q1_q2_q3_q4 def $q1_q2_q3_q41217; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3_q4 def $q1_q2_q3_q41218; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3_q4 def $q1_q2_q3_q41219; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3_q4 def $q1_q2_q3_q41220; CHECK-SD-NEXT:    tbx.8b v0, { v1, v2, v3, v4 }, v51221; CHECK-SD-NEXT:    ret1222;1223; CHECK-GI-LABEL: tbx4_8b:1224; CHECK-GI:       // %bb.0:1225; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3_q4 def $q1_q2_q3_q41226; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3_q4 def $q1_q2_q3_q41227; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3_q4 def $q1_q2_q3_q41228; CHECK-GI-NEXT:    // kill: def $q4 killed $q4 killed $q1_q2_q3_q4 def $q1_q2_q3_q41229; CHECK-GI-NEXT:    tbx.8b v0, { v1, v2, v3, v4 }, v51230; CHECK-GI-NEXT:    ret1231  %tmp3 = call <8 x i8> @llvm.aarch64.neon.tbx4.v8i8(<8 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, <8 x i8> %F)1232  ret <8 x i8> %tmp31233}1234 1235define <16 x i8> @tbx4_16b(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, <16 x i8> %F) {1236; CHECK-SD-LABEL: tbx4_16b:1237; CHECK-SD:       // %bb.0:1238; CHECK-SD-NEXT:    // kill: def $q4 killed $q4 killed $q1_q2_q3_q4 def $q1_q2_q3_q41239; CHECK-SD-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3_q4 def $q1_q2_q3_q41240; CHECK-SD-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3_q4 def $q1_q2_q3_q41241; CHECK-SD-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3_q4 def $q1_q2_q3_q41242; CHECK-SD-NEXT:    tbx.16b v0, { v1, v2, v3, v4 }, v51243; CHECK-SD-NEXT:    ret1244;1245; CHECK-GI-LABEL: tbx4_16b:1246; CHECK-GI:       // %bb.0:1247; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q1_q2_q3_q4 def $q1_q2_q3_q41248; CHECK-GI-NEXT:    // kill: def $q2 killed $q2 killed $q1_q2_q3_q4 def $q1_q2_q3_q41249; CHECK-GI-NEXT:    // kill: def $q3 killed $q3 killed $q1_q2_q3_q4 def $q1_q2_q3_q41250; CHECK-GI-NEXT:    // kill: def $q4 killed $q4 killed $q1_q2_q3_q4 def $q1_q2_q3_q41251; CHECK-GI-NEXT:    tbx.16b v0, { v1, v2, v3, v4 }, v51252; CHECK-GI-NEXT:    ret1253  %tmp3 = call <16 x i8> @llvm.aarch64.neon.tbx4.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %C, <16 x i8> %D, <16 x i8> %E, <16 x i8> %F)1254  ret <16 x i8> %tmp31255}1256 1257define <16 x i8> @pr135950(<16 x i8> %A, <16 x i8> %B, <16 x i8> %M) {1258; CHECK-SD-LABEL: pr135950:1259; CHECK-SD:       // %bb.0:1260; CHECK-SD-NEXT:    mov.16b v3, v11261; CHECK-SD-NEXT:    movi.2d v1, #00000000000000001262; CHECK-SD-NEXT:    mov.16b v4, v01263; CHECK-SD-NEXT:    mov.16b v5, v31264; CHECK-SD-NEXT:    tbl.16b v1, { v3, v4 }, v11265; CHECK-SD-NEXT:    tbl.16b v0, { v4, v5 }, v21266; CHECK-SD-NEXT:    zip1.16b v0, v0, v11267; CHECK-SD-NEXT:    ret1268;1269; CHECK-GI-LABEL: pr135950:1270; CHECK-GI:       // %bb.0:1271; CHECK-GI-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1_q2 def $q0_q1_q21272; CHECK-GI-NEXT:    mov.16b v3, v21273; CHECK-GI-NEXT:    movi.2d v4, #00000000000000001274; CHECK-GI-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1_q2 def $q0_q1_q21275; CHECK-GI-NEXT:    tbl.16b v3, { v0, v1 }, v31276; CHECK-GI-NEXT:    mov.16b v2, v01277; CHECK-GI-NEXT:    tbl.16b v0, { v1, v2 }, v41278; CHECK-GI-NEXT:    zip1.16b v0, v3, v01279; CHECK-GI-NEXT:    ret1280  %t1 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %A, <16 x i8> %B, <16 x i8> %M)1281  %t2 = call <16 x i8> @llvm.aarch64.neon.tbl2.v16i8(<16 x i8> %B, <16 x i8> %A, <16 x i8> zeroinitializer)1282  %s = shufflevector <16 x i8> %t1, <16 x i8> %t2, <16 x i32> <i32 0, i32 16, i32 1, i32 17, i32 2, i32 18, i32 3, i32 19, i32 4, i32 20, i32 5, i32 21, i32 6, i32 22, i32 7, i32 23>1283  ret <16 x i8> %s1284}1285 1286 1287declare <8 x i8> @llvm.aarch64.neon.tbx1.v8i8(<8 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1288declare <16 x i8> @llvm.aarch64.neon.tbx1.v16i8(<16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1289declare <8 x i8> @llvm.aarch64.neon.tbx2.v8i8(<8 x i8>, <16 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1290declare <16 x i8> @llvm.aarch64.neon.tbx2.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1291declare <8 x i8> @llvm.aarch64.neon.tbx3.v8i8(<8 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1292declare <16 x i8> @llvm.aarch64.neon.tbx3.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1293declare <8 x i8> @llvm.aarch64.neon.tbx4.v8i8(<8 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <8 x i8>) nounwind readnone1294declare <16 x i8> @llvm.aarch64.neon.tbx4.v16i8(<16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>, <16 x i8>) nounwind readnone1295 1296