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