257 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=mipsel-unknown-linux-gnu -relocation-model=pic \3; RUN: -mips-jalr-reloc=false < %s | FileCheck %s4 5%0 = type { i8, i16, i32, i64, double, i32, [4 x i8] }6%struct.S1 = type { i8, i16, i32, i64, double, i32 }7%struct.S2 = type { [4 x i32] }8%struct.S3 = type { i8 }9 10@f1.s1 = internal unnamed_addr constant %0 { i8 1, i16 2, i32 3, i64 4, double 5.000000e+00, i32 6, [4 x i8] undef }, align 811@f1.s2 = internal unnamed_addr constant %struct.S2 { [4 x i32] [i32 7, i32 8, i32 9, i32 10] }, align 412 13define void @f1() nounwind {14; CHECK-LABEL: f1:15; CHECK: # %bb.0: # %entry16; CHECK-NEXT: lui $2, %hi(_gp_disp)17; CHECK-NEXT: addiu $2, $2, %lo(_gp_disp)18; CHECK-NEXT: addiu $sp, $sp, -6419; CHECK-NEXT: sw $ra, 60($sp) # 4-byte Folded Spill20; CHECK-NEXT: sw $18, 56($sp) # 4-byte Folded Spill21; CHECK-NEXT: sw $17, 52($sp) # 4-byte Folded Spill22; CHECK-NEXT: sw $16, 48($sp) # 4-byte Folded Spill23; CHECK-NEXT: addu $16, $2, $2524; CHECK-NEXT: lw $17, %got(f1.s1)($16)25; CHECK-NEXT: addiu $18, $17, %lo(f1.s1)26; CHECK-NEXT: lw $1, 12($18)27; CHECK-NEXT: lw $2, 16($18)28; CHECK-NEXT: lw $3, 20($18)29; CHECK-NEXT: lw $4, 24($18)30; CHECK-NEXT: lw $5, 28($18)31; CHECK-NEXT: sw $5, 36($sp)32; CHECK-NEXT: sw $4, 32($sp)33; CHECK-NEXT: sw $3, 28($sp)34; CHECK-NEXT: sw $2, 24($sp)35; CHECK-NEXT: sw $1, 20($sp)36; CHECK-NEXT: lw $1, 8($18)37; CHECK-NEXT: sw $1, 16($sp)38; CHECK-NEXT: lw $6, %lo(f1.s1)($17)39; CHECK-NEXT: lw $7, 4($18)40; CHECK-NEXT: lw $1, %got($CPI0_0)($16)41; CHECK-NEXT: lwc1 $f12, %lo($CPI0_0)($1)42; CHECK-NEXT: lw $25, %call16(callee1)($16)43; CHECK-NEXT: jalr $2544; CHECK-NEXT: move $gp, $1645; CHECK-NEXT: lw $1, %got(f1.s2)($16)46; CHECK-NEXT: addiu $2, $1, %lo(f1.s2)47; CHECK-NEXT: lw $7, 12($2)48; CHECK-NEXT: lw $6, 8($2)49; CHECK-NEXT: lw $5, 4($2)50; CHECK-NEXT: lw $4, %lo(f1.s2)($1)51; CHECK-NEXT: lw $25, %call16(callee2)($16)52; CHECK-NEXT: jalr $2553; CHECK-NEXT: move $gp, $1654; CHECK-NEXT: addiu $1, $zero, 1155; CHECK-NEXT: lw $2, %got($CPI0_1)($16)56; CHECK-NEXT: lwc1 $f12, %lo($CPI0_1)($2)57; CHECK-NEXT: sb $1, 40($sp)58; CHECK-NEXT: lw $1, 16($18)59; CHECK-NEXT: lw $2, 20($18)60; CHECK-NEXT: lw $3, 24($18)61; CHECK-NEXT: lw $4, 28($18)62; CHECK-NEXT: sw $4, 36($sp)63; CHECK-NEXT: sw $3, 32($sp)64; CHECK-NEXT: sw $2, 28($sp)65; CHECK-NEXT: sw $1, 24($sp)66; CHECK-NEXT: lw $1, 12($18)67; CHECK-NEXT: sw $1, 20($sp)68; CHECK-NEXT: lw $1, 8($18)69; CHECK-NEXT: sw $1, 16($sp)70; CHECK-NEXT: lw $7, 4($18)71; CHECK-NEXT: lw $6, %lo(f1.s1)($17)72; CHECK-NEXT: lw $25, %call16(callee3)($16)73; CHECK-NEXT: addiu $5, $zero, 1174; CHECK-NEXT: jalr $2575; CHECK-NEXT: move $gp, $1676; CHECK-NEXT: lw $16, 48($sp) # 4-byte Folded Reload77; CHECK-NEXT: lw $17, 52($sp) # 4-byte Folded Reload78; CHECK-NEXT: lw $18, 56($sp) # 4-byte Folded Reload79; CHECK-NEXT: lw $ra, 60($sp) # 4-byte Folded Reload80; CHECK-NEXT: jr $ra81; CHECK-NEXT: addiu $sp, $sp, 6482entry:83 %agg.tmp10 = alloca %struct.S3, align 884 call void @callee1(float 2.000000e+01, ptr byval(%struct.S1) @f1.s1) nounwind85 call void @callee2(ptr byval(%struct.S2) @f1.s2) nounwind86 store i8 11, ptr %agg.tmp10, align 487 call void @callee3(float 2.100000e+01, ptr byval(%struct.S3) %agg.tmp10, ptr byval(%struct.S1) @f1.s1) nounwind88 ret void89}90 91declare void @callee1(float, ptr byval(%struct.S1))92 93declare void @callee2(ptr byval(%struct.S2))94 95declare void @callee3(float, ptr byval(%struct.S3), ptr byval(%struct.S1))96 97define void @f2(float %f, ptr nocapture byval(%struct.S1) %s1) nounwind {98; CHECK-LABEL: f2:99; CHECK: # %bb.0: # %entry100; CHECK-NEXT: lui $2, %hi(_gp_disp)101; CHECK-NEXT: addiu $2, $2, %lo(_gp_disp)102; CHECK-NEXT: addiu $sp, $sp, -48103; CHECK-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill104; CHECK-NEXT: addu $gp, $2, $25105; CHECK-NEXT: sw $6, 56($sp)106; CHECK-NEXT: sw $7, 60($sp)107; CHECK-NEXT: lw $4, 80($sp)108; CHECK-NEXT: ldc1 $f0, 72($sp)109; CHECK-NEXT: lw $1, 64($sp)110; CHECK-NEXT: lw $2, 68($sp)111; CHECK-NEXT: lh $3, 58($sp)112; CHECK-NEXT: sll $5, $6, 24113; CHECK-NEXT: sra $5, $5, 24114; CHECK-NEXT: swc1 $f12, 36($sp)115; CHECK-NEXT: sw $5, 32($sp)116; CHECK-NEXT: sw $3, 28($sp)117; CHECK-NEXT: sw $2, 20($sp)118; CHECK-NEXT: sw $1, 16($sp)119; CHECK-NEXT: sw $7, 24($sp)120; CHECK-NEXT: mfc1 $6, $f0121; CHECK-NEXT: lw $25, %call16(callee4)($gp)122; CHECK-NEXT: jalr $25123; CHECK-NEXT: mfc1 $7, $f1124; CHECK-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload125; CHECK-NEXT: jr $ra126; CHECK-NEXT: addiu $sp, $sp, 48127entry:128 %i2 = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 5129 %tmp = load i32, ptr %i2, align 4130 %d = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 4131 %tmp1 = load double, ptr %d, align 8132 %ll = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 3133 %tmp2 = load i64, ptr %ll, align 8134 %i = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 2135 %tmp3 = load i32, ptr %i, align 4136 %s = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 1137 %tmp4 = load i16, ptr %s, align 2138 %tmp5 = load i8, ptr %s1, align 1139 tail call void @callee4(i32 %tmp, double %tmp1, i64 %tmp2, i32 %tmp3, i16 signext %tmp4, i8 signext %tmp5, float %f) nounwind140 ret void141}142 143declare void @callee4(i32, double, i64, i32, i16 signext, i8 signext, float)144 145define void @f3(ptr nocapture byval(%struct.S2) %s2) nounwind {146; CHECK-LABEL: f3:147; CHECK: # %bb.0: # %entry148; CHECK-NEXT: lui $2, %hi(_gp_disp)149; CHECK-NEXT: addiu $2, $2, %lo(_gp_disp)150; CHECK-NEXT: addiu $sp, $sp, -48151; CHECK-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill152; CHECK-NEXT: addu $gp, $2, $25153; CHECK-NEXT: sw $7, 60($sp)154; CHECK-NEXT: sw $6, 56($sp)155; CHECK-NEXT: sw $5, 52($sp)156; CHECK-NEXT: sw $4, 48($sp)157; CHECK-NEXT: addiu $1, $zero, 3158; CHECK-NEXT: addiu $2, $zero, 4159; CHECK-NEXT: addiu $3, $zero, 5160; CHECK-NEXT: lui $5, 16576161; CHECK-NEXT: sw $5, 36($sp)162; CHECK-NEXT: sw $3, 32($sp)163; CHECK-NEXT: sw $2, 28($sp)164; CHECK-NEXT: sw $1, 16($sp)165; CHECK-NEXT: sw $7, 24($sp)166; CHECK-NEXT: sw $zero, 20($sp)167; CHECK-NEXT: lw $1, %got($CPI2_0)($gp)168; CHECK-NEXT: ldc1 $f0, %lo($CPI2_0)($1)169; CHECK-NEXT: mfc1 $6, $f0170; CHECK-NEXT: lw $25, %call16(callee4)($gp)171; CHECK-NEXT: jalr $25172; CHECK-NEXT: mfc1 $7, $f1173; CHECK-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload174; CHECK-NEXT: jr $ra175; CHECK-NEXT: addiu $sp, $sp, 48176entry:177 %tmp = load i32, ptr %s2, align 4178 %arrayidx2 = getelementptr inbounds %struct.S2, ptr %s2, i32 0, i32 0, i32 3179 %tmp3 = load i32, ptr %arrayidx2, align 4180 tail call void @callee4(i32 %tmp, double 2.000000e+00, i64 3, i32 %tmp3, i16 signext 4, i8 signext 5, float 6.000000e+00) nounwind181 ret void182}183 184define void @f4(float %f, ptr nocapture byval(%struct.S3) %s3, ptr nocapture byval(%struct.S1) %s1) nounwind {185; CHECK-LABEL: f4:186; CHECK: # %bb.0: # %entry187; CHECK-NEXT: lui $2, %hi(_gp_disp)188; CHECK-NEXT: addiu $2, $2, %lo(_gp_disp)189; CHECK-NEXT: addiu $sp, $sp, -48190; CHECK-NEXT: sw $ra, 44($sp) # 4-byte Folded Spill191; CHECK-NEXT: addu $gp, $2, $25192; CHECK-NEXT: move $4, $7193; CHECK-NEXT: sw $6, 56($sp)194; CHECK-NEXT: sw $5, 52($sp)195; CHECK-NEXT: sw $7, 60($sp)196; CHECK-NEXT: lw $1, 80($sp)197; CHECK-NEXT: sll $2, $5, 24198; CHECK-NEXT: sra $2, $2, 24199; CHECK-NEXT: addiu $3, $zero, 4200; CHECK-NEXT: lui $5, 16576201; CHECK-NEXT: sw $5, 36($sp)202; CHECK-NEXT: sw $2, 32($sp)203; CHECK-NEXT: sw $3, 28($sp)204; CHECK-NEXT: sw $1, 24($sp)205; CHECK-NEXT: addiu $1, $zero, 3206; CHECK-NEXT: sw $1, 16($sp)207; CHECK-NEXT: sw $zero, 20($sp)208; CHECK-NEXT: lw $1, %got($CPI3_0)($gp)209; CHECK-NEXT: ldc1 $f0, %lo($CPI3_0)($1)210; CHECK-NEXT: mfc1 $6, $f0211; CHECK-NEXT: lw $25, %call16(callee4)($gp)212; CHECK-NEXT: jalr $25213; CHECK-NEXT: mfc1 $7, $f1214; CHECK-NEXT: lw $ra, 44($sp) # 4-byte Folded Reload215; CHECK-NEXT: jr $ra216; CHECK-NEXT: addiu $sp, $sp, 48217entry:218 %i = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 2219 %tmp = load i32, ptr %i, align 4220 %i2 = getelementptr inbounds %struct.S1, ptr %s1, i32 0, i32 5221 %tmp1 = load i32, ptr %i2, align 4222 %tmp2 = load i8, ptr %s3, align 1223 tail call void @callee4(i32 %tmp, double 2.000000e+00, i64 3, i32 %tmp1, i16 signext 4, i8 signext %tmp2, float 6.000000e+00) nounwind224 ret void225}226 227%struct.S4 = type { [4 x i32] }228 229define void @f5(i64 %a0, ptr nocapture byval(%struct.S4) %a1) nounwind {230; CHECK-LABEL: f5:231; CHECK: # %bb.0: # %entry232; CHECK-NEXT: lui $2, %hi(_gp_disp)233; CHECK-NEXT: addiu $2, $2, %lo(_gp_disp)234; CHECK-NEXT: addiu $sp, $sp, -32235; CHECK-NEXT: sw $ra, 28($sp) # 4-byte Folded Spill236; CHECK-NEXT: addu $gp, $2, $25237; CHECK-NEXT: move $1, $6238; CHECK-NEXT: sw $7, 44($sp)239; CHECK-NEXT: sw $6, 40($sp)240; CHECK-NEXT: sw $5, 20($sp)241; CHECK-NEXT: sw $4, 16($sp)242; CHECK-NEXT: lw $7, 52($sp)243; CHECK-NEXT: lw $6, 48($sp)244; CHECK-NEXT: lw $5, 44($sp)245; CHECK-NEXT: lw $25, %call16(f6)($gp)246; CHECK-NEXT: jalr $25247; CHECK-NEXT: move $4, $1248; CHECK-NEXT: lw $ra, 28($sp) # 4-byte Folded Reload249; CHECK-NEXT: jr $ra250; CHECK-NEXT: addiu $sp, $sp, 32251entry:252 tail call void @f6(ptr byval(%struct.S4) %a1, i64 %a0) nounwind253 ret void254}255 256declare void @f6(ptr nocapture byval(%struct.S4), i64)257