222 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -verify-machineinstrs -o - %s -mtriple=arm64-apple-ios7.0 | FileCheck %s3 4declare float @fabsf(float) readonly5declare double @fabs(double) readonly6 7declare float @llvm.sqrt.f32(float %Val)8declare double @llvm.sqrt.f64(double %Val)9 10declare float @ceilf(float) readonly11declare double @ceil(double) readonly12 13declare float @floorf(float) readonly14declare double @floor(double) readonly15 16declare float @truncf(float) readonly17declare double @trunc(double) readonly18 19declare float @rintf(float) readonly20declare double @rint(double) readonly21 22declare float @nearbyintf(float) readonly23declare double @nearbyint(double) readonly24 25define float @fabs_f(float %v) {26; CHECK-LABEL: fabs_f:27; CHECK: ; %bb.0:28; CHECK-NEXT: fabs s0, s029; CHECK-NEXT: ret30 %r = call float @fabsf(float %v)31 ret float %r32}33 34define float @fsub_f(float %v) {35; CHECK-LABEL: fsub_f:36; CHECK: ; %bb.0:37; CHECK-NEXT: fneg s0, s038; CHECK-NEXT: ret39 %r = fsub float -0.0, %v40 ret float %r41}42 43define float @sqrt_f(float %v) {44; CHECK-LABEL: sqrt_f:45; CHECK: ; %bb.0:46; CHECK-NEXT: fsqrt s0, s047; CHECK-NEXT: ret48 %r = call float @llvm.sqrt.f32(float %v)49 ret float %r50}51 52define float @ceil_f(float %v) {53; CHECK-LABEL: ceil_f:54; CHECK: ; %bb.0:55; CHECK-NEXT: frintp s0, s056; CHECK-NEXT: ret57 %r = call float @ceilf(float %v)58 ret float %r59}60 61define float @floor_f(float %v) {62; CHECK-LABEL: floor_f:63; CHECK: ; %bb.0:64; CHECK-NEXT: frintm s0, s065; CHECK-NEXT: ret66 %r = call float @floorf(float %v)67 ret float %r68}69 70define float @trunc_f(float %v) {71; CHECK-LABEL: trunc_f:72; CHECK: ; %bb.0:73; CHECK-NEXT: frintz s0, s074; CHECK-NEXT: ret75 %r = call float @truncf(float %v)76 ret float %r77}78 79define float @rint_f(float %v) {80; CHECK-LABEL: rint_f:81; CHECK: ; %bb.0:82; CHECK-NEXT: frintx s0, s083; CHECK-NEXT: ret84 %r = call float @rintf(float %v)85 ret float %r86}87 88define float @nearbyint_f(float %v) {89; CHECK-LABEL: nearbyint_f:90; CHECK: ; %bb.0:91; CHECK-NEXT: frinti s0, s092; CHECK-NEXT: ret93 %r = call float @nearbyintf(float %v)94 ret float %r95}96 97define double @fabs_d(double %v) {98; CHECK-LABEL: fabs_d:99; CHECK: ; %bb.0:100; CHECK-NEXT: fabs d0, d0101; CHECK-NEXT: ret102 %r = call double @fabs(double %v)103 ret double %r104}105 106define double @fsub_d(double %v) {107; CHECK-LABEL: fsub_d:108; CHECK: ; %bb.0:109; CHECK-NEXT: fneg d0, d0110; CHECK-NEXT: ret111 %r = fsub double -0.0, %v112 ret double %r113}114 115define double @sqrt_d(double %v) {116; CHECK-LABEL: sqrt_d:117; CHECK: ; %bb.0:118; CHECK-NEXT: fsqrt d0, d0119; CHECK-NEXT: ret120 %r = call double @llvm.sqrt.f64(double %v)121 ret double %r122}123 124define double @ceil_d(double %v) {125; CHECK-LABEL: ceil_d:126; CHECK: ; %bb.0:127; CHECK-NEXT: frintp d0, d0128; CHECK-NEXT: ret129 %r = call double @ceil(double %v)130 ret double %r131}132 133define double @floor_d(double %v) {134; CHECK-LABEL: floor_d:135; CHECK: ; %bb.0:136; CHECK-NEXT: frintm d0, d0137; CHECK-NEXT: ret138 %r = call double @floor(double %v)139 ret double %r140}141 142define double @trunc_d(double %v) {143; CHECK-LABEL: trunc_d:144; CHECK: ; %bb.0:145; CHECK-NEXT: frintz d0, d0146; CHECK-NEXT: ret147 %r = call double @trunc(double %v)148 ret double %r149}150 151define double @rint_d(double %v) {152; CHECK-LABEL: rint_d:153; CHECK: ; %bb.0:154; CHECK-NEXT: frintx d0, d0155; CHECK-NEXT: ret156 %r = call double @rint(double %v)157 ret double %r158}159 160define double @nearbyint_d(double %v) {161; CHECK-LABEL: nearbyint_d:162; CHECK: ; %bb.0:163; CHECK-NEXT: frinti d0, d0164; CHECK-NEXT: ret165 %r = call double @nearbyint(double %v)166 ret double %r167}168 169define float @conv_h_f(half %v) {170; CHECK-LABEL: conv_h_f:171; CHECK: ; %bb.0:172; CHECK-NEXT: fcvt s0, h0173; CHECK-NEXT: ret174 %r = fpext half %v to float175 ret float %r176}177 178define double @conv_h_d(half %v) {179; CHECK-LABEL: conv_h_d:180; CHECK: ; %bb.0:181; CHECK-NEXT: fcvt d0, h0182; CHECK-NEXT: ret183 %r = fpext half %v to double184 ret double %r185}186 187define half @conv_f_h(float %v) {188; CHECK-LABEL: conv_f_h:189; CHECK: ; %bb.0:190; CHECK-NEXT: fcvt h0, s0191; CHECK-NEXT: ret192 %r = fptrunc float %v to half193 ret half %r194}195 196define double @conv_f_d(float %v) {197; CHECK-LABEL: conv_f_d:198; CHECK: ; %bb.0:199; CHECK-NEXT: fcvt d0, s0200; CHECK-NEXT: ret201 %r = fpext float %v to double202 ret double %r203}204 205define half @conv_d_h(double %v) {206; CHECK-LABEL: conv_d_h:207; CHECK: ; %bb.0:208; CHECK-NEXT: fcvt h0, d0209; CHECK-NEXT: ret210 %r = fptrunc double %v to half211 ret half %r212}213 214define float @conv_d_f(double %v) {215; CHECK-LABEL: conv_d_f:216; CHECK: ; %bb.0:217; CHECK-NEXT: fcvt s0, d0218; CHECK-NEXT: ret219 %r = fptrunc double %v to float220 ret float %r221}222