brintos

brintos / llvm-project-archived public Read only

0
0
Text · 15.8 KiB · 4dbadbb Raw
417 lines · plain
1; RUN: llc < %s -mtriple=mipsel -relocation-model=pic | FileCheck %s2; RUN: llc < %s -mtriple=mipsel -mcpu=mips32 -mattr=+nooddspreg -relocation-model=pic -mips-tail-calls=1| FileCheck %s -check-prefix=NOODDSPREG3; RUN: llc < %s -mtriple=mipsel -mcpu=mips32r2 -mattr=+fp64,+nooddspreg -relocation-model=pic -mips-tail-calls=1 | FileCheck %s -check-prefix=FP64-NOODDSPREG4 5 6@gi0 = external global i327@gi1 = external global i328@gi2 = external global i329@gi3 = external global i3210@gi4 = external global i3211@gi5 = external global i3212@gi6 = external global i3213@gi7 = external global i3214@gi8 = external global i3215@gi9 = external global i3216@gi10 = external global i3217@gi11 = external global i3218@gi12 = external global i3219@gi13 = external global i3220@gi14 = external global i3221@gi15 = external global i3222@gi16 = external global i3223@gfa0 = external global float24@gfa1 = external global float25@gfa2 = external global float26@gfa3 = external global float27@gfa4 = external global float28@gfa5 = external global float29@gfa6 = external global float30@gfa7 = external global float31@gfa8 = external global float32@gfa9 = external global float33@gfa10 = external global float34@gfa11 = external global float35@gfa12 = external global float36@gfa13 = external global float37@gfa14 = external global float38@gfa15 = external global float39@gfa16 = external global float40@gfa17 = external global float41@gfa18 = external global float42@gfa19 = external global float43@gfa20 = external global float44@gf0 = external global float45@gf1 = external global float46@gf2 = external global float47@gf3 = external global float48@gf4 = external global float49@gf5 = external global float50@gf6 = external global float51@gf7 = external global float52@gf8 = external global float53@gf9 = external global float54@gf10 = external global float55@gf11 = external global float56@gf12 = external global float57@gf13 = external global float58@gf14 = external global float59@gf15 = external global float60@gf16 = external global float61@gf17 = external global float62@gf18 = external global float63@gf19 = external global float64@gf20 = external global float65@g0 = external global i3266@g1 = external global i3267@g2 = external global i3268@g3 = external global i3269@g4 = external global i3270@g5 = external global i3271@g6 = external global i3272@g7 = external global i3273@g8 = external global i3274@g9 = external global i3275@g10 = external global i3276@g11 = external global i3277@g12 = external global i3278@g13 = external global i3279@g14 = external global i3280@g15 = external global i3281@g16 = external global i3282 83@fa = common global [11 x float] zeroinitializer, align 484@da = common global [11 x double] zeroinitializer, align 885 86define void @caller0() nounwind {87entry:88; CHECK: caller089; CHECK: lw  $390; CHECK: lw  $2491; CHECK: lw  $1592; CHECK: lw  $1493; CHECK: lw  $1394; CHECK: lw  $1295; CHECK: lw  $1196; CHECK: lw  $1097; CHECK: lw  $998; CHECK: lw  $899; CHECK: lw  $7100; CHECK: lw  $6101; CHECK: lw  $5102; CHECK: lw  $4103 104  %0 = load i32, ptr @gi0, align 4105  %1 = load i32, ptr @gi1, align 4106  %2 = load i32, ptr @gi2, align 4107  %3 = load i32, ptr @gi3, align 4108  %4 = load i32, ptr @gi4, align 4109  %5 = load i32, ptr @gi5, align 4110  %6 = load i32, ptr @gi6, align 4111  %7 = load i32, ptr @gi7, align 4112  %8 = load i32, ptr @gi8, align 4113  %9 = load i32, ptr @gi9, align 4114  %10 = load i32, ptr @gi10, align 4115  %11 = load i32, ptr @gi11, align 4116  %12 = load i32, ptr @gi12, align 4117  %13 = load i32, ptr @gi13, align 4118  %14 = load i32, ptr @gi14, align 4119  %15 = load i32, ptr @gi15, align 4120  %16 = load i32, ptr @gi16, align 4121  tail call fastcc void @callee0(i32 %0, i32 %1, i32 %2, i32 %3, i32 %4, i32 %5, i32 %6, i32 %7, i32 %8, i32 %9, i32 %10, i32 %11, i32 %12, i32 %13, i32 %14, i32 %15, i32 %16)122  ret void123}124 125define internal fastcc void @callee0(i32 %a0, i32 %a1, i32 %a2, i32 %a3, i32 %a4, i32 %a5, i32 %a6, i32 %a7, i32 %a8, i32 %a9, i32 %a10, i32 %a11, i32 %a12, i32 %a13, i32 %a14, i32 %a15, i32 %a16) nounwind noinline {126entry:127; CHECK: callee0128; CHECK-DAG: sw  $4129; CHECK-DAG: sw  $5130; CHECK-DAG: sw  $7131; CHECK-DAG: sw  $8132; CHECK-DAG: sw  $9133; CHECK-DAG: sw  $10134; CHECK-DAG: sw  $11135; CHECK-DAG: sw  $12136; CHECK-DAG: sw  $13137; CHECK-DAG: sw  $14138; CHECK-DAG: sw  $15139; CHECK-DAG: sw  $24140; CHECK-DAG: sw  $3141 142  store i32 %a0, ptr @g0, align 4143  store i32 %a1, ptr @g1, align 4144  store i32 %a2, ptr @g2, align 4145  store i32 %a3, ptr @g3, align 4146  store i32 %a4, ptr @g4, align 4147  store i32 %a5, ptr @g5, align 4148  store i32 %a6, ptr @g6, align 4149  store i32 %a7, ptr @g7, align 4150  store i32 %a8, ptr @g8, align 4151  store i32 %a9, ptr @g9, align 4152  store i32 %a10, ptr @g10, align 4153  store i32 %a11, ptr @g11, align 4154  store i32 %a12, ptr @g12, align 4155  store i32 %a13, ptr @g13, align 4156  store i32 %a14, ptr @g14, align 4157  store i32 %a15, ptr @g15, align 4158  store i32 %a16, ptr @g16, align 4159  ret void160}161 162define void @caller1(float %a0, float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7, float %a8, float %a9, float %a10, float %a11, float %a12, float %a13, float %a14, float %a15, float %a16, float %a17, float %a18, float %a19, float %a20) nounwind {163entry:164; CHECK: caller1165; CHECK: lwc1  $f19166; CHECK: lwc1  $f18167; CHECK: lwc1  $f17168; CHECK: lwc1  $f16169; CHECK: lwc1  $f15170; CHECK: lwc1  $f14171; CHECK: lwc1  $f13172; CHECK: lwc1  $f12173; CHECK: lwc1  $f11174; CHECK: lwc1  $f10175; CHECK: lwc1  $f9176; CHECK: lwc1  $f8177; CHECK: lwc1  $f7178; CHECK: lwc1  $f6179; CHECK: lwc1  $f5180; CHECK: lwc1  $f4181; CHECK: lwc1  $f3182; CHECK: lwc1  $f2183; CHECK: lwc1  $f1184; CHECK: lwc1  $f0185 186  %0 = load float, ptr @gfa0, align 4187  %1 = load float, ptr @gfa1, align 4188  %2 = load float, ptr @gfa2, align 4189  %3 = load float, ptr @gfa3, align 4190  %4 = load float, ptr @gfa4, align 4191  %5 = load float, ptr @gfa5, align 4192  %6 = load float, ptr @gfa6, align 4193  %7 = load float, ptr @gfa7, align 4194  %8 = load float, ptr @gfa8, align 4195  %9 = load float, ptr @gfa9, align 4196  %10 = load float, ptr @gfa10, align 4197  %11 = load float, ptr @gfa11, align 4198  %12 = load float, ptr @gfa12, align 4199  %13 = load float, ptr @gfa13, align 4200  %14 = load float, ptr @gfa14, align 4201  %15 = load float, ptr @gfa15, align 4202  %16 = load float, ptr @gfa16, align 4203  %17 = load float, ptr @gfa17, align 4204  %18 = load float, ptr @gfa18, align 4205  %19 = load float, ptr @gfa19, align 4206  %20 = load float, ptr @gfa20, align 4207  tail call fastcc void @callee1(float %0, float %1, float %2, float %3, float %4, float %5, float %6, float %7, float %8, float %9, float %10, float %11, float %12, float %13, float %14, float %15, float %16, float %17, float %18, float %19, float %20)208  ret void209}210 211define internal fastcc void @callee1(float %a0, float %a1, float %a2, float %a3, float %a4, float %a5, float %a6, float %a7, float %a8, float %a9, float %a10, float %a11, float %a12, float %a13, float %a14, float %a15, float %a16, float %a17, float %a18, float %a19, float %a20) nounwind noinline {212entry:213; CHECK-LABEL: callee1:214; CHECK-DAG: swc1  $f17215; CHECK-DAG: swc1  $f16216; CHECK-DAG: swc1  $f15217; CHECK-DAG: swc1  $f14218; CHECK-DAG: swc1  $f13219; CHECK-DAG: swc1  $f12220; CHECK-DAG: swc1  $f11221; CHECK-DAG: swc1  $f10222; CHECK-DAG: swc1  $f9223; CHECK-DAG: swc1  $f8224; CHECK-DAG: swc1  $f7225; CHECK-DAG: swc1  $f6226; CHECK-DAG: swc1  $f5227; CHECK-DAG: swc1  $f4228; CHECK-DAG: swc1  $f3229; CHECK-DAG: swc1  $f2230; CHECK-DAG: swc1  $f1231; CHECK-DAG: swc1  $f0232; CHECK-DAG: swc1  $f18233; CHECK-DAG: swc1  $f19234 235  store float %a0, ptr @gf0, align 4236  store float %a1, ptr @gf1, align 4237  store float %a2, ptr @gf2, align 4238  store float %a3, ptr @gf3, align 4239  store float %a4, ptr @gf4, align 4240  store float %a5, ptr @gf5, align 4241  store float %a6, ptr @gf6, align 4242  store float %a7, ptr @gf7, align 4243  store float %a8, ptr @gf8, align 4244  store float %a9, ptr @gf9, align 4245  store float %a10, ptr @gf10, align 4246  store float %a11, ptr @gf11, align 4247  store float %a12, ptr @gf12, align 4248  store float %a13, ptr @gf13, align 4249  store float %a14, ptr @gf14, align 4250  store float %a15, ptr @gf15, align 4251  store float %a16, ptr @gf16, align 4252  store float %a17, ptr @gf17, align 4253  store float %a18, ptr @gf18, align 4254  store float %a19, ptr @gf19, align 4255  store float %a20, ptr @gf20, align 4256  ret void257}258 259define void @caller2() {260entry:261 262; NOODDSPREG-LABEL:  caller2:263 264; Check that first 10 arguments are passed in even float registers265; f0, f2, ... , f18. Check that 11th argument is passed on stack.266 267; NOODDSPREG-DAG:    lw      $[[R0:[0-9]+]], %got(fa)(${{[0-9]+|gp}})268; NOODDSPREG-DAG:    lwc1    $f0, 0($[[R0]])269; NOODDSPREG-DAG:    lwc1    $f2, 4($[[R0]])270; NOODDSPREG-DAG:    lwc1    $f4, 8($[[R0]])271; NOODDSPREG-DAG:    lwc1    $f6, 12($[[R0]])272; NOODDSPREG-DAG:    lwc1    $f8, 16($[[R0]])273; NOODDSPREG-DAG:    lwc1    $f10, 20($[[R0]])274; NOODDSPREG-DAG:    lwc1    $f12, 24($[[R0]])275; NOODDSPREG-DAG:    lwc1    $f14, 28($[[R0]])276; NOODDSPREG-DAG:    lwc1    $f16, 32($[[R0]])277; NOODDSPREG-DAG:    lwc1    $f18, 36($[[R0]])278 279; NOODDSPREG-DAG:    lwc1    $[[F0:f[0-9]*[02468]]], 40($[[R0]])280; NOODDSPREG-DAG:    swc1    $[[F0]], 0($sp)281 282  %0 = load float, ptr @fa, align 4283  %1 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 1), align 4284  %2 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 2), align 4285  %3 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 3), align 4286  %4 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 4), align 4287  %5 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 5), align 4288  %6 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 6), align 4289  %7 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 7), align 4290  %8 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 8), align 4291  %9 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 9), align 4292  %10 = load float, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 10), align 4293  tail call fastcc void @callee2(float %0, float %1, float %2, float %3,294                                 float %4, float %5, float %6, float %7,295                                 float %8, float %9, float %10)296  ret void297}298 299define fastcc void @callee2(float %a0, float %a1, float %a2, float %a3,300                            float %a4, float %a5, float %a6, float %a7,301                            float %a8, float %a9, float %a10) {302entry:303 304; NOODDSPREG-LABEL:  callee2:305 306; Check that first 10 arguments are received in even float registers307; f0, f2, ... , f18. Check that 11th argument is received on stack.308 309; NOODDSPREG-DAG:    lw      $[[R0:[0-9]+]], %got(fa)(${{[0-9]+|gp}})310; NOODDSPREG-DAG:    swc1    $f0, 0($[[R0]])311; NOODDSPREG-DAG:    swc1    $f2, 4($[[R0]])312; NOODDSPREG-DAG:    swc1    $f4, 8($[[R0]])313; NOODDSPREG-DAG:    swc1    $f6, 12($[[R0]])314; NOODDSPREG-DAG:    swc1    $f8, 16($[[R0]])315; NOODDSPREG-DAG:    swc1    $f10, 20($[[R0]])316; NOODDSPREG-DAG:    swc1    $f12, 24($[[R0]])317; NOODDSPREG-DAG:    swc1    $f14, 28($[[R0]])318; NOODDSPREG-DAG:    swc1    $f16, 32($[[R0]])319; NOODDSPREG-DAG:    swc1    $f18, 36($[[R0]])320 321; NOODDSPREG-DAG:    lwc1    $[[F0:f[0-9]*[02468]]], {{[0-9]+}}($sp)322; NOODDSPREG-DAG:    swc1    $[[F0]], 40($[[R0]])323 324  store float %a0, ptr @fa, align 4325  store float %a1, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 1), align 4326  store float %a2, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 2), align 4327  store float %a3, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 3), align 4328  store float %a4, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 4), align 4329  store float %a5, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 5), align 4330  store float %a6, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 6), align 4331  store float %a7, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 7), align 4332  store float %a8, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 8), align 4333  store float %a9, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 9), align 4334  store float %a10, ptr getelementptr ([11 x float], ptr @fa, i32 0, i32 10), align 4335  ret void336}337 338define void @caller3() {339entry:340 341; FP64-NOODDSPREG-LABEL:  caller3:342 343; Check that first 10 arguments are passed in even float registers344; f0, f2, ... , f18. Check that 11th argument is passed on stack.345 346; FP64-NOODDSPREG-DAG:    lw      $[[R0:[0-9]+]], %got(da)(${{[0-9]+|gp}})347; FP64-NOODDSPREG-DAG:    ldc1    $f0, 0($[[R0]])348; FP64-NOODDSPREG-DAG:    ldc1    $f2, 8($[[R0]])349; FP64-NOODDSPREG-DAG:    ldc1    $f4, 16($[[R0]])350; FP64-NOODDSPREG-DAG:    ldc1    $f6, 24($[[R0]])351; FP64-NOODDSPREG-DAG:    ldc1    $f8, 32($[[R0]])352; FP64-NOODDSPREG-DAG:    ldc1    $f10, 40($[[R0]])353; FP64-NOODDSPREG-DAG:    ldc1    $f12, 48($[[R0]])354; FP64-NOODDSPREG-DAG:    ldc1    $f14, 56($[[R0]])355; FP64-NOODDSPREG-DAG:    ldc1    $f16, 64($[[R0]])356; FP64-NOODDSPREG-DAG:    ldc1    $f18, 72($[[R0]])357 358; FP64-NOODDSPREG-DAG:    ldc1    $[[F0:f[0-9]*[02468]]], 80($[[R0]])359; FP64-NOODDSPREG-DAG:    sdc1    $[[F0]], 0($sp)360 361  %0 = load double, ptr @da, align 8362  %1 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 1), align 8363  %2 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 2), align 8364  %3 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 3), align 8365  %4 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 4), align 8366  %5 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 5), align 8367  %6 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 6), align 8368  %7 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 7), align 8369  %8 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 8), align 8370  %9 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 9), align 8371  %10 = load double, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 10), align 8372  tail call fastcc void @callee3(double %0, double %1, double %2, double %3,373                                 double %4, double %5, double %6, double %7,374                                 double %8, double %9, double %10)375  ret void376}377 378define fastcc void @callee3(double %a0, double %a1, double %a2, double %a3,379                            double %a4, double %a5, double %a6, double %a7,380                            double %a8, double %a9, double %a10) {381entry:382 383; FP64-NOODDSPREG-LABEL:  callee3:384 385 386; Check that first 10 arguments are received in even float registers387; f0, f2, ... , f18. Check that 11th argument is received on stack.388 389; FP64-NOODDSPREG-DAG:    lw      $[[R0:[0-9]+]], %got(da)(${{[0-9]+|gp}})390; FP64-NOODDSPREG-DAG:    sdc1    $f0, 0($[[R0]])391; FP64-NOODDSPREG-DAG:    sdc1    $f2, 8($[[R0]])392; FP64-NOODDSPREG-DAG:    sdc1    $f4, 16($[[R0]])393; FP64-NOODDSPREG-DAG:    sdc1    $f6, 24($[[R0]])394; FP64-NOODDSPREG-DAG:    sdc1    $f8, 32($[[R0]])395; FP64-NOODDSPREG-DAG:    sdc1    $f10, 40($[[R0]])396; FP64-NOODDSPREG-DAG:    sdc1    $f12, 48($[[R0]])397; FP64-NOODDSPREG-DAG:    sdc1    $f14, 56($[[R0]])398; FP64-NOODDSPREG-DAG:    sdc1    $f16, 64($[[R0]])399; FP64-NOODDSPREG-DAG:    sdc1    $f18, 72($[[R0]])400 401; FP64-NOODDSPREG-DAG:    ldc1    $[[F0:f[0-9]*[02468]]], 0($sp)402; FP64-NOODDSPREG-DAG:    sdc1    $[[F0]], 80($[[R0]])403 404  store double %a0, ptr @da, align 8405  store double %a1, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 1), align 8406  store double %a2, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 2), align 8407  store double %a3, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 3), align 8408  store double %a4, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 4), align 8409  store double %a5, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 5), align 8410  store double %a6, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 6), align 8411  store double %a7, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 7), align 8412  store double %a8, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 8), align 8413  store double %a9, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 9), align 8414  store double %a10, ptr getelementptr ([11 x double], ptr @da, i32 0, i32 10), align 8415  ret void416}417