| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | 
 | ; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 | FileCheck %s | 
 |  | 
 | declare float @fabsf(float) readonly | 
 | declare double @fabs(double) readonly | 
 |  | 
 | declare float @llvm.sqrt.f32(float %Val) | 
 | declare double @llvm.sqrt.f64(double %Val) | 
 |  | 
 | declare float @ceilf(float) readonly | 
 | declare double @ceil(double) readonly | 
 |  | 
 | declare float @floorf(float) readonly | 
 | declare double @floor(double) readonly | 
 |  | 
 | declare float @truncf(float) readonly | 
 | declare double @trunc(double) readonly | 
 |  | 
 | declare float @rintf(float) readonly | 
 | declare double @rint(double) readonly | 
 |  | 
 | declare float @nearbyintf(float) readonly | 
 | declare double @nearbyint(double) readonly | 
 |  | 
 | define float @fabs_f(float %v) { | 
 | ; CHECK-LABEL: fabs_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fabs s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @fabsf(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @fsub_f(float %v) { | 
 | ; CHECK-LABEL: fsub_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fneg s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fsub float -0.0, %v | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @sqrt_f(float %v) { | 
 | ; CHECK-LABEL: sqrt_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fsqrt s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @llvm.sqrt.f32(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @ceil_f(float %v) { | 
 | ; CHECK-LABEL: ceil_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintp s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @ceilf(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @floor_f(float %v) { | 
 | ; CHECK-LABEL: floor_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintm s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @floorf(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @trunc_f(float %v) { | 
 | ; CHECK-LABEL: trunc_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintz s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @truncf(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @rint_f(float %v) { | 
 | ; CHECK-LABEL: rint_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintx s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @rintf(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define float @nearbyint_f(float %v) { | 
 | ; CHECK-LABEL: nearbyint_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frinti s0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call float @nearbyintf(float %v) | 
 |   ret float %r | 
 | } | 
 |  | 
 | define double @fabs_d(double %v) { | 
 | ; CHECK-LABEL: fabs_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fabs d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @fabs(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @fsub_d(double %v) { | 
 | ; CHECK-LABEL: fsub_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fneg d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fsub double -0.0, %v | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @sqrt_d(double %v) { | 
 | ; CHECK-LABEL: sqrt_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fsqrt d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @llvm.sqrt.f64(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @ceil_d(double %v) { | 
 | ; CHECK-LABEL: ceil_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintp d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @ceil(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @floor_d(double %v) { | 
 | ; CHECK-LABEL: floor_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintm d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @floor(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @trunc_d(double %v) { | 
 | ; CHECK-LABEL: trunc_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintz d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @trunc(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @rint_d(double %v) { | 
 | ; CHECK-LABEL: rint_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frintx d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @rint(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define double @nearbyint_d(double %v) { | 
 | ; CHECK-LABEL: nearbyint_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    frinti d0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = call double @nearbyint(double %v) | 
 |   ret double %r | 
 | } | 
 |  | 
 | define float @conv_h_f(half %v) { | 
 | ; CHECK-LABEL: conv_h_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fcvt s0, h0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fpext half %v to float | 
 |   ret float %r | 
 | } | 
 |  | 
 | define double @conv_h_d(half %v) { | 
 | ; CHECK-LABEL: conv_h_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fcvt d0, h0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fpext half %v to double | 
 |   ret double %r | 
 | } | 
 |  | 
 | define half @conv_f_h(float %v) { | 
 | ; CHECK-LABEL: conv_f_h: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fcvt h0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fptrunc float %v to half | 
 |   ret half %r | 
 | } | 
 |  | 
 | define double @conv_f_d(float %v) { | 
 | ; CHECK-LABEL: conv_f_d: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fcvt d0, s0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fpext float %v to double | 
 |   ret double %r | 
 | } | 
 |  | 
 | define half @conv_d_h(double %v) { | 
 | ; CHECK-LABEL: conv_d_h: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fcvt h0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fptrunc double %v to half | 
 |   ret half %r | 
 | } | 
 |  | 
 | define float @conv_d_f(double %v) { | 
 | ; CHECK-LABEL: conv_d_f: | 
 | ; CHECK:       ; %bb.0: | 
 | ; CHECK-NEXT:    fcvt s0, d0 | 
 | ; CHECK-NEXT:    ret | 
 |   %r = fptrunc double %v to float | 
 |   ret float %r | 
 | } |