brintos

brintos / llvm-project-archived public Read only

0
0
Text · 31.7 KiB · 03e6ca1 Raw
965 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 -global-isel-abort=2 2>&1 | FileCheck %s --check-prefixes=CHECK,CHECK-GI4 5; CHECK-GI:       warning: Instruction selection used fallback path for zext_v32i16; CHECK-GI-NEXT:  warning: Instruction selection used fallback path for zext_v64i17 8; Test efficient codegen of vector extends up from legal type to 128 bit9; and 256 bit vector types.10 11;-----12; Vectors of i16.13;-----14 15define <8 x i16> @func1(<8 x i8> %v0) nounwind {16; CHECK-LABEL: func1:17; CHECK:       // %bb.0:18; CHECK-NEXT:    ushll.8h v0, v0, #019; CHECK-NEXT:    ret20  %r = zext <8 x i8> %v0 to <8 x i16>21  ret <8 x i16> %r22}23 24define <8 x i16> @func2(<8 x i8> %v0) nounwind {25; CHECK-LABEL: func2:26; CHECK:       // %bb.0:27; CHECK-NEXT:    sshll.8h v0, v0, #028; CHECK-NEXT:    ret29  %r = sext <8 x i8> %v0 to <8 x i16>30  ret <8 x i16> %r31}32 33define <16 x i16> @func3(<16 x i8> %v0) nounwind {34; CHECK-SD-LABEL: func3:35; CHECK-SD:       // %bb.0:36; CHECK-SD-NEXT:    ushll2.8h v1, v0, #037; CHECK-SD-NEXT:    ushll.8h v0, v0, #038; CHECK-SD-NEXT:    ret39;40; CHECK-GI-LABEL: func3:41; CHECK-GI:       // %bb.0:42; CHECK-GI-NEXT:    ushll.8h v2, v0, #043; CHECK-GI-NEXT:    ushll2.8h v1, v0, #044; CHECK-GI-NEXT:    mov.16b v0, v245; CHECK-GI-NEXT:    ret46  %r = zext <16 x i8> %v0 to <16 x i16>47  ret <16 x i16> %r48}49 50define <16 x i16> @func4(<16 x i8> %v0) nounwind {51; CHECK-SD-LABEL: func4:52; CHECK-SD:       // %bb.0:53; CHECK-SD-NEXT:    sshll2.8h v1, v0, #054; CHECK-SD-NEXT:    sshll.8h v0, v0, #055; CHECK-SD-NEXT:    ret56;57; CHECK-GI-LABEL: func4:58; CHECK-GI:       // %bb.0:59; CHECK-GI-NEXT:    sshll.8h v2, v0, #060; CHECK-GI-NEXT:    sshll2.8h v1, v0, #061; CHECK-GI-NEXT:    mov.16b v0, v262; CHECK-GI-NEXT:    ret63  %r = sext <16 x i8> %v0 to <16 x i16>64  ret <16 x i16> %r65}66 67;-----68; Vectors of i32.69;-----70 71define <4 x i32> @afunc1(<4 x i16> %v0) nounwind {72; CHECK-LABEL: afunc1:73; CHECK:       // %bb.0:74; CHECK-NEXT:    ushll.4s v0, v0, #075; CHECK-NEXT:    ret76  %r = zext <4 x i16> %v0 to <4 x i32>77  ret <4 x i32> %r78}79 80define <4 x i32> @afunc2(<4 x i16> %v0) nounwind {81; CHECK-LABEL: afunc2:82; CHECK:       // %bb.0:83; CHECK-NEXT:    sshll.4s v0, v0, #084; CHECK-NEXT:    ret85  %r = sext <4 x i16> %v0 to <4 x i32>86  ret <4 x i32> %r87}88 89define <8 x i32> @afunc3(<8 x i16> %v0) nounwind {90; CHECK-SD-LABEL: afunc3:91; CHECK-SD:       // %bb.0:92; CHECK-SD-NEXT:    ushll2.4s v1, v0, #093; CHECK-SD-NEXT:    ushll.4s v0, v0, #094; CHECK-SD-NEXT:    ret95;96; CHECK-GI-LABEL: afunc3:97; CHECK-GI:       // %bb.0:98; CHECK-GI-NEXT:    ushll.4s v2, v0, #099; CHECK-GI-NEXT:    ushll2.4s v1, v0, #0100; CHECK-GI-NEXT:    mov.16b v0, v2101; CHECK-GI-NEXT:    ret102  %r = zext <8 x i16> %v0 to <8 x i32>103  ret <8 x i32> %r104}105 106define <8 x i32> @afunc4(<8 x i16> %v0) nounwind {107; CHECK-SD-LABEL: afunc4:108; CHECK-SD:       // %bb.0:109; CHECK-SD-NEXT:    sshll2.4s v1, v0, #0110; CHECK-SD-NEXT:    sshll.4s v0, v0, #0111; CHECK-SD-NEXT:    ret112;113; CHECK-GI-LABEL: afunc4:114; CHECK-GI:       // %bb.0:115; CHECK-GI-NEXT:    sshll.4s v2, v0, #0116; CHECK-GI-NEXT:    sshll2.4s v1, v0, #0117; CHECK-GI-NEXT:    mov.16b v0, v2118; CHECK-GI-NEXT:    ret119  %r = sext <8 x i16> %v0 to <8 x i32>120  ret <8 x i32> %r121}122 123define <8 x i32> @bfunc1(<8 x i8> %v0) nounwind {124; CHECK-SD-LABEL: bfunc1:125; CHECK-SD:       // %bb.0:126; CHECK-SD-NEXT:    ushll.8h v0, v0, #0127; CHECK-SD-NEXT:    ushll2.4s v1, v0, #0128; CHECK-SD-NEXT:    ushll.4s v0, v0, #0129; CHECK-SD-NEXT:    ret130;131; CHECK-GI-LABEL: bfunc1:132; CHECK-GI:       // %bb.0:133; CHECK-GI-NEXT:    ushll.8h v1, v0, #0134; CHECK-GI-NEXT:    ushll.4s v0, v1, #0135; CHECK-GI-NEXT:    ushll2.4s v1, v1, #0136; CHECK-GI-NEXT:    ret137  %r = zext <8 x i8> %v0 to <8 x i32>138  ret <8 x i32> %r139}140 141define <8 x i32> @bfunc2(<8 x i8> %v0) nounwind {142; CHECK-SD-LABEL: bfunc2:143; CHECK-SD:       // %bb.0:144; CHECK-SD-NEXT:    sshll.8h v0, v0, #0145; CHECK-SD-NEXT:    sshll2.4s v1, v0, #0146; CHECK-SD-NEXT:    sshll.4s v0, v0, #0147; CHECK-SD-NEXT:    ret148;149; CHECK-GI-LABEL: bfunc2:150; CHECK-GI:       // %bb.0:151; CHECK-GI-NEXT:    sshll.8h v1, v0, #0152; CHECK-GI-NEXT:    sshll.4s v0, v1, #0153; CHECK-GI-NEXT:    sshll2.4s v1, v1, #0154; CHECK-GI-NEXT:    ret155  %r = sext <8 x i8> %v0 to <8 x i32>156  ret <8 x i32> %r157}158 159;-----160; Vectors of i64.161;-----162 163define <4 x i64> @zfunc1(<4 x i32> %v0) nounwind {164; CHECK-SD-LABEL: zfunc1:165; CHECK-SD:       // %bb.0:166; CHECK-SD-NEXT:    ushll2.2d v1, v0, #0167; CHECK-SD-NEXT:    ushll.2d v0, v0, #0168; CHECK-SD-NEXT:    ret169;170; CHECK-GI-LABEL: zfunc1:171; CHECK-GI:       // %bb.0:172; CHECK-GI-NEXT:    ushll.2d v2, v0, #0173; CHECK-GI-NEXT:    ushll2.2d v1, v0, #0174; CHECK-GI-NEXT:    mov.16b v0, v2175; CHECK-GI-NEXT:    ret176  %r = zext <4 x i32> %v0 to <4 x i64>177  ret <4 x i64> %r178}179 180define <4 x i64> @zfunc2(<4 x i32> %v0) nounwind {181; CHECK-SD-LABEL: zfunc2:182; CHECK-SD:       // %bb.0:183; CHECK-SD-NEXT:    sshll2.2d v1, v0, #0184; CHECK-SD-NEXT:    sshll.2d v0, v0, #0185; CHECK-SD-NEXT:    ret186;187; CHECK-GI-LABEL: zfunc2:188; CHECK-GI:       // %bb.0:189; CHECK-GI-NEXT:    sshll.2d v2, v0, #0190; CHECK-GI-NEXT:    sshll2.2d v1, v0, #0191; CHECK-GI-NEXT:    mov.16b v0, v2192; CHECK-GI-NEXT:    ret193  %r = sext <4 x i32> %v0 to <4 x i64>194  ret <4 x i64> %r195}196 197define <4 x i64> @bfunc3(<4 x i16> %v0) nounwind {198; CHECK-SD-LABEL: bfunc3:199; CHECK-SD:       // %bb.0:200; CHECK-SD-NEXT:    ushll.4s v0, v0, #0201; CHECK-SD-NEXT:    ushll2.2d v1, v0, #0202; CHECK-SD-NEXT:    ushll.2d v0, v0, #0203; CHECK-SD-NEXT:    ret204;205; CHECK-GI-LABEL: bfunc3:206; CHECK-GI:       // %bb.0:207; CHECK-GI-NEXT:    ushll.4s v1, v0, #0208; CHECK-GI-NEXT:    ushll.2d v0, v1, #0209; CHECK-GI-NEXT:    ushll2.2d v1, v1, #0210; CHECK-GI-NEXT:    ret211  %r = zext <4 x i16> %v0 to <4 x i64>212  ret <4 x i64> %r213}214 215define <4 x i64> @cfunc4(<4 x i16> %v0) nounwind {216; CHECK-SD-LABEL: cfunc4:217; CHECK-SD:       // %bb.0:218; CHECK-SD-NEXT:    sshll.4s v0, v0, #0219; CHECK-SD-NEXT:    sshll2.2d v1, v0, #0220; CHECK-SD-NEXT:    sshll.2d v0, v0, #0221; CHECK-SD-NEXT:    ret222;223; CHECK-GI-LABEL: cfunc4:224; CHECK-GI:       // %bb.0:225; CHECK-GI-NEXT:    sshll.4s v1, v0, #0226; CHECK-GI-NEXT:    sshll.2d v0, v1, #0227; CHECK-GI-NEXT:    sshll2.2d v1, v1, #0228; CHECK-GI-NEXT:    ret229  %r = sext <4 x i16> %v0 to <4 x i64>230  ret <4 x i64> %r231}232 233define <4 x i64> @zext_v4i8_to_v4i64(<4 x i8> %v0) nounwind {234; CHECK-SD-LABEL: zext_v4i8_to_v4i64:235; CHECK-SD:       // %bb.0:236; CHECK-SD-NEXT:    bic.4h v0, #255, lsl #8237; CHECK-SD-NEXT:    ushll.4s v0, v0, #0238; CHECK-SD-NEXT:    ushll2.2d v1, v0, #0239; CHECK-SD-NEXT:    ushll.2d v0, v0, #0240; CHECK-SD-NEXT:    ret241;242; CHECK-GI-LABEL: zext_v4i8_to_v4i64:243; CHECK-GI:       // %bb.0:244; CHECK-GI-NEXT:    ushll.4s v0, v0, #0245; CHECK-GI-NEXT:    movi.2d v1, #0x000000000000ff246; CHECK-GI-NEXT:    ushll.2d v2, v0, #0247; CHECK-GI-NEXT:    ushll2.2d v3, v0, #0248; CHECK-GI-NEXT:    and.16b v0, v2, v1249; CHECK-GI-NEXT:    and.16b v1, v3, v1250; CHECK-GI-NEXT:    ret251  %r = zext <4 x i8> %v0 to <4 x i64>252  ret <4 x i64> %r253}254 255define <4 x i64> @sext_v4i8_to_v4i64(<4 x i8> %v0) nounwind {256; CHECK-SD-LABEL: sext_v4i8_to_v4i64:257; CHECK-SD:       // %bb.0:258; CHECK-SD-NEXT:    ushll.4s v0, v0, #0259; CHECK-SD-NEXT:    ushll.2d v1, v0, #0260; CHECK-SD-NEXT:    ushll2.2d v0, v0, #0261; CHECK-SD-NEXT:    shl.2d v0, v0, #56262; CHECK-SD-NEXT:    shl.2d v2, v1, #56263; CHECK-SD-NEXT:    sshr.2d v1, v0, #56264; CHECK-SD-NEXT:    sshr.2d v0, v2, #56265; CHECK-SD-NEXT:    ret266;267; CHECK-GI-LABEL: sext_v4i8_to_v4i64:268; CHECK-GI:       // %bb.0:269; CHECK-GI-NEXT:    ushll.4s v0, v0, #0270; CHECK-GI-NEXT:    ushll.2d v1, v0, #0271; CHECK-GI-NEXT:    ushll2.2d v0, v0, #0272; CHECK-GI-NEXT:    shl.2d v1, v1, #56273; CHECK-GI-NEXT:    shl.2d v2, v0, #56274; CHECK-GI-NEXT:    sshr.2d v0, v1, #56275; CHECK-GI-NEXT:    sshr.2d v1, v2, #56276; CHECK-GI-NEXT:    ret277  %r = sext <4 x i8> %v0 to <4 x i64>278  ret <4 x i64> %r279}280 281define <8 x i64> @zext_v8i8_to_v8i64(<8 x i8> %v0) nounwind {282; CHECK-SD-LABEL: zext_v8i8_to_v8i64:283; CHECK-SD:       // %bb.0:284; CHECK-SD-NEXT:    ushll.8h v0, v0, #0285; CHECK-SD-NEXT:    ushll.4s v1, v0, #0286; CHECK-SD-NEXT:    ushll2.4s v2, v0, #0287; CHECK-SD-NEXT:    ushll.2d v0, v1, #0288; CHECK-SD-NEXT:    ushll2.2d v3, v2, #0289; CHECK-SD-NEXT:    ushll2.2d v1, v1, #0290; CHECK-SD-NEXT:    ushll.2d v2, v2, #0291; CHECK-SD-NEXT:    ret292;293; CHECK-GI-LABEL: zext_v8i8_to_v8i64:294; CHECK-GI:       // %bb.0:295; CHECK-GI-NEXT:    ushll.8h v0, v0, #0296; CHECK-GI-NEXT:    ushll.4s v1, v0, #0297; CHECK-GI-NEXT:    ushll2.4s v3, v0, #0298; CHECK-GI-NEXT:    ushll.2d v0, v1, #0299; CHECK-GI-NEXT:    ushll2.2d v1, v1, #0300; CHECK-GI-NEXT:    ushll.2d v2, v3, #0301; CHECK-GI-NEXT:    ushll2.2d v3, v3, #0302; CHECK-GI-NEXT:    ret303  %r = zext <8 x i8> %v0 to <8 x i64>304  ret <8 x i64> %r305}306 307define <8 x i64> @sext_v8i8_to_v8i64(<8 x i8> %v0) nounwind {308; CHECK-SD-LABEL: sext_v8i8_to_v8i64:309; CHECK-SD:       // %bb.0:310; CHECK-SD-NEXT:    sshll.8h v0, v0, #0311; CHECK-SD-NEXT:    sshll.4s v1, v0, #0312; CHECK-SD-NEXT:    sshll2.4s v2, v0, #0313; CHECK-SD-NEXT:    sshll.2d v0, v1, #0314; CHECK-SD-NEXT:    sshll2.2d v3, v2, #0315; CHECK-SD-NEXT:    sshll2.2d v1, v1, #0316; CHECK-SD-NEXT:    sshll.2d v2, v2, #0317; CHECK-SD-NEXT:    ret318;319; CHECK-GI-LABEL: sext_v8i8_to_v8i64:320; CHECK-GI:       // %bb.0:321; CHECK-GI-NEXT:    sshll.8h v0, v0, #0322; CHECK-GI-NEXT:    sshll.4s v1, v0, #0323; CHECK-GI-NEXT:    sshll2.4s v3, v0, #0324; CHECK-GI-NEXT:    sshll.2d v0, v1, #0325; CHECK-GI-NEXT:    sshll2.2d v1, v1, #0326; CHECK-GI-NEXT:    sshll.2d v2, v3, #0327; CHECK-GI-NEXT:    sshll2.2d v3, v3, #0328; CHECK-GI-NEXT:    ret329  %r = sext <8 x i8> %v0 to <8 x i64>330  ret <8 x i64> %r331}332 333; Extends of vectors of i1.334 335define <32 x i8> @zext_v32i1(<32 x i1> %arg) {336; CHECK-LABEL: zext_v32i1:337; CHECK:       // %bb.0:338; CHECK-NEXT:    ldr w8, [sp, #64]339; CHECK-NEXT:    fmov s0, w0340; CHECK-NEXT:    ldr w9, [sp, #72]341; CHECK-NEXT:    movi.16b v2, #1342; CHECK-NEXT:    fmov s1, w8343; CHECK-NEXT:    ldr w8, [sp, #80]344; CHECK-NEXT:    mov.b v0[1], w1345; CHECK-NEXT:    mov.b v1[1], w9346; CHECK-NEXT:    ldr w9, [sp]347; CHECK-NEXT:    mov.b v0[2], w2348; CHECK-NEXT:    mov.b v1[2], w8349; CHECK-NEXT:    ldr w8, [sp, #88]350; CHECK-NEXT:    mov.b v0[3], w3351; CHECK-NEXT:    mov.b v1[3], w8352; CHECK-NEXT:    ldr w8, [sp, #96]353; CHECK-NEXT:    mov.b v0[4], w4354; CHECK-NEXT:    mov.b v1[4], w8355; CHECK-NEXT:    ldr w8, [sp, #104]356; CHECK-NEXT:    mov.b v0[5], w5357; CHECK-NEXT:    mov.b v1[5], w8358; CHECK-NEXT:    ldr w8, [sp, #112]359; CHECK-NEXT:    mov.b v0[6], w6360; CHECK-NEXT:    mov.b v1[6], w8361; CHECK-NEXT:    ldr w8, [sp, #120]362; CHECK-NEXT:    mov.b v0[7], w7363; CHECK-NEXT:    mov.b v1[7], w8364; CHECK-NEXT:    ldr w8, [sp, #128]365; CHECK-NEXT:    mov.b v0[8], w9366; CHECK-NEXT:    ldr w9, [sp, #8]367; CHECK-NEXT:    mov.b v1[8], w8368; CHECK-NEXT:    ldr w8, [sp, #136]369; CHECK-NEXT:    mov.b v0[9], w9370; CHECK-NEXT:    ldr w9, [sp, #16]371; CHECK-NEXT:    mov.b v1[9], w8372; CHECK-NEXT:    ldr w8, [sp, #144]373; CHECK-NEXT:    mov.b v0[10], w9374; CHECK-NEXT:    ldr w9, [sp, #24]375; CHECK-NEXT:    mov.b v1[10], w8376; CHECK-NEXT:    ldr w8, [sp, #152]377; CHECK-NEXT:    mov.b v0[11], w9378; CHECK-NEXT:    ldr w9, [sp, #32]379; CHECK-NEXT:    mov.b v1[11], w8380; CHECK-NEXT:    ldr w8, [sp, #160]381; CHECK-NEXT:    mov.b v0[12], w9382; CHECK-NEXT:    ldr w9, [sp, #40]383; CHECK-NEXT:    mov.b v1[12], w8384; CHECK-NEXT:    ldr w8, [sp, #168]385; CHECK-NEXT:    mov.b v0[13], w9386; CHECK-NEXT:    ldr w9, [sp, #48]387; CHECK-NEXT:    mov.b v1[13], w8388; CHECK-NEXT:    ldr w8, [sp, #176]389; CHECK-NEXT:    mov.b v0[14], w9390; CHECK-NEXT:    ldr w9, [sp, #56]391; CHECK-NEXT:    mov.b v1[14], w8392; CHECK-NEXT:    ldr w8, [sp, #184]393; CHECK-NEXT:    mov.b v0[15], w9394; CHECK-NEXT:    mov.b v1[15], w8395; CHECK-NEXT:    and.16b v0, v0, v2396; CHECK-NEXT:    and.16b v1, v1, v2397; CHECK-NEXT:    ret398  %res = zext <32 x i1> %arg to <32 x i8>399  ret <32 x i8> %res400}401 402define <32 x i8> @sext_v32i1(<32 x i1> %arg) {403; CHECK-SD-LABEL: sext_v32i1:404; CHECK-SD:       // %bb.0:405; CHECK-SD-NEXT:    ldr w8, [sp, #64]406; CHECK-SD-NEXT:    fmov s1, w0407; CHECK-SD-NEXT:    ldr w9, [sp, #72]408; CHECK-SD-NEXT:    fmov s0, w8409; CHECK-SD-NEXT:    ldr w8, [sp, #80]410; CHECK-SD-NEXT:    mov.b v1[1], w1411; CHECK-SD-NEXT:    mov.b v0[1], w9412; CHECK-SD-NEXT:    ldr w9, [sp]413; CHECK-SD-NEXT:    mov.b v1[2], w2414; CHECK-SD-NEXT:    mov.b v0[2], w8415; CHECK-SD-NEXT:    ldr w8, [sp, #88]416; CHECK-SD-NEXT:    mov.b v1[3], w3417; CHECK-SD-NEXT:    mov.b v0[3], w8418; CHECK-SD-NEXT:    ldr w8, [sp, #96]419; CHECK-SD-NEXT:    mov.b v1[4], w4420; CHECK-SD-NEXT:    mov.b v0[4], w8421; CHECK-SD-NEXT:    ldr w8, [sp, #104]422; CHECK-SD-NEXT:    mov.b v1[5], w5423; CHECK-SD-NEXT:    mov.b v0[5], w8424; CHECK-SD-NEXT:    ldr w8, [sp, #112]425; CHECK-SD-NEXT:    mov.b v1[6], w6426; CHECK-SD-NEXT:    mov.b v0[6], w8427; CHECK-SD-NEXT:    ldr w8, [sp, #120]428; CHECK-SD-NEXT:    mov.b v1[7], w7429; CHECK-SD-NEXT:    mov.b v0[7], w8430; CHECK-SD-NEXT:    ldr w8, [sp, #128]431; CHECK-SD-NEXT:    mov.b v1[8], w9432; CHECK-SD-NEXT:    ldr w9, [sp, #8]433; CHECK-SD-NEXT:    mov.b v0[8], w8434; CHECK-SD-NEXT:    ldr w8, [sp, #136]435; CHECK-SD-NEXT:    mov.b v1[9], w9436; CHECK-SD-NEXT:    ldr w9, [sp, #16]437; CHECK-SD-NEXT:    mov.b v0[9], w8438; CHECK-SD-NEXT:    ldr w8, [sp, #144]439; CHECK-SD-NEXT:    mov.b v1[10], w9440; CHECK-SD-NEXT:    ldr w9, [sp, #24]441; CHECK-SD-NEXT:    mov.b v0[10], w8442; CHECK-SD-NEXT:    ldr w8, [sp, #152]443; CHECK-SD-NEXT:    mov.b v1[11], w9444; CHECK-SD-NEXT:    ldr w9, [sp, #32]445; CHECK-SD-NEXT:    mov.b v0[11], w8446; CHECK-SD-NEXT:    ldr w8, [sp, #160]447; CHECK-SD-NEXT:    mov.b v1[12], w9448; CHECK-SD-NEXT:    ldr w9, [sp, #40]449; CHECK-SD-NEXT:    mov.b v0[12], w8450; CHECK-SD-NEXT:    ldr w8, [sp, #168]451; CHECK-SD-NEXT:    mov.b v1[13], w9452; CHECK-SD-NEXT:    ldr w9, [sp, #48]453; CHECK-SD-NEXT:    mov.b v0[13], w8454; CHECK-SD-NEXT:    ldr w8, [sp, #176]455; CHECK-SD-NEXT:    mov.b v1[14], w9456; CHECK-SD-NEXT:    ldr w9, [sp, #56]457; CHECK-SD-NEXT:    mov.b v0[14], w8458; CHECK-SD-NEXT:    ldr w8, [sp, #184]459; CHECK-SD-NEXT:    mov.b v1[15], w9460; CHECK-SD-NEXT:    mov.b v0[15], w8461; CHECK-SD-NEXT:    shl.16b v1, v1, #7462; CHECK-SD-NEXT:    shl.16b v2, v0, #7463; CHECK-SD-NEXT:    cmlt.16b v0, v1, #0464; CHECK-SD-NEXT:    cmlt.16b v1, v2, #0465; CHECK-SD-NEXT:    ret466;467; CHECK-GI-LABEL: sext_v32i1:468; CHECK-GI:       // %bb.0:469; CHECK-GI-NEXT:    ldr w8, [sp, #64]470; CHECK-GI-NEXT:    fmov s0, w0471; CHECK-GI-NEXT:    ldr w9, [sp, #72]472; CHECK-GI-NEXT:    fmov s1, w8473; CHECK-GI-NEXT:    ldr w8, [sp, #80]474; CHECK-GI-NEXT:    mov.b v0[1], w1475; CHECK-GI-NEXT:    mov.b v1[1], w9476; CHECK-GI-NEXT:    ldr w9, [sp, #128]477; CHECK-GI-NEXT:    mov.b v0[2], w2478; CHECK-GI-NEXT:    mov.b v1[2], w8479; CHECK-GI-NEXT:    ldr w8, [sp, #88]480; CHECK-GI-NEXT:    mov.b v0[3], w3481; CHECK-GI-NEXT:    mov.b v1[3], w8482; CHECK-GI-NEXT:    ldr w8, [sp, #96]483; CHECK-GI-NEXT:    mov.b v0[4], w4484; CHECK-GI-NEXT:    mov.b v1[4], w8485; CHECK-GI-NEXT:    ldr w8, [sp, #104]486; CHECK-GI-NEXT:    mov.b v0[5], w5487; CHECK-GI-NEXT:    mov.b v1[5], w8488; CHECK-GI-NEXT:    ldr w8, [sp, #112]489; CHECK-GI-NEXT:    mov.b v0[6], w6490; CHECK-GI-NEXT:    mov.b v1[6], w8491; CHECK-GI-NEXT:    ldr w8, [sp, #120]492; CHECK-GI-NEXT:    mov.b v0[7], w7493; CHECK-GI-NEXT:    mov.b v1[7], w8494; CHECK-GI-NEXT:    ldr w8, [sp]495; CHECK-GI-NEXT:    mov.b v0[8], w8496; CHECK-GI-NEXT:    ldr w8, [sp, #8]497; CHECK-GI-NEXT:    mov.b v1[8], w9498; CHECK-GI-NEXT:    ldr w9, [sp, #136]499; CHECK-GI-NEXT:    mov.b v0[9], w8500; CHECK-GI-NEXT:    ldr w8, [sp, #16]501; CHECK-GI-NEXT:    mov.b v1[9], w9502; CHECK-GI-NEXT:    ldr w9, [sp, #144]503; CHECK-GI-NEXT:    mov.b v0[10], w8504; CHECK-GI-NEXT:    ldr w8, [sp, #24]505; CHECK-GI-NEXT:    mov.b v1[10], w9506; CHECK-GI-NEXT:    ldr w9, [sp, #152]507; CHECK-GI-NEXT:    mov.b v0[11], w8508; CHECK-GI-NEXT:    ldr w8, [sp, #32]509; CHECK-GI-NEXT:    mov.b v1[11], w9510; CHECK-GI-NEXT:    ldr w9, [sp, #160]511; CHECK-GI-NEXT:    mov.b v0[12], w8512; CHECK-GI-NEXT:    ldr w8, [sp, #40]513; CHECK-GI-NEXT:    mov.b v1[12], w9514; CHECK-GI-NEXT:    ldr w9, [sp, #168]515; CHECK-GI-NEXT:    mov.b v0[13], w8516; CHECK-GI-NEXT:    ldr w8, [sp, #48]517; CHECK-GI-NEXT:    mov.b v1[13], w9518; CHECK-GI-NEXT:    ldr w9, [sp, #176]519; CHECK-GI-NEXT:    mov.b v0[14], w8520; CHECK-GI-NEXT:    ldr w8, [sp, #56]521; CHECK-GI-NEXT:    mov.b v1[14], w9522; CHECK-GI-NEXT:    ldr w9, [sp, #184]523; CHECK-GI-NEXT:    mov.b v0[15], w8524; CHECK-GI-NEXT:    mov.b v1[15], w9525; CHECK-GI-NEXT:    shl.16b v0, v0, #7526; CHECK-GI-NEXT:    shl.16b v1, v1, #7527; CHECK-GI-NEXT:    cmlt.16b v0, v0, #0528; CHECK-GI-NEXT:    cmlt.16b v1, v1, #0529; CHECK-GI-NEXT:    ret530  %res = sext <32 x i1> %arg to <32 x i8>531  ret <32 x i8> %res532}533 534define <64 x i8> @zext_v64i1(<64 x i1> %arg) {535; CHECK-LABEL: zext_v64i1:536; CHECK:       // %bb.0:537; CHECK-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill538; CHECK-NEXT:    .cfi_def_cfa_offset 16539; CHECK-NEXT:    .cfi_offset w29, -16540; CHECK-NEXT:    ldr w8, [sp, #336]541; CHECK-NEXT:    ldr w9, [sp, #208]542; CHECK-NEXT:    fmov s0, w0543; CHECK-NEXT:    ldr w10, [sp, #80]544; CHECK-NEXT:    ldr w11, [sp, #216]545; CHECK-NEXT:    movi.16b v4, #1546; CHECK-NEXT:    fmov s3, w8547; CHECK-NEXT:    fmov s2, w9548; CHECK-NEXT:    ldr w8, [sp, #344]549; CHECK-NEXT:    fmov s1, w10550; CHECK-NEXT:    ldr w12, [sp, #88]551; CHECK-NEXT:    mov.b v0[1], w1552; CHECK-NEXT:    ldr w9, [sp, #224]553; CHECK-NEXT:    ldr w10, [sp, #96]554; CHECK-NEXT:    mov.b v3[1], w8555; CHECK-NEXT:    mov.b v2[1], w11556; CHECK-NEXT:    ldr w8, [sp, #352]557; CHECK-NEXT:    mov.b v1[1], w12558; CHECK-NEXT:    ldr w11, [sp, #144]559; CHECK-NEXT:    mov.b v0[2], w2560; CHECK-NEXT:    mov.b v3[2], w8561; CHECK-NEXT:    mov.b v2[2], w9562; CHECK-NEXT:    ldr w8, [sp, #360]563; CHECK-NEXT:    mov.b v1[2], w10564; CHECK-NEXT:    ldr w9, [sp, #232]565; CHECK-NEXT:    ldr w10, [sp, #104]566; CHECK-NEXT:    mov.b v0[3], w3567; CHECK-NEXT:    mov.b v3[3], w8568; CHECK-NEXT:    mov.b v2[3], w9569; CHECK-NEXT:    ldr w8, [sp, #368]570; CHECK-NEXT:    mov.b v1[3], w10571; CHECK-NEXT:    ldr w9, [sp, #240]572; CHECK-NEXT:    ldr w10, [sp, #112]573; CHECK-NEXT:    mov.b v0[4], w4574; CHECK-NEXT:    mov.b v3[4], w8575; CHECK-NEXT:    mov.b v2[4], w9576; CHECK-NEXT:    ldr w8, [sp, #376]577; CHECK-NEXT:    mov.b v1[4], w10578; CHECK-NEXT:    ldr w9, [sp, #248]579; CHECK-NEXT:    ldr w10, [sp, #120]580; CHECK-NEXT:    mov.b v0[5], w5581; CHECK-NEXT:    mov.b v3[5], w8582; CHECK-NEXT:    mov.b v2[5], w9583; CHECK-NEXT:    ldr w8, [sp, #384]584; CHECK-NEXT:    mov.b v1[5], w10585; CHECK-NEXT:    ldr w9, [sp, #256]586; CHECK-NEXT:    ldr w10, [sp, #128]587; CHECK-NEXT:    mov.b v0[6], w6588; CHECK-NEXT:    mov.b v3[6], w8589; CHECK-NEXT:    mov.b v2[6], w9590; CHECK-NEXT:    ldr w8, [sp, #392]591; CHECK-NEXT:    mov.b v1[6], w10592; CHECK-NEXT:    ldr w9, [sp, #264]593; CHECK-NEXT:    ldr w10, [sp, #136]594; CHECK-NEXT:    mov.b v0[7], w7595; CHECK-NEXT:    mov.b v3[7], w8596; CHECK-NEXT:    mov.b v2[7], w9597; CHECK-NEXT:    ldr w8, [sp, #16]598; CHECK-NEXT:    mov.b v1[7], w10599; CHECK-NEXT:    ldr w9, [sp, #400]600; CHECK-NEXT:    ldr w10, [sp, #272]601; CHECK-NEXT:    mov.b v0[8], w8602; CHECK-NEXT:    ldr w8, [sp, #24]603; CHECK-NEXT:    mov.b v3[8], w9604; CHECK-NEXT:    mov.b v2[8], w10605; CHECK-NEXT:    ldr w9, [sp, #408]606; CHECK-NEXT:    mov.b v1[8], w11607; CHECK-NEXT:    ldr w10, [sp, #280]608; CHECK-NEXT:    ldr w11, [sp, #152]609; CHECK-NEXT:    mov.b v0[9], w8610; CHECK-NEXT:    ldr w8, [sp, #32]611; CHECK-NEXT:    mov.b v3[9], w9612; CHECK-NEXT:    mov.b v2[9], w10613; CHECK-NEXT:    ldr w9, [sp, #416]614; CHECK-NEXT:    mov.b v1[9], w11615; CHECK-NEXT:    ldr w10, [sp, #288]616; CHECK-NEXT:    ldr w11, [sp, #160]617; CHECK-NEXT:    mov.b v0[10], w8618; CHECK-NEXT:    ldr w8, [sp, #40]619; CHECK-NEXT:    mov.b v3[10], w9620; CHECK-NEXT:    mov.b v2[10], w10621; CHECK-NEXT:    ldr w9, [sp, #424]622; CHECK-NEXT:    mov.b v1[10], w11623; CHECK-NEXT:    ldr w10, [sp, #296]624; CHECK-NEXT:    ldr w11, [sp, #168]625; CHECK-NEXT:    mov.b v0[11], w8626; CHECK-NEXT:    ldr w8, [sp, #48]627; CHECK-NEXT:    mov.b v3[11], w9628; CHECK-NEXT:    mov.b v2[11], w10629; CHECK-NEXT:    ldr w9, [sp, #432]630; CHECK-NEXT:    mov.b v1[11], w11631; CHECK-NEXT:    ldr w10, [sp, #304]632; CHECK-NEXT:    ldr w11, [sp, #176]633; CHECK-NEXT:    mov.b v0[12], w8634; CHECK-NEXT:    ldr w8, [sp, #56]635; CHECK-NEXT:    mov.b v3[12], w9636; CHECK-NEXT:    mov.b v2[12], w10637; CHECK-NEXT:    ldr w9, [sp, #440]638; CHECK-NEXT:    mov.b v1[12], w11639; CHECK-NEXT:    ldr w10, [sp, #312]640; CHECK-NEXT:    ldr w11, [sp, #184]641; CHECK-NEXT:    mov.b v0[13], w8642; CHECK-NEXT:    ldr w8, [sp, #64]643; CHECK-NEXT:    mov.b v3[13], w9644; CHECK-NEXT:    mov.b v2[13], w10645; CHECK-NEXT:    ldr w9, [sp, #448]646; CHECK-NEXT:    mov.b v1[13], w11647; CHECK-NEXT:    ldr w10, [sp, #320]648; CHECK-NEXT:    ldr w11, [sp, #192]649; CHECK-NEXT:    mov.b v0[14], w8650; CHECK-NEXT:    ldr w8, [sp, #72]651; CHECK-NEXT:    mov.b v3[14], w9652; CHECK-NEXT:    mov.b v2[14], w10653; CHECK-NEXT:    ldr w9, [sp, #456]654; CHECK-NEXT:    mov.b v1[14], w11655; CHECK-NEXT:    ldr w10, [sp, #328]656; CHECK-NEXT:    ldr w11, [sp, #200]657; CHECK-NEXT:    mov.b v0[15], w8658; CHECK-NEXT:    mov.b v3[15], w9659; CHECK-NEXT:    mov.b v2[15], w10660; CHECK-NEXT:    mov.b v1[15], w11661; CHECK-NEXT:    and.16b v0, v0, v4662; CHECK-NEXT:    and.16b v2, v2, v4663; CHECK-NEXT:    and.16b v3, v3, v4664; CHECK-NEXT:    and.16b v1, v1, v4665; CHECK-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload666; CHECK-NEXT:    ret667  %res = zext <64 x i1> %arg to <64 x i8>668  ret <64 x i8> %res669}670 671define <64 x i8> @sext_v64i1(<64 x i1> %arg) {672; CHECK-SD-LABEL: sext_v64i1:673; CHECK-SD:       // %bb.0:674; CHECK-SD-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill675; CHECK-SD-NEXT:    .cfi_def_cfa_offset 16676; CHECK-SD-NEXT:    .cfi_offset w29, -16677; CHECK-SD-NEXT:    ldr w8, [sp, #336]678; CHECK-SD-NEXT:    ldr w9, [sp, #208]679; CHECK-SD-NEXT:    fmov s2, w0680; CHECK-SD-NEXT:    ldr w10, [sp, #80]681; CHECK-SD-NEXT:    ldr w11, [sp, #216]682; CHECK-SD-NEXT:    ldr w12, [sp, #88]683; CHECK-SD-NEXT:    fmov s0, w8684; CHECK-SD-NEXT:    fmov s1, w9685; CHECK-SD-NEXT:    ldr w8, [sp, #344]686; CHECK-SD-NEXT:    fmov s3, w10687; CHECK-SD-NEXT:    mov.b v2[1], w1688; CHECK-SD-NEXT:    ldr w9, [sp, #224]689; CHECK-SD-NEXT:    ldr w10, [sp, #96]690; CHECK-SD-NEXT:    mov.b v0[1], w8691; CHECK-SD-NEXT:    mov.b v1[1], w11692; CHECK-SD-NEXT:    ldr w8, [sp, #352]693; CHECK-SD-NEXT:    mov.b v3[1], w12694; CHECK-SD-NEXT:    ldr w11, [sp, #144]695; CHECK-SD-NEXT:    mov.b v2[2], w2696; CHECK-SD-NEXT:    mov.b v0[2], w8697; CHECK-SD-NEXT:    mov.b v1[2], w9698; CHECK-SD-NEXT:    ldr w8, [sp, #360]699; CHECK-SD-NEXT:    mov.b v3[2], w10700; CHECK-SD-NEXT:    ldr w9, [sp, #232]701; CHECK-SD-NEXT:    ldr w10, [sp, #104]702; CHECK-SD-NEXT:    mov.b v2[3], w3703; CHECK-SD-NEXT:    mov.b v0[3], w8704; CHECK-SD-NEXT:    mov.b v1[3], w9705; CHECK-SD-NEXT:    ldr w8, [sp, #368]706; CHECK-SD-NEXT:    mov.b v3[3], w10707; CHECK-SD-NEXT:    ldr w9, [sp, #240]708; CHECK-SD-NEXT:    ldr w10, [sp, #112]709; CHECK-SD-NEXT:    mov.b v2[4], w4710; CHECK-SD-NEXT:    mov.b v0[4], w8711; CHECK-SD-NEXT:    mov.b v1[4], w9712; CHECK-SD-NEXT:    ldr w8, [sp, #376]713; CHECK-SD-NEXT:    mov.b v3[4], w10714; CHECK-SD-NEXT:    ldr w9, [sp, #248]715; CHECK-SD-NEXT:    ldr w10, [sp, #120]716; CHECK-SD-NEXT:    mov.b v2[5], w5717; CHECK-SD-NEXT:    mov.b v0[5], w8718; CHECK-SD-NEXT:    mov.b v1[5], w9719; CHECK-SD-NEXT:    ldr w8, [sp, #384]720; CHECK-SD-NEXT:    mov.b v3[5], w10721; CHECK-SD-NEXT:    ldr w9, [sp, #256]722; CHECK-SD-NEXT:    ldr w10, [sp, #128]723; CHECK-SD-NEXT:    mov.b v2[6], w6724; CHECK-SD-NEXT:    mov.b v0[6], w8725; CHECK-SD-NEXT:    mov.b v1[6], w9726; CHECK-SD-NEXT:    ldr w8, [sp, #392]727; CHECK-SD-NEXT:    mov.b v3[6], w10728; CHECK-SD-NEXT:    ldr w9, [sp, #264]729; CHECK-SD-NEXT:    ldr w10, [sp, #136]730; CHECK-SD-NEXT:    mov.b v2[7], w7731; CHECK-SD-NEXT:    mov.b v0[7], w8732; CHECK-SD-NEXT:    mov.b v1[7], w9733; CHECK-SD-NEXT:    ldr w8, [sp, #16]734; CHECK-SD-NEXT:    mov.b v3[7], w10735; CHECK-SD-NEXT:    ldr w9, [sp, #400]736; CHECK-SD-NEXT:    ldr w10, [sp, #272]737; CHECK-SD-NEXT:    mov.b v2[8], w8738; CHECK-SD-NEXT:    ldr w8, [sp, #24]739; CHECK-SD-NEXT:    mov.b v0[8], w9740; CHECK-SD-NEXT:    mov.b v1[8], w10741; CHECK-SD-NEXT:    ldr w9, [sp, #408]742; CHECK-SD-NEXT:    mov.b v3[8], w11743; CHECK-SD-NEXT:    ldr w10, [sp, #280]744; CHECK-SD-NEXT:    ldr w11, [sp, #152]745; CHECK-SD-NEXT:    mov.b v2[9], w8746; CHECK-SD-NEXT:    ldr w8, [sp, #32]747; CHECK-SD-NEXT:    mov.b v0[9], w9748; CHECK-SD-NEXT:    mov.b v1[9], w10749; CHECK-SD-NEXT:    ldr w9, [sp, #416]750; CHECK-SD-NEXT:    mov.b v3[9], w11751; CHECK-SD-NEXT:    ldr w10, [sp, #288]752; CHECK-SD-NEXT:    ldr w11, [sp, #160]753; CHECK-SD-NEXT:    mov.b v2[10], w8754; CHECK-SD-NEXT:    ldr w8, [sp, #40]755; CHECK-SD-NEXT:    mov.b v0[10], w9756; CHECK-SD-NEXT:    mov.b v1[10], w10757; CHECK-SD-NEXT:    ldr w9, [sp, #424]758; CHECK-SD-NEXT:    mov.b v3[10], w11759; CHECK-SD-NEXT:    ldr w10, [sp, #296]760; CHECK-SD-NEXT:    ldr w11, [sp, #168]761; CHECK-SD-NEXT:    mov.b v2[11], w8762; CHECK-SD-NEXT:    ldr w8, [sp, #48]763; CHECK-SD-NEXT:    mov.b v0[11], w9764; CHECK-SD-NEXT:    mov.b v1[11], w10765; CHECK-SD-NEXT:    ldr w9, [sp, #432]766; CHECK-SD-NEXT:    mov.b v3[11], w11767; CHECK-SD-NEXT:    ldr w10, [sp, #304]768; CHECK-SD-NEXT:    ldr w11, [sp, #176]769; CHECK-SD-NEXT:    mov.b v2[12], w8770; CHECK-SD-NEXT:    ldr w8, [sp, #56]771; CHECK-SD-NEXT:    mov.b v0[12], w9772; CHECK-SD-NEXT:    mov.b v1[12], w10773; CHECK-SD-NEXT:    ldr w9, [sp, #440]774; CHECK-SD-NEXT:    mov.b v3[12], w11775; CHECK-SD-NEXT:    ldr w10, [sp, #312]776; CHECK-SD-NEXT:    ldr w11, [sp, #184]777; CHECK-SD-NEXT:    mov.b v2[13], w8778; CHECK-SD-NEXT:    ldr w8, [sp, #64]779; CHECK-SD-NEXT:    mov.b v0[13], w9780; CHECK-SD-NEXT:    mov.b v1[13], w10781; CHECK-SD-NEXT:    ldr w9, [sp, #448]782; CHECK-SD-NEXT:    mov.b v3[13], w11783; CHECK-SD-NEXT:    ldr w10, [sp, #320]784; CHECK-SD-NEXT:    ldr w11, [sp, #192]785; CHECK-SD-NEXT:    mov.b v2[14], w8786; CHECK-SD-NEXT:    ldr w8, [sp, #72]787; CHECK-SD-NEXT:    mov.b v0[14], w9788; CHECK-SD-NEXT:    mov.b v1[14], w10789; CHECK-SD-NEXT:    ldr w9, [sp, #456]790; CHECK-SD-NEXT:    mov.b v3[14], w11791; CHECK-SD-NEXT:    ldr w10, [sp, #328]792; CHECK-SD-NEXT:    ldr w11, [sp, #200]793; CHECK-SD-NEXT:    mov.b v2[15], w8794; CHECK-SD-NEXT:    mov.b v0[15], w9795; CHECK-SD-NEXT:    mov.b v1[15], w10796; CHECK-SD-NEXT:    mov.b v3[15], w11797; CHECK-SD-NEXT:    shl.16b v2, v2, #7798; CHECK-SD-NEXT:    shl.16b v4, v1, #7799; CHECK-SD-NEXT:    shl.16b v5, v0, #7800; CHECK-SD-NEXT:    shl.16b v3, v3, #7801; CHECK-SD-NEXT:    cmlt.16b v0, v2, #0802; CHECK-SD-NEXT:    cmlt.16b v2, v4, #0803; CHECK-SD-NEXT:    cmlt.16b v1, v3, #0804; CHECK-SD-NEXT:    cmlt.16b v3, v5, #0805; CHECK-SD-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload806; CHECK-SD-NEXT:    ret807;808; CHECK-GI-LABEL: sext_v64i1:809; CHECK-GI:       // %bb.0:810; CHECK-GI-NEXT:    str x29, [sp, #-16]! // 8-byte Folded Spill811; CHECK-GI-NEXT:    .cfi_def_cfa_offset 16812; CHECK-GI-NEXT:    .cfi_offset w29, -16813; CHECK-GI-NEXT:    ldr w13, [sp, #80]814; CHECK-GI-NEXT:    ldr w11, [sp, #208]815; CHECK-GI-NEXT:    fmov s0, w0816; CHECK-GI-NEXT:    ldr w9, [sp, #336]817; CHECK-GI-NEXT:    ldr w8, [sp, #88]818; CHECK-GI-NEXT:    ldr w10, [sp, #216]819; CHECK-GI-NEXT:    fmov s1, w13820; CHECK-GI-NEXT:    fmov s2, w11821; CHECK-GI-NEXT:    ldr w12, [sp, #344]822; CHECK-GI-NEXT:    fmov s3, w9823; CHECK-GI-NEXT:    mov.b v0[1], w1824; CHECK-GI-NEXT:    ldr w9, [sp, #224]825; CHECK-GI-NEXT:    ldr w11, [sp, #400]826; CHECK-GI-NEXT:    mov.b v1[1], w8827; CHECK-GI-NEXT:    mov.b v2[1], w10828; CHECK-GI-NEXT:    ldr w8, [sp, #96]829; CHECK-GI-NEXT:    mov.b v3[1], w12830; CHECK-GI-NEXT:    ldr w10, [sp, #352]831; CHECK-GI-NEXT:    mov.b v0[2], w2832; CHECK-GI-NEXT:    mov.b v1[2], w8833; CHECK-GI-NEXT:    mov.b v2[2], w9834; CHECK-GI-NEXT:    ldr w8, [sp, #104]835; CHECK-GI-NEXT:    mov.b v3[2], w10836; CHECK-GI-NEXT:    ldr w9, [sp, #232]837; CHECK-GI-NEXT:    ldr w10, [sp, #360]838; CHECK-GI-NEXT:    mov.b v0[3], w3839; CHECK-GI-NEXT:    mov.b v1[3], w8840; CHECK-GI-NEXT:    mov.b v2[3], w9841; CHECK-GI-NEXT:    ldr w8, [sp, #112]842; CHECK-GI-NEXT:    mov.b v3[3], w10843; CHECK-GI-NEXT:    ldr w9, [sp, #240]844; CHECK-GI-NEXT:    ldr w10, [sp, #368]845; CHECK-GI-NEXT:    mov.b v0[4], w4846; CHECK-GI-NEXT:    mov.b v1[4], w8847; CHECK-GI-NEXT:    mov.b v2[4], w9848; CHECK-GI-NEXT:    ldr w8, [sp, #120]849; CHECK-GI-NEXT:    mov.b v3[4], w10850; CHECK-GI-NEXT:    ldr w9, [sp, #248]851; CHECK-GI-NEXT:    ldr w10, [sp, #376]852; CHECK-GI-NEXT:    mov.b v0[5], w5853; CHECK-GI-NEXT:    mov.b v1[5], w8854; CHECK-GI-NEXT:    mov.b v2[5], w9855; CHECK-GI-NEXT:    ldr w8, [sp, #128]856; CHECK-GI-NEXT:    mov.b v3[5], w10857; CHECK-GI-NEXT:    ldr w9, [sp, #256]858; CHECK-GI-NEXT:    ldr w10, [sp, #384]859; CHECK-GI-NEXT:    mov.b v0[6], w6860; CHECK-GI-NEXT:    mov.b v1[6], w8861; CHECK-GI-NEXT:    mov.b v2[6], w9862; CHECK-GI-NEXT:    ldr w8, [sp, #136]863; CHECK-GI-NEXT:    mov.b v3[6], w10864; CHECK-GI-NEXT:    ldr w9, [sp, #264]865; CHECK-GI-NEXT:    ldr w10, [sp, #392]866; CHECK-GI-NEXT:    mov.b v0[7], w7867; CHECK-GI-NEXT:    mov.b v1[7], w8868; CHECK-GI-NEXT:    mov.b v2[7], w9869; CHECK-GI-NEXT:    ldr w8, [sp, #16]870; CHECK-GI-NEXT:    mov.b v3[7], w10871; CHECK-GI-NEXT:    ldr w9, [sp, #144]872; CHECK-GI-NEXT:    ldr w10, [sp, #272]873; CHECK-GI-NEXT:    mov.b v0[8], w8874; CHECK-GI-NEXT:    ldr w8, [sp, #24]875; CHECK-GI-NEXT:    mov.b v1[8], w9876; CHECK-GI-NEXT:    mov.b v2[8], w10877; CHECK-GI-NEXT:    ldr w9, [sp, #152]878; CHECK-GI-NEXT:    mov.b v3[8], w11879; CHECK-GI-NEXT:    ldr w10, [sp, #280]880; CHECK-GI-NEXT:    ldr w11, [sp, #408]881; CHECK-GI-NEXT:    mov.b v0[9], w8882; CHECK-GI-NEXT:    ldr w8, [sp, #32]883; CHECK-GI-NEXT:    mov.b v1[9], w9884; CHECK-GI-NEXT:    mov.b v2[9], w10885; CHECK-GI-NEXT:    ldr w9, [sp, #160]886; CHECK-GI-NEXT:    mov.b v3[9], w11887; CHECK-GI-NEXT:    ldr w10, [sp, #288]888; CHECK-GI-NEXT:    ldr w11, [sp, #416]889; CHECK-GI-NEXT:    mov.b v0[10], w8890; CHECK-GI-NEXT:    ldr w8, [sp, #40]891; CHECK-GI-NEXT:    mov.b v1[10], w9892; CHECK-GI-NEXT:    mov.b v2[10], w10893; CHECK-GI-NEXT:    ldr w9, [sp, #168]894; CHECK-GI-NEXT:    mov.b v3[10], w11895; CHECK-GI-NEXT:    ldr w10, [sp, #296]896; CHECK-GI-NEXT:    ldr w11, [sp, #424]897; CHECK-GI-NEXT:    mov.b v0[11], w8898; CHECK-GI-NEXT:    ldr w8, [sp, #48]899; CHECK-GI-NEXT:    mov.b v1[11], w9900; CHECK-GI-NEXT:    mov.b v2[11], w10901; CHECK-GI-NEXT:    ldr w9, [sp, #176]902; CHECK-GI-NEXT:    mov.b v3[11], w11903; CHECK-GI-NEXT:    ldr w10, [sp, #304]904; CHECK-GI-NEXT:    ldr w11, [sp, #432]905; CHECK-GI-NEXT:    mov.b v0[12], w8906; CHECK-GI-NEXT:    ldr w8, [sp, #56]907; CHECK-GI-NEXT:    mov.b v1[12], w9908; CHECK-GI-NEXT:    mov.b v2[12], w10909; CHECK-GI-NEXT:    ldr w9, [sp, #184]910; CHECK-GI-NEXT:    mov.b v3[12], w11911; CHECK-GI-NEXT:    ldr w10, [sp, #312]912; CHECK-GI-NEXT:    ldr w11, [sp, #440]913; CHECK-GI-NEXT:    mov.b v0[13], w8914; CHECK-GI-NEXT:    ldr w8, [sp, #64]915; CHECK-GI-NEXT:    mov.b v1[13], w9916; CHECK-GI-NEXT:    mov.b v2[13], w10917; CHECK-GI-NEXT:    ldr w9, [sp, #192]918; CHECK-GI-NEXT:    mov.b v3[13], w11919; CHECK-GI-NEXT:    ldr w10, [sp, #320]920; CHECK-GI-NEXT:    ldr w11, [sp, #448]921; CHECK-GI-NEXT:    mov.b v0[14], w8922; CHECK-GI-NEXT:    ldr w8, [sp, #72]923; CHECK-GI-NEXT:    mov.b v1[14], w9924; CHECK-GI-NEXT:    mov.b v2[14], w10925; CHECK-GI-NEXT:    ldr w9, [sp, #200]926; CHECK-GI-NEXT:    mov.b v3[14], w11927; CHECK-GI-NEXT:    ldr w10, [sp, #328]928; CHECK-GI-NEXT:    ldr w11, [sp, #456]929; CHECK-GI-NEXT:    mov.b v0[15], w8930; CHECK-GI-NEXT:    mov.b v1[15], w9931; CHECK-GI-NEXT:    mov.b v2[15], w10932; CHECK-GI-NEXT:    mov.b v3[15], w11933; CHECK-GI-NEXT:    shl.16b v0, v0, #7934; CHECK-GI-NEXT:    shl.16b v1, v1, #7935; CHECK-GI-NEXT:    shl.16b v2, v2, #7936; CHECK-GI-NEXT:    shl.16b v3, v3, #7937; CHECK-GI-NEXT:    cmlt.16b v0, v0, #0938; CHECK-GI-NEXT:    cmlt.16b v1, v1, #0939; CHECK-GI-NEXT:    cmlt.16b v2, v2, #0940; CHECK-GI-NEXT:    cmlt.16b v3, v3, #0941; CHECK-GI-NEXT:    ldr x29, [sp], #16 // 8-byte Folded Reload942; CHECK-GI-NEXT:    ret943  %res = sext <64 x i1> %arg to <64 x i8>944  ret <64 x i8> %res945}946 947; X0 & X1 are the real return registers, SDAG messes with v0 too for unknown reasons.948define <1 x i128> @sext_v1x64(<1 x i64> %arg) {949; CHECK-SD-LABEL: sext_v1x64:950; CHECK-SD:       // %bb.0:951; CHECK-SD-NEXT:    // kill: def $d0 killed $d0 def $q0952; CHECK-SD-NEXT:    fmov x0, d0953; CHECK-SD-NEXT:    asr x1, x0, #63954; CHECK-SD-NEXT:    ret955;956; CHECK-GI-LABEL: sext_v1x64:957; CHECK-GI:       // %bb.0:958; CHECK-GI-NEXT:    fmov x8, d0959; CHECK-GI-NEXT:    fmov x0, d0960; CHECK-GI-NEXT:    asr x1, x8, #63961; CHECK-GI-NEXT:    ret962  %res = sext <1 x i64> %arg to <1 x i128>963  ret <1 x i128> %res964}965