brintos

brintos / llvm-project-archived public Read only

0
0
Text · 29.9 KiB · 9ffab14 Raw
796 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=ve | 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 mustprogress nofree nounwind willreturn96define x86_fastcallcc i64 @loadi64_stk() {97; CHECK-LABEL: loadi64_stk:98; CHECK:       # %bb.0:99; CHECK-NEXT:    adds.l %s11, -16, %s11100; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB0_2101; CHECK-NEXT:  # %bb.1:102; CHECK-NEXT:    ld %s61, 24(, %s14)103; CHECK-NEXT:    or %s62, 0, %s0104; CHECK-NEXT:    lea %s63, 315105; CHECK-NEXT:    shm.l %s63, (%s61)106; CHECK-NEXT:    shm.l %s8, 8(%s61)107; CHECK-NEXT:    shm.l %s11, 16(%s61)108; CHECK-NEXT:    monc109; CHECK-NEXT:    or %s0, 0, %s62110; CHECK-NEXT:  .LBB0_2:111; CHECK-NEXT:    ld %s0, 8(, %s11)112; CHECK-NEXT:    adds.l %s11, 16, %s11113; CHECK-NEXT:    b.l.t (, %s10)114  %1 = alloca i64, align 8115  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %1)116  %2 = load volatile i64, ptr %1, align 8, !tbaa !3117  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %1)118  ret i64 %2119}120 121; Function Attrs: argmemonly mustprogress nocallback nofree nosync nounwind willreturn122declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture)123 124; Function Attrs: argmemonly mustprogress nocallback nofree nosync nounwind willreturn125declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture)126 127; Function Attrs: argmemonly nofree nounwind128define x86_fastcallcc i64 @loadi64_stk_big() {129; CHECK-LABEL: loadi64_stk_big:130; CHECK:       # %bb.0:131; CHECK-NEXT:    lea %s11, -2147483648(, %s11)132; CHECK-NEXT:    brge.l %s11, %s8, .LBB1_4133; CHECK-NEXT:  # %bb.3:134; CHECK-NEXT:    ld %s61, 24(, %s14)135; CHECK-NEXT:    or %s62, 0, %s0136; CHECK-NEXT:    lea %s63, 315137; CHECK-NEXT:    shm.l %s63, (%s61)138; CHECK-NEXT:    shm.l %s8, 8(%s61)139; CHECK-NEXT:    shm.l %s11, 16(%s61)140; CHECK-NEXT:    monc141; CHECK-NEXT:    or %s0, 0, %s62142; CHECK-NEXT:  .LBB1_4:143; CHECK-NEXT:    ld %s0, 2147483640(, %s11)144; CHECK-NEXT:    or %s1, 0, (0)1145; CHECK-NEXT:    lea %s2, 2147483640146; CHECK-NEXT:  .LBB1_1: # =>This Inner Loop Header: Depth=1147; CHECK-NEXT:    ld %s3, (%s1, %s11)148; CHECK-NEXT:    lea %s1, 8(, %s1)149; CHECK-NEXT:    brne.l %s1, %s2, .LBB1_1150; CHECK-NEXT:  # %bb.2:151; CHECK-NEXT:    lea %s13, -2147483648152; CHECK-NEXT:    and %s13, %s13, (32)0153; CHECK-NEXT:    lea.sl %s11, (%s13, %s11)154; CHECK-NEXT:    b.l.t (, %s10)155  %1 = alloca i64, align 8156  %2 = alloca [268435455 x i64], align 8157  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %1)158  call void @llvm.lifetime.start.p0(i64 2147483640, ptr nonnull %2)159  %3 = load volatile i64, ptr %1, align 8, !tbaa !3160  br label %5161 1624:                                                ; preds = %5163  call void @llvm.lifetime.end.p0(i64 2147483640, ptr nonnull %2)164  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %1)165  ret i64 %3166 1675:                                                ; preds = %0, %5168  %6 = phi i64 [ 0, %0 ], [ %9, %5 ]169  %7 = getelementptr inbounds [268435455 x i64], ptr %2, i64 0, i64 %6170  %8 = load volatile i64, ptr %7, align 8, !tbaa !3171  %9 = add nuw nsw i64 %6, 1172  %10 = icmp eq i64 %9, 268435455173  br i1 %10, label %4, label %5, !llvm.loop !7174}175 176; Function Attrs: argmemonly nofree nounwind177define x86_fastcallcc i64 @loadi64_stk_big2() {178; CHECK-LABEL: loadi64_stk_big2:179; CHECK:       # %bb.0:180; CHECK-NEXT:    lea %s13, 2147483632181; CHECK-NEXT:    and %s13, %s13, (32)0182; CHECK-NEXT:    lea.sl %s11, -1(%s13, %s11)183; CHECK-NEXT:    brge.l %s11, %s8, .LBB2_4184; CHECK-NEXT:  # %bb.3:185; CHECK-NEXT:    ld %s61, 24(, %s14)186; CHECK-NEXT:    or %s62, 0, %s0187; CHECK-NEXT:    lea %s63, 315188; CHECK-NEXT:    shm.l %s63, (%s61)189; CHECK-NEXT:    shm.l %s8, 8(%s61)190; CHECK-NEXT:    shm.l %s11, 16(%s61)191; CHECK-NEXT:    monc192; CHECK-NEXT:    or %s0, 0, %s62193; CHECK-NEXT:  .LBB2_4:194; CHECK-NEXT:    lea %s13, -2147483640195; CHECK-NEXT:    and %s13, %s13, (32)0196; CHECK-NEXT:    lea.sl %s13, (%s11, %s13)197; CHECK-NEXT:    ld %s0, (, %s13)198; CHECK-NEXT:    or %s1, 0, (0)1199; CHECK-NEXT:    lea %s2, -2147483648200; CHECK-NEXT:    and %s2, %s2, (32)0201; CHECK-NEXT:  .LBB2_1: # =>This Inner Loop Header: Depth=1202; CHECK-NEXT:    ld %s3, 8(%s1, %s11)203; CHECK-NEXT:    lea %s1, 8(, %s1)204; CHECK-NEXT:    brne.l %s1, %s2, .LBB2_1205; CHECK-NEXT:  # %bb.2:206; CHECK-NEXT:    lea %s13, -2147483632207; CHECK-NEXT:    and %s13, %s13, (32)0208; CHECK-NEXT:    lea.sl %s11, (%s13, %s11)209; CHECK-NEXT:    b.l.t (, %s10)210  %1 = alloca i64, align 8211  %2 = alloca [268435456 x i64], align 8212  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %1)213  call void @llvm.lifetime.start.p0(i64 2147483648, ptr nonnull %2)214  %3 = load volatile i64, ptr %1, align 8, !tbaa !3215  br label %5216 2174:                                                ; preds = %5218  call void @llvm.lifetime.end.p0(i64 2147483648, ptr nonnull %2)219  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %1)220  ret i64 %3221 2225:                                                ; preds = %0, %5223  %6 = phi i64 [ 0, %0 ], [ %9, %5 ]224  %7 = getelementptr inbounds [268435456 x i64], ptr %2, i64 0, i64 %6225  %8 = load volatile i64, ptr %7, align 8, !tbaa !3226  %9 = add nuw nsw i64 %6, 1227  %10 = icmp eq i64 %9, 268435456228  br i1 %10, label %4, label %5, !llvm.loop !9229}230 231; Function Attrs: argmemonly mustprogress nofree nounwind willreturn232define x86_fastcallcc i64 @loadi64_stk_dyn(i64 noundef %0) {233; CHECK-LABEL: loadi64_stk_dyn:234; CHECK:       # %bb.0:235; CHECK-NEXT:    st %s9, (, %s11)236; CHECK-NEXT:    st %s10, 8(, %s11)237; CHECK-NEXT:    or %s9, 0, %s11238; CHECK-NEXT:    lea %s11, -256(, %s11)239; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB3_2240; CHECK-NEXT:  # %bb.1:241; CHECK-NEXT:    ld %s61, 24(, %s14)242; CHECK-NEXT:    or %s62, 0, %s0243; CHECK-NEXT:    lea %s63, 315244; CHECK-NEXT:    shm.l %s63, (%s61)245; CHECK-NEXT:    shm.l %s8, 8(%s61)246; CHECK-NEXT:    shm.l %s11, 16(%s61)247; CHECK-NEXT:    monc248; CHECK-NEXT:    or %s0, 0, %s62249; CHECK-NEXT:  .LBB3_2:250; CHECK-NEXT:    lea %s0, 15(, %s0)251; CHECK-NEXT:    and %s0, -16, %s0252; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo253; CHECK-NEXT:    and %s1, %s1, (32)0254; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)255; CHECK-NEXT:    bsic %s10, (, %s12)256; CHECK-NEXT:    lea %s0, 240(, %s11)257; CHECK-NEXT:    ld %s0, (, %s0)258; CHECK-NEXT:    ld %s0, -8(, %s9)259; CHECK-NEXT:    or %s11, 0, %s9260; CHECK-NEXT:    ld %s10, 8(, %s11)261; CHECK-NEXT:    ld %s9, (, %s11)262; CHECK-NEXT:    b.l.t (, %s10)263  %2 = alloca i64, align 8264  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2)265  %3 = alloca i8, i64 %0, align 8266  %4 = load volatile i64, ptr %3, align 8, !tbaa !3267  %5 = load volatile i64, ptr %2, align 8, !tbaa !3268  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2)269  ret i64 %5270}271 272; Function Attrs: argmemonly mustprogress nofree nounwind willreturn273define x86_fastcallcc i64 @loadi64_stk_dyn_align(i64 noundef %0) {274; CHECK-LABEL: loadi64_stk_dyn_align:275; CHECK:       # %bb.0:276; CHECK-NEXT:    st %s9, (, %s11)277; CHECK-NEXT:    st %s10, 8(, %s11)278; CHECK-NEXT:    st %s17, 40(, %s11)279; CHECK-NEXT:    or %s9, 0, %s11280; CHECK-NEXT:    lea %s11, -288(, %s11)281; CHECK-NEXT:    and %s11, %s11, (59)1282; CHECK-NEXT:    or %s17, 0, %s11283; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB4_2284; CHECK-NEXT:  # %bb.1:285; CHECK-NEXT:    ld %s61, 24(, %s14)286; CHECK-NEXT:    or %s62, 0, %s0287; CHECK-NEXT:    lea %s63, 315288; CHECK-NEXT:    shm.l %s63, (%s61)289; CHECK-NEXT:    shm.l %s8, 8(%s61)290; CHECK-NEXT:    shm.l %s11, 16(%s61)291; CHECK-NEXT:    monc292; CHECK-NEXT:    or %s0, 0, %s62293; CHECK-NEXT:  .LBB4_2:294; CHECK-NEXT:    lea %s0, 15(, %s0)295; CHECK-NEXT:    and %s0, -16, %s0296; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo297; CHECK-NEXT:    and %s1, %s1, (32)0298; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)299; CHECK-NEXT:    bsic %s10, (, %s12)300; CHECK-NEXT:    lea %s0, 240(, %s11)301; CHECK-NEXT:    ld %s0, (, %s0)302; CHECK-NEXT:    ld %s0, 256(, %s17)303; CHECK-NEXT:    or %s11, 0, %s9304; CHECK-NEXT:    ld %s17, 40(, %s11)305; CHECK-NEXT:    ld %s10, 8(, %s11)306; CHECK-NEXT:    ld %s9, (, %s11)307; CHECK-NEXT:    b.l.t (, %s10)308  %2 = alloca i64, align 32309  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2)310  %3 = alloca i8, i64 %0, align 8311  %4 = load volatile i64, ptr %3, align 8, !tbaa !3312  %5 = load volatile i64, ptr %2, align 32, !tbaa !10313  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2)314  ret i64 %5315}316 317; Function Attrs: argmemonly mustprogress nofree nounwind willreturn318define x86_fastcallcc i64 @loadi64_stk_dyn_align2(i64 noundef %0) {319; CHECK-LABEL: loadi64_stk_dyn_align2:320; CHECK:       # %bb.0:321; CHECK-NEXT:    st %s9, (, %s11)322; CHECK-NEXT:    st %s10, 8(, %s11)323; CHECK-NEXT:    st %s17, 40(, %s11)324; CHECK-NEXT:    or %s9, 0, %s11325; CHECK-NEXT:    lea %s11, -320(, %s11)326; CHECK-NEXT:    and %s11, %s11, (58)1327; CHECK-NEXT:    or %s17, 0, %s11328; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB5_2329; CHECK-NEXT:  # %bb.1:330; CHECK-NEXT:    ld %s61, 24(, %s14)331; CHECK-NEXT:    or %s62, 0, %s0332; CHECK-NEXT:    lea %s63, 315333; CHECK-NEXT:    shm.l %s63, (%s61)334; CHECK-NEXT:    shm.l %s8, 8(%s61)335; CHECK-NEXT:    shm.l %s11, 16(%s61)336; CHECK-NEXT:    monc337; CHECK-NEXT:    or %s0, 0, %s62338; CHECK-NEXT:  .LBB5_2:339; CHECK-NEXT:    lea %s0, 15(, %s0)340; CHECK-NEXT:    and %s0, -16, %s0341; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo342; CHECK-NEXT:    and %s1, %s1, (32)0343; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)344; CHECK-NEXT:    bsic %s10, (, %s12)345; CHECK-NEXT:    lea %s0, 240(, %s11)346; CHECK-NEXT:    ld %s0, (, %s0)347; CHECK-NEXT:    ld %s0, 288(, %s17)348; CHECK-NEXT:    ld %s1, 256(, %s17)349; CHECK-NEXT:    or %s11, 0, %s9350; CHECK-NEXT:    ld %s17, 40(, %s11)351; CHECK-NEXT:    ld %s10, 8(, %s11)352; CHECK-NEXT:    ld %s9, (, %s11)353; CHECK-NEXT:    b.l.t (, %s10)354  %2 = alloca i64, align 32355  %3 = alloca i64, align 64356  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2)357  %4 = alloca i8, i64 %0, align 8358  %5 = load volatile i64, ptr %4, align 8, !tbaa !3359  %6 = load volatile i64, ptr %2, align 32, !tbaa !10360  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3)361  %7 = load volatile i64, ptr %3, align 64, !tbaa !10362  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3)363  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2)364  ret i64 %6365}366 367; Function Attrs: nounwind368define x86_fastcallcc i64 @loadi64_stk_dyn_align_spill(i64 noundef %0) {369; CHECK-LABEL: loadi64_stk_dyn_align_spill:370; CHECK:       # %bb.0:371; CHECK-NEXT:    st %s9, (, %s11)372; CHECK-NEXT:    st %s10, 8(, %s11)373; CHECK-NEXT:    st %s17, 40(, %s11)374; CHECK-NEXT:    or %s9, 0, %s11375; CHECK-NEXT:    lea %s11, -288(, %s11)376; CHECK-NEXT:    and %s11, %s11, (59)1377; CHECK-NEXT:    or %s17, 0, %s11378; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB6_2379; CHECK-NEXT:  # %bb.1:380; CHECK-NEXT:    ld %s61, 24(, %s14)381; CHECK-NEXT:    or %s62, 0, %s0382; CHECK-NEXT:    lea %s63, 315383; CHECK-NEXT:    shm.l %s63, (%s61)384; CHECK-NEXT:    shm.l %s8, 8(%s61)385; CHECK-NEXT:    shm.l %s11, 16(%s61)386; CHECK-NEXT:    monc387; CHECK-NEXT:    or %s0, 0, %s62388; CHECK-NEXT:  .LBB6_2:389; CHECK-NEXT:    st %s18, 48(, %s9) # 8-byte Folded Spill390; CHECK-NEXT:    st %s19, 56(, %s9) # 8-byte Folded Spill391; CHECK-NEXT:    or %s18, 0, %s0392; CHECK-NEXT:    lea %s0, 15(, %s0)393; CHECK-NEXT:    and %s0, -16, %s0394; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo395; CHECK-NEXT:    and %s1, %s1, (32)0396; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)397; CHECK-NEXT:    bsic %s10, (, %s12)398; CHECK-NEXT:    lea %s0, 240(, %s11)399; CHECK-NEXT:    ld %s0, (, %s0)400; CHECK-NEXT:    ld %s19, 256(, %s17)401; CHECK-NEXT:    lea %s0, dummy@lo402; CHECK-NEXT:    and %s0, %s0, (32)0403; CHECK-NEXT:    lea.sl %s12, dummy@hi(, %s0)404; CHECK-NEXT:    bsic %s10, (, %s12)405; CHECK-NEXT:    lea %s0, pass@lo406; CHECK-NEXT:    and %s0, %s0, (32)0407; CHECK-NEXT:    lea.sl %s12, pass@hi(, %s0)408; CHECK-NEXT:    or %s0, 0, %s18409; CHECK-NEXT:    bsic %s10, (, %s12)410; CHECK-NEXT:    or %s0, 0, %s19411; CHECK-NEXT:    ld %s19, 56(, %s9) # 8-byte Folded Reload412; CHECK-NEXT:    ld %s18, 48(, %s9) # 8-byte Folded Reload413; CHECK-NEXT:    or %s11, 0, %s9414; CHECK-NEXT:    ld %s17, 40(, %s11)415; CHECK-NEXT:    ld %s10, 8(, %s11)416; CHECK-NEXT:    ld %s9, (, %s11)417; CHECK-NEXT:    b.l.t (, %s10)418  %2 = alloca i64, align 32419  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %2)420  %3 = alloca i8, i64 %0, align 8421  %4 = load volatile i64, ptr %3, align 8, !tbaa !3422  %5 = load volatile i64, ptr %2, align 32, !tbaa !10423  tail call void (...) @dummy()424  tail call void @pass(i64 noundef %0)425  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %2)426  ret i64 %5427}428 429declare void @dummy(...)430 431declare void @pass(i64 noundef)432 433; Function Attrs: argmemonly mustprogress nofree nounwind willreturn434define x86_fastcallcc fp128 @loadquad_stk() {435; CHECK-LABEL: loadquad_stk:436; CHECK:       # %bb.0:437; CHECK-NEXT:    adds.l %s11, -16, %s11438; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB7_2439; CHECK-NEXT:  # %bb.1:440; CHECK-NEXT:    ld %s61, 24(, %s14)441; CHECK-NEXT:    or %s62, 0, %s0442; CHECK-NEXT:    lea %s63, 315443; CHECK-NEXT:    shm.l %s63, (%s61)444; CHECK-NEXT:    shm.l %s8, 8(%s61)445; CHECK-NEXT:    shm.l %s11, 16(%s61)446; CHECK-NEXT:    monc447; CHECK-NEXT:    or %s0, 0, %s62448; CHECK-NEXT:  .LBB7_2:449; CHECK-NEXT:    ld %s1, (, %s11)450; CHECK-NEXT:    ld %s0, 8(, %s11)451; CHECK-NEXT:    adds.l %s11, 16, %s11452; CHECK-NEXT:    b.l.t (, %s10)453  %1 = alloca fp128, align 16454  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %1)455  %2 = load volatile fp128, ptr %1, align 16, !tbaa !12456  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1)457  ret fp128 %2458}459 460; Function Attrs: argmemonly nofree nounwind461define x86_fastcallcc fp128 @loadquad_stk_big() {462; CHECK-LABEL: loadquad_stk_big:463; CHECK:       # %bb.0:464; CHECK-NEXT:    lea %s13, 2147483632465; CHECK-NEXT:    and %s13, %s13, (32)0466; CHECK-NEXT:    lea.sl %s11, -1(%s13, %s11)467; CHECK-NEXT:    brge.l %s11, %s8, .LBB8_4468; CHECK-NEXT:  # %bb.3:469; CHECK-NEXT:    ld %s61, 24(, %s14)470; CHECK-NEXT:    or %s62, 0, %s0471; CHECK-NEXT:    lea %s63, 315472; CHECK-NEXT:    shm.l %s63, (%s61)473; CHECK-NEXT:    shm.l %s8, 8(%s61)474; CHECK-NEXT:    shm.l %s11, 16(%s61)475; CHECK-NEXT:    monc476; CHECK-NEXT:    or %s0, 0, %s62477; CHECK-NEXT:  .LBB8_4:478; CHECK-NEXT:    lea %s13, -2147483648479; CHECK-NEXT:    and %s13, %s13, (32)0480; CHECK-NEXT:    lea.sl %s13, (%s11, %s13)481; CHECK-NEXT:    ld %s1, (, %s13)482; CHECK-NEXT:    ld %s0, 8(, %s13)483; CHECK-NEXT:    or %s2, 0, (0)1484; CHECK-NEXT:    lea %s3, 2147483640485; CHECK-NEXT:  .LBB8_1: # =>This Inner Loop Header: Depth=1486; CHECK-NEXT:    ld %s4, 8(%s2, %s11)487; CHECK-NEXT:    lea %s2, 8(, %s2)488; CHECK-NEXT:    brne.l %s2, %s3, .LBB8_1489; CHECK-NEXT:  # %bb.2:490; CHECK-NEXT:    lea %s13, -2147483632491; CHECK-NEXT:    and %s13, %s13, (32)0492; CHECK-NEXT:    lea.sl %s11, (%s13, %s11)493; CHECK-NEXT:    b.l.t (, %s10)494  %1 = alloca fp128, align 16495  %2 = alloca [268435455 x i64], align 8496  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %1)497  call void @llvm.lifetime.start.p0(i64 2147483640, ptr nonnull %2)498  %3 = load volatile fp128, ptr %1, align 16, !tbaa !12499  br label %5500 5014:                                                ; preds = %5502  call void @llvm.lifetime.end.p0(i64 2147483640, ptr nonnull %2)503  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1)504  ret fp128 %3505 5065:                                                ; preds = %0, %5507  %6 = phi i64 [ 0, %0 ], [ %9, %5 ]508  %7 = getelementptr inbounds [268435455 x i64], ptr %2, i64 0, i64 %6509  %8 = load volatile i64, ptr %7, align 8, !tbaa !3510  %9 = add nuw nsw i64 %6, 1511  %10 = icmp eq i64 %9, 268435455512  br i1 %10, label %4, label %5, !llvm.loop !14513}514 515; Function Attrs: argmemonly nofree nounwind516define x86_fastcallcc fp128 @loadquad_stk_big2() {517; CHECK-LABEL: loadquad_stk_big2:518; CHECK:       # %bb.0:519; CHECK-NEXT:    lea %s13, 2147483632520; CHECK-NEXT:    and %s13, %s13, (32)0521; CHECK-NEXT:    lea.sl %s11, -1(%s13, %s11)522; CHECK-NEXT:    brge.l %s11, %s8, .LBB9_4523; CHECK-NEXT:  # %bb.3:524; CHECK-NEXT:    ld %s61, 24(, %s14)525; CHECK-NEXT:    or %s62, 0, %s0526; CHECK-NEXT:    lea %s63, 315527; CHECK-NEXT:    shm.l %s63, (%s61)528; CHECK-NEXT:    shm.l %s8, 8(%s61)529; CHECK-NEXT:    shm.l %s11, 16(%s61)530; CHECK-NEXT:    monc531; CHECK-NEXT:    or %s0, 0, %s62532; CHECK-NEXT:  .LBB9_4:533; CHECK-NEXT:    lea %s13, -2147483648534; CHECK-NEXT:    and %s13, %s13, (32)0535; CHECK-NEXT:    lea.sl %s13, (%s11, %s13)536; CHECK-NEXT:    ld %s1, (, %s13)537; CHECK-NEXT:    ld %s0, 8(, %s13)538; CHECK-NEXT:    or %s2, 0, (0)1539; CHECK-NEXT:    lea %s3, -2147483648540; CHECK-NEXT:    and %s3, %s3, (32)0541; CHECK-NEXT:  .LBB9_1: # =>This Inner Loop Header: Depth=1542; CHECK-NEXT:    ld %s4, (%s2, %s11)543; CHECK-NEXT:    lea %s2, 8(, %s2)544; CHECK-NEXT:    brne.l %s2, %s3, .LBB9_1545; CHECK-NEXT:  # %bb.2:546; CHECK-NEXT:    lea %s13, -2147483632547; CHECK-NEXT:    and %s13, %s13, (32)0548; CHECK-NEXT:    lea.sl %s11, (%s13, %s11)549; CHECK-NEXT:    b.l.t (, %s10)550  %1 = alloca fp128, align 16551  %2 = alloca [268435456 x i64], align 8552  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %1)553  call void @llvm.lifetime.start.p0(i64 2147483648, ptr nonnull %2)554  %3 = load volatile fp128, ptr %1, align 16, !tbaa !12555  br label %5556 5574:                                                ; preds = %5558  call void @llvm.lifetime.end.p0(i64 2147483648, ptr nonnull %2)559  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %1)560  ret fp128 %3561 5625:                                                ; preds = %0, %5563  %6 = phi i64 [ 0, %0 ], [ %9, %5 ]564  %7 = getelementptr inbounds [268435456 x i64], ptr %2, i64 0, i64 %6565  %8 = load volatile i64, ptr %7, align 8, !tbaa !3566  %9 = add nuw nsw i64 %6, 1567  %10 = icmp eq i64 %9, 268435456568  br i1 %10, label %4, label %5, !llvm.loop !15569}570 571; Function Attrs: argmemonly mustprogress nofree nounwind willreturn572define x86_fastcallcc fp128 @loadquad_stk_dyn(i64 noundef %0) {573; CHECK-LABEL: loadquad_stk_dyn:574; CHECK:       # %bb.0:575; CHECK-NEXT:    st %s9, (, %s11)576; CHECK-NEXT:    st %s10, 8(, %s11)577; CHECK-NEXT:    or %s9, 0, %s11578; CHECK-NEXT:    lea %s11, -256(, %s11)579; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB10_2580; CHECK-NEXT:  # %bb.1:581; CHECK-NEXT:    ld %s61, 24(, %s14)582; CHECK-NEXT:    or %s62, 0, %s0583; CHECK-NEXT:    lea %s63, 315584; CHECK-NEXT:    shm.l %s63, (%s61)585; CHECK-NEXT:    shm.l %s8, 8(%s61)586; CHECK-NEXT:    shm.l %s11, 16(%s61)587; CHECK-NEXT:    monc588; CHECK-NEXT:    or %s0, 0, %s62589; CHECK-NEXT:  .LBB10_2:590; CHECK-NEXT:    lea %s0, 15(, %s0)591; CHECK-NEXT:    and %s0, -16, %s0592; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo593; CHECK-NEXT:    and %s1, %s1, (32)0594; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)595; CHECK-NEXT:    bsic %s10, (, %s12)596; CHECK-NEXT:    lea %s0, 240(, %s11)597; CHECK-NEXT:    ld %s1, 8(, %s0)598; CHECK-NEXT:    ld %s0, (, %s0)599; CHECK-NEXT:    ld %s1, -16(, %s9)600; CHECK-NEXT:    ld %s0, -8(, %s9)601; CHECK-NEXT:    or %s11, 0, %s9602; CHECK-NEXT:    ld %s10, 8(, %s11)603; CHECK-NEXT:    ld %s9, (, %s11)604; CHECK-NEXT:    b.l.t (, %s10)605  %2 = alloca fp128, align 16606  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2)607  %3 = alloca i8, i64 %0, align 16608  %4 = load volatile fp128, ptr %3, align 16, !tbaa !12609  %5 = load volatile fp128, ptr %2, align 16, !tbaa !12610  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2)611  ret fp128 %5612}613 614; Function Attrs: argmemonly mustprogress nofree nounwind willreturn615define x86_fastcallcc fp128 @loadquad_stk_dyn_align(i64 noundef %0) {616; CHECK-LABEL: loadquad_stk_dyn_align:617; CHECK:       # %bb.0:618; CHECK-NEXT:    st %s9, (, %s11)619; CHECK-NEXT:    st %s10, 8(, %s11)620; CHECK-NEXT:    st %s17, 40(, %s11)621; CHECK-NEXT:    or %s9, 0, %s11622; CHECK-NEXT:    lea %s11, -288(, %s11)623; CHECK-NEXT:    and %s11, %s11, (59)1624; CHECK-NEXT:    or %s17, 0, %s11625; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB11_2626; CHECK-NEXT:  # %bb.1:627; CHECK-NEXT:    ld %s61, 24(, %s14)628; CHECK-NEXT:    or %s62, 0, %s0629; CHECK-NEXT:    lea %s63, 315630; CHECK-NEXT:    shm.l %s63, (%s61)631; CHECK-NEXT:    shm.l %s8, 8(%s61)632; CHECK-NEXT:    shm.l %s11, 16(%s61)633; CHECK-NEXT:    monc634; CHECK-NEXT:    or %s0, 0, %s62635; CHECK-NEXT:  .LBB11_2:636; CHECK-NEXT:    lea %s0, 15(, %s0)637; CHECK-NEXT:    and %s0, -16, %s0638; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo639; CHECK-NEXT:    and %s1, %s1, (32)0640; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)641; CHECK-NEXT:    bsic %s10, (, %s12)642; CHECK-NEXT:    lea %s0, 240(, %s11)643; CHECK-NEXT:    ld %s1, 8(, %s0)644; CHECK-NEXT:    ld %s0, (, %s0)645; CHECK-NEXT:    ld %s1, 256(, %s17)646; CHECK-NEXT:    ld %s0, 264(, %s17)647; CHECK-NEXT:    or %s11, 0, %s9648; CHECK-NEXT:    ld %s17, 40(, %s11)649; CHECK-NEXT:    ld %s10, 8(, %s11)650; CHECK-NEXT:    ld %s9, (, %s11)651; CHECK-NEXT:    b.l.t (, %s10)652  %2 = alloca fp128, align 32653  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2)654  %3 = alloca i8, i64 %0, align 16655  %4 = load volatile fp128, ptr %3, align 16, !tbaa !12656  %5 = load volatile fp128, ptr %2, align 32, !tbaa !16657  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2)658  ret fp128 %5659}660 661; Function Attrs: argmemonly mustprogress nofree nounwind willreturn662define x86_fastcallcc fp128 @loadquad_stk_dyn_align2(i64 noundef %0) {663; CHECK-LABEL: loadquad_stk_dyn_align2:664; CHECK:       # %bb.0:665; CHECK-NEXT:    st %s9, (, %s11)666; CHECK-NEXT:    st %s10, 8(, %s11)667; CHECK-NEXT:    st %s17, 40(, %s11)668; CHECK-NEXT:    or %s9, 0, %s11669; CHECK-NEXT:    lea %s11, -320(, %s11)670; CHECK-NEXT:    and %s11, %s11, (58)1671; CHECK-NEXT:    or %s17, 0, %s11672; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB12_2673; CHECK-NEXT:  # %bb.1:674; CHECK-NEXT:    ld %s61, 24(, %s14)675; CHECK-NEXT:    or %s62, 0, %s0676; CHECK-NEXT:    lea %s63, 315677; CHECK-NEXT:    shm.l %s63, (%s61)678; CHECK-NEXT:    shm.l %s8, 8(%s61)679; CHECK-NEXT:    shm.l %s11, 16(%s61)680; CHECK-NEXT:    monc681; CHECK-NEXT:    or %s0, 0, %s62682; CHECK-NEXT:  .LBB12_2:683; CHECK-NEXT:    lea %s0, 15(, %s0)684; CHECK-NEXT:    and %s0, -16, %s0685; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo686; CHECK-NEXT:    and %s1, %s1, (32)0687; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)688; CHECK-NEXT:    bsic %s10, (, %s12)689; CHECK-NEXT:    lea %s0, 240(, %s11)690; CHECK-NEXT:    ld %s1, 8(, %s0)691; CHECK-NEXT:    ld %s0, (, %s0)692; CHECK-NEXT:    ld %s1, 288(, %s17)693; CHECK-NEXT:    ld %s0, 296(, %s17)694; CHECK-NEXT:    ld %s3, 256(, %s17)695; CHECK-NEXT:    ld %s2, 264(, %s17)696; CHECK-NEXT:    or %s11, 0, %s9697; CHECK-NEXT:    ld %s17, 40(, %s11)698; CHECK-NEXT:    ld %s10, 8(, %s11)699; CHECK-NEXT:    ld %s9, (, %s11)700; CHECK-NEXT:    b.l.t (, %s10)701  %2 = alloca fp128, align 32702  %3 = alloca fp128, align 64703  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2)704  %4 = alloca i8, i64 %0, align 16705  %5 = load volatile fp128, ptr %4, align 16, !tbaa !12706  %6 = load volatile fp128, ptr %2, align 32, !tbaa !16707  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3)708  %7 = load volatile fp128, ptr %3, align 64, !tbaa !16709  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3)710  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2)711  ret fp128 %6712}713 714; Function Attrs: nounwind715define x86_fastcallcc fp128 @loadquad_stk_dyn_align_spill(i64 noundef %0) {716; CHECK-LABEL: loadquad_stk_dyn_align_spill:717; CHECK:       # %bb.0:718; CHECK-NEXT:    st %s9, (, %s11)719; CHECK-NEXT:    st %s10, 8(, %s11)720; CHECK-NEXT:    st %s17, 40(, %s11)721; CHECK-NEXT:    or %s9, 0, %s11722; CHECK-NEXT:    lea %s11, -288(, %s11)723; CHECK-NEXT:    and %s11, %s11, (59)1724; CHECK-NEXT:    or %s17, 0, %s11725; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB13_2726; CHECK-NEXT:  # %bb.1:727; CHECK-NEXT:    ld %s61, 24(, %s14)728; CHECK-NEXT:    or %s62, 0, %s0729; CHECK-NEXT:    lea %s63, 315730; CHECK-NEXT:    shm.l %s63, (%s61)731; CHECK-NEXT:    shm.l %s8, 8(%s61)732; CHECK-NEXT:    shm.l %s11, 16(%s61)733; CHECK-NEXT:    monc734; CHECK-NEXT:    or %s0, 0, %s62735; CHECK-NEXT:  .LBB13_2:736; CHECK-NEXT:    st %s18, 48(, %s9) # 8-byte Folded Spill737; CHECK-NEXT:    st %s20, 64(, %s9) # 8-byte Folded Spill738; CHECK-NEXT:    st %s21, 72(, %s9) # 8-byte Folded Spill739; CHECK-NEXT:    or %s18, 0, %s0740; CHECK-NEXT:    lea %s0, 15(, %s0)741; CHECK-NEXT:    and %s0, -16, %s0742; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo743; CHECK-NEXT:    and %s1, %s1, (32)0744; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)745; CHECK-NEXT:    bsic %s10, (, %s12)746; CHECK-NEXT:    lea %s0, 240(, %s11)747; CHECK-NEXT:    ld %s1, 8(, %s0)748; CHECK-NEXT:    ld %s0, (, %s0)749; CHECK-NEXT:    ld %s21, 256(, %s17)750; CHECK-NEXT:    ld %s20, 264(, %s17)751; CHECK-NEXT:    lea %s0, dummy@lo752; CHECK-NEXT:    and %s0, %s0, (32)0753; CHECK-NEXT:    lea.sl %s12, dummy@hi(, %s0)754; CHECK-NEXT:    bsic %s10, (, %s12)755; CHECK-NEXT:    lea %s0, pass@lo756; CHECK-NEXT:    and %s0, %s0, (32)0757; CHECK-NEXT:    lea.sl %s12, pass@hi(, %s0)758; CHECK-NEXT:    or %s0, 0, %s18759; CHECK-NEXT:    bsic %s10, (, %s12)760; CHECK-NEXT:    or %s0, 0, %s20761; CHECK-NEXT:    or %s1, 0, %s21762; CHECK-NEXT:    ld %s21, 72(, %s9) # 8-byte Folded Reload763; CHECK-NEXT:    ld %s20, 64(, %s9) # 8-byte Folded Reload764; CHECK-NEXT:    ld %s18, 48(, %s9) # 8-byte Folded Reload765; CHECK-NEXT:    or %s11, 0, %s9766; CHECK-NEXT:    ld %s17, 40(, %s11)767; CHECK-NEXT:    ld %s10, 8(, %s11)768; CHECK-NEXT:    ld %s9, (, %s11)769; CHECK-NEXT:    b.l.t (, %s10)770  %2 = alloca fp128, align 32771  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %2)772  %3 = alloca i8, i64 %0, align 16773  %4 = load volatile fp128, ptr %3, align 16, !tbaa !12774  %5 = load volatile fp128, ptr %2, align 32, !tbaa !16775  tail call void (...) @dummy()776  tail call void @pass(i64 noundef %0)777  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %2)778  ret fp128 %5779}780 781!3 = !{!4, !4, i64 0}782!4 = !{!"long", !5, i64 0}783!5 = !{!"omnipotent char", !6, i64 0}784!6 = !{!"Simple C/C++ TBAA"}785!7 = distinct !{!7, !8}786!8 = !{!"llvm.loop.mustprogress"}787!9 = distinct !{!9, !8}788!10 = !{!11, !4, i64 0}789!11 = !{!"", !4, i64 0}790!12 = !{!13, !13, i64 0}791!13 = !{!"long double", !5, i64 0}792!14 = distinct !{!14, !8}793!15 = distinct !{!15, !8}794!16 = !{!17, !13, i64 0}795!17 = !{!"", !13, i64 0}796