1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py 2# RUN: llc -march=amdgcn -mcpu=fiji -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX8 %s 3# RUN: llc -march=amdgcn -mcpu=gfx900 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s 4# RUN: llc -march=amdgcn -mcpu=gfx1010 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s 5# RUN: llc -march=amdgcn -mcpu=gfx1100 -run-pass=instruction-select -verify-machineinstrs -o - %s | FileCheck -check-prefix=GFX9 %s 6 7--- 8 9name: add_s32_sgpr_sgpr_sgpr 10legalized: true 11regBankSelected: true 12tracksRegLiveness: true 13 14body: | 15 bb.0: 16 liveins: $sgpr0, $sgpr1, $sgpr2 17 ; GFX8-LABEL: name: add_s32_sgpr_sgpr_sgpr 18 ; GFX8: liveins: $sgpr0, $sgpr1, $sgpr2 19 ; GFX8-NEXT: {{ $}} 20 ; GFX8-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 21 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 22 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 23 ; GFX8-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], [[COPY1]], implicit-def $scc 24 ; GFX8-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_]], [[COPY2]], implicit-def $scc 25 ; GFX8-NEXT: S_ENDPGM 0, implicit [[S_ADD_I32_1]] 26 ; GFX9-LABEL: name: add_s32_sgpr_sgpr_sgpr 27 ; GFX9: liveins: $sgpr0, $sgpr1, $sgpr2 28 ; GFX9-NEXT: {{ $}} 29 ; GFX9-NEXT: [[COPY:%[0-9]+]]:sreg_32 = COPY $sgpr0 30 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:sreg_32 = COPY $sgpr1 31 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:sreg_32 = COPY $sgpr2 32 ; GFX9-NEXT: [[S_ADD_I32_:%[0-9]+]]:sreg_32 = S_ADD_I32 [[COPY]], [[COPY1]], implicit-def $scc 33 ; GFX9-NEXT: [[S_ADD_I32_1:%[0-9]+]]:sreg_32 = S_ADD_I32 [[S_ADD_I32_]], [[COPY2]], implicit-def $scc 34 ; GFX9-NEXT: S_ENDPGM 0, implicit [[S_ADD_I32_1]] 35 %0:sgpr(s32) = COPY $sgpr0 36 %1:sgpr(s32) = COPY $sgpr1 37 %2:sgpr(s32) = COPY $sgpr2 38 %3:sgpr(s32) = G_ADD %0, %1 39 %4:sgpr(s32) = G_ADD %3, %2 40 S_ENDPGM 0, implicit %4 41... 42 43--- 44 45name: add_s32_vgpr_vgpr_vgpr 46legalized: true 47regBankSelected: true 48tracksRegLiveness: true 49 50body: | 51 bb.0: 52 liveins: $vgpr0, $vgpr1, $vgpr2 53 ; GFX8-LABEL: name: add_s32_vgpr_vgpr_vgpr 54 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 55 ; GFX8-NEXT: {{ $}} 56 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 57 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 58 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 59 ; GFX8-NEXT: %3:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 60 ; GFX8-NEXT: %4:vgpr_32, dead %5:sreg_64_xexec = V_ADD_CO_U32_e64 %3, [[COPY2]], 0, implicit $exec 61 ; GFX8-NEXT: S_ENDPGM 0, implicit %4 62 ; GFX9-LABEL: name: add_s32_vgpr_vgpr_vgpr 63 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 64 ; GFX9-NEXT: {{ $}} 65 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 66 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 67 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 68 ; GFX9-NEXT: [[V_ADD3_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD3_U32_e64 [[COPY]], [[COPY1]], [[COPY2]], implicit $exec 69 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD3_U32_e64_]] 70 %0:vgpr(s32) = COPY $vgpr0 71 %1:vgpr(s32) = COPY $vgpr1 72 %2:vgpr(s32) = COPY $vgpr2 73 %3:vgpr(s32) = G_ADD %0, %1 74 %4:vgpr(s32) = G_ADD %3, %2 75 S_ENDPGM 0, implicit %4 76... 77 78--- 79 80name: add_s32_vgpr_vgpr_vgpr_multi_use 81legalized: true 82regBankSelected: true 83tracksRegLiveness: true 84 85body: | 86 bb.0: 87 liveins: $vgpr0, $vgpr1, $vgpr2 88 ; GFX8-LABEL: name: add_s32_vgpr_vgpr_vgpr_multi_use 89 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 90 ; GFX8-NEXT: {{ $}} 91 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 92 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 93 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 94 ; GFX8-NEXT: %3:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 95 ; GFX8-NEXT: %4:vgpr_32, dead %5:sreg_64_xexec = V_ADD_CO_U32_e64 %3, [[COPY2]], 0, implicit $exec 96 ; GFX8-NEXT: S_ENDPGM 0, implicit %4, implicit %3 97 ; GFX9-LABEL: name: add_s32_vgpr_vgpr_vgpr_multi_use 98 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 99 ; GFX9-NEXT: {{ $}} 100 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 101 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 102 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 103 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 104 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_ADD_U32_e64_]], [[COPY2]], 0, implicit $exec 105 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]], implicit [[V_ADD_U32_e64_]] 106 %0:vgpr(s32) = COPY $vgpr0 107 %1:vgpr(s32) = COPY $vgpr1 108 %2:vgpr(s32) = COPY $vgpr2 109 %3:vgpr(s32) = G_ADD %0, %1 110 %4:vgpr(s32) = G_ADD %3, %2 111 S_ENDPGM 0, implicit %4, implicit %3 112... 113 114--- 115 116name: add_p3_vgpr_vgpr_vgpr 117legalized: true 118regBankSelected: true 119tracksRegLiveness: true 120 121body: | 122 bb.0: 123 liveins: $vgpr0, $vgpr1, $vgpr2 124 125 ; GFX8-LABEL: name: add_p3_vgpr_vgpr_vgpr 126 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 127 ; GFX8-NEXT: {{ $}} 128 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 129 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 130 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 131 ; GFX8-NEXT: %3:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 132 ; GFX8-NEXT: %4:vgpr_32, dead %5:sreg_64_xexec = V_ADD_CO_U32_e64 %3, [[COPY2]], 0, implicit $exec 133 ; GFX8-NEXT: S_ENDPGM 0, implicit %4 134 ; GFX9-LABEL: name: add_p3_vgpr_vgpr_vgpr 135 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 136 ; GFX9-NEXT: {{ $}} 137 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 138 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 139 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 140 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 141 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_ADD_U32_e64_]], [[COPY2]], 0, implicit $exec 142 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]] 143 %0:vgpr(p3) = COPY $vgpr0 144 %1:vgpr(s32) = COPY $vgpr1 145 %2:vgpr(s32) = COPY $vgpr2 146 %3:vgpr(p3) = G_PTR_ADD %0, %1 147 %4:vgpr(p3) = G_PTR_ADD %3, %2 148 S_ENDPGM 0, implicit %4 149... 150 151--- 152 153name: add_p5_vgpr_vgpr_vgpr 154legalized: true 155regBankSelected: true 156tracksRegLiveness: true 157 158body: | 159 bb.0: 160 liveins: $vgpr0, $vgpr1, $vgpr2 161 162 ; GFX8-LABEL: name: add_p5_vgpr_vgpr_vgpr 163 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 164 ; GFX8-NEXT: {{ $}} 165 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 166 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 167 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 168 ; GFX8-NEXT: %3:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 169 ; GFX8-NEXT: %4:vgpr_32, dead %5:sreg_64_xexec = V_ADD_CO_U32_e64 %3, [[COPY2]], 0, implicit $exec 170 ; GFX8-NEXT: S_ENDPGM 0, implicit %4 171 ; GFX9-LABEL: name: add_p5_vgpr_vgpr_vgpr 172 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 173 ; GFX9-NEXT: {{ $}} 174 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 175 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 176 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 177 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 178 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[V_ADD_U32_e64_]], [[COPY2]], 0, implicit $exec 179 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]] 180 %0:vgpr(p5) = COPY $vgpr0 181 %1:vgpr(s32) = COPY $vgpr1 182 %2:vgpr(s32) = COPY $vgpr2 183 %3:vgpr(p5) = G_PTR_ADD %0, %1 184 %4:vgpr(p5) = G_PTR_ADD %3, %2 185 S_ENDPGM 0, implicit %4 186... 187 188--- 189 190name: add_p3_s32_vgpr_vgpr_vgpr 191legalized: true 192regBankSelected: true 193tracksRegLiveness: true 194 195body: | 196 bb.0: 197 liveins: $vgpr0, $vgpr1, $vgpr2 198 199 ; GFX8-LABEL: name: add_p3_s32_vgpr_vgpr_vgpr 200 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 201 ; GFX8-NEXT: {{ $}} 202 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 203 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 204 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 205 ; GFX8-NEXT: %3:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 206 ; GFX8-NEXT: %4:vgpr_32, dead %5:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], %3, 0, implicit $exec 207 ; GFX8-NEXT: S_ENDPGM 0, implicit %4 208 ; GFX9-LABEL: name: add_p3_s32_vgpr_vgpr_vgpr 209 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 210 ; GFX9-NEXT: {{ $}} 211 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 212 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 213 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 214 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 215 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY2]], [[V_ADD_U32_e64_]], 0, implicit $exec 216 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]] 217 %0:vgpr(s32) = COPY $vgpr0 218 %1:vgpr(s32) = COPY $vgpr1 219 %2:vgpr(p3) = COPY $vgpr2 220 %3:vgpr(s32) = G_ADD %0, %1 221 %4:vgpr(p3) = G_PTR_ADD %2, %3 222 S_ENDPGM 0, implicit %4 223... 224 225--- 226 227name: add_p5_s32_vgpr_vgpr_vgpr 228legalized: true 229regBankSelected: true 230tracksRegLiveness: true 231 232body: | 233 bb.0: 234 liveins: $vgpr0, $vgpr1, $vgpr2 235 236 ; GFX8-LABEL: name: add_p5_s32_vgpr_vgpr_vgpr 237 ; GFX8: liveins: $vgpr0, $vgpr1, $vgpr2 238 ; GFX8-NEXT: {{ $}} 239 ; GFX8-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 240 ; GFX8-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 241 ; GFX8-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 242 ; GFX8-NEXT: %3:vgpr_32, dead %6:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 243 ; GFX8-NEXT: %4:vgpr_32, dead %5:sreg_64_xexec = V_ADD_CO_U32_e64 [[COPY2]], %3, 0, implicit $exec 244 ; GFX8-NEXT: S_ENDPGM 0, implicit %4 245 ; GFX9-LABEL: name: add_p5_s32_vgpr_vgpr_vgpr 246 ; GFX9: liveins: $vgpr0, $vgpr1, $vgpr2 247 ; GFX9-NEXT: {{ $}} 248 ; GFX9-NEXT: [[COPY:%[0-9]+]]:vgpr_32 = COPY $vgpr0 249 ; GFX9-NEXT: [[COPY1:%[0-9]+]]:vgpr_32 = COPY $vgpr1 250 ; GFX9-NEXT: [[COPY2:%[0-9]+]]:vgpr_32 = COPY $vgpr2 251 ; GFX9-NEXT: [[V_ADD_U32_e64_:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY]], [[COPY1]], 0, implicit $exec 252 ; GFX9-NEXT: [[V_ADD_U32_e64_1:%[0-9]+]]:vgpr_32 = V_ADD_U32_e64 [[COPY2]], [[V_ADD_U32_e64_]], 0, implicit $exec 253 ; GFX9-NEXT: S_ENDPGM 0, implicit [[V_ADD_U32_e64_1]] 254 %0:vgpr(s32) = COPY $vgpr0 255 %1:vgpr(s32) = COPY $vgpr1 256 %2:vgpr(p5) = COPY $vgpr2 257 %3:vgpr(s32) = G_ADD %0, %1 258 %4:vgpr(p5) = G_PTR_ADD %2, %3 259 S_ENDPGM 0, implicit %4 260... 261