585 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 42# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=amdgpu-postlegalizer-combiner -verify-machineinstrs %s -o - | FileCheck -check-prefix=GCN %s3 4---5name: rsq_f166tracksRegLiveness: true7body: |8 bb.0:9 liveins: $vgpr010 11 ; GCN-LABEL: name: rsq_f1612 ; GCN: liveins: $vgpr013 ; GCN-NEXT: {{ $}}14 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr015 ; 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 $vgpr020 %x:_(s16) = G_TRUNC %0:_(s32)21 %sqrt:_(s16) = contract G_FSQRT %x22 %one:_(s16) = G_FCONSTANT half 1.023 %rsq:_(s16) = contract G_FDIV %one, %sqrt24 %ext:_(s32) = G_ANYEXT %rsq:_(s16)25 $vgpr0 = COPY %ext26 27...28 29---30name: rsq_f16_missing_contract031tracksRegLiveness: true32body: |33 bb.0:34 liveins: $vgpr035 36 ; GCN-LABEL: name: rsq_f16_missing_contract037 ; GCN: liveins: $vgpr038 ; GCN-NEXT: {{ $}}39 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr040 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)41 ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT %x42 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C0043 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt44 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)45 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)46 %0:_(s32) = COPY $vgpr047 %x:_(s16) = G_TRUNC %0:_(s32)48 %sqrt:_(s16) = G_FSQRT %x49 %one:_(s16) = G_FCONSTANT half 1.050 %rsq:_(s16) = contract G_FDIV %one, %sqrt51 %ext:_(s32) = G_ANYEXT %rsq:_(s16)52 $vgpr0 = COPY %ext53 54...55 56---57name: rsq_f16_missing_contract158tracksRegLiveness: true59body: |60 bb.0:61 liveins: $vgpr062 63 ; GCN-LABEL: name: rsq_f16_missing_contract164 ; GCN: liveins: $vgpr065 ; GCN-NEXT: {{ $}}66 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr067 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)68 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x69 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C0070 ; GCN-NEXT: %rsq:_(s16) = G_FDIV %one, %sqrt71 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)72 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)73 %0:_(s32) = COPY $vgpr074 %x:_(s16) = G_TRUNC %0:_(s32)75 %sqrt:_(s16) = contract G_FSQRT %x76 %one:_(s16) = G_FCONSTANT half 1.077 %rsq:_(s16) = G_FDIV %one, %sqrt78 %ext:_(s32) = G_ANYEXT %rsq:_(s16)79 $vgpr0 = COPY %ext80 81...82 83---84name: neg_rsq_f1685tracksRegLiveness: true86body: |87 bb.0:88 liveins: $vgpr089 90 ; GCN-LABEL: name: neg_rsq_f1691 ; GCN: liveins: $vgpr092 ; GCN-NEXT: {{ $}}93 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr094 ; 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 $vgpr0100 %x:_(s16) = G_TRUNC %0:_(s32)101 %sqrt:_(s16) = contract G_FSQRT %x102 %neg_one:_(s16) = G_FCONSTANT half -1.0103 %rsq:_(s16) = contract G_FDIV %neg_one, %sqrt104 %ext:_(s32) = G_ANYEXT %rsq:_(s16)105 $vgpr0 = COPY %ext106 107...108 109---110name: neg_rsq_f16_missing_contract0111tracksRegLiveness: true112body: |113 bb.0:114 liveins: $vgpr0115 116 ; GCN-LABEL: name: neg_rsq_f16_missing_contract0117 ; GCN: liveins: $vgpr0118 ; GCN-NEXT: {{ $}}119 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0120 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)121 ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT %x122 ; GCN-NEXT: %neg_one:_(s16) = G_FCONSTANT half 0xHBC00123 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %neg_one, %sqrt124 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)125 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)126 %0:_(s32) = COPY $vgpr0127 %x:_(s16) = G_TRUNC %0:_(s32)128 %sqrt:_(s16) = G_FSQRT %x129 %neg_one:_(s16) = G_FCONSTANT half -1.0130 %rsq:_(s16) = contract G_FDIV %neg_one, %sqrt131 %ext:_(s32) = G_ANYEXT %rsq:_(s16)132 $vgpr0 = COPY %ext133 134...135 136---137name: neg_rsq_f16_missing_contract1138tracksRegLiveness: true139body: |140 bb.0:141 liveins: $vgpr0142 143 ; GCN-LABEL: name: neg_rsq_f16_missing_contract1144 ; GCN: liveins: $vgpr0145 ; GCN-NEXT: {{ $}}146 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0147 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)148 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x149 ; GCN-NEXT: %neg_one:_(s16) = G_FCONSTANT half 0xHBC00150 ; GCN-NEXT: %rsq:_(s16) = G_FDIV %neg_one, %sqrt151 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)152 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)153 %0:_(s32) = COPY $vgpr0154 %x:_(s16) = G_TRUNC %0:_(s32)155 %sqrt:_(s16) = contract G_FSQRT %x156 %neg_one:_(s16) = G_FCONSTANT half -1.0157 %rsq:_(s16) = G_FDIV %neg_one, %sqrt158 %ext:_(s32) = G_ANYEXT %rsq:_(s16)159 $vgpr0 = COPY %ext160 161...162 163---164name: rsq_f16_multi_use165tracksRegLiveness: true166body: |167 bb.0:168 liveins: $vgpr0169 170 ; GCN-LABEL: name: rsq_f16_multi_use171 ; GCN: liveins: $vgpr0172 ; GCN-NEXT: {{ $}}173 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0174 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)175 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x176 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00177 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt178 ; 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 $vgpr0182 %x:_(s16) = G_TRUNC %0:_(s32)183 %sqrt:_(s16) = contract G_FSQRT %x184 %one:_(s16) = G_FCONSTANT half 1.0185 %rsq:_(s16) = contract G_FDIV %one, %sqrt186 %ext:_(s32) = G_ANYEXT %rsq:_(s16)187 $vgpr0 = COPY %ext188 S_ENDPGM 0, implicit %sqrt189 190...191 192---193name: rsq_f16_multi_use_missing_contract0194tracksRegLiveness: true195body: |196 bb.0:197 liveins: $vgpr0198 199 ; GCN-LABEL: name: rsq_f16_multi_use_missing_contract0200 ; GCN: liveins: $vgpr0201 ; GCN-NEXT: {{ $}}202 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0203 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)204 ; GCN-NEXT: %sqrt:_(s16) = G_FSQRT %x205 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00206 ; GCN-NEXT: %rsq:_(s16) = contract G_FDIV %one, %sqrt207 ; 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 $vgpr0211 %x:_(s16) = G_TRUNC %0:_(s32)212 %sqrt:_(s16) = G_FSQRT %x213 %one:_(s16) = G_FCONSTANT half 1.0214 %rsq:_(s16) = contract G_FDIV %one, %sqrt215 %ext:_(s32) = G_ANYEXT %rsq:_(s16)216 $vgpr0 = COPY %ext217 S_ENDPGM 0, implicit %sqrt218 219...220 221---222name: rsq_f16_multi_use_missing_contract1223tracksRegLiveness: true224body: |225 bb.0:226 liveins: $vgpr0227 228 ; GCN-LABEL: name: rsq_f16_multi_use_missing_contract1229 ; GCN: liveins: $vgpr0230 ; GCN-NEXT: {{ $}}231 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0232 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)233 ; GCN-NEXT: %sqrt:_(s16) = contract G_FSQRT %x234 ; GCN-NEXT: %one:_(s16) = G_FCONSTANT half 0xH3C00235 ; GCN-NEXT: %rsq:_(s16) = G_FDIV %one, %sqrt236 ; 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 $vgpr0240 %x:_(s16) = G_TRUNC %0:_(s32)241 %sqrt:_(s16) = contract G_FSQRT %x242 %one:_(s16) = G_FCONSTANT half 1.0243 %rsq:_(s16) = G_FDIV %one, %sqrt244 %ext:_(s32) = G_ANYEXT %rsq:_(s16)245 $vgpr0 = COPY %ext246 S_ENDPGM 0, implicit %sqrt247 248...249 250---251name: rsq_f32252tracksRegLiveness: true253body: |254 bb.0:255 liveins: $vgpr0256 257 ; GCN-LABEL: name: rsq_f32258 ; GCN: liveins: $vgpr0259 ; GCN-NEXT: {{ $}}260 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0261 ; GCN-NEXT: %sqrt:_(s32) = contract G_FSQRT %x262 ; GCN-NEXT: %one:_(s32) = G_FCONSTANT float 1.000000e+00263 ; GCN-NEXT: %rsq:_(s32) = contract G_FDIV %one, %sqrt264 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32)265 %x:_(s32) = COPY $vgpr0266 %sqrt:_(s32) = contract G_FSQRT %x267 %one:_(s32) = G_FCONSTANT float 1.0268 %rsq:_(s32) = contract G_FDIV %one, %sqrt269 $vgpr0 = COPY %rsq270 271...272 273---274name: neg_rsq_f32275tracksRegLiveness: true276body: |277 bb.0:278 liveins: $vgpr0279 280 ; GCN-LABEL: name: neg_rsq_f32281 ; GCN: liveins: $vgpr0282 ; GCN-NEXT: {{ $}}283 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0284 ; GCN-NEXT: %sqrt:_(s32) = contract G_FSQRT %x285 ; GCN-NEXT: %neg_one:_(s32) = G_FCONSTANT float -1.000000e+00286 ; GCN-NEXT: %rsq:_(s32) = contract G_FDIV %neg_one, %sqrt287 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32)288 %x:_(s32) = COPY $vgpr0289 %sqrt:_(s32) = contract G_FSQRT %x290 %neg_one:_(s32) = G_FCONSTANT float -1.0291 %rsq:_(s32) = contract G_FDIV %neg_one, %sqrt292 $vgpr0 = COPY %rsq293 294...295 296---297name: afn_rsq_f32298tracksRegLiveness: true299body: |300 bb.0:301 liveins: $vgpr0302 303 ; GCN-LABEL: name: afn_rsq_f32304 ; GCN: liveins: $vgpr0305 ; GCN-NEXT: {{ $}}306 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0307 ; GCN-NEXT: %sqrt:_(s32) = contract afn G_FSQRT %x308 ; GCN-NEXT: %one:_(s32) = G_FCONSTANT float 1.000000e+00309 ; GCN-NEXT: %rsq:_(s32) = contract afn G_FDIV %one, %sqrt310 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32)311 %x:_(s32) = COPY $vgpr0312 %sqrt:_(s32) = contract afn G_FSQRT %x313 %one:_(s32) = G_FCONSTANT float 1.0314 %rsq:_(s32) = contract afn G_FDIV %one, %sqrt315 $vgpr0 = COPY %rsq316 317...318 319---320name: afn_rsq_f32_multi_use321tracksRegLiveness: true322body: |323 bb.0:324 liveins: $vgpr0325 326 ; GCN-LABEL: name: afn_rsq_f32_multi_use327 ; GCN: liveins: $vgpr0328 ; GCN-NEXT: {{ $}}329 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0330 ; GCN-NEXT: %sqrt:_(s32) = contract afn G_FSQRT %x331 ; GCN-NEXT: %one:_(s32) = G_FCONSTANT float 1.000000e+00332 ; GCN-NEXT: %rsq:_(s32) = contract afn G_FDIV %one, %sqrt333 ; GCN-NEXT: %ret:_(s32) = G_FSUB %sqrt, %rsq334 ; GCN-NEXT: $vgpr0 = COPY %ret(s32)335 %x:_(s32) = COPY $vgpr0336 %sqrt:_(s32) = contract afn G_FSQRT %x337 %one:_(s32) = G_FCONSTANT float 1.0338 %rsq:_(s32) = contract afn G_FDIV %one, %sqrt339 %ret:_(s32) = G_FSUB %sqrt, %rsq340 $vgpr0 = COPY %ret341 342...343 344---345name: afn_neg_rsq_f32346tracksRegLiveness: true347body: |348 bb.0:349 liveins: $vgpr0350 351 ; GCN-LABEL: name: afn_neg_rsq_f32352 ; GCN: liveins: $vgpr0353 ; GCN-NEXT: {{ $}}354 ; GCN-NEXT: %x:_(s32) = COPY $vgpr0355 ; GCN-NEXT: %sqrt:_(s32) = contract afn G_FSQRT %x356 ; GCN-NEXT: %neg_one:_(s32) = G_FCONSTANT float -1.000000e+00357 ; GCN-NEXT: %rsq:_(s32) = contract afn G_FDIV %neg_one, %sqrt358 ; GCN-NEXT: $vgpr0 = COPY %rsq(s32)359 %x:_(s32) = COPY $vgpr0360 %sqrt:_(s32) = contract afn G_FSQRT %x361 %neg_one:_(s32) = G_FCONSTANT float -1.0362 %rsq:_(s32) = contract afn G_FDIV %neg_one, %sqrt363 $vgpr0 = COPY %rsq364 365...366 367 368---369name: rsq_f64370tracksRegLiveness: true371body: |372 bb.0:373 liveins: $vgpr0374 375 ; GCN-LABEL: name: rsq_f64376 ; GCN: liveins: $vgpr0377 ; GCN-NEXT: {{ $}}378 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0379 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32)380 ; GCN-NEXT: %sqrt:_(s64) = contract G_FSQRT %x381 ; GCN-NEXT: %one:_(s64) = G_FCONSTANT double 1.000000e+00382 ; GCN-NEXT: %rsq:_(s64) = contract G_FDIV %one, %sqrt383 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64)384 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)385 %0:_(s32) = COPY $vgpr0386 %x:_(s64) = G_ANYEXT %0:_(s32)387 %sqrt:_(s64) = contract G_FSQRT %x388 %one:_(s64) = G_FCONSTANT double 1.0389 %rsq:_(s64) = contract G_FDIV %one, %sqrt390 %ext:_(s32) = G_TRUNC %rsq:_(s64)391 $vgpr0 = COPY %ext392 393...394 395---396name: neg_rsq_f64397tracksRegLiveness: true398body: |399 bb.0:400 liveins: $vgpr0401 402 ; GCN-LABEL: name: neg_rsq_f64403 ; GCN: liveins: $vgpr0404 ; GCN-NEXT: {{ $}}405 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0406 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32)407 ; GCN-NEXT: %sqrt:_(s64) = contract G_FSQRT %x408 ; GCN-NEXT: %neg_one:_(s64) = G_FCONSTANT double -1.000000e+00409 ; GCN-NEXT: %rsq:_(s64) = contract G_FDIV %neg_one, %sqrt410 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64)411 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)412 %0:_(s32) = COPY $vgpr0413 %x:_(s64) = G_ANYEXT %0:_(s32)414 %sqrt:_(s64) = contract G_FSQRT %x415 %neg_one:_(s64) = G_FCONSTANT double -1.0416 %rsq:_(s64) = contract G_FDIV %neg_one, %sqrt417 %ext:_(s32) = G_TRUNC %rsq:_(s64)418 $vgpr0 = COPY %ext419 420...421 422---423name: afn_rsq_f64424tracksRegLiveness: true425body: |426 bb.0:427 liveins: $vgpr0428 429 ; GCN-LABEL: name: afn_rsq_f64430 ; GCN: liveins: $vgpr0431 ; GCN-NEXT: {{ $}}432 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0433 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32)434 ; GCN-NEXT: %sqrt:_(s64) = contract afn G_FSQRT %x435 ; GCN-NEXT: %one:_(s64) = G_FCONSTANT double 1.000000e+00436 ; GCN-NEXT: %rsq:_(s64) = contract afn G_FDIV %one, %sqrt437 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64)438 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)439 %0:_(s32) = COPY $vgpr0440 %x:_(s64) = G_ANYEXT %0:_(s32)441 %sqrt:_(s64) = contract afn G_FSQRT %x442 %one:_(s64) = G_FCONSTANT double 1.0443 %rsq:_(s64) = contract afn G_FDIV %one, %sqrt444 %ext:_(s32) = G_TRUNC %rsq:_(s64)445 $vgpr0 = COPY %ext446 447...448 449---450name: afn_neg_rsq_f64451tracksRegLiveness: true452body: |453 bb.0:454 liveins: $vgpr0455 456 ; GCN-LABEL: name: afn_neg_rsq_f64457 ; GCN: liveins: $vgpr0458 ; GCN-NEXT: {{ $}}459 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0460 ; GCN-NEXT: %x:_(s64) = G_ANYEXT [[COPY]](s32)461 ; GCN-NEXT: %sqrt:_(s64) = contract afn G_FSQRT %x462 ; GCN-NEXT: %neg_one:_(s64) = G_FCONSTANT double -1.000000e+00463 ; GCN-NEXT: %rsq:_(s64) = contract afn G_FDIV %neg_one, %sqrt464 ; GCN-NEXT: %ext:_(s32) = G_TRUNC %rsq(s64)465 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)466 %0:_(s32) = COPY $vgpr0467 %x:_(s64) = G_ANYEXT %0:_(s32)468 %sqrt:_(s64) = contract afn G_FSQRT %x469 %neg_one:_(s64) = G_FCONSTANT double -1.0470 %rsq:_(s64) = contract afn G_FDIV %neg_one, %sqrt471 %ext:_(s32) = G_TRUNC %rsq:_(s64)472 $vgpr0 = COPY %ext473 474...475 476 477---478name: rsq_fract_num_f16479tracksRegLiveness: true480body: |481 bb.0:482 liveins: $vgpr0483 484 ; GCN-LABEL: name: rsq_fract_num_f16485 ; GCN: liveins: $vgpr0486 ; GCN-NEXT: {{ $}}487 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0488 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)489 ; GCN-NEXT: %fract:_(s16) = G_FCONSTANT half 0xH3800490 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16)491 ; GCN-NEXT: %rsq:_(s16) = contract G_FMUL [[INT]], %fract492 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)493 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)494 %0:_(s32) = COPY $vgpr0495 %x:_(s16) = G_TRUNC %0:_(s32)496 %sqrt:_(s16) = contract G_FSQRT %x497 %fract:_(s16) = G_FCONSTANT half 0.5498 %rsq:_(s16) = contract G_FDIV %fract, %sqrt499 %ext:_(s32) = G_ANYEXT %rsq:_(s16)500 $vgpr0 = COPY %ext501 502...503 504---505name: neg_rsq_fract_num_f16506tracksRegLiveness: true507body: |508 bb.0:509 liveins: $vgpr0510 511 ; GCN-LABEL: name: neg_rsq_fract_num_f16512 ; GCN: liveins: $vgpr0513 ; GCN-NEXT: {{ $}}514 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0515 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)516 ; GCN-NEXT: %neg_fract:_(s16) = G_FCONSTANT half 0xHB800517 ; 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_fract519 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)520 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)521 %0:_(s32) = COPY $vgpr0522 %x:_(s16) = G_TRUNC %0:_(s32)523 %sqrt:_(s16) = contract G_FSQRT %x524 %neg_fract:_(s16) = G_FCONSTANT half -0.5525 %rsq:_(s16) = contract G_FDIV %neg_fract, %sqrt526 %ext:_(s32) = G_ANYEXT %rsq:_(s16)527 $vgpr0 = COPY %ext528 529 530...531 532---533name: rsq_large_num_f16534tracksRegLiveness: true535body: |536 bb.0:537 liveins: $vgpr0538 539 ; GCN-LABEL: name: rsq_large_num_f16540 ; GCN: liveins: $vgpr0541 ; GCN-NEXT: {{ $}}542 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0543 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)544 ; GCN-NEXT: %ten:_(s16) = G_FCONSTANT half 0xH4900545 ; GCN-NEXT: [[INT:%[0-9]+]]:_(s16) = contract G_INTRINSIC intrinsic(@llvm.amdgcn.rsq), %x(s16)546 ; GCN-NEXT: %rsq:_(s16) = contract G_FMUL [[INT]], %ten547 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)548 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)549 %0:_(s32) = COPY $vgpr0550 %x:_(s16) = G_TRUNC %0:_(s32)551 %sqrt:_(s16) = contract G_FSQRT %x552 %ten:_(s16) = G_FCONSTANT half 10.0553 %rsq:_(s16) = contract G_FDIV %ten, %sqrt554 %ext:_(s32) = G_ANYEXT %rsq:_(s16)555 $vgpr0 = COPY %ext556 557...558 559---560name: neg_rsq_large_num_f16561tracksRegLiveness: true562body: |563 bb.0:564 liveins: $vgpr0565 566 ; GCN-LABEL: name: neg_rsq_large_num_f16567 ; GCN: liveins: $vgpr0568 ; GCN-NEXT: {{ $}}569 ; GCN-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $vgpr0570 ; GCN-NEXT: %x:_(s16) = G_TRUNC [[COPY]](s32)571 ; GCN-NEXT: %neg_ten:_(s16) = G_FCONSTANT half 0xHC900572 ; 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_ten574 ; GCN-NEXT: %ext:_(s32) = G_ANYEXT %rsq(s16)575 ; GCN-NEXT: $vgpr0 = COPY %ext(s32)576 %0:_(s32) = COPY $vgpr0577 %x:_(s16) = G_TRUNC %0:_(s32)578 %sqrt:_(s16) = contract G_FSQRT %x579 %neg_ten:_(s16) = G_FCONSTANT half -10.0580 %rsq:_(s16) = contract G_FDIV %neg_ten, %sqrt581 %ext:_(s32) = G_ANYEXT %rsq:_(s16)582 $vgpr0 = COPY %ext583 584...585