123 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=small < %s | \3; RUN: FileCheck --check-prefix=SMALL %s4; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=medium < %s | \5; RUN: FileCheck --check-prefix=MEDIUM %s6; RUN: llc --mtriple=loongarch64 -mattr=+d --code-model=large < %s | \7; RUN: FileCheck --check-prefix=LARGE %s8 9declare void @llvm.memset.p0.i64(ptr, i8, i64, i1)10declare i32 @callee(i32)11 12define i32 @call_globaladdress(i32 %a) nounwind {13; SMALL-LABEL: call_globaladdress:14; SMALL: # %bb.0:15; SMALL-NEXT: addi.d $sp, $sp, -1616; SMALL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill17; SMALL-NEXT: bl callee18; SMALL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload19; SMALL-NEXT: addi.d $sp, $sp, 1620; SMALL-NEXT: ret21;22; MEDIUM-LABEL: call_globaladdress:23; MEDIUM: # %bb.0:24; MEDIUM-NEXT: addi.d $sp, $sp, -1625; MEDIUM-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill26; MEDIUM-NEXT: pcaddu18i $ra, %call36(callee)27; MEDIUM-NEXT: jirl $ra, $ra, 028; MEDIUM-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload29; MEDIUM-NEXT: addi.d $sp, $sp, 1630; MEDIUM-NEXT: ret31;32; LARGE-LABEL: call_globaladdress:33; LARGE: # %bb.0:34; LARGE-NEXT: addi.d $sp, $sp, -1635; LARGE-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill36; LARGE-NEXT: pcalau12i $a1, %got_pc_hi20(callee)37; LARGE-NEXT: addi.d $ra, $zero, %got_pc_lo12(callee)38; LARGE-NEXT: lu32i.d $ra, %got64_pc_lo20(callee)39; LARGE-NEXT: lu52i.d $ra, $ra, %got64_pc_hi12(callee)40; LARGE-NEXT: ldx.d $ra, $ra, $a141; LARGE-NEXT: jirl $ra, $ra, 042; LARGE-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload43; LARGE-NEXT: addi.d $sp, $sp, 1644; LARGE-NEXT: ret45 %1 = call i32 @callee(i32 %a)46 ret i32 %147}48 49define void @call_external_sym(ptr %dst) {50; SMALL-LABEL: call_external_sym:51; SMALL: # %bb.0: # %entry52; SMALL-NEXT: addi.d $sp, $sp, -1653; SMALL-NEXT: .cfi_def_cfa_offset 1654; SMALL-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill55; SMALL-NEXT: .cfi_offset 1, -856; SMALL-NEXT: ori $a2, $zero, 100057; SMALL-NEXT: move $a1, $zero58; SMALL-NEXT: bl memset59; SMALL-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload60; SMALL-NEXT: addi.d $sp, $sp, 1661; SMALL-NEXT: ret62;63; MEDIUM-LABEL: call_external_sym:64; MEDIUM: # %bb.0: # %entry65; MEDIUM-NEXT: addi.d $sp, $sp, -1666; MEDIUM-NEXT: .cfi_def_cfa_offset 1667; MEDIUM-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill68; MEDIUM-NEXT: .cfi_offset 1, -869; MEDIUM-NEXT: ori $a2, $zero, 100070; MEDIUM-NEXT: move $a1, $zero71; MEDIUM-NEXT: pcaddu18i $ra, %call36(memset)72; MEDIUM-NEXT: jirl $ra, $ra, 073; MEDIUM-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload74; MEDIUM-NEXT: addi.d $sp, $sp, 1675; MEDIUM-NEXT: ret76;77; LARGE-LABEL: call_external_sym:78; LARGE: # %bb.0: # %entry79; LARGE-NEXT: addi.d $sp, $sp, -1680; LARGE-NEXT: .cfi_def_cfa_offset 1681; LARGE-NEXT: st.d $ra, $sp, 8 # 8-byte Folded Spill82; LARGE-NEXT: .cfi_offset 1, -883; LARGE-NEXT: ori $a2, $zero, 100084; LARGE-NEXT: move $a1, $zero85; LARGE-NEXT: pcalau12i $a3, %got_pc_hi20(memset)86; LARGE-NEXT: addi.d $ra, $zero, %got_pc_lo12(memset)87; LARGE-NEXT: lu32i.d $ra, %got64_pc_lo20(memset)88; LARGE-NEXT: lu52i.d $ra, $ra, %got64_pc_hi12(memset)89; LARGE-NEXT: ldx.d $ra, $ra, $a390; LARGE-NEXT: jirl $ra, $ra, 091; LARGE-NEXT: ld.d $ra, $sp, 8 # 8-byte Folded Reload92; LARGE-NEXT: addi.d $sp, $sp, 1693; LARGE-NEXT: ret94entry:95 call void @llvm.memset.p0.i64(ptr %dst, i8 0, i64 1000, i1 false)96 ret void97}98 99;; Tail call with different codemodel.100declare i32 @callee_tail(i32 %i)101define i32 @caller_tail(i32 %i) nounwind {102; SMALL-LABEL: caller_tail:103; SMALL: # %bb.0: # %entry104; SMALL-NEXT: b callee_tail105;106; MEDIUM-LABEL: caller_tail:107; MEDIUM: # %bb.0: # %entry108; MEDIUM-NEXT: pcaddu18i $t8, %call36(callee_tail)109; MEDIUM-NEXT: jr $t8110;111; LARGE-LABEL: caller_tail:112; LARGE: # %bb.0: # %entry113; LARGE-NEXT: pcalau12i $a1, %got_pc_hi20(callee_tail)114; LARGE-NEXT: addi.d $a2, $zero, %got_pc_lo12(callee_tail)115; LARGE-NEXT: lu32i.d $a2, %got64_pc_lo20(callee_tail)116; LARGE-NEXT: lu52i.d $a2, $a2, %got64_pc_hi12(callee_tail)117; LARGE-NEXT: ldx.d $a1, $a2, $a1118; LARGE-NEXT: jr $a1119entry:120 %r = tail call i32 @callee_tail(i32 %i)121 ret i32 %r122}123