brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.1 KiB · 41dd7f0 Raw
578 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=aarch64--linux-gnu | FileCheck %s --check-prefix=CHECKLE3; RUN: llc < %s -mtriple=aarch64_be--linux-gnu | FileCheck %s --check-prefix=CHECKBE4 5define <16 x i32> @test_shuf1(<16 x i32> %x, <16 x i32> %y) {6; CHECKLE-LABEL: test_shuf1:7; CHECKLE:       // %bb.0:8; CHECKLE-NEXT:    ext v3.16b, v6.16b, v1.16b, #49; CHECKLE-NEXT:    uzp1 v5.4s, v1.4s, v0.4s10; CHECKLE-NEXT:    uzp2 v16.4s, v2.4s, v4.4s11; CHECKLE-NEXT:    dup v17.4s, v4.s[0]12; CHECKLE-NEXT:    trn2 v4.4s, v1.4s, v3.4s13; CHECKLE-NEXT:    mov v17.s[0], v6.s[3]14; CHECKLE-NEXT:    trn2 v1.4s, v5.4s, v1.4s15; CHECKLE-NEXT:    rev64 v3.4s, v7.4s16; CHECKLE-NEXT:    trn1 v2.4s, v16.4s, v2.4s17; CHECKLE-NEXT:    mov v4.s[0], v7.s[1]18; CHECKLE-NEXT:    ext v1.16b, v0.16b, v1.16b, #1219; CHECKLE-NEXT:    mov v3.d[0], v17.d[0]20; CHECKLE-NEXT:    mov v2.s[3], v7.s[0]21; CHECKLE-NEXT:    mov v0.16b, v4.16b22; CHECKLE-NEXT:    ret23;24; CHECKBE-LABEL: test_shuf1:25; CHECKBE:       // %bb.0:26; CHECKBE-NEXT:    rev64 v1.4s, v1.4s27; CHECKBE-NEXT:    rev64 v3.4s, v6.4s28; CHECKBE-NEXT:    rev64 v0.4s, v0.4s29; CHECKBE-NEXT:    rev64 v2.4s, v2.4s30; CHECKBE-NEXT:    rev64 v4.4s, v4.4s31; CHECKBE-NEXT:    rev64 v5.4s, v7.4s32; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #833; CHECKBE-NEXT:    ext v3.16b, v3.16b, v3.16b, #834; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #835; CHECKBE-NEXT:    ext v2.16b, v2.16b, v2.16b, #836; CHECKBE-NEXT:    ext v4.16b, v4.16b, v4.16b, #837; CHECKBE-NEXT:    ext v5.16b, v5.16b, v5.16b, #838; CHECKBE-NEXT:    ext v6.16b, v3.16b, v1.16b, #439; CHECKBE-NEXT:    uzp1 v16.4s, v1.4s, v0.4s40; CHECKBE-NEXT:    uzp2 v7.4s, v2.4s, v4.4s41; CHECKBE-NEXT:    dup v4.4s, v4.s[0]42; CHECKBE-NEXT:    rev64 v17.4s, v5.4s43; CHECKBE-NEXT:    trn2 v6.4s, v1.4s, v6.4s44; CHECKBE-NEXT:    mov v4.s[0], v3.s[3]45; CHECKBE-NEXT:    trn2 v1.4s, v16.4s, v1.4s46; CHECKBE-NEXT:    trn1 v2.4s, v7.4s, v2.4s47; CHECKBE-NEXT:    rev64 v3.4s, v17.4s48; CHECKBE-NEXT:    mov v6.s[0], v5.s[1]49; CHECKBE-NEXT:    rev64 v4.4s, v4.4s50; CHECKBE-NEXT:    ext v0.16b, v0.16b, v1.16b, #1251; CHECKBE-NEXT:    mov v2.s[3], v5.s[0]52; CHECKBE-NEXT:    rev64 v1.4s, v6.4s53; CHECKBE-NEXT:    mov v3.d[0], v4.d[0]54; CHECKBE-NEXT:    rev64 v4.4s, v0.4s55; CHECKBE-NEXT:    rev64 v2.4s, v2.4s56; CHECKBE-NEXT:    ext v0.16b, v1.16b, v1.16b, #857; CHECKBE-NEXT:    ext v3.16b, v3.16b, v3.16b, #858; CHECKBE-NEXT:    ext v1.16b, v4.16b, v4.16b, #859; CHECKBE-NEXT:    ext v2.16b, v2.16b, v2.16b, #860; CHECKBE-NEXT:    ret61  %s3 = shufflevector <16 x i32> %x, <16 x i32> %y, <16 x i32> <i32 29, i32 26, i32 7, i32 4, i32 3, i32 6, i32 5, i32 2, i32 9, i32 8, i32 17, i32 28, i32 27, i32 16, i32 31, i32 30>62  ret <16 x i32> %s363}64 65define <4 x i32> @test_shuf2(<16 x i32> %x, <16 x i32> %y) {66; CHECKLE-LABEL: test_shuf2:67; CHECKLE:       // %bb.0:68; CHECKLE-NEXT:    zip2 v0.4s, v7.4s, v6.4s69; CHECKLE-NEXT:    trn2 v2.4s, v7.4s, v0.4s70; CHECKLE-NEXT:    ext v0.16b, v1.16b, v1.16b, #471; CHECKLE-NEXT:    mov v0.d[0], v2.d[0]72; CHECKLE-NEXT:    ret73;74; CHECKBE-LABEL: test_shuf2:75; CHECKBE:       // %bb.0:76; CHECKBE-NEXT:    rev64 v0.4s, v6.4s77; CHECKBE-NEXT:    rev64 v2.4s, v7.4s78; CHECKBE-NEXT:    rev64 v1.4s, v1.4s79; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #880; CHECKBE-NEXT:    ext v2.16b, v2.16b, v2.16b, #881; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #882; CHECKBE-NEXT:    zip2 v0.4s, v2.4s, v0.4s83; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #484; CHECKBE-NEXT:    trn2 v0.4s, v2.4s, v0.4s85; CHECKBE-NEXT:    rev64 v1.4s, v1.4s86; CHECKBE-NEXT:    rev64 v0.4s, v0.4s87; CHECKBE-NEXT:    mov v1.d[0], v0.d[0]88; CHECKBE-NEXT:    ext v0.16b, v1.16b, v1.16b, #889; CHECKBE-NEXT:    ret90  %s3 = shufflevector <16 x i32> %x, <16 x i32> %y, <4 x i32> <i32 29, i32 26, i32 7, i32 4>91  ret <4 x i32> %s392}93 94define <4 x i32> @test_shuf3(<16 x i32> %x, <16 x i32> %y) {95; CHECKLE-LABEL: test_shuf3:96; CHECKLE:       // %bb.0:97; CHECKLE-NEXT:    uzp1 v2.4s, v1.4s, v0.4s98; CHECKLE-NEXT:    trn2 v1.4s, v2.4s, v1.4s99; CHECKLE-NEXT:    ext v0.16b, v0.16b, v1.16b, #12100; CHECKLE-NEXT:    ret101;102; CHECKBE-LABEL: test_shuf3:103; CHECKBE:       // %bb.0:104; CHECKBE-NEXT:    rev64 v0.4s, v0.4s105; CHECKBE-NEXT:    rev64 v1.4s, v1.4s106; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8107; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8108; CHECKBE-NEXT:    uzp1 v2.4s, v1.4s, v0.4s109; CHECKBE-NEXT:    trn2 v1.4s, v2.4s, v1.4s110; CHECKBE-NEXT:    ext v0.16b, v0.16b, v1.16b, #12111; CHECKBE-NEXT:    rev64 v0.4s, v0.4s112; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8113; CHECKBE-NEXT:    ret114  %s3 = shufflevector <16 x i32> %x, <16 x i32> %y, <4 x i32> <i32 3, i32 6, i32 5, i32 2>115  ret <4 x i32> %s3116}117 118define <4 x i32> @test_shuf4(<16 x i32> %x, <16 x i32> %y) {119; CHECKLE-LABEL: test_shuf4:120; CHECKLE:       // %bb.0:121; CHECKLE-NEXT:    uzp2 v0.4s, v2.4s, v4.4s122; CHECKLE-NEXT:    trn1 v0.4s, v0.4s, v2.4s123; CHECKLE-NEXT:    mov v0.s[3], v7.s[0]124; CHECKLE-NEXT:    ret125;126; CHECKBE-LABEL: test_shuf4:127; CHECKBE:       // %bb.0:128; CHECKBE-NEXT:    rev64 v0.4s, v4.4s129; CHECKBE-NEXT:    rev64 v1.4s, v2.4s130; CHECKBE-NEXT:    rev64 v2.4s, v7.4s131; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8132; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8133; CHECKBE-NEXT:    ext v2.16b, v2.16b, v2.16b, #8134; CHECKBE-NEXT:    uzp2 v0.4s, v1.4s, v0.4s135; CHECKBE-NEXT:    trn1 v0.4s, v0.4s, v1.4s136; CHECKBE-NEXT:    mov v0.s[3], v2.s[0]137; CHECKBE-NEXT:    rev64 v0.4s, v0.4s138; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8139; CHECKBE-NEXT:    ret140  %s3 = shufflevector <16 x i32> %x, <16 x i32> %y, <4 x i32> <i32 9, i32 8, i32 17, i32 28>141  ret <4 x i32> %s3142}143 144define <4 x i32> @test_shuf5(<16 x i32> %x, <16 x i32> %y) {145; CHECKLE-LABEL: test_shuf5:146; CHECKLE:       // %bb.0:147; CHECKLE-NEXT:    ext v1.16b, v6.16b, v4.16b, #12148; CHECKLE-NEXT:    rev64 v0.4s, v7.4s149; CHECKLE-NEXT:    mov v0.d[0], v1.d[0]150; CHECKLE-NEXT:    ret151;152; CHECKBE-LABEL: test_shuf5:153; CHECKBE:       // %bb.0:154; CHECKBE-NEXT:    rev64 v0.4s, v7.4s155; CHECKBE-NEXT:    rev64 v1.4s, v4.4s156; CHECKBE-NEXT:    rev64 v2.4s, v6.4s157; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8158; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8159; CHECKBE-NEXT:    ext v2.16b, v2.16b, v2.16b, #8160; CHECKBE-NEXT:    ext v1.16b, v2.16b, v1.16b, #12161; CHECKBE-NEXT:    rev64 v0.4s, v0.4s162; CHECKBE-NEXT:    rev64 v1.4s, v1.4s163; CHECKBE-NEXT:    rev64 v0.4s, v0.4s164; CHECKBE-NEXT:    mov v0.d[0], v1.d[0]165; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8166; CHECKBE-NEXT:    ret167  %s3 = shufflevector <16 x i32> %x, <16 x i32> %y, <4 x i32> <i32 27, i32 16, i32 31, i32 30>168  ret <4 x i32> %s3169}170 171define <4 x i32> @test1503(<4 x i32> %a, <4 x i32> %b)172; CHECKLE-LABEL: test1503:173; CHECKLE:       // %bb.0:174; CHECKLE-NEXT:    zip1 v1.4s, v0.4s, v1.4s175; CHECKLE-NEXT:    ext v1.16b, v1.16b, v0.16b, #8176; CHECKLE-NEXT:    mov v1.s[3], v0.s[3]177; CHECKLE-NEXT:    mov v0.16b, v1.16b178; CHECKLE-NEXT:    ret179;180; CHECKBE-LABEL: test1503:181; CHECKBE:       // %bb.0:182; CHECKBE-NEXT:    rev64 v1.4s, v1.4s183; CHECKBE-NEXT:    rev64 v0.4s, v0.4s184; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8185; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8186; CHECKBE-NEXT:    zip1 v1.4s, v0.4s, v1.4s187; CHECKBE-NEXT:    ext v1.16b, v1.16b, v0.16b, #8188; CHECKBE-NEXT:    mov v1.s[3], v0.s[3]189; CHECKBE-NEXT:    rev64 v0.4s, v1.4s190; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8191; CHECKBE-NEXT:    ret192{193  %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 1, i32 5, i32 0, i32 3>194  ret <4 x i32> %r195}196 197define <4 x i32> @test4366(<4 x i32> %a, <4 x i32> %b)198; CHECKLE-LABEL: test4366:199; CHECKLE:       // %bb.0:200; CHECKLE-NEXT:    trn1 v1.4s, v1.4s, v1.4s201; CHECKLE-NEXT:    mov v1.s[1], v0.s[3]202; CHECKLE-NEXT:    mov v0.16b, v1.16b203; CHECKLE-NEXT:    ret204;205; CHECKBE-LABEL: test4366:206; CHECKBE:       // %bb.0:207; CHECKBE-NEXT:    rev64 v1.4s, v1.4s208; CHECKBE-NEXT:    rev64 v0.4s, v0.4s209; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8210; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8211; CHECKBE-NEXT:    trn1 v1.4s, v1.4s, v1.4s212; CHECKBE-NEXT:    mov v1.s[1], v0.s[3]213; CHECKBE-NEXT:    rev64 v0.4s, v1.4s214; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8215; CHECKBE-NEXT:    ret216{217  %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 4, i32 3, i32 6, i32 6>218  ret <4 x i32> %r219}220 221define <4 x i32> @test7367(<4 x i32> %a, <4 x i32> %b)222; CHECKLE-LABEL: test7367:223; CHECKLE:       // %bb.0:224; CHECKLE-NEXT:    mov v2.16b, v1.16b225; CHECKLE-NEXT:    mov v2.d[0], v0.d[1]226; CHECKLE-NEXT:    mov v2.s[0], v1.s[3]227; CHECKLE-NEXT:    mov v0.16b, v2.16b228; CHECKLE-NEXT:    ret229;230; CHECKBE-LABEL: test7367:231; CHECKBE:       // %bb.0:232; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8233; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8234; CHECKBE-NEXT:    rev64 v1.4s, v1.4s235; CHECKBE-NEXT:    mov v2.d[0], v0.d[1]236; CHECKBE-NEXT:    ext v0.16b, v1.16b, v1.16b, #8237; CHECKBE-NEXT:    rev64 v1.4s, v2.4s238; CHECKBE-NEXT:    mov v1.s[0], v0.s[3]239; CHECKBE-NEXT:    rev64 v0.4s, v1.4s240; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8241; CHECKBE-NEXT:    ret242{243  %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 7, i32 3, i32 6, i32 7>244  ret <4 x i32> %r245}246 247define <4 x i32> @test4045(<4 x i32> %a, <4 x i32> %b)248; CHECKLE-LABEL: test4045:249; CHECKLE:       // %bb.0:250; CHECKLE-NEXT:    trn1 v0.4s, v1.4s, v0.4s251; CHECKLE-NEXT:    mov v0.d[1], v1.d[0]252; CHECKLE-NEXT:    ret253;254; CHECKBE-LABEL: test4045:255; CHECKBE:       // %bb.0:256; CHECKBE-NEXT:    rev64 v0.4s, v0.4s257; CHECKBE-NEXT:    rev64 v2.4s, v1.4s258; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8259; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8260; CHECKBE-NEXT:    ext v2.16b, v2.16b, v2.16b, #8261; CHECKBE-NEXT:    trn1 v0.4s, v2.4s, v0.4s262; CHECKBE-NEXT:    rev64 v0.4s, v0.4s263; CHECKBE-NEXT:    mov v0.d[1], v1.d[0]264; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8265; CHECKBE-NEXT:    ret266{267  %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 4, i32 0, i32 4, i32 5>268  ret <4 x i32> %r269}270 271define <4 x i32> @test0067(<4 x i32> %a, <4 x i32> %b)272; CHECKLE-LABEL: test0067:273; CHECKLE:       // %bb.0:274; CHECKLE-NEXT:    trn1 v0.4s, v0.4s, v0.4s275; CHECKLE-NEXT:    mov v0.d[1], v1.d[1]276; CHECKLE-NEXT:    ret277;278; CHECKBE-LABEL: test0067:279; CHECKBE:       // %bb.0:280; CHECKBE-NEXT:    rev64 v0.4s, v0.4s281; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8282; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8283; CHECKBE-NEXT:    trn1 v0.4s, v0.4s, v0.4s284; CHECKBE-NEXT:    rev64 v0.4s, v0.4s285; CHECKBE-NEXT:    mov v0.d[1], v1.d[1]286; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8287; CHECKBE-NEXT:    ret288{289  %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 0, i32 6, i32 7>290  ret <4 x i32> %r291}292 293define <4 x i32> @test_shuf6(<4 x i32> %a, <4 x i32> %b)294; CHECKLE-LABEL: test_shuf6:295; CHECKLE:       // %bb.0:296; CHECKLE-NEXT:    mov v0.s[2], v1.s[3]297; CHECKLE-NEXT:    trn1 v0.4s, v0.4s, v0.4s298; CHECKLE-NEXT:    ret299;300; CHECKBE-LABEL: test_shuf6:301; CHECKBE:       // %bb.0:302; CHECKBE-NEXT:    rev64 v1.4s, v1.4s303; CHECKBE-NEXT:    rev64 v0.4s, v0.4s304; CHECKBE-NEXT:    ext v1.16b, v1.16b, v1.16b, #8305; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8306; CHECKBE-NEXT:    mov v0.s[2], v1.s[3]307; CHECKBE-NEXT:    trn1 v0.4s, v0.4s, v0.4s308; CHECKBE-NEXT:    rev64 v0.4s, v0.4s309; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8310; CHECKBE-NEXT:    ret311{312  %r = shufflevector <4 x i32> %a, <4 x i32> %b, <4 x i32> <i32 0, i32 0, i32 7, i32 7>313  ret <4 x i32> %r314}315 316define <4 x i16> @test_shuf7(<4 x i16> %a, <4 x i16> %b)317; CHECKLE-LABEL: test_shuf7:318; CHECKLE:       // %bb.0:319; CHECKLE-NEXT:    // kill: def $d0 killed $d0 def $q0320; CHECKLE-NEXT:    // kill: def $d1 killed $d1 def $q1321; CHECKLE-NEXT:    mov v0.h[2], v1.h[3]322; CHECKLE-NEXT:    trn1 v0.4h, v0.4h, v0.4h323; CHECKLE-NEXT:    ret324;325; CHECKBE-LABEL: test_shuf7:326; CHECKBE:       // %bb.0:327; CHECKBE-NEXT:    rev64 v1.4h, v1.4h328; CHECKBE-NEXT:    rev64 v0.4h, v0.4h329; CHECKBE-NEXT:    mov v0.h[2], v1.h[3]330; CHECKBE-NEXT:    trn1 v0.4h, v0.4h, v0.4h331; CHECKBE-NEXT:    rev64 v0.4h, v0.4h332; CHECKBE-NEXT:    ret333{334  %r = shufflevector <4 x i16> %a, <4 x i16> %b, <4 x i32> <i32 0, i32 0, i32 7, i32 7>335  ret <4 x i16> %r336}337 338define <8 x i8> @test_shuf8(<8 x i8> %a, <8 x i8> %b)339; CHECKLE-LABEL: test_shuf8:340; CHECKLE:       // %bb.0:341; CHECKLE-NEXT:    // kill: def $d0 killed $d0 def $q0342; CHECKLE-NEXT:    // kill: def $d1 killed $d1 def $q1343; CHECKLE-NEXT:    adrp x8, .LCPI12_0344; CHECKLE-NEXT:    mov v0.d[1], v1.d[0]345; CHECKLE-NEXT:    ldr d1, [x8, :lo12:.LCPI12_0]346; CHECKLE-NEXT:    tbl v0.8b, { v0.16b }, v1.8b347; CHECKLE-NEXT:    ret348;349; CHECKBE-LABEL: test_shuf8:350; CHECKBE:       // %bb.0:351; CHECKBE-NEXT:    rev64 v0.8b, v0.8b352; CHECKBE-NEXT:    rev64 v1.8b, v1.8b353; CHECKBE-NEXT:    adrp x8, .LCPI12_0354; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI12_0355; CHECKBE-NEXT:    mov v0.d[1], v1.d[0]356; CHECKBE-NEXT:    ld1 { v1.8b }, [x8]357; CHECKBE-NEXT:    tbl v0.8b, { v0.16b }, v1.8b358; CHECKBE-NEXT:    rev64 v0.8b, v0.8b359; CHECKBE-NEXT:    ret360{361  %r = shufflevector <8 x i8> %a, <8 x i8> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8>362  ret <8 x i8> %r363}364 365define <8 x i16> @test_shuf9(<8 x i16> %a, <8 x i16> %b)366; CHECKLE-LABEL: test_shuf9:367; CHECKLE:       // %bb.0:368; CHECKLE-NEXT:    adrp x8, .LCPI13_0369; CHECKLE-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1370; CHECKLE-NEXT:    ldr q2, [x8, :lo12:.LCPI13_0]371; CHECKLE-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1372; CHECKLE-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b373; CHECKLE-NEXT:    ret374;375; CHECKBE-LABEL: test_shuf9:376; CHECKBE:       // %bb.0:377; CHECKBE-NEXT:    rev64 v1.16b, v1.16b378; CHECKBE-NEXT:    rev64 v0.16b, v0.16b379; CHECKBE-NEXT:    adrp x8, .LCPI13_0380; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI13_0381; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8382; CHECKBE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8383; CHECKBE-NEXT:    ld1 { v0.16b }, [x8]384; CHECKBE-NEXT:    tbl v0.16b, { v1.16b, v2.16b }, v0.16b385; CHECKBE-NEXT:    rev64 v0.16b, v0.16b386; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8387; CHECKBE-NEXT:    ret388{389  %r = shufflevector <8 x i16> %a, <8 x i16> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8>390  ret <8 x i16> %r391}392 393define <16 x i8> @test_shuf10(<16 x i8> %a, <16 x i8> %b)394; CHECKLE-LABEL: test_shuf10:395; CHECKLE:       // %bb.0:396; CHECKLE-NEXT:    adrp x8, .LCPI14_0397; CHECKLE-NEXT:    ldr q1, [x8, :lo12:.LCPI14_0]398; CHECKLE-NEXT:    tbl v0.16b, { v0.16b }, v1.16b399; CHECKLE-NEXT:    ret400;401; CHECKBE-LABEL: test_shuf10:402; CHECKBE:       // %bb.0:403; CHECKBE-NEXT:    rev64 v0.16b, v0.16b404; CHECKBE-NEXT:    adrp x8, .LCPI14_0405; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI14_0406; CHECKBE-NEXT:    ld1 { v1.16b }, [x8]407; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8408; CHECKBE-NEXT:    tbl v0.16b, { v0.16b }, v1.16b409; CHECKBE-NEXT:    rev64 v0.16b, v0.16b410; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8411; CHECKBE-NEXT:    ret412{413  %r = shufflevector <16 x i8> %a, <16 x i8> %b, <16 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i32     8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8, i32 8 >414  ret <16 x i8> %r415}416 417define <8 x half> @test_shuf11(<8 x half> %a, <8 x half> %b)418; CHECKLE-LABEL: test_shuf11:419; CHECKLE:       // %bb.0:420; CHECKLE-NEXT:    adrp x8, .LCPI15_0421; CHECKLE-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1422; CHECKLE-NEXT:    ldr q2, [x8, :lo12:.LCPI15_0]423; CHECKLE-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1424; CHECKLE-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b425; CHECKLE-NEXT:    ret426;427; CHECKBE-LABEL: test_shuf11:428; CHECKBE:       // %bb.0:429; CHECKBE-NEXT:    rev64 v1.16b, v1.16b430; CHECKBE-NEXT:    rev64 v0.16b, v0.16b431; CHECKBE-NEXT:    adrp x8, .LCPI15_0432; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI15_0433; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8434; CHECKBE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8435; CHECKBE-NEXT:    ld1 { v0.16b }, [x8]436; CHECKBE-NEXT:    tbl v0.16b, { v1.16b, v2.16b }, v0.16b437; CHECKBE-NEXT:    rev64 v0.16b, v0.16b438; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8439; CHECKBE-NEXT:    ret440{441  %r = shufflevector <8 x half> %a, <8 x half> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 8, i32 8, i32 8, i32 8>442  ret <8 x half> %r443}444 445define <8 x half> @test_shuf12(<8 x half> %a, <8 x half> %b)446; CHECKLE-LABEL: test_shuf12:447; CHECKLE:       // %bb.0:448; CHECKLE-NEXT:    adrp x8, .LCPI16_0449; CHECKLE-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1450; CHECKLE-NEXT:    ldr q2, [x8, :lo12:.LCPI16_0]451; CHECKLE-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1452; CHECKLE-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b453; CHECKLE-NEXT:    ret454;455; CHECKBE-LABEL: test_shuf12:456; CHECKBE:       // %bb.0:457; CHECKBE-NEXT:    rev64 v1.16b, v1.16b458; CHECKBE-NEXT:    rev64 v0.16b, v0.16b459; CHECKBE-NEXT:    adrp x8, .LCPI16_0460; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI16_0461; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8462; CHECKBE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8463; CHECKBE-NEXT:    ld1 { v0.16b }, [x8]464; CHECKBE-NEXT:    tbl v0.16b, { v1.16b, v2.16b }, v0.16b465; CHECKBE-NEXT:    rev64 v0.16b, v0.16b466; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8467; CHECKBE-NEXT:    ret468{469  %r = shufflevector <8 x half> %a, <8 x half> %b, <8 x i32> <i32 0, i32 0, i32 0, i32 0, i32 0, i32 8, i32 1, i32 15>470  ret <8 x half> %r471}472 473define <8 x half> @test_shuf13(<8 x half> %a, <8 x half> %b)474; CHECKLE-LABEL: test_shuf13:475; CHECKLE:       // %bb.0:476; CHECKLE-NEXT:    adrp x8, .LCPI17_0477; CHECKLE-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1478; CHECKLE-NEXT:    ldr q2, [x8, :lo12:.LCPI17_0]479; CHECKLE-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1480; CHECKLE-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b481; CHECKLE-NEXT:    ret482;483; CHECKBE-LABEL: test_shuf13:484; CHECKBE:       // %bb.0:485; CHECKBE-NEXT:    rev64 v1.16b, v1.16b486; CHECKBE-NEXT:    rev64 v0.16b, v0.16b487; CHECKBE-NEXT:    adrp x8, .LCPI17_0488; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI17_0489; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8490; CHECKBE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8491; CHECKBE-NEXT:    ld1 { v0.16b }, [x8]492; CHECKBE-NEXT:    tbl v0.16b, { v1.16b, v2.16b }, v0.16b493; CHECKBE-NEXT:    rev64 v0.16b, v0.16b494; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8495; CHECKBE-NEXT:    ret496{497  %r = shufflevector <8 x half> %a, <8 x half> %b, <8 x i32> <i32 1, i32 2, i32 0, i32 0, i32 0, i32 8, i32 1, i32 15>498  ret <8 x half> %r499}500 501define <8 x half> @test_shuf14(<8 x half> %a, <8 x half> %b)502; CHECKLE-LABEL: test_shuf14:503; CHECKLE:       // %bb.0:504; CHECKLE-NEXT:    adrp x8, .LCPI18_0505; CHECKLE-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1506; CHECKLE-NEXT:    ldr q2, [x8, :lo12:.LCPI18_0]507; CHECKLE-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1508; CHECKLE-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b509; CHECKLE-NEXT:    ret510;511; CHECKBE-LABEL: test_shuf14:512; CHECKBE:       // %bb.0:513; CHECKBE-NEXT:    rev64 v1.16b, v1.16b514; CHECKBE-NEXT:    rev64 v0.16b, v0.16b515; CHECKBE-NEXT:    adrp x8, .LCPI18_0516; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI18_0517; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8518; CHECKBE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8519; CHECKBE-NEXT:    ld1 { v0.16b }, [x8]520; CHECKBE-NEXT:    tbl v0.16b, { v1.16b, v2.16b }, v0.16b521; CHECKBE-NEXT:    rev64 v0.16b, v0.16b522; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8523; CHECKBE-NEXT:    ret524{525  %r = shufflevector <8 x half> %a, <8 x half> %b, <8 x i32> <i32 1, i32 2, i32 1, i32 1, i32 0, i32 8, i32 1, i32 15>526  ret <8 x half> %r527}528 529define <8 x half> @test_shuf15(<8 x half> %a, <8 x half> %b)530; CHECKLE-LABEL: test_shuf15:531; CHECKLE:       // %bb.0:532; CHECKLE-NEXT:    adrp x8, .LCPI19_0533; CHECKLE-NEXT:    // kill: def $q1 killed $q1 killed $q0_q1 def $q0_q1534; CHECKLE-NEXT:    ldr q2, [x8, :lo12:.LCPI19_0]535; CHECKLE-NEXT:    // kill: def $q0 killed $q0 killed $q0_q1 def $q0_q1536; CHECKLE-NEXT:    tbl v0.16b, { v0.16b, v1.16b }, v2.16b537; CHECKLE-NEXT:    ret538;539; CHECKBE-LABEL: test_shuf15:540; CHECKBE:       // %bb.0:541; CHECKBE-NEXT:    rev64 v1.16b, v1.16b542; CHECKBE-NEXT:    rev64 v0.16b, v0.16b543; CHECKBE-NEXT:    adrp x8, .LCPI19_0544; CHECKBE-NEXT:    add x8, x8, :lo12:.LCPI19_0545; CHECKBE-NEXT:    ext v2.16b, v1.16b, v1.16b, #8546; CHECKBE-NEXT:    ext v1.16b, v0.16b, v0.16b, #8547; CHECKBE-NEXT:    ld1 { v0.16b }, [x8]548; CHECKBE-NEXT:    tbl v0.16b, { v1.16b, v2.16b }, v0.16b549; CHECKBE-NEXT:    rev64 v0.16b, v0.16b550; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8551; CHECKBE-NEXT:    ret552{553  %r = shufflevector <8 x half> %a, <8 x half> %b, <8 x i32> <i32 1, i32 2, i32 7, i32 2, i32 0, i32 3, i32 2, i32 15>554  ret <8 x half> %r555}556 557define <4 x i32> @extract_shuffle(<8 x i16> %j, <4 x i16> %k) {558; CHECKLE-LABEL: extract_shuffle:559; CHECKLE:       // %bb.0:560; CHECKLE-NEXT:    ushll2 v0.4s, v0.8h, #3561; CHECKLE-NEXT:    ret562;563; CHECKBE-LABEL: extract_shuffle:564; CHECKBE:       // %bb.0:565; CHECKBE-NEXT:    rev64 v0.8h, v0.8h566; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8567; CHECKBE-NEXT:    ushll2 v0.4s, v0.8h, #3568; CHECKBE-NEXT:    rev64 v0.4s, v0.4s569; CHECKBE-NEXT:    ext v0.16b, v0.16b, v0.16b, #8570; CHECKBE-NEXT:    ret571  %a = shufflevector <8 x i16> %j, <8 x i16> poison, <8 x i32> <i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison>572  %b = shufflevector <8 x i16> %a, <8 x i16> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 3>573  %c = zext <4 x i16> %b to <4 x i32>574  %d = shl <4 x i32> %c, <i32 3, i32 3, i32 3, i32 3>575  ret <4 x i32> %d576}577 578