brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.7 KiB · 7b82c0a Raw
468 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve < %s | FileCheck %s3; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -aarch64-sve-vector-bits-min=128 -aarch64-sve-vector-bits-max=128 < %s | FileCheck %s --check-prefix=CHECK-1284; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -aarch64-sve-vector-bits-min=256 -aarch64-sve-vector-bits-max=256 < %s | FileCheck %s --check-prefix=CHECK-2565; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -aarch64-sve-vector-bits-min=512 -aarch64-sve-vector-bits-max=512 < %s | FileCheck %s --check-prefix=CHECK-5126; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -aarch64-sve-vector-bits-min=1024 -aarch64-sve-vector-bits-max=1024 < %s | FileCheck %s --check-prefix=CHECK-10247; RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -aarch64-sve-vector-bits-min=2048 -aarch64-sve-vector-bits-max=2048 < %s | FileCheck %s --check-prefix=CHECK-20488 9define void @nxv16i8(ptr %ldptr, ptr %stptr) {10; CHECK-LABEL: nxv16i8:11; CHECK:       // %bb.0:12; CHECK-NEXT:    ptrue p0.b13; CHECK-NEXT:    mov w8, #256 // =0x10014; CHECK-NEXT:    ld1b { z0.b }, p0/z, [x0, x8]15; CHECK-NEXT:    st1b { z0.b }, p0, [x1, x8]16; CHECK-NEXT:    ret17;18; CHECK-128-LABEL: nxv16i8:19; CHECK-128:       // %bb.0:20; CHECK-128-NEXT:    ldr z0, [x0, #16, mul vl]21; CHECK-128-NEXT:    str z0, [x1, #16, mul vl]22; CHECK-128-NEXT:    ret23;24; CHECK-256-LABEL: nxv16i8:25; CHECK-256:       // %bb.0:26; CHECK-256-NEXT:    ldr z0, [x0, #8, mul vl]27; CHECK-256-NEXT:    str z0, [x1, #8, mul vl]28; CHECK-256-NEXT:    ret29;30; CHECK-512-LABEL: nxv16i8:31; CHECK-512:       // %bb.0:32; CHECK-512-NEXT:    ldr z0, [x0, #4, mul vl]33; CHECK-512-NEXT:    str z0, [x1, #4, mul vl]34; CHECK-512-NEXT:    ret35;36; CHECK-1024-LABEL: nxv16i8:37; CHECK-1024:       // %bb.0:38; CHECK-1024-NEXT:    ldr z0, [x0, #2, mul vl]39; CHECK-1024-NEXT:    str z0, [x1, #2, mul vl]40; CHECK-1024-NEXT:    ret41;42; CHECK-2048-LABEL: nxv16i8:43; CHECK-2048:       // %bb.0:44; CHECK-2048-NEXT:    ldr z0, [x0, #1, mul vl]45; CHECK-2048-NEXT:    str z0, [x1, #1, mul vl]46; CHECK-2048-NEXT:    ret47  %ldoff = getelementptr inbounds nuw i8, ptr %ldptr, i64 25648  %stoff = getelementptr inbounds nuw i8, ptr %stptr, i64 25649  %x = load <vscale x 16 x i8>, ptr %ldoff, align 150  store <vscale x 16 x i8> %x, ptr %stoff, align 151  ret void52}53 54define void @nxv8i16(ptr %ldptr, ptr %stptr) {55; CHECK-LABEL: nxv8i16:56; CHECK:       // %bb.0:57; CHECK-NEXT:    ptrue p0.h58; CHECK-NEXT:    mov x8, #128 // =0x8059; CHECK-NEXT:    ld1h { z0.h }, p0/z, [x0, x8, lsl #1]60; CHECK-NEXT:    st1h { z0.h }, p0, [x1, x8, lsl #1]61; CHECK-NEXT:    ret62;63; CHECK-128-LABEL: nxv8i16:64; CHECK-128:       // %bb.0:65; CHECK-128-NEXT:    ldr z0, [x0, #16, mul vl]66; CHECK-128-NEXT:    str z0, [x1, #16, mul vl]67; CHECK-128-NEXT:    ret68;69; CHECK-256-LABEL: nxv8i16:70; CHECK-256:       // %bb.0:71; CHECK-256-NEXT:    ldr z0, [x0, #8, mul vl]72; CHECK-256-NEXT:    str z0, [x1, #8, mul vl]73; CHECK-256-NEXT:    ret74;75; CHECK-512-LABEL: nxv8i16:76; CHECK-512:       // %bb.0:77; CHECK-512-NEXT:    ldr z0, [x0, #4, mul vl]78; CHECK-512-NEXT:    str z0, [x1, #4, mul vl]79; CHECK-512-NEXT:    ret80;81; CHECK-1024-LABEL: nxv8i16:82; CHECK-1024:       // %bb.0:83; CHECK-1024-NEXT:    ldr z0, [x0, #2, mul vl]84; CHECK-1024-NEXT:    str z0, [x1, #2, mul vl]85; CHECK-1024-NEXT:    ret86;87; CHECK-2048-LABEL: nxv8i16:88; CHECK-2048:       // %bb.0:89; CHECK-2048-NEXT:    ldr z0, [x0, #1, mul vl]90; CHECK-2048-NEXT:    str z0, [x1, #1, mul vl]91; CHECK-2048-NEXT:    ret92  %ldoff = getelementptr inbounds nuw i16, ptr %ldptr, i64 12893  %stoff = getelementptr inbounds nuw i16, ptr %stptr, i64 12894  %x = load <vscale x 8 x i16>, ptr %ldoff, align 295  store <vscale x 8 x i16> %x, ptr %stoff, align 296  ret void97}98 99define void @nxv4i32(ptr %ldptr, ptr %stptr) {100; CHECK-LABEL: nxv4i32:101; CHECK:       // %bb.0:102; CHECK-NEXT:    ptrue p0.s103; CHECK-NEXT:    mov x8, #64 // =0x40104; CHECK-NEXT:    ld1w { z0.s }, p0/z, [x0, x8, lsl #2]105; CHECK-NEXT:    st1w { z0.s }, p0, [x1, x8, lsl #2]106; CHECK-NEXT:    ret107;108; CHECK-128-LABEL: nxv4i32:109; CHECK-128:       // %bb.0:110; CHECK-128-NEXT:    ldr z0, [x0, #16, mul vl]111; CHECK-128-NEXT:    str z0, [x1, #16, mul vl]112; CHECK-128-NEXT:    ret113;114; CHECK-256-LABEL: nxv4i32:115; CHECK-256:       // %bb.0:116; CHECK-256-NEXT:    ldr z0, [x0, #8, mul vl]117; CHECK-256-NEXT:    str z0, [x1, #8, mul vl]118; CHECK-256-NEXT:    ret119;120; CHECK-512-LABEL: nxv4i32:121; CHECK-512:       // %bb.0:122; CHECK-512-NEXT:    ldr z0, [x0, #4, mul vl]123; CHECK-512-NEXT:    str z0, [x1, #4, mul vl]124; CHECK-512-NEXT:    ret125;126; CHECK-1024-LABEL: nxv4i32:127; CHECK-1024:       // %bb.0:128; CHECK-1024-NEXT:    ldr z0, [x0, #2, mul vl]129; CHECK-1024-NEXT:    str z0, [x1, #2, mul vl]130; CHECK-1024-NEXT:    ret131;132; CHECK-2048-LABEL: nxv4i32:133; CHECK-2048:       // %bb.0:134; CHECK-2048-NEXT:    ldr z0, [x0, #1, mul vl]135; CHECK-2048-NEXT:    str z0, [x1, #1, mul vl]136; CHECK-2048-NEXT:    ret137  %ldoff = getelementptr inbounds nuw i32, ptr %ldptr, i64 64138  %stoff = getelementptr inbounds nuw i32, ptr %stptr, i64 64139  %x = load <vscale x 4 x i32>, ptr %ldoff, align 4140  store <vscale x 4 x i32> %x, ptr %stoff, align 4141  ret void142}143 144define void @nxv2i64(ptr %ldptr, ptr %stptr) {145; CHECK-LABEL: nxv2i64:146; CHECK:       // %bb.0:147; CHECK-NEXT:    ptrue p0.d148; CHECK-NEXT:    mov x8, #32 // =0x20149; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0, x8, lsl #3]150; CHECK-NEXT:    st1d { z0.d }, p0, [x1, x8, lsl #3]151; CHECK-NEXT:    ret152;153; CHECK-128-LABEL: nxv2i64:154; CHECK-128:       // %bb.0:155; CHECK-128-NEXT:    ldr z0, [x0, #16, mul vl]156; CHECK-128-NEXT:    str z0, [x1, #16, mul vl]157; CHECK-128-NEXT:    ret158;159; CHECK-256-LABEL: nxv2i64:160; CHECK-256:       // %bb.0:161; CHECK-256-NEXT:    ldr z0, [x0, #8, mul vl]162; CHECK-256-NEXT:    str z0, [x1, #8, mul vl]163; CHECK-256-NEXT:    ret164;165; CHECK-512-LABEL: nxv2i64:166; CHECK-512:       // %bb.0:167; CHECK-512-NEXT:    ldr z0, [x0, #4, mul vl]168; CHECK-512-NEXT:    str z0, [x1, #4, mul vl]169; CHECK-512-NEXT:    ret170;171; CHECK-1024-LABEL: nxv2i64:172; CHECK-1024:       // %bb.0:173; CHECK-1024-NEXT:    ldr z0, [x0, #2, mul vl]174; CHECK-1024-NEXT:    str z0, [x1, #2, mul vl]175; CHECK-1024-NEXT:    ret176;177; CHECK-2048-LABEL: nxv2i64:178; CHECK-2048:       // %bb.0:179; CHECK-2048-NEXT:    ldr z0, [x0, #1, mul vl]180; CHECK-2048-NEXT:    str z0, [x1, #1, mul vl]181; CHECK-2048-NEXT:    ret182  %ldoff = getelementptr inbounds nuw i64, ptr %ldptr, i64 32183  %stoff = getelementptr inbounds nuw i64, ptr %stptr, i64 32184  %x = load <vscale x 2 x i64>, ptr %ldoff, align 8185  store <vscale x 2 x i64> %x, ptr %stoff, align 8186  ret void187}188 189define void @nxv4i8(ptr %ldptr, ptr %stptr) {190; CHECK-LABEL: nxv4i8:191; CHECK:       // %bb.0:192; CHECK-NEXT:    ptrue p0.s193; CHECK-NEXT:    mov w8, #32 // =0x20194; CHECK-NEXT:    ld1b { z0.s }, p0/z, [x0, x8]195; CHECK-NEXT:    st1b { z0.s }, p0, [x1, x8]196; CHECK-NEXT:    ret197;198; CHECK-128-LABEL: nxv4i8:199; CHECK-128:       // %bb.0:200; CHECK-128-NEXT:    ptrue p0.s201; CHECK-128-NEXT:    mov w8, #32 // =0x20202; CHECK-128-NEXT:    ld1b { z0.s }, p0/z, [x0, x8]203; CHECK-128-NEXT:    st1b { z0.s }, p0, [x1, x8]204; CHECK-128-NEXT:    ret205;206; CHECK-256-LABEL: nxv4i8:207; CHECK-256:       // %bb.0:208; CHECK-256-NEXT:    ptrue p0.s209; CHECK-256-NEXT:    ld1b { z0.s }, p0/z, [x0, #4, mul vl]210; CHECK-256-NEXT:    st1b { z0.s }, p0, [x1, #4, mul vl]211; CHECK-256-NEXT:    ret212;213; CHECK-512-LABEL: nxv4i8:214; CHECK-512:       // %bb.0:215; CHECK-512-NEXT:    ptrue p0.s216; CHECK-512-NEXT:    ld1b { z0.s }, p0/z, [x0, #2, mul vl]217; CHECK-512-NEXT:    st1b { z0.s }, p0, [x1, #2, mul vl]218; CHECK-512-NEXT:    ret219;220; CHECK-1024-LABEL: nxv4i8:221; CHECK-1024:       // %bb.0:222; CHECK-1024-NEXT:    ptrue p0.s223; CHECK-1024-NEXT:    ld1b { z0.s }, p0/z, [x0, #1, mul vl]224; CHECK-1024-NEXT:    st1b { z0.s }, p0, [x1, #1, mul vl]225; CHECK-1024-NEXT:    ret226;227; CHECK-2048-LABEL: nxv4i8:228; CHECK-2048:       // %bb.0:229; CHECK-2048-NEXT:    ptrue p0.s230; CHECK-2048-NEXT:    mov w8, #32 // =0x20231; CHECK-2048-NEXT:    ld1b { z0.s }, p0/z, [x0, x8]232; CHECK-2048-NEXT:    st1b { z0.s }, p0, [x1, x8]233; CHECK-2048-NEXT:    ret234  %ldoff = getelementptr inbounds nuw i8, ptr %ldptr, i64 32235  %stoff = getelementptr inbounds nuw i8, ptr %stptr, i64 32236  %x = load <vscale x 4 x i8>, ptr %ldoff, align 1237  store <vscale x 4 x i8> %x, ptr %stoff, align 1238  ret void239}240 241define void @nxv2f32(ptr %ldptr, ptr %stptr) {242; CHECK-LABEL: nxv2f32:243; CHECK:       // %bb.0:244; CHECK-NEXT:    ptrue p0.d245; CHECK-NEXT:    mov x8, #16 // =0x10246; CHECK-NEXT:    ld1w { z0.d }, p0/z, [x0, x8, lsl #2]247; CHECK-NEXT:    st1w { z0.d }, p0, [x1, x8, lsl #2]248; CHECK-NEXT:    ret249;250; CHECK-128-LABEL: nxv2f32:251; CHECK-128:       // %bb.0:252; CHECK-128-NEXT:    ptrue p0.d253; CHECK-128-NEXT:    mov x8, #16 // =0x10254; CHECK-128-NEXT:    ld1w { z0.d }, p0/z, [x0, x8, lsl #2]255; CHECK-128-NEXT:    st1w { z0.d }, p0, [x1, x8, lsl #2]256; CHECK-128-NEXT:    ret257;258; CHECK-256-LABEL: nxv2f32:259; CHECK-256:       // %bb.0:260; CHECK-256-NEXT:    ptrue p0.d261; CHECK-256-NEXT:    ld1w { z0.d }, p0/z, [x0, #4, mul vl]262; CHECK-256-NEXT:    st1w { z0.d }, p0, [x1, #4, mul vl]263; CHECK-256-NEXT:    ret264;265; CHECK-512-LABEL: nxv2f32:266; CHECK-512:       // %bb.0:267; CHECK-512-NEXT:    ptrue p0.d268; CHECK-512-NEXT:    ld1w { z0.d }, p0/z, [x0, #2, mul vl]269; CHECK-512-NEXT:    st1w { z0.d }, p0, [x1, #2, mul vl]270; CHECK-512-NEXT:    ret271;272; CHECK-1024-LABEL: nxv2f32:273; CHECK-1024:       // %bb.0:274; CHECK-1024-NEXT:    ptrue p0.d275; CHECK-1024-NEXT:    ld1w { z0.d }, p0/z, [x0, #1, mul vl]276; CHECK-1024-NEXT:    st1w { z0.d }, p0, [x1, #1, mul vl]277; CHECK-1024-NEXT:    ret278;279; CHECK-2048-LABEL: nxv2f32:280; CHECK-2048:       // %bb.0:281; CHECK-2048-NEXT:    ptrue p0.d282; CHECK-2048-NEXT:    mov x8, #16 // =0x10283; CHECK-2048-NEXT:    ld1w { z0.d }, p0/z, [x0, x8, lsl #2]284; CHECK-2048-NEXT:    st1w { z0.d }, p0, [x1, x8, lsl #2]285; CHECK-2048-NEXT:    ret286  %ldoff = getelementptr inbounds nuw i8, ptr %ldptr, i64 64287  %stoff = getelementptr inbounds nuw i8, ptr %stptr, i64 64288  %x = load <vscale x 2 x float>, ptr %ldoff, align 4289  store <vscale x 2 x float> %x, ptr %stoff, align 4290  ret void291}292 293define void @nxv4f64(ptr %ldptr, ptr %stptr) {294; CHECK-LABEL: nxv4f64:295; CHECK:       // %bb.0:296; CHECK-NEXT:    ptrue p0.d297; CHECK-NEXT:    mov x8, #16 // =0x10298; CHECK-NEXT:    add x9, x0, #128299; CHECK-NEXT:    ldr z1, [x9, #1, mul vl]300; CHECK-NEXT:    add x9, x1, #128301; CHECK-NEXT:    ld1d { z0.d }, p0/z, [x0, x8, lsl #3]302; CHECK-NEXT:    st1d { z0.d }, p0, [x1, x8, lsl #3]303; CHECK-NEXT:    str z1, [x9, #1, mul vl]304; CHECK-NEXT:    ret305;306; CHECK-128-LABEL: nxv4f64:307; CHECK-128:       // %bb.0:308; CHECK-128-NEXT:    add x8, x0, #128309; CHECK-128-NEXT:    ldr z1, [x0, #8, mul vl]310; CHECK-128-NEXT:    ldr z0, [x8, #1, mul vl]311; CHECK-128-NEXT:    add x8, x1, #128312; CHECK-128-NEXT:    str z0, [x8, #1, mul vl]313; CHECK-128-NEXT:    str z1, [x1, #8, mul vl]314; CHECK-128-NEXT:    ret315;316; CHECK-256-LABEL: nxv4f64:317; CHECK-256:       // %bb.0:318; CHECK-256-NEXT:    add x8, x0, #128319; CHECK-256-NEXT:    ldr z1, [x0, #4, mul vl]320; CHECK-256-NEXT:    ldr z0, [x8, #1, mul vl]321; CHECK-256-NEXT:    add x8, x1, #128322; CHECK-256-NEXT:    str z0, [x8, #1, mul vl]323; CHECK-256-NEXT:    str z1, [x1, #4, mul vl]324; CHECK-256-NEXT:    ret325;326; CHECK-512-LABEL: nxv4f64:327; CHECK-512:       // %bb.0:328; CHECK-512-NEXT:    add x8, x0, #128329; CHECK-512-NEXT:    ldr z1, [x0, #2, mul vl]330; CHECK-512-NEXT:    ldr z0, [x8, #1, mul vl]331; CHECK-512-NEXT:    add x8, x1, #128332; CHECK-512-NEXT:    str z0, [x8, #1, mul vl]333; CHECK-512-NEXT:    str z1, [x1, #2, mul vl]334; CHECK-512-NEXT:    ret335;336; CHECK-1024-LABEL: nxv4f64:337; CHECK-1024:       // %bb.0:338; CHECK-1024-NEXT:    add x8, x0, #128339; CHECK-1024-NEXT:    ldr z1, [x0, #1, mul vl]340; CHECK-1024-NEXT:    ldr z0, [x8, #1, mul vl]341; CHECK-1024-NEXT:    add x8, x1, #128342; CHECK-1024-NEXT:    str z0, [x8, #1, mul vl]343; CHECK-1024-NEXT:    str z1, [x1, #1, mul vl]344; CHECK-1024-NEXT:    ret345;346; CHECK-2048-LABEL: nxv4f64:347; CHECK-2048:       // %bb.0:348; CHECK-2048-NEXT:    ptrue p0.d349; CHECK-2048-NEXT:    mov x8, #16 // =0x10350; CHECK-2048-NEXT:    add x9, x0, #128351; CHECK-2048-NEXT:    ldr z1, [x9, #1, mul vl]352; CHECK-2048-NEXT:    add x9, x1, #128353; CHECK-2048-NEXT:    ld1d { z0.d }, p0/z, [x0, x8, lsl #3]354; CHECK-2048-NEXT:    st1d { z0.d }, p0, [x1, x8, lsl #3]355; CHECK-2048-NEXT:    str z1, [x9, #1, mul vl]356; CHECK-2048-NEXT:    ret357  %ldoff = getelementptr inbounds nuw i8, ptr %ldptr, i64 128358  %stoff = getelementptr inbounds nuw i8, ptr %stptr, i64 128359  %x = load <vscale x 4 x double>, ptr %ldoff, align 8360  store <vscale x 4 x double> %x, ptr %stoff, align 8361  ret void362}363 364define void @v8i32(ptr %ldptr, ptr %stptr) {365; CHECK-LABEL: v8i32:366; CHECK:       // %bb.0:367; CHECK-NEXT:    ldp q0, q1, [x0, #64]368; CHECK-NEXT:    ldp q3, q2, [x0, #32]369; CHECK-NEXT:    stp q0, q1, [x1, #64]370; CHECK-NEXT:    stp q3, q2, [x1, #32]371; CHECK-NEXT:    ret372;373; CHECK-128-LABEL: v8i32:374; CHECK-128:       // %bb.0:375; CHECK-128-NEXT:    ldp q0, q1, [x0, #64]376; CHECK-128-NEXT:    ldp q3, q2, [x0, #32]377; CHECK-128-NEXT:    stp q0, q1, [x1, #64]378; CHECK-128-NEXT:    stp q3, q2, [x1, #32]379; CHECK-128-NEXT:    ret380;381; CHECK-256-LABEL: v8i32:382; CHECK-256:       // %bb.0:383; CHECK-256-NEXT:    ldr z0, [x0, #2, mul vl]384; CHECK-256-NEXT:    ldr z1, [x0, #1, mul vl]385; CHECK-256-NEXT:    str z0, [x1, #2, mul vl]386; CHECK-256-NEXT:    str z1, [x1, #1, mul vl]387; CHECK-256-NEXT:    ret388;389; CHECK-512-LABEL: v8i32:390; CHECK-512:       // %bb.0:391; CHECK-512-NEXT:    ptrue p0.s392; CHECK-512-NEXT:    mov x8, #8 // =0x8393; CHECK-512-NEXT:    ld1w { z0.s }, p0/z, [x0, x8, lsl #2]394; CHECK-512-NEXT:    st1w { z0.s }, p0, [x1, x8, lsl #2]395; CHECK-512-NEXT:    ret396;397; CHECK-1024-LABEL: v8i32:398; CHECK-1024:       // %bb.0:399; CHECK-1024-NEXT:    ptrue p0.s, vl16400; CHECK-1024-NEXT:    mov x8, #8 // =0x8401; CHECK-1024-NEXT:    ld1w { z0.s }, p0/z, [x0, x8, lsl #2]402; CHECK-1024-NEXT:    st1w { z0.s }, p0, [x1, x8, lsl #2]403; CHECK-1024-NEXT:    ret404;405; CHECK-2048-LABEL: v8i32:406; CHECK-2048:       // %bb.0:407; CHECK-2048-NEXT:    ptrue p0.s, vl16408; CHECK-2048-NEXT:    mov x8, #8 // =0x8409; CHECK-2048-NEXT:    ld1w { z0.s }, p0/z, [x0, x8, lsl #2]410; CHECK-2048-NEXT:    st1w { z0.s }, p0, [x1, x8, lsl #2]411; CHECK-2048-NEXT:    ret412  %ldoff = getelementptr inbounds nuw i8, ptr %ldptr, i64 32413  %stoff = getelementptr inbounds nuw i8, ptr %stptr, i64 32414  %x = load <16 x i32>, ptr %ldoff, align 4415  store <16 x i32> %x, ptr %stoff, align 4416  ret void417}418 419define void @v8i32_vscale(ptr %0) {420; CHECK-LABEL: v8i32_vscale:421; CHECK:       // %bb.0:422; CHECK-NEXT:    movi v0.4s, #1423; CHECK-NEXT:    rdvl x8, #2424; CHECK-NEXT:    add x8, x0, x8425; CHECK-NEXT:    stp q0, q0, [x8]426; CHECK-NEXT:    ret427;428; CHECK-128-LABEL: v8i32_vscale:429; CHECK-128:       // %bb.0:430; CHECK-128-NEXT:    movi v0.4s, #1431; CHECK-128-NEXT:    rdvl x8, #2432; CHECK-128-NEXT:    add x8, x0, x8433; CHECK-128-NEXT:    stp q0, q0, [x8]434; CHECK-128-NEXT:    ret435;436; CHECK-256-LABEL: v8i32_vscale:437; CHECK-256:       // %bb.0:438; CHECK-256-NEXT:    mov z0.s, #1 // =0x1439; CHECK-256-NEXT:    str z0, [x0, #2, mul vl]440; CHECK-256-NEXT:    ret441;442; CHECK-512-LABEL: v8i32_vscale:443; CHECK-512:       // %bb.0:444; CHECK-512-NEXT:    mov z0.s, #1 // =0x1445; CHECK-512-NEXT:    ptrue p0.s, vl8446; CHECK-512-NEXT:    st1w { z0.s }, p0, [x0, #2, mul vl]447; CHECK-512-NEXT:    ret448;449; CHECK-1024-LABEL: v8i32_vscale:450; CHECK-1024:       // %bb.0:451; CHECK-1024-NEXT:    mov z0.s, #1 // =0x1452; CHECK-1024-NEXT:    ptrue p0.s, vl8453; CHECK-1024-NEXT:    st1w { z0.s }, p0, [x0, #2, mul vl]454; CHECK-1024-NEXT:    ret455;456; CHECK-2048-LABEL: v8i32_vscale:457; CHECK-2048:       // %bb.0:458; CHECK-2048-NEXT:    mov z0.s, #1 // =0x1459; CHECK-2048-NEXT:    ptrue p0.s, vl8460; CHECK-2048-NEXT:    st1w { z0.s }, p0, [x0, #2, mul vl]461; CHECK-2048-NEXT:    ret462  %vl = call i64 @llvm.vscale()463  %vlx = shl i64 %vl, 5464  %2 = getelementptr inbounds nuw i8, ptr %0, i64 %vlx465  store <8 x i32> splat (i32 1), ptr %2, align 4466  ret void467}468