184 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS323; RUN: llc -O0 -mtriple=mipsel-linux-gnu -global-isel -relocation-model=pic -verify-machineinstrs %s -o -| FileCheck %s -check-prefixes=MIPS32_PIC4 5declare i32 @f(i32 %a, i32 %b);6 7define i32 @call_global(i32 %a0, i32 %a1, i32 %x, i32 %y) {8; MIPS32-LABEL: call_global:9; MIPS32: # %bb.0: # %entry10; MIPS32-NEXT: addiu $sp, $sp, -2411; MIPS32-NEXT: .cfi_def_cfa_offset 2412; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill13; MIPS32-NEXT: .cfi_offset 31, -414; MIPS32-NEXT: move $4, $615; MIPS32-NEXT: move $5, $716; MIPS32-NEXT: jal f17; MIPS32-NEXT: nop18; MIPS32-NEXT: addu $2, $2, $219; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload20; MIPS32-NEXT: addiu $sp, $sp, 2421; MIPS32-NEXT: jr $ra22; MIPS32-NEXT: nop23;24; MIPS32_PIC-LABEL: call_global:25; MIPS32_PIC: # %bb.0: # %entry26; MIPS32_PIC-NEXT: lui $2, %hi(_gp_disp)27; MIPS32_PIC-NEXT: addiu $2, $2, %lo(_gp_disp)28; MIPS32_PIC-NEXT: addiu $sp, $sp, -2429; MIPS32_PIC-NEXT: .cfi_def_cfa_offset 2430; MIPS32_PIC-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill31; MIPS32_PIC-NEXT: .cfi_offset 31, -432; MIPS32_PIC-NEXT: addu $gp, $2, $2533; MIPS32_PIC-NEXT: move $4, $634; MIPS32_PIC-NEXT: move $5, $735; MIPS32_PIC-NEXT: lw $25, %call16(f)($gp)36; MIPS32_PIC-NEXT: jalr $2537; MIPS32_PIC-NEXT: nop38; MIPS32_PIC-NEXT: addu $2, $2, $239; MIPS32_PIC-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload40; MIPS32_PIC-NEXT: addiu $sp, $sp, 2441; MIPS32_PIC-NEXT: jr $ra42; MIPS32_PIC-NEXT: nop43entry:44 %z = call i32 @f(i32 %x, i32 %y)45 %doublez = add i32 %z, %z46 ret i32 %doublez47}48 49define internal i32 @f_with_local_linkage(i32 %x, i32 %y) {50; MIPS32-LABEL: f_with_local_linkage:51; MIPS32: # %bb.0: # %entry52; MIPS32-NEXT: addu $2, $5, $453; MIPS32-NEXT: jr $ra54; MIPS32-NEXT: nop55;56; MIPS32_PIC-LABEL: f_with_local_linkage:57; MIPS32_PIC: # %bb.0: # %entry58; MIPS32_PIC-NEXT: addu $2, $5, $459; MIPS32_PIC-NEXT: jr $ra60; MIPS32_PIC-NEXT: nop61entry:62 %add = add i32 %y, %x63 ret i32 %add64}65 66define i32 @call_global_with_local_linkage(i32 %a0, i32 %a1, i32 %x, i32 %y) {67; MIPS32-LABEL: call_global_with_local_linkage:68; MIPS32: # %bb.0: # %entry69; MIPS32-NEXT: addiu $sp, $sp, -2470; MIPS32-NEXT: .cfi_def_cfa_offset 2471; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill72; MIPS32-NEXT: .cfi_offset 31, -473; MIPS32-NEXT: move $4, $674; MIPS32-NEXT: move $5, $775; MIPS32-NEXT: jal f_with_local_linkage76; MIPS32-NEXT: nop77; MIPS32-NEXT: addu $2, $2, $278; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload79; MIPS32-NEXT: addiu $sp, $sp, 2480; MIPS32-NEXT: jr $ra81; MIPS32-NEXT: nop82;83; MIPS32_PIC-LABEL: call_global_with_local_linkage:84; MIPS32_PIC: # %bb.0: # %entry85; MIPS32_PIC-NEXT: lui $2, %hi(_gp_disp)86; MIPS32_PIC-NEXT: addiu $2, $2, %lo(_gp_disp)87; MIPS32_PIC-NEXT: addiu $sp, $sp, -2488; MIPS32_PIC-NEXT: .cfi_def_cfa_offset 2489; MIPS32_PIC-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill90; MIPS32_PIC-NEXT: .cfi_offset 31, -491; MIPS32_PIC-NEXT: addu $gp, $2, $2592; MIPS32_PIC-NEXT: move $4, $693; MIPS32_PIC-NEXT: move $5, $794; MIPS32_PIC-NEXT: lw $1, %got(f_with_local_linkage)($gp)95; MIPS32_PIC-NEXT: addiu $25, $1, %lo(f_with_local_linkage)96; MIPS32_PIC-NEXT: jalr $2597; MIPS32_PIC-NEXT: nop98; MIPS32_PIC-NEXT: addu $2, $2, $299; MIPS32_PIC-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload100; MIPS32_PIC-NEXT: addiu $sp, $sp, 24101; MIPS32_PIC-NEXT: jr $ra102; MIPS32_PIC-NEXT: nop103entry:104 %z = call i32 @f_with_local_linkage(i32 %x, i32 %y)105 %doublez = add i32 %z, %z106 ret i32 %doublez107}108 109define i32 @call_reg(ptr %f_ptr, i32 %x, i32 %y) {110; MIPS32-LABEL: call_reg:111; MIPS32: # %bb.0: # %entry112; MIPS32-NEXT: addiu $sp, $sp, -24113; MIPS32-NEXT: .cfi_def_cfa_offset 24114; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill115; MIPS32-NEXT: .cfi_offset 31, -4116; MIPS32-NEXT: move $25, $4117; MIPS32-NEXT: move $4, $5118; MIPS32-NEXT: move $5, $6119; MIPS32-NEXT: jalr $25120; MIPS32-NEXT: nop121; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload122; MIPS32-NEXT: addiu $sp, $sp, 24123; MIPS32-NEXT: jr $ra124; MIPS32-NEXT: nop125;126; MIPS32_PIC-LABEL: call_reg:127; MIPS32_PIC: # %bb.0: # %entry128; MIPS32_PIC-NEXT: addiu $sp, $sp, -24129; MIPS32_PIC-NEXT: .cfi_def_cfa_offset 24130; MIPS32_PIC-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill131; MIPS32_PIC-NEXT: .cfi_offset 31, -4132; MIPS32_PIC-NEXT: move $25, $4133; MIPS32_PIC-NEXT: move $4, $5134; MIPS32_PIC-NEXT: move $5, $6135; MIPS32_PIC-NEXT: jalr $25136; MIPS32_PIC-NEXT: nop137; MIPS32_PIC-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload138; MIPS32_PIC-NEXT: addiu $sp, $sp, 24139; MIPS32_PIC-NEXT: jr $ra140; MIPS32_PIC-NEXT: nop141entry:142 %call = call i32 %f_ptr(i32 %x, i32 %y)143 ret i32 %call144}145 146declare void @llvm.memcpy.p0.p0.i32(ptr nocapture writeonly, ptr nocapture readonly, i32, i1 immarg)147 148define void @call_symbol(ptr nocapture readonly %src, ptr nocapture %dest, i32 signext %length) {149; MIPS32-LABEL: call_symbol:150; MIPS32: # %bb.0: # %entry151; MIPS32-NEXT: addiu $sp, $sp, -24152; MIPS32-NEXT: .cfi_def_cfa_offset 24153; MIPS32-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill154; MIPS32-NEXT: .cfi_offset 31, -4155; MIPS32-NEXT: sw $4, 16($sp) # 4-byte Folded Spill156; MIPS32-NEXT: move $4, $5157; MIPS32-NEXT: lw $5, 16($sp) # 4-byte Folded Reload158; MIPS32-NEXT: jal memcpy159; MIPS32-NEXT: nop160; MIPS32-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload161; MIPS32-NEXT: addiu $sp, $sp, 24162; MIPS32-NEXT: jr $ra163; MIPS32-NEXT: nop164;165; MIPS32_PIC-LABEL: call_symbol:166; MIPS32_PIC: # %bb.0: # %entry167; MIPS32_PIC-NEXT: addiu $sp, $sp, -24168; MIPS32_PIC-NEXT: .cfi_def_cfa_offset 24169; MIPS32_PIC-NEXT: sw $ra, 20($sp) # 4-byte Folded Spill170; MIPS32_PIC-NEXT: .cfi_offset 31, -4171; MIPS32_PIC-NEXT: sw $4, 16($sp) # 4-byte Folded Spill172; MIPS32_PIC-NEXT: move $4, $5173; MIPS32_PIC-NEXT: lw $5, 16($sp) # 4-byte Folded Reload174; MIPS32_PIC-NEXT: jal memcpy175; MIPS32_PIC-NEXT: nop176; MIPS32_PIC-NEXT: lw $ra, 20($sp) # 4-byte Folded Reload177; MIPS32_PIC-NEXT: addiu $sp, $sp, 24178; MIPS32_PIC-NEXT: jr $ra179; MIPS32_PIC-NEXT: nop180entry:181 call void @llvm.memcpy.p0.p0.i32(ptr align 1 %dest, ptr align 1 %src, i32 %length, i1 false)182 ret void183}184