236 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn-amd-amdhsa -verify-machineinstrs -run-pass si-fold-operands,dead-mi-elimination %s -o - | FileCheck -check-prefix=GCN %s3 4---5 6# First operand is FI is in a VGPR, other operand is a VGPR7name: shrink_vgpr_fi_vgpr_v_add_i32_e64_no_carry_out_use8tracksRegLiveness: true9stack:10 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }11body: |12 bb.0:13 liveins: $vgpr014 15 ; GCN-LABEL: name: shrink_vgpr_fi_vgpr_v_add_i32_e64_no_carry_out_use16 ; GCN: liveins: $vgpr017 ; GCN-NEXT: {{ $}}18 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec19 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr020 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[V_MOV_B32_e32_]], [[COPY]], implicit-def $vcc, implicit $exec21 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]22 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec23 %1:vgpr_32 = COPY $vgpr024 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec25 S_ENDPGM 0, implicit %226 27...28 29---30 31# First operand is a VGPR, other operand FI is in a VGPR32name: shrink_vgpr_vgpr_fi_v_add_i32_e64_no_carry_out_use33tracksRegLiveness: true34stack:35 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }36body: |37 bb.0:38 liveins: $vgpr039 40 ; GCN-LABEL: name: shrink_vgpr_vgpr_fi_v_add_i32_e64_no_carry_out_use41 ; GCN: liveins: $vgpr042 ; GCN-NEXT: {{ $}}43 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr044 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec45 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[COPY]], [[V_MOV_B32_e32_]], implicit-def $vcc, implicit $exec46 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]47 %0:vgpr_32 = COPY $vgpr048 %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec49 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec50 S_ENDPGM 0, implicit %251 52...53 54---55 56# First operand is FI is in an SGPR, other operand is a VGPR57name: shrink_vgpr_fi_sgpr_v_add_i32_e64_no_carry_out_use58tracksRegLiveness: true59stack:60 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }61body: |62 bb.0:63 liveins: $sgpr064 65 ; GCN-LABEL: name: shrink_vgpr_fi_sgpr_v_add_i32_e64_no_carry_out_use66 ; GCN: liveins: $sgpr067 ; GCN-NEXT: {{ $}}68 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec69 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr070 ; GCN-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], [[V_MOV_B32_e32_]], 0, implicit $exec71 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]72 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec73 %1:sreg_32_xm0 = COPY $sgpr074 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec75 S_ENDPGM 0, implicit %276 77...78 79---80 81# First operand is an SGPR, other operand FI is in a VGPR82name: shrink_sgpr_vgpr_fi_v_add_i32_e64_no_carry_out_use83tracksRegLiveness: true84stack:85 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }86body: |87 bb.0:88 liveins: $sgpr089 90 ; GCN-LABEL: name: shrink_sgpr_vgpr_fi_v_add_i32_e64_no_carry_out_use91 ; GCN: liveins: $sgpr092 ; GCN-NEXT: {{ $}}93 ; GCN-NEXT: [[COPY:%[0-9]+]]:sreg_32_xm0 = COPY $sgpr094 ; GCN-NEXT: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec95 ; GCN-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[V_MOV_B32_e32_]], [[COPY]], 0, implicit $exec96 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]97 %0:sreg_32_xm0 = COPY $sgpr098 %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec99 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec100 S_ENDPGM 0, implicit %2101 102...103 104---105 106# First operand is FI is in an SGPR, other operand is a VGPR107name: shrink_sgpr_fi_vgpr_v_add_i32_e64_no_carry_out_use108tracksRegLiveness: true109stack:110 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }111body: |112 bb.0:113 liveins: $vgpr0114 115 ; GCN-LABEL: name: shrink_sgpr_fi_vgpr_v_add_i32_e64_no_carry_out_use116 ; GCN: liveins: $vgpr0117 ; GCN-NEXT: {{ $}}118 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0119 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0120 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[COPY]], implicit-def $vcc, implicit $exec121 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]122 %0:sreg_32_xm0 = S_MOV_B32 %stack.0123 %1:vgpr_32 = COPY $vgpr0124 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec125 S_ENDPGM 0, implicit %2126 127...128 129---130 131# First operand is a VGPR, other operand FI is in an SGPR132name: shrink_vgpr_sgpr_fi_v_add_i32_e64_no_carry_out_use133tracksRegLiveness: true134stack:135 - { id: 0, type: default, offset: 0, size: 64, alignment: 16}136body: |137 bb.0:138 liveins: $vgpr0139 140 ; GCN-LABEL: name: shrink_vgpr_sgpr_fi_v_add_i32_e64_no_carry_out_use141 ; GCN: liveins: $vgpr0142 ; GCN-NEXT: {{ $}}143 ; GCN-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0144 ; GCN-NEXT: [[S_MOV_B32_:%[0-9]+]]:sreg_32_xm0 = S_MOV_B32 %stack.0145 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 [[S_MOV_B32_]], [[COPY]], implicit-def $vcc, implicit $exec146 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]147 %0:vgpr_32 = COPY $vgpr0148 %1:sreg_32_xm0 = S_MOV_B32 %stack.0149 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec150 S_ENDPGM 0, implicit %2151 152...153 154---155 156# First operand is FI is in a VGPR, other operand is an inline imm in a VGPR157name: shrink_vgpr_imm_fi_vgpr_v_add_i32_e64_no_carry_out_use158tracksRegLiveness: true159stack:160 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }161body: |162 bb.0:163 164 ; GCN-LABEL: name: shrink_vgpr_imm_fi_vgpr_v_add_i32_e64_no_carry_out_use165 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec166 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 16, [[V_MOV_B32_e32_]], implicit-def $vcc, implicit $exec167 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]168 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec169 %1:vgpr_32 = V_MOV_B32_e32 16, implicit $exec170 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec171 S_ENDPGM 0, implicit %2172 173...174 175---176 177# First operand is an inline imm in a VGPR, other operand FI is in a VGPR178name: shrink_vgpr_imm_vgpr_fi_v_add_i32_e64_no_carry_out_use179tracksRegLiveness: true180stack:181 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }182body: |183 bb.0:184 185 ; GCN-LABEL: name: shrink_vgpr_imm_vgpr_fi_v_add_i32_e64_no_carry_out_use186 ; GCN: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 16, %stack.0, 0, implicit $exec187 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_]]188 %0:vgpr_32 = V_MOV_B32_e32 16, implicit $exec189 %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec190 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec191 S_ENDPGM 0, implicit %2192 193...194 195---196 197# First operand is FI is in a VGPR, other operand is an literal constant in a VGPR198name: shrink_vgpr_k_fi_vgpr_v_add_i32_e64_no_carry_out_use199tracksRegLiveness: true200stack:201 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }202body: |203 bb.0:204 205 ; GCN-LABEL: name: shrink_vgpr_k_fi_vgpr_v_add_i32_e64_no_carry_out_use206 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec207 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 1234, [[V_MOV_B32_e32_]], implicit-def $vcc, implicit $exec208 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]209 %0:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec210 %1:vgpr_32 = V_MOV_B32_e32 1234, implicit $exec211 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec212 S_ENDPGM 0, implicit %2213 214...215 216---217 218# First operand is a literal constant in a VGPR, other operand FI is in a VGPR219name: shrink_vgpr_k_vgpr_fi_v_add_i32_e64_no_carry_out_use220tracksRegLiveness: true221stack:222 - { id: 0, type: default, offset: 0, size: 64, alignment: 16 }223body: |224 bb.0:225 226 ; GCN-LABEL: name: shrink_vgpr_k_vgpr_fi_v_add_i32_e64_no_carry_out_use227 ; GCN: [[V_MOV_B32_e32_:%[0-9]+]]:vgpr_32 = V_MOV_B32_e32 1234, implicit $exec228 ; GCN-NEXT: [[V_ADD_CO_U32_e32_:%[0-9]+]]:vgpr_32 = V_ADD_CO_U32_e32 %stack.0, [[V_MOV_B32_e32_]], implicit-def $vcc, implicit $exec229 ; GCN-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e32_]]230 %0:vgpr_32 = V_MOV_B32_e32 1234, implicit $exec231 %1:vgpr_32 = V_MOV_B32_e32 %stack.0, implicit $exec232 %2:vgpr_32, %3:sreg_64 = V_ADD_CO_U32_e64 %0, %1, 0, implicit $exec233 S_ENDPGM 0, implicit %2234 235...236