1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 4 2# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s 3 4--- 5name: rsq_f16 6tracksRegLiveness: true 7body: | 8 bb.0: 9 liveins: $vgpr0 10 11 ; GCN-LABEL: name: rsq_f16 12 ; GCN: liveins: $vgpr0 13 ; GCN-NEXT: {{ $}} 14 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 15 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 16 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16) 17 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT [[INT]](s16) 18 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 19 %0:_(s32) = COPY $vgpr0 20 %x:_(s16) = G_TRUNC %0:_(s32) 21 %sqrt:_(s16) = contract G_FSQRT %x 22 %one:_(s16) = G_FCONSTANT half 1.0 23 %rsq:_(s16) = contract G_FDIV %one, %sqrt 24 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 25 $vgpr0 = COPY %ext 26 27... 28 29--- 30name: rsq_f16_missing_contract0 31tracksRegLiveness: true 32body: | 33 bb.0: 34 liveins: $vgpr0 35 36 ; GCN-LABEL: name: rsq_f16_missing_contract0 37 ; GCN: liveins: $vgpr0 38 ; GCN-NEXT: {{ $}} 39 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 40 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 41 ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT %x 42 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00 43 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt 44 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 45 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 46 %0:_(s32) = COPY $vgpr0 47 %x:_(s16) = G_TRUNC %0:_(s32) 48 %sqrt:_(s16) = G_FSQRT %x 49 %one:_(s16) = G_FCONSTANT half 1.0 50 %rsq:_(s16) = contract G_FDIV %one, %sqrt 51 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 52 $vgpr0 = COPY %ext 53 54... 55 56--- 57name: rsq_f16_missing_contract1 58tracksRegLiveness: true 59body: | 60 bb.0: 61 liveins: $vgpr0 62 63 ; GCN-LABEL: name: rsq_f16_missing_contract1 64 ; GCN: liveins: $vgpr0 65 ; GCN-NEXT: {{ $}} 66 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 67 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 68 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x 69 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00 70 ; GCN-NEXT: %rsq:_(s16) = G_FDIV %one, %sqrt 71 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 72 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 73 %0:_(s32) = COPY $vgpr0 74 %x:_(s16) = G_TRUNC %0:_(s32) 75 %sqrt:_(s16) = contract G_FSQRT %x 76 %one:_(s16) = G_FCONSTANT half 1.0 77 %rsq:_(s16) = G_FDIV %one, %sqrt 78 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 79 $vgpr0 = COPY %ext 80 81... 82 83--- 84name: neg_rsq_f16 85tracksRegLiveness: true 86body: | 87 bb.0: 88 liveins: $vgpr0 89 90 ; GCN-LABEL: name: neg_rsq_f16 91 ; GCN: liveins: $vgpr0 92 ; GCN-NEXT: {{ $}} 93 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 94 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 95 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16) 96 ; GCN-NEXT: %rsq:_(s16) = contract G_FNEG [[INT]] 97 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 98 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 99 %0:_(s32) = COPY $vgpr0 100 %x:_(s16) = G_TRUNC %0:_(s32) 101 %sqrt:_(s16) = contract G_FSQRT %x 102 %neg_one:_(s16) = G_FCONSTANT half -1.0 103 %rsq:_(s16) = contract G_FDIV %neg_one, %sqrt 104 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 105 $vgpr0 = COPY %ext 106 107... 108 109--- 110name: neg_rsq_f16_missing_contract0 111tracksRegLiveness: true 112body: | 113 bb.0: 114 liveins: $vgpr0 115 116 ; GCN-LABEL: name: neg_rsq_f16_missing_contract0 117 ; GCN: liveins: $vgpr0 118 ; GCN-NEXT: {{ $}} 119 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 120 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 121 ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT %x 122 ; GCN-NEXT: %neg_one:_(s16) = G_FCONSTANT half 0xHBC00 123 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %neg_one, %sqrt 124 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 125 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 126 %0:_(s32) = COPY $vgpr0 127 %x:_(s16) = G_TRUNC %0:_(s32) 128 %sqrt:_(s16) = G_FSQRT %x 129 %neg_one:_(s16) = G_FCONSTANT half -1.0 130 %rsq:_(s16) = contract G_FDIV %neg_one, %sqrt 131 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 132 $vgpr0 = COPY %ext 133 134... 135 136--- 137name: neg_rsq_f16_missing_contract1 138tracksRegLiveness: true 139body: | 140 bb.0: 141 liveins: $vgpr0 142 143 ; GCN-LABEL: name: neg_rsq_f16_missing_contract1 144 ; GCN: liveins: $vgpr0 145 ; GCN-NEXT: {{ $}} 146 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 147 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 148 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x 149 ; GCN-NEXT: %neg_one:_(s16) = G_FCONSTANT half 0xHBC00 150 ; GCN-NEXT: %rsq:_(s16) = G_FDIV %neg_one, %sqrt 151 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 152 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 153 %0:_(s32) = COPY $vgpr0 154 %x:_(s16) = G_TRUNC %0:_(s32) 155 %sqrt:_(s16) = contract G_FSQRT %x 156 %neg_one:_(s16) = G_FCONSTANT half -1.0 157 %rsq:_(s16) = G_FDIV %neg_one, %sqrt 158 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 159 $vgpr0 = COPY %ext 160 161... 162 163--- 164name: rsq_f16_multi_use 165tracksRegLiveness: true 166body: | 167 bb.0: 168 liveins: $vgpr0 169 170 ; GCN-LABEL: name: rsq_f16_multi_use 171 ; GCN: liveins: $vgpr0 172 ; GCN-NEXT: {{ $}} 173 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 174 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 175 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x 176 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00 177 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt 178 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 179 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 180 ; GCN-NEXT: S_ENDPGM 0, implicit %sqrt(s16) 181 %0:_(s32) = COPY $vgpr0 182 %x:_(s16) = G_TRUNC %0:_(s32) 183 %sqrt:_(s16) = contract G_FSQRT %x 184 %one:_(s16) = G_FCONSTANT half 1.0 185 %rsq:_(s16) = contract G_FDIV %one, %sqrt 186 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 187 $vgpr0 = COPY %ext 188 S_ENDPGM 0, implicit %sqrt 189 190... 191 192--- 193name: rsq_f16_multi_use_missing_contract0 194tracksRegLiveness: true 195body: | 196 bb.0: 197 liveins: $vgpr0 198 199 ; GCN-LABEL: name: rsq_f16_multi_use_missing_contract0 200 ; GCN: liveins: $vgpr0 201 ; GCN-NEXT: {{ $}} 202 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 203 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 204 ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT %x 205 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00 206 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt 207 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 208 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 209 ; GCN-NEXT: S_ENDPGM 0, implicit %sqrt(s16) 210 %0:_(s32) = COPY $vgpr0 211 %x:_(s16) = G_TRUNC %0:_(s32) 212 %sqrt:_(s16) = G_FSQRT %x 213 %one:_(s16) = G_FCONSTANT half 1.0 214 %rsq:_(s16) = contract G_FDIV %one, %sqrt 215 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 216 $vgpr0 = COPY %ext 217 S_ENDPGM 0, implicit %sqrt 218 219... 220 221--- 222name: rsq_f16_multi_use_missing_contract1 223tracksRegLiveness: true 224body: | 225 bb.0: 226 liveins: $vgpr0 227 228 ; GCN-LABEL: name: rsq_f16_multi_use_missing_contract1 229 ; GCN: liveins: $vgpr0 230 ; GCN-NEXT: {{ $}} 231 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 232 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 233 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x 234 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00 235 ; GCN-NEXT: %rsq:_(s16) = G_FDIV %one, %sqrt 236 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 237 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 238 ; GCN-NEXT: S_ENDPGM 0, implicit %sqrt(s16) 239 %0:_(s32) = COPY $vgpr0 240 %x:_(s16) = G_TRUNC %0:_(s32) 241 %sqrt:_(s16) = contract G_FSQRT %x 242 %one:_(s16) = G_FCONSTANT half 1.0 243 %rsq:_(s16) = G_FDIV %one, %sqrt 244 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 245 $vgpr0 = COPY %ext 246 S_ENDPGM 0, implicit %sqrt 247 248... 249 250--- 251name: rsq_f32 252tracksRegLiveness: true 253body: | 254 bb.0: 255 liveins: $vgpr0 256 257 ; GCN-LABEL: name: rsq_f32 258 ; GCN: liveins: $vgpr0 259 ; GCN-NEXT: {{ $}} 260 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0 261 ; GCN-NEXT: %sqrt:_(s32) = contract G_FSQRT %x 262 ; GCN-NEXT: %one:_(s32) = G_FCONSTANT float 1.000000e+00 263 ; GCN-NEXT: %rsq:_(s32) = contract G_FDIV %one, %sqrt 264 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32) 265 %x:_(s32) = COPY $vgpr0 266 %sqrt:_(s32) = contract G_FSQRT %x 267 %one:_(s32) = G_FCONSTANT float 1.0 268 %rsq:_(s32) = contract G_FDIV %one, %sqrt 269 $vgpr0 = COPY %rsq 270 271... 272 273--- 274name: neg_rsq_f32 275tracksRegLiveness: true 276body: | 277 bb.0: 278 liveins: $vgpr0 279 280 ; GCN-LABEL: name: neg_rsq_f32 281 ; GCN: liveins: $vgpr0 282 ; GCN-NEXT: {{ $}} 283 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0 284 ; GCN-NEXT: %sqrt:_(s32) = contract G_FSQRT %x 285 ; GCN-NEXT: %neg_one:_(s32) = G_FCONSTANT float -1.000000e+00 286 ; GCN-NEXT: %rsq:_(s32) = contract G_FDIV %neg_one, %sqrt 287 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32) 288 %x:_(s32) = COPY $vgpr0 289 %sqrt:_(s32) = contract G_FSQRT %x 290 %neg_one:_(s32) = G_FCONSTANT float -1.0 291 %rsq:_(s32) = contract G_FDIV %neg_one, %sqrt 292 $vgpr0 = COPY %rsq 293 294... 295 296--- 297name: afn_rsq_f32 298tracksRegLiveness: true 299body: | 300 bb.0: 301 liveins: $vgpr0 302 303 ; GCN-LABEL: name: afn_rsq_f32 304 ; GCN: liveins: $vgpr0 305 ; GCN-NEXT: {{ $}} 306 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0 307 ; GCN-NEXT: %sqrt:_(s32) = contract afn G_FSQRT %x 308 ; GCN-NEXT: %one:_(s32) = G_FCONSTANT float 1.000000e+00 309 ; GCN-NEXT: %rsq:_(s32) = contract afn G_FDIV %one, %sqrt 310 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32) 311 %x:_(s32) = COPY $vgpr0 312 %sqrt:_(s32) = contract afn G_FSQRT %x 313 %one:_(s32) = G_FCONSTANT float 1.0 314 %rsq:_(s32) = contract afn G_FDIV %one, %sqrt 315 $vgpr0 = COPY %rsq 316 317... 318 319--- 320name: afn_rsq_f32_multi_use 321tracksRegLiveness: true 322body: | 323 bb.0: 324 liveins: $vgpr0 325 326 ; GCN-LABEL: name: afn_rsq_f32_multi_use 327 ; GCN: liveins: $vgpr0 328 ; GCN-NEXT: {{ $}} 329 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0 330 ; GCN-NEXT: %sqrt:_(s32) = contract afn G_FSQRT %x 331 ; GCN-NEXT: %one:_(s32) = G_FCONSTANT float 1.000000e+00 332 ; GCN-NEXT: %rsq:_(s32) = contract afn G_FDIV %one, %sqrt 333 ; GCN-NEXT: %ret:_(s32) = G_FSUB %sqrt, %rsq 334 ; GCN-NEXT: $vgpr0 = COPY %ret(s32) 335 %x:_(s32) = COPY $vgpr0 336 %sqrt:_(s32) = contract afn G_FSQRT %x 337 %one:_(s32) = G_FCONSTANT float 1.0 338 %rsq:_(s32) = contract afn G_FDIV %one, %sqrt 339 %ret:_(s32) = G_FSUB %sqrt, %rsq 340 $vgpr0 = COPY %ret 341 342... 343 344--- 345name: afn_neg_rsq_f32 346tracksRegLiveness: true 347body: | 348 bb.0: 349 liveins: $vgpr0 350 351 ; GCN-LABEL: name: afn_neg_rsq_f32 352 ; GCN: liveins: $vgpr0 353 ; GCN-NEXT: {{ $}} 354 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0 355 ; GCN-NEXT: %sqrt:_(s32) = contract afn G_FSQRT %x 356 ; GCN-NEXT: %neg_one:_(s32) = G_FCONSTANT float -1.000000e+00 357 ; GCN-NEXT: %rsq:_(s32) = contract afn G_FDIV %neg_one, %sqrt 358 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32) 359 %x:_(s32) = COPY $vgpr0 360 %sqrt:_(s32) = contract afn G_FSQRT %x 361 %neg_one:_(s32) = G_FCONSTANT float -1.0 362 %rsq:_(s32) = contract afn G_FDIV %neg_one, %sqrt 363 $vgpr0 = COPY %rsq 364 365... 366 367 368--- 369name: rsq_f64 370tracksRegLiveness: true 371body: | 372 bb.0: 373 liveins: $vgpr0 374 375 ; GCN-LABEL: name: rsq_f64 376 ; GCN: liveins: $vgpr0 377 ; GCN-NEXT: {{ $}} 378 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 379 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32) 380 ; GCN-NEXT: %sqrt:_(s64) = contract G_FSQRT %x 381 ; GCN-NEXT: %one:_(s64) = G_FCONSTANT double 1.000000e+00 382 ; GCN-NEXT: %rsq:_(s64) = contract G_FDIV %one, %sqrt 383 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64) 384 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 385 %0:_(s32) = COPY $vgpr0 386 %x:_(s64) = G_ANYEXT %0:_(s32) 387 %sqrt:_(s64) = contract G_FSQRT %x 388 %one:_(s64) = G_FCONSTANT double 1.0 389 %rsq:_(s64) = contract G_FDIV %one, %sqrt 390 %ext:_(s32) = G_TRUNC %rsq:_(s64) 391 $vgpr0 = COPY %ext 392 393... 394 395--- 396name: neg_rsq_f64 397tracksRegLiveness: true 398body: | 399 bb.0: 400 liveins: $vgpr0 401 402 ; GCN-LABEL: name: neg_rsq_f64 403 ; GCN: liveins: $vgpr0 404 ; GCN-NEXT: {{ $}} 405 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 406 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32) 407 ; GCN-NEXT: %sqrt:_(s64) = contract G_FSQRT %x 408 ; GCN-NEXT: %neg_one:_(s64) = G_FCONSTANT double -1.000000e+00 409 ; GCN-NEXT: %rsq:_(s64) = contract G_FDIV %neg_one, %sqrt 410 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64) 411 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 412 %0:_(s32) = COPY $vgpr0 413 %x:_(s64) = G_ANYEXT %0:_(s32) 414 %sqrt:_(s64) = contract G_FSQRT %x 415 %neg_one:_(s64) = G_FCONSTANT double -1.0 416 %rsq:_(s64) = contract G_FDIV %neg_one, %sqrt 417 %ext:_(s32) = G_TRUNC %rsq:_(s64) 418 $vgpr0 = COPY %ext 419 420... 421 422--- 423name: afn_rsq_f64 424tracksRegLiveness: true 425body: | 426 bb.0: 427 liveins: $vgpr0 428 429 ; GCN-LABEL: name: afn_rsq_f64 430 ; GCN: liveins: $vgpr0 431 ; GCN-NEXT: {{ $}} 432 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 433 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32) 434 ; GCN-NEXT: %sqrt:_(s64) = contract afn G_FSQRT %x 435 ; GCN-NEXT: %one:_(s64) = G_FCONSTANT double 1.000000e+00 436 ; GCN-NEXT: %rsq:_(s64) = contract afn G_FDIV %one, %sqrt 437 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64) 438 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 439 %0:_(s32) = COPY $vgpr0 440 %x:_(s64) = G_ANYEXT %0:_(s32) 441 %sqrt:_(s64) = contract afn G_FSQRT %x 442 %one:_(s64) = G_FCONSTANT double 1.0 443 %rsq:_(s64) = contract afn G_FDIV %one, %sqrt 444 %ext:_(s32) = G_TRUNC %rsq:_(s64) 445 $vgpr0 = COPY %ext 446 447... 448 449--- 450name: afn_neg_rsq_f64 451tracksRegLiveness: true 452body: | 453 bb.0: 454 liveins: $vgpr0 455 456 ; GCN-LABEL: name: afn_neg_rsq_f64 457 ; GCN: liveins: $vgpr0 458 ; GCN-NEXT: {{ $}} 459 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 460 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32) 461 ; GCN-NEXT: %sqrt:_(s64) = contract afn G_FSQRT %x 462 ; GCN-NEXT: %neg_one:_(s64) = G_FCONSTANT double -1.000000e+00 463 ; GCN-NEXT: %rsq:_(s64) = contract afn G_FDIV %neg_one, %sqrt 464 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64) 465 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 466 %0:_(s32) = COPY $vgpr0 467 %x:_(s64) = G_ANYEXT %0:_(s32) 468 %sqrt:_(s64) = contract afn G_FSQRT %x 469 %neg_one:_(s64) = G_FCONSTANT double -1.0 470 %rsq:_(s64) = contract afn G_FDIV %neg_one, %sqrt 471 %ext:_(s32) = G_TRUNC %rsq:_(s64) 472 $vgpr0 = COPY %ext 473 474... 475 476 477--- 478name: rsq_fract_num_f16 479tracksRegLiveness: true 480body: | 481 bb.0: 482 liveins: $vgpr0 483 484 ; GCN-LABEL: name: rsq_fract_num_f16 485 ; GCN: liveins: $vgpr0 486 ; GCN-NEXT: {{ $}} 487 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 488 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 489 ; GCN-NEXT: %fract:_(s16) = G_FCONSTANT half 0xH3800 490 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16) 491 ; GCN-NEXT: %rsq:_(s16) = contract G_FMUL [[INT]], %fract 492 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 493 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 494 %0:_(s32) = COPY $vgpr0 495 %x:_(s16) = G_TRUNC %0:_(s32) 496 %sqrt:_(s16) = contract G_FSQRT %x 497 %fract:_(s16) = G_FCONSTANT half 0.5 498 %rsq:_(s16) = contract G_FDIV %fract, %sqrt 499 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 500 $vgpr0 = COPY %ext 501 502... 503 504--- 505name: neg_rsq_fract_num_f16 506tracksRegLiveness: true 507body: | 508 bb.0: 509 liveins: $vgpr0 510 511 ; GCN-LABEL: name: neg_rsq_fract_num_f16 512 ; GCN: liveins: $vgpr0 513 ; GCN-NEXT: {{ $}} 514 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 515 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 516 ; GCN-NEXT: %neg_fract:_(s16) = G_FCONSTANT half 0xHB800 517 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16) 518 ; GCN-NEXT: %rsq:_(s16) = contract G_FMUL [[INT]], %neg_fract 519 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 520 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 521 %0:_(s32) = COPY $vgpr0 522 %x:_(s16) = G_TRUNC %0:_(s32) 523 %sqrt:_(s16) = contract G_FSQRT %x 524 %neg_fract:_(s16) = G_FCONSTANT half -0.5 525 %rsq:_(s16) = contract G_FDIV %neg_fract, %sqrt 526 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 527 $vgpr0 = COPY %ext 528 529 530... 531 532--- 533name: rsq_large_num_f16 534tracksRegLiveness: true 535body: | 536 bb.0: 537 liveins: $vgpr0 538 539 ; GCN-LABEL: name: rsq_large_num_f16 540 ; GCN: liveins: $vgpr0 541 ; GCN-NEXT: {{ $}} 542 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 543 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 544 ; GCN-NEXT: %ten:_(s16) = G_FCONSTANT half 0xH4900 545 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16) 546 ; GCN-NEXT: %rsq:_(s16) = contract G_FMUL [[INT]], %ten 547 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 548 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 549 %0:_(s32) = COPY $vgpr0 550 %x:_(s16) = G_TRUNC %0:_(s32) 551 %sqrt:_(s16) = contract G_FSQRT %x 552 %ten:_(s16) = G_FCONSTANT half 10.0 553 %rsq:_(s16) = contract G_FDIV %ten, %sqrt 554 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 555 $vgpr0 = COPY %ext 556 557... 558 559--- 560name: neg_rsq_large_num_f16 561tracksRegLiveness: true 562body: | 563 bb.0: 564 liveins: $vgpr0 565 566 ; GCN-LABEL: name: neg_rsq_large_num_f16 567 ; GCN: liveins: $vgpr0 568 ; GCN-NEXT: {{ $}} 569 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0 570 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32) 571 ; GCN-NEXT: %neg_ten:_(s16) = G_FCONSTANT half 0xHC900 572 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16) 573 ; GCN-NEXT: %rsq:_(s16) = contract G_FMUL [[INT]], %neg_ten 574 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16) 575 ; GCN-NEXT: $vgpr0 = COPY %ext(s32) 576 %0:_(s32) = COPY $vgpr0 577 %x:_(s16) = G_TRUNC %0:_(s32) 578 %sqrt:_(s16) = contract G_FSQRT %x 579 %neg_ten:_(s16) = G_FCONSTANT half -10.0 580 %rsq:_(s16) = contract G_FDIV %neg_ten, %sqrt 581 %ext:_(s32) = G_ANYEXT %rsq:_(s16) 582 $vgpr0 = COPY %ext 583 584... 585