210 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=ve | FileCheck %s3 4;;; Check stack frame allocation especially about the new SP calculation5;;; using multiple sizes as a test of emitSPAdjustment().6 7; Function Attrs: norecurse nounwind readnone8define signext i32 @test_frame0(i32 signext %0) {9; CHECK-LABEL: test_frame0:10; CHECK: # %bb.0:11; CHECK-NEXT: adds.w.sx %s0, 3, %s012; CHECK-NEXT: adds.w.sx %s0, %s0, (0)113; CHECK-NEXT: b.l.t (, %s10)14 %2 = add nsw i32 %0, 315 ret i32 %216}17 18; Function Attrs: nounwind19define ptr @test_frame8(ptr %0) {20; CHECK-LABEL: test_frame8:21; CHECK: # %bb.0:22; CHECK-NEXT: adds.l %s11, -16, %s1123; CHECK-NEXT: brge.l.t %s11, %s8, .LBB1_224; CHECK-NEXT: # %bb.1:25; CHECK-NEXT: ld %s61, 24(, %s14)26; CHECK-NEXT: or %s62, 0, %s027; CHECK-NEXT: lea %s63, 31528; CHECK-NEXT: shm.l %s63, (%s61)29; CHECK-NEXT: shm.l %s8, 8(%s61)30; CHECK-NEXT: shm.l %s11, 16(%s61)31; CHECK-NEXT: monc32; CHECK-NEXT: or %s0, 0, %s6233; CHECK-NEXT: .LBB1_2:34; CHECK-NEXT: ld1b.zx %s1, (, %s0)35; CHECK-NEXT: lea %s0, 8(, %s11)36; CHECK-NEXT: st1b %s1, 8(, %s11)37; CHECK-NEXT: adds.l %s11, 16, %s1138; CHECK-NEXT: b.l.t (, %s10)39 %2 = alloca [8 x i8], align 140 %3 = load i8, ptr %0, align 141 store i8 %3, ptr %2, align 142 ret ptr %243}44 45; Function Attrs: nounwind46define ptr @test_frame16(ptr %0) {47; CHECK-LABEL: test_frame16:48; CHECK: # %bb.0:49; CHECK-NEXT: adds.l %s11, -16, %s1150; CHECK-NEXT: brge.l.t %s11, %s8, .LBB2_251; CHECK-NEXT: # %bb.1:52; CHECK-NEXT: ld %s61, 24(, %s14)53; CHECK-NEXT: or %s62, 0, %s054; CHECK-NEXT: lea %s63, 31555; CHECK-NEXT: shm.l %s63, (%s61)56; CHECK-NEXT: shm.l %s8, 8(%s61)57; CHECK-NEXT: shm.l %s11, 16(%s61)58; CHECK-NEXT: monc59; CHECK-NEXT: or %s0, 0, %s6260; CHECK-NEXT: .LBB2_2:61; CHECK-NEXT: ld1b.zx %s1, (, %s0)62; CHECK-NEXT: lea %s0, (, %s11)63; CHECK-NEXT: st1b %s1, (, %s11)64; CHECK-NEXT: adds.l %s11, 16, %s1165; CHECK-NEXT: b.l.t (, %s10)66 %2 = alloca [16 x i8], align 167 %3 = load i8, ptr %0, align 168 store i8 %3, ptr %2, align 169 ret ptr %270}71 72; Function Attrs: nounwind73define ptr @test_frame32(ptr %0) {74; CHECK-LABEL: test_frame32:75; CHECK: # %bb.0:76; CHECK-NEXT: adds.l %s11, -32, %s1177; CHECK-NEXT: brge.l.t %s11, %s8, .LBB3_278; CHECK-NEXT: # %bb.1:79; CHECK-NEXT: ld %s61, 24(, %s14)80; CHECK-NEXT: or %s62, 0, %s081; CHECK-NEXT: lea %s63, 31582; CHECK-NEXT: shm.l %s63, (%s61)83; CHECK-NEXT: shm.l %s8, 8(%s61)84; CHECK-NEXT: shm.l %s11, 16(%s61)85; CHECK-NEXT: monc86; CHECK-NEXT: or %s0, 0, %s6287; CHECK-NEXT: .LBB3_2:88; CHECK-NEXT: ld1b.zx %s1, (, %s0)89; CHECK-NEXT: lea %s0, (, %s11)90; CHECK-NEXT: st1b %s1, (, %s11)91; CHECK-NEXT: adds.l %s11, 32, %s1192; CHECK-NEXT: b.l.t (, %s10)93 %2 = alloca [32 x i8], align 194 %3 = load i8, ptr %0, align 195 store i8 %3, ptr %2, align 196 ret ptr %297}98 99; Function Attrs: nounwind100define ptr @test_frame64(ptr %0) {101; CHECK-LABEL: test_frame64:102; CHECK: # %bb.0:103; CHECK-NEXT: adds.l %s11, -64, %s11104; CHECK-NEXT: brge.l.t %s11, %s8, .LBB4_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: .LBB4_2:115; CHECK-NEXT: ld1b.zx %s1, (, %s0)116; CHECK-NEXT: lea %s0, (, %s11)117; CHECK-NEXT: st1b %s1, (, %s11)118; CHECK-NEXT: lea %s11, 64(, %s11)119; CHECK-NEXT: b.l.t (, %s10)120 %2 = alloca [64 x i8], align 1121 %3 = load i8, ptr %0, align 1122 store i8 %3, ptr %2, align 1123 ret ptr %2124}125 126; Function Attrs: nounwind127define ptr @test_frame128(ptr %0) {128; CHECK-LABEL: test_frame128:129; CHECK: # %bb.0:130; CHECK-NEXT: lea %s11, -128(, %s11)131; CHECK-NEXT: brge.l.t %s11, %s8, .LBB5_2132; CHECK-NEXT: # %bb.1:133; CHECK-NEXT: ld %s61, 24(, %s14)134; CHECK-NEXT: or %s62, 0, %s0135; CHECK-NEXT: lea %s63, 315136; CHECK-NEXT: shm.l %s63, (%s61)137; CHECK-NEXT: shm.l %s8, 8(%s61)138; CHECK-NEXT: shm.l %s11, 16(%s61)139; CHECK-NEXT: monc140; CHECK-NEXT: or %s0, 0, %s62141; CHECK-NEXT: .LBB5_2:142; CHECK-NEXT: ld1b.zx %s1, (, %s0)143; CHECK-NEXT: lea %s0, (, %s11)144; CHECK-NEXT: st1b %s1, (, %s11)145; CHECK-NEXT: lea %s11, 128(, %s11)146; CHECK-NEXT: b.l.t (, %s10)147 %2 = alloca [128 x i8], align 1148 %3 = load i8, ptr %0, align 1149 store i8 %3, ptr %2, align 1150 ret ptr %2151}152 153; Function Attrs: nounwind154define ptr @test_frame65536(ptr %0) {155; CHECK-LABEL: test_frame65536:156; CHECK: # %bb.0:157; CHECK-NEXT: lea %s11, -65536(, %s11)158; CHECK-NEXT: brge.l.t %s11, %s8, .LBB6_2159; CHECK-NEXT: # %bb.1:160; CHECK-NEXT: ld %s61, 24(, %s14)161; CHECK-NEXT: or %s62, 0, %s0162; CHECK-NEXT: lea %s63, 315163; CHECK-NEXT: shm.l %s63, (%s61)164; CHECK-NEXT: shm.l %s8, 8(%s61)165; CHECK-NEXT: shm.l %s11, 16(%s61)166; CHECK-NEXT: monc167; CHECK-NEXT: or %s0, 0, %s62168; CHECK-NEXT: .LBB6_2:169; CHECK-NEXT: ld1b.zx %s1, (, %s0)170; CHECK-NEXT: lea %s0, (, %s11)171; CHECK-NEXT: st1b %s1, (, %s11)172; CHECK-NEXT: lea %s11, 65536(, %s11)173; CHECK-NEXT: b.l.t (, %s10)174 %2 = alloca [65536 x i8], align 1175 %3 = load i8, ptr %0, align 1176 store i8 %3, ptr %2, align 1177 ret ptr %2178}179 180; Function Attrs: nounwind181define ptr @test_frame4294967296(ptr %0) {182; CHECK-LABEL: test_frame4294967296:183; CHECK: # %bb.0:184; CHECK-NEXT: lea %s13, 0185; CHECK-NEXT: and %s13, %s13, (32)0186; CHECK-NEXT: lea.sl %s11, -1(%s13, %s11)187; CHECK-NEXT: brge.l.t %s11, %s8, .LBB7_2188; CHECK-NEXT: # %bb.1:189; CHECK-NEXT: ld %s61, 24(, %s14)190; CHECK-NEXT: or %s62, 0, %s0191; CHECK-NEXT: lea %s63, 315192; CHECK-NEXT: shm.l %s63, (%s61)193; CHECK-NEXT: shm.l %s8, 8(%s61)194; CHECK-NEXT: shm.l %s11, 16(%s61)195; CHECK-NEXT: monc196; CHECK-NEXT: or %s0, 0, %s62197; CHECK-NEXT: .LBB7_2:198; CHECK-NEXT: ld1b.zx %s1, (, %s0)199; CHECK-NEXT: lea %s0, (, %s11)200; CHECK-NEXT: st1b %s1, (, %s11)201; CHECK-NEXT: lea %s13, 0202; CHECK-NEXT: and %s13, %s13, (32)0203; CHECK-NEXT: lea.sl %s11, 1(%s13, %s11)204; CHECK-NEXT: b.l.t (, %s10)205 %2 = alloca [4294967296 x i8], align 1206 %3 = load i8, ptr %0, align 1207 store i8 %3, ptr %2, align 1208 ret ptr %2209}210