1 ; RUN: llc -mcpu=pwr8 -mtriple=powerpc64-unknown-unknown < %s | FileCheck %s 2 ; RUN: llc -mcpu=pwr8 -mtriple=powerpc64le-unknown-unknown < %s | FileCheck %s 3 4 ; Function Attrs: nounwind 5 define zeroext i8 @_Z6testcff(float %arg) { 6 entry: 7 %arg.addr = alloca float, align 4 8 store float %arg, float* %arg.addr, align 4 9 %0 = load float, float* %arg.addr, align 4 10 %conv = fptoui float %0 to i8 11 ret i8 %conv 12 ; CHECK-LABEL: @_Z6testcff 13 ; CHECK: xscvdpsxws [[CONVREG01:[0-9]+]], 1 14 ; CHECK: mfvsrwz 3, [[CONVREG01]] 15 } 16 17 ; Function Attrs: nounwind 18 define float @_Z6testfcc(i8 zeroext %arg) { 19 entry: 20 %arg.addr = alloca i8, align 1 21 store i8 %arg, i8* %arg.addr, align 1 22 %0 = load i8, i8* %arg.addr, align 1 23 %conv = uitofp i8 %0 to float 24 ret float %conv 25 ; CHECK-LABEL: @_Z6testfcc 26 ; CHECK: mtvsrwz [[MOVEREG01:[0-9]+]], 3 27 ; CHECK: xscvuxdsp 1, [[MOVEREG01]] 28 } 29 30 ; Function Attrs: nounwind 31 define zeroext i8 @_Z6testcdd(double %arg) { 32 entry: 33 %arg.addr = alloca double, align 8 34 store double %arg, double* %arg.addr, align 8 35 %0 = load double, double* %arg.addr, align 8 36 %conv = fptoui double %0 to i8 37 ret i8 %conv 38 ; CHECK-LABEL: @_Z6testcdd 39 ; CHECK: xscvdpsxws [[CONVREG02:[0-9]+]], 1 40 ; CHECK: mfvsrwz 3, [[CONVREG02]] 41 } 42 43 ; Function Attrs: nounwind 44 define double @_Z6testdcc(i8 zeroext %arg) { 45 entry: 46 %arg.addr = alloca i8, align 1 47 store i8 %arg, i8* %arg.addr, align 1 48 %0 = load i8, i8* %arg.addr, align 1 49 %conv = uitofp i8 %0 to double 50 ret double %conv 51 ; CHECK-LABEL: @_Z6testdcc 52 ; CHECK: mtvsrwz [[MOVEREG02:[0-9]+]], 3 53 ; CHECK: xscvuxddp 1, [[MOVEREG02]] 54 } 55 56 ; Function Attrs: nounwind 57 define zeroext i8 @_Z7testucff(float %arg) { 58 entry: 59 %arg.addr = alloca float, align 4 60 store float %arg, float* %arg.addr, align 4 61 %0 = load float, float* %arg.addr, align 4 62 %conv = fptoui float %0 to i8 63 ret i8 %conv 64 ; CHECK-LABEL: @_Z7testucff 65 ; CHECK: xscvdpsxws [[CONVREG03:[0-9]+]], 1 66 ; CHECK: mfvsrwz 3, [[CONVREG03]] 67 } 68 69 ; Function Attrs: nounwind 70 define float @_Z7testfuch(i8 zeroext %arg) { 71 entry: 72 %arg.addr = alloca i8, align 1 73 store i8 %arg, i8* %arg.addr, align 1 74 %0 = load i8, i8* %arg.addr, align 1 75 %conv = uitofp i8 %0 to float 76 ret float %conv 77 ; CHECK-LABEL: @_Z7testfuch 78 ; CHECK: mtvsrwz [[MOVEREG03:[0-9]+]], 3 79 ; CHECK: xscvuxdsp 1, [[MOVEREG03]] 80 } 81 82 ; Function Attrs: nounwind 83 define zeroext i8 @_Z7testucdd(double %arg) { 84 entry: 85 %arg.addr = alloca double, align 8 86 store double %arg, double* %arg.addr, align 8 87 %0 = load double, double* %arg.addr, align 8 88 %conv = fptoui double %0 to i8 89 ret i8 %conv 90 ; CHECK-LABEL: @_Z7testucdd 91 ; CHECK: xscvdpsxws [[CONVREG04:[0-9]+]], 1 92 ; CHECK: mfvsrwz 3, [[CONVREG04]] 93 } 94 95 ; Function Attrs: nounwind 96 define double @_Z7testduch(i8 zeroext %arg) { 97 entry: 98 %arg.addr = alloca i8, align 1 99 store i8 %arg, i8* %arg.addr, align 1 100 %0 = load i8, i8* %arg.addr, align 1 101 %conv = uitofp i8 %0 to double 102 ret double %conv 103 ; CHECK-LABEL: @_Z7testduch 104 ; CHECK: mtvsrwz [[MOVEREG04:[0-9]+]], 3 105 ; CHECK: xscvuxddp 1, [[MOVEREG04]] 106 } 107 108 ; Function Attrs: nounwind 109 define signext i16 @_Z6testsff(float %arg) { 110 entry: 111 %arg.addr = alloca float, align 4 112 store float %arg, float* %arg.addr, align 4 113 %0 = load float, float* %arg.addr, align 4 114 %conv = fptosi float %0 to i16 115 ret i16 %conv 116 ; CHECK-LABEL: @_Z6testsff 117 ; CHECK: xscvdpsxws [[CONVREG05:[0-9]+]], 1 118 ; CHECK: mfvsrwz 3, [[CONVREG05]] 119 } 120 121 ; Function Attrs: nounwind 122 define float @_Z6testfss(i16 signext %arg) { 123 entry: 124 %arg.addr = alloca i16, align 2 125 store i16 %arg, i16* %arg.addr, align 2 126 %0 = load i16, i16* %arg.addr, align 2 127 %conv = sitofp i16 %0 to float 128 ret float %conv 129 ; CHECK-LABEL: @_Z6testfss 130 ; CHECK: mtvsrwa [[MOVEREG05:[0-9]+]], 3 131 ; CHECK: xscvsxdsp 1, [[MOVEREG05]] 132 } 133 134 ; Function Attrs: nounwind 135 define signext i16 @_Z6testsdd(double %arg) { 136 entry: 137 %arg.addr = alloca double, align 8 138 store double %arg, double* %arg.addr, align 8 139 %0 = load double, double* %arg.addr, align 8 140 %conv = fptosi double %0 to i16 141 ret i16 %conv 142 ; CHECK-LABEL: @_Z6testsdd 143 ; CHECK: xscvdpsxws [[CONVREG06:[0-9]+]], 1 144 ; CHECK: mfvsrwz 3, [[CONVREG06]] 145 } 146 147 ; Function Attrs: nounwind 148 define double @_Z6testdss(i16 signext %arg) { 149 entry: 150 %arg.addr = alloca i16, align 2 151 store i16 %arg, i16* %arg.addr, align 2 152 %0 = load i16, i16* %arg.addr, align 2 153 %conv = sitofp i16 %0 to double 154 ret double %conv 155 ; CHECK-LABEL: @_Z6testdss 156 ; CHECK: mtvsrwa [[MOVEREG06:[0-9]+]], 3 157 ; CHECK: xscvsxddp 1, [[MOVEREG06]] 158 } 159 160 ; Function Attrs: nounwind 161 define zeroext i16 @_Z7testusff(float %arg) { 162 entry: 163 %arg.addr = alloca float, align 4 164 store float %arg, float* %arg.addr, align 4 165 %0 = load float, float* %arg.addr, align 4 166 %conv = fptoui float %0 to i16 167 ret i16 %conv 168 ; CHECK-LABEL: @_Z7testusff 169 ; CHECK: xscvdpsxws [[CONVREG07:[0-9]+]], 1 170 ; CHECK: mfvsrwz 3, [[CONVREG07]] 171 } 172 173 ; Function Attrs: nounwind 174 define float @_Z7testfust(i16 zeroext %arg) { 175 entry: 176 %arg.addr = alloca i16, align 2 177 store i16 %arg, i16* %arg.addr, align 2 178 %0 = load i16, i16* %arg.addr, align 2 179 %conv = uitofp i16 %0 to float 180 ret float %conv 181 ; CHECK-LABEL: @_Z7testfust 182 ; CHECK: mtvsrwz [[MOVEREG07:[0-9]+]], 3 183 ; CHECK: xscvuxdsp 1, [[MOVEREG07]] 184 } 185 186 ; Function Attrs: nounwind 187 define zeroext i16 @_Z7testusdd(double %arg) { 188 entry: 189 %arg.addr = alloca double, align 8 190 store double %arg, double* %arg.addr, align 8 191 %0 = load double, double* %arg.addr, align 8 192 %conv = fptoui double %0 to i16 193 ret i16 %conv 194 ; CHECK-LABEL: @_Z7testusdd 195 ; CHECK: xscvdpsxws [[CONVREG08:[0-9]+]], 1 196 ; CHECK: mfvsrwz 3, [[CONVREG08]] 197 } 198 199 ; Function Attrs: nounwind 200 define double @_Z7testdust(i16 zeroext %arg) { 201 entry: 202 %arg.addr = alloca i16, align 2 203 store i16 %arg, i16* %arg.addr, align 2 204 %0 = load i16, i16* %arg.addr, align 2 205 %conv = uitofp i16 %0 to double 206 ret double %conv 207 ; CHECK-LABEL: @_Z7testdust 208 ; CHECK: mtvsrwz [[MOVEREG08:[0-9]+]], 3 209 ; CHECK: xscvuxddp 1, [[MOVEREG08]] 210 } 211 212 ; Function Attrs: nounwind 213 define signext i32 @_Z6testiff(float %arg) { 214 entry: 215 %arg.addr = alloca float, align 4 216 store float %arg, float* %arg.addr, align 4 217 %0 = load float, float* %arg.addr, align 4 218 %conv = fptosi float %0 to i32 219 ret i32 %conv 220 ; CHECK-LABEL: @_Z6testiff 221 ; CHECK: xscvdpsxws [[CONVREG09:[0-9]+]], 1 222 ; CHECK: mfvsrwz 3, [[CONVREG09]] 223 } 224 225 ; Function Attrs: nounwind 226 define float @_Z6testfii(i32 signext %arg) { 227 entry: 228 %arg.addr = alloca i32, align 4 229 store i32 %arg, i32* %arg.addr, align 4 230 %0 = load i32, i32* %arg.addr, align 4 231 %conv = sitofp i32 %0 to float 232 ret float %conv 233 ; CHECK-LABEL: @_Z6testfii 234 ; CHECK: mtvsrwa [[MOVEREG09:[0-9]+]], 3 235 ; CHECK: xscvsxdsp 1, [[MOVEREG09]] 236 } 237 238 ; Function Attrs: nounwind 239 define signext i32 @_Z6testidd(double %arg) { 240 entry: 241 %arg.addr = alloca double, align 8 242 store double %arg, double* %arg.addr, align 8 243 %0 = load double, double* %arg.addr, align 8 244 %conv = fptosi double %0 to i32 245 ret i32 %conv 246 ; CHECK-LABEL: @_Z6testidd 247 ; CHECK: xscvdpsxws [[CONVREG10:[0-9]+]], 1 248 ; CHECK: mfvsrwz 3, [[CONVREG10]] 249 } 250 251 ; Function Attrs: nounwind 252 define double @_Z6testdii(i32 signext %arg) { 253 entry: 254 %arg.addr = alloca i32, align 4 255 store i32 %arg, i32* %arg.addr, align 4 256 %0 = load i32, i32* %arg.addr, align 4 257 %conv = sitofp i32 %0 to double 258 ret double %conv 259 ; CHECK-LABEL: @_Z6testdii 260 ; CHECK: mtvsrwa [[MOVEREG10:[0-9]+]], 3 261 ; CHECK: xscvsxddp 1, [[MOVEREG10]] 262 } 263 264 ; Function Attrs: nounwind 265 define zeroext i32 @_Z7testuiff(float %arg) { 266 entry: 267 %arg.addr = alloca float, align 4 268 store float %arg, float* %arg.addr, align 4 269 %0 = load float, float* %arg.addr, align 4 270 %conv = fptoui float %0 to i32 271 ret i32 %conv 272 ; CHECK-LABEL: @_Z7testuiff 273 ; CHECK: xscvdpuxws [[CONVREG11:[0-9]+]], 1 274 ; CHECK: mfvsrwz 3, [[CONVREG11]] 275 } 276 277 ; Function Attrs: nounwind 278 define float @_Z7testfuij(i32 zeroext %arg) { 279 entry: 280 %arg.addr = alloca i32, align 4 281 store i32 %arg, i32* %arg.addr, align 4 282 %0 = load i32, i32* %arg.addr, align 4 283 %conv = uitofp i32 %0 to float 284 ret float %conv 285 ; CHECK-LABEL: @_Z7testfuij 286 ; CHECK: mtvsrwz [[MOVEREG11:[0-9]+]], 3 287 ; CHECK: xscvuxdsp 1, [[MOVEREG11]] 288 } 289 290 ; Function Attrs: nounwind 291 define zeroext i32 @_Z7testuidd(double %arg) { 292 entry: 293 %arg.addr = alloca double, align 8 294 store double %arg, double* %arg.addr, align 8 295 %0 = load double, double* %arg.addr, align 8 296 %conv = fptoui double %0 to i32 297 ret i32 %conv 298 ; CHECK-LABEL: @_Z7testuidd 299 ; CHECK: xscvdpuxws [[CONVREG12:[0-9]+]], 1 300 ; CHECK: mfvsrwz 3, [[CONVREG12]] 301 } 302 303 ; Function Attrs: nounwind 304 define double @_Z7testduij(i32 zeroext %arg) { 305 entry: 306 %arg.addr = alloca i32, align 4 307 store i32 %arg, i32* %arg.addr, align 4 308 %0 = load i32, i32* %arg.addr, align 4 309 %conv = uitofp i32 %0 to double 310 ret double %conv 311 ; CHECK-LABEL: @_Z7testduij 312 ; CHECK: mtvsrwz [[MOVEREG12:[0-9]+]], 3 313 ; CHECK: xscvuxddp 1, [[MOVEREG12]] 314 } 315 316 ; Function Attrs: nounwind 317 define i64 @_Z7testllff(float %arg) { 318 entry: 319 %arg.addr = alloca float, align 4 320 store float %arg, float* %arg.addr, align 4 321 %0 = load float, float* %arg.addr, align 4 322 %conv = fptosi float %0 to i64 323 ret i64 %conv 324 ; CHECK-LABEL: @_Z7testllff 325 ; CHECK: xscvdpsxds [[CONVREG13:[0-9]+]], 1 326 ; CHECK: mfvsrd 3, [[CONVREG13]] 327 } 328 329 ; Function Attrs: nounwind 330 define float @_Z7testfllx(i64 %arg) { 331 entry: 332 %arg.addr = alloca i64, align 8 333 store i64 %arg, i64* %arg.addr, align 8 334 %0 = load i64, i64* %arg.addr, align 8 335 %conv = sitofp i64 %0 to float 336 ret float %conv 337 ; CHECK-LABEL:@_Z7testfllx 338 ; CHECK: mtvsrd [[MOVEREG13:[0-9]+]], 3 339 ; CHECK: xscvsxdsp 1, [[MOVEREG13]] 340 } 341 342 ; Function Attrs: nounwind 343 define i64 @_Z7testlldd(double %arg) { 344 entry: 345 %arg.addr = alloca double, align 8 346 store double %arg, double* %arg.addr, align 8 347 %0 = load double, double* %arg.addr, align 8 348 %conv = fptosi double %0 to i64 349 ret i64 %conv 350 ; CHECK-LABEL: @_Z7testlldd 351 ; CHECK: xscvdpsxds [[CONVREG14:[0-9]+]], 1 352 ; CHECK: mfvsrd 3, [[CONVREG14]] 353 } 354 355 ; Function Attrs: nounwind 356 define double @_Z7testdllx(i64 %arg) { 357 entry: 358 %arg.addr = alloca i64, align 8 359 store i64 %arg, i64* %arg.addr, align 8 360 %0 = load i64, i64* %arg.addr, align 8 361 %conv = sitofp i64 %0 to double 362 ret double %conv 363 ; CHECK-LABEL: @_Z7testdllx 364 ; CHECK: mtvsrd [[MOVEREG14:[0-9]+]], 3 365 ; CHECK: xscvsxddp 1, [[MOVEREG14]] 366 } 367 368 ; Function Attrs: nounwind 369 define i64 @_Z8testullff(float %arg) { 370 entry: 371 %arg.addr = alloca float, align 4 372 store float %arg, float* %arg.addr, align 4 373 %0 = load float, float* %arg.addr, align 4 374 %conv = fptoui float %0 to i64 375 ret i64 %conv 376 ; CHECK-LABEL: @_Z8testullff 377 ; CHECK: xscvdpuxds [[CONVREG15:[0-9]+]], 1 378 ; CHECK: mfvsrd 3, [[CONVREG15]] 379 } 380 381 ; Function Attrs: nounwind 382 define float @_Z8testfully(i64 %arg) { 383 entry: 384 %arg.addr = alloca i64, align 8 385 store i64 %arg, i64* %arg.addr, align 8 386 %0 = load i64, i64* %arg.addr, align 8 387 %conv = uitofp i64 %0 to float 388 ret float %conv 389 ; CHECK-LABEL: @_Z8testfully 390 ; CHECK: mtvsrd [[MOVEREG15:[0-9]+]], 3 391 ; CHECK: xscvuxdsp 1, [[MOVEREG15]] 392 } 393 394 ; Function Attrs: nounwind 395 define i64 @_Z8testulldd(double %arg) { 396 entry: 397 %arg.addr = alloca double, align 8 398 store double %arg, double* %arg.addr, align 8 399 %0 = load double, double* %arg.addr, align 8 400 %conv = fptoui double %0 to i64 401 ret i64 %conv 402 ; CHECK-LABEL: @_Z8testulldd 403 ; CHECK: xscvdpuxds [[CONVREG16:[0-9]+]], 1 404 ; CHECK: mfvsrd 3, [[CONVREG16]] 405 } 406 407 ; Function Attrs: nounwind 408 define double @_Z8testdully(i64 %arg) { 409 entry: 410 %arg.addr = alloca i64, align 8 411 store i64 %arg, i64* %arg.addr, align 8 412 %0 = load i64, i64* %arg.addr, align 8 413 %conv = uitofp i64 %0 to double 414 ret double %conv 415 ; CHECK-LABEL: @_Z8testdully 416 ; CHECK: mtvsrd [[MOVEREG16:[0-9]+]], 3 417 ; CHECK: xscvuxddp 1, [[MOVEREG16]] 418 } 419