brintos

brintos / llvm-project-archived public Read only

0
0
Text · 39.9 KiB · ef6b65c Raw
1268 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 22; RUN: llc -mtriple=aarch64 -verify-machineinstrs %s -o - 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-SD3; RUN: llc -mtriple=aarch64 -global-isel -verify-machineinstrs %s -o - | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5define i16 @sext_i8_to_i16(i8 %a) {6; CHECK-LABEL: sext_i8_to_i16:7; CHECK:       // %bb.0: // %entry8; CHECK-NEXT:    sxtb w0, w09; CHECK-NEXT:    ret10entry:11  %c = sext i8 %a to i1612  ret i16 %c13}14 15define i32 @sext_i8_to_i32(i8 %a) {16; CHECK-LABEL: sext_i8_to_i32:17; CHECK:       // %bb.0: // %entry18; CHECK-NEXT:    sxtb w0, w019; CHECK-NEXT:    ret20entry:21  %c = sext i8 %a to i3222  ret i32 %c23}24 25define i64 @sext_i8_to_i64(i8 %a) {26; CHECK-LABEL: sext_i8_to_i64:27; CHECK:       // %bb.0: // %entry28; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x029; CHECK-NEXT:    sxtb x0, w030; CHECK-NEXT:    ret31entry:32  %c = sext i8 %a to i6433  ret i64 %c34}35 36define i10 @sext_i8_to_i10(i8 %a) {37; CHECK-LABEL: sext_i8_to_i10:38; CHECK:       // %bb.0: // %entry39; CHECK-NEXT:    sxtb w0, w040; CHECK-NEXT:    ret41entry:42  %c = sext i8 %a to i1043  ret i10 %c44}45 46define i32 @sext_i16_to_i32(i16 %a) {47; CHECK-LABEL: sext_i16_to_i32:48; CHECK:       // %bb.0: // %entry49; CHECK-NEXT:    sxth w0, w050; CHECK-NEXT:    ret51entry:52  %c = sext i16 %a to i3253  ret i32 %c54}55 56define i64 @sext_i16_to_i64(i16 %a) {57; CHECK-LABEL: sext_i16_to_i64:58; CHECK:       // %bb.0: // %entry59; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x060; CHECK-NEXT:    sxth x0, w061; CHECK-NEXT:    ret62entry:63  %c = sext i16 %a to i6464  ret i64 %c65}66 67define i64 @sext_i32_to_i64(i32 %a) {68; CHECK-LABEL: sext_i32_to_i64:69; CHECK:       // %bb.0: // %entry70; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x071; CHECK-NEXT:    sxtw x0, w072; CHECK-NEXT:    ret73entry:74  %c = sext i32 %a to i6475  ret i64 %c76}77 78define i16 @sext_i10_to_i16(i10 %a) {79; CHECK-LABEL: sext_i10_to_i16:80; CHECK:       // %bb.0: // %entry81; CHECK-NEXT:    sbfx w0, w0, #0, #1082; CHECK-NEXT:    ret83entry:84  %c = sext i10 %a to i1685  ret i16 %c86}87 88define i32 @sext_i10_to_i32(i10 %a) {89; CHECK-LABEL: sext_i10_to_i32:90; CHECK:       // %bb.0: // %entry91; CHECK-NEXT:    sbfx w0, w0, #0, #1092; CHECK-NEXT:    ret93entry:94  %c = sext i10 %a to i3295  ret i32 %c96}97 98define i64 @sext_i10_to_i64(i10 %a) {99; CHECK-LABEL: sext_i10_to_i64:100; CHECK:       // %bb.0: // %entry101; CHECK-NEXT:    // kill: def $w0 killed $w0 def $x0102; CHECK-NEXT:    sbfx x0, x0, #0, #10103; CHECK-NEXT:    ret104entry:105  %c = sext i10 %a to i64106  ret i64 %c107}108 109define <2 x i16> @sext_v2i8_v2i16(<2 x i8> %a) {110; CHECK-LABEL: sext_v2i8_v2i16:111; CHECK:       // %bb.0: // %entry112; CHECK-NEXT:    shl v0.2s, v0.2s, #24113; CHECK-NEXT:    sshr v0.2s, v0.2s, #24114; CHECK-NEXT:    ret115entry:116  %c = sext <2 x i8> %a to <2 x i16>117  ret <2 x i16> %c118}119 120define <2 x i32> @sext_v2i8_v2i32(<2 x i8> %a) {121; CHECK-LABEL: sext_v2i8_v2i32:122; CHECK:       // %bb.0: // %entry123; CHECK-NEXT:    shl v0.2s, v0.2s, #24124; CHECK-NEXT:    sshr v0.2s, v0.2s, #24125; CHECK-NEXT:    ret126entry:127  %c = sext <2 x i8> %a to <2 x i32>128  ret <2 x i32> %c129}130 131define <2 x i64> @sext_v2i8_v2i64(<2 x i8> %a) {132; CHECK-LABEL: sext_v2i8_v2i64:133; CHECK:       // %bb.0: // %entry134; CHECK-NEXT:    ushll v0.2d, v0.2s, #0135; CHECK-NEXT:    shl v0.2d, v0.2d, #56136; CHECK-NEXT:    sshr v0.2d, v0.2d, #56137; CHECK-NEXT:    ret138entry:139  %c = sext <2 x i8> %a to <2 x i64>140  ret <2 x i64> %c141}142 143define <2 x i32> @sext_v2i16_v2i32(<2 x i16> %a) {144; CHECK-LABEL: sext_v2i16_v2i32:145; CHECK:       // %bb.0: // %entry146; CHECK-NEXT:    shl v0.2s, v0.2s, #16147; CHECK-NEXT:    sshr v0.2s, v0.2s, #16148; CHECK-NEXT:    ret149entry:150  %c = sext <2 x i16> %a to <2 x i32>151  ret <2 x i32> %c152}153 154define <2 x i64> @sext_v2i16_v2i64(<2 x i16> %a) {155; CHECK-LABEL: sext_v2i16_v2i64:156; CHECK:       // %bb.0: // %entry157; CHECK-NEXT:    ushll v0.2d, v0.2s, #0158; CHECK-NEXT:    shl v0.2d, v0.2d, #48159; CHECK-NEXT:    sshr v0.2d, v0.2d, #48160; CHECK-NEXT:    ret161entry:162  %c = sext <2 x i16> %a to <2 x i64>163  ret <2 x i64> %c164}165 166define <2 x i64> @sext_v2i32_v2i64(<2 x i32> %a) {167; CHECK-LABEL: sext_v2i32_v2i64:168; CHECK:       // %bb.0: // %entry169; CHECK-NEXT:    sshll v0.2d, v0.2s, #0170; CHECK-NEXT:    ret171entry:172  %c = sext <2 x i32> %a to <2 x i64>173  ret <2 x i64> %c174}175 176define <2 x i16> @sext_v2i10_v2i16(<2 x i10> %a) {177; CHECK-LABEL: sext_v2i10_v2i16:178; CHECK:       // %bb.0: // %entry179; CHECK-NEXT:    shl v0.2s, v0.2s, #22180; CHECK-NEXT:    sshr v0.2s, v0.2s, #22181; CHECK-NEXT:    ret182entry:183  %c = sext <2 x i10> %a to <2 x i16>184  ret <2 x i16> %c185}186 187define <2 x i32> @sext_v2i10_v2i32(<2 x i10> %a) {188; CHECK-LABEL: sext_v2i10_v2i32:189; CHECK:       // %bb.0: // %entry190; CHECK-NEXT:    shl v0.2s, v0.2s, #22191; CHECK-NEXT:    sshr v0.2s, v0.2s, #22192; CHECK-NEXT:    ret193entry:194  %c = sext <2 x i10> %a to <2 x i32>195  ret <2 x i32> %c196}197 198define <2 x i64> @sext_v2i10_v2i64(<2 x i10> %a) {199; CHECK-LABEL: sext_v2i10_v2i64:200; CHECK:       // %bb.0: // %entry201; CHECK-NEXT:    ushll v0.2d, v0.2s, #0202; CHECK-NEXT:    shl v0.2d, v0.2d, #54203; CHECK-NEXT:    sshr v0.2d, v0.2d, #54204; CHECK-NEXT:    ret205entry:206  %c = sext <2 x i10> %a to <2 x i64>207  ret <2 x i64> %c208}209 210define <3 x i16> @sext_v3i8_v3i16(<3 x i8> %a) {211; CHECK-SD-LABEL: sext_v3i8_v3i16:212; CHECK-SD:       // %bb.0: // %entry213; CHECK-SD-NEXT:    fmov s0, w0214; CHECK-SD-NEXT:    mov v0.h[1], w1215; CHECK-SD-NEXT:    mov v0.h[2], w2216; CHECK-SD-NEXT:    shl v0.4h, v0.4h, #8217; CHECK-SD-NEXT:    sshr v0.4h, v0.4h, #8218; CHECK-SD-NEXT:    ret219;220; CHECK-GI-LABEL: sext_v3i8_v3i16:221; CHECK-GI:       // %bb.0: // %entry222; CHECK-GI-NEXT:    lsl w8, w0, #8223; CHECK-GI-NEXT:    lsl w9, w1, #8224; CHECK-GI-NEXT:    sbfx w8, w8, #8, #8225; CHECK-GI-NEXT:    sbfx w9, w9, #8, #8226; CHECK-GI-NEXT:    fmov s0, w8227; CHECK-GI-NEXT:    lsl w8, w2, #8228; CHECK-GI-NEXT:    sbfx w8, w8, #8, #8229; CHECK-GI-NEXT:    mov v0.h[1], w9230; CHECK-GI-NEXT:    mov v0.h[2], w8231; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0232; CHECK-GI-NEXT:    ret233entry:234  %c = sext <3 x i8> %a to <3 x i16>235  ret <3 x i16> %c236}237 238define <3 x i32> @sext_v3i8_v3i32(<3 x i8> %a) {239; CHECK-SD-LABEL: sext_v3i8_v3i32:240; CHECK-SD:       // %bb.0: // %entry241; CHECK-SD-NEXT:    fmov s0, w0242; CHECK-SD-NEXT:    mov v0.h[1], w1243; CHECK-SD-NEXT:    mov v0.h[2], w2244; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0245; CHECK-SD-NEXT:    shl v0.4s, v0.4s, #24246; CHECK-SD-NEXT:    sshr v0.4s, v0.4s, #24247; CHECK-SD-NEXT:    ret248;249; CHECK-GI-LABEL: sext_v3i8_v3i32:250; CHECK-GI:       // %bb.0: // %entry251; CHECK-GI-NEXT:    sxtb w8, w0252; CHECK-GI-NEXT:    sxtb w9, w1253; CHECK-GI-NEXT:    fmov s0, w8254; CHECK-GI-NEXT:    sxtb w8, w2255; CHECK-GI-NEXT:    mov v0.s[1], w9256; CHECK-GI-NEXT:    mov v0.s[2], w8257; CHECK-GI-NEXT:    ret258entry:259  %c = sext <3 x i8> %a to <3 x i32>260  ret <3 x i32> %c261}262 263define <3 x i64> @sext_v3i8_v3i64(<3 x i8> %a) {264; CHECK-SD-LABEL: sext_v3i8_v3i64:265; CHECK-SD:       // %bb.0: // %entry266; CHECK-SD-NEXT:    fmov s0, w0267; CHECK-SD-NEXT:    fmov s1, w2268; CHECK-SD-NEXT:    mov v0.s[1], w1269; CHECK-SD-NEXT:    ushll v1.2d, v1.2s, #0270; CHECK-SD-NEXT:    shl v2.2d, v1.2d, #56271; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0272; CHECK-SD-NEXT:    sshr v2.2d, v2.2d, #56273; CHECK-SD-NEXT:    shl v0.2d, v0.2d, #56274; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2275; CHECK-SD-NEXT:    sshr v0.2d, v0.2d, #56276; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8277; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0278; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1279; CHECK-SD-NEXT:    ret280;281; CHECK-GI-LABEL: sext_v3i8_v3i64:282; CHECK-GI:       // %bb.0: // %entry283; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 def $x0284; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 def $x1285; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 def $x2286; CHECK-GI-NEXT:    sxtb x8, w0287; CHECK-GI-NEXT:    sxtb x9, w1288; CHECK-GI-NEXT:    sxtb x10, w2289; CHECK-GI-NEXT:    fmov d0, x8290; CHECK-GI-NEXT:    fmov d1, x9291; CHECK-GI-NEXT:    fmov d2, x10292; CHECK-GI-NEXT:    ret293entry:294  %c = sext <3 x i8> %a to <3 x i64>295  ret <3 x i64> %c296}297 298define <3 x i32> @sext_v3i16_v3i32(<3 x i16> %a) {299; CHECK-SD-LABEL: sext_v3i16_v3i32:300; CHECK-SD:       // %bb.0: // %entry301; CHECK-SD-NEXT:    sshll v0.4s, v0.4h, #0302; CHECK-SD-NEXT:    ret303;304; CHECK-GI-LABEL: sext_v3i16_v3i32:305; CHECK-GI:       // %bb.0: // %entry306; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0307; CHECK-GI-NEXT:    smov w8, v0.h[0]308; CHECK-GI-NEXT:    smov w9, v0.h[1]309; CHECK-GI-NEXT:    fmov s1, w8310; CHECK-GI-NEXT:    smov w8, v0.h[2]311; CHECK-GI-NEXT:    mov v1.s[1], w9312; CHECK-GI-NEXT:    mov v1.s[2], w8313; CHECK-GI-NEXT:    mov v0.16b, v1.16b314; CHECK-GI-NEXT:    ret315entry:316  %c = sext <3 x i16> %a to <3 x i32>317  ret <3 x i32> %c318}319 320define <3 x i64> @sext_v3i16_v3i64(<3 x i16> %a) {321; CHECK-SD-LABEL: sext_v3i16_v3i64:322; CHECK-SD:       // %bb.0: // %entry323; CHECK-SD-NEXT:    sshll v2.4s, v0.4h, #0324; CHECK-SD-NEXT:    sshll v0.2d, v2.2s, #0325; CHECK-SD-NEXT:    sshll2 v2.2d, v2.4s, #0326; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2327; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8328; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0329; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1330; CHECK-SD-NEXT:    ret331;332; CHECK-GI-LABEL: sext_v3i16_v3i64:333; CHECK-GI:       // %bb.0: // %entry334; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 def $q0335; CHECK-GI-NEXT:    smov x8, v0.h[0]336; CHECK-GI-NEXT:    smov x9, v0.h[1]337; CHECK-GI-NEXT:    smov x10, v0.h[2]338; CHECK-GI-NEXT:    fmov d0, x8339; CHECK-GI-NEXT:    fmov d1, x9340; CHECK-GI-NEXT:    fmov d2, x10341; CHECK-GI-NEXT:    ret342entry:343  %c = sext <3 x i16> %a to <3 x i64>344  ret <3 x i64> %c345}346 347define <3 x i64> @sext_v3i32_v3i64(<3 x i32> %a) {348; CHECK-SD-LABEL: sext_v3i32_v3i64:349; CHECK-SD:       // %bb.0: // %entry350; CHECK-SD-NEXT:    sshll v3.2d, v0.2s, #0351; CHECK-SD-NEXT:    sshll2 v2.2d, v0.4s, #0352; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2353; CHECK-SD-NEXT:    fmov d0, d3354; CHECK-SD-NEXT:    ext v1.16b, v3.16b, v3.16b, #8355; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1356; CHECK-SD-NEXT:    ret357;358; CHECK-GI-LABEL: sext_v3i32_v3i64:359; CHECK-GI:       // %bb.0: // %entry360; CHECK-GI-NEXT:    smov x8, v0.s[0]361; CHECK-GI-NEXT:    smov x9, v0.s[1]362; CHECK-GI-NEXT:    smov x10, v0.s[2]363; CHECK-GI-NEXT:    fmov d0, x8364; CHECK-GI-NEXT:    fmov d1, x9365; CHECK-GI-NEXT:    fmov d2, x10366; CHECK-GI-NEXT:    ret367entry:368  %c = sext <3 x i32> %a to <3 x i64>369  ret <3 x i64> %c370}371 372define <3 x i16> @sext_v3i10_v3i16(<3 x i10> %a) {373; CHECK-SD-LABEL: sext_v3i10_v3i16:374; CHECK-SD:       // %bb.0: // %entry375; CHECK-SD-NEXT:    fmov s0, w0376; CHECK-SD-NEXT:    mov v0.h[1], w1377; CHECK-SD-NEXT:    mov v0.h[2], w2378; CHECK-SD-NEXT:    shl v0.4h, v0.4h, #6379; CHECK-SD-NEXT:    sshr v0.4h, v0.4h, #6380; CHECK-SD-NEXT:    ret381;382; CHECK-GI-LABEL: sext_v3i10_v3i16:383; CHECK-GI:       // %bb.0: // %entry384; CHECK-GI-NEXT:    lsl w8, w0, #6385; CHECK-GI-NEXT:    lsl w9, w1, #6386; CHECK-GI-NEXT:    sbfx w8, w8, #6, #10387; CHECK-GI-NEXT:    sbfx w9, w9, #6, #10388; CHECK-GI-NEXT:    fmov s0, w8389; CHECK-GI-NEXT:    lsl w8, w2, #6390; CHECK-GI-NEXT:    sbfx w8, w8, #6, #10391; CHECK-GI-NEXT:    mov v0.h[1], w9392; CHECK-GI-NEXT:    mov v0.h[2], w8393; CHECK-GI-NEXT:    // kill: def $d0 killed $d0 killed $q0394; CHECK-GI-NEXT:    ret395entry:396  %c = sext <3 x i10> %a to <3 x i16>397  ret <3 x i16> %c398}399 400define <3 x i32> @sext_v3i10_v3i32(<3 x i10> %a) {401; CHECK-SD-LABEL: sext_v3i10_v3i32:402; CHECK-SD:       // %bb.0: // %entry403; CHECK-SD-NEXT:    fmov s0, w0404; CHECK-SD-NEXT:    mov v0.h[1], w1405; CHECK-SD-NEXT:    mov v0.h[2], w2406; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0407; CHECK-SD-NEXT:    shl v0.4s, v0.4s, #22408; CHECK-SD-NEXT:    sshr v0.4s, v0.4s, #22409; CHECK-SD-NEXT:    ret410;411; CHECK-GI-LABEL: sext_v3i10_v3i32:412; CHECK-GI:       // %bb.0: // %entry413; CHECK-GI-NEXT:    sbfx w8, w0, #0, #10414; CHECK-GI-NEXT:    sbfx w9, w1, #0, #10415; CHECK-GI-NEXT:    fmov s0, w8416; CHECK-GI-NEXT:    sbfx w8, w2, #0, #10417; CHECK-GI-NEXT:    mov v0.s[1], w9418; CHECK-GI-NEXT:    mov v0.s[2], w8419; CHECK-GI-NEXT:    ret420entry:421  %c = sext <3 x i10> %a to <3 x i32>422  ret <3 x i32> %c423}424 425define <3 x i64> @sext_v3i10_v3i64(<3 x i10> %a) {426; CHECK-SD-LABEL: sext_v3i10_v3i64:427; CHECK-SD:       // %bb.0: // %entry428; CHECK-SD-NEXT:    fmov s0, w0429; CHECK-SD-NEXT:    fmov s1, w2430; CHECK-SD-NEXT:    mov v0.s[1], w1431; CHECK-SD-NEXT:    ushll v1.2d, v1.2s, #0432; CHECK-SD-NEXT:    shl v2.2d, v1.2d, #54433; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #0434; CHECK-SD-NEXT:    sshr v2.2d, v2.2d, #54435; CHECK-SD-NEXT:    shl v0.2d, v0.2d, #54436; CHECK-SD-NEXT:    // kill: def $d2 killed $d2 killed $q2437; CHECK-SD-NEXT:    sshr v0.2d, v0.2d, #54438; CHECK-SD-NEXT:    ext v1.16b, v0.16b, v0.16b, #8439; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 killed $q0440; CHECK-SD-NEXT:    // kill: def $d1 killed $d1 killed $q1441; CHECK-SD-NEXT:    ret442;443; CHECK-GI-LABEL: sext_v3i10_v3i64:444; CHECK-GI:       // %bb.0: // %entry445; CHECK-GI-NEXT:    // kill: def $w0 killed $w0 def $x0446; CHECK-GI-NEXT:    // kill: def $w1 killed $w1 def $x1447; CHECK-GI-NEXT:    // kill: def $w2 killed $w2 def $x2448; CHECK-GI-NEXT:    sbfx x8, x0, #0, #10449; CHECK-GI-NEXT:    sbfx x9, x1, #0, #10450; CHECK-GI-NEXT:    sbfx x10, x2, #0, #10451; CHECK-GI-NEXT:    fmov d0, x8452; CHECK-GI-NEXT:    fmov d1, x9453; CHECK-GI-NEXT:    fmov d2, x10454; CHECK-GI-NEXT:    ret455entry:456  %c = sext <3 x i10> %a to <3 x i64>457  ret <3 x i64> %c458}459 460define <4 x i16> @sext_v4i8_v4i16(<4 x i8> %a) {461; CHECK-LABEL: sext_v4i8_v4i16:462; CHECK:       // %bb.0: // %entry463; CHECK-NEXT:    shl v0.4h, v0.4h, #8464; CHECK-NEXT:    sshr v0.4h, v0.4h, #8465; CHECK-NEXT:    ret466entry:467  %c = sext <4 x i8> %a to <4 x i16>468  ret <4 x i16> %c469}470 471define <4 x i32> @sext_v4i8_v4i32(<4 x i8> %a) {472; CHECK-LABEL: sext_v4i8_v4i32:473; CHECK:       // %bb.0: // %entry474; CHECK-NEXT:    ushll v0.4s, v0.4h, #0475; CHECK-NEXT:    shl v0.4s, v0.4s, #24476; CHECK-NEXT:    sshr v0.4s, v0.4s, #24477; CHECK-NEXT:    ret478entry:479  %c = sext <4 x i8> %a to <4 x i32>480  ret <4 x i32> %c481}482 483define <4 x i64> @sext_v4i8_v4i64(<4 x i8> %a) {484; CHECK-SD-LABEL: sext_v4i8_v4i64:485; CHECK-SD:       // %bb.0: // %entry486; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0487; CHECK-SD-NEXT:    ushll v1.2d, v0.2s, #0488; CHECK-SD-NEXT:    ushll2 v0.2d, v0.4s, #0489; CHECK-SD-NEXT:    shl v0.2d, v0.2d, #56490; CHECK-SD-NEXT:    shl v2.2d, v1.2d, #56491; CHECK-SD-NEXT:    sshr v1.2d, v0.2d, #56492; CHECK-SD-NEXT:    sshr v0.2d, v2.2d, #56493; CHECK-SD-NEXT:    ret494;495; CHECK-GI-LABEL: sext_v4i8_v4i64:496; CHECK-GI:       // %bb.0: // %entry497; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0498; CHECK-GI-NEXT:    ushll v1.2d, v0.2s, #0499; CHECK-GI-NEXT:    ushll2 v0.2d, v0.4s, #0500; CHECK-GI-NEXT:    shl v1.2d, v1.2d, #56501; CHECK-GI-NEXT:    shl v2.2d, v0.2d, #56502; CHECK-GI-NEXT:    sshr v0.2d, v1.2d, #56503; CHECK-GI-NEXT:    sshr v1.2d, v2.2d, #56504; CHECK-GI-NEXT:    ret505entry:506  %c = sext <4 x i8> %a to <4 x i64>507  ret <4 x i64> %c508}509 510define <4 x i32> @sext_v4i16_v4i32(<4 x i16> %a) {511; CHECK-LABEL: sext_v4i16_v4i32:512; CHECK:       // %bb.0: // %entry513; CHECK-NEXT:    sshll v0.4s, v0.4h, #0514; CHECK-NEXT:    ret515entry:516  %c = sext <4 x i16> %a to <4 x i32>517  ret <4 x i32> %c518}519 520define <4 x i64> @sext_v4i16_v4i64(<4 x i16> %a) {521; CHECK-SD-LABEL: sext_v4i16_v4i64:522; CHECK-SD:       // %bb.0: // %entry523; CHECK-SD-NEXT:    sshll v0.4s, v0.4h, #0524; CHECK-SD-NEXT:    sshll2 v1.2d, v0.4s, #0525; CHECK-SD-NEXT:    sshll v0.2d, v0.2s, #0526; CHECK-SD-NEXT:    ret527;528; CHECK-GI-LABEL: sext_v4i16_v4i64:529; CHECK-GI:       // %bb.0: // %entry530; CHECK-GI-NEXT:    sshll v1.4s, v0.4h, #0531; CHECK-GI-NEXT:    sshll v0.2d, v1.2s, #0532; CHECK-GI-NEXT:    sshll2 v1.2d, v1.4s, #0533; CHECK-GI-NEXT:    ret534entry:535  %c = sext <4 x i16> %a to <4 x i64>536  ret <4 x i64> %c537}538 539define <4 x i64> @sext_v4i32_v4i64(<4 x i32> %a) {540; CHECK-SD-LABEL: sext_v4i32_v4i64:541; CHECK-SD:       // %bb.0: // %entry542; CHECK-SD-NEXT:    sshll2 v1.2d, v0.4s, #0543; CHECK-SD-NEXT:    sshll v0.2d, v0.2s, #0544; CHECK-SD-NEXT:    ret545;546; CHECK-GI-LABEL: sext_v4i32_v4i64:547; CHECK-GI:       // %bb.0: // %entry548; CHECK-GI-NEXT:    sshll v2.2d, v0.2s, #0549; CHECK-GI-NEXT:    sshll2 v1.2d, v0.4s, #0550; CHECK-GI-NEXT:    mov v0.16b, v2.16b551; CHECK-GI-NEXT:    ret552entry:553  %c = sext <4 x i32> %a to <4 x i64>554  ret <4 x i64> %c555}556 557define <4 x i16> @sext_v4i10_v4i16(<4 x i10> %a) {558; CHECK-LABEL: sext_v4i10_v4i16:559; CHECK:       // %bb.0: // %entry560; CHECK-NEXT:    shl v0.4h, v0.4h, #6561; CHECK-NEXT:    sshr v0.4h, v0.4h, #6562; CHECK-NEXT:    ret563entry:564  %c = sext <4 x i10> %a to <4 x i16>565  ret <4 x i16> %c566}567 568define <4 x i32> @sext_v4i10_v4i32(<4 x i10> %a) {569; CHECK-LABEL: sext_v4i10_v4i32:570; CHECK:       // %bb.0: // %entry571; CHECK-NEXT:    ushll v0.4s, v0.4h, #0572; CHECK-NEXT:    shl v0.4s, v0.4s, #22573; CHECK-NEXT:    sshr v0.4s, v0.4s, #22574; CHECK-NEXT:    ret575entry:576  %c = sext <4 x i10> %a to <4 x i32>577  ret <4 x i32> %c578}579 580define <4 x i64> @sext_v4i10_v4i64(<4 x i10> %a) {581; CHECK-SD-LABEL: sext_v4i10_v4i64:582; CHECK-SD:       // %bb.0: // %entry583; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #0584; CHECK-SD-NEXT:    ushll v1.2d, v0.2s, #0585; CHECK-SD-NEXT:    ushll2 v0.2d, v0.4s, #0586; CHECK-SD-NEXT:    shl v0.2d, v0.2d, #54587; CHECK-SD-NEXT:    shl v2.2d, v1.2d, #54588; CHECK-SD-NEXT:    sshr v1.2d, v0.2d, #54589; CHECK-SD-NEXT:    sshr v0.2d, v2.2d, #54590; CHECK-SD-NEXT:    ret591;592; CHECK-GI-LABEL: sext_v4i10_v4i64:593; CHECK-GI:       // %bb.0: // %entry594; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #0595; CHECK-GI-NEXT:    ushll v1.2d, v0.2s, #0596; CHECK-GI-NEXT:    ushll2 v0.2d, v0.4s, #0597; CHECK-GI-NEXT:    shl v1.2d, v1.2d, #54598; CHECK-GI-NEXT:    shl v2.2d, v0.2d, #54599; CHECK-GI-NEXT:    sshr v0.2d, v1.2d, #54600; CHECK-GI-NEXT:    sshr v1.2d, v2.2d, #54601; CHECK-GI-NEXT:    ret602entry:603  %c = sext <4 x i10> %a to <4 x i64>604  ret <4 x i64> %c605}606 607define <8 x i16> @sext_v8i8_v8i16(<8 x i8> %a) {608; CHECK-LABEL: sext_v8i8_v8i16:609; CHECK:       // %bb.0: // %entry610; CHECK-NEXT:    sshll v0.8h, v0.8b, #0611; CHECK-NEXT:    ret612entry:613  %c = sext <8 x i8> %a to <8 x i16>614  ret <8 x i16> %c615}616 617define <8 x i32> @sext_v8i8_v8i32(<8 x i8> %a) {618; CHECK-SD-LABEL: sext_v8i8_v8i32:619; CHECK-SD:       // %bb.0: // %entry620; CHECK-SD-NEXT:    sshll v0.8h, v0.8b, #0621; CHECK-SD-NEXT:    sshll2 v1.4s, v0.8h, #0622; CHECK-SD-NEXT:    sshll v0.4s, v0.4h, #0623; CHECK-SD-NEXT:    ret624;625; CHECK-GI-LABEL: sext_v8i8_v8i32:626; CHECK-GI:       // %bb.0: // %entry627; CHECK-GI-NEXT:    sshll v1.8h, v0.8b, #0628; CHECK-GI-NEXT:    sshll v0.4s, v1.4h, #0629; CHECK-GI-NEXT:    sshll2 v1.4s, v1.8h, #0630; CHECK-GI-NEXT:    ret631entry:632  %c = sext <8 x i8> %a to <8 x i32>633  ret <8 x i32> %c634}635 636define <8 x i64> @sext_v8i8_v8i64(<8 x i8> %a) {637; CHECK-SD-LABEL: sext_v8i8_v8i64:638; CHECK-SD:       // %bb.0: // %entry639; CHECK-SD-NEXT:    sshll v0.8h, v0.8b, #0640; CHECK-SD-NEXT:    sshll v1.4s, v0.4h, #0641; CHECK-SD-NEXT:    sshll2 v2.4s, v0.8h, #0642; CHECK-SD-NEXT:    sshll v0.2d, v1.2s, #0643; CHECK-SD-NEXT:    sshll2 v3.2d, v2.4s, #0644; CHECK-SD-NEXT:    sshll2 v1.2d, v1.4s, #0645; CHECK-SD-NEXT:    sshll v2.2d, v2.2s, #0646; CHECK-SD-NEXT:    ret647;648; CHECK-GI-LABEL: sext_v8i8_v8i64:649; CHECK-GI:       // %bb.0: // %entry650; CHECK-GI-NEXT:    sshll v0.8h, v0.8b, #0651; CHECK-GI-NEXT:    sshll v1.4s, v0.4h, #0652; CHECK-GI-NEXT:    sshll2 v3.4s, v0.8h, #0653; CHECK-GI-NEXT:    sshll v0.2d, v1.2s, #0654; CHECK-GI-NEXT:    sshll2 v1.2d, v1.4s, #0655; CHECK-GI-NEXT:    sshll v2.2d, v3.2s, #0656; CHECK-GI-NEXT:    sshll2 v3.2d, v3.4s, #0657; CHECK-GI-NEXT:    ret658entry:659  %c = sext <8 x i8> %a to <8 x i64>660  ret <8 x i64> %c661}662 663define <8 x i32> @sext_v8i16_v8i32(<8 x i16> %a) {664; CHECK-SD-LABEL: sext_v8i16_v8i32:665; CHECK-SD:       // %bb.0: // %entry666; CHECK-SD-NEXT:    sshll2 v1.4s, v0.8h, #0667; CHECK-SD-NEXT:    sshll v0.4s, v0.4h, #0668; CHECK-SD-NEXT:    ret669;670; CHECK-GI-LABEL: sext_v8i16_v8i32:671; CHECK-GI:       // %bb.0: // %entry672; CHECK-GI-NEXT:    sshll v2.4s, v0.4h, #0673; CHECK-GI-NEXT:    sshll2 v1.4s, v0.8h, #0674; CHECK-GI-NEXT:    mov v0.16b, v2.16b675; CHECK-GI-NEXT:    ret676entry:677  %c = sext <8 x i16> %a to <8 x i32>678  ret <8 x i32> %c679}680 681define <8 x i64> @sext_v8i16_v8i64(<8 x i16> %a) {682; CHECK-SD-LABEL: sext_v8i16_v8i64:683; CHECK-SD:       // %bb.0: // %entry684; CHECK-SD-NEXT:    sshll v1.4s, v0.4h, #0685; CHECK-SD-NEXT:    sshll2 v2.4s, v0.8h, #0686; CHECK-SD-NEXT:    sshll v0.2d, v1.2s, #0687; CHECK-SD-NEXT:    sshll2 v3.2d, v2.4s, #0688; CHECK-SD-NEXT:    sshll2 v1.2d, v1.4s, #0689; CHECK-SD-NEXT:    sshll v2.2d, v2.2s, #0690; CHECK-SD-NEXT:    ret691;692; CHECK-GI-LABEL: sext_v8i16_v8i64:693; CHECK-GI:       // %bb.0: // %entry694; CHECK-GI-NEXT:    sshll v1.4s, v0.4h, #0695; CHECK-GI-NEXT:    sshll2 v3.4s, v0.8h, #0696; CHECK-GI-NEXT:    sshll v0.2d, v1.2s, #0697; CHECK-GI-NEXT:    sshll2 v1.2d, v1.4s, #0698; CHECK-GI-NEXT:    sshll v2.2d, v3.2s, #0699; CHECK-GI-NEXT:    sshll2 v3.2d, v3.4s, #0700; CHECK-GI-NEXT:    ret701entry:702  %c = sext <8 x i16> %a to <8 x i64>703  ret <8 x i64> %c704}705 706define <8 x i64> @sext_v8i32_v8i64(<8 x i32> %a) {707; CHECK-SD-LABEL: sext_v8i32_v8i64:708; CHECK-SD:       // %bb.0: // %entry709; CHECK-SD-NEXT:    sshll v5.2d, v0.2s, #0710; CHECK-SD-NEXT:    sshll2 v4.2d, v0.4s, #0711; CHECK-SD-NEXT:    sshll2 v3.2d, v1.4s, #0712; CHECK-SD-NEXT:    sshll v2.2d, v1.2s, #0713; CHECK-SD-NEXT:    mov v0.16b, v5.16b714; CHECK-SD-NEXT:    mov v1.16b, v4.16b715; CHECK-SD-NEXT:    ret716;717; CHECK-GI-LABEL: sext_v8i32_v8i64:718; CHECK-GI:       // %bb.0: // %entry719; CHECK-GI-NEXT:    sshll v4.2d, v0.2s, #0720; CHECK-GI-NEXT:    sshll2 v5.2d, v0.4s, #0721; CHECK-GI-NEXT:    sshll v2.2d, v1.2s, #0722; CHECK-GI-NEXT:    sshll2 v3.2d, v1.4s, #0723; CHECK-GI-NEXT:    mov v0.16b, v4.16b724; CHECK-GI-NEXT:    mov v1.16b, v5.16b725; CHECK-GI-NEXT:    ret726entry:727  %c = sext <8 x i32> %a to <8 x i64>728  ret <8 x i64> %c729}730 731define <8 x i16> @sext_v8i10_v8i16(<8 x i10> %a) {732; CHECK-LABEL: sext_v8i10_v8i16:733; CHECK:       // %bb.0: // %entry734; CHECK-NEXT:    shl v0.8h, v0.8h, #6735; CHECK-NEXT:    sshr v0.8h, v0.8h, #6736; CHECK-NEXT:    ret737entry:738  %c = sext <8 x i10> %a to <8 x i16>739  ret <8 x i16> %c740}741 742define <8 x i32> @sext_v8i10_v8i32(<8 x i10> %a) {743; CHECK-SD-LABEL: sext_v8i10_v8i32:744; CHECK-SD:       // %bb.0: // %entry745; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0746; CHECK-SD-NEXT:    ushll2 v0.4s, v0.8h, #0747; CHECK-SD-NEXT:    shl v0.4s, v0.4s, #22748; CHECK-SD-NEXT:    shl v2.4s, v1.4s, #22749; CHECK-SD-NEXT:    sshr v1.4s, v0.4s, #22750; CHECK-SD-NEXT:    sshr v0.4s, v2.4s, #22751; CHECK-SD-NEXT:    ret752;753; CHECK-GI-LABEL: sext_v8i10_v8i32:754; CHECK-GI:       // %bb.0: // %entry755; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0756; CHECK-GI-NEXT:    ushll2 v0.4s, v0.8h, #0757; CHECK-GI-NEXT:    shl v1.4s, v1.4s, #22758; CHECK-GI-NEXT:    shl v2.4s, v0.4s, #22759; CHECK-GI-NEXT:    sshr v0.4s, v1.4s, #22760; CHECK-GI-NEXT:    sshr v1.4s, v2.4s, #22761; CHECK-GI-NEXT:    ret762entry:763  %c = sext <8 x i10> %a to <8 x i32>764  ret <8 x i32> %c765}766 767define <8 x i64> @sext_v8i10_v8i64(<8 x i10> %a) {768; CHECK-SD-LABEL: sext_v8i10_v8i64:769; CHECK-SD:       // %bb.0: // %entry770; CHECK-SD-NEXT:    ushll v1.4s, v0.4h, #0771; CHECK-SD-NEXT:    ushll2 v0.4s, v0.8h, #0772; CHECK-SD-NEXT:    ushll v2.2d, v1.2s, #0773; CHECK-SD-NEXT:    ushll v3.2d, v0.2s, #0774; CHECK-SD-NEXT:    ushll2 v1.2d, v1.4s, #0775; CHECK-SD-NEXT:    ushll2 v0.2d, v0.4s, #0776; CHECK-SD-NEXT:    shl v2.2d, v2.2d, #54777; CHECK-SD-NEXT:    shl v1.2d, v1.2d, #54778; CHECK-SD-NEXT:    shl v5.2d, v3.2d, #54779; CHECK-SD-NEXT:    shl v4.2d, v0.2d, #54780; CHECK-SD-NEXT:    sshr v0.2d, v2.2d, #54781; CHECK-SD-NEXT:    sshr v1.2d, v1.2d, #54782; CHECK-SD-NEXT:    sshr v2.2d, v5.2d, #54783; CHECK-SD-NEXT:    sshr v3.2d, v4.2d, #54784; CHECK-SD-NEXT:    ret785;786; CHECK-GI-LABEL: sext_v8i10_v8i64:787; CHECK-GI:       // %bb.0: // %entry788; CHECK-GI-NEXT:    ushll v1.4s, v0.4h, #0789; CHECK-GI-NEXT:    ushll2 v0.4s, v0.8h, #0790; CHECK-GI-NEXT:    ushll v2.2d, v1.2s, #0791; CHECK-GI-NEXT:    ushll2 v1.2d, v1.4s, #0792; CHECK-GI-NEXT:    ushll v3.2d, v0.2s, #0793; CHECK-GI-NEXT:    ushll2 v0.2d, v0.4s, #0794; CHECK-GI-NEXT:    shl v2.2d, v2.2d, #54795; CHECK-GI-NEXT:    shl v1.2d, v1.2d, #54796; CHECK-GI-NEXT:    shl v3.2d, v3.2d, #54797; CHECK-GI-NEXT:    shl v4.2d, v0.2d, #54798; CHECK-GI-NEXT:    sshr v0.2d, v2.2d, #54799; CHECK-GI-NEXT:    sshr v1.2d, v1.2d, #54800; CHECK-GI-NEXT:    sshr v2.2d, v3.2d, #54801; CHECK-GI-NEXT:    sshr v3.2d, v4.2d, #54802; CHECK-GI-NEXT:    ret803entry:804  %c = sext <8 x i10> %a to <8 x i64>805  ret <8 x i64> %c806}807 808define <16 x i16> @sext_v16i8_v16i16(<16 x i8> %a) {809; CHECK-SD-LABEL: sext_v16i8_v16i16:810; CHECK-SD:       // %bb.0: // %entry811; CHECK-SD-NEXT:    sshll2 v1.8h, v0.16b, #0812; CHECK-SD-NEXT:    sshll v0.8h, v0.8b, #0813; CHECK-SD-NEXT:    ret814;815; CHECK-GI-LABEL: sext_v16i8_v16i16:816; CHECK-GI:       // %bb.0: // %entry817; CHECK-GI-NEXT:    sshll v2.8h, v0.8b, #0818; CHECK-GI-NEXT:    sshll2 v1.8h, v0.16b, #0819; CHECK-GI-NEXT:    mov v0.16b, v2.16b820; CHECK-GI-NEXT:    ret821entry:822  %c = sext <16 x i8> %a to <16 x i16>823  ret <16 x i16> %c824}825 826define <16 x i32> @sext_v16i8_v16i32(<16 x i8> %a) {827; CHECK-SD-LABEL: sext_v16i8_v16i32:828; CHECK-SD:       // %bb.0: // %entry829; CHECK-SD-NEXT:    sshll v1.8h, v0.8b, #0830; CHECK-SD-NEXT:    sshll2 v2.8h, v0.16b, #0831; CHECK-SD-NEXT:    sshll v0.4s, v1.4h, #0832; CHECK-SD-NEXT:    sshll2 v3.4s, v2.8h, #0833; CHECK-SD-NEXT:    sshll2 v1.4s, v1.8h, #0834; CHECK-SD-NEXT:    sshll v2.4s, v2.4h, #0835; CHECK-SD-NEXT:    ret836;837; CHECK-GI-LABEL: sext_v16i8_v16i32:838; CHECK-GI:       // %bb.0: // %entry839; CHECK-GI-NEXT:    sshll v1.8h, v0.8b, #0840; CHECK-GI-NEXT:    sshll2 v3.8h, v0.16b, #0841; CHECK-GI-NEXT:    sshll v0.4s, v1.4h, #0842; CHECK-GI-NEXT:    sshll2 v1.4s, v1.8h, #0843; CHECK-GI-NEXT:    sshll v2.4s, v3.4h, #0844; CHECK-GI-NEXT:    sshll2 v3.4s, v3.8h, #0845; CHECK-GI-NEXT:    ret846entry:847  %c = sext <16 x i8> %a to <16 x i32>848  ret <16 x i32> %c849}850 851define <16 x i64> @sext_v16i8_v16i64(<16 x i8> %a) {852; CHECK-SD-LABEL: sext_v16i8_v16i64:853; CHECK-SD:       // %bb.0: // %entry854; CHECK-SD-NEXT:    sshll v1.8h, v0.8b, #0855; CHECK-SD-NEXT:    sshll2 v0.8h, v0.16b, #0856; CHECK-SD-NEXT:    sshll v2.4s, v1.4h, #0857; CHECK-SD-NEXT:    sshll2 v4.4s, v1.8h, #0858; CHECK-SD-NEXT:    sshll v5.4s, v0.4h, #0859; CHECK-SD-NEXT:    sshll2 v6.4s, v0.8h, #0860; CHECK-SD-NEXT:    sshll2 v1.2d, v2.4s, #0861; CHECK-SD-NEXT:    sshll v0.2d, v2.2s, #0862; CHECK-SD-NEXT:    sshll2 v3.2d, v4.4s, #0863; CHECK-SD-NEXT:    sshll v2.2d, v4.2s, #0864; CHECK-SD-NEXT:    sshll v4.2d, v5.2s, #0865; CHECK-SD-NEXT:    sshll2 v7.2d, v6.4s, #0866; CHECK-SD-NEXT:    sshll2 v5.2d, v5.4s, #0867; CHECK-SD-NEXT:    sshll v6.2d, v6.2s, #0868; CHECK-SD-NEXT:    ret869;870; CHECK-GI-LABEL: sext_v16i8_v16i64:871; CHECK-GI:       // %bb.0: // %entry872; CHECK-GI-NEXT:    sshll v1.8h, v0.8b, #0873; CHECK-GI-NEXT:    sshll2 v0.8h, v0.16b, #0874; CHECK-GI-NEXT:    sshll v2.4s, v1.4h, #0875; CHECK-GI-NEXT:    sshll2 v3.4s, v1.8h, #0876; CHECK-GI-NEXT:    sshll v5.4s, v0.4h, #0877; CHECK-GI-NEXT:    sshll2 v7.4s, v0.8h, #0878; CHECK-GI-NEXT:    sshll v0.2d, v2.2s, #0879; CHECK-GI-NEXT:    sshll2 v1.2d, v2.4s, #0880; CHECK-GI-NEXT:    sshll v2.2d, v3.2s, #0881; CHECK-GI-NEXT:    sshll2 v3.2d, v3.4s, #0882; CHECK-GI-NEXT:    sshll v4.2d, v5.2s, #0883; CHECK-GI-NEXT:    sshll2 v5.2d, v5.4s, #0884; CHECK-GI-NEXT:    sshll v6.2d, v7.2s, #0885; CHECK-GI-NEXT:    sshll2 v7.2d, v7.4s, #0886; CHECK-GI-NEXT:    ret887entry:888  %c = sext <16 x i8> %a to <16 x i64>889  ret <16 x i64> %c890}891 892define <16 x i32> @sext_v16i16_v16i32(<16 x i16> %a) {893; CHECK-SD-LABEL: sext_v16i16_v16i32:894; CHECK-SD:       // %bb.0: // %entry895; CHECK-SD-NEXT:    sshll v5.4s, v0.4h, #0896; CHECK-SD-NEXT:    sshll2 v4.4s, v0.8h, #0897; CHECK-SD-NEXT:    sshll2 v3.4s, v1.8h, #0898; CHECK-SD-NEXT:    sshll v2.4s, v1.4h, #0899; CHECK-SD-NEXT:    mov v0.16b, v5.16b900; CHECK-SD-NEXT:    mov v1.16b, v4.16b901; CHECK-SD-NEXT:    ret902;903; CHECK-GI-LABEL: sext_v16i16_v16i32:904; CHECK-GI:       // %bb.0: // %entry905; CHECK-GI-NEXT:    sshll v4.4s, v0.4h, #0906; CHECK-GI-NEXT:    sshll2 v5.4s, v0.8h, #0907; CHECK-GI-NEXT:    sshll v2.4s, v1.4h, #0908; CHECK-GI-NEXT:    sshll2 v3.4s, v1.8h, #0909; CHECK-GI-NEXT:    mov v0.16b, v4.16b910; CHECK-GI-NEXT:    mov v1.16b, v5.16b911; CHECK-GI-NEXT:    ret912entry:913  %c = sext <16 x i16> %a to <16 x i32>914  ret <16 x i32> %c915}916 917define <16 x i64> @sext_v16i16_v16i64(<16 x i16> %a) {918; CHECK-SD-LABEL: sext_v16i16_v16i64:919; CHECK-SD:       // %bb.0: // %entry920; CHECK-SD-NEXT:    sshll v2.4s, v0.4h, #0921; CHECK-SD-NEXT:    sshll2 v4.4s, v0.8h, #0922; CHECK-SD-NEXT:    sshll v5.4s, v1.4h, #0923; CHECK-SD-NEXT:    sshll2 v6.4s, v1.8h, #0924; CHECK-SD-NEXT:    sshll2 v1.2d, v2.4s, #0925; CHECK-SD-NEXT:    sshll v0.2d, v2.2s, #0926; CHECK-SD-NEXT:    sshll2 v3.2d, v4.4s, #0927; CHECK-SD-NEXT:    sshll v2.2d, v4.2s, #0928; CHECK-SD-NEXT:    sshll v4.2d, v5.2s, #0929; CHECK-SD-NEXT:    sshll2 v7.2d, v6.4s, #0930; CHECK-SD-NEXT:    sshll2 v5.2d, v5.4s, #0931; CHECK-SD-NEXT:    sshll v6.2d, v6.2s, #0932; CHECK-SD-NEXT:    ret933;934; CHECK-GI-LABEL: sext_v16i16_v16i64:935; CHECK-GI:       // %bb.0: // %entry936; CHECK-GI-NEXT:    sshll v2.4s, v0.4h, #0937; CHECK-GI-NEXT:    sshll2 v3.4s, v0.8h, #0938; CHECK-GI-NEXT:    sshll v5.4s, v1.4h, #0939; CHECK-GI-NEXT:    sshll2 v7.4s, v1.8h, #0940; CHECK-GI-NEXT:    sshll v0.2d, v2.2s, #0941; CHECK-GI-NEXT:    sshll2 v1.2d, v2.4s, #0942; CHECK-GI-NEXT:    sshll v2.2d, v3.2s, #0943; CHECK-GI-NEXT:    sshll2 v3.2d, v3.4s, #0944; CHECK-GI-NEXT:    sshll v4.2d, v5.2s, #0945; CHECK-GI-NEXT:    sshll2 v5.2d, v5.4s, #0946; CHECK-GI-NEXT:    sshll v6.2d, v7.2s, #0947; CHECK-GI-NEXT:    sshll2 v7.2d, v7.4s, #0948; CHECK-GI-NEXT:    ret949entry:950  %c = sext <16 x i16> %a to <16 x i64>951  ret <16 x i64> %c952}953 954define <16 x i64> @sext_v16i32_v16i64(<16 x i32> %a) {955; CHECK-SD-LABEL: sext_v16i32_v16i64:956; CHECK-SD:       // %bb.0: // %entry957; CHECK-SD-NEXT:    sshll2 v17.2d, v0.4s, #0958; CHECK-SD-NEXT:    sshll2 v16.2d, v1.4s, #0959; CHECK-SD-NEXT:    sshll v18.2d, v1.2s, #0960; CHECK-SD-NEXT:    sshll v0.2d, v0.2s, #0961; CHECK-SD-NEXT:    sshll v4.2d, v2.2s, #0962; CHECK-SD-NEXT:    sshll2 v5.2d, v2.4s, #0963; CHECK-SD-NEXT:    sshll2 v7.2d, v3.4s, #0964; CHECK-SD-NEXT:    sshll v6.2d, v3.2s, #0965; CHECK-SD-NEXT:    mov v1.16b, v17.16b966; CHECK-SD-NEXT:    mov v2.16b, v18.16b967; CHECK-SD-NEXT:    mov v3.16b, v16.16b968; CHECK-SD-NEXT:    ret969;970; CHECK-GI-LABEL: sext_v16i32_v16i64:971; CHECK-GI:       // %bb.0: // %entry972; CHECK-GI-NEXT:    sshll v16.2d, v0.2s, #0973; CHECK-GI-NEXT:    sshll2 v17.2d, v0.4s, #0974; CHECK-GI-NEXT:    sshll v18.2d, v1.2s, #0975; CHECK-GI-NEXT:    sshll2 v19.2d, v1.4s, #0976; CHECK-GI-NEXT:    sshll v4.2d, v2.2s, #0977; CHECK-GI-NEXT:    sshll2 v5.2d, v2.4s, #0978; CHECK-GI-NEXT:    sshll v6.2d, v3.2s, #0979; CHECK-GI-NEXT:    sshll2 v7.2d, v3.4s, #0980; CHECK-GI-NEXT:    mov v0.16b, v16.16b981; CHECK-GI-NEXT:    mov v1.16b, v17.16b982; CHECK-GI-NEXT:    mov v2.16b, v18.16b983; CHECK-GI-NEXT:    mov v3.16b, v19.16b984; CHECK-GI-NEXT:    ret985entry:986  %c = sext <16 x i32> %a to <16 x i64>987  ret <16 x i64> %c988}989 990define <16 x i16> @sext_v16i10_v16i16(<16 x i10> %a) {991; CHECK-SD-LABEL: sext_v16i10_v16i16:992; CHECK-SD:       // %bb.0: // %entry993; CHECK-SD-NEXT:    ldr w8, [sp]994; CHECK-SD-NEXT:    fmov s1, w0995; CHECK-SD-NEXT:    ldr w9, [sp, #8]996; CHECK-SD-NEXT:    fmov s0, w8997; CHECK-SD-NEXT:    ldr w8, [sp, #16]998; CHECK-SD-NEXT:    mov v1.h[1], w1999; CHECK-SD-NEXT:    mov v0.h[1], w91000; CHECK-SD-NEXT:    mov v1.h[2], w21001; CHECK-SD-NEXT:    mov v0.h[2], w81002; CHECK-SD-NEXT:    ldr w8, [sp, #24]1003; CHECK-SD-NEXT:    mov v1.h[3], w31004; CHECK-SD-NEXT:    mov v0.h[3], w81005; CHECK-SD-NEXT:    ldr w8, [sp, #32]1006; CHECK-SD-NEXT:    mov v1.h[4], w41007; CHECK-SD-NEXT:    mov v0.h[4], w81008; CHECK-SD-NEXT:    ldr w8, [sp, #40]1009; CHECK-SD-NEXT:    mov v1.h[5], w51010; CHECK-SD-NEXT:    mov v0.h[5], w81011; CHECK-SD-NEXT:    ldr w8, [sp, #48]1012; CHECK-SD-NEXT:    mov v1.h[6], w61013; CHECK-SD-NEXT:    mov v0.h[6], w81014; CHECK-SD-NEXT:    ldr w8, [sp, #56]1015; CHECK-SD-NEXT:    mov v1.h[7], w71016; CHECK-SD-NEXT:    mov v0.h[7], w81017; CHECK-SD-NEXT:    shl v1.8h, v1.8h, #61018; CHECK-SD-NEXT:    shl v2.8h, v0.8h, #61019; CHECK-SD-NEXT:    sshr v0.8h, v1.8h, #61020; CHECK-SD-NEXT:    sshr v1.8h, v2.8h, #61021; CHECK-SD-NEXT:    ret1022;1023; CHECK-GI-LABEL: sext_v16i10_v16i16:1024; CHECK-GI:       // %bb.0: // %entry1025; CHECK-GI-NEXT:    ldr w8, [sp]1026; CHECK-GI-NEXT:    fmov s0, w01027; CHECK-GI-NEXT:    ldr w9, [sp, #8]1028; CHECK-GI-NEXT:    fmov s1, w81029; CHECK-GI-NEXT:    ldr w8, [sp, #16]1030; CHECK-GI-NEXT:    mov v0.h[1], w11031; CHECK-GI-NEXT:    mov v1.h[1], w91032; CHECK-GI-NEXT:    mov v0.h[2], w21033; CHECK-GI-NEXT:    mov v1.h[2], w81034; CHECK-GI-NEXT:    ldr w8, [sp, #24]1035; CHECK-GI-NEXT:    mov v0.h[3], w31036; CHECK-GI-NEXT:    mov v1.h[3], w81037; CHECK-GI-NEXT:    ldr w8, [sp, #32]1038; CHECK-GI-NEXT:    mov v0.h[4], w41039; CHECK-GI-NEXT:    mov v1.h[4], w81040; CHECK-GI-NEXT:    ldr w8, [sp, #40]1041; CHECK-GI-NEXT:    mov v0.h[5], w51042; CHECK-GI-NEXT:    mov v1.h[5], w81043; CHECK-GI-NEXT:    ldr w8, [sp, #48]1044; CHECK-GI-NEXT:    mov v0.h[6], w61045; CHECK-GI-NEXT:    mov v1.h[6], w81046; CHECK-GI-NEXT:    ldr w8, [sp, #56]1047; CHECK-GI-NEXT:    mov v0.h[7], w71048; CHECK-GI-NEXT:    mov v1.h[7], w81049; CHECK-GI-NEXT:    shl v0.8h, v0.8h, #61050; CHECK-GI-NEXT:    shl v1.8h, v1.8h, #61051; CHECK-GI-NEXT:    sshr v0.8h, v0.8h, #61052; CHECK-GI-NEXT:    sshr v1.8h, v1.8h, #61053; CHECK-GI-NEXT:    ret1054entry:1055  %c = sext <16 x i10> %a to <16 x i16>1056  ret <16 x i16> %c1057}1058 1059define <16 x i32> @sext_v16i10_v16i32(<16 x i10> %a) {1060; CHECK-SD-LABEL: sext_v16i10_v16i32:1061; CHECK-SD:       // %bb.0: // %entry1062; CHECK-SD-NEXT:    ldr w8, [sp, #32]1063; CHECK-SD-NEXT:    ldr w9, [sp]1064; CHECK-SD-NEXT:    fmov s0, w01065; CHECK-SD-NEXT:    fmov s1, w41066; CHECK-SD-NEXT:    ldr w10, [sp, #40]1067; CHECK-SD-NEXT:    ldr w11, [sp, #8]1068; CHECK-SD-NEXT:    fmov s2, w91069; CHECK-SD-NEXT:    fmov s3, w81070; CHECK-SD-NEXT:    ldr w8, [sp, #48]1071; CHECK-SD-NEXT:    mov v0.h[1], w11072; CHECK-SD-NEXT:    ldr w9, [sp, #16]1073; CHECK-SD-NEXT:    mov v1.h[1], w51074; CHECK-SD-NEXT:    mov v2.h[1], w111075; CHECK-SD-NEXT:    mov v3.h[1], w101076; CHECK-SD-NEXT:    mov v0.h[2], w21077; CHECK-SD-NEXT:    mov v1.h[2], w61078; CHECK-SD-NEXT:    mov v2.h[2], w91079; CHECK-SD-NEXT:    mov v3.h[2], w81080; CHECK-SD-NEXT:    ldr w8, [sp, #56]1081; CHECK-SD-NEXT:    ldr w9, [sp, #24]1082; CHECK-SD-NEXT:    mov v0.h[3], w31083; CHECK-SD-NEXT:    mov v1.h[3], w71084; CHECK-SD-NEXT:    mov v2.h[3], w91085; CHECK-SD-NEXT:    mov v3.h[3], w81086; CHECK-SD-NEXT:    ushll v0.4s, v0.4h, #01087; CHECK-SD-NEXT:    ushll v1.4s, v1.4h, #01088; CHECK-SD-NEXT:    ushll v2.4s, v2.4h, #01089; CHECK-SD-NEXT:    ushll v3.4s, v3.4h, #01090; CHECK-SD-NEXT:    shl v0.4s, v0.4s, #221091; CHECK-SD-NEXT:    shl v1.4s, v1.4s, #221092; CHECK-SD-NEXT:    shl v2.4s, v2.4s, #221093; CHECK-SD-NEXT:    shl v3.4s, v3.4s, #221094; CHECK-SD-NEXT:    sshr v0.4s, v0.4s, #221095; CHECK-SD-NEXT:    sshr v1.4s, v1.4s, #221096; CHECK-SD-NEXT:    sshr v2.4s, v2.4s, #221097; CHECK-SD-NEXT:    sshr v3.4s, v3.4s, #221098; CHECK-SD-NEXT:    ret1099;1100; CHECK-GI-LABEL: sext_v16i10_v16i32:1101; CHECK-GI:       // %bb.0: // %entry1102; CHECK-GI-NEXT:    ldr w8, [sp]1103; CHECK-GI-NEXT:    ldr w9, [sp, #32]1104; CHECK-GI-NEXT:    fmov s0, w01105; CHECK-GI-NEXT:    fmov s1, w41106; CHECK-GI-NEXT:    ldr w10, [sp, #8]1107; CHECK-GI-NEXT:    ldr w11, [sp, #40]1108; CHECK-GI-NEXT:    fmov s2, w81109; CHECK-GI-NEXT:    fmov s3, w91110; CHECK-GI-NEXT:    ldr w8, [sp, #16]1111; CHECK-GI-NEXT:    mov v0.h[1], w11112; CHECK-GI-NEXT:    ldr w9, [sp, #48]1113; CHECK-GI-NEXT:    mov v1.h[1], w51114; CHECK-GI-NEXT:    mov v2.h[1], w101115; CHECK-GI-NEXT:    mov v3.h[1], w111116; CHECK-GI-NEXT:    mov v0.h[2], w21117; CHECK-GI-NEXT:    mov v1.h[2], w61118; CHECK-GI-NEXT:    mov v2.h[2], w81119; CHECK-GI-NEXT:    mov v3.h[2], w91120; CHECK-GI-NEXT:    ldr w8, [sp, #24]1121; CHECK-GI-NEXT:    ldr w9, [sp, #56]1122; CHECK-GI-NEXT:    mov v0.h[3], w31123; CHECK-GI-NEXT:    mov v1.h[3], w71124; CHECK-GI-NEXT:    mov v2.h[3], w81125; CHECK-GI-NEXT:    mov v3.h[3], w91126; CHECK-GI-NEXT:    ushll v0.4s, v0.4h, #01127; CHECK-GI-NEXT:    ushll v1.4s, v1.4h, #01128; CHECK-GI-NEXT:    ushll v2.4s, v2.4h, #01129; CHECK-GI-NEXT:    ushll v3.4s, v3.4h, #01130; CHECK-GI-NEXT:    shl v0.4s, v0.4s, #221131; CHECK-GI-NEXT:    shl v1.4s, v1.4s, #221132; CHECK-GI-NEXT:    shl v2.4s, v2.4s, #221133; CHECK-GI-NEXT:    shl v3.4s, v3.4s, #221134; CHECK-GI-NEXT:    sshr v0.4s, v0.4s, #221135; CHECK-GI-NEXT:    sshr v1.4s, v1.4s, #221136; CHECK-GI-NEXT:    sshr v2.4s, v2.4s, #221137; CHECK-GI-NEXT:    sshr v3.4s, v3.4s, #221138; CHECK-GI-NEXT:    ret1139entry:1140  %c = sext <16 x i10> %a to <16 x i32>1141  ret <16 x i32> %c1142}1143 1144define <16 x i64> @sext_v16i10_v16i64(<16 x i10> %a) {1145; CHECK-SD-LABEL: sext_v16i10_v16i64:1146; CHECK-SD:       // %bb.0: // %entry1147; CHECK-SD-NEXT:    fmov s0, w21148; CHECK-SD-NEXT:    fmov s1, w01149; CHECK-SD-NEXT:    ldr s2, [sp]1150; CHECK-SD-NEXT:    fmov s3, w41151; CHECK-SD-NEXT:    fmov s4, w61152; CHECK-SD-NEXT:    add x8, sp, #81153; CHECK-SD-NEXT:    ldr s5, [sp, #16]1154; CHECK-SD-NEXT:    ldr s6, [sp, #32]1155; CHECK-SD-NEXT:    ldr s7, [sp, #48]1156; CHECK-SD-NEXT:    mov v1.s[1], w11157; CHECK-SD-NEXT:    mov v0.s[1], w31158; CHECK-SD-NEXT:    ld1 { v2.s }[1], [x8]1159; CHECK-SD-NEXT:    mov v3.s[1], w51160; CHECK-SD-NEXT:    mov v4.s[1], w71161; CHECK-SD-NEXT:    add x8, sp, #241162; CHECK-SD-NEXT:    add x9, sp, #401163; CHECK-SD-NEXT:    add x10, sp, #561164; CHECK-SD-NEXT:    ld1 { v5.s }[1], [x8]1165; CHECK-SD-NEXT:    ld1 { v6.s }[1], [x9]1166; CHECK-SD-NEXT:    ld1 { v7.s }[1], [x10]1167; CHECK-SD-NEXT:    ushll v2.2d, v2.2s, #01168; CHECK-SD-NEXT:    ushll v1.2d, v1.2s, #01169; CHECK-SD-NEXT:    ushll v0.2d, v0.2s, #01170; CHECK-SD-NEXT:    ushll v3.2d, v3.2s, #01171; CHECK-SD-NEXT:    ushll v4.2d, v4.2s, #01172; CHECK-SD-NEXT:    ushll v5.2d, v5.2s, #01173; CHECK-SD-NEXT:    ushll v6.2d, v6.2s, #01174; CHECK-SD-NEXT:    ushll v7.2d, v7.2s, #01175; CHECK-SD-NEXT:    shl v17.2d, v2.2d, #541176; CHECK-SD-NEXT:    shl v1.2d, v1.2d, #541177; CHECK-SD-NEXT:    shl v16.2d, v0.2d, #541178; CHECK-SD-NEXT:    shl v3.2d, v3.2d, #541179; CHECK-SD-NEXT:    shl v4.2d, v4.2d, #541180; CHECK-SD-NEXT:    shl v5.2d, v5.2d, #541181; CHECK-SD-NEXT:    shl v6.2d, v6.2d, #541182; CHECK-SD-NEXT:    shl v7.2d, v7.2d, #541183; CHECK-SD-NEXT:    sshr v0.2d, v1.2d, #541184; CHECK-SD-NEXT:    sshr v1.2d, v16.2d, #541185; CHECK-SD-NEXT:    sshr v2.2d, v3.2d, #541186; CHECK-SD-NEXT:    sshr v3.2d, v4.2d, #541187; CHECK-SD-NEXT:    sshr v4.2d, v17.2d, #541188; CHECK-SD-NEXT:    sshr v5.2d, v5.2d, #541189; CHECK-SD-NEXT:    sshr v6.2d, v6.2d, #541190; CHECK-SD-NEXT:    sshr v7.2d, v7.2d, #541191; CHECK-SD-NEXT:    ret1192;1193; CHECK-GI-LABEL: sext_v16i10_v16i64:1194; CHECK-GI:       // %bb.0: // %entry1195; CHECK-GI-NEXT:    fmov s7, w01196; CHECK-GI-NEXT:    fmov s17, w21197; CHECK-GI-NEXT:    ldr s0, [sp]1198; CHECK-GI-NEXT:    fmov s18, w41199; CHECK-GI-NEXT:    fmov s19, w61200; CHECK-GI-NEXT:    ldr s1, [sp, #8]1201; CHECK-GI-NEXT:    ldr s2, [sp, #16]1202; CHECK-GI-NEXT:    ldr s3, [sp, #24]1203; CHECK-GI-NEXT:    ldr s4, [sp, #32]1204; CHECK-GI-NEXT:    ldr s5, [sp, #40]1205; CHECK-GI-NEXT:    ldr s6, [sp, #48]1206; CHECK-GI-NEXT:    ldr s16, [sp, #56]1207; CHECK-GI-NEXT:    mov v7.s[1], w11208; CHECK-GI-NEXT:    mov v17.s[1], w31209; CHECK-GI-NEXT:    mov v18.s[1], w51210; CHECK-GI-NEXT:    mov v19.s[1], w71211; CHECK-GI-NEXT:    mov v0.s[1], v1.s[0]1212; CHECK-GI-NEXT:    mov v2.s[1], v3.s[0]1213; CHECK-GI-NEXT:    mov v4.s[1], v5.s[0]1214; CHECK-GI-NEXT:    mov v6.s[1], v16.s[0]1215; CHECK-GI-NEXT:    ushll v1.2d, v7.2s, #01216; CHECK-GI-NEXT:    ushll v3.2d, v17.2s, #01217; CHECK-GI-NEXT:    ushll v5.2d, v18.2s, #01218; CHECK-GI-NEXT:    ushll v7.2d, v19.2s, #01219; CHECK-GI-NEXT:    ushll v0.2d, v0.2s, #01220; CHECK-GI-NEXT:    ushll v2.2d, v2.2s, #01221; CHECK-GI-NEXT:    ushll v4.2d, v4.2s, #01222; CHECK-GI-NEXT:    ushll v6.2d, v6.2s, #01223; CHECK-GI-NEXT:    shl v1.2d, v1.2d, #541224; CHECK-GI-NEXT:    shl v3.2d, v3.2d, #541225; CHECK-GI-NEXT:    shl v5.2d, v5.2d, #541226; CHECK-GI-NEXT:    shl v7.2d, v7.2d, #541227; CHECK-GI-NEXT:    shl v16.2d, v0.2d, #541228; CHECK-GI-NEXT:    shl v17.2d, v2.2d, #541229; CHECK-GI-NEXT:    shl v18.2d, v4.2d, #541230; CHECK-GI-NEXT:    shl v19.2d, v6.2d, #541231; CHECK-GI-NEXT:    sshr v0.2d, v1.2d, #541232; CHECK-GI-NEXT:    sshr v1.2d, v3.2d, #541233; CHECK-GI-NEXT:    sshr v2.2d, v5.2d, #541234; CHECK-GI-NEXT:    sshr v3.2d, v7.2d, #541235; CHECK-GI-NEXT:    sshr v4.2d, v16.2d, #541236; CHECK-GI-NEXT:    sshr v5.2d, v17.2d, #541237; CHECK-GI-NEXT:    sshr v6.2d, v18.2d, #541238; CHECK-GI-NEXT:    sshr v7.2d, v19.2d, #541239; CHECK-GI-NEXT:    ret1240entry:1241  %c = sext <16 x i10> %a to <16 x i64>1242  ret <16 x i64> %c1243}1244 1245define <2 x i128> @sext_v2i64_v2i128(<2 x i64> %a) {1246; CHECK-SD-LABEL: sext_v2i64_v2i128:1247; CHECK-SD:       // %bb.0: // %entry1248; CHECK-SD-NEXT:    mov x2, v0.d[1]1249; CHECK-SD-NEXT:    fmov x0, d01250; CHECK-SD-NEXT:    asr x1, x0, #631251; CHECK-SD-NEXT:    asr x3, x2, #631252; CHECK-SD-NEXT:    ret1253;1254; CHECK-GI-LABEL: sext_v2i64_v2i128:1255; CHECK-GI:       // %bb.0: // %entry1256; CHECK-GI-NEXT:    mov d1, v0.d[1]1257; CHECK-GI-NEXT:    fmov x8, d01258; CHECK-GI-NEXT:    fmov x0, d01259; CHECK-GI-NEXT:    asr x1, x8, #631260; CHECK-GI-NEXT:    fmov x9, d11261; CHECK-GI-NEXT:    fmov x2, d11262; CHECK-GI-NEXT:    asr x3, x9, #631263; CHECK-GI-NEXT:    ret1264entry:1265  %c = sext <2 x i64> %a to <2 x i128>1266  ret <2 x i128> %c1267}1268