brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.2 KiB · d90c0bc Raw
478 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc < %s -mtriple=ve | FileCheck %s3; RUN: llc < %s -mtriple=ve --frame-pointer=all \4; RUN:     | FileCheck %s --check-prefix=CHECKFP5 6;;; Check stack frame allocation with static and dynamic stack object with7;;; alignments as a test of getFrameIndexReference().8 9;; Allocated buffer places from 9 to 15 bytes in 16 bytes local vars area.10 11; Function Attrs: nounwind12define ptr @test_frame7(ptr %0) {13; CHECK-LABEL: test_frame7:14; CHECK:       # %bb.0:15; CHECK-NEXT:    adds.l %s11, -16, %s1116; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB0_217; CHECK-NEXT:  # %bb.1:18; CHECK-NEXT:    ld %s61, 24(, %s14)19; CHECK-NEXT:    or %s62, 0, %s020; CHECK-NEXT:    lea %s63, 31521; CHECK-NEXT:    shm.l %s63, (%s61)22; CHECK-NEXT:    shm.l %s8, 8(%s61)23; CHECK-NEXT:    shm.l %s11, 16(%s61)24; CHECK-NEXT:    monc25; CHECK-NEXT:    or %s0, 0, %s6226; CHECK-NEXT:  .LBB0_2:27; CHECK-NEXT:    ld1b.zx %s1, (, %s0)28; CHECK-NEXT:    lea %s0, 9(, %s11)29; CHECK-NEXT:    st1b %s1, 9(, %s11)30; CHECK-NEXT:    adds.l %s11, 16, %s1131; CHECK-NEXT:    b.l.t (, %s10)32;33; CHECKFP-LABEL: test_frame7:34; CHECKFP:       # %bb.0:35; CHECKFP-NEXT:    st %s9, (, %s11)36; CHECKFP-NEXT:    st %s10, 8(, %s11)37; CHECKFP-NEXT:    or %s9, 0, %s1138; CHECKFP-NEXT:    lea %s11, -192(, %s11)39; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB0_240; CHECKFP-NEXT:  # %bb.1:41; CHECKFP-NEXT:    ld %s61, 24(, %s14)42; CHECKFP-NEXT:    or %s62, 0, %s043; CHECKFP-NEXT:    lea %s63, 31544; CHECKFP-NEXT:    shm.l %s63, (%s61)45; CHECKFP-NEXT:    shm.l %s8, 8(%s61)46; CHECKFP-NEXT:    shm.l %s11, 16(%s61)47; CHECKFP-NEXT:    monc48; CHECKFP-NEXT:    or %s0, 0, %s6249; CHECKFP-NEXT:  .LBB0_2:50; CHECKFP-NEXT:    ld1b.zx %s1, (, %s0)51; CHECKFP-NEXT:    lea %s0, -7(, %s9)52; CHECKFP-NEXT:    st1b %s1, -7(, %s9)53; CHECKFP-NEXT:    or %s11, 0, %s954; CHECKFP-NEXT:    ld %s10, 8(, %s11)55; CHECKFP-NEXT:    ld %s9, (, %s11)56; CHECKFP-NEXT:    b.l.t (, %s10)57  %2 = alloca [7 x i8], align 158  %3 = load i8, ptr %0, align 159  store i8 %3, ptr %2, align 160  ret ptr %261}62 63;; Allocated buffer is aligned by 8, so it places from 8 to 14 bytes in 1664;; bytes local vars area.65 66; Function Attrs: nounwind67define ptr @test_frame7_align8(ptr %0) {68; CHECK-LABEL: test_frame7_align8:69; CHECK:       # %bb.0:70; CHECK-NEXT:    adds.l %s11, -16, %s1171; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB1_272; CHECK-NEXT:  # %bb.1:73; CHECK-NEXT:    ld %s61, 24(, %s14)74; CHECK-NEXT:    or %s62, 0, %s075; CHECK-NEXT:    lea %s63, 31576; CHECK-NEXT:    shm.l %s63, (%s61)77; CHECK-NEXT:    shm.l %s8, 8(%s61)78; CHECK-NEXT:    shm.l %s11, 16(%s61)79; CHECK-NEXT:    monc80; CHECK-NEXT:    or %s0, 0, %s6281; CHECK-NEXT:  .LBB1_2:82; CHECK-NEXT:    ld1b.zx %s1, (, %s0)83; CHECK-NEXT:    lea %s0, 8(, %s11)84; CHECK-NEXT:    st1b %s1, 8(, %s11)85; CHECK-NEXT:    adds.l %s11, 16, %s1186; CHECK-NEXT:    b.l.t (, %s10)87;88; CHECKFP-LABEL: test_frame7_align8:89; CHECKFP:       # %bb.0:90; CHECKFP-NEXT:    st %s9, (, %s11)91; CHECKFP-NEXT:    st %s10, 8(, %s11)92; CHECKFP-NEXT:    or %s9, 0, %s1193; CHECKFP-NEXT:    lea %s11, -192(, %s11)94; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB1_295; CHECKFP-NEXT:  # %bb.1:96; CHECKFP-NEXT:    ld %s61, 24(, %s14)97; CHECKFP-NEXT:    or %s62, 0, %s098; CHECKFP-NEXT:    lea %s63, 31599; CHECKFP-NEXT:    shm.l %s63, (%s61)100; CHECKFP-NEXT:    shm.l %s8, 8(%s61)101; CHECKFP-NEXT:    shm.l %s11, 16(%s61)102; CHECKFP-NEXT:    monc103; CHECKFP-NEXT:    or %s0, 0, %s62104; CHECKFP-NEXT:  .LBB1_2:105; CHECKFP-NEXT:    ld1b.zx %s1, (, %s0)106; CHECKFP-NEXT:    lea %s0, -8(, %s9)107; CHECKFP-NEXT:    st1b %s1, -8(, %s9)108; CHECKFP-NEXT:    or %s11, 0, %s9109; CHECKFP-NEXT:    ld %s10, 8(, %s11)110; CHECKFP-NEXT:    ld %s9, (, %s11)111; CHECKFP-NEXT:    b.l.t (, %s10)112  %2 = alloca [7 x i8], align 8113  %3 = load i8, ptr %0, align 1114  store i8 %3, ptr %2, align 1115  ret ptr %2116}117 118;; Allocated buffer is aligned by 16, so it places from 0 to 15 bytes in 16119;; bytes local vars area.120 121; Function Attrs: nounwind122define ptr @test_frame16_align16(ptr %0) {123; CHECK-LABEL: test_frame16_align16:124; CHECK:       # %bb.0:125; CHECK-NEXT:    adds.l %s11, -16, %s11126; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB2_2127; CHECK-NEXT:  # %bb.1:128; CHECK-NEXT:    ld %s61, 24(, %s14)129; CHECK-NEXT:    or %s62, 0, %s0130; CHECK-NEXT:    lea %s63, 315131; CHECK-NEXT:    shm.l %s63, (%s61)132; CHECK-NEXT:    shm.l %s8, 8(%s61)133; CHECK-NEXT:    shm.l %s11, 16(%s61)134; CHECK-NEXT:    monc135; CHECK-NEXT:    or %s0, 0, %s62136; CHECK-NEXT:  .LBB2_2:137; CHECK-NEXT:    ld1b.zx %s1, (, %s0)138; CHECK-NEXT:    lea %s0, (, %s11)139; CHECK-NEXT:    st1b %s1, (, %s11)140; CHECK-NEXT:    adds.l %s11, 16, %s11141; CHECK-NEXT:    b.l.t (, %s10)142;143; CHECKFP-LABEL: test_frame16_align16:144; CHECKFP:       # %bb.0:145; CHECKFP-NEXT:    st %s9, (, %s11)146; CHECKFP-NEXT:    st %s10, 8(, %s11)147; CHECKFP-NEXT:    or %s9, 0, %s11148; CHECKFP-NEXT:    lea %s11, -192(, %s11)149; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB2_2150; CHECKFP-NEXT:  # %bb.1:151; CHECKFP-NEXT:    ld %s61, 24(, %s14)152; CHECKFP-NEXT:    or %s62, 0, %s0153; CHECKFP-NEXT:    lea %s63, 315154; CHECKFP-NEXT:    shm.l %s63, (%s61)155; CHECKFP-NEXT:    shm.l %s8, 8(%s61)156; CHECKFP-NEXT:    shm.l %s11, 16(%s61)157; CHECKFP-NEXT:    monc158; CHECKFP-NEXT:    or %s0, 0, %s62159; CHECKFP-NEXT:  .LBB2_2:160; CHECKFP-NEXT:    ld1b.zx %s1, (, %s0)161; CHECKFP-NEXT:    lea %s0, -16(, %s9)162; CHECKFP-NEXT:    st1b %s1, -16(, %s9)163; CHECKFP-NEXT:    or %s11, 0, %s9164; CHECKFP-NEXT:    ld %s10, 8(, %s11)165; CHECKFP-NEXT:    ld %s9, (, %s11)166; CHECKFP-NEXT:    b.l.t (, %s10)167  %2 = alloca [16 x i8], align 16168  %3 = load i8, ptr %0, align 1169  store i8 %3, ptr %2, align 1170  ret ptr %2171}172 173;; Allocated buffer is aligned by 32, so it places from 0 to 15 bytes in 48174;; bytes local vars area.  Or it places from 192 (aligned to 32 bytes) to175;; 207 bytes in 224 + alpha allocated local vars area.176 177; Function Attrs: nounwind178define ptr @test_frame16_align32(ptr %0) {179; CHECK-LABEL: test_frame16_align32:180; CHECK:       # %bb.0:181; CHECK-NEXT:    st %s9, (, %s11)182; CHECK-NEXT:    st %s10, 8(, %s11)183; CHECK-NEXT:    or %s9, 0, %s11184; CHECK-NEXT:    lea %s11, -224(, %s11)185; CHECK-NEXT:    and %s11, %s11, (59)1186; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB3_2187; CHECK-NEXT:  # %bb.1:188; CHECK-NEXT:    ld %s61, 24(, %s14)189; CHECK-NEXT:    or %s62, 0, %s0190; CHECK-NEXT:    lea %s63, 315191; CHECK-NEXT:    shm.l %s63, (%s61)192; CHECK-NEXT:    shm.l %s8, 8(%s61)193; CHECK-NEXT:    shm.l %s11, 16(%s61)194; CHECK-NEXT:    monc195; CHECK-NEXT:    or %s0, 0, %s62196; CHECK-NEXT:  .LBB3_2:197; CHECK-NEXT:    ld1b.zx %s1, (, %s0)198; CHECK-NEXT:    lea %s0, 192(, %s11)199; CHECK-NEXT:    st1b %s1, 192(, %s11)200; CHECK-NEXT:    or %s11, 0, %s9201; CHECK-NEXT:    ld %s10, 8(, %s11)202; CHECK-NEXT:    ld %s9, (, %s11)203; CHECK-NEXT:    b.l.t (, %s10)204;205; CHECKFP-LABEL: test_frame16_align32:206; CHECKFP:       # %bb.0:207; CHECKFP-NEXT:    st %s9, (, %s11)208; CHECKFP-NEXT:    st %s10, 8(, %s11)209; CHECKFP-NEXT:    or %s9, 0, %s11210; CHECKFP-NEXT:    lea %s11, -224(, %s11)211; CHECKFP-NEXT:    and %s11, %s11, (59)1212; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB3_2213; CHECKFP-NEXT:  # %bb.1:214; CHECKFP-NEXT:    ld %s61, 24(, %s14)215; CHECKFP-NEXT:    or %s62, 0, %s0216; CHECKFP-NEXT:    lea %s63, 315217; CHECKFP-NEXT:    shm.l %s63, (%s61)218; CHECKFP-NEXT:    shm.l %s8, 8(%s61)219; CHECKFP-NEXT:    shm.l %s11, 16(%s61)220; CHECKFP-NEXT:    monc221; CHECKFP-NEXT:    or %s0, 0, %s62222; CHECKFP-NEXT:  .LBB3_2:223; CHECKFP-NEXT:    ld1b.zx %s1, (, %s0)224; CHECKFP-NEXT:    lea %s0, 192(, %s11)225; CHECKFP-NEXT:    st1b %s1, 192(, %s11)226; CHECKFP-NEXT:    or %s11, 0, %s9227; CHECKFP-NEXT:    ld %s10, 8(, %s11)228; CHECKFP-NEXT:    ld %s9, (, %s11)229; CHECKFP-NEXT:    b.l.t (, %s10)230  %2 = alloca [16 x i8], align 32231  %3 = load i8, ptr %0, align 1232  store i8 %3, ptr %2, align 1233  ret ptr %2234}235 236;; Allocated buffer is aligned by 32, so it places from 0 to 31 bytes in 48237;; + alpha bytes local vars area, or it places from 192 (32 bytes aligned 176)238;; to 223 in 224 + alpha bytes local vars area..239 240; Function Attrs: nounwind241define ptr @test_frame32_align32(ptr %0) {242; CHECK-LABEL: test_frame32_align32:243; CHECK:       # %bb.0:244; CHECK-NEXT:    st %s9, (, %s11)245; CHECK-NEXT:    st %s10, 8(, %s11)246; CHECK-NEXT:    or %s9, 0, %s11247; CHECK-NEXT:    lea %s11, -224(, %s11)248; CHECK-NEXT:    and %s11, %s11, (59)1249; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB4_2250; CHECK-NEXT:  # %bb.1:251; CHECK-NEXT:    ld %s61, 24(, %s14)252; CHECK-NEXT:    or %s62, 0, %s0253; CHECK-NEXT:    lea %s63, 315254; CHECK-NEXT:    shm.l %s63, (%s61)255; CHECK-NEXT:    shm.l %s8, 8(%s61)256; CHECK-NEXT:    shm.l %s11, 16(%s61)257; CHECK-NEXT:    monc258; CHECK-NEXT:    or %s0, 0, %s62259; CHECK-NEXT:  .LBB4_2:260; CHECK-NEXT:    ld1b.zx %s1, (, %s0)261; CHECK-NEXT:    lea %s0, 192(, %s11)262; CHECK-NEXT:    st1b %s1, 192(, %s11)263; CHECK-NEXT:    or %s11, 0, %s9264; CHECK-NEXT:    ld %s10, 8(, %s11)265; CHECK-NEXT:    ld %s9, (, %s11)266; CHECK-NEXT:    b.l.t (, %s10)267;268; CHECKFP-LABEL: test_frame32_align32:269; CHECKFP:       # %bb.0:270; CHECKFP-NEXT:    st %s9, (, %s11)271; CHECKFP-NEXT:    st %s10, 8(, %s11)272; CHECKFP-NEXT:    or %s9, 0, %s11273; CHECKFP-NEXT:    lea %s11, -224(, %s11)274; CHECKFP-NEXT:    and %s11, %s11, (59)1275; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB4_2276; CHECKFP-NEXT:  # %bb.1:277; CHECKFP-NEXT:    ld %s61, 24(, %s14)278; CHECKFP-NEXT:    or %s62, 0, %s0279; CHECKFP-NEXT:    lea %s63, 315280; CHECKFP-NEXT:    shm.l %s63, (%s61)281; CHECKFP-NEXT:    shm.l %s8, 8(%s61)282; CHECKFP-NEXT:    shm.l %s11, 16(%s61)283; CHECKFP-NEXT:    monc284; CHECKFP-NEXT:    or %s0, 0, %s62285; CHECKFP-NEXT:  .LBB4_2:286; CHECKFP-NEXT:    ld1b.zx %s1, (, %s0)287; CHECKFP-NEXT:    lea %s0, 192(, %s11)288; CHECKFP-NEXT:    st1b %s1, 192(, %s11)289; CHECKFP-NEXT:    or %s11, 0, %s9290; CHECKFP-NEXT:    ld %s10, 8(, %s11)291; CHECKFP-NEXT:    ld %s9, (, %s11)292; CHECKFP-NEXT:    b.l.t (, %s10)293  %2 = alloca [32 x i8], align 32294  %3 = load i8, ptr %0, align 1295  store i8 %3, ptr %2, align 1296  ret ptr %2297}298 299;; Dynamically allocated buffer is aligned by 16, so it places from 0 to 31300;; bytes in allocated area, or it places from 240 (32 bytes aligned 176+64)301;; to 271 in allocated area (actually it places not newly allocated area302;; but in somewhere between newly allocated area and allocated area at the303;; prologue since VE ABI requires the reserved area at the top of stack).304 305;; FIXME: (size+15)/16*16 is not enough.306 307; Function Attrs: nounwind308define ptr @test_frame_dynalign16(ptr %0, i64 %1) {309; CHECK-LABEL: test_frame_dynalign16:310; CHECK:       # %bb.0:311; CHECK-NEXT:    st %s9, (, %s11)312; CHECK-NEXT:    st %s10, 8(, %s11)313; CHECK-NEXT:    or %s9, 0, %s11314; CHECK-NEXT:    lea %s11, -240(, %s11)315; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB5_2316; CHECK-NEXT:  # %bb.1:317; CHECK-NEXT:    ld %s61, 24(, %s14)318; CHECK-NEXT:    or %s62, 0, %s0319; CHECK-NEXT:    lea %s63, 315320; CHECK-NEXT:    shm.l %s63, (%s61)321; CHECK-NEXT:    shm.l %s8, 8(%s61)322; CHECK-NEXT:    shm.l %s11, 16(%s61)323; CHECK-NEXT:    monc324; CHECK-NEXT:    or %s0, 0, %s62325; CHECK-NEXT:  .LBB5_2:326; CHECK-NEXT:    or %s2, 0, %s0327; CHECK-NEXT:    lea %s0, 15(, %s1)328; CHECK-NEXT:    and %s0, -16, %s0329; CHECK-NEXT:    lea %s1, __ve_grow_stack@lo330; CHECK-NEXT:    and %s1, %s1, (32)0331; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)332; CHECK-NEXT:    bsic %s10, (, %s12)333; CHECK-NEXT:    lea %s0, 240(, %s11)334; CHECK-NEXT:    ld1b.zx %s1, (, %s2)335; CHECK-NEXT:    st1b %s1, (, %s0)336; CHECK-NEXT:    or %s11, 0, %s9337; CHECK-NEXT:    ld %s10, 8(, %s11)338; CHECK-NEXT:    ld %s9, (, %s11)339; CHECK-NEXT:    b.l.t (, %s10)340;341; CHECKFP-LABEL: test_frame_dynalign16:342; CHECKFP:       # %bb.0:343; CHECKFP-NEXT:    st %s9, (, %s11)344; CHECKFP-NEXT:    st %s10, 8(, %s11)345; CHECKFP-NEXT:    or %s9, 0, %s11346; CHECKFP-NEXT:    lea %s11, -240(, %s11)347; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB5_2348; CHECKFP-NEXT:  # %bb.1:349; CHECKFP-NEXT:    ld %s61, 24(, %s14)350; CHECKFP-NEXT:    or %s62, 0, %s0351; CHECKFP-NEXT:    lea %s63, 315352; CHECKFP-NEXT:    shm.l %s63, (%s61)353; CHECKFP-NEXT:    shm.l %s8, 8(%s61)354; CHECKFP-NEXT:    shm.l %s11, 16(%s61)355; CHECKFP-NEXT:    monc356; CHECKFP-NEXT:    or %s0, 0, %s62357; CHECKFP-NEXT:  .LBB5_2:358; CHECKFP-NEXT:    or %s2, 0, %s0359; CHECKFP-NEXT:    lea %s0, 15(, %s1)360; CHECKFP-NEXT:    and %s0, -16, %s0361; CHECKFP-NEXT:    lea %s1, __ve_grow_stack@lo362; CHECKFP-NEXT:    and %s1, %s1, (32)0363; CHECKFP-NEXT:    lea.sl %s12, __ve_grow_stack@hi(, %s1)364; CHECKFP-NEXT:    bsic %s10, (, %s12)365; CHECKFP-NEXT:    lea %s0, 240(, %s11)366; CHECKFP-NEXT:    ld1b.zx %s1, (, %s2)367; CHECKFP-NEXT:    st1b %s1, (, %s0)368; CHECKFP-NEXT:    or %s11, 0, %s9369; CHECKFP-NEXT:    ld %s10, 8(, %s11)370; CHECKFP-NEXT:    ld %s9, (, %s11)371; CHECKFP-NEXT:    b.l.t (, %s10)372  %3 = alloca i8, i64 %1, align 16373  %4 = load i8, ptr %0, align 1374  store i8 %4, ptr %3, align 1375  ret ptr %3376}377 378;; This test allocates static buffer with 16 bytes align and dynamic buffer379;; with 32 bytes align.  In LLVM, stack frame is always aligned to 32 bytes380;; (bigger one).  So, LLVM allocates 176 (RSA) + 64 (call site) + 32 (32 bytes381;; aligned 16 bytes data) + 16 (pad to align) if FP is not eliminated.382;; Statically allocated buffer is aligned to 16, so it places from 16 to 31383;; bytes from BP in 32 + alpha bytes local vars area, or it places from 272384;; to 287 bytes from BP in 288 + alpha bytes local vars area.385;; Dynamically allocated buffer is aligned to 32, so it places from aligned386;; address between 240 and 271 from SP.387 388; Function Attrs: nounwind389define ptr @test_frame16_align16_dynalign32(ptr %0, i64 %n) {390; CHECK-LABEL: test_frame16_align16_dynalign32:391; CHECK:       # %bb.0:392; CHECK-NEXT:    st %s9, (, %s11)393; CHECK-NEXT:    st %s10, 8(, %s11)394; CHECK-NEXT:    st %s17, 40(, %s11)395; CHECK-NEXT:    or %s9, 0, %s11396; CHECK-NEXT:    lea %s11, -288(, %s11)397; CHECK-NEXT:    and %s11, %s11, (59)1398; CHECK-NEXT:    or %s17, 0, %s11399; CHECK-NEXT:    brge.l.t %s11, %s8, .LBB6_2400; CHECK-NEXT:  # %bb.1:401; CHECK-NEXT:    ld %s61, 24(, %s14)402; CHECK-NEXT:    or %s62, 0, %s0403; CHECK-NEXT:    lea %s63, 315404; CHECK-NEXT:    shm.l %s63, (%s61)405; CHECK-NEXT:    shm.l %s8, 8(%s61)406; CHECK-NEXT:    shm.l %s11, 16(%s61)407; CHECK-NEXT:    monc408; CHECK-NEXT:    or %s0, 0, %s62409; CHECK-NEXT:  .LBB6_2:410; CHECK-NEXT:    ld1b.zx %s0, (, %s0)411; CHECK-NEXT:    st1b %s0, 272(, %s17)412; CHECK-NEXT:    lea %s0, 15(, %s1)413; CHECK-NEXT:    and %s0, -16, %s0414; CHECK-NEXT:    lea %s1, __ve_grow_stack_align@lo415; CHECK-NEXT:    and %s1, %s1, (32)0416; CHECK-NEXT:    lea.sl %s12, __ve_grow_stack_align@hi(, %s1)417; CHECK-NEXT:    or %s1, -32, (0)1418; CHECK-NEXT:    bsic %s10, (, %s12)419; CHECK-NEXT:    lea %s0, 240(, %s11)420; CHECK-NEXT:    ld1b.zx %s1, 272(, %s17)421; CHECK-NEXT:    lea %s0, 31(, %s0)422; CHECK-NEXT:    and %s0, -32, %s0423; CHECK-NEXT:    st1b %s1, (, %s0)424; CHECK-NEXT:    or %s11, 0, %s9425; CHECK-NEXT:    ld %s17, 40(, %s11)426; CHECK-NEXT:    ld %s10, 8(, %s11)427; CHECK-NEXT:    ld %s9, (, %s11)428; CHECK-NEXT:    b.l.t (, %s10)429;430; CHECKFP-LABEL: test_frame16_align16_dynalign32:431; CHECKFP:       # %bb.0:432; CHECKFP-NEXT:    st %s9, (, %s11)433; CHECKFP-NEXT:    st %s10, 8(, %s11)434; CHECKFP-NEXT:    st %s17, 40(, %s11)435; CHECKFP-NEXT:    or %s9, 0, %s11436; CHECKFP-NEXT:    lea %s11, -288(, %s11)437; CHECKFP-NEXT:    and %s11, %s11, (59)1438; CHECKFP-NEXT:    or %s17, 0, %s11439; CHECKFP-NEXT:    brge.l.t %s11, %s8, .LBB6_2440; CHECKFP-NEXT:  # %bb.1:441; CHECKFP-NEXT:    ld %s61, 24(, %s14)442; CHECKFP-NEXT:    or %s62, 0, %s0443; CHECKFP-NEXT:    lea %s63, 315444; CHECKFP-NEXT:    shm.l %s63, (%s61)445; CHECKFP-NEXT:    shm.l %s8, 8(%s61)446; CHECKFP-NEXT:    shm.l %s11, 16(%s61)447; CHECKFP-NEXT:    monc448; CHECKFP-NEXT:    or %s0, 0, %s62449; CHECKFP-NEXT:  .LBB6_2:450; CHECKFP-NEXT:    ld1b.zx %s0, (, %s0)451; CHECKFP-NEXT:    st1b %s0, 272(, %s17)452; CHECKFP-NEXT:    lea %s0, 15(, %s1)453; CHECKFP-NEXT:    and %s0, -16, %s0454; CHECKFP-NEXT:    lea %s1, __ve_grow_stack_align@lo455; CHECKFP-NEXT:    and %s1, %s1, (32)0456; CHECKFP-NEXT:    lea.sl %s12, __ve_grow_stack_align@hi(, %s1)457; CHECKFP-NEXT:    or %s1, -32, (0)1458; CHECKFP-NEXT:    bsic %s10, (, %s12)459; CHECKFP-NEXT:    lea %s0, 240(, %s11)460; CHECKFP-NEXT:    ld1b.zx %s1, 272(, %s17)461; CHECKFP-NEXT:    lea %s0, 31(, %s0)462; CHECKFP-NEXT:    and %s0, -32, %s0463; CHECKFP-NEXT:    st1b %s1, (, %s0)464; CHECKFP-NEXT:    or %s11, 0, %s9465; CHECKFP-NEXT:    ld %s17, 40(, %s11)466; CHECKFP-NEXT:    ld %s10, 8(, %s11)467; CHECKFP-NEXT:    ld %s9, (, %s11)468; CHECKFP-NEXT:    b.l.t (, %s10)469  %2 = alloca [16 x i8], align 16470  %3 = load i8, ptr %0, align 1471  store i8 %3, ptr %2, align 1472  %4 = alloca i8, i64 %n, align 32473  %5 = load i8, ptr %2, align 1474  store i8 %5, ptr %4, align 1475  ret ptr %4476}477 478