469 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx900 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefixes=GCN,GFX9 %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx803 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefixes=GCN,GFX8 %s3 4# GCN-LABEL: name: diffoporder_add5# GFX9: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, -2048, 06# GFX9: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 07 8# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 09# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 010 11name: diffoporder_add12body: |13 bb.0.entry:14 %0:sgpr_64 = COPY $sgpr0_sgpr115 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 016 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9917 %4:sreg_32_xm0 = COPY $sgpr10118 %5:sreg_32_xm0 = S_MOV_B32 019 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %320 $sgpr4 = COPY %421 $vgpr0 = V_MOV_B32_e32 0, implicit $exec22 %6:vreg_64 = COPY $vgpr0_vgpr123 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec24 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec25 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub126 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec27 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec28 %12:sgpr_32 = COPY %1.sub129 %13:vgpr_32 = COPY %530 %14:vgpr_32, %15:sreg_64_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec31 %16:vgpr_32 = COPY %1232 %17:vgpr_32, dead %18:sreg_64_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec33 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub134 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec35 %21:vgpr_32, %22:sreg_64_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec36 %23:vgpr_32, dead %24:sreg_64_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec37 %25:sgpr_32 = S_MOV_B32 409638 %26:vgpr_32, %27:sreg_64_xexec = V_ADD_CO_U32_e64 %25, %21, 0, implicit $exec39 %28:vgpr_32, dead %29:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %27, 0, implicit $exec40 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub141 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec42 %32:sgpr_32 = S_MOV_B32 614443 %33:vgpr_32, %34:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %32, 0, implicit $exec44 %35:vgpr_32, dead %36:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %34, 0, implicit $exec45 %37:vreg_64 = REG_SEQUENCE %33, %subreg.sub0, %35, %subreg.sub146 %38:vreg_64 = GLOBAL_LOAD_DWORDX2 %37, 0, 0, implicit $exec47...48---49 50# GCN-LABEL: name: LowestInMiddle51# GFX9: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1120052# GFX9: [[BASE_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_5:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_1]]53# GFX9: [[BASE_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_64_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_5]]54# GFX9: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE_LO]], %subreg.sub0, [[BASE_HI]], %subreg.sub155# GFX9: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -3200, 056#57# GFX9: [[S_MOV_B32_2:%[0-9]+]]:sgpr_32 = S_MOV_B32 640058# GFX9: [[BASE1_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_7:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_2]]59# GFX9: [[BASE1_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_64_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_7]]60# GFX9: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE1_LO]], %subreg.sub0, [[BASE1_HI]], %subreg.sub161# GFX9: [[GLOBAL_LOAD_DWORDX2_1:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE3]], 0, 0,62# GFX9: [[GLOBAL_LOAD_DWORDX2_2:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 0, 0,63 64# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 065# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 066# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 067 68 69name: LowestInMiddle70body: |71 bb.0.entry:72 %0:sgpr_64 = COPY $sgpr0_sgpr173 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 074 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9975 %4:sreg_32_xm0 = COPY $sgpr10176 %5:sreg_32_xm0 = S_MOV_B32 077 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %378 $sgpr4 = COPY %479 $vgpr0 = V_MOV_B32_e32 0, implicit $exec80 %6:vreg_64 = COPY $vgpr0_vgpr181 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec82 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec83 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub184 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec85 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec86 %12:sgpr_32 = COPY %1.sub187 %13:vgpr_32 = COPY %588 %14:vgpr_32, %15:sreg_64_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec89 %16:vgpr_32 = COPY %1290 %17:vgpr_32, dead %18:sreg_64_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec91 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub192 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec93 %21:vgpr_32, %22:sreg_64_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec94 %23:vgpr_32, dead %24:sreg_64_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec95 %25:sgpr_32 = S_MOV_B32 800096 %26:vgpr_32, %27:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %25, 0, implicit $exec97 %28:vgpr_32, dead %29:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %27, 0, implicit $exec98 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub199 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec100 %32:sgpr_32 = S_MOV_B32 6400101 %33:vgpr_32, %34:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %32, 0, implicit $exec102 %35:vgpr_32, dead %36:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %34, 0, implicit $exec103 %37:vreg_64 = REG_SEQUENCE %33, %subreg.sub0, %35, %subreg.sub1104 %38:vreg_64 = GLOBAL_LOAD_DWORDX2 %37, 0, 0, implicit $exec105 %39:sgpr_32 = S_MOV_B32 11200106 %40:vgpr_32, %41:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %39, 0, implicit $exec107 %42:vgpr_32, dead %43:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %41, 0, implicit $exec108 %44:vreg_64 = REG_SEQUENCE %40, %subreg.sub0, %42, %subreg.sub1109 %45:vreg_64 = GLOBAL_LOAD_DWORDX2 %44, 0, 0, implicit $exec110...111---112 113# GCN-LABEL: name: NegativeDistance114# GFX9: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 10240115# GFX9: [[V_ADD_CO_U32_e64_4:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_5:%[0-9]+]]:sreg_64_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_1]]116# GFX9: [[BASE_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_64_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_5]]117# GFX9: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[V_ADD_CO_U32_e64_4]], %subreg.sub0, [[BASE_HI]], %subreg.sub1118# GFX9: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -4096, 0119# GFX9: [[GLOBAL_LOAD_DWORDX2_1:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -2048, 0120# GFX9: [[GLOBAL_LOAD_DWORDX2_2:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 0, 0121 122# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 0123# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 0124# GFX8: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 0125 126name: NegativeDistance127body: |128 bb.0.entry:129 %0:sgpr_64 = COPY $sgpr0_sgpr1130 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0131 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99132 %4:sreg_32_xm0 = COPY $sgpr101133 %5:sreg_32_xm0 = S_MOV_B32 0134 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %3135 $sgpr4 = COPY %4136 $vgpr0 = V_MOV_B32_e32 0, implicit $exec137 %6:vreg_64 = COPY $vgpr0_vgpr1138 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec139 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec140 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub1141 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec142 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec143 %12:sgpr_32 = COPY %1.sub1144 %13:vgpr_32 = COPY %5145 %14:vgpr_32, %15:sreg_64_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec146 %16:vgpr_32 = COPY %12147 %17:vgpr_32, dead %18:sreg_64_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec148 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub1149 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec150 %21:vgpr_32, %22:sreg_64_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec151 %23:vgpr_32, dead %24:sreg_64_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec152 %25:sgpr_32 = S_MOV_B32 6144153 %26:vgpr_32, %27:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %25, 0, implicit $exec154 %28:vgpr_32, dead %29:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %27, 0, implicit $exec155 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub1156 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec157 %32:sgpr_32 = S_MOV_B32 8192158 %33:vgpr_32, %34:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %32, 0, implicit $exec159 %35:vgpr_32, dead %36:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %34, 0, implicit $exec160 %37:vreg_64 = REG_SEQUENCE %33, %subreg.sub0, %35, %subreg.sub1161 %38:vreg_64 = GLOBAL_LOAD_DWORDX2 %37, 0, 0, implicit $exec162 %39:sgpr_32 = S_MOV_B32 10240163 %40:vgpr_32, %41:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %39, 0, implicit $exec164 %42:vgpr_32, dead %43:sreg_64_xexec = V_ADDC_U32_e64 %23, 0, killed %41, 0, implicit $exec165 %44:vreg_64 = REG_SEQUENCE %40, %subreg.sub0, %42, %subreg.sub1166 %45:vreg_64 = GLOBAL_LOAD_DWORDX2 %44, 0, 0, implicit $exec167...168---169 170# Tests for a successful compilation.171name: assert_hit172body: |173 bb.0.entry:174 %0:sgpr_64 = COPY $sgpr0_sgpr1175 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0176 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99177 %4:sreg_32_xm0 = COPY $sgpr101178 %5:sreg_32_xm0 = S_MOV_B32 0179 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %3180 $sgpr4 = COPY %4181 $vgpr0 = V_MOV_B32_e32 0, implicit $exec182 %6:vreg_64 = COPY $vgpr0_vgpr1183 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec184 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec185 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub1186 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec187 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec188 %12:sgpr_32 = COPY %1.sub1189 %13:vgpr_32 = COPY %5190 %14:vgpr_32, %15:sreg_64_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec191 %16:vgpr_32 = COPY %12192 %17:vgpr_32, dead %18:sreg_64_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec193 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub1194 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec195 %21:vgpr_32, %22:sreg_64_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec196 %23:vgpr_32, dead %24:sreg_64_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec197 198 %25:sgpr_32 = S_MOV_B32 6144199 %26:vgpr_32, %27:sreg_64_xexec = V_ADD_CO_U32_e64 %21, %25, 0, implicit $exec200 %28:vgpr_32, dead %29:sreg_64_xexec = V_ADDC_U32_e64 %23, 4294967295, killed %27, 0, implicit $exec201 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub1202 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec203...204---205 206# GCN-LABEL: name: diffoporder_add_store207# GFX9: GLOBAL_STORE_DWORD %{{[0-9]+}}, %0.sub0, 1000, 0,208# GFX9: GLOBAL_STORE_DWORD %{{[0-9]+}}, %0.sub1, 0, 0,209 210# GFX8: GLOBAL_STORE_DWORD %{{[0-9]+}}, %0.sub0, 0, 0211# GFX8: GLOBAL_STORE_DWORD %{{[0-9]+}}, %0.sub1, 0, 0212 213name: diffoporder_add_store214body: |215 bb.0.entry:216 217 %0:vreg_64 = COPY $vgpr0_vgpr1218 219 %1:sgpr_32 = S_MOV_B32 4000220 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec221 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec222 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1223 GLOBAL_STORE_DWORD %6, %0.sub0, 0, 0, implicit $exec224 225 %8:sgpr_32 = S_MOV_B32 3000226 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec227 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec228 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1229 GLOBAL_STORE_DWORD %13, %0.sub1, 0, 0, implicit $exec230...231---232 233# GCN-LABEL: name: diffoporder_add_flat_load234# GFX9: FLAT_LOAD_DWORD %{{[0-9]+}}, 1000, 0,235# GFX9: FLAT_LOAD_DWORD %{{[0-9]+}}, 0, 0,236 237# GFX8: FLAT_LOAD_DWORD %{{[0-9]+}}, 0, 0,238# GFX8: FLAT_LOAD_DWORD %{{[0-9]+}}, 0, 0,239 240name: diffoporder_add_flat_load241body: |242 bb.0.entry:243 244 %0:vreg_64 = COPY $vgpr0_vgpr1245 246 %1:sgpr_32 = S_MOV_B32 4000247 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec248 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec249 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1250 %14:vgpr_32 = FLAT_LOAD_DWORD %6, 0, 0, implicit $exec, implicit $flat_scr251 252 %8:sgpr_32 = S_MOV_B32 3000253 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec254 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec255 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1256 %15:vgpr_32 = FLAT_LOAD_DWORD %13, 0, 0, implicit $exec, implicit $flat_scr257...258---259 260# GCN-LABEL: name: diffoporder_add_flat_store261# GFX9: FLAT_STORE_DWORD %{{[0-9]+}}, %0.sub0, 1000, 0,262# GFX9: FLAT_STORE_DWORD %{{[0-9]+}}, %0.sub1, 0, 0,263 264# GFX8: FLAT_STORE_DWORD %{{[0-9]+}}, %0.sub0, 0, 0,265# GFX8: FLAT_STORE_DWORD %{{[0-9]+}}, %0.sub1, 0, 0,266 267name: diffoporder_add_flat_store268body: |269 bb.0.entry:270 271 %0:vreg_64 = COPY $vgpr0_vgpr1272 273 %1:sgpr_32 = S_MOV_B32 4000274 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec275 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec276 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1277 FLAT_STORE_DWORD %6, %0.sub0, 0, 0, implicit $exec, implicit $flat_scr278 279 %8:sgpr_32 = S_MOV_B32 3000280 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec281 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec282 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1283 FLAT_STORE_DWORD %13, %0.sub1, 0, 0, implicit $exec, implicit $flat_scr284...285 286---287# GCN-LABEL: name: diffoporder_add_global_atomic_cmpswap288# GFX9: GLOBAL_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 1000, 0,289# GFX9: GLOBAL_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 0, 0,290 291# GFX8: GLOBAL_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 0, 0,292# GFX8: GLOBAL_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 0, 0,293 294name: diffoporder_add_global_atomic_cmpswap295body: |296 bb.0.entry:297 298 %0:vreg_64 = COPY $vgpr0_vgpr1299 300 %1:sgpr_32 = S_MOV_B32 4000301 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec302 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec303 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1304 GLOBAL_ATOMIC_CMPSWAP %6:vreg_64, %0:vreg_64, 0, 0, implicit $exec305 306 %8:sgpr_32 = S_MOV_B32 3000307 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec308 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec309 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1310 GLOBAL_ATOMIC_CMPSWAP %13:vreg_64, %0:vreg_64, 0, 0, implicit $exec311...312 313---314# GCN-LABEL: name: diffoporder_add_flat_atomic_cmpswap315# GFX9: FLAT_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 1000, 0,316# GFX9: FLAT_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 0, 0,317 318# GFX8: FLAT_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 0, 0,319# GFX8: FLAT_ATOMIC_CMPSWAP %{{[0-9]+}}, %0, 0, 0,320 321name: diffoporder_add_flat_atomic_cmpswap322body: |323 bb.0.entry:324 325 %0:vreg_64 = COPY $vgpr0_vgpr1326 327 %1:sgpr_32 = S_MOV_B32 4000328 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec329 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec330 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1331 FLAT_ATOMIC_CMPSWAP %6:vreg_64, %0:vreg_64, 0, 0, implicit $exec, implicit $flat_scr332 333 334 %8:sgpr_32 = S_MOV_B32 3000335 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec336 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec337 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1338 FLAT_ATOMIC_CMPSWAP %13:vreg_64, %0:vreg_64, 0, 0, implicit $exec, implicit $flat_scr339...340 341---342# GCN-LABEL: name: diffoporder_add_global_atomic_add343# GFX9: GLOBAL_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 1000, 0,344# GFX9: GLOBAL_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 0, 0,345 346# GFX8: GLOBAL_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 0, 0,347# GFX8: GLOBAL_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 0, 0,348 349name: diffoporder_add_global_atomic_add350body: |351 bb.0.entry:352 353 %0:vreg_64 = COPY $vgpr0_vgpr1354 355 %1:sgpr_32 = S_MOV_B32 4000356 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec357 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec358 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1359 GLOBAL_ATOMIC_ADD %6:vreg_64, %0.sub0, 0, 0, implicit $exec360 361 %8:sgpr_32 = S_MOV_B32 3000362 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec363 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec364 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1365 GLOBAL_ATOMIC_ADD %13:vreg_64, %0.sub0, 0, 0, implicit $exec366...367 368---369# GCN-LABEL: name: diffoporder_add_flat_atomic_add370# GFX9: FLAT_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 1000, 0,371# GFX9: FLAT_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 0, 0,372 373# GFX8: FLAT_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 0, 0,374# GFX8: FLAT_ATOMIC_ADD %{{[0-9]+}}, %0.sub0, 0, 0,375 376name: diffoporder_add_flat_atomic_add377body: |378 bb.0.entry:379 380 %0:vreg_64 = COPY $vgpr0_vgpr1381 382 %1:sgpr_32 = S_MOV_B32 4000383 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec384 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec385 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1386 FLAT_ATOMIC_ADD %6:vreg_64, %0.sub0, 0, 0, implicit $exec, implicit $flat_scr387 388 389 %8:sgpr_32 = S_MOV_B32 3000390 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec391 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec392 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1393 FLAT_ATOMIC_ADD %13:vreg_64, %0.sub0, 0, 0, implicit $exec, implicit $flat_scr394...395 396---397# GCN-LABEL: name: diffoporder_add_global_atomic_add_rtn398# GFX9: GLOBAL_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 1000, 0,399# GFX9: GLOBAL_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 0, 0,400 401# GFX8: GLOBAL_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 0, 0,402# GFX8: GLOBAL_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 0, 0,403 404name: diffoporder_add_global_atomic_add_rtn405body: |406 bb.0.entry:407 408 %0:vreg_64 = COPY $vgpr0_vgpr1409 410 %1:sgpr_32 = S_MOV_B32 4000411 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec412 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec413 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1414 %14:vgpr_32 = GLOBAL_ATOMIC_ADD_RTN %6:vreg_64, %0.sub0, 0, 0, implicit $exec415 416 %8:sgpr_32 = S_MOV_B32 3000417 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec418 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec419 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1420 %15:vgpr_32 = GLOBAL_ATOMIC_ADD_RTN %13:vreg_64, %0.sub0, 0, 0, implicit $exec421...422 423---424# GCN-LABEL: name: diffoporder_add_flat_atomic_add_rtn425# GFX9: FLAT_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 1000, 0,426# GFX9: FLAT_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 0, 0,427 428# GFX8: FLAT_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 0, 0,429# GFX8: FLAT_ATOMIC_ADD_RTN %{{[0-9]+}}, %0.sub0, 0, 0,430 431name: diffoporder_add_flat_atomic_add_rtn432body: |433 bb.0.entry:434 435 %0:vreg_64 = COPY $vgpr0_vgpr1436 437 %1:sgpr_32 = S_MOV_B32 4000438 %2:vgpr_32, %3:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec439 %4:vgpr_32, dead %5:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec440 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1441 %14:vgpr_32 = FLAT_ATOMIC_ADD_RTN %6:vreg_64, %0.sub0, 0, 0, implicit $exec, implicit $flat_scr442 443 444 %8:sgpr_32 = S_MOV_B32 3000445 %9:vgpr_32, %10:sreg_64_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec446 %11:vgpr_32, dead %12:sreg_64_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec447 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1448 %15:vgpr_32 = FLAT_ATOMIC_ADD_RTN %13:vreg_64, %0.sub0, 0, 0, implicit $exec, implicit $flat_scr449...450 451---452# GCN-LABEL: name: negative_offset_nullptr453# GCN: V_ADD_CO_U32_e64 -1, 0, 0454# GCN: V_ADDC_U32_e64 -1, %{{[0-9]+}}, %{{[0-9]+}}, 0455 456name: negative_offset_nullptr457body: |458 bb.0:459 %0:sreg_64 = S_MOV_B64 $src_private_base460 %1:sreg_32 = S_MOV_B32 0461 %2:sreg_64 = REG_SEQUENCE %1, %subreg.sub0, %0.sub1, %subreg.sub1462 %3:vgpr_32, %4:sreg_64_xexec = V_ADD_CO_U32_e64 -1, 0, 0, implicit $exec463 %5:vgpr_32 = COPY %2.sub1464 %6:vgpr_32, %7:sreg_64 = V_ADDC_U32_e64 -1, %5, %4, 0, implicit $exec465 %8:vreg_64 = REG_SEQUENCE %3, %subreg.sub0, %6, %subreg.sub1466 %9:vgpr_32 = FLAT_LOAD_UBYTE %8, 0, 0, implicit $exec, implicit $flat_scr467 S_ENDPGM 0, implicit %9468...469