253 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=GFX10 %s5# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX10 %s6 7---8 9name: xor_s32_sgpr_sgpr_sgpr10legalized: true11regBankSelected: true12tracksRegLiveness: true13 14body: |15 bb.0:16 liveins: $sgpr0, $sgpr1, $sgpr217 ; GFX8-LABEL: name: xor_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_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc24 ; GFX8-NEXT: [[S_XOR_B32_1:%[0-9]+]]:sreg_32 = S_XOR_B32 [[S_XOR_B32_]], [[COPY2]], implicit-def dead $scc25 ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_1]]26 ;27 ; GFX9-LABEL: name: xor_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_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc34 ; GFX9-NEXT: [[S_XOR_B32_1:%[0-9]+]]:sreg_32 = S_XOR_B32 [[S_XOR_B32_]], [[COPY2]], implicit-def dead $scc35 ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_1]]36 ;37 ; GFX10-LABEL: name: xor_s32_sgpr_sgpr_sgpr38 ; GFX10: liveins: $sgpr0, $sgpr1, $sgpr239 ; GFX10-NEXT: {{ $}}40 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr041 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr142 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr243 ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc44 ; GFX10-NEXT: [[S_XOR_B32_1:%[0-9]+]]:sreg_32 = S_XOR_B32 [[S_XOR_B32_]], [[COPY2]], implicit-def dead $scc45 ; GFX10-NEXT: S_ENDPGM 0, implicit [[S_XOR_B32_1]]46 %0:sgpr(s32) = COPY $sgpr047 %1:sgpr(s32) = COPY $sgpr148 %2:sgpr(s32) = COPY $sgpr249 %3:sgpr(s32) = G_XOR %0, %150 %4:sgpr(s32) = G_XOR %3, %251 S_ENDPGM 0, implicit %452...53 54---55 56name: xor_s32_vgpr_vgpr_vgpr57legalized: true58regBankSelected: true59tracksRegLiveness: true60 61body: |62 bb.0:63 liveins: $vgpr0, $vgpr1, $vgpr264 ; GFX8-LABEL: name: xor_s32_vgpr_vgpr_vgpr65 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr266 ; GFX8-NEXT: {{ $}}67 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr068 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr169 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr270 ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec71 ; GFX8-NEXT: [[V_XOR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[V_XOR_B32_e64_]], [[COPY2]], implicit $exec72 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_1]]73 ;74 ; GFX9-LABEL: name: xor_s32_vgpr_vgpr_vgpr75 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr276 ; GFX9-NEXT: {{ $}}77 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr078 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr179 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr280 ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY]], [[COPY1]], implicit $exec81 ; GFX9-NEXT: [[V_XOR_B32_e64_1:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[V_XOR_B32_e64_]], [[COPY2]], implicit $exec82 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_1]]83 ;84 ; GFX10-LABEL: name: xor_s32_vgpr_vgpr_vgpr85 ; GFX10: liveins: $vgpr0, $vgpr1, $vgpr286 ; GFX10-NEXT: {{ $}}87 ; GFX10-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr088 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr189 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr290 ; GFX10-NEXT: [[V_XOR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR3_B32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec91 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_XOR3_B32_e64_]]92 %0:vgpr(s32) = COPY $vgpr093 %1:vgpr(s32) = COPY $vgpr194 %2:vgpr(s32) = COPY $vgpr295 %3:vgpr(s32) = G_XOR %0, %196 %4:vgpr(s32) = G_XOR %3, %297 S_ENDPGM 0, implicit %498...99 100# Mixed SGPR and VGPR, with full copy from scalar xor to VGPR, as101#should actually be produced by RegBankSelect102 103---104 105name: xor_s32_sgpr_sgpr_vgpr_copy106legalized: true107regBankSelected: true108tracksRegLiveness: true109 110body: |111 bb.0:112 liveins: $sgpr0, $sgpr1, $vgpr0113 114 ; GFX8-LABEL: name: xor_s32_sgpr_sgpr_vgpr_copy115 ; GFX8: liveins: $sgpr0, $sgpr1, $vgpr0116 ; GFX8-NEXT: {{ $}}117 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0118 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1119 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0120 ; GFX8-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc121 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_XOR_B32_]]122 ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY3]], [[COPY2]], implicit $exec123 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]124 ;125 ; GFX9-LABEL: name: xor_s32_sgpr_sgpr_vgpr_copy126 ; GFX9: liveins: $sgpr0, $sgpr1, $vgpr0127 ; GFX9-NEXT: {{ $}}128 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0129 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1130 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0131 ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc132 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_XOR_B32_]]133 ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY3]], [[COPY2]], implicit $exec134 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]135 ;136 ; GFX10-LABEL: name: xor_s32_sgpr_sgpr_vgpr_copy137 ; GFX10: liveins: $sgpr0, $sgpr1, $vgpr0138 ; GFX10-NEXT: {{ $}}139 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0140 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1141 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0142 ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc143 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_XOR_B32_]]144 ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY3]], [[COPY2]], implicit $exec145 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]146 %0:sgpr(s32) = COPY $sgpr0147 %1:sgpr(s32) = COPY $sgpr1148 %2:vgpr(s32) = COPY $vgpr0149 %3:sgpr(s32) = G_XOR %0, %1150 %4:vgpr(s32) = COPY %3151 %5:vgpr(s32) = G_XOR %4, %2152 S_ENDPGM 0, implicit %5153...154 155---156 157name: xor_s32_sgpr_sgpr_vgpr_copy_commute158legalized: true159regBankSelected: true160tracksRegLiveness: true161 162body: |163 bb.0:164 liveins: $sgpr0, $sgpr1, $vgpr0165 166 ; GFX8-LABEL: name: xor_s32_sgpr_sgpr_vgpr_copy_commute167 ; GFX8: liveins: $sgpr0, $sgpr1, $vgpr0168 ; GFX8-NEXT: {{ $}}169 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0170 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1171 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0172 ; GFX8-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc173 ; GFX8-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_XOR_B32_]]174 ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY2]], [[COPY3]], implicit $exec175 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]176 ;177 ; GFX9-LABEL: name: xor_s32_sgpr_sgpr_vgpr_copy_commute178 ; GFX9: liveins: $sgpr0, $sgpr1, $vgpr0179 ; GFX9-NEXT: {{ $}}180 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0181 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1182 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0183 ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc184 ; GFX9-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_XOR_B32_]]185 ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY2]], [[COPY3]], implicit $exec186 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]187 ;188 ; GFX10-LABEL: name: xor_s32_sgpr_sgpr_vgpr_copy_commute189 ; GFX10: liveins: $sgpr0, $sgpr1, $vgpr0190 ; GFX10-NEXT: {{ $}}191 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0192 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1193 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0194 ; GFX10-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc195 ; GFX10-NEXT: [[COPY3:%[0-9]+]]:vgpr_32 = COPY [[S_XOR_B32_]]196 ; GFX10-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[COPY2]], [[COPY3]], implicit $exec197 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]198 %0:sgpr(s32) = COPY $sgpr0199 %1:sgpr(s32) = COPY $sgpr1200 %2:vgpr(s32) = COPY $vgpr0201 %3:sgpr(s32) = G_XOR %0, %1202 %4:vgpr(s32) = COPY %3203 %5:vgpr(s32) = G_XOR %2, %4204 S_ENDPGM 0, implicit %5205...206 207---208 209name: xor_s32_sgpr_sgpr_vgpr210legalized: true211regBankSelected: true212tracksRegLiveness: true213 214body: |215 bb.0:216 liveins: $sgpr0, $sgpr1, $vgpr0217 218 ; GFX8-LABEL: name: xor_s32_sgpr_sgpr_vgpr219 ; GFX8: liveins: $sgpr0, $sgpr1, $vgpr0220 ; GFX8-NEXT: {{ $}}221 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0222 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1223 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0224 ; GFX8-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc225 ; GFX8-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_XOR_B32_]], [[COPY2]], implicit $exec226 ; GFX8-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]227 ;228 ; GFX9-LABEL: name: xor_s32_sgpr_sgpr_vgpr229 ; GFX9: liveins: $sgpr0, $sgpr1, $vgpr0230 ; GFX9-NEXT: {{ $}}231 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0232 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1233 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0234 ; GFX9-NEXT: [[S_XOR_B32_:%[0-9]+]]:sreg_32 = S_XOR_B32 [[COPY]], [[COPY1]], implicit-def dead $scc235 ; GFX9-NEXT: [[V_XOR_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR_B32_e64 [[S_XOR_B32_]], [[COPY2]], implicit $exec236 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_XOR_B32_e64_]]237 ;238 ; GFX10-LABEL: name: xor_s32_sgpr_sgpr_vgpr239 ; GFX10: liveins: $sgpr0, $sgpr1, $vgpr0240 ; GFX10-NEXT: {{ $}}241 ; GFX10-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0242 ; GFX10-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1243 ; GFX10-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr0244 ; GFX10-NEXT: [[V_XOR3_B32_e64_:%[0-9]+]]:vgpr_32 = V_XOR3_B32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec245 ; GFX10-NEXT: S_ENDPGM 0, implicit [[V_XOR3_B32_e64_]]246 %0:sgpr(s32) = COPY $sgpr0247 %1:sgpr(s32) = COPY $sgpr1248 %2:vgpr(s32) = COPY $vgpr0249 %3:sgpr(s32) = G_XOR %0, %1250 %4:vgpr(s32) = G_XOR %3, %2251 S_ENDPGM 0, implicit %4252...253