1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -O0 -mtriple=mipsel-linux-gnu -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP32 3# RUN: llc -O0 -mtriple=mipsel-linux-gnu -mattr=+fp64,+mips32r2 -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s -check-prefixes=FP64 4--- | 5 6 define void @f32toi64() {entry: ret void} 7 define void @f32toi32() {entry: ret void} 8 define void @f32toi16() {entry: ret void} 9 define void @f32toi8() {entry: ret void} 10 define void @f64toi64() {entry: ret void} 11 define void @f64toi32() {entry: ret void} 12 define void @f64toi16() {entry: ret void} 13 define void @f64toi8() {entry: ret void} 14 define void @f32tou64() {entry: ret void} 15 define void @f32tou32() {entry: ret void} 16 define void @f32tou16() {entry: ret void} 17 define void @f32tou8() {entry: ret void} 18 define void @f64tou64() {entry: ret void} 19 define void @f64tou32() {entry: ret void} 20 define void @f64tou16() {entry: ret void} 21 define void @f64tou8() {entry: ret void} 22 23... 24--- 25name: f32toi64 26alignment: 4 27tracksRegLiveness: true 28body: | 29 bb.1.entry: 30 liveins: $f12 31 32 ; FP32-LABEL: name: f32toi64 33 ; FP32: liveins: $f12 34 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 35 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 36 ; FP32: $f12 = COPY [[COPY]](s32) 37 ; FP32: JAL &__fixsfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v1 38 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 39 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 40 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 41 ; FP32: $v0 = COPY [[COPY1]](s32) 42 ; FP32: $v1 = COPY [[COPY2]](s32) 43 ; FP32: RetRA implicit $v0, implicit $v1 44 ; FP64-LABEL: name: f32toi64 45 ; FP64: liveins: $f12 46 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 47 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 48 ; FP64: $f12 = COPY [[COPY]](s32) 49 ; FP64: JAL &__fixsfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v1 50 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 51 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 52 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 53 ; FP64: $v0 = COPY [[COPY1]](s32) 54 ; FP64: $v1 = COPY [[COPY2]](s32) 55 ; FP64: RetRA implicit $v0, implicit $v1 56 %0:_(s32) = COPY $f12 57 %1:_(s64) = G_FPTOSI %0(s32) 58 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64) 59 $v0 = COPY %2(s32) 60 $v1 = COPY %3(s32) 61 RetRA implicit $v0, implicit $v1 62 63... 64--- 65name: f32toi32 66alignment: 4 67tracksRegLiveness: true 68body: | 69 bb.1.entry: 70 liveins: $f12 71 72 ; FP32-LABEL: name: f32toi32 73 ; FP32: liveins: $f12 74 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 75 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 76 ; FP32: $v0 = COPY [[FPTOSI]](s32) 77 ; FP32: RetRA implicit $v0 78 ; FP64-LABEL: name: f32toi32 79 ; FP64: liveins: $f12 80 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 81 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 82 ; FP64: $v0 = COPY [[FPTOSI]](s32) 83 ; FP64: RetRA implicit $v0 84 %0:_(s32) = COPY $f12 85 %1:_(s32) = G_FPTOSI %0(s32) 86 $v0 = COPY %1(s32) 87 RetRA implicit $v0 88 89... 90--- 91name: f32toi16 92alignment: 4 93tracksRegLiveness: true 94body: | 95 bb.1.entry: 96 liveins: $f12 97 98 ; FP32-LABEL: name: f32toi16 99 ; FP32: liveins: $f12 100 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 101 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 102 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 103 ; FP32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 104 ; FP32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 105 ; FP32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 106 ; FP32: $v0 = COPY [[ASHR]](s32) 107 ; FP32: RetRA implicit $v0 108 ; FP64-LABEL: name: f32toi16 109 ; FP64: liveins: $f12 110 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 111 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 112 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 113 ; FP64: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 114 ; FP64: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 115 ; FP64: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 116 ; FP64: $v0 = COPY [[ASHR]](s32) 117 ; FP64: RetRA implicit $v0 118 %0:_(s32) = COPY $f12 119 %1:_(s16) = G_FPTOSI %0(s32) 120 %2:_(s32) = G_SEXT %1(s16) 121 $v0 = COPY %2(s32) 122 RetRA implicit $v0 123 124... 125--- 126name: f32toi8 127alignment: 4 128tracksRegLiveness: true 129body: | 130 bb.1.entry: 131 liveins: $f12 132 133 ; FP32-LABEL: name: f32toi8 134 ; FP32: liveins: $f12 135 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 136 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 137 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 138 ; FP32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 139 ; FP32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 140 ; FP32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 141 ; FP32: $v0 = COPY [[ASHR]](s32) 142 ; FP32: RetRA implicit $v0 143 ; FP64-LABEL: name: f32toi8 144 ; FP64: liveins: $f12 145 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 146 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 147 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 148 ; FP64: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 149 ; FP64: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 150 ; FP64: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 151 ; FP64: $v0 = COPY [[ASHR]](s32) 152 ; FP64: RetRA implicit $v0 153 %0:_(s32) = COPY $f12 154 %1:_(s8) = G_FPTOSI %0(s32) 155 %2:_(s32) = G_SEXT %1(s8) 156 $v0 = COPY %2(s32) 157 RetRA implicit $v0 158 159... 160--- 161name: f64toi64 162alignment: 4 163tracksRegLiveness: true 164body: | 165 bb.1.entry: 166 liveins: $d6 167 168 ; FP32-LABEL: name: f64toi64 169 ; FP32: liveins: $d6 170 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 171 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 172 ; FP32: $d6 = COPY [[COPY]](s64) 173 ; FP32: JAL &__fixdfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit-def $v0, implicit-def $v1 174 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 175 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 176 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 177 ; FP32: $v0 = COPY [[COPY1]](s32) 178 ; FP32: $v1 = COPY [[COPY2]](s32) 179 ; FP32: RetRA implicit $v0, implicit $v1 180 ; FP64-LABEL: name: f64toi64 181 ; FP64: liveins: $d6 182 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 183 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 184 ; FP64: $d12_64 = COPY [[COPY]](s64) 185 ; FP64: JAL &__fixdfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $d12_64, implicit-def $v0, implicit-def $v1 186 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 187 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 188 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 189 ; FP64: $v0 = COPY [[COPY1]](s32) 190 ; FP64: $v1 = COPY [[COPY2]](s32) 191 ; FP64: RetRA implicit $v0, implicit $v1 192 %0:_(s64) = COPY $d6 193 %1:_(s64) = G_FPTOSI %0(s64) 194 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64) 195 $v0 = COPY %2(s32) 196 $v1 = COPY %3(s32) 197 RetRA implicit $v0, implicit $v1 198 199... 200--- 201name: f64toi32 202alignment: 4 203tracksRegLiveness: true 204body: | 205 bb.1.entry: 206 liveins: $d6 207 208 ; FP32-LABEL: name: f64toi32 209 ; FP32: liveins: $d6 210 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 211 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 212 ; FP32: $v0 = COPY [[FPTOSI]](s32) 213 ; FP32: RetRA implicit $v0 214 ; FP64-LABEL: name: f64toi32 215 ; FP64: liveins: $d6 216 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 217 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 218 ; FP64: $v0 = COPY [[FPTOSI]](s32) 219 ; FP64: RetRA implicit $v0 220 %0:_(s64) = COPY $d6 221 %1:_(s32) = G_FPTOSI %0(s64) 222 $v0 = COPY %1(s32) 223 RetRA implicit $v0 224 225... 226--- 227name: f64toi16 228alignment: 4 229tracksRegLiveness: true 230body: | 231 bb.1.entry: 232 liveins: $d6 233 234 ; FP32-LABEL: name: f64toi16 235 ; FP32: liveins: $d6 236 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 237 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 238 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 239 ; FP32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 240 ; FP32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 241 ; FP32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 242 ; FP32: $v0 = COPY [[ASHR]](s32) 243 ; FP32: RetRA implicit $v0 244 ; FP64-LABEL: name: f64toi16 245 ; FP64: liveins: $d6 246 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 247 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 248 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 249 ; FP64: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16 250 ; FP64: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 251 ; FP64: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 252 ; FP64: $v0 = COPY [[ASHR]](s32) 253 ; FP64: RetRA implicit $v0 254 %0:_(s64) = COPY $d6 255 %1:_(s16) = G_FPTOSI %0(s64) 256 %2:_(s32) = G_SEXT %1(s16) 257 $v0 = COPY %2(s32) 258 RetRA implicit $v0 259 260... 261--- 262name: f64toi8 263alignment: 4 264tracksRegLiveness: true 265body: | 266 bb.1.entry: 267 liveins: $d6 268 269 ; FP32-LABEL: name: f64toi8 270 ; FP32: liveins: $d6 271 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 272 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 273 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 274 ; FP32: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 275 ; FP32: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 276 ; FP32: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 277 ; FP32: $v0 = COPY [[ASHR]](s32) 278 ; FP32: RetRA implicit $v0 279 ; FP64-LABEL: name: f64toi8 280 ; FP64: liveins: $d6 281 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 282 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 283 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FPTOSI]](s32) 284 ; FP64: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 24 285 ; FP64: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[COPY1]], [[C]](s32) 286 ; FP64: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C]](s32) 287 ; FP64: $v0 = COPY [[ASHR]](s32) 288 ; FP64: RetRA implicit $v0 289 %0:_(s64) = COPY $d6 290 %1:_(s8) = G_FPTOSI %0(s64) 291 %2:_(s32) = G_SEXT %1(s8) 292 $v0 = COPY %2(s32) 293 RetRA implicit $v0 294 295... 296--- 297name: f32tou64 298alignment: 4 299tracksRegLiveness: true 300body: | 301 bb.1.entry: 302 liveins: $f12 303 304 ; FP32-LABEL: name: f32tou64 305 ; FP32: liveins: $f12 306 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 307 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 308 ; FP32: $f12 = COPY [[COPY]](s32) 309 ; FP32: JAL &__fixunssfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v1 310 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 311 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 312 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 313 ; FP32: $v0 = COPY [[COPY1]](s32) 314 ; FP32: $v1 = COPY [[COPY2]](s32) 315 ; FP32: RetRA implicit $v0, implicit $v1 316 ; FP64-LABEL: name: f32tou64 317 ; FP64: liveins: $f12 318 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 319 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 320 ; FP64: $f12 = COPY [[COPY]](s32) 321 ; FP64: JAL &__fixunssfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $f12, implicit-def $v0, implicit-def $v1 322 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 323 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 324 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 325 ; FP64: $v0 = COPY [[COPY1]](s32) 326 ; FP64: $v1 = COPY [[COPY2]](s32) 327 ; FP64: RetRA implicit $v0, implicit $v1 328 %0:_(s32) = COPY $f12 329 %1:_(s64) = G_FPTOUI %0(s32) 330 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64) 331 $v0 = COPY %2(s32) 332 $v1 = COPY %3(s32) 333 RetRA implicit $v0, implicit $v1 334 335... 336--- 337name: f32tou32 338alignment: 4 339tracksRegLiveness: true 340body: | 341 bb.1.entry: 342 liveins: $f12 343 344 ; FP32-LABEL: name: f32tou32 345 ; FP32: liveins: $f12 346 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 347 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 348 ; FP32: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000 349 ; FP32: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]] 350 ; FP32: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32) 351 ; FP32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 352 ; FP32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 353 ; FP32: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]] 354 ; FP32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 355 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 356 ; FP32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 357 ; FP32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 358 ; FP32: $v0 = COPY [[SELECT]](s32) 359 ; FP32: RetRA implicit $v0 360 ; FP64-LABEL: name: f32tou32 361 ; FP64: liveins: $f12 362 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 363 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 364 ; FP64: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000 365 ; FP64: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]] 366 ; FP64: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32) 367 ; FP64: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 368 ; FP64: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 369 ; FP64: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]] 370 ; FP64: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 371 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 372 ; FP64: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 373 ; FP64: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 374 ; FP64: $v0 = COPY [[SELECT]](s32) 375 ; FP64: RetRA implicit $v0 376 %0:_(s32) = COPY $f12 377 %1:_(s32) = G_FPTOUI %0(s32) 378 $v0 = COPY %1(s32) 379 RetRA implicit $v0 380 381... 382--- 383name: f32tou16 384alignment: 4 385tracksRegLiveness: true 386body: | 387 bb.1.entry: 388 liveins: $f12 389 390 ; FP32-LABEL: name: f32tou16 391 ; FP32: liveins: $f12 392 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 393 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 394 ; FP32: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000 395 ; FP32: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]] 396 ; FP32: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32) 397 ; FP32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 398 ; FP32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 399 ; FP32: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]] 400 ; FP32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 401 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 402 ; FP32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 403 ; FP32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 404 ; FP32: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 405 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 406 ; FP32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 407 ; FP32: $v0 = COPY [[AND1]](s32) 408 ; FP32: RetRA implicit $v0 409 ; FP64-LABEL: name: f32tou16 410 ; FP64: liveins: $f12 411 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 412 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 413 ; FP64: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000 414 ; FP64: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]] 415 ; FP64: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32) 416 ; FP64: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 417 ; FP64: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 418 ; FP64: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]] 419 ; FP64: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 420 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 421 ; FP64: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 422 ; FP64: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 423 ; FP64: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 424 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 425 ; FP64: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 426 ; FP64: $v0 = COPY [[AND1]](s32) 427 ; FP64: RetRA implicit $v0 428 %0:_(s32) = COPY $f12 429 %1:_(s16) = G_FPTOUI %0(s32) 430 %2:_(s32) = G_ZEXT %1(s16) 431 $v0 = COPY %2(s32) 432 RetRA implicit $v0 433 434... 435--- 436name: f32tou8 437alignment: 4 438tracksRegLiveness: true 439body: | 440 bb.1.entry: 441 liveins: $f12 442 443 ; FP32-LABEL: name: f32tou8 444 ; FP32: liveins: $f12 445 ; FP32: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 446 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 447 ; FP32: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000 448 ; FP32: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]] 449 ; FP32: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32) 450 ; FP32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 451 ; FP32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 452 ; FP32: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]] 453 ; FP32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 454 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 455 ; FP32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 456 ; FP32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 457 ; FP32: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 458 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 459 ; FP32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 460 ; FP32: $v0 = COPY [[AND1]](s32) 461 ; FP32: RetRA implicit $v0 462 ; FP64-LABEL: name: f32tou8 463 ; FP64: liveins: $f12 464 ; FP64: [[COPY:%[0-9]+]]:_(s32) = COPY $f12 465 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s32) 466 ; FP64: [[C:%[0-9]+]]:_(s32) = G_FCONSTANT float 0x41E0000000000000 467 ; FP64: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[COPY]], [[C]] 468 ; FP64: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s32) 469 ; FP64: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 470 ; FP64: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 471 ; FP64: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s32), [[C]] 472 ; FP64: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 473 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 474 ; FP64: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 475 ; FP64: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 476 ; FP64: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 477 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 478 ; FP64: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 479 ; FP64: $v0 = COPY [[AND1]](s32) 480 ; FP64: RetRA implicit $v0 481 %0:_(s32) = COPY $f12 482 %1:_(s8) = G_FPTOUI %0(s32) 483 %2:_(s32) = G_ZEXT %1(s8) 484 $v0 = COPY %2(s32) 485 RetRA implicit $v0 486 487... 488--- 489name: f64tou64 490alignment: 4 491tracksRegLiveness: true 492body: | 493 bb.1.entry: 494 liveins: $d6 495 496 ; FP32-LABEL: name: f64tou64 497 ; FP32: liveins: $d6 498 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 499 ; FP32: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 500 ; FP32: $d6 = COPY [[COPY]](s64) 501 ; FP32: JAL &__fixunsdfdi, csr_o32, implicit-def $ra, implicit-def $sp, implicit $d6, implicit-def $v0, implicit-def $v1 502 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 503 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 504 ; FP32: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 505 ; FP32: $v0 = COPY [[COPY1]](s32) 506 ; FP32: $v1 = COPY [[COPY2]](s32) 507 ; FP32: RetRA implicit $v0, implicit $v1 508 ; FP64-LABEL: name: f64tou64 509 ; FP64: liveins: $d6 510 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 511 ; FP64: ADJCALLSTACKDOWN 16, 0, implicit-def $sp, implicit $sp 512 ; FP64: $d12_64 = COPY [[COPY]](s64) 513 ; FP64: JAL &__fixunsdfdi, csr_o32_fp64, implicit-def $ra, implicit-def $sp, implicit $d12_64, implicit-def $v0, implicit-def $v1 514 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY $v0 515 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY $v1 516 ; FP64: ADJCALLSTACKUP 16, 0, implicit-def $sp, implicit $sp 517 ; FP64: $v0 = COPY [[COPY1]](s32) 518 ; FP64: $v1 = COPY [[COPY2]](s32) 519 ; FP64: RetRA implicit $v0, implicit $v1 520 %0:_(s64) = COPY $d6 521 %1:_(s64) = G_FPTOUI %0(s64) 522 %2:_(s32), %3:_(s32) = G_UNMERGE_VALUES %1(s64) 523 $v0 = COPY %2(s32) 524 $v1 = COPY %3(s32) 525 RetRA implicit $v0, implicit $v1 526 527... 528--- 529name: f64tou32 530alignment: 4 531tracksRegLiveness: true 532body: | 533 bb.1.entry: 534 liveins: $d6 535 536 ; FP32-LABEL: name: f64tou32 537 ; FP32: liveins: $d6 538 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 539 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 540 ; FP32: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000 541 ; FP32: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]] 542 ; FP32: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64) 543 ; FP32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 544 ; FP32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 545 ; FP32: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]] 546 ; FP32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 547 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 548 ; FP32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 549 ; FP32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 550 ; FP32: $v0 = COPY [[SELECT]](s32) 551 ; FP32: RetRA implicit $v0 552 ; FP64-LABEL: name: f64tou32 553 ; FP64: liveins: $d6 554 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 555 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 556 ; FP64: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000 557 ; FP64: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]] 558 ; FP64: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64) 559 ; FP64: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 560 ; FP64: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 561 ; FP64: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]] 562 ; FP64: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 563 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 564 ; FP64: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 565 ; FP64: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 566 ; FP64: $v0 = COPY [[SELECT]](s32) 567 ; FP64: RetRA implicit $v0 568 %0:_(s64) = COPY $d6 569 %1:_(s32) = G_FPTOUI %0(s64) 570 $v0 = COPY %1(s32) 571 RetRA implicit $v0 572 573... 574--- 575name: f64tou16 576alignment: 4 577tracksRegLiveness: true 578body: | 579 bb.1.entry: 580 liveins: $d6 581 582 ; FP32-LABEL: name: f64tou16 583 ; FP32: liveins: $d6 584 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 585 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 586 ; FP32: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000 587 ; FP32: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]] 588 ; FP32: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64) 589 ; FP32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 590 ; FP32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 591 ; FP32: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]] 592 ; FP32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 593 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 594 ; FP32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 595 ; FP32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 596 ; FP32: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 597 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 598 ; FP32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 599 ; FP32: $v0 = COPY [[AND1]](s32) 600 ; FP32: RetRA implicit $v0 601 ; FP64-LABEL: name: f64tou16 602 ; FP64: liveins: $d6 603 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 604 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 605 ; FP64: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000 606 ; FP64: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]] 607 ; FP64: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64) 608 ; FP64: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 609 ; FP64: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 610 ; FP64: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]] 611 ; FP64: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 612 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 613 ; FP64: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 614 ; FP64: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 615 ; FP64: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535 616 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 617 ; FP64: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 618 ; FP64: $v0 = COPY [[AND1]](s32) 619 ; FP64: RetRA implicit $v0 620 %0:_(s64) = COPY $d6 621 %1:_(s16) = G_FPTOUI %0(s64) 622 %2:_(s32) = G_ZEXT %1(s16) 623 $v0 = COPY %2(s32) 624 RetRA implicit $v0 625 626... 627--- 628name: f64tou8 629alignment: 4 630tracksRegLiveness: true 631body: | 632 bb.1.entry: 633 liveins: $d6 634 635 ; FP32-LABEL: name: f64tou8 636 ; FP32: liveins: $d6 637 ; FP32: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 638 ; FP32: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 639 ; FP32: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000 640 ; FP32: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]] 641 ; FP32: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64) 642 ; FP32: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 643 ; FP32: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 644 ; FP32: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]] 645 ; FP32: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 646 ; FP32: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 647 ; FP32: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 648 ; FP32: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 649 ; FP32: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 650 ; FP32: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 651 ; FP32: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 652 ; FP32: $v0 = COPY [[AND1]](s32) 653 ; FP32: RetRA implicit $v0 654 ; FP64-LABEL: name: f64tou8 655 ; FP64: liveins: $d6 656 ; FP64: [[COPY:%[0-9]+]]:_(s64) = COPY $d6 657 ; FP64: [[FPTOSI:%[0-9]+]]:_(s32) = G_FPTOSI [[COPY]](s64) 658 ; FP64: [[C:%[0-9]+]]:_(s64) = G_FCONSTANT double 0x41E0000000000000 659 ; FP64: [[FSUB:%[0-9]+]]:_(s64) = G_FSUB [[COPY]], [[C]] 660 ; FP64: [[FPTOSI1:%[0-9]+]]:_(s32) = G_FPTOSI [[FSUB]](s64) 661 ; FP64: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 -2147483648 662 ; FP64: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[FPTOSI1]], [[C1]] 663 ; FP64: [[FCMP:%[0-9]+]]:_(s32) = G_FCMP floatpred(ult), [[COPY]](s64), [[C]] 664 ; FP64: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1 665 ; FP64: [[COPY1:%[0-9]+]]:_(s32) = COPY [[FCMP]](s32) 666 ; FP64: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C2]] 667 ; FP64: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[FPTOSI]], [[XOR]] 668 ; FP64: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255 669 ; FP64: [[COPY2:%[0-9]+]]:_(s32) = COPY [[SELECT]](s32) 670 ; FP64: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY2]], [[C3]] 671 ; FP64: $v0 = COPY [[AND1]](s32) 672 ; FP64: RetRA implicit $v0 673 %0:_(s64) = COPY $d6 674 %1:_(s8) = G_FPTOUI %0(s64) 675 %2:_(s32) = G_ZEXT %1(s8) 676 $v0 = COPY %2(s32) 677 RetRA implicit $v0 678 679... 680