92 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck --check-prefix=LA32 %s3; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck --check-prefix=LA64 %s4 5declare i32 @external_function(i32)6 7define i32 @test_call_external(i32 %a) nounwind {8; LA32-LABEL: test_call_external:9; LA32: # %bb.0:10; LA32-NEXT: addi.w $sp, $sp, -1611; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill12; LA32-NEXT: bl external_function13; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload14; LA32-NEXT: addi.w $sp, $sp, 1615; LA32-NEXT: ret16;17; LA64-LABEL: test_call_external:18; LA64: # %bb.0:19; LA64-NEXT: addi.d $sp, $sp, -1620; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill21; LA64-NEXT: pcaddu18i $ra, %call36(external_function)22; LA64-NEXT: jirl $ra, $ra, 023; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload24; LA64-NEXT: addi.d $sp, $sp, 1625; LA64-NEXT: ret26 %1 = call i32 @external_function(i32 %a)27 ret i32 %128}29 30define i32 @defined_function(i32 %a) nounwind {31; LA32-LABEL: defined_function:32; LA32: # %bb.0:33; LA32-NEXT: addi.w $a0, $a0, 134; LA32-NEXT: ret35;36; LA64-LABEL: defined_function:37; LA64: # %bb.0:38; LA64-NEXT: addi.w $a0, $a0, 139; LA64-NEXT: ret40 %1 = add i32 %a, 141 ret i32 %142}43 44define i32 @test_call_defined(i32 %a) nounwind {45; LA32-LABEL: test_call_defined:46; LA32: # %bb.0:47; LA32-NEXT: addi.w $sp, $sp, -1648; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill49; LA32-NEXT: bl defined_function50; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload51; LA32-NEXT: addi.w $sp, $sp, 1652; LA32-NEXT: ret53;54; LA64-LABEL: test_call_defined:55; LA64: # %bb.0:56; LA64-NEXT: addi.d $sp, $sp, -1657; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill58; LA64-NEXT: pcaddu18i $ra, %call36(defined_function)59; LA64-NEXT: jirl $ra, $ra, 060; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload61; LA64-NEXT: addi.d $sp, $sp, 1662; LA64-NEXT: ret63 %1 = call i32 @defined_function(i32 %a) nounwind64 ret i32 %165}66 67define i32 @test_call_indirect(ptr %a, i32 %b) nounwind {68; LA32-LABEL: test_call_indirect:69; LA32: # %bb.0:70; LA32-NEXT: addi.w $sp, $sp, -1671; LA32-NEXT: st.w $ra, $sp, 12 # 4-byte Folded Spill72; LA32-NEXT: move $a2, $a073; LA32-NEXT: move $a0, $a174; LA32-NEXT: jirl $ra, $a2, 075; LA32-NEXT: ld.w $ra, $sp, 12 # 4-byte Folded Reload76; LA32-NEXT: addi.w $sp, $sp, 1677; LA32-NEXT: ret78;79; LA64-LABEL: test_call_indirect:80; LA64: # %bb.0:81; LA64-NEXT: addi.d $sp, $sp, -1682; LA64-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill83; LA64-NEXT: move $a2, $a084; LA64-NEXT: move $a0, $a185; LA64-NEXT: jirl $ra, $a2, 086; LA64-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload87; LA64-NEXT: addi.d $sp, $sp, 1688; LA64-NEXT: ret89 %1 = call i32 %a(i32 %b)90 ret i32 %191}92