106 lines · plain
1; RUN: llc -mtriple=mipsel -disable-mips-delay-filler -relocation-model=pic < %s | \2; RUN: FileCheck %s -check-prefix=O323; RUN: llc -mtriple=mipsel -mips-load-target-from-got=false \4; RUN: -disable-mips-delay-filler -relocation-model=pic < %s | FileCheck %s -check-prefix=O32-LOADTGT5 6@gd1 = common global double 0.000000e+00, align 87@gd2 = common global double 0.000000e+00, align 88 9; O32-LABEL: caller3:10; O32-DAG: lw $25, %call16(callee3)11; O32-DAG: move $gp12; O32: jalr $2513; O32-NOT: move $gp14; O32: lw $25, %call16(callee3)15; O32-NOT: move $gp16; O32: jalr $2517; O32-NOT: move $gp18; O32: lw $25, %call16(callee3)19; O32-NOT: move $gp20; O32: jalr $2521 22; O32-LOADTGT-LABEL: caller3:23; O32-LOADTGT-DAG: lw $25, %call16(callee3)24; O32-LOADTGT-DAG: move $gp25; O32-LOADTGT: jalr $2526; O32-LOADTGT-NOT: move $gp27; O32-LOADTGT: move $2528; O32-LOADTGT-NOT: move $gp29; O32-LOADTGT: jalr $2530; O32-LOADTGT-NOT: move $gp31; O32-LOADTGT: move $2532; O32-LOADTGT-NOT: move $gp33; O32-LOADTGT: jalr $2534 35define void @caller3(i32 %n) {36entry:37 tail call void @callee3()38 tail call void @callee3()39 %tobool1 = icmp eq i32 %n, 040 br i1 %tobool1, label %while.end, label %while.body41 42while.body:43 %n.addr.02 = phi i32 [ %dec, %while.body ], [ %n, %entry ]44 %dec = add nsw i32 %n.addr.02, -145 tail call void @callee3()46 %tobool = icmp eq i32 %dec, 047 br i1 %tobool, label %while.end, label %while.body48 49while.end:50 ret void51}52 53declare void @callee3()54 55; O32-LABEL: caller4:56; O32-DAG: lw $25, %call16(ceil)57; O32-DAG: move $gp58; O32: jalr $2559; O32-NOT: move $gp60; O32: lw $25, %call16(ceil)61; O32-NOT: move $gp62; O32: jalr $2563; O32-NOT: move $gp64; O32: lw $25, %call16(ceil)65; O32-NOT: move $gp66; O32: jalr $2567 68; O32-LOADTGT-LABEL: caller4:69; O32-LOADTGT-DAG: lw $25, %call16(ceil)70; O32-LOADTGT-DAG: move $gp71; O32-LOADTGT: jalr $2572; O32-LOADTGT-NOT: move $gp73; O32-LOADTGT: move $2574; O32-LOADTGT-NOT: move $gp75; O32-LOADTGT: jalr $2576; O32-LOADTGT-NOT: move $gp77; O32-LOADTGT: move $2578; O32-LOADTGT-NOT: move $gp79; O32-LOADTGT: jalr $2580 81define void @caller4(double %d) {82entry:83 %call = tail call double @ceil(double %d)84 %call1 = tail call double @ceil(double %call)85 store double %call1, ptr @gd2, align 886 %call2 = tail call double @ceil(double %call1)87 store double %call2, ptr @gd1, align 888 ret void89}90 91declare double @ceil(double)92 93; Make sure that the MipsOptimizePICCall pass is run even for optnone functions,94; as we have to make sure that jalr uses $t9 for PIC code in order to adhere to95; the MIPS o32 ABI.96define hidden double @foo(double %dbl) #0 {97entry:98 ; O32: jalr $2599 %res = call double @sqrt(double %dbl)100 ret double %res101}102 103declare double @sqrt(double)104 105attributes #0 = { noinline optnone }106