brintos

brintos / llvm-project-archived public Read only

0
0
Text · 12.5 KiB · 26c53d4 Raw
322 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=loongarch32 < %s | FileCheck %s -check-prefix=LA323; RUN: llc -mtriple=loongarch64 < %s | FileCheck %s -check-prefix=LA644 5; Check the PreserveMost calling convention works.6 7declare void @standard_cc_func()8declare preserve_mostcc void @preserve_mostcc_func()9 10define preserve_mostcc void @preserve_mostcc1() nounwind {11; LA32-LABEL: preserve_mostcc1:12; LA32:       # %bb.0: # %entry13; LA32-NEXT:    addi.w $sp, $sp, -6414; LA32-NEXT:    st.w $ra, $sp, 60 # 4-byte Folded Spill15; LA32-NEXT:    st.w $a0, $sp, 56 # 4-byte Folded Spill16; LA32-NEXT:    st.w $a1, $sp, 52 # 4-byte Folded Spill17; LA32-NEXT:    st.w $a2, $sp, 48 # 4-byte Folded Spill18; LA32-NEXT:    st.w $a3, $sp, 44 # 4-byte Folded Spill19; LA32-NEXT:    st.w $a4, $sp, 40 # 4-byte Folded Spill20; LA32-NEXT:    st.w $a5, $sp, 36 # 4-byte Folded Spill21; LA32-NEXT:    st.w $a6, $sp, 32 # 4-byte Folded Spill22; LA32-NEXT:    st.w $a7, $sp, 28 # 4-byte Folded Spill23; LA32-NEXT:    st.w $t4, $sp, 24 # 4-byte Folded Spill24; LA32-NEXT:    st.w $t5, $sp, 20 # 4-byte Folded Spill25; LA32-NEXT:    st.w $t6, $sp, 16 # 4-byte Folded Spill26; LA32-NEXT:    st.w $t7, $sp, 12 # 4-byte Folded Spill27; LA32-NEXT:    bl standard_cc_func28; LA32-NEXT:    ld.w $t7, $sp, 12 # 4-byte Folded Reload29; LA32-NEXT:    ld.w $t6, $sp, 16 # 4-byte Folded Reload30; LA32-NEXT:    ld.w $t5, $sp, 20 # 4-byte Folded Reload31; LA32-NEXT:    ld.w $t4, $sp, 24 # 4-byte Folded Reload32; LA32-NEXT:    ld.w $a7, $sp, 28 # 4-byte Folded Reload33; LA32-NEXT:    ld.w $a6, $sp, 32 # 4-byte Folded Reload34; LA32-NEXT:    ld.w $a5, $sp, 36 # 4-byte Folded Reload35; LA32-NEXT:    ld.w $a4, $sp, 40 # 4-byte Folded Reload36; LA32-NEXT:    ld.w $a3, $sp, 44 # 4-byte Folded Reload37; LA32-NEXT:    ld.w $a2, $sp, 48 # 4-byte Folded Reload38; LA32-NEXT:    ld.w $a1, $sp, 52 # 4-byte Folded Reload39; LA32-NEXT:    ld.w $a0, $sp, 56 # 4-byte Folded Reload40; LA32-NEXT:    ld.w $ra, $sp, 60 # 4-byte Folded Reload41; LA32-NEXT:    addi.w $sp, $sp, 6442; LA32-NEXT:    ret43;44; LA64-LABEL: preserve_mostcc1:45; LA64:       # %bb.0: # %entry46; LA64-NEXT:    addi.d $sp, $sp, -11247; LA64-NEXT:    st.d $ra, $sp, 104 # 8-byte Folded Spill48; LA64-NEXT:    st.d $a0, $sp, 96 # 8-byte Folded Spill49; LA64-NEXT:    st.d $a1, $sp, 88 # 8-byte Folded Spill50; LA64-NEXT:    st.d $a2, $sp, 80 # 8-byte Folded Spill51; LA64-NEXT:    st.d $a3, $sp, 72 # 8-byte Folded Spill52; LA64-NEXT:    st.d $a4, $sp, 64 # 8-byte Folded Spill53; LA64-NEXT:    st.d $a5, $sp, 56 # 8-byte Folded Spill54; LA64-NEXT:    st.d $a6, $sp, 48 # 8-byte Folded Spill55; LA64-NEXT:    st.d $a7, $sp, 40 # 8-byte Folded Spill56; LA64-NEXT:    st.d $t4, $sp, 32 # 8-byte Folded Spill57; LA64-NEXT:    st.d $t5, $sp, 24 # 8-byte Folded Spill58; LA64-NEXT:    st.d $t6, $sp, 16 # 8-byte Folded Spill59; LA64-NEXT:    st.d $t7, $sp, 8 # 8-byte Folded Spill60; LA64-NEXT:    pcaddu18i $ra, %call36(standard_cc_func)61; LA64-NEXT:    jirl $ra, $ra, 062; LA64-NEXT:    ld.d $t7, $sp, 8 # 8-byte Folded Reload63; LA64-NEXT:    ld.d $t6, $sp, 16 # 8-byte Folded Reload64; LA64-NEXT:    ld.d $t5, $sp, 24 # 8-byte Folded Reload65; LA64-NEXT:    ld.d $t4, $sp, 32 # 8-byte Folded Reload66; LA64-NEXT:    ld.d $a7, $sp, 40 # 8-byte Folded Reload67; LA64-NEXT:    ld.d $a6, $sp, 48 # 8-byte Folded Reload68; LA64-NEXT:    ld.d $a5, $sp, 56 # 8-byte Folded Reload69; LA64-NEXT:    ld.d $a4, $sp, 64 # 8-byte Folded Reload70; LA64-NEXT:    ld.d $a3, $sp, 72 # 8-byte Folded Reload71; LA64-NEXT:    ld.d $a2, $sp, 80 # 8-byte Folded Reload72; LA64-NEXT:    ld.d $a1, $sp, 88 # 8-byte Folded Reload73; LA64-NEXT:    ld.d $a0, $sp, 96 # 8-byte Folded Reload74; LA64-NEXT:    ld.d $ra, $sp, 104 # 8-byte Folded Reload75; LA64-NEXT:    addi.d $sp, $sp, 11276; LA64-NEXT:    ret77entry:78  call void @standard_cc_func()79  ret void80}81 82define preserve_mostcc void @preserve_mostcc2() nounwind {83; LA32-LABEL: preserve_mostcc2:84; LA32:       # %bb.0:85; LA32-NEXT:    addi.w $sp, $sp, -1686; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill87; LA32-NEXT:    bl preserve_mostcc_func88; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload89; LA32-NEXT:    addi.w $sp, $sp, 1690; LA32-NEXT:    ret91;92; LA64-LABEL: preserve_mostcc2:93; LA64:       # %bb.0:94; LA64-NEXT:    addi.d $sp, $sp, -1695; LA64-NEXT:    st.d $ra, $sp, 8 # 8-byte Folded Spill96; LA64-NEXT:    pcaddu18i $ra, %call36(preserve_mostcc_func)97; LA64-NEXT:    jirl $ra, $ra, 098; LA64-NEXT:    ld.d $ra, $sp, 8 # 8-byte Folded Reload99; LA64-NEXT:    addi.d $sp, $sp, 16100; LA64-NEXT:    ret101  call preserve_mostcc void @preserve_mostcc_func()102  ret void103}104 105define void @preserve_mostcc3() nounwind {106; LA32-LABEL: preserve_mostcc3:107; LA32:       # %bb.0:108; LA32-NEXT:    addi.w $sp, $sp, -16109; LA32-NEXT:    st.w $ra, $sp, 12 # 4-byte Folded Spill110; LA32-NEXT:    st.w $s0, $sp, 8 # 4-byte Folded Spill111; LA32-NEXT:    st.w $s1, $sp, 4 # 4-byte Folded Spill112; LA32-NEXT:    #APP113; LA32-NEXT:    #NO_APP114; LA32-NEXT:    move $a0, $t0115; LA32-NEXT:    #APP116; LA32-NEXT:    #NO_APP117; LA32-NEXT:    move $a1, $t1118; LA32-NEXT:    #APP119; LA32-NEXT:    #NO_APP120; LA32-NEXT:    move $a2, $t2121; LA32-NEXT:    #APP122; LA32-NEXT:    #NO_APP123; LA32-NEXT:    move $a3, $t3124; LA32-NEXT:    #APP125; LA32-NEXT:    #NO_APP126; LA32-NEXT:    move $a4, $t8127; LA32-NEXT:    #APP128; LA32-NEXT:    #NO_APP129; LA32-NEXT:    #APP130; LA32-NEXT:    #NO_APP131; LA32-NEXT:    bl preserve_mostcc_func132; LA32-NEXT:    move $t0, $a0133; LA32-NEXT:    move $t1, $a1134; LA32-NEXT:    move $t2, $a2135; LA32-NEXT:    move $t3, $a3136; LA32-NEXT:    move $t8, $a4137; LA32-NEXT:    #APP138; LA32-NEXT:    #NO_APP139; LA32-NEXT:    ld.w $s1, $sp, 4 # 4-byte Folded Reload140; LA32-NEXT:    ld.w $s0, $sp, 8 # 4-byte Folded Reload141; LA32-NEXT:    ld.w $ra, $sp, 12 # 4-byte Folded Reload142; LA32-NEXT:    addi.w $sp, $sp, 16143; LA32-NEXT:    ret144;145; LA64-LABEL: preserve_mostcc3:146; LA64:       # %bb.0:147; LA64-NEXT:    addi.d $sp, $sp, -96148; LA64-NEXT:    st.d $ra, $sp, 88 # 8-byte Folded Spill149; LA64-NEXT:    st.d $s0, $sp, 80 # 8-byte Folded Spill150; LA64-NEXT:    st.d $s1, $sp, 72 # 8-byte Folded Spill151; LA64-NEXT:    fst.d $fs0, $sp, 64 # 8-byte Folded Spill152; LA64-NEXT:    fst.d $fs1, $sp, 56 # 8-byte Folded Spill153; LA64-NEXT:    fst.d $fs2, $sp, 48 # 8-byte Folded Spill154; LA64-NEXT:    fst.d $fs3, $sp, 40 # 8-byte Folded Spill155; LA64-NEXT:    fst.d $fs4, $sp, 32 # 8-byte Folded Spill156; LA64-NEXT:    fst.d $fs5, $sp, 24 # 8-byte Folded Spill157; LA64-NEXT:    fst.d $fs6, $sp, 16 # 8-byte Folded Spill158; LA64-NEXT:    fst.d $fs7, $sp, 8 # 8-byte Folded Spill159; LA64-NEXT:    #APP160; LA64-NEXT:    #NO_APP161; LA64-NEXT:    move $a0, $t0162; LA64-NEXT:    #APP163; LA64-NEXT:    #NO_APP164; LA64-NEXT:    move $a1, $t1165; LA64-NEXT:    #APP166; LA64-NEXT:    #NO_APP167; LA64-NEXT:    move $a2, $t2168; LA64-NEXT:    #APP169; LA64-NEXT:    #NO_APP170; LA64-NEXT:    move $a3, $t3171; LA64-NEXT:    #APP172; LA64-NEXT:    #NO_APP173; LA64-NEXT:    move $a4, $t8174; LA64-NEXT:    #APP175; LA64-NEXT:    #NO_APP176; LA64-NEXT:    #APP177; LA64-NEXT:    #NO_APP178; LA64-NEXT:    pcaddu18i $ra, %call36(preserve_mostcc_func)179; LA64-NEXT:    jirl $ra, $ra, 0180; LA64-NEXT:    move $t0, $a0181; LA64-NEXT:    move $t1, $a1182; LA64-NEXT:    move $t2, $a2183; LA64-NEXT:    move $t3, $a3184; LA64-NEXT:    move $t8, $a4185; LA64-NEXT:    #APP186; LA64-NEXT:    #NO_APP187; LA64-NEXT:    fld.d $fs7, $sp, 8 # 8-byte Folded Reload188; LA64-NEXT:    fld.d $fs6, $sp, 16 # 8-byte Folded Reload189; LA64-NEXT:    fld.d $fs5, $sp, 24 # 8-byte Folded Reload190; LA64-NEXT:    fld.d $fs4, $sp, 32 # 8-byte Folded Reload191; LA64-NEXT:    fld.d $fs3, $sp, 40 # 8-byte Folded Reload192; LA64-NEXT:    fld.d $fs2, $sp, 48 # 8-byte Folded Reload193; LA64-NEXT:    fld.d $fs1, $sp, 56 # 8-byte Folded Reload194; LA64-NEXT:    fld.d $fs0, $sp, 64 # 8-byte Folded Reload195; LA64-NEXT:    ld.d $s1, $sp, 72 # 8-byte Folded Reload196; LA64-NEXT:    ld.d $s0, $sp, 80 # 8-byte Folded Reload197; LA64-NEXT:    ld.d $ra, $sp, 88 # 8-byte Folded Reload198; LA64-NEXT:    addi.d $sp, $sp, 96199; LA64-NEXT:    ret200  %1 = call i32 asm sideeffect "", "={r12}"() nounwind201  %2 = call i32 asm sideeffect "", "={r13}"() nounwind202  %3 = call i32 asm sideeffect "", "={r14}"() nounwind203  %4 = call i32 asm sideeffect "", "={r15}"() nounwind204  %5 = call i32 asm sideeffect "", "={r20}"() nounwind205  %6 = call i32 asm sideeffect "", "={r23}"() nounwind206  %7 = call i32 asm sideeffect "", "={r24}"() nounwind207  call preserve_mostcc void @preserve_mostcc_func()208  call void asm sideeffect "", "{r12},{r13},{r14},{r15},{r20},{r23},{r24}"(i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7)209  ret void210}211 212define void @preserve_mostcc4() nounwind {213; LA32-LABEL: preserve_mostcc4:214; LA32:       # %bb.0:215; LA32-NEXT:    addi.w $sp, $sp, -32216; LA32-NEXT:    st.w $ra, $sp, 28 # 4-byte Folded Spill217; LA32-NEXT:    st.w $fp, $sp, 24 # 4-byte Folded Spill218; LA32-NEXT:    st.w $s0, $sp, 20 # 4-byte Folded Spill219; LA32-NEXT:    st.w $s1, $sp, 16 # 4-byte Folded Spill220; LA32-NEXT:    st.w $s2, $sp, 12 # 4-byte Folded Spill221; LA32-NEXT:    st.w $s3, $sp, 8 # 4-byte Folded Spill222; LA32-NEXT:    st.w $s4, $sp, 4 # 4-byte Folded Spill223; LA32-NEXT:    st.w $s5, $sp, 0 # 4-byte Folded Spill224; LA32-NEXT:    #APP225; LA32-NEXT:    #NO_APP226; LA32-NEXT:    move $fp, $t0227; LA32-NEXT:    #APP228; LA32-NEXT:    #NO_APP229; LA32-NEXT:    move $s2, $t1230; LA32-NEXT:    #APP231; LA32-NEXT:    #NO_APP232; LA32-NEXT:    move $s3, $t2233; LA32-NEXT:    #APP234; LA32-NEXT:    #NO_APP235; LA32-NEXT:    move $s4, $t3236; LA32-NEXT:    #APP237; LA32-NEXT:    #NO_APP238; LA32-NEXT:    move $s5, $t8239; LA32-NEXT:    #APP240; LA32-NEXT:    #NO_APP241; LA32-NEXT:    #APP242; LA32-NEXT:    #NO_APP243; LA32-NEXT:    bl standard_cc_func244; LA32-NEXT:    move $t0, $fp245; LA32-NEXT:    move $t1, $s2246; LA32-NEXT:    move $t2, $s3247; LA32-NEXT:    move $t3, $s4248; LA32-NEXT:    move $t8, $s5249; LA32-NEXT:    #APP250; LA32-NEXT:    #NO_APP251; LA32-NEXT:    ld.w $s5, $sp, 0 # 4-byte Folded Reload252; LA32-NEXT:    ld.w $s4, $sp, 4 # 4-byte Folded Reload253; LA32-NEXT:    ld.w $s3, $sp, 8 # 4-byte Folded Reload254; LA32-NEXT:    ld.w $s2, $sp, 12 # 4-byte Folded Reload255; LA32-NEXT:    ld.w $s1, $sp, 16 # 4-byte Folded Reload256; LA32-NEXT:    ld.w $s0, $sp, 20 # 4-byte Folded Reload257; LA32-NEXT:    ld.w $fp, $sp, 24 # 4-byte Folded Reload258; LA32-NEXT:    ld.w $ra, $sp, 28 # 4-byte Folded Reload259; LA32-NEXT:    addi.w $sp, $sp, 32260; LA32-NEXT:    ret261;262; LA64-LABEL: preserve_mostcc4:263; LA64:       # %bb.0:264; LA64-NEXT:    addi.d $sp, $sp, -80265; LA64-NEXT:    st.d $ra, $sp, 72 # 8-byte Folded Spill266; LA64-NEXT:    st.d $fp, $sp, 64 # 8-byte Folded Spill267; LA64-NEXT:    st.d $s0, $sp, 56 # 8-byte Folded Spill268; LA64-NEXT:    st.d $s1, $sp, 48 # 8-byte Folded Spill269; LA64-NEXT:    st.d $s2, $sp, 40 # 8-byte Folded Spill270; LA64-NEXT:    st.d $s3, $sp, 32 # 8-byte Folded Spill271; LA64-NEXT:    st.d $s4, $sp, 24 # 8-byte Folded Spill272; LA64-NEXT:    st.d $s5, $sp, 16 # 8-byte Folded Spill273; LA64-NEXT:    #APP274; LA64-NEXT:    #NO_APP275; LA64-NEXT:    move $fp, $t0276; LA64-NEXT:    #APP277; LA64-NEXT:    #NO_APP278; LA64-NEXT:    move $s2, $t1279; LA64-NEXT:    #APP280; LA64-NEXT:    #NO_APP281; LA64-NEXT:    move $s3, $t2282; LA64-NEXT:    #APP283; LA64-NEXT:    #NO_APP284; LA64-NEXT:    move $s4, $t3285; LA64-NEXT:    #APP286; LA64-NEXT:    #NO_APP287; LA64-NEXT:    move $s5, $t8288; LA64-NEXT:    #APP289; LA64-NEXT:    #NO_APP290; LA64-NEXT:    #APP291; LA64-NEXT:    #NO_APP292; LA64-NEXT:    pcaddu18i $ra, %call36(standard_cc_func)293; LA64-NEXT:    jirl $ra, $ra, 0294; LA64-NEXT:    move $t0, $fp295; LA64-NEXT:    move $t1, $s2296; LA64-NEXT:    move $t2, $s3297; LA64-NEXT:    move $t3, $s4298; LA64-NEXT:    move $t8, $s5299; LA64-NEXT:    #APP300; LA64-NEXT:    #NO_APP301; LA64-NEXT:    ld.d $s5, $sp, 16 # 8-byte Folded Reload302; LA64-NEXT:    ld.d $s4, $sp, 24 # 8-byte Folded Reload303; LA64-NEXT:    ld.d $s3, $sp, 32 # 8-byte Folded Reload304; LA64-NEXT:    ld.d $s2, $sp, 40 # 8-byte Folded Reload305; LA64-NEXT:    ld.d $s1, $sp, 48 # 8-byte Folded Reload306; LA64-NEXT:    ld.d $s0, $sp, 56 # 8-byte Folded Reload307; LA64-NEXT:    ld.d $fp, $sp, 64 # 8-byte Folded Reload308; LA64-NEXT:    ld.d $ra, $sp, 72 # 8-byte Folded Reload309; LA64-NEXT:    addi.d $sp, $sp, 80310; LA64-NEXT:    ret311  %1 = call i32 asm sideeffect "", "={r12}"() nounwind312  %2 = call i32 asm sideeffect "", "={r13}"() nounwind313  %3 = call i32 asm sideeffect "", "={r14}"() nounwind314  %4 = call i32 asm sideeffect "", "={r15}"() nounwind315  %5 = call i32 asm sideeffect "", "={r20}"() nounwind316  %6 = call i32 asm sideeffect "", "={r23}"() nounwind317  %7 = call i32 asm sideeffect "", "={r24}"() nounwind318  call void @standard_cc_func()319  call void asm sideeffect "", "{r12},{r13},{r14},{r15},{r20},{r23},{r24}"(i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7)320  ret void321}322