brintos

brintos / llvm-project-archived public Read only

0
0
Text · 11.9 KiB · 52c0695 Raw
272 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py UTC_ARGS: --version 52# RUN: llc %s -mtriple=amdgcn -mcpu=gfx900 -run-pass=si-peephole-sdwa -o - | FileCheck %s3 4---5name: cndmask_b32 # can be directly converted to SDWA without a copy to VCC6tracksRegLiveness: true7body: |8  bb.0:9    liveins: $vgpr0, $vgpr1, $vcc10 11    ; CHECK-LABEL: name: cndmask_b3212    ; CHECK: liveins: $vgpr0, $vgpr1, $vcc13    ; CHECK-NEXT: {{  $}}14    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr115    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr016    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY]], implicit $exec17    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_1:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[COPY1]], implicit $exec18    ; CHECK-NEXT: [[V_CNDMASK_B32_sdwa:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_sdwa 0, [[COPY]], 0, [[COPY1]], 0, 6, 0, 5, 5, implicit $vcc, implicit $exec19    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_sdwa]]20    ; CHECK-NEXT: SI_RETURN implicit $vgpr021    %0:vgpr_32 = COPY $vgpr122    %1:vgpr_32 = COPY $vgpr023    %2:vgpr_32 = V_LSHRREV_B32_e64 16, %0, implicit $exec24    %3:vgpr_32 = V_LSHRREV_B32_e64 16, %1, implicit $exec25    %4:vgpr_32 = V_CNDMASK_B32_e32 killed %2, killed %3, implicit $exec, implicit $vcc26    $vgpr0 = COPY %427    SI_RETURN implicit $vgpr028 29...30 31# For SDWA conversion of V_CNDMASK, the carry-in operand must be32# available in VCC.  This is achieved by introducing a COPY33# instruction. Comparison instructions could be changed to VOP2 form34# instead, but we prefer to use a COPY.35 36---37name: carry-compare38tracksRegLiveness: true39body:             |40  bb.0:41    liveins: $vgpr042 43    ; CHECK-LABEL: name: carry-compare44    ; CHECK: liveins: $vgpr045    ; CHECK-NEXT: {{  $}}46    ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF47    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF48    ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[DEF]], 1, implicit $exec49    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[DEF1]], implicit $exec50    ; CHECK-NEXT: $vcc = COPY killed [[V_CMP_EQ_U32_e64_]]51    ; CHECK-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec52    ; CHECK-NEXT: [[V_CNDMASK_B32_sdwa:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_sdwa 0, [[V_MOV_B32_e32_]], 0, [[DEF1]], 0, 6, 0, 6, 5, implicit $vcc, implicit $exec53    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_sdwa]]54    ; CHECK-NEXT: SI_RETURN implicit $vgpr055    %0:vgpr_32 = IMPLICIT_DEF56    %1:vgpr_32 = IMPLICIT_DEF57    %2:sreg_64_xexec = V_CMP_EQ_U32_e64 %0, 1, implicit $exec58    %3:vgpr_32 = V_LSHRREV_B32_e64 16, %1, implicit $exec59    %4:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, %3, killed %2, implicit $exec60    $vgpr0 = COPY %461    SI_RETURN implicit $vgpr062...63 64---65name: carry-compare-class66tracksRegLiveness: true67body:             |68  bb.0:69    liveins: $vgpr070 71    ; CHECK-LABEL: name: carry-compare-class72    ; CHECK: liveins: $vgpr073    ; CHECK-NEXT: {{  $}}74    ; CHECK-NEXT: [[DEF:%[0-9]+]]:sreg_32_xm0_xexec = IMPLICIT_DEF75    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF76    ; CHECK-NEXT: [[V_CMP_CLASS_F32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_CLASS_F32_e64 2, [[DEF]], 1, implicit $exec77    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[DEF1]], implicit $exec78    ; CHECK-NEXT: $vcc = COPY killed [[V_CMP_CLASS_F32_e64_]]79    ; CHECK-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec80    ; CHECK-NEXT: [[V_CNDMASK_B32_sdwa:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_sdwa 0, [[V_MOV_B32_e32_]], 0, [[DEF1]], 0, 6, 0, 6, 5, implicit $vcc, implicit $exec81    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_sdwa]]82    ; CHECK-NEXT: SI_RETURN implicit $vgpr083    %0:sreg_32_xm0_xexec = IMPLICIT_DEF84    %1:vgpr_32 = IMPLICIT_DEF85    %2:sreg_64_xexec = V_CMP_CLASS_F32_e64 2,%0, 1, implicit $exec86    %3:vgpr_32 = V_LSHRREV_B32_e64 16, %1, implicit $exec87    %4:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, %3, killed %2, implicit $exec88    $vgpr0 = COPY %489    SI_RETURN implicit $vgpr090...91 92...93---94name: carry-non-compare95tracksRegLiveness: true96body:             |97  bb.0:98    liveins: $vgpr099 100    ; CHECK-LABEL: name: carry-non-compare101    ; CHECK: liveins: $vgpr0102    ; CHECK-NEXT: {{  $}}103    ; CHECK-NEXT: [[DEF:%[0-9]+]]:sreg_64_xexec = IMPLICIT_DEF104    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF105    ; CHECK-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = V_PK_MAX_F16 8, [[DEF1]], 8, [[DEF1]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec106    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[V_PK_MAX_F16_]], implicit $exec107    ; CHECK-NEXT: $vcc = COPY killed [[DEF]]108    ; CHECK-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec109    ; CHECK-NEXT: [[V_CNDMASK_B32_sdwa:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_sdwa 0, [[V_MOV_B32_e32_]], 0, [[V_PK_MAX_F16_]], 0, 6, 0, 6, 5, implicit $vcc, implicit $exec110    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_sdwa]]111    ; CHECK-NEXT: SI_RETURN implicit $vgpr0112    %0:sreg_64_xexec = IMPLICIT_DEF113    %1:vgpr_32 = IMPLICIT_DEF114    %2:vgpr_32 = V_PK_MAX_F16 8, %1, 8, %1, 0, 0, 0, 0, 0, implicit $mode, implicit $exec115    %3:vgpr_32 = V_LSHRREV_B32_e64 16, %2, implicit $exec116    %4:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, %3, killed %0, implicit $exec117    $vgpr0 = COPY %4118    SI_RETURN implicit $vgpr0119...120 121...122---123name: carry-multiuse124tracksRegLiveness: true125body:             |126  bb.0:127    liveins: $vgpr0, $vgpr1128 129    ; CHECK-LABEL: name: carry-multiuse130    ; CHECK: liveins: $vgpr0, $vgpr1131    ; CHECK-NEXT: {{  $}}132    ; CHECK-NEXT: [[DEF:%[0-9]+]]:sreg_64_xexec = IMPLICIT_DEF133    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF134    ; CHECK-NEXT: [[V_PK_MAX_F16_:%[0-9]+]]:vgpr_32 = V_PK_MAX_F16 8, undef [[DEF1]], 8, undef [[DEF1]], 0, 0, 0, 0, 0, implicit $mode, implicit $exec135    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[V_PK_MAX_F16_]], implicit $exec136    ; CHECK-NEXT: $vcc = COPY [[DEF]]137    ; CHECK-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 0, implicit $exec138    ; CHECK-NEXT: [[V_CNDMASK_B32_sdwa:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_sdwa 0, [[V_MOV_B32_e32_]], 0, [[V_PK_MAX_F16_]], 0, 6, 0, 6, 5, implicit $vcc, implicit $exec139    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_sdwa]]140    ; CHECK-NEXT: $vgpr1 = COPY [[DEF]]141    ; CHECK-NEXT: SI_RETURN implicit $vgpr0142    %0:sreg_64_xexec = IMPLICIT_DEF143    %1:vgpr_32 = IMPLICIT_DEF144    %2:vgpr_32 = V_PK_MAX_F16 8, undef %1, 8, undef %1, 0, 0, 0, 0, 0, implicit $mode, implicit $exec145    %3:vgpr_32 = V_LSHRREV_B32_e64 16, %2, implicit $exec146    %4:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, %3, %0, implicit $exec147    $vgpr0 = COPY %4148    $vgpr1 = COPY %0149    SI_RETURN implicit $vgpr0150...151 152...153---154name: live-vcc # cannot convert because of live VCC155tracksRegLiveness: true156body:             |157  bb.0:158    liveins: $vgpr0159 160    ; CHECK-LABEL: name: live-vcc161    ; CHECK: liveins: $vgpr0162    ; CHECK-NEXT: {{  $}}163    ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF164    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF165    ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 [[DEF]], 1, implicit $exec166    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, [[DEF1]], implicit $exec167    ; CHECK-NEXT: V_CMP_EQ_U32_e32 1, [[DEF1]], implicit-def $vcc, implicit $exec168    ; CHECK-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, [[V_LSHRREV_B32_e64_]], [[V_CMP_EQ_U32_e64_]], implicit $exec169    ; CHECK-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 killed [[V_LSHRREV_B32_e64_]], killed [[V_LSHRREV_B32_e64_]], implicit $vcc, implicit $exec170    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_e64_]]171    ; CHECK-NEXT: SI_RETURN implicit $vgpr0172    %0:vgpr_32 = IMPLICIT_DEF173    %2:vgpr_32 = IMPLICIT_DEF174    %3:sreg_64_xexec = V_CMP_EQ_U32_e64 %0, 1, implicit $exec175    %5:vgpr_32 = V_LSHRREV_B32_e64 16, %2, implicit $exec176    V_CMP_EQ_U32_e32 1, %2, implicit-def $vcc, implicit $exec177    %6:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, %5, %3, implicit $exec178    %7:vgpr_32 = V_CNDMASK_B32_e32 killed %5, killed %5, implicit $vcc, implicit $exec179    $vgpr0 = COPY %6180    SI_RETURN implicit $vgpr0181...182 183...184---185name: cannot-shrink-with-source-mods186tracksRegLiveness: true187body:             |188  bb.0:189    liveins: $vgpr0190 191    ; CHECK-LABEL: name: cannot-shrink-with-source-mods192    ; CHECK: liveins: $vgpr0193    ; CHECK-NEXT: {{  $}}194    ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF195    ; CHECK-NEXT: [[DEF1:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF196    ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 undef [[DEF]], 0, implicit $exec197    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, undef [[DEF1]], implicit $exec198    ; CHECK-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 1, 0, 0, [[V_LSHRREV_B32_e64_]], killed [[V_CMP_EQ_U32_e64_]], implicit $exec199    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_e64_]]200    ; CHECK-NEXT: SI_RETURN implicit $vgpr0201    %0:vgpr_32 = IMPLICIT_DEF202    %1:vgpr_32 = IMPLICIT_DEF203    %2:sreg_64_xexec = V_CMP_EQ_U32_e64 undef %0, 0, implicit $exec204    %3:vgpr_32 = V_LSHRREV_B32_e64 16, undef %1, implicit $exec205    %4:vgpr_32 = V_CNDMASK_B32_e64 1, 0, 0, %3, killed %2, implicit $exec206    $vgpr0 = COPY %4207    SI_RETURN implicit $vgpr0208...209 210...211---212name: missing-carry-def213tracksRegLiveness: true214registers:215  - { id: 0, class: sreg_64_xexec }216body:             |217  bb.0:218    liveins: $vgpr0219 220    ; CHECK-LABEL: name: missing-carry-def221    ; CHECK: liveins: $vgpr0222    ; CHECK-NEXT: {{  $}}223    ; CHECK-NEXT: [[DEF:%[0-9]+]]:vgpr_32 = IMPLICIT_DEF224    ; CHECK-NEXT: [[V_LSHRREV_B32_e64_:%[0-9]+]]:vgpr_32 = V_LSHRREV_B32_e64 16, undef [[DEF]], implicit $exec225    ; CHECK-NEXT: [[V_CNDMASK_B32_e64_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, [[V_LSHRREV_B32_e64_]], undef %0:sreg_64_xexec, implicit $exec226    ; CHECK-NEXT: $vgpr0 = COPY [[V_CNDMASK_B32_e64_]]227    ; CHECK-NEXT: SI_RETURN implicit $vgpr0228    %1:vgpr_32 = IMPLICIT_DEF229    %2:vgpr_32 = V_LSHRREV_B32_e64 16, undef %1, implicit $exec230    %3:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, %2, undef %0:sreg_64_xexec, implicit $exec231    $vgpr0 = COPY %3232    SI_RETURN implicit $vgpr0233...234 235# SDWA conversion of V_CNDMASK_B32 with V_BFE_I32 operand had to be236# disabled.237# FIXME sext modifier gets erroneously printed as neg modifier.238 239...240---241name: issue138766_cndmask_with_sext242tracksRegLiveness: true243body:             |244  bb.0:245    liveins: $vgpr0, $vgpr1, $vgpr2246 247    ; CHECK-LABEL: name: issue138766_cndmask_with_sext248    ; CHECK: liveins: $vgpr0, $vgpr1, $vgpr2249    ; CHECK-NEXT: {{  $}}250    ; CHECK-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr2251    ; CHECK-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1252    ; CHECK-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0253    ; CHECK-NEXT: [[V_AND_B32_e64_:%[0-9]+]]:vgpr_32 = V_AND_B32_e64 1, [[COPY]], implicit $exec254    ; CHECK-NEXT: [[V_CMP_EQ_U32_e64_:%[0-9]+]]:sreg_64_xexec = V_CMP_EQ_U32_e64 killed [[V_AND_B32_e64_]], 1, implicit $exec255    ; CHECK-NEXT: [[V_BFE_I32_e64_:%[0-9]+]]:vgpr_32 = V_BFE_I32_e64 [[COPY2]], 0, 8, implicit $exec256    ; CHECK-NEXT: $vcc = COPY killed [[V_CMP_EQ_U32_e64_]]257    ; CHECK-NEXT: [[V_CNDMASK_B32_e32_:%[0-9]+]]:vgpr_32 = V_CNDMASK_B32_e32 0, killed [[V_BFE_I32_e64_]], implicit $vcc, implicit $exec258    ; CHECK-NEXT: [[V_OR_B32_e64_:%[0-9]+]]:vgpr_32 = V_OR_B32_e64 killed [[V_CNDMASK_B32_e32_]], [[COPY1]], implicit $exec259    ; CHECK-NEXT: $vgpr0 = COPY [[V_OR_B32_e64_]]260    ; CHECK-NEXT: SI_RETURN implicit $vgpr0261    %10:vgpr_32 = COPY $vgpr2262    %9:vgpr_32 = COPY $vgpr1263    %8:vgpr_32 = COPY $vgpr0264    %11:vgpr_32 = V_AND_B32_e64 1, %10, implicit $exec265    %12:sreg_64_xexec = V_CMP_EQ_U32_e64 killed %11, 1, implicit $exec266    %14:vgpr_32 = V_BFE_I32_e64 %8, 0, 8, implicit $exec267    %16:vgpr_32 = V_CNDMASK_B32_e64 0, 0, 0, killed %14, killed %12, implicit $exec268    %18:vgpr_32 = V_OR_B32_e64 killed %16, %9, implicit $exec269    $vgpr0 = COPY %18270    SI_RETURN implicit $vgpr0271...272