1242 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=ve -mattr=+vpu | FileCheck %s3 4;;; Test store instructions5;;;6;;; Note:7;;; We test store instructions using general stack, stack with dynamic8;;; allocation, stack with dynamic allocation and alignment, and stack9;;; with dynamic allocation, alignment, and spill.10;;;11;;; Fist test using a stack for leaf function.12;;;13;;; | | Higher address14;;; |----------------------------------------------| <- old sp15;;; | Local variables of fixed size |16;;; |----------------------------------------------| <- sp17;;; | | Lower address18;;;19;;; Access local variable using sp (%s11). In addition, please remember20;;; that stack is aligned by 16 bytes.21;;;22;;; Second test using a general stack.23;;;24;;; | | Higher address25;;; |----------------------------------------------|26;;; | Parameter area for this function |27;;; |----------------------------------------------|28;;; | Register save area (RSA) for this function |29;;; |----------------------------------------------|30;;; | Return address for this function |31;;; |----------------------------------------------|32;;; | Frame pointer for this function |33;;; |----------------------------------------------| <- fp(=old sp)34;;; | Local variables of fixed size |35;;; |----------------------------------------------|36;;; |.variable-sized.local.variables.(VLAs)........|37;;; |..............................................|38;;; |..............................................|39;;; |----------------------------------------------| <- returned by alloca40;;; | Parameter area for callee |41;;; |----------------------------------------------|42;;; | Register save area (RSA) for callee |43;;; |----------------------------------------------|44;;; | Return address for callee |45;;; |----------------------------------------------|46;;; | Frame pointer for callee |47;;; |----------------------------------------------| <- sp48;;; | | Lower address49;;;50;;; Access local variable using fp (%s9) since the size of VLA is not51;;; known. At the beginning of the functions, allocates 240 + data52;;; bytes. 240 means RSA+RA+FP (=176) + Parameter (=64).53;;;54;;; Third test using a general stack.55;;;56;;; | | Higher address57;;; |----------------------------------------------|58;;; | Parameter area for this function |59;;; |----------------------------------------------|60;;; | Register save area (RSA) for this function |61;;; |----------------------------------------------|62;;; | Return address for this function |63;;; |----------------------------------------------|64;;; | Frame pointer for this function |65;;; |----------------------------------------------| <- fp(=old sp)66;;; |.empty.space.to.make.part.below.aligned.in....|67;;; |.case.it.needs.more.than.the.standard.16-byte.| (size of this area is68;;; |.alignment....................................| unknown at compile time)69;;; |----------------------------------------------|70;;; | Local variables of fixed size including spill|71;;; | slots |72;;; |----------------------------------------------| <- bp(not defined by ABI,73;;; |.variable-sized.local.variables.(VLAs)........| LLVM chooses SX17)74;;; |..............................................| (size of this area is75;;; |..............................................| unknown at compile time)76;;; |----------------------------------------------| <- stack top (returned by77;;; | Parameter area for callee | alloca)78;;; |----------------------------------------------|79;;; | Register save area (RSA) for callee |80;;; |----------------------------------------------|81;;; | Return address for callee |82;;; |----------------------------------------------|83;;; | Frame pointer for callee |84;;; |----------------------------------------------| <- sp85;;; | | Lower address86;;;87;;; Access local variable using bp (%s17) since the size of alignment88;;; and VLA are not known. At the beginning of the functions, allocates89;;; pad(240 + data + align) bytes. Then, access data through bp + pad(240)90;;; since this address doesn't change even if VLA is dynamically allocated.91;;;92;;; Fourth test using a general stack with some spills.93;;;94 95; Function Attrs: argmemonly nofree nounwind96define fastcc void @store__vm256_stk(<256 x i1> noundef %0) {97; CHECK-LABEL: store__vm256_stk:98; CHECK: # %bb.0:99; CHECK-NEXT: st %s9, (, %s11)100; CHECK-NEXT: st %s10, 8(, %s11)101; CHECK-NEXT: or %s9, 0, %s11102; CHECK-NEXT: lea %s11, -224(, %s11)103; CHECK-NEXT: and %s11, %s11, (59)1104; CHECK-NEXT: brge.l.t %s11, %s8, .LBB0_2105; CHECK-NEXT: # %bb.1:106; CHECK-NEXT: ld %s61, 24(, %s14)107; CHECK-NEXT: or %s62, 0, %s0108; CHECK-NEXT: lea %s63, 315109; CHECK-NEXT: shm.l %s63, (%s61)110; CHECK-NEXT: shm.l %s8, 8(%s61)111; CHECK-NEXT: shm.l %s11, 16(%s61)112; CHECK-NEXT: monc113; CHECK-NEXT: or %s0, 0, %s62114; CHECK-NEXT: .LBB0_2:115; CHECK-NEXT: svm %s16, %vm1, 0116; CHECK-NEXT: st %s16, 192(, %s11)117; CHECK-NEXT: svm %s16, %vm1, 1118; CHECK-NEXT: st %s16, 200(, %s11)119; CHECK-NEXT: svm %s16, %vm1, 2120; CHECK-NEXT: st %s16, 208(, %s11)121; CHECK-NEXT: svm %s16, %vm1, 3122; CHECK-NEXT: st %s16, 216(, %s11)123; CHECK-NEXT: or %s11, 0, %s9124; CHECK-NEXT: ld %s10, 8(, %s11)125; CHECK-NEXT: ld %s9, (, %s11)126; CHECK-NEXT: b.l.t (, %s10)127 %2 = alloca <256 x i1>, align 32128 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %2)129 store volatile <256 x i1> %0, ptr %2, align 32, !tbaa !3130 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %2)131 ret void132}133 134; Function Attrs: argmemonly mustprogress nocallback nofree nosync nounwind willreturn135declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)136 137; Function Attrs: argmemonly mustprogress nocallback nofree nosync nounwind willreturn138declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)139 140; Function Attrs: argmemonly nofree nounwind141define fastcc void @store__vm256_stk_big_fit(<256 x i1> noundef %0, i64 noundef %1) {142; CHECK-LABEL: store__vm256_stk_big_fit:143; CHECK: # %bb.0:144; CHECK-NEXT: st %s9, (, %s11)145; CHECK-NEXT: st %s10, 8(, %s11)146; CHECK-NEXT: or %s9, 0, %s11147; CHECK-NEXT: lea %s11, -2147483648(, %s11)148; CHECK-NEXT: and %s11, %s11, (59)1149; CHECK-NEXT: brge.l %s11, %s8, .LBB1_4150; CHECK-NEXT: # %bb.3:151; CHECK-NEXT: ld %s61, 24(, %s14)152; CHECK-NEXT: or %s62, 0, %s0153; CHECK-NEXT: lea %s63, 315154; CHECK-NEXT: shm.l %s63, (%s61)155; CHECK-NEXT: shm.l %s8, 8(%s61)156; CHECK-NEXT: shm.l %s11, 16(%s61)157; CHECK-NEXT: monc158; CHECK-NEXT: or %s0, 0, %s62159; CHECK-NEXT: .LBB1_4:160; CHECK-NEXT: svm %s16, %vm1, 0161; CHECK-NEXT: st %s16, 2147483616(, %s11)162; CHECK-NEXT: svm %s16, %vm1, 1163; CHECK-NEXT: st %s16, 2147483624(, %s11)164; CHECK-NEXT: svm %s16, %vm1, 2165; CHECK-NEXT: st %s16, 2147483632(, %s11)166; CHECK-NEXT: svm %s16, %vm1, 3167; CHECK-NEXT: st %s16, 2147483640(, %s11)168; CHECK-NEXT: or %s1, 0, (0)1169; CHECK-NEXT: lea %s2, 2147483424170; CHECK-NEXT: .LBB1_1: # =>This Inner Loop Header: Depth=1171; CHECK-NEXT: st %s0, 192(%s1, %s11)172; CHECK-NEXT: lea %s1, 8(, %s1)173; CHECK-NEXT: brne.l %s1, %s2, .LBB1_1174; CHECK-NEXT: # %bb.2:175; CHECK-NEXT: or %s11, 0, %s9176; CHECK-NEXT: ld %s10, 8(, %s11)177; CHECK-NEXT: ld %s9, (, %s11)178; CHECK-NEXT: b.l.t (, %s10)179 %3 = alloca <256 x i1>, align 32180 %4 = alloca [268435428 x i64], align 8181 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)182 call void @llvm.lifetime.start.p0(i64 2147483424, ptr nonnull %4)183 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3184 br label %6185 1865: ; preds = %6187 call void @llvm.lifetime.end.p0(i64 2147483424, ptr nonnull %4)188 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)189 ret void190 1916: ; preds = %2, %6192 %7 = phi i64 [ 0, %2 ], [ %9, %6 ]193 %8 = getelementptr inbounds [268435428 x i64], ptr %4, i64 0, i64 %7194 store volatile i64 %1, ptr %8, align 8, !tbaa !6195 %9 = add nuw nsw i64 %7, 1196 %10 = icmp eq i64 %9, 268435428197 br i1 %10, label %5, label %6, !llvm.loop !8198}199 200; Function Attrs: argmemonly nofree nounwind201define fastcc void @store__vm256_stk_big(<256 x i1> noundef %0, i64 noundef %1) {202; CHECK-LABEL: store__vm256_stk_big:203; CHECK: # %bb.0:204; CHECK-NEXT: st %s9, (, %s11)205; CHECK-NEXT: st %s10, 8(, %s11)206; CHECK-NEXT: or %s9, 0, %s11207; CHECK-NEXT: lea %s13, 2147483616208; CHECK-NEXT: and %s13, %s13, (32)0209; CHECK-NEXT: lea.sl %s11, -1(%s13, %s11)210; CHECK-NEXT: and %s11, %s11, (59)1211; CHECK-NEXT: brge.l %s11, %s8, .LBB2_4212; CHECK-NEXT: # %bb.3:213; CHECK-NEXT: ld %s61, 24(, %s14)214; CHECK-NEXT: or %s62, 0, %s0215; CHECK-NEXT: lea %s63, 315216; CHECK-NEXT: shm.l %s63, (%s61)217; CHECK-NEXT: shm.l %s8, 8(%s61)218; CHECK-NEXT: shm.l %s11, 16(%s61)219; CHECK-NEXT: monc220; CHECK-NEXT: or %s0, 0, %s62221; CHECK-NEXT: .LBB2_4:222; CHECK-NEXT: lea %s13, -2147483648223; CHECK-NEXT: and %s13, %s13, (32)0224; CHECK-NEXT: lea.sl %s13, (%s11, %s13)225; CHECK-NEXT: svm %s16, %vm1, 0226; CHECK-NEXT: st %s16, (, %s13)227; CHECK-NEXT: svm %s16, %vm1, 1228; CHECK-NEXT: st %s16, 8(, %s13)229; CHECK-NEXT: svm %s16, %vm1, 2230; CHECK-NEXT: st %s16, 16(, %s13)231; CHECK-NEXT: svm %s16, %vm1, 3232; CHECK-NEXT: st %s16, 24(, %s13)233; CHECK-NEXT: or %s1, 0, (0)1234; CHECK-NEXT: lea %s2, 2147483432235; CHECK-NEXT: .LBB2_1: # =>This Inner Loop Header: Depth=1236; CHECK-NEXT: st %s0, 216(%s1, %s11)237; CHECK-NEXT: lea %s1, 8(, %s1)238; CHECK-NEXT: brne.l %s1, %s2, .LBB2_1239; CHECK-NEXT: # %bb.2:240; CHECK-NEXT: or %s11, 0, %s9241; CHECK-NEXT: ld %s10, 8(, %s11)242; CHECK-NEXT: ld %s9, (, %s11)243; CHECK-NEXT: b.l.t (, %s10)244 %3 = alloca <256 x i1>, align 32245 %4 = alloca [268435429 x i64], align 8246 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)247 call void @llvm.lifetime.start.p0(i64 2147483432, ptr nonnull %4)248 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3249 br label %6250 2515: ; preds = %6252 call void @llvm.lifetime.end.p0(i64 2147483432, ptr nonnull %4)253 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)254 ret void255 2566: ; preds = %2, %6257 %7 = phi i64 [ 0, %2 ], [ %9, %6 ]258 %8 = getelementptr inbounds [268435429 x i64], ptr %4, i64 0, i64 %7259 store volatile i64 %1, ptr %8, align 8, !tbaa !6260 %9 = add nuw nsw i64 %7, 1261 %10 = icmp eq i64 %9, 268435429262 br i1 %10, label %5, label %6, !llvm.loop !8263}264 265; Function Attrs: argmemonly nofree nounwind266define fastcc void @store__vm256_stk_big2(<256 x i1> noundef %0, i64 noundef %1) {267; CHECK-LABEL: store__vm256_stk_big2:268; CHECK: # %bb.0:269; CHECK-NEXT: st %s9, (, %s11)270; CHECK-NEXT: st %s10, 8(, %s11)271; CHECK-NEXT: or %s9, 0, %s11272; CHECK-NEXT: lea %s13, 2147483424273; CHECK-NEXT: and %s13, %s13, (32)0274; CHECK-NEXT: lea.sl %s11, -1(%s13, %s11)275; CHECK-NEXT: and %s11, %s11, (59)1276; CHECK-NEXT: brge.l %s11, %s8, .LBB3_4277; CHECK-NEXT: # %bb.3:278; CHECK-NEXT: ld %s61, 24(, %s14)279; CHECK-NEXT: or %s62, 0, %s0280; CHECK-NEXT: lea %s63, 315281; CHECK-NEXT: shm.l %s63, (%s61)282; CHECK-NEXT: shm.l %s8, 8(%s61)283; CHECK-NEXT: shm.l %s11, 16(%s61)284; CHECK-NEXT: monc285; CHECK-NEXT: or %s0, 0, %s62286; CHECK-NEXT: .LBB3_4:287; CHECK-NEXT: lea %s13, -2147483456288; CHECK-NEXT: and %s13, %s13, (32)0289; CHECK-NEXT: lea.sl %s13, (%s11, %s13)290; CHECK-NEXT: svm %s16, %vm1, 0291; CHECK-NEXT: st %s16, (, %s13)292; CHECK-NEXT: svm %s16, %vm1, 1293; CHECK-NEXT: st %s16, 8(, %s13)294; CHECK-NEXT: svm %s16, %vm1, 2295; CHECK-NEXT: st %s16, 16(, %s13)296; CHECK-NEXT: svm %s16, %vm1, 3297; CHECK-NEXT: st %s16, 24(, %s13)298; CHECK-NEXT: or %s1, 0, (0)1299; CHECK-NEXT: lea %s2, -2147483648300; CHECK-NEXT: and %s2, %s2, (32)0301; CHECK-NEXT: .LBB3_1: # =>This Inner Loop Header: Depth=1302; CHECK-NEXT: st %s0, 192(%s1, %s11)303; CHECK-NEXT: lea %s1, 8(, %s1)304; CHECK-NEXT: brne.l %s1, %s2, .LBB3_1305; CHECK-NEXT: # %bb.2:306; CHECK-NEXT: or %s11, 0, %s9307; CHECK-NEXT: ld %s10, 8(, %s11)308; CHECK-NEXT: ld %s9, (, %s11)309; CHECK-NEXT: b.l.t (, %s10)310 %3 = alloca <256 x i1>, align 32311 %4 = alloca [268435456 x i64], align 8312 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)313 call void @llvm.lifetime.start.p0(i64 2147483648, ptr nonnull %4)314 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3315 br label %6316 3175: ; preds = %6318 call void @llvm.lifetime.end.p0(i64 2147483648, ptr nonnull %4)319 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)320 ret void321 3226: ; preds = %2, %6323 %7 = phi i64 [ 0, %2 ], [ %9, %6 ]324 %8 = getelementptr inbounds [268435456 x i64], ptr %4, i64 0, i64 %7325 store volatile i64 %1, ptr %8, align 8, !tbaa !6326 %9 = add nuw nsw i64 %7, 1327 %10 = icmp eq i64 %9, 268435456328 br i1 %10, label %5, label %6, !llvm.loop !10329}330 331; Function Attrs: argmemonly nofree nounwind332define fastcc void @store__vm256_stk_dyn(<256 x i1> noundef %0, i64 noundef %1) {333; CHECK-LABEL: store__vm256_stk_dyn:334; CHECK: # %bb.0:335; CHECK-NEXT: st %s9, (, %s11)336; CHECK-NEXT: st %s10, 8(, %s11)337; CHECK-NEXT: or %s9, 0, %s11338; CHECK-NEXT: lea %s11, -272(, %s11)339; CHECK-NEXT: brge.l.t %s11, %s8, .LBB4_2340; CHECK-NEXT: # %bb.1:341; CHECK-NEXT: ld %s61, 24(, %s14)342; CHECK-NEXT: or %s62, 0, %s0343; CHECK-NEXT: lea %s63, 315344; CHECK-NEXT: shm.l %s63, (%s61)345; CHECK-NEXT: shm.l %s8, 8(%s61)346; CHECK-NEXT: shm.l %s11, 16(%s61)347; CHECK-NEXT: monc348; CHECK-NEXT: or %s0, 0, %s62349; CHECK-NEXT: .LBB4_2:350; CHECK-NEXT: sll %s0, %s0, 5351; CHECK-NEXT: lea %s1, __ve_grow_stack@lo352; CHECK-NEXT: and %s1, %s1, (32)0353; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)354; CHECK-NEXT: bsic %s10, (, %s12)355; CHECK-NEXT: lea %s0, 240(, %s11)356; CHECK-NEXT: svm %s1, %vm1, 3357; CHECK-NEXT: st %s1, 24(, %s0)358; CHECK-NEXT: svm %s1, %vm1, 2359; CHECK-NEXT: st %s1, 16(, %s0)360; CHECK-NEXT: svm %s1, %vm1, 1361; CHECK-NEXT: st %s1, 8(, %s0)362; CHECK-NEXT: svm %s1, %vm1, 0363; CHECK-NEXT: st %s1, (, %s0)364; CHECK-NEXT: svm %s16, %vm1, 0365; CHECK-NEXT: st %s16, -32(, %s9)366; CHECK-NEXT: svm %s16, %vm1, 1367; CHECK-NEXT: st %s16, -24(, %s9)368; CHECK-NEXT: svm %s16, %vm1, 2369; CHECK-NEXT: st %s16, -16(, %s9)370; CHECK-NEXT: svm %s16, %vm1, 3371; CHECK-NEXT: st %s16, -8(, %s9)372; CHECK-NEXT: or %s11, 0, %s9373; CHECK-NEXT: ld %s10, 8(, %s11)374; CHECK-NEXT: ld %s9, (, %s11)375; CHECK-NEXT: b.l.t (, %s10)376 %3 = alloca <256 x i1>, align 8377 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)378 %4 = alloca <256 x i1>, i64 %1, align 8379 store volatile <256 x i1> %0, ptr %4, align 32, !tbaa !3380 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3381 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)382 ret void383}384 385; Function Attrs: argmemonly nofree nounwind386define fastcc void @store__vm256_stk_dyn_align(<256 x i1> noundef %0, i64 noundef %1) {387; CHECK-LABEL: store__vm256_stk_dyn_align:388; CHECK: # %bb.0:389; CHECK-NEXT: st %s9, (, %s11)390; CHECK-NEXT: st %s10, 8(, %s11)391; CHECK-NEXT: st %s17, 40(, %s11)392; CHECK-NEXT: or %s9, 0, %s11393; CHECK-NEXT: lea %s11, -288(, %s11)394; CHECK-NEXT: and %s11, %s11, (59)1395; CHECK-NEXT: or %s17, 0, %s11396; CHECK-NEXT: brge.l.t %s11, %s8, .LBB5_2397; CHECK-NEXT: # %bb.1:398; CHECK-NEXT: ld %s61, 24(, %s14)399; CHECK-NEXT: or %s62, 0, %s0400; CHECK-NEXT: lea %s63, 315401; CHECK-NEXT: shm.l %s63, (%s61)402; CHECK-NEXT: shm.l %s8, 8(%s61)403; CHECK-NEXT: shm.l %s11, 16(%s61)404; CHECK-NEXT: monc405; CHECK-NEXT: or %s0, 0, %s62406; CHECK-NEXT: .LBB5_2:407; CHECK-NEXT: sll %s0, %s0, 5408; CHECK-NEXT: lea %s1, __ve_grow_stack@lo409; CHECK-NEXT: and %s1, %s1, (32)0410; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)411; CHECK-NEXT: bsic %s10, (, %s12)412; CHECK-NEXT: lea %s0, 240(, %s11)413; CHECK-NEXT: svm %s1, %vm1, 3414; CHECK-NEXT: st %s1, 24(, %s0)415; CHECK-NEXT: svm %s1, %vm1, 2416; CHECK-NEXT: st %s1, 16(, %s0)417; CHECK-NEXT: svm %s1, %vm1, 1418; CHECK-NEXT: st %s1, 8(, %s0)419; CHECK-NEXT: svm %s1, %vm1, 0420; CHECK-NEXT: st %s1, (, %s0)421; CHECK-NEXT: svm %s16, %vm1, 0422; CHECK-NEXT: st %s16, 256(, %s17)423; CHECK-NEXT: svm %s16, %vm1, 1424; CHECK-NEXT: st %s16, 264(, %s17)425; CHECK-NEXT: svm %s16, %vm1, 2426; CHECK-NEXT: st %s16, 272(, %s17)427; CHECK-NEXT: svm %s16, %vm1, 3428; CHECK-NEXT: st %s16, 280(, %s17)429; CHECK-NEXT: or %s11, 0, %s9430; CHECK-NEXT: ld %s17, 40(, %s11)431; CHECK-NEXT: ld %s10, 8(, %s11)432; CHECK-NEXT: ld %s9, (, %s11)433; CHECK-NEXT: b.l.t (, %s10)434 %3 = alloca <256 x i1>, align 32435 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)436 %4 = alloca <256 x i1>, i64 %1, align 8437 store volatile <256 x i1> %0, ptr %4, align 32, !tbaa !3438 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3439 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)440 ret void441}442 443; Function Attrs: argmemonly nofree nounwind444define fastcc void @store__vm256_stk_dyn_align2(<256 x i1> noundef %0, i64 noundef %1) {445; CHECK-LABEL: store__vm256_stk_dyn_align2:446; CHECK: # %bb.0:447; CHECK-NEXT: st %s9, (, %s11)448; CHECK-NEXT: st %s10, 8(, %s11)449; CHECK-NEXT: st %s17, 40(, %s11)450; CHECK-NEXT: or %s9, 0, %s11451; CHECK-NEXT: lea %s11, -320(, %s11)452; CHECK-NEXT: and %s11, %s11, (58)1453; CHECK-NEXT: or %s17, 0, %s11454; CHECK-NEXT: brge.l.t %s11, %s8, .LBB6_2455; CHECK-NEXT: # %bb.1:456; CHECK-NEXT: ld %s61, 24(, %s14)457; CHECK-NEXT: or %s62, 0, %s0458; CHECK-NEXT: lea %s63, 315459; CHECK-NEXT: shm.l %s63, (%s61)460; CHECK-NEXT: shm.l %s8, 8(%s61)461; CHECK-NEXT: shm.l %s11, 16(%s61)462; CHECK-NEXT: monc463; CHECK-NEXT: or %s0, 0, %s62464; CHECK-NEXT: .LBB6_2:465; CHECK-NEXT: sll %s0, %s0, 5466; CHECK-NEXT: lea %s1, __ve_grow_stack@lo467; CHECK-NEXT: and %s1, %s1, (32)0468; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)469; CHECK-NEXT: bsic %s10, (, %s12)470; CHECK-NEXT: lea %s0, 240(, %s11)471; CHECK-NEXT: svm %s1, %vm1, 3472; CHECK-NEXT: st %s1, 24(, %s0)473; CHECK-NEXT: svm %s1, %vm1, 2474; CHECK-NEXT: st %s1, 16(, %s0)475; CHECK-NEXT: svm %s1, %vm1, 1476; CHECK-NEXT: st %s1, 8(, %s0)477; CHECK-NEXT: svm %s1, %vm1, 0478; CHECK-NEXT: st %s1, (, %s0)479; CHECK-NEXT: svm %s16, %vm1, 0480; CHECK-NEXT: st %s16, 288(, %s17)481; CHECK-NEXT: svm %s16, %vm1, 1482; CHECK-NEXT: st %s16, 296(, %s17)483; CHECK-NEXT: svm %s16, %vm1, 2484; CHECK-NEXT: st %s16, 304(, %s17)485; CHECK-NEXT: svm %s16, %vm1, 3486; CHECK-NEXT: st %s16, 312(, %s17)487; CHECK-NEXT: svm %s16, %vm1, 0488; CHECK-NEXT: st %s16, 256(, %s17)489; CHECK-NEXT: svm %s16, %vm1, 1490; CHECK-NEXT: st %s16, 264(, %s17)491; CHECK-NEXT: svm %s16, %vm1, 2492; CHECK-NEXT: st %s16, 272(, %s17)493; CHECK-NEXT: svm %s16, %vm1, 3494; CHECK-NEXT: st %s16, 280(, %s17)495; CHECK-NEXT: or %s11, 0, %s9496; CHECK-NEXT: ld %s17, 40(, %s11)497; CHECK-NEXT: ld %s10, 8(, %s11)498; CHECK-NEXT: ld %s9, (, %s11)499; CHECK-NEXT: b.l.t (, %s10)500 %3 = alloca <256 x i1>, align 32501 %4 = alloca <256 x i1>, align 64502 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)503 %5 = alloca <256 x i1>, i64 %1, align 8504 store volatile <256 x i1> %0, ptr %5, align 32, !tbaa !3505 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3506 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %4)507 store volatile <256 x i1> %0, ptr %4, align 64, !tbaa !3508 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %4)509 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)510 ret void511}512 513; Function Attrs: nounwind514define fastcc void @store__vm256_stk_dyn_align_spill(<256 x i1> noundef %0, i64 noundef %1) {515; CHECK-LABEL: store__vm256_stk_dyn_align_spill:516; CHECK: # %bb.0:517; CHECK-NEXT: st %s9, (, %s11)518; CHECK-NEXT: st %s10, 8(, %s11)519; CHECK-NEXT: st %s17, 40(, %s11)520; CHECK-NEXT: or %s9, 0, %s11521; CHECK-NEXT: lea %s11, -320(, %s11)522; CHECK-NEXT: and %s11, %s11, (59)1523; CHECK-NEXT: or %s17, 0, %s11524; CHECK-NEXT: brge.l.t %s11, %s8, .LBB7_2525; CHECK-NEXT: # %bb.1:526; CHECK-NEXT: ld %s61, 24(, %s14)527; CHECK-NEXT: or %s62, 0, %s0528; CHECK-NEXT: lea %s63, 315529; CHECK-NEXT: shm.l %s63, (%s61)530; CHECK-NEXT: shm.l %s8, 8(%s61)531; CHECK-NEXT: shm.l %s11, 16(%s61)532; CHECK-NEXT: monc533; CHECK-NEXT: or %s0, 0, %s62534; CHECK-NEXT: .LBB7_2:535; CHECK-NEXT: st %s18, 48(, %s9) # 8-byte Folded Spill536; CHECK-NEXT: st %s19, 56(, %s9) # 8-byte Folded Spill537; CHECK-NEXT: or %s18, 0, %s0538; CHECK-NEXT: svm %s16, %vm1, 0539; CHECK-NEXT: st %s16, 256(, %s17)540; CHECK-NEXT: svm %s16, %vm1, 1541; CHECK-NEXT: st %s16, 264(, %s17)542; CHECK-NEXT: svm %s16, %vm1, 2543; CHECK-NEXT: st %s16, 272(, %s17)544; CHECK-NEXT: svm %s16, %vm1, 3545; CHECK-NEXT: st %s16, 280(, %s17) # 32-byte Folded Spill546; CHECK-NEXT: sll %s0, %s0, 5547; CHECK-NEXT: lea %s1, __ve_grow_stack@lo548; CHECK-NEXT: and %s1, %s1, (32)0549; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)550; CHECK-NEXT: bsic %s10, (, %s12)551; CHECK-NEXT: lea %s19, 240(, %s11)552; CHECK-NEXT: lea %s0, dummy@lo553; CHECK-NEXT: and %s0, %s0, (32)0554; CHECK-NEXT: lea.sl %s12, dummy@hi(, %s0)555; CHECK-NEXT: bsic %s10, (, %s12)556; CHECK-NEXT: lea %s0, pass@lo557; CHECK-NEXT: and %s0, %s0, (32)0558; CHECK-NEXT: lea.sl %s12, pass@hi(, %s0)559; CHECK-NEXT: or %s0, 0, %s18560; CHECK-NEXT: bsic %s10, (, %s12)561; CHECK-NEXT: ld %s16, 256(, %s17)562; CHECK-NEXT: lvm %vm1, 0, %s16563; CHECK-NEXT: ld %s16, 264(, %s17)564; CHECK-NEXT: lvm %vm1, 1, %s16565; CHECK-NEXT: ld %s16, 272(, %s17)566; CHECK-NEXT: lvm %vm1, 2, %s16567; CHECK-NEXT: ld %s16, 280(, %s17) # 32-byte Folded Reload568; CHECK-NEXT: lvm %vm1, 3, %s16569; CHECK-NEXT: svm %s0, %vm1, 3570; CHECK-NEXT: st %s0, 24(, %s19)571; CHECK-NEXT: svm %s0, %vm1, 2572; CHECK-NEXT: st %s0, 16(, %s19)573; CHECK-NEXT: svm %s0, %vm1, 1574; CHECK-NEXT: st %s0, 8(, %s19)575; CHECK-NEXT: svm %s0, %vm1, 0576; CHECK-NEXT: st %s0, (, %s19)577; CHECK-NEXT: svm %s16, %vm1, 0578; CHECK-NEXT: st %s16, 288(, %s17)579; CHECK-NEXT: svm %s16, %vm1, 1580; CHECK-NEXT: st %s16, 296(, %s17)581; CHECK-NEXT: svm %s16, %vm1, 2582; CHECK-NEXT: st %s16, 304(, %s17)583; CHECK-NEXT: svm %s16, %vm1, 3584; CHECK-NEXT: st %s16, 312(, %s17)585; CHECK-NEXT: ld %s19, 56(, %s9) # 8-byte Folded Reload586; CHECK-NEXT: ld %s18, 48(, %s9) # 8-byte Folded Reload587; CHECK-NEXT: or %s11, 0, %s9588; CHECK-NEXT: ld %s17, 40(, %s11)589; CHECK-NEXT: ld %s10, 8(, %s11)590; CHECK-NEXT: ld %s9, (, %s11)591; CHECK-NEXT: b.l.t (, %s10)592 %3 = alloca <256 x i1>, align 32593 call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %3)594 %4 = alloca <256 x i1>, i64 %1, align 8595 tail call fastcc void @dummy()596 tail call fastcc void @pass(i64 noundef %1)597 store volatile <256 x i1> %0, ptr %4, align 32, !tbaa !3598 store volatile <256 x i1> %0, ptr %3, align 32, !tbaa !3599 call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %3)600 ret void601}602 603declare fastcc void @dummy()604 605declare fastcc void @pass(i64 noundef)606 607; Function Attrs: argmemonly nofree nounwind608define fastcc void @store__vm512_stk(<512 x i1> noundef %0) {609; CHECK-LABEL: store__vm512_stk:610; CHECK: # %bb.0:611; CHECK-NEXT: st %s9, (, %s11)612; CHECK-NEXT: st %s10, 8(, %s11)613; CHECK-NEXT: or %s9, 0, %s11614; CHECK-NEXT: lea %s11, -256(, %s11)615; CHECK-NEXT: and %s11, %s11, (58)1616; CHECK-NEXT: brge.l.t %s11, %s8, .LBB8_2617; CHECK-NEXT: # %bb.1:618; CHECK-NEXT: ld %s61, 24(, %s14)619; CHECK-NEXT: or %s62, 0, %s0620; CHECK-NEXT: lea %s63, 315621; CHECK-NEXT: shm.l %s63, (%s61)622; CHECK-NEXT: shm.l %s8, 8(%s61)623; CHECK-NEXT: shm.l %s11, 16(%s61)624; CHECK-NEXT: monc625; CHECK-NEXT: or %s0, 0, %s62626; CHECK-NEXT: .LBB8_2:627; CHECK-NEXT: svm %s16, %vm3, 0628; CHECK-NEXT: st %s16, 192(, %s11)629; CHECK-NEXT: svm %s16, %vm3, 1630; CHECK-NEXT: st %s16, 200(, %s11)631; CHECK-NEXT: svm %s16, %vm3, 2632; CHECK-NEXT: st %s16, 208(, %s11)633; CHECK-NEXT: svm %s16, %vm3, 3634; CHECK-NEXT: st %s16, 216(, %s11)635; CHECK-NEXT: svm %s16, %vm2, 0636; CHECK-NEXT: st %s16, 224(, %s11)637; CHECK-NEXT: svm %s16, %vm2, 1638; CHECK-NEXT: st %s16, 232(, %s11)639; CHECK-NEXT: svm %s16, %vm2, 2640; CHECK-NEXT: st %s16, 240(, %s11)641; CHECK-NEXT: svm %s16, %vm2, 3642; CHECK-NEXT: st %s16, 248(, %s11)643; CHECK-NEXT: or %s11, 0, %s9644; CHECK-NEXT: ld %s10, 8(, %s11)645; CHECK-NEXT: ld %s9, (, %s11)646; CHECK-NEXT: b.l.t (, %s10)647 %2 = alloca <512 x i1>, align 64648 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2)649 store volatile <512 x i1> %0, ptr %2, align 64, !tbaa !3650 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2)651 ret void652}653 654; Function Attrs: argmemonly nofree nounwind655define fastcc void @store__vm512_stk_bc(<512 x i1> noundef %0) {656; CHECK-LABEL: store__vm512_stk_bc:657; CHECK: # %bb.0:658; CHECK-NEXT: st %s9, (, %s11)659; CHECK-NEXT: st %s10, 8(, %s11)660; CHECK-NEXT: or %s9, 0, %s11661; CHECK-NEXT: lea %s11, -320(, %s11)662; CHECK-NEXT: and %s11, %s11, (58)1663; CHECK-NEXT: brge.l.t %s11, %s8, .LBB9_2664; CHECK-NEXT: # %bb.1:665; CHECK-NEXT: ld %s61, 24(, %s14)666; CHECK-NEXT: or %s62, 0, %s0667; CHECK-NEXT: lea %s63, 315668; CHECK-NEXT: shm.l %s63, (%s61)669; CHECK-NEXT: shm.l %s8, 8(%s61)670; CHECK-NEXT: shm.l %s11, 16(%s61)671; CHECK-NEXT: monc672; CHECK-NEXT: or %s0, 0, %s62673; CHECK-NEXT: .LBB9_2:674; CHECK-NEXT: svm %s16, %vm3, 0675; CHECK-NEXT: st %s16, 192(, %s11)676; CHECK-NEXT: svm %s16, %vm3, 1677; CHECK-NEXT: st %s16, 200(, %s11)678; CHECK-NEXT: svm %s16, %vm3, 2679; CHECK-NEXT: st %s16, 208(, %s11)680; CHECK-NEXT: svm %s16, %vm3, 3681; CHECK-NEXT: st %s16, 216(, %s11)682; CHECK-NEXT: svm %s16, %vm2, 0683; CHECK-NEXT: st %s16, 224(, %s11)684; CHECK-NEXT: svm %s16, %vm2, 1685; CHECK-NEXT: st %s16, 232(, %s11)686; CHECK-NEXT: svm %s16, %vm2, 2687; CHECK-NEXT: st %s16, 240(, %s11)688; CHECK-NEXT: svm %s16, %vm2, 3689; CHECK-NEXT: st %s16, 248(, %s11)690; CHECK-NEXT: ld %s0, 192(, %s11)691; CHECK-NEXT: ld %s1, 200(, %s11)692; CHECK-NEXT: ld %s2, 208(, %s11)693; CHECK-NEXT: ld %s3, 216(, %s11)694; CHECK-NEXT: ld %s4, 248(, %s11)695; CHECK-NEXT: ld %s5, 240(, %s11)696; CHECK-NEXT: ld %s6, 232(, %s11)697; CHECK-NEXT: ld %s7, 224(, %s11)698; CHECK-NEXT: st %s4, 312(, %s11)699; CHECK-NEXT: st %s5, 304(, %s11)700; CHECK-NEXT: st %s6, 296(, %s11)701; CHECK-NEXT: st %s7, 288(, %s11)702; CHECK-NEXT: st %s3, 280(, %s11)703; CHECK-NEXT: st %s2, 272(, %s11)704; CHECK-NEXT: st %s1, 264(, %s11)705; CHECK-NEXT: st %s0, 256(, %s11)706; CHECK-NEXT: or %s11, 0, %s9707; CHECK-NEXT: ld %s10, 8(, %s11)708; CHECK-NEXT: ld %s9, (, %s11)709; CHECK-NEXT: b.l.t (, %s10)710 %2 = alloca i512, align 64711 %3 = bitcast <512 x i1> %0 to i512712 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2)713 store volatile i512 %3, ptr %2, align 64, !tbaa !3714 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2)715 ret void716}717 718; Function Attrs: argmemonly nofree nounwind719define fastcc void @store__vm512_stk_big(<512 x i1> noundef %0, i64 noundef %1) {720; CHECK-LABEL: store__vm512_stk_big:721; CHECK: # %bb.0:722; CHECK-NEXT: st %s9, (, %s11)723; CHECK-NEXT: st %s10, 8(, %s11)724; CHECK-NEXT: or %s9, 0, %s11725; CHECK-NEXT: lea %s13, 2147483392726; CHECK-NEXT: and %s13, %s13, (32)0727; CHECK-NEXT: lea.sl %s11, -1(%s13, %s11)728; CHECK-NEXT: and %s11, %s11, (58)1729; CHECK-NEXT: brge.l %s11, %s8, .LBB10_4730; CHECK-NEXT: # %bb.3:731; CHECK-NEXT: ld %s61, 24(, %s14)732; CHECK-NEXT: or %s62, 0, %s0733; CHECK-NEXT: lea %s63, 315734; CHECK-NEXT: shm.l %s63, (%s61)735; CHECK-NEXT: shm.l %s8, 8(%s61)736; CHECK-NEXT: shm.l %s11, 16(%s61)737; CHECK-NEXT: monc738; CHECK-NEXT: or %s0, 0, %s62739; CHECK-NEXT: .LBB10_4:740; CHECK-NEXT: lea %s13, -2147483456741; CHECK-NEXT: and %s13, %s13, (32)0742; CHECK-NEXT: lea.sl %s13, (%s11, %s13)743; CHECK-NEXT: svm %s16, %vm3, 0744; CHECK-NEXT: st %s16, (, %s13)745; CHECK-NEXT: svm %s16, %vm3, 1746; CHECK-NEXT: st %s16, 8(, %s13)747; CHECK-NEXT: svm %s16, %vm3, 2748; CHECK-NEXT: st %s16, 16(, %s13)749; CHECK-NEXT: svm %s16, %vm3, 3750; CHECK-NEXT: st %s16, 24(, %s13)751; CHECK-NEXT: svm %s16, %vm2, 0752; CHECK-NEXT: st %s16, 32(, %s13)753; CHECK-NEXT: svm %s16, %vm2, 1754; CHECK-NEXT: st %s16, 40(, %s13)755; CHECK-NEXT: svm %s16, %vm2, 2756; CHECK-NEXT: st %s16, 48(, %s13)757; CHECK-NEXT: svm %s16, %vm2, 3758; CHECK-NEXT: st %s16, 56(, %s13)759; CHECK-NEXT: or %s1, 0, (0)1760; CHECK-NEXT: lea %s2, 2147483640761; CHECK-NEXT: .LBB10_1: # =>This Inner Loop Header: Depth=1762; CHECK-NEXT: st %s0, 200(%s1, %s11)763; CHECK-NEXT: lea %s1, 8(, %s1)764; CHECK-NEXT: brne.l %s1, %s2, .LBB10_1765; CHECK-NEXT: # %bb.2:766; CHECK-NEXT: or %s11, 0, %s9767; CHECK-NEXT: ld %s10, 8(, %s11)768; CHECK-NEXT: ld %s9, (, %s11)769; CHECK-NEXT: b.l.t (, %s10)770 %3 = alloca <512 x i1>, align 64771 %4 = alloca [268435455 x i64], align 8772 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3)773 call void @llvm.lifetime.start.p0(i64 2147483640, ptr nonnull %4)774 store volatile <512 x i1> %0, ptr %3, align 64, !tbaa !3775 br label %6776 7775: ; preds = %6778 call void @llvm.lifetime.end.p0(i64 2147483640, ptr nonnull %4)779 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3)780 ret void781 7826: ; preds = %2, %6783 %7 = phi i64 [ 0, %2 ], [ %9, %6 ]784 %8 = getelementptr inbounds [268435455 x i64], ptr %4, i64 0, i64 %7785 store volatile i64 %1, ptr %8, align 8, !tbaa !6786 %9 = add nuw nsw i64 %7, 1787 %10 = icmp eq i64 %9, 268435455788 br i1 %10, label %5, label %6, !llvm.loop !11789}790 791; Function Attrs: argmemonly nofree nounwind792define fastcc void @store__vm512_stk_big2(<512 x i1> noundef %0, i64 noundef %1) {793; CHECK-LABEL: store__vm512_stk_big2:794; CHECK: # %bb.0:795; CHECK-NEXT: st %s9, (, %s11)796; CHECK-NEXT: st %s10, 8(, %s11)797; CHECK-NEXT: or %s9, 0, %s11798; CHECK-NEXT: lea %s13, 2147483392799; CHECK-NEXT: and %s13, %s13, (32)0800; CHECK-NEXT: lea.sl %s11, -1(%s13, %s11)801; CHECK-NEXT: and %s11, %s11, (58)1802; CHECK-NEXT: brge.l %s11, %s8, .LBB11_4803; CHECK-NEXT: # %bb.3:804; CHECK-NEXT: ld %s61, 24(, %s14)805; CHECK-NEXT: or %s62, 0, %s0806; CHECK-NEXT: lea %s63, 315807; CHECK-NEXT: shm.l %s63, (%s61)808; CHECK-NEXT: shm.l %s8, 8(%s61)809; CHECK-NEXT: shm.l %s11, 16(%s61)810; CHECK-NEXT: monc811; CHECK-NEXT: or %s0, 0, %s62812; CHECK-NEXT: .LBB11_4:813; CHECK-NEXT: lea %s13, -2147483456814; CHECK-NEXT: and %s13, %s13, (32)0815; CHECK-NEXT: lea.sl %s13, (%s11, %s13)816; CHECK-NEXT: svm %s16, %vm3, 0817; CHECK-NEXT: st %s16, (, %s13)818; CHECK-NEXT: svm %s16, %vm3, 1819; CHECK-NEXT: st %s16, 8(, %s13)820; CHECK-NEXT: svm %s16, %vm3, 2821; CHECK-NEXT: st %s16, 16(, %s13)822; CHECK-NEXT: svm %s16, %vm3, 3823; CHECK-NEXT: st %s16, 24(, %s13)824; CHECK-NEXT: svm %s16, %vm2, 0825; CHECK-NEXT: st %s16, 32(, %s13)826; CHECK-NEXT: svm %s16, %vm2, 1827; CHECK-NEXT: st %s16, 40(, %s13)828; CHECK-NEXT: svm %s16, %vm2, 2829; CHECK-NEXT: st %s16, 48(, %s13)830; CHECK-NEXT: svm %s16, %vm2, 3831; CHECK-NEXT: st %s16, 56(, %s13)832; CHECK-NEXT: or %s1, 0, (0)1833; CHECK-NEXT: lea %s2, -2147483648834; CHECK-NEXT: and %s2, %s2, (32)0835; CHECK-NEXT: .LBB11_1: # =>This Inner Loop Header: Depth=1836; CHECK-NEXT: st %s0, 192(%s1, %s11)837; CHECK-NEXT: lea %s1, 8(, %s1)838; CHECK-NEXT: brne.l %s1, %s2, .LBB11_1839; CHECK-NEXT: # %bb.2:840; CHECK-NEXT: or %s11, 0, %s9841; CHECK-NEXT: ld %s10, 8(, %s11)842; CHECK-NEXT: ld %s9, (, %s11)843; CHECK-NEXT: b.l.t (, %s10)844 %3 = alloca <512 x i1>, align 64845 %4 = alloca [268435456 x i64], align 8846 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3)847 call void @llvm.lifetime.start.p0(i64 2147483648, ptr nonnull %4)848 store volatile <512 x i1> %0, ptr %3, align 64, !tbaa !3849 br label %6850 8515: ; preds = %6852 call void @llvm.lifetime.end.p0(i64 2147483648, ptr nonnull %4)853 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3)854 ret void855 8566: ; preds = %2, %6857 %7 = phi i64 [ 0, %2 ], [ %9, %6 ]858 %8 = getelementptr inbounds [268435456 x i64], ptr %4, i64 0, i64 %7859 store volatile i64 %1, ptr %8, align 8, !tbaa !6860 %9 = add nuw nsw i64 %7, 1861 %10 = icmp eq i64 %9, 268435456862 br i1 %10, label %5, label %6, !llvm.loop !12863}864 865; Function Attrs: argmemonly nofree nounwind866define fastcc void @store__vm512_stk_dyn(<512 x i1> noundef %0, i64 noundef %1) {867; CHECK-LABEL: store__vm512_stk_dyn:868; CHECK: # %bb.0:869; CHECK-NEXT: st %s9, (, %s11)870; CHECK-NEXT: st %s10, 8(, %s11)871; CHECK-NEXT: st %s17, 40(, %s11)872; CHECK-NEXT: or %s9, 0, %s11873; CHECK-NEXT: lea %s11, -320(, %s11)874; CHECK-NEXT: and %s11, %s11, (58)1875; CHECK-NEXT: or %s17, 0, %s11876; CHECK-NEXT: brge.l.t %s11, %s8, .LBB12_2877; CHECK-NEXT: # %bb.1:878; CHECK-NEXT: ld %s61, 24(, %s14)879; CHECK-NEXT: or %s62, 0, %s0880; CHECK-NEXT: lea %s63, 315881; CHECK-NEXT: shm.l %s63, (%s61)882; CHECK-NEXT: shm.l %s8, 8(%s61)883; CHECK-NEXT: shm.l %s11, 16(%s61)884; CHECK-NEXT: monc885; CHECK-NEXT: or %s0, 0, %s62886; CHECK-NEXT: .LBB12_2:887; CHECK-NEXT: sll %s0, %s0, 6888; CHECK-NEXT: lea %s1, __ve_grow_stack@lo889; CHECK-NEXT: and %s1, %s1, (32)0890; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)891; CHECK-NEXT: bsic %s10, (, %s12)892; CHECK-NEXT: lea %s0, 240(, %s11)893; CHECK-NEXT: svm %s1, %vm2, 3894; CHECK-NEXT: st %s1, 56(, %s0)895; CHECK-NEXT: svm %s1, %vm2, 2896; CHECK-NEXT: st %s1, 48(, %s0)897; CHECK-NEXT: svm %s1, %vm2, 1898; CHECK-NEXT: st %s1, 40(, %s0)899; CHECK-NEXT: svm %s1, %vm2, 0900; CHECK-NEXT: st %s1, 32(, %s0)901; CHECK-NEXT: svm %s1, %vm3, 3902; CHECK-NEXT: st %s1, 24(, %s0)903; CHECK-NEXT: svm %s1, %vm3, 2904; CHECK-NEXT: st %s1, 16(, %s0)905; CHECK-NEXT: svm %s1, %vm3, 1906; CHECK-NEXT: st %s1, 8(, %s0)907; CHECK-NEXT: svm %s1, %vm3, 0908; CHECK-NEXT: st %s1, (, %s0)909; CHECK-NEXT: svm %s16, %vm3, 0910; CHECK-NEXT: st %s16, 256(, %s17)911; CHECK-NEXT: svm %s16, %vm3, 1912; CHECK-NEXT: st %s16, 264(, %s17)913; CHECK-NEXT: svm %s16, %vm3, 2914; CHECK-NEXT: st %s16, 272(, %s17)915; CHECK-NEXT: svm %s16, %vm3, 3916; CHECK-NEXT: st %s16, 280(, %s17)917; CHECK-NEXT: svm %s16, %vm2, 0918; CHECK-NEXT: st %s16, 288(, %s17)919; CHECK-NEXT: svm %s16, %vm2, 1920; CHECK-NEXT: st %s16, 296(, %s17)921; CHECK-NEXT: svm %s16, %vm2, 2922; CHECK-NEXT: st %s16, 304(, %s17)923; CHECK-NEXT: svm %s16, %vm2, 3924; CHECK-NEXT: st %s16, 312(, %s17)925; CHECK-NEXT: or %s11, 0, %s9926; CHECK-NEXT: ld %s17, 40(, %s11)927; CHECK-NEXT: ld %s10, 8(, %s11)928; CHECK-NEXT: ld %s9, (, %s11)929; CHECK-NEXT: b.l.t (, %s10)930 %3 = alloca <512 x i1>, align 64931 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3)932 %4 = alloca <512 x i1>, i64 %1, align 8933 store volatile <512 x i1> %0, ptr %4, align 64, !tbaa !3934 store volatile <512 x i1> %0, ptr %3, align 64, !tbaa !3935 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3)936 ret void937}938 939; Function Attrs: argmemonly nofree nounwind940define fastcc void @store__vm512_stk_dyn_align(<512 x i1> noundef %0, i64 noundef %1) {941; CHECK-LABEL: store__vm512_stk_dyn_align:942; CHECK: # %bb.0:943; CHECK-NEXT: st %s9, (, %s11)944; CHECK-NEXT: st %s10, 8(, %s11)945; CHECK-NEXT: st %s17, 40(, %s11)946; CHECK-NEXT: or %s9, 0, %s11947; CHECK-NEXT: lea %s11, -320(, %s11)948; CHECK-NEXT: and %s11, %s11, (59)1949; CHECK-NEXT: or %s17, 0, %s11950; CHECK-NEXT: brge.l.t %s11, %s8, .LBB13_2951; CHECK-NEXT: # %bb.1:952; CHECK-NEXT: ld %s61, 24(, %s14)953; CHECK-NEXT: or %s62, 0, %s0954; CHECK-NEXT: lea %s63, 315955; CHECK-NEXT: shm.l %s63, (%s61)956; CHECK-NEXT: shm.l %s8, 8(%s61)957; CHECK-NEXT: shm.l %s11, 16(%s61)958; CHECK-NEXT: monc959; CHECK-NEXT: or %s0, 0, %s62960; CHECK-NEXT: .LBB13_2:961; CHECK-NEXT: sll %s0, %s0, 6962; CHECK-NEXT: lea %s1, __ve_grow_stack@lo963; CHECK-NEXT: and %s1, %s1, (32)0964; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)965; CHECK-NEXT: bsic %s10, (, %s12)966; CHECK-NEXT: lea %s0, 240(, %s11)967; CHECK-NEXT: svm %s1, %vm2, 3968; CHECK-NEXT: st %s1, 56(, %s0)969; CHECK-NEXT: svm %s1, %vm2, 2970; CHECK-NEXT: st %s1, 48(, %s0)971; CHECK-NEXT: svm %s1, %vm2, 1972; CHECK-NEXT: st %s1, 40(, %s0)973; CHECK-NEXT: svm %s1, %vm2, 0974; CHECK-NEXT: st %s1, 32(, %s0)975; CHECK-NEXT: svm %s1, %vm3, 3976; CHECK-NEXT: st %s1, 24(, %s0)977; CHECK-NEXT: svm %s1, %vm3, 2978; CHECK-NEXT: st %s1, 16(, %s0)979; CHECK-NEXT: svm %s1, %vm3, 1980; CHECK-NEXT: st %s1, 8(, %s0)981; CHECK-NEXT: svm %s1, %vm3, 0982; CHECK-NEXT: st %s1, (, %s0)983; CHECK-NEXT: svm %s16, %vm3, 0984; CHECK-NEXT: st %s16, 256(, %s17)985; CHECK-NEXT: svm %s16, %vm3, 1986; CHECK-NEXT: st %s16, 264(, %s17)987; CHECK-NEXT: svm %s16, %vm3, 2988; CHECK-NEXT: st %s16, 272(, %s17)989; CHECK-NEXT: svm %s16, %vm3, 3990; CHECK-NEXT: st %s16, 280(, %s17)991; CHECK-NEXT: svm %s16, %vm2, 0992; CHECK-NEXT: st %s16, 288(, %s17)993; CHECK-NEXT: svm %s16, %vm2, 1994; CHECK-NEXT: st %s16, 296(, %s17)995; CHECK-NEXT: svm %s16, %vm2, 2996; CHECK-NEXT: st %s16, 304(, %s17)997; CHECK-NEXT: svm %s16, %vm2, 3998; CHECK-NEXT: st %s16, 312(, %s17)999; CHECK-NEXT: or %s11, 0, %s91000; CHECK-NEXT: ld %s17, 40(, %s11)1001; CHECK-NEXT: ld %s10, 8(, %s11)1002; CHECK-NEXT: ld %s9, (, %s11)1003; CHECK-NEXT: b.l.t (, %s10)1004 %3 = alloca <512 x i1>, align 321005 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3)1006 %4 = alloca <512 x i1>, i64 %1, align 81007 store volatile <512 x i1> %0, ptr %4, align 64, !tbaa !31008 store volatile <512 x i1> %0, ptr %3, align 32, !tbaa !31009 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3)1010 ret void1011}1012 1013; Function Attrs: argmemonly nofree nounwind1014define fastcc void @store__vm512_stk_dyn_align2(<512 x i1> noundef %0, i64 noundef %1) {1015; CHECK-LABEL: store__vm512_stk_dyn_align2:1016; CHECK: # %bb.0:1017; CHECK-NEXT: st %s9, (, %s11)1018; CHECK-NEXT: st %s10, 8(, %s11)1019; CHECK-NEXT: st %s17, 40(, %s11)1020; CHECK-NEXT: or %s9, 0, %s111021; CHECK-NEXT: lea %s11, -384(, %s11)1022; CHECK-NEXT: and %s11, %s11, (58)11023; CHECK-NEXT: or %s17, 0, %s111024; CHECK-NEXT: brge.l.t %s11, %s8, .LBB14_21025; CHECK-NEXT: # %bb.1:1026; CHECK-NEXT: ld %s61, 24(, %s14)1027; CHECK-NEXT: or %s62, 0, %s01028; CHECK-NEXT: lea %s63, 3151029; CHECK-NEXT: shm.l %s63, (%s61)1030; CHECK-NEXT: shm.l %s8, 8(%s61)1031; CHECK-NEXT: shm.l %s11, 16(%s61)1032; CHECK-NEXT: monc1033; CHECK-NEXT: or %s0, 0, %s621034; CHECK-NEXT: .LBB14_2:1035; CHECK-NEXT: lea %s0, 15(, %s0)1036; CHECK-NEXT: and %s0, -16, %s01037; CHECK-NEXT: lea %s1, __ve_grow_stack@lo1038; CHECK-NEXT: and %s1, %s1, (32)01039; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)1040; CHECK-NEXT: bsic %s10, (, %s12)1041; CHECK-NEXT: lea %s0, 240(, %s11)1042; CHECK-NEXT: svm %s1, %vm2, 31043; CHECK-NEXT: st %s1, 56(, %s0)1044; CHECK-NEXT: svm %s1, %vm2, 21045; CHECK-NEXT: st %s1, 48(, %s0)1046; CHECK-NEXT: svm %s1, %vm2, 11047; CHECK-NEXT: st %s1, 40(, %s0)1048; CHECK-NEXT: svm %s1, %vm2, 01049; CHECK-NEXT: st %s1, 32(, %s0)1050; CHECK-NEXT: svm %s1, %vm3, 31051; CHECK-NEXT: st %s1, 24(, %s0)1052; CHECK-NEXT: svm %s1, %vm3, 21053; CHECK-NEXT: st %s1, 16(, %s0)1054; CHECK-NEXT: svm %s1, %vm3, 11055; CHECK-NEXT: st %s1, 8(, %s0)1056; CHECK-NEXT: svm %s1, %vm3, 01057; CHECK-NEXT: st %s1, (, %s0)1058; CHECK-NEXT: svm %s16, %vm3, 01059; CHECK-NEXT: st %s16, 320(, %s17)1060; CHECK-NEXT: svm %s16, %vm3, 11061; CHECK-NEXT: st %s16, 328(, %s17)1062; CHECK-NEXT: svm %s16, %vm3, 21063; CHECK-NEXT: st %s16, 336(, %s17)1064; CHECK-NEXT: svm %s16, %vm3, 31065; CHECK-NEXT: st %s16, 344(, %s17)1066; CHECK-NEXT: svm %s16, %vm2, 01067; CHECK-NEXT: st %s16, 352(, %s17)1068; CHECK-NEXT: svm %s16, %vm2, 11069; CHECK-NEXT: st %s16, 360(, %s17)1070; CHECK-NEXT: svm %s16, %vm2, 21071; CHECK-NEXT: st %s16, 368(, %s17)1072; CHECK-NEXT: svm %s16, %vm2, 31073; CHECK-NEXT: st %s16, 376(, %s17)1074; CHECK-NEXT: svm %s16, %vm3, 01075; CHECK-NEXT: st %s16, 256(, %s17)1076; CHECK-NEXT: svm %s16, %vm3, 11077; CHECK-NEXT: st %s16, 264(, %s17)1078; CHECK-NEXT: svm %s16, %vm3, 21079; CHECK-NEXT: st %s16, 272(, %s17)1080; CHECK-NEXT: svm %s16, %vm3, 31081; CHECK-NEXT: st %s16, 280(, %s17)1082; CHECK-NEXT: svm %s16, %vm2, 01083; CHECK-NEXT: st %s16, 288(, %s17)1084; CHECK-NEXT: svm %s16, %vm2, 11085; CHECK-NEXT: st %s16, 296(, %s17)1086; CHECK-NEXT: svm %s16, %vm2, 21087; CHECK-NEXT: st %s16, 304(, %s17)1088; CHECK-NEXT: svm %s16, %vm2, 31089; CHECK-NEXT: st %s16, 312(, %s17)1090; CHECK-NEXT: or %s11, 0, %s91091; CHECK-NEXT: ld %s17, 40(, %s11)1092; CHECK-NEXT: ld %s10, 8(, %s11)1093; CHECK-NEXT: ld %s9, (, %s11)1094; CHECK-NEXT: b.l.t (, %s10)1095 %3 = alloca <512 x i1>, align 321096 %4 = alloca <512 x i1>, align 641097 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3)1098 %5 = alloca i8, i64 %1, align 81099 store volatile <512 x i1> %0, ptr %5, align 64, !tbaa !31100 store volatile <512 x i1> %0, ptr %3, align 32, !tbaa !31101 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %4)1102 store volatile <512 x i1> %0, ptr %4, align 64, !tbaa !31103 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %4)1104 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3)1105 ret void1106}1107 1108; Function Attrs: nounwind1109define fastcc void @store__vm512_stk_dyn_align_spill(<512 x i1> noundef %0, i64 noundef %1) {1110; CHECK-LABEL: store__vm512_stk_dyn_align_spill:1111; CHECK: # %bb.0:1112; CHECK-NEXT: st %s9, (, %s11)1113; CHECK-NEXT: st %s10, 8(, %s11)1114; CHECK-NEXT: st %s17, 40(, %s11)1115; CHECK-NEXT: or %s9, 0, %s111116; CHECK-NEXT: lea %s11, -384(, %s11)1117; CHECK-NEXT: and %s11, %s11, (59)11118; CHECK-NEXT: or %s17, 0, %s111119; CHECK-NEXT: brge.l.t %s11, %s8, .LBB15_21120; CHECK-NEXT: # %bb.1:1121; CHECK-NEXT: ld %s61, 24(, %s14)1122; CHECK-NEXT: or %s62, 0, %s01123; CHECK-NEXT: lea %s63, 3151124; CHECK-NEXT: shm.l %s63, (%s61)1125; CHECK-NEXT: shm.l %s8, 8(%s61)1126; CHECK-NEXT: shm.l %s11, 16(%s61)1127; CHECK-NEXT: monc1128; CHECK-NEXT: or %s0, 0, %s621129; CHECK-NEXT: .LBB15_2:1130; CHECK-NEXT: st %s18, 48(, %s9) # 8-byte Folded Spill1131; CHECK-NEXT: st %s19, 56(, %s9) # 8-byte Folded Spill1132; CHECK-NEXT: or %s18, 0, %s01133; CHECK-NEXT: svm %s16, %vm3, 01134; CHECK-NEXT: st %s16, 256(, %s17)1135; CHECK-NEXT: svm %s16, %vm3, 11136; CHECK-NEXT: st %s16, 264(, %s17)1137; CHECK-NEXT: svm %s16, %vm3, 21138; CHECK-NEXT: st %s16, 272(, %s17)1139; CHECK-NEXT: svm %s16, %vm3, 31140; CHECK-NEXT: st %s16, 280(, %s17)1141; CHECK-NEXT: svm %s16, %vm2, 01142; CHECK-NEXT: st %s16, 288(, %s17)1143; CHECK-NEXT: svm %s16, %vm2, 11144; CHECK-NEXT: st %s16, 296(, %s17)1145; CHECK-NEXT: svm %s16, %vm2, 21146; CHECK-NEXT: st %s16, 304(, %s17)1147; CHECK-NEXT: svm %s16, %vm2, 31148; CHECK-NEXT: st %s16, 312(, %s17) # 64-byte Folded Spill1149; CHECK-NEXT: sll %s0, %s0, 61150; CHECK-NEXT: lea %s1, __ve_grow_stack@lo1151; CHECK-NEXT: and %s1, %s1, (32)01152; CHECK-NEXT: lea.sl %s12, __ve_grow_stack@hi(, %s1)1153; CHECK-NEXT: bsic %s10, (, %s12)1154; CHECK-NEXT: lea %s19, 240(, %s11)1155; CHECK-NEXT: lea %s0, dummy@lo1156; CHECK-NEXT: and %s0, %s0, (32)01157; CHECK-NEXT: lea.sl %s12, dummy@hi(, %s0)1158; CHECK-NEXT: bsic %s10, (, %s12)1159; CHECK-NEXT: lea %s0, pass@lo1160; CHECK-NEXT: and %s0, %s0, (32)01161; CHECK-NEXT: lea.sl %s12, pass@hi(, %s0)1162; CHECK-NEXT: or %s0, 0, %s181163; CHECK-NEXT: bsic %s10, (, %s12)1164; CHECK-NEXT: # implicit-def: $vmp11165; CHECK-NEXT: ld %s16, 256(, %s17)1166; CHECK-NEXT: lvm %vm3, 0, %s161167; CHECK-NEXT: ld %s16, 264(, %s17)1168; CHECK-NEXT: lvm %vm3, 1, %s161169; CHECK-NEXT: ld %s16, 272(, %s17)1170; CHECK-NEXT: lvm %vm3, 2, %s161171; CHECK-NEXT: ld %s16, 280(, %s17)1172; CHECK-NEXT: lvm %vm3, 3, %s161173; CHECK-NEXT: ld %s16, 288(, %s17)1174; CHECK-NEXT: lvm %vm2, 0, %s161175; CHECK-NEXT: ld %s16, 296(, %s17)1176; CHECK-NEXT: lvm %vm2, 1, %s161177; CHECK-NEXT: ld %s16, 304(, %s17)1178; CHECK-NEXT: lvm %vm2, 2, %s161179; CHECK-NEXT: ld %s16, 312(, %s17) # 64-byte Folded Reload1180; CHECK-NEXT: lvm %vm2, 3, %s161181; CHECK-NEXT: svm %s0, %vm2, 31182; CHECK-NEXT: st %s0, 56(, %s19)1183; CHECK-NEXT: svm %s0, %vm2, 21184; CHECK-NEXT: st %s0, 48(, %s19)1185; CHECK-NEXT: svm %s0, %vm2, 11186; CHECK-NEXT: st %s0, 40(, %s19)1187; CHECK-NEXT: svm %s0, %vm2, 01188; CHECK-NEXT: st %s0, 32(, %s19)1189; CHECK-NEXT: svm %s0, %vm3, 31190; CHECK-NEXT: st %s0, 24(, %s19)1191; CHECK-NEXT: svm %s0, %vm3, 21192; CHECK-NEXT: st %s0, 16(, %s19)1193; CHECK-NEXT: svm %s0, %vm3, 11194; CHECK-NEXT: st %s0, 8(, %s19)1195; CHECK-NEXT: svm %s0, %vm3, 01196; CHECK-NEXT: st %s0, (, %s19)1197; CHECK-NEXT: svm %s16, %vm3, 01198; CHECK-NEXT: st %s16, 320(, %s17)1199; CHECK-NEXT: svm %s16, %vm3, 11200; CHECK-NEXT: st %s16, 328(, %s17)1201; CHECK-NEXT: svm %s16, %vm3, 21202; CHECK-NEXT: st %s16, 336(, %s17)1203; CHECK-NEXT: svm %s16, %vm3, 31204; CHECK-NEXT: st %s16, 344(, %s17)1205; CHECK-NEXT: svm %s16, %vm2, 01206; CHECK-NEXT: st %s16, 352(, %s17)1207; CHECK-NEXT: svm %s16, %vm2, 11208; CHECK-NEXT: st %s16, 360(, %s17)1209; CHECK-NEXT: svm %s16, %vm2, 21210; CHECK-NEXT: st %s16, 368(, %s17)1211; CHECK-NEXT: svm %s16, %vm2, 31212; CHECK-NEXT: st %s16, 376(, %s17)1213; CHECK-NEXT: ld %s19, 56(, %s9) # 8-byte Folded Reload1214; CHECK-NEXT: ld %s18, 48(, %s9) # 8-byte Folded Reload1215; CHECK-NEXT: or %s11, 0, %s91216; CHECK-NEXT: ld %s17, 40(, %s11)1217; CHECK-NEXT: ld %s10, 8(, %s11)1218; CHECK-NEXT: ld %s9, (, %s11)1219; CHECK-NEXT: b.l.t (, %s10)1220 %3 = alloca <512 x i1>, align 321221 call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %3)1222 %4 = alloca <512 x i1>, i64 %1, align 81223 tail call fastcc void @dummy()1224 tail call fastcc void @pass(i64 noundef %1)1225 store volatile <512 x i1> %0, ptr %4, align 64, !tbaa !31226 store volatile <512 x i1> %0, ptr %3, align 32, !tbaa !31227 call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %3)1228 ret void1229}1230 1231!2 = !{!"clang version 15.0.0 (git@kaz7.github.com:sx-aurora-dev/llvm-project.git 6c510cbf7e17baa380bf8a181c3b43145fd50980)"}1232!3 = !{!4, !4, i64 0}1233!4 = !{!"omnipotent char", !5, i64 0}1234!5 = !{!"Simple C/C++ TBAA"}1235!6 = !{!7, !7, i64 0}1236!7 = !{!"long", !4, i64 0}1237!8 = distinct !{!8, !9}1238!9 = !{!"llvm.loop.mustprogress"}1239!10 = distinct !{!10, !9}1240!11 = distinct !{!11, !9}1241!12 = distinct !{!12, !9}1242