1; RUN: llc -mtriple=arm-eabi -mattr=+vfp2 %s -o - | FileCheck %s --check-prefix=CHECK-VFP 2; RUN: llc -mtriple=arm-apple-darwin %s -o - | FileCheck %s 3; RUN: llc -mtriple=armv8r-none-none-eabi -mattr=+neon,+fp-armv8 %s -o - | FileCheck %s --check-prefix=CHECK-VFP 4; RUN: llc -mtriple=armv8r-none-none-eabi %s -o - | FileCheck %s --check-prefix=CHECK-VFP-SP 5 6define float @f1(double %x) { 7;CHECK-VFP-LABEL: f1: 8;CHECK-VFP: vcvt.f32.f64 9;CHECK-VFP-SP-LABEL: f1: 10;CHECK-VFP-SP: bl __aeabi_d2f 11;CHECK-LABEL: f1: 12;CHECK: truncdfsf2 13entry: 14 %tmp1 = fptrunc double %x to float ; <float> [#uses=1] 15 ret float %tmp1 16} 17 18define double @f2(float %x) { 19;CHECK-VFP-LABEL: f2: 20;CHECK-VFP: vcvt.f64.f32 21;CHECK-VFP-SP-LABEL: f2: 22;CHECK-VFP-SP: bl __aeabi_f2d 23;CHECK-LABEL: f2: 24;CHECK: extendsfdf2 25entry: 26 %tmp1 = fpext float %x to double ; <double> [#uses=1] 27 ret double %tmp1 28} 29 30define i32 @f3(float %x) { 31;CHECK-VFP-LABEL: f3: 32;CHECK-VFP: vcvt.s32.f32 33;CHECK-VFP-SP-LABEL: f3: 34;CHECK-VFP-SP: vcvt.s32.f32 35;CHECK-LABEL: f3: 36;CHECK: fixsfsi 37entry: 38 %tmp = fptosi float %x to i32 ; <i32> [#uses=1] 39 ret i32 %tmp 40} 41 42define i32 @f4(float %x) { 43;CHECK-VFP-LABEL: f4: 44;CHECK-VFP: vcvt.u32.f32 45;CHECK-VFP-SP-LABEL: f4: 46;CHECK-VFP-SP: vcvt.u32.f32 47;CHECK-LABEL: f4: 48;CHECK: fixunssfsi 49entry: 50 %tmp = fptoui float %x to i32 ; <i32> [#uses=1] 51 ret i32 %tmp 52} 53 54define i32 @f5(double %x) { 55;CHECK-VFP-LABEL: f5: 56;CHECK-VFP: vcvt.s32.f64 57;CHECK-VFP-SP-LABEL: f5: 58;CHECK-VFP-SP: bl __aeabi_d2iz 59;CHECK-LABEL: f5: 60;CHECK: fixdfsi 61entry: 62 %tmp = fptosi double %x to i32 ; <i32> [#uses=1] 63 ret i32 %tmp 64} 65 66define i32 @f6(double %x) { 67;CHECK-VFP-LABEL: f6: 68;CHECK-VFP: vcvt.u32.f64 69;CHECK-VFP-SP-LABEL: f6: 70;CHECK-VFP-SP: bl __aeabi_d2uiz 71;CHECK-LABEL: f6: 72;CHECK: fixunsdfsi 73entry: 74 %tmp = fptoui double %x to i32 ; <i32> [#uses=1] 75 ret i32 %tmp 76} 77 78define float @f7(i32 %a) { 79;CHECK-VFP-LABEL: f7: 80;CHECK-VFP: vcvt.f32.s32 81;CHECK-VFP-SP-LABEL: f7: 82;CHECK-VFP-SP: vcvt.f32.s32 83;CHECK-LABEL: f7: 84;CHECK: floatsisf 85entry: 86 %tmp = sitofp i32 %a to float ; <float> [#uses=1] 87 ret float %tmp 88} 89 90define double @f8(i32 %a) { 91;CHECK-VFP-LABEL: f8: 92;CHECK-VFP: vcvt.f64.s32 93;CHECK-VFP-SP-LABEL: f8: 94;CHECK-VFP-SP: bl __aeabi_i2d 95;CHECK-LABEL: f8: 96;CHECK: floatsidf 97entry: 98 %tmp = sitofp i32 %a to double ; <double> [#uses=1] 99 ret double %tmp 100} 101 102define float @f9(i32 %a) { 103;CHECK-VFP-LABEL: f9: 104;CHECK-VFP: vcvt.f32.u32 105;CHECK-VFP-SP-LABEL: f9: 106;CHECK-VFP-SP: vcvt.f32.u32 107;CHECK-LABEL: f9: 108;CHECK: floatunsisf 109entry: 110 %tmp = uitofp i32 %a to float ; <float> [#uses=1] 111 ret float %tmp 112} 113 114define double @f10(i32 %a) { 115;CHECK-VFP-LABEL: f10: 116;CHECK-VFP: vcvt.f64.u32 117;CHECK-VFP-SP-LABEL: f10: 118;CHECK-VFP-SP: bl __aeabi_ui2d 119;CHECK-LABEL: f10: 120;CHECK: floatunsidf 121entry: 122 %tmp = uitofp i32 %a to double ; <double> [#uses=1] 123 ret double %tmp 124} 125