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