1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mcpu=generic -mtriple=x86_64-apple-macosx | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker; PR10221 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker;; The registers %x and %y must both spill across the finit call. 5*9880d681SAndroid Build Coastguard Worker;; Check that they are spilled early enough that not copies are needed for the 6*9880d681SAndroid Build Coastguard Worker;; fadd and fpext. 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; CHECK: pr10221 9*9880d681SAndroid Build Coastguard Worker; CHECK-NOT: movaps 10*9880d681SAndroid Build Coastguard Worker; CHECK: movss 11*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: movss 12*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: addss 13*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: cvtss2sd 14*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: finit 15*9880d681SAndroid Build Coastguard Worker 16*9880d681SAndroid Build Coastguard Workerdefine i32 @pr10221(float %x, float %y, i8** nocapture %_retval) nounwind uwtable ssp { 17*9880d681SAndroid Build Coastguard Workerentry: 18*9880d681SAndroid Build Coastguard Worker %add = fadd float %x, %y 19*9880d681SAndroid Build Coastguard Worker %conv = fpext float %add to double 20*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @finit(double %conv) nounwind 21*9880d681SAndroid Build Coastguard Worker %tobool = icmp eq i32 %call, 0 22*9880d681SAndroid Build Coastguard Worker br i1 %tobool, label %return, label %if.end 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerif.end: ; preds = %entry 25*9880d681SAndroid Build Coastguard Worker tail call void @foo(float %x, float %y) nounwind 26*9880d681SAndroid Build Coastguard Worker br label %return 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Workerreturn: ; preds = %entry, %if.end 29*9880d681SAndroid Build Coastguard Worker %retval.0 = phi i32 [ 0, %if.end ], [ 5, %entry ] 30*9880d681SAndroid Build Coastguard Worker ret i32 %retval.0 31*9880d681SAndroid Build Coastguard Worker} 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Workerdeclare i32 @finit(double) 34*9880d681SAndroid Build Coastguard Worker 35*9880d681SAndroid Build Coastguard Workerdeclare void @foo(float, float) 36