brintos

brintos / llvm-project-archived public Read only

0
0
Text · 14.3 KiB · aac6dcb Raw
513 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass si-mode-register  %s -o - | FileCheck %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -passes=si-mode-register  %s -o - | FileCheck %s3 4---5# check that the mode is changed to rtz from default rtn for interp f166# CHECK-LABEL: name: interp_f16_default7# CHECK-LABEL: bb.0:8# CHECK: S_SETREG_IMM32_B32 3, 21779# CHECK-NEXT: V_INTERP_P1LL_F1610# CHECK: S_SETREG_IMM32_B32 0, 217711# CHECK-NEXT: V_ADD_F16_e3212# CHECK-NOT: S_SETREG_IMM32_B3213 14name: interp_f16_default15 16body: |17  bb.0:18    liveins: $sgpr0, $sgpr1, $sgpr219    $m0 = S_MOV_B32 killed $sgpr220    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec21    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec22    $vgpr2 = V_MOV_B32_e32 killed $sgpr1, implicit $exec23    $vgpr0 = V_INTERP_P1LL_F16 0, killed $vgpr0, 2, 1, -1, 0, 0, implicit $mode, implicit $m0, implicit $exec24    $vgpr1 = V_INTERP_P2_F16 0, $vgpr2, 2, 1, 0, killed $vgpr1, 0, 0, implicit $mode, implicit $m0, implicit $exec25    $vgpr0 = V_INTERP_P2_F16 0, killed $vgpr2, 2, 1, 0, killed $vgpr0, -1, 0, implicit $mode, implicit $m0, implicit $exec26    $vgpr0 = V_ADD_F16_e32 killed $vgpr1, killed $vgpr0, implicit $mode, implicit $exec27    S_ENDPGM 028...29---30# check that the mode is not changed for interp f16 when the mode is already RTZ31# CHECK-LABEL: name: interp_f16_explicit_rtz32# CHECK-LABEL: bb.0:33# CHECK: S_SETREG_IMM32_B32 3, 217734# CHECK-NEXT: V_MOV_B32_e3235# CHECK: S_SETREG_IMM32_B32 0, 217736# CHECK-NEXT: V_ADD_F16_e3237# CHECK-NOT: S_SETREG_IMM32_B3238 39name: interp_f16_explicit_rtz40 41body: |42  bb.0:43    liveins: $sgpr0, $sgpr1, $sgpr244    $m0 = S_MOV_B32 killed $sgpr245    S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode46    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec47    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec48    $vgpr2 = V_MOV_B32_e32 killed $sgpr1, implicit $exec49    $vgpr0 = V_INTERP_P1LL_F16 0, killed $vgpr0, 2, 1, -1, 0, 0, implicit $mode, implicit $m0, implicit $exec50    $vgpr1 = V_INTERP_P2_F16 0, $vgpr2, 2, 1, 0, killed $vgpr1, 0, 0, implicit $mode, implicit $m0, implicit $exec51    $vgpr0 = V_INTERP_P2_F16 0, killed $vgpr2, 2, 1, 0, killed $vgpr0, -1, 0, implicit $mode, implicit $m0, implicit $exec52    $vgpr0 = V_ADD_F16_e32 killed $vgpr1, killed $vgpr0, implicit $mode, implicit $exec53    S_ENDPGM 054...55---56# check that explicit RTN mode change is registered57# CHECK-LABEL: name: explicit_rtn58# CHECK-LABEL: bb.0:59# CHECK: S_SETREG_IMM32_B32 3, 217760# CHECK-NEXT: V_INTERP_P1LL_F1661# CHECK: S_SETREG_IMM32_B32 0, 217762# CHECK-NEXT: V_ADD_F16_e3263# CHECK-NOT: S_SETREG_IMM32_B3264 65name: explicit_rtn66 67body: |68  bb.0:69    liveins: $sgpr0, $sgpr1, $sgpr270    $m0 = S_MOV_B32 killed $sgpr271    $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec72    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec73    $vgpr2 = V_MOV_B32_e32 killed $sgpr1, implicit $exec74    $vgpr0 = V_INTERP_P1LL_F16 0, killed $vgpr0, 2, 1, -1, 0, 0, implicit $mode, implicit $m0, implicit $exec75    $vgpr1 = V_INTERP_P2_F16 0, $vgpr2, 2, 1, 0, killed $vgpr1, 0, 0, implicit $mode, implicit $m0, implicit $exec76    $vgpr0 = V_INTERP_P2_F16 0, killed $vgpr2, 2, 1, 0, killed $vgpr0, -1, 0, implicit $mode, implicit $m0, implicit $exec77    S_SETREG_IMM32_B32 0, 2177, implicit-def $mode, implicit $mode78    $vgpr0 = V_ADD_F16_e32 killed $vgpr1, killed $vgpr0, implicit $mode, implicit $exec79    S_ENDPGM 080...81---82# check that the mode is unchanged from RTN for F64 instruction83# CHECK-LABEL: name: rtn_default84# CHECK-LABEL: bb.0:85# CHECK-NOT: S_SETREG_IMM32_B3286# CHECK: V_FRACT_F6487 88name: rtn_default89 90body: |91  bb.0:92    liveins: $vgpr1_vgpr293    $vgpr1_vgpr2 = V_FRACT_F64_e32 killed $vgpr1_vgpr2, implicit $mode, implicit $exec94    S_ENDPGM 095...96---97# check that the mode is changed from RTZ to RTN for F64 instruction98# CHECK-LABEL: name: rtn_from_rtz99# CHECK-LABEL: bb.0:100# CHECK: S_SETREG_IMM32_B32 3, 2177101# CHECK-NEXT: S_SETREG_IMM32_B32 0, 2177102# CHECK-NEXT: V_FRACT_F64103# CHECK-NOT: S_SETREG_IMM32_B32104 105name: rtn_from_rtz106 107body: |108  bb.0:109    liveins: $vgpr1_vgpr2110    S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode111    $vgpr1_vgpr2 = V_FRACT_F64_e32 killed $vgpr1_vgpr2, implicit $mode, implicit $exec112    S_ENDPGM 0113...114---115# CHECK-LABEL: name: rtz_from_rtn116# CHECK-LABEL: bb.1:117# CHECK: S_SETREG_IMM32_B32 3, 2177118# CHECK-NOT: S_SETREG_IMM32_B32119 120name: rtz_from_rtn121 122body: |123  bb.0:124    successors: %bb.1125    liveins: $vgpr1_vgpr2126    $vgpr1_vgpr2 = V_FRACT_F64_e32 killed $vgpr1_vgpr2, implicit $mode, implicit $exec127    S_BRANCH %bb.1128 129  bb.1:130    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec131    S_ENDPGM 0132...133---134# check that the mode is changed from RTZ to RTN for F64 instruction135# and back again for remaining interp instruction136# CHECK-LABEL: name: interp_f16_plus_sqrt_f64137# CHECK-LABEL: bb.0:138# CHECK: S_SETREG_IMM32_B32 3, 2177139# CHECK: V_INTERP_P1LL_F16140# CHECK: V_INTERP_P1LL_F16141# CHECK: V_INTERP_P2_F16142# CHECK: S_SETREG_IMM32_B32 0, 2177143# CHECK: V_FRACT_F64144# CHECK: S_SETREG_IMM32_B32 3, 2177145# CHECK: V_INTERP_P2_F16146 147name: interp_f16_plus_sqrt_f64148 149body: |150  bb.0:151    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4152    $m0 = S_MOV_B32 killed $sgpr2153    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit $exec154    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec155    $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec, implicit $exec156    $vgpr0 = V_INTERP_P1LL_F16 0, killed $vgpr0, 2, 1, -1, 0, 0, implicit $mode, implicit $m0, implicit $exec157    $vgpr1 = V_INTERP_P2_F16 0, $vgpr2, 2, 1, 0, killed $vgpr1, 0, 0, implicit $mode, implicit $m0, implicit $exec158    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec159    $vgpr0 = V_INTERP_P2_F16 0, killed $vgpr2, 2, 1, 0, killed $vgpr0, -1, 0, implicit $mode, implicit $m0, implicit $exec160    $vgpr0 = V_ADD_F16_e32 killed $sgpr0, killed $vgpr0, implicit $mode, implicit $exec161    S_ENDPGM 0162...163---164# check that an explicit change to the single precision mode has no effect165# CHECK-LABEL: name: single_precision_mode_change166# CHECK-LABEL: bb.0:167# CHECK: S_SETREG_IMM32_B32 3, 2177168# CHECK: V_INTERP_P1LL_F16169# CHECK: V_INTERP_P1LL_F16170# CHECK: V_INTERP_P2_F16171# CHECK: S_SETREG_IMM32_B32 0, 2177172# CHECK: V_FRACT_F64173# CHECK: S_SETREG_IMM32_B32 3, 2177174# CHECK: V_INTERP_P2_F16175 176name: single_precision_mode_change177 178body: |179  bb.0:180    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4181    $m0 = S_MOV_B32 killed $sgpr2182    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit $exec183    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec184    S_SETREG_IMM32_B32 2, 2049, implicit-def $mode, implicit $mode185    $vgpr2 = V_MOV_B32_e32 $sgpr1, implicit $exec186    $vgpr0 = V_INTERP_P1LL_F16 0, killed $vgpr0, 2, 1, -1, 0, 0, implicit $mode, implicit $m0, implicit $exec187    $vgpr1 = V_INTERP_P2_F16 0, $vgpr2, 2, 1, 0, killed $vgpr1, 0, 0, implicit $mode, implicit $m0, implicit $exec188    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec189    $vgpr0 = V_INTERP_P2_F16 0, killed $vgpr2, 2, 1, 0, killed $vgpr0, -1, 0, implicit $mode, implicit $m0, implicit $exec190    $vgpr0 = V_ADD_F16_e32 killed $sgpr0, killed $vgpr0, implicit $mode, implicit $exec191    S_ENDPGM 0192...193---194# check that mode is propagated back to start of loop - first instruction is RTN but needs195# setreg as RTZ is set in loop196# CHECK-LABEL: name: loop197# CHECK-LABEL: bb.1:198# CHECK: S_SETREG_IMM32_B32 0, 2177199# CHECK: V_FRACT_F64200# CHECK-LABEL: bb.2:201# CHECK: S_SETREG_IMM32_B32 3, 2177202# CHECK: V_INTERP_P1LL_F16203# CHECK-NOT: S_SETREG_IMM32_B32204 205name: loop206 207body: |208  bb.0:209    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4210    successors: %bb.1211    $m0 = S_MOV_B32 killed $sgpr2212    S_BRANCH %bb.1213 214  bb.1:215    successors: %bb.2216    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec217    S_BRANCH %bb.2218 219  bb.2:220    successors: %bb.1, %bb.3221    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec222    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec223    S_CBRANCH_VCCZ %bb.1, implicit $vcc224    S_BRANCH %bb.3225 226  bb.3:227    S_ENDPGM 0228...229---230# two back-edges to same node with different modes231# CHECK-LABEL: name: double_loop232# CHECK-NOT: S_SETREG_IMM32_B32233# CHECK-LABEL: bb.2:234# CHECK: S_SETREG_IMM32_B32 0, 2177235# CHECK: V_FRACT_F64_e32236# CHECK-LABEL: bb.4:237# CHECK: S_SETREG_IMM32_B32 3, 2177238 239name: double_loop240 241body: |242  bb.0:243    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4244    successors: %bb.1245    $m0 = S_MOV_B32 killed $sgpr2246    S_BRANCH %bb.1247 248  bb.1:249    successors: %bb.2250    S_NOP 1251    S_BRANCH %bb.2252 253  bb.2:254    successors: %bb.1, %bb.3255    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec256    S_CBRANCH_VCCZ %bb.1, implicit $vcc257    S_BRANCH %bb.3258 259  bb.3:260    successors: %bb.4261    S_NOP 1262    S_BRANCH %bb.4263 264  bb.4:265    successors: %bb.5266    S_NOP 1267    S_BRANCH %bb.5268 269  bb.5:270    successors: %bb.1, %bb.6271    S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode272    S_CBRANCH_VCCZ %bb.1, implicit $vcc273    S_BRANCH %bb.6274 275  bb.6:276    S_ENDPGM 0277...278---279# check that mode is propagated back to start of loop and through a block that280# neither sets or uses the mode.281# CHECK-LABEL: name: loop_indirect282# CHECK-NOT: S_SETREG_IMM32_B32283# CHECK-LABEL: bb.3:284# CHECK: S_SETREG_IMM32_B32 3, 2177285# CHECK: V_INTERP_P1LL_F16286# CHECK-NOT: S_SETREG_IMM32_B32287 288name: loop_indirect289 290body: |291  bb.0:292    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4293    successors: %bb.1294    $m0 = S_MOV_B32 killed $sgpr2295    S_BRANCH %bb.1296 297  bb.1:298    successors: %bb.2299    S_NOP 1300    S_BRANCH %bb.2301 302  bb.2:303    successors: %bb.3304    S_NOP 1305    S_BRANCH %bb.3306 307  bb.3:308    successors: %bb.1, %bb.4309    $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit $exec310    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec311    S_CBRANCH_VCCZ %bb.1, implicit $vcc312    S_BRANCH %bb.4313 314  bb.4:315    S_ENDPGM 0316...317---318# check that multiple mode values are propagated to a block that uses the mode319# CHECK-LABEL: name: multiple_mode_direct320# CHECK-LABEL: bb.3:321# CHECK: S_SETREG_IMM32_B32 0, 2177322# CHECK: V_FRACT_F64_e32323# CHECK-NOT: S_SETREG_IMM32_B32324 325name: multiple_mode_direct326 327body: |328  bb.0:329    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4330    successors: %bb.1331    $m0 = S_MOV_B32 killed $sgpr2332    S_BRANCH %bb.1333 334  bb.1:335    successors: %bb.2, %bb.3336    S_CBRANCH_VCCZ %bb.2, implicit $vcc337    S_BRANCH %bb.3338 339  bb.2:340    successors: %bb.3341    S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode342    S_BRANCH %bb.3343 344  bb.3:345    successors: %bb.4346    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec347    S_BRANCH %bb.4348 349  bb.4:350    S_ENDPGM 0351...352---353# check that multiple mode values are propagated through a block that neither354# sets or uses the mode.355# CHECK-LABEL: name: multiple_mode_indirect356# CHECK-LABEL: bb.4:357# CHECK: S_SETREG_IMM32_B32 0, 2177358# CHECK: V_FRACT_F64_e32359# CHECK-NOT: S_SETREG_IMM32_B32360 361name: multiple_mode_indirect362 363body: |364  bb.0:365    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4366    successors: %bb.1367    $m0 = S_MOV_B32 killed $sgpr2368    S_BRANCH %bb.1369 370  bb.1:371    successors: %bb.2, %bb.3372    S_CBRANCH_VCCZ %bb.2, implicit $vcc373    S_BRANCH %bb.3374 375  bb.2:376    successors: %bb.3377    S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode378    S_BRANCH %bb.3379 380  bb.3:381    successors: %bb.4382    S_NOP 1383    S_BRANCH %bb.4384 385  bb.4:386    successors: %bb.5387    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec388    S_BRANCH %bb.5389 390  bb.5:391    S_ENDPGM 0392...393---394# CHECK-LABEL: name: pass_through_blocks395# CHECK-LABEL: bb.0:396# CHECK: V_FRACT_F64_e32397# CHECK-NEXT: S_SETREG_IMM32_B32 3, 2177398# CHECK-NOT: S_SETREG_IMM32_B32399 400name: pass_through_blocks401 402body: |403  bb.0:404    successors: %bb.1405    liveins: $vgpr1_vgpr2406    $vgpr1_vgpr2 = V_FRACT_F64_e32 killed $vgpr1_vgpr2, implicit $mode, implicit $exec407    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec408    S_BRANCH %bb.1409 410  bb.1:411    successors: %bb.2412    S_BRANCH %bb.2413 414  bb.2:415    successors: %bb.3416    S_BRANCH %bb.3417 418  bb.3:419    successors: %bb.4420    S_BRANCH %bb.4421 422  bb.4:423    $vgpr1 = V_INTERP_P1LL_F16 0, $vgpr0, 2, 1, 0, 0, 0, implicit $mode, implicit $m0, implicit $exec424    S_ENDPGM 0425...426---427# check that multiple mode values are propagated428# CHECK-LABEL: name: if_then_else429# CHECK-LABEL: bb.3:430# CHECK: S_SETREG_IMM32_B32 0, 2177431# CHECK: V_FRACT_F64_e32432# CHECK-NOT: S_SETREG_IMM32_B32433 434name: if_then_else435 436body: |437  bb.0:438    liveins: $sgpr0, $sgpr1, $sgpr2, $vgpr3, $vgpr4439    successors: %bb.1440    $m0 = S_MOV_B32 killed $sgpr2441    S_BRANCH %bb.1442 443  bb.1:444    successors: %bb.2, %bb.3445    S_CBRANCH_VCCZ %bb.3, implicit $vcc446    S_BRANCH %bb.2447 448  bb.2:449    successors: %bb.3450    S_SETREG_IMM32_B32 3, 2177, implicit-def $mode, implicit $mode451    S_BRANCH %bb.3452 453  bb.3:454    successors: %bb.4455    $vgpr3_vgpr4 = V_FRACT_F64_e32 killed $vgpr3_vgpr4, implicit $mode, implicit $exec456    S_BRANCH %bb.4457 458  bb.4:459    S_ENDPGM 0460...461---462# checks for bug where if a block is its own predecessor it could cause mode tracking463# to produce the wrong mode, resulting in an unnecessary setreg464# CHECK-LABEL: name: single_block_loop465# CHECK-LABEL: bb.0:466# CHECK-NOT: S_SETREG467 468name: single_block_loop469 470body: |471  bb.0:472    successors: %bb.1473    S_BRANCH %bb.1474 475  bb.1:476    successors: %bb.1, %bb.2477    S_CBRANCH_VCCZ %bb.1, implicit $vcc478    S_BRANCH %bb.2479 480  bb.2:481    successors: %bb.3482    liveins: $vgpr1_vgpr2483    $vgpr1_vgpr2 = V_FRACT_F64_e32 killed $vgpr1_vgpr2, implicit $mode, implicit $exec484    S_BRANCH %bb.3485 486  bb.3:487    S_ENDPGM 0488...489---490# checks for a bug where if the first block is its own predecessor the initial mode was491# not correctly propagated, resulting in an unnecessary setreg492# CHECK-LABEL: name: first_block_loop493# CHECK-LABEL: bb.0:494# CHECK-NOT: S_SETREG495 496name: first_block_loop497 498body: |499  bb.0:500    successors: %bb.0, %bb.1501    S_CBRANCH_VCCZ %bb.0, implicit $vcc502    S_BRANCH %bb.1503 504  bb.1:505    successors: %bb.2506    liveins: $vgpr1_vgpr2507    $vgpr1_vgpr2 = V_FRACT_F64_e32 killed $vgpr1_vgpr2, implicit $mode, implicit $exec508    S_BRANCH %bb.2509 510  bb.2:511    S_ENDPGM 0512...513