234 lines · plain
1# RUN: llc -mtriple=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefixes=GCN,GFX10 %s2# RUN: llc -mtriple=amdgcn -mcpu=gfx1100 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck -check-prefixes=GCN,GFX11 %s3 4# GCN-LABEL: name: diffoporder_add5# GCN: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, -2048, 06# GCN: %{{[0-9]+}}:vreg_64 = GLOBAL_LOAD_DWORDX2 %{{[0-9]+}}, 0, 07 8name: diffoporder_add9body: |10 bb.0.entry:11 %0:sgpr_64 = COPY $sgpr0_sgpr112 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 013 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9914 %4:sreg_32_xm0 = COPY $sgpr10115 %5:sreg_32_xm0 = S_MOV_B32 016 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %317 $sgpr4 = COPY %418 $vgpr0 = V_MOV_B32_e32 0, implicit $exec19 %6:vreg_64 = COPY $vgpr0_vgpr120 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec21 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec22 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub123 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec24 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec25 %12:sgpr_32 = COPY %1.sub126 %13:vgpr_32 = COPY %527 %14:vgpr_32, %15:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec28 %16:vgpr_32 = COPY %1229 %17:vgpr_32, dead %18:sreg_32_xm0_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec30 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub131 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec32 %21:vgpr_32, %22:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec33 %23:vgpr_32, dead %24:sreg_32_xm0_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec34 %25:sgpr_32 = S_MOV_B32 409635 %26:vgpr_32, %27:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %25, %21, 0, implicit $exec36 %28:vgpr_32, dead %29:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %27, 0, implicit $exec37 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub138 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec39 %32:sgpr_32 = S_MOV_B32 614440 %33:vgpr_32, %34:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %32, 0, implicit $exec41 %35:vgpr_32, dead %36:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %34, 0, implicit $exec42 %37:vreg_64 = REG_SEQUENCE %33, %subreg.sub0, %35, %subreg.sub143 %38:vreg_64 = GLOBAL_LOAD_DWORDX2 %37, 0, 0, implicit $exec44...45---46 47# GCN-LABEL: name: LowestInMiddle48# GFX10: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 640049# GFX11: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 1120050 51# GCN: [[BASE_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_5:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_1]]52# GCN: [[BASE_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_32_xm0_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_5]]53# GCN: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE_LO]], %subreg.sub0, [[BASE_HI]], %subreg.sub154# GFX10: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 1600, 055# GFX11: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -3200, 056#57# GFX11: [[S_MOV_B32_2:%[0-9]+]]:sgpr_32 = S_MOV_B32 640058# GFX11: [[BASE1_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_7:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_2]]59# GFX11: [[BASE1_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_32_xm0_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_7]]60# GFX11: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE1_LO]], %subreg.sub0, [[BASE1_HI]], %subreg.sub161# GFX10: [[GLOBAL_LOAD_DWORDX2_1:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 0, 0,62# GFX11: [[GLOBAL_LOAD_DWORDX2_1:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE3]], 0, 0,63#64# GFX10: [[S_MOV_B32_2:%[0-9]+]]:sgpr_32 = S_MOV_B32 1120065# GFX10: [[BASE1_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_7:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_2]]66# GFX10: [[BASE1_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_32_xm0_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_7]]67# GFX10: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE1_LO]], %subreg.sub0, [[BASE1_HI]], %subreg.sub168# GFX10: [[GLOBAL_LOAD_DWORDX2_2:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE3]], 0, 0,69# GFX11: [[GLOBAL_LOAD_DWORDX2_2:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 0, 0,70 71name: LowestInMiddle72body: |73 bb.0.entry:74 %0:sgpr_64 = COPY $sgpr0_sgpr175 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 076 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr9977 %4:sreg_32_xm0 = COPY $sgpr10178 %5:sreg_32_xm0 = S_MOV_B32 079 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %380 $sgpr4 = COPY %481 $vgpr0 = V_MOV_B32_e32 0, implicit $exec82 %6:vreg_64 = COPY $vgpr0_vgpr183 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec84 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec85 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub186 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec87 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec88 %12:sgpr_32 = COPY %1.sub189 %13:vgpr_32 = COPY %590 %14:vgpr_32, %15:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec91 %16:vgpr_32 = COPY %1292 %17:vgpr_32, dead %18:sreg_32_xm0_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec93 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub194 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec95 %21:vgpr_32, %22:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec96 %23:vgpr_32, dead %24:sreg_32_xm0_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec97 %25:sgpr_32 = S_MOV_B32 800098 %26:vgpr_32, %27:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %25, 0, implicit $exec99 %28:vgpr_32, dead %29:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %27, 0, implicit $exec100 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub1101 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec102 %32:sgpr_32 = S_MOV_B32 6400103 %33:vgpr_32, %34:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %32, 0, implicit $exec104 %35:vgpr_32, dead %36:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %34, 0, implicit $exec105 %37:vreg_64 = REG_SEQUENCE %33, %subreg.sub0, %35, %subreg.sub1106 %38:vreg_64 = GLOBAL_LOAD_DWORDX2 %37, 0, 0, implicit $exec107 %39:sgpr_32 = S_MOV_B32 11200108 %40:vgpr_32, %41:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %39, 0, implicit $exec109 %42:vgpr_32, dead %43:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %41, 0, implicit $exec110 %44:vreg_64 = REG_SEQUENCE %40, %subreg.sub0, %42, %subreg.sub1111 %45:vreg_64 = GLOBAL_LOAD_DWORDX2 %44, 0, 0, implicit $exec112...113---114 115# GCN-LABEL: name: NegativeDistance116# GFX10: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 8192117# GFX11: [[S_MOV_B32_1:%[0-9]+]]:sreg_32 = S_MOV_B32 10240118# GCN: [[BASE_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_5:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_1]]119# GCN: [[BASE_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_32_xm0_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_5]]120# GCN: [[REG_SEQUENCE2:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE_LO]], %subreg.sub0, [[BASE_HI]], %subreg.sub1121# GFX10: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -2048, 0122# GFX11: [[GLOBAL_LOAD_DWORDX2_:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -4096, 0123# GFX10: [[GLOBAL_LOAD_DWORDX2_1:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 0, 0124# GFX11: [[GLOBAL_LOAD_DWORDX2_1:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], -2048, 0125# GFX10: [[S_MOV_B32_2:%[0-9]+]]:sgpr_32 = S_MOV_B32 10240126# GFX10: [[BASE1_LO:%[0-9]+]]:vgpr_32, [[V_ADD_CO_U32_e64_7:%[0-9]+]]:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %{{[0-9]+}}, [[S_MOV_B32_2]]127# GFX10: [[BASE1_HI:%[0-9]+]]:vgpr_32, dead %{{[0-9]+}}:sreg_32_xm0_xexec = V_ADDC_U32_e64 %{{[0-9]+}}, 0, killed [[V_ADD_CO_U32_e64_7]]128# GFX10: [[REG_SEQUENCE3:%[0-9]+]]:vreg_64 = REG_SEQUENCE [[BASE1_LO]], %subreg.sub0, [[BASE1_HI]], %subreg.sub1129# GFX10: [[GLOBAL_LOAD_DWORDX2_2:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE3]], 0, 0130# GFX11: [[GLOBAL_LOAD_DWORDX2_2:%[0-9]+]]:vreg_64 = GLOBAL_LOAD_DWORDX2 [[REG_SEQUENCE2]], 0, 0131 132name: NegativeDistance133body: |134 bb.0.entry:135 %0:sgpr_64 = COPY $sgpr0_sgpr1136 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0137 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99138 %4:sreg_32_xm0 = COPY $sgpr101139 %5:sreg_32_xm0 = S_MOV_B32 0140 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %3141 $sgpr4 = COPY %4142 $vgpr0 = V_MOV_B32_e32 0, implicit $exec143 %6:vreg_64 = COPY $vgpr0_vgpr1144 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec145 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec146 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub1147 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec148 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec149 %12:sgpr_32 = COPY %1.sub1150 %13:vgpr_32 = COPY %5151 %14:vgpr_32, %15:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec152 %16:vgpr_32 = COPY %12153 %17:vgpr_32, dead %18:sreg_32_xm0_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec154 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub1155 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec156 %21:vgpr_32, %22:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec157 %23:vgpr_32, dead %24:sreg_32_xm0_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec158 %25:sgpr_32 = S_MOV_B32 6144159 %26:vgpr_32, %27:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %25, 0, implicit $exec160 %28:vgpr_32, dead %29:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %27, 0, implicit $exec161 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub1162 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec163 %32:sgpr_32 = S_MOV_B32 8192164 %33:vgpr_32, %34:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %32, 0, implicit $exec165 %35:vgpr_32, dead %36:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %34, 0, implicit $exec166 %37:vreg_64 = REG_SEQUENCE %33, %subreg.sub0, %35, %subreg.sub1167 %38:vreg_64 = GLOBAL_LOAD_DWORDX2 %37, 0, 0, implicit $exec168 %39:sgpr_32 = S_MOV_B32 10240169 %40:vgpr_32, %41:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %39, 0, implicit $exec170 %42:vgpr_32, dead %43:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 0, killed %41, 0, implicit $exec171 %44:vreg_64 = REG_SEQUENCE %40, %subreg.sub0, %42, %subreg.sub1172 %45:vreg_64 = GLOBAL_LOAD_DWORDX2 %44, 0, 0, implicit $exec173...174---175 176# Tests for a successful compilation.177name: assert_hit178body: |179 bb.0.entry:180 %0:sgpr_64 = COPY $sgpr0_sgpr1181 %1:sreg_64_xexec = S_LOAD_DWORDX2_IMM %0, 36, 0182 %3:sgpr_128 = COPY $sgpr96_sgpr97_sgpr98_sgpr99183 %4:sreg_32_xm0 = COPY $sgpr101184 %5:sreg_32_xm0 = S_MOV_B32 0185 $sgpr0_sgpr1_sgpr2_sgpr3 = COPY %3186 $sgpr4 = COPY %4187 $vgpr0 = V_MOV_B32_e32 0, implicit $exec188 %6:vreg_64 = COPY $vgpr0_vgpr1189 %7:vgpr_32 = V_AND_B32_e32 255, %6.sub0, implicit $exec190 %8:vgpr_32 = V_MOV_B32_e32 0, implicit $exec191 %9:vreg_64 = REG_SEQUENCE killed %7, %subreg.sub0, %8, %subreg.sub1192 %10:vgpr_32 = V_LSHLREV_B32_e64 7, %6.sub0, implicit $exec193 %11:vgpr_32 = V_AND_B32_e32 -32768, killed %10, implicit $exec194 %12:sgpr_32 = COPY %1.sub1195 %13:vgpr_32 = COPY %5196 %14:vgpr_32, %15:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %1.sub0, %11, 0, implicit $exec197 %16:vgpr_32 = COPY %12198 %17:vgpr_32, dead %18:sreg_32_xm0_xexec = V_ADDC_U32_e64 %16, %13, killed %15, 0, implicit $exec199 %19:vreg_64 = REG_SEQUENCE %14, %subreg.sub0, %17, %subreg.sub1200 %20:vreg_64 = V_LSHLREV_B64_e64 3, %9, implicit $exec201 %21:vgpr_32, %22:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %14, %20.sub0, 0, implicit $exec202 %23:vgpr_32, dead %24:sreg_32_xm0_xexec = V_ADDC_U32_e64 %17, %20.sub1, killed %22, 0, implicit $exec203 204 %25:sgpr_32 = S_MOV_B32 6144205 %26:vgpr_32, %27:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %21, %25, 0, implicit $exec206 %28:vgpr_32, dead %29:sreg_32_xm0_xexec = V_ADDC_U32_e64 %23, 4294967295, killed %27, 0, implicit $exec207 %30:vreg_64 = REG_SEQUENCE %26, %subreg.sub0, %28, %subreg.sub1208 %31:vreg_64 = GLOBAL_LOAD_DWORDX2 %30, 0, 0, implicit $exec209...210---211 212# GCN-LABEL: name: diffoporder_add_store213# GCN: GLOBAL_STORE_DWORD %{{[0-9]+}}, %0.sub0, 1000, 0214# GCN: GLOBAL_STORE_DWORD %{{[0-9]+}}, %0.sub1, 0, 0215 216name: diffoporder_add_store217body: |218 bb.0.entry:219 220 %0:vreg_64 = COPY $vgpr0_vgpr1221 222 %1:sgpr_32 = S_MOV_B32 4000223 %2:vgpr_32, %3:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %0.sub0, %1, 0, implicit $exec224 %4:vgpr_32, dead %5:sreg_32_xm0_xexec = V_ADDC_U32_e64 %0.sub1, 0, %3, 0, implicit $exec225 %6:vreg_64 = REG_SEQUENCE %2, %subreg.sub0, %4, %subreg.sub1226 GLOBAL_STORE_DWORD %6, %0.sub0, 0, 0, implicit $exec227 228 %8:sgpr_32 = S_MOV_B32 3000229 %9:vgpr_32, %10:sreg_32_xm0_xexec = V_ADD_CO_U32_e64 %0.sub0, %8, 0, implicit $exec230 %11:vgpr_32, dead %12:sreg_32_xm0_xexec = V_ADDC_U32_e64 %0.sub1, 0, %10, 0, implicit $exec231 %13:vreg_64 = REG_SEQUENCE %9, %subreg.sub0, %11, %subreg.sub1232 GLOBAL_STORE_DWORD %13, %0.sub1, 0, 0, implicit $exec233...234