1 ; RUN: llc < %s -mtriple=x86_64-apple-darwin -mcpu=knl --show-mc-encoding | FileCheck %s 2 3 ; CHECK-LABEL: sitof32 4 ; CHECK: vcvtdq2ps %zmm 5 ; CHECK: ret 6 define <16 x float> @sitof32(<16 x i32> %a) nounwind { 7 %b = sitofp <16 x i32> %a to <16 x float> 8 ret <16 x float> %b 9 } 10 11 ; CHECK-LABEL: fptosi00 12 ; CHECK: vcvttps2dq %zmm 13 ; CHECK: ret 14 define <16 x i32> @fptosi00(<16 x float> %a) nounwind { 15 %b = fptosi <16 x float> %a to <16 x i32> 16 ret <16 x i32> %b 17 } 18 19 ; CHECK-LABEL: fptoui00 20 ; CHECK: vcvttps2udq 21 ; CHECK: ret 22 define <16 x i32> @fptoui00(<16 x float> %a) nounwind { 23 %b = fptoui <16 x float> %a to <16 x i32> 24 ret <16 x i32> %b 25 } 26 27 ; CHECK-LABEL: fptoui_256 28 ; CHECK: vcvttps2udq 29 ; CHECK: ret 30 define <8 x i32> @fptoui_256(<8 x float> %a) nounwind { 31 %b = fptoui <8 x float> %a to <8 x i32> 32 ret <8 x i32> %b 33 } 34 35 ; CHECK-LABEL: fptoui_128 36 ; CHECK: vcvttps2udq 37 ; CHECK: ret 38 define <4 x i32> @fptoui_128(<4 x float> %a) nounwind { 39 %b = fptoui <4 x float> %a to <4 x i32> 40 ret <4 x i32> %b 41 } 42 43 ; CHECK-LABEL: fptoui01 44 ; CHECK: vcvttpd2udq 45 ; CHECK: ret 46 define <8 x i32> @fptoui01(<8 x double> %a) nounwind { 47 %b = fptoui <8 x double> %a to <8 x i32> 48 ret <8 x i32> %b 49 } 50 51 ; CHECK-LABEL: sitof64 52 ; CHECK: vcvtdq2pd %ymm 53 ; CHECK: ret 54 define <8 x double> @sitof64(<8 x i32> %a) { 55 %b = sitofp <8 x i32> %a to <8 x double> 56 ret <8 x double> %b 57 } 58 59 ; CHECK-LABEL: fptosi01 60 ; CHECK: vcvttpd2dq %zmm 61 ; CHECK: ret 62 define <8 x i32> @fptosi01(<8 x double> %a) { 63 %b = fptosi <8 x double> %a to <8 x i32> 64 ret <8 x i32> %b 65 } 66 67 ; CHECK-LABEL: fptrunc00 68 ; CHECK: vcvtpd2ps %zmm 69 ; CHECK-NEXT: vcvtpd2ps %zmm 70 ; CHECK-NEXT: vinsertf64x4 $1 71 ; CHECK: ret 72 define <16 x float> @fptrunc00(<16 x double> %b) nounwind { 73 %a = fptrunc <16 x double> %b to <16 x float> 74 ret <16 x float> %a 75 } 76 77 ; CHECK-LABEL: fpext00 78 ; CHECK: vcvtps2pd %ymm0, %zmm0 79 ; CHECK: ret 80 define <8 x double> @fpext00(<8 x float> %b) nounwind { 81 %a = fpext <8 x float> %b to <8 x double> 82 ret <8 x double> %a 83 } 84 85 ; CHECK-LABEL: funcA 86 ; CHECK: vcvtsi2sdq (%rdi){{.*}} encoding: [0x62 87 ; CHECK: ret 88 define double @funcA(i64* nocapture %e) { 89 entry: 90 %tmp1 = load i64* %e, align 8 91 %conv = sitofp i64 %tmp1 to double 92 ret double %conv 93 } 94 95 ; CHECK-LABEL: funcB 96 ; CHECK: vcvtsi2sdl (%{{.*}} encoding: [0x62 97 ; CHECK: ret 98 define double @funcB(i32* %e) { 99 entry: 100 %tmp1 = load i32* %e, align 4 101 %conv = sitofp i32 %tmp1 to double 102 ret double %conv 103 } 104 105 ; CHECK-LABEL: funcC 106 ; CHECK: vcvtsi2ssl (%{{.*}} encoding: [0x62 107 ; CHECK: ret 108 define float @funcC(i32* %e) { 109 entry: 110 %tmp1 = load i32* %e, align 4 111 %conv = sitofp i32 %tmp1 to float 112 ret float %conv 113 } 114 115 ; CHECK-LABEL: i64tof32 116 ; CHECK: vcvtsi2ssq (%{{.*}} encoding: [0x62 117 ; CHECK: ret 118 define float @i64tof32(i64* %e) { 119 entry: 120 %tmp1 = load i64* %e, align 8 121 %conv = sitofp i64 %tmp1 to float 122 ret float %conv 123 } 124 125 ; CHECK-LABEL: fpext 126 ; CHECK: vcvtss2sd {{.*}} encoding: [0x62 127 ; CHECK: ret 128 define void @fpext() { 129 entry: 130 %f = alloca float, align 4 131 %d = alloca double, align 8 132 %tmp = load float* %f, align 4 133 %conv = fpext float %tmp to double 134 store double %conv, double* %d, align 8 135 ret void 136 } 137 138 ; CHECK-LABEL: fpround_scalar 139 ; CHECK: vmovsd {{.*}} encoding: [0x62 140 ; CHECK: vcvtsd2ss {{.*}} encoding: [0x62 141 ; CHECK: vmovss {{.*}} encoding: [0x62 142 ; CHECK: ret 143 define void @fpround_scalar() nounwind uwtable { 144 entry: 145 %f = alloca float, align 4 146 %d = alloca double, align 8 147 %tmp = load double* %d, align 8 148 %conv = fptrunc double %tmp to float 149 store float %conv, float* %f, align 4 150 ret void 151 } 152 153 ; CHECK-LABEL: long_to_double 154 ; CHECK: vmovq {{.*}} encoding: [0x62 155 ; CHECK: ret 156 define double @long_to_double(i64 %x) { 157 %res = bitcast i64 %x to double 158 ret double %res 159 } 160 161 ; CHECK-LABEL: double_to_long 162 ; CHECK: vmovq {{.*}} encoding: [0x62 163 ; CHECK: ret 164 define i64 @double_to_long(double %x) { 165 %res = bitcast double %x to i64 166 ret i64 %res 167 } 168 169 ; CHECK-LABEL: int_to_float 170 ; CHECK: vmovd {{.*}} encoding: [0x62 171 ; CHECK: ret 172 define float @int_to_float(i32 %x) { 173 %res = bitcast i32 %x to float 174 ret float %res 175 } 176 177 ; CHECK-LABEL: float_to_int 178 ; CHECK: vmovd {{.*}} encoding: [0x62 179 ; CHECK: ret 180 define i32 @float_to_int(float %x) { 181 %res = bitcast float %x to i32 182 ret i32 %res 183 } 184 185 ; CHECK-LABEL: uitof64 186 ; CHECK: vcvtudq2pd 187 ; CHECK: vextracti64x4 188 ; CHECK: vcvtudq2pd 189 ; CHECK: ret 190 define <16 x double> @uitof64(<16 x i32> %a) nounwind { 191 %b = uitofp <16 x i32> %a to <16 x double> 192 ret <16 x double> %b 193 } 194 195 ; CHECK-LABEL: uitof64_256 196 ; CHECK: vcvtudq2pd 197 ; CHECK: ret 198 define <4 x double> @uitof64_256(<4 x i32> %a) nounwind { 199 %b = uitofp <4 x i32> %a to <4 x double> 200 ret <4 x double> %b 201 } 202 203 ; CHECK-LABEL: uitof32 204 ; CHECK: vcvtudq2ps 205 ; CHECK: ret 206 define <16 x float> @uitof32(<16 x i32> %a) nounwind { 207 %b = uitofp <16 x i32> %a to <16 x float> 208 ret <16 x float> %b 209 } 210 211 ; CHECK-LABEL: uitof32_256 212 ; CHECK: vcvtudq2ps 213 ; CHECK: ret 214 define <8 x float> @uitof32_256(<8 x i32> %a) nounwind { 215 %b = uitofp <8 x i32> %a to <8 x float> 216 ret <8 x float> %b 217 } 218 219 ; CHECK-LABEL: uitof32_128 220 ; CHECK: vcvtudq2ps 221 ; CHECK: ret 222 define <4 x float> @uitof32_128(<4 x i32> %a) nounwind { 223 %b = uitofp <4 x i32> %a to <4 x float> 224 ret <4 x float> %b 225 } 226 227 ; CHECK-LABEL: @fptosi02 228 ; CHECK: vcvttss2si {{.*}} encoding: [0x62 229 ; CHECK: ret 230 define i32 @fptosi02(float %a) nounwind { 231 %b = fptosi float %a to i32 232 ret i32 %b 233 } 234 235 ; CHECK-LABEL: @fptoui02 236 ; CHECK: vcvttss2usi {{.*}} encoding: [0x62 237 ; CHECK: ret 238 define i32 @fptoui02(float %a) nounwind { 239 %b = fptoui float %a to i32 240 ret i32 %b 241 } 242 243 ; CHECK-LABEL: @uitofp02 244 ; CHECK: vcvtusi2ss 245 ; CHECK: ret 246 define float @uitofp02(i32 %a) nounwind { 247 %b = uitofp i32 %a to float 248 ret float %b 249 } 250 251 ; CHECK-LABEL: @uitofp03 252 ; CHECK: vcvtusi2sd 253 ; CHECK: ret 254 define double @uitofp03(i32 %a) nounwind { 255 %b = uitofp i32 %a to double 256 ret double %b 257 } 258