266 lines · plain
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py2# RUN: llc -mtriple=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s3# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s4# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s6 7---8 9name: add_s32_sgpr_sgpr_sgpr10legalized: true11regBankSelected: true12tracksRegLiveness: true13 14body: |15 bb.0:16 liveins: $sgpr0, $sgpr1, $sgpr217 ; GFX8-LABEL: name: add_s32_sgpr_sgpr_sgpr18 ; GFX8: liveins: $sgpr0, $sgpr1, $sgpr219 ; GFX8-NEXT: {{ $}}20 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr021 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr122 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr223 ; GFX8-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], [[COPY1]], implicit-def dead $scc24 ; GFX8-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_]], [[COPY2]], implicit-def dead $scc25 ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_ADD_I32_1]]26 ;27 ; GFX9-LABEL: name: add_s32_sgpr_sgpr_sgpr28 ; GFX9: liveins: $sgpr0, $sgpr1, $sgpr229 ; GFX9-NEXT: {{ $}}30 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr031 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr132 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr233 ; GFX9-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], [[COPY1]], implicit-def dead $scc34 ; GFX9-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_]], [[COPY2]], implicit-def dead $scc35 ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_ADD_I32_1]]36 %0:sgpr(s32) = COPY $sgpr037 %1:sgpr(s32) = COPY $sgpr138 %2:sgpr(s32) = COPY $sgpr239 %3:sgpr(s32) = G_ADD %0, %140 %4:sgpr(s32) = G_ADD %3, %241 S_ENDPGM 0, implicit %442...43 44---45 46name: add_s32_vgpr_vgpr_vgpr47legalized: true48regBankSelected: true49tracksRegLiveness: true50 51body: |52 bb.0:53 liveins: $vgpr0, $vgpr1, $vgpr254 ; GFX8-LABEL: name: add_s32_vgpr_vgpr_vgpr55 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr256 ; GFX8-NEXT: {{ $}}57 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr058 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr159 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr260 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec61 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[V_ADD_CO_U32_e64_]], [[COPY2]], 0, implicit $exec62 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_2]]63 ;64 ; GFX9-LABEL: name: add_s32_vgpr_vgpr_vgpr65 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr266 ; GFX9-NEXT: {{ $}}67 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr068 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr169 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr270 ; GFX9-NEXT: [[V_ADD3_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD3_U32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec71 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD3_U32_e64_]]72 %0:vgpr(s32) = COPY $vgpr073 %1:vgpr(s32) = COPY $vgpr174 %2:vgpr(s32) = COPY $vgpr275 %3:vgpr(s32) = G_ADD %0, %176 %4:vgpr(s32) = G_ADD %3, %277 S_ENDPGM 0, implicit %478...79 80---81 82name: add_s32_vgpr_vgpr_vgpr_multi_use83legalized: true84regBankSelected: true85tracksRegLiveness: true86 87body: |88 bb.0:89 liveins: $vgpr0, $vgpr1, $vgpr290 ; GFX8-LABEL: name: add_s32_vgpr_vgpr_vgpr_multi_use91 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr292 ; GFX8-NEXT: {{ $}}93 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr094 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr195 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr296 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec97 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[V_ADD_CO_U32_e64_]], [[COPY2]], 0, implicit $exec98 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_2]], implicit [[V_ADD_CO_U32_e64_]]99 ;100 ; GFX9-LABEL: name: add_s32_vgpr_vgpr_vgpr_multi_use101 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2102 ; GFX9-NEXT: {{ $}}103 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0104 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1105 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2106 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec107 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_ADD_U32_e64_]], [[COPY2]], 0, implicit $exec108 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]], implicit [[V_ADD_U32_e64_]]109 %0:vgpr(s32) = COPY $vgpr0110 %1:vgpr(s32) = COPY $vgpr1111 %2:vgpr(s32) = COPY $vgpr2112 %3:vgpr(s32) = G_ADD %0, %1113 %4:vgpr(s32) = G_ADD %3, %2114 S_ENDPGM 0, implicit %4, implicit %3115...116 117---118 119name: add_p3_vgpr_vgpr_vgpr120legalized: true121regBankSelected: true122tracksRegLiveness: true123 124body: |125 bb.0:126 liveins: $vgpr0, $vgpr1, $vgpr2127 128 ; GFX8-LABEL: name: add_p3_vgpr_vgpr_vgpr129 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2130 ; GFX8-NEXT: {{ $}}131 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0132 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1133 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2134 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec135 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_ADD_CO_U32_e64_]], [[COPY2]], 0, implicit $exec136 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_2]]137 ;138 ; GFX9-LABEL: name: add_p3_vgpr_vgpr_vgpr139 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2140 ; GFX9-NEXT: {{ $}}141 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0142 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1143 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2144 ; GFX9-NEXT: [[V_ADD3_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD3_U32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec145 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD3_U32_e64_]]146 %0:vgpr(p3) = COPY $vgpr0147 %1:vgpr(s32) = COPY $vgpr1148 %2:vgpr(s32) = COPY $vgpr2149 %3:vgpr(p3) = G_PTR_ADD %0, %1150 %4:vgpr(p3) = G_PTR_ADD %3, %2151 S_ENDPGM 0, implicit %4152...153 154---155 156name: add_p5_vgpr_vgpr_vgpr157legalized: true158regBankSelected: true159tracksRegLiveness: true160 161body: |162 bb.0:163 liveins: $vgpr0, $vgpr1, $vgpr2164 165 ; GFX8-LABEL: name: add_p5_vgpr_vgpr_vgpr166 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2167 ; GFX8-NEXT: {{ $}}168 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0169 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1170 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2171 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec172 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[V_ADD_CO_U32_e64_]], [[COPY2]], 0, implicit $exec173 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_2]]174 ;175 ; GFX9-LABEL: name: add_p5_vgpr_vgpr_vgpr176 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2177 ; GFX9-NEXT: {{ $}}178 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0179 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1180 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2181 ; GFX9-NEXT: [[V_ADD3_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD3_U32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec182 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD3_U32_e64_]]183 %0:vgpr(p5) = COPY $vgpr0184 %1:vgpr(s32) = COPY $vgpr1185 %2:vgpr(s32) = COPY $vgpr2186 %3:vgpr(p5) = G_PTR_ADD %0, %1187 %4:vgpr(p5) = G_PTR_ADD %3, %2188 S_ENDPGM 0, implicit %4189...190 191---192 193name: add_p3_s32_vgpr_vgpr_vgpr194legalized: true195regBankSelected: true196tracksRegLiveness: true197 198body: |199 bb.0:200 liveins: $vgpr0, $vgpr1, $vgpr2201 202 ; GFX8-LABEL: name: add_p3_s32_vgpr_vgpr_vgpr203 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2204 ; GFX8-NEXT: {{ $}}205 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0206 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1207 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2208 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec209 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[V_ADD_CO_U32_e64_]], 0, implicit $exec210 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_2]]211 ;212 ; GFX9-LABEL: name: add_p3_s32_vgpr_vgpr_vgpr213 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2214 ; GFX9-NEXT: {{ $}}215 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0216 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1217 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2218 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec219 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY2]], [[V_ADD_U32_e64_]], 0, implicit $exec220 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]]221 %0:vgpr(s32) = COPY $vgpr0222 %1:vgpr(s32) = COPY $vgpr1223 %2:vgpr(p3) = COPY $vgpr2224 %3:vgpr(s32) = G_ADD %0, %1225 %4:vgpr(p3) = G_PTR_ADD %2, %3226 S_ENDPGM 0, implicit %4227...228 229---230 231name: add_p5_s32_vgpr_vgpr_vgpr232legalized: true233regBankSelected: true234tracksRegLiveness: true235 236body: |237 bb.0:238 liveins: $vgpr0, $vgpr1, $vgpr2239 240 ; GFX8-LABEL: name: add_p5_s32_vgpr_vgpr_vgpr241 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2242 ; GFX8-NEXT: {{ $}}243 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0244 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1245 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2246 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_1:%[0-9]+]]:sreg_64 = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec247 ; GFX8-NEXT: [[V_ADD_CO_U32_e64_2:%[0-9]+]]:vgpr_32, dead [[V_ADD_CO_U32_e64_3:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], [[V_ADD_CO_U32_e64_]], 0, implicit $exec248 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_ADD_CO_U32_e64_2]]249 ;250 ; GFX9-LABEL: name: add_p5_s32_vgpr_vgpr_vgpr251 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2252 ; GFX9-NEXT: {{ $}}253 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0254 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1255 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2256 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec257 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY2]], [[V_ADD_U32_e64_]], 0, implicit $exec258 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]]259 %0:vgpr(s32) = COPY $vgpr0260 %1:vgpr(s32) = COPY $vgpr1261 %2:vgpr(p5) = COPY $vgpr2262 %3:vgpr(s32) = G_ADD %0, %1263 %4:vgpr(p5) = G_PTR_ADD %2, %3264 S_ENDPGM 0, implicit %4265...266