brintos

brintos / llvm-project-archived public Read only

0
0
Text · 21.3 KiB · aa32e21 Raw
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