1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 | FileCheck %s 3 4declare float @fabsf(float) readonly 5declare double @fabs(double) readonly 6 7declare float @llvm.sqrt.f32(float %Val) 8declare double @llvm.sqrt.f64(double %Val) 9 10declare float @ceilf(float) readonly 11declare double @ceil(double) readonly 12 13declare float @floorf(float) readonly 14declare double @floor(double) readonly 15 16declare float @truncf(float) readonly 17declare double @trunc(double) readonly 18 19declare float @rintf(float) readonly 20declare double @rint(double) readonly 21 22declare float @nearbyintf(float) readonly 23declare double @nearbyint(double) readonly 24 25define float @fabs_f(float %v) { 26; CHECK-LABEL: fabs_f: 27; CHECK: ; %bb.0: 28; CHECK-NEXT: fabs s0, s0 29; CHECK-NEXT: ret 30 %r = call float @fabsf(float %v) 31 ret float %r 32} 33 34define float @fsub_f(float %v) { 35; CHECK-LABEL: fsub_f: 36; CHECK: ; %bb.0: 37; CHECK-NEXT: fneg s0, s0 38; CHECK-NEXT: ret 39 %r = fsub float -0.0, %v 40 ret float %r 41} 42 43define float @sqrt_f(float %v) { 44; CHECK-LABEL: sqrt_f: 45; CHECK: ; %bb.0: 46; CHECK-NEXT: fsqrt s0, s0 47; CHECK-NEXT: ret 48 %r = call float @llvm.sqrt.f32(float %v) 49 ret float %r 50} 51 52define float @ceil_f(float %v) { 53; CHECK-LABEL: ceil_f: 54; CHECK: ; %bb.0: 55; CHECK-NEXT: frintp s0, s0 56; CHECK-NEXT: ret 57 %r = call float @ceilf(float %v) 58 ret float %r 59} 60 61define float @floor_f(float %v) { 62; CHECK-LABEL: floor_f: 63; CHECK: ; %bb.0: 64; CHECK-NEXT: frintm s0, s0 65; CHECK-NEXT: ret 66 %r = call float @floorf(float %v) 67 ret float %r 68} 69 70define float @trunc_f(float %v) { 71; CHECK-LABEL: trunc_f: 72; CHECK: ; %bb.0: 73; CHECK-NEXT: frintz s0, s0 74; CHECK-NEXT: ret 75 %r = call float @truncf(float %v) 76 ret float %r 77} 78 79define float @rint_f(float %v) { 80; CHECK-LABEL: rint_f: 81; CHECK: ; %bb.0: 82; CHECK-NEXT: frintx s0, s0 83; CHECK-NEXT: ret 84 %r = call float @rintf(float %v) 85 ret float %r 86} 87 88define float @nearbyint_f(float %v) { 89; CHECK-LABEL: nearbyint_f: 90; CHECK: ; %bb.0: 91; CHECK-NEXT: frinti s0, s0 92; CHECK-NEXT: ret 93 %r = call float @nearbyintf(float %v) 94 ret float %r 95} 96 97define double @fabs_d(double %v) { 98; CHECK-LABEL: fabs_d: 99; CHECK: ; %bb.0: 100; CHECK-NEXT: fabs d0, d0 101; CHECK-NEXT: ret 102 %r = call double @fabs(double %v) 103 ret double %r 104} 105 106define double @fsub_d(double %v) { 107; CHECK-LABEL: fsub_d: 108; CHECK: ; %bb.0: 109; CHECK-NEXT: fneg d0, d0 110; CHECK-NEXT: ret 111 %r = fsub double -0.0, %v 112 ret double %r 113} 114 115define double @sqrt_d(double %v) { 116; CHECK-LABEL: sqrt_d: 117; CHECK: ; %bb.0: 118; CHECK-NEXT: fsqrt d0, d0 119; CHECK-NEXT: ret 120 %r = call double @llvm.sqrt.f64(double %v) 121 ret double %r 122} 123 124define double @ceil_d(double %v) { 125; CHECK-LABEL: ceil_d: 126; CHECK: ; %bb.0: 127; CHECK-NEXT: frintp d0, d0 128; CHECK-NEXT: ret 129 %r = call double @ceil(double %v) 130 ret double %r 131} 132 133define double @floor_d(double %v) { 134; CHECK-LABEL: floor_d: 135; CHECK: ; %bb.0: 136; CHECK-NEXT: frintm d0, d0 137; CHECK-NEXT: ret 138 %r = call double @floor(double %v) 139 ret double %r 140} 141 142define double @trunc_d(double %v) { 143; CHECK-LABEL: trunc_d: 144; CHECK: ; %bb.0: 145; CHECK-NEXT: frintz d0, d0 146; CHECK-NEXT: ret 147 %r = call double @trunc(double %v) 148 ret double %r 149} 150 151define double @rint_d(double %v) { 152; CHECK-LABEL: rint_d: 153; CHECK: ; %bb.0: 154; CHECK-NEXT: frintx d0, d0 155; CHECK-NEXT: ret 156 %r = call double @rint(double %v) 157 ret double %r 158} 159 160define double @nearbyint_d(double %v) { 161; CHECK-LABEL: nearbyint_d: 162; CHECK: ; %bb.0: 163; CHECK-NEXT: frinti d0, d0 164; CHECK-NEXT: ret 165 %r = call double @nearbyint(double %v) 166 ret double %r 167} 168 169define float @conv_h_f(half %v) { 170; CHECK-LABEL: conv_h_f: 171; CHECK: ; %bb.0: 172; CHECK-NEXT: fcvt s0, h0 173; CHECK-NEXT: ret 174 %r = fpext half %v to float 175 ret float %r 176} 177 178define double @conv_h_d(half %v) { 179; CHECK-LABEL: conv_h_d: 180; CHECK: ; %bb.0: 181; CHECK-NEXT: fcvt d0, h0 182; CHECK-NEXT: ret 183 %r = fpext half %v to double 184 ret double %r 185} 186 187define half @conv_f_h(float %v) { 188; CHECK-LABEL: conv_f_h: 189; CHECK: ; %bb.0: 190; CHECK-NEXT: fcvt h0, s0 191; CHECK-NEXT: ret 192 %r = fptrunc float %v to half 193 ret half %r 194} 195 196define double @conv_f_d(float %v) { 197; CHECK-LABEL: conv_f_d: 198; CHECK: ; %bb.0: 199; CHECK-NEXT: fcvt d0, s0 200; CHECK-NEXT: ret 201 %r = fpext float %v to double 202 ret double %r 203} 204 205define half @conv_d_h(double %v) { 206; CHECK-LABEL: conv_d_h: 207; CHECK: ; %bb.0: 208; CHECK-NEXT: fcvt h0, d0 209; CHECK-NEXT: ret 210 %r = fptrunc double %v to half 211 ret half %r 212} 213 214define float @conv_d_f(double %v) { 215; CHECK-LABEL: conv_d_f: 216; CHECK: ; %bb.0: 217; CHECK-NEXT: fcvt s0, d0 218; CHECK-NEXT: ret 219 %r = fptrunc double %v to float 220 ret float %r 221} 222