brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.4 KiB · 0d8334c Raw
553 lines · plain
1# RUN: llc -mtriple=amdgcn -verify-machineinstrs -run-pass si-optimize-exec-masking -o -  %s | FileCheck %s2 3--- |4  define amdgpu_kernel void @optimize_if_and_saveexec_xor(i32 %z, i32 %v) {5  main_body:6    br i1 poison, label %if, label %end7 8  if:                                               ; preds = %main_body9    %v.if = load volatile i32, ptr addrspace(1) poison10    br label %end11 12  end:                                              ; preds = %if, %main_body13    ret void14  }15 16  define amdgpu_kernel void @optimize_if_and_saveexec(i32 %z, i32 %v) {17  main_body:18    br i1 poison, label %if, label %end19 20  if:21    br label %end22 23  end:24    ret void25  }26 27  define amdgpu_kernel void @optimize_if_or_saveexec(i32 %z, i32 %v) {28  main_body:29    br i1 poison, label %if, label %end30 31  if:32    br label %end33 34  end:35    ret void36  }37 38  define amdgpu_kernel void @optimize_if_and_saveexec_xor_valu_middle(i32 %z, i32 %v) {39  main_body:40    br i1 poison, label %if, label %end41 42  if:                                               ; preds = %main_body43    br label %end44 45  end:                                              ; preds = %if, %main_body46    ret void47  }48 49  define amdgpu_kernel void @optimize_if_and_saveexec_xor_wrong_reg(i32 %z, i32 %v) {50  main_body:51    br i1 poison, label %if, label %end52 53  if:54    br label %end55 56  end:57    ret void58  }59 60  define amdgpu_kernel void @optimize_if_and_saveexec_xor_modify_copy_to_exec(i32 %z, i32 %v) {61  main_body:62    br i1 poison, label %if, label %end63 64  if:65    br label %end66 67  end:68    ret void69  }70 71  define amdgpu_kernel void @optimize_if_and_saveexec_xor_live_out_setexec(i32 %z, i32 %v) {72  main_body:73    br i1 poison, label %if, label %end74 75  if:76    br label %end77 78  end:79    ret void80  }81 82  define amdgpu_kernel void @optimize_if_unknown_saveexec(i32 %z, i32 %v) {83  main_body:84    br i1 poison, label %if, label %end85 86  if:87    br label %end88 89  end:90    ret void91  }92 93  define amdgpu_kernel void @optimize_if_andn2_saveexec(i32 %z, i32 %v) {94  main_body:95    br i1 poison, label %if, label %end96 97  if:98    br label %end99 100  end:101    ret void102  }103 104  define amdgpu_kernel void @optimize_if_andn2_saveexec_no_commute(i32 %z, i32 %v) {105  main_body:106    br i1 poison, label %if, label %end107 108  if:109    br label %end110 111  end:112    ret void113  }114 115  define amdgpu_kernel void @if_and_xor_read_exec_copy_subreg() {116  main_body:117    br i1 poison, label %if, label %end118 119  if:                                               ; preds = %main_body120    br label %end121 122  end:                                              ; preds = %if, %main_body123    ret void124  }125 126...127---128# CHECK-LABEL: name: optimize_if_and_saveexec_xor{{$}}129# CHECK: $sgpr0_sgpr1 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec130# CHECK-NEXT: $sgpr0_sgpr1 = S_XOR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc131# CHECK-NEXT: S_CBRANCH_EXECZ132 133name:            optimize_if_and_saveexec_xor134liveins:135  - { reg: '$vgpr0' }136body:             |137  bb.0.main_body:138    liveins: $vgpr0139 140    $sgpr0_sgpr1 = COPY $exec141    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec142    $vgpr0 = V_MOV_B32_e32 4, implicit $exec143    $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc144    $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc145    $exec = S_MOV_B64_term killed $sgpr2_sgpr3146    S_CBRANCH_EXECZ %bb.2, implicit $exec147    S_BRANCH %bb.1148 149  bb.1.if:150    liveins: $sgpr0_sgpr1151 152    $sgpr7 = S_MOV_B32 61440153    $sgpr6 = S_MOV_B32 -1154    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec155 156  bb.2.end:157    liveins: $vgpr0, $sgpr0_sgpr1158 159    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc160    $sgpr3 = S_MOV_B32 61440161    $sgpr2 = S_MOV_B32 -1162    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec163    S_ENDPGM 0164 165...166---167# CHECK-LABEL: name: optimize_if_and_saveexec{{$}}168# CHECK: $sgpr0_sgpr1 = S_AND_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec169# CHECK-NEXT: S_CBRANCH_EXECZ170 171name:            optimize_if_and_saveexec172liveins:173  - { reg: '$vgpr0' }174body:             |175  bb.0.main_body:176    liveins: $vgpr0177 178    $sgpr0_sgpr1 = COPY $exec179    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec180    $vgpr0 = V_MOV_B32_e32 4, implicit $exec181    $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc182    $exec = S_MOV_B64_term killed $sgpr2_sgpr3183    S_CBRANCH_EXECZ %bb.2, implicit $exec184    S_BRANCH %bb.1185 186  bb.1.if:187    liveins: $sgpr0_sgpr1188 189    $sgpr7 = S_MOV_B32 61440190    $sgpr6 = S_MOV_B32 -1191    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec192 193  bb.2.end:194    liveins: $vgpr0, $sgpr0_sgpr1195 196    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc197    $sgpr3 = S_MOV_B32 61440198    $sgpr2 = S_MOV_B32 -1199    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec200    S_ENDPGM 0201 202...203---204# CHECK-LABEL: name: optimize_if_or_saveexec{{$}}205# CHECK: $sgpr0_sgpr1 = S_OR_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec206# CHECK-NEXT: S_CBRANCH_EXECZ207 208name:            optimize_if_or_saveexec209liveins:210  - { reg: '$vgpr0' }211body:             |212  bb.0.main_body:213    liveins: $vgpr0214 215    $sgpr0_sgpr1 = COPY $exec216    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec217    $vgpr0 = V_MOV_B32_e32 4, implicit $exec218    $sgpr2_sgpr3 = S_OR_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc219    $exec = S_MOV_B64_term killed $sgpr2_sgpr3220    S_CBRANCH_EXECZ %bb.2, implicit $exec221    S_BRANCH %bb.1222 223  bb.1.if:224    liveins: $sgpr0_sgpr1225 226    $sgpr7 = S_MOV_B32 61440227    $sgpr6 = S_MOV_B32 -1228    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec229 230  bb.2.end:231    liveins: $vgpr0, $sgpr0_sgpr1232 233    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc234    $sgpr3 = S_MOV_B32 61440235    $sgpr2 = S_MOV_B32 -1236    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec237    S_ENDPGM 0238 239...240---241# CHECK-LABEL: name: optimize_if_and_saveexec_xor_valu_middle242# CHECK: $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc243# CHECK-NEXT: BUFFER_STORE_DWORD_OFFSET $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec244# CHECK-NEXT: $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc245# CHECK-NEXT: $exec = COPY killed $sgpr2_sgpr3246# CHECK-NEXT: S_CBRANCH_EXECZ247name:            optimize_if_and_saveexec_xor_valu_middle248liveins:249  - { reg: '$vgpr0' }250body:             |251  bb.0.main_body:252    liveins: $vgpr0253 254    $sgpr0_sgpr1 = COPY $exec255    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec256    $vgpr0 = V_MOV_B32_e32 4, implicit $exec257    $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc258    BUFFER_STORE_DWORD_OFFSET $vgpr0, undef $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec259    $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc260    $exec = S_MOV_B64_term killed $sgpr2_sgpr3261    S_CBRANCH_EXECZ %bb.2, implicit $exec262    S_BRANCH %bb.1263 264  bb.1.if:265    liveins: $sgpr0_sgpr1266 267    $sgpr7 = S_MOV_B32 61440268    $sgpr6 = S_MOV_B32 -1269    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec270 271  bb.2.end:272    liveins: $vgpr0, $sgpr0_sgpr1273 274    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc275    $sgpr3 = S_MOV_B32 61440276    $sgpr2 = S_MOV_B32 -1277    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec278    S_ENDPGM 0279 280...281---282# CHECK-LABEL: name: optimize_if_and_saveexec_xor_wrong_reg{{$}}283# CHECK: $sgpr0_sgpr1 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc284# CHECK-NEXT: $sgpr0_sgpr1 = S_XOR_B64 undef $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc285# CHECK-NEXT: $exec = COPY $sgpr0_sgpr1286# CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec287name:            optimize_if_and_saveexec_xor_wrong_reg288liveins:289  - { reg: '$vgpr0' }290body:             |291  bb.0.main_body:292    liveins: $vgpr0293 294    $sgpr6 = S_MOV_B32 -1295    $sgpr7 = S_MOV_B32 61440296    $sgpr0_sgpr1 = COPY $exec297    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec298    $vgpr0 = V_MOV_B32_e32 4, implicit $exec299    $sgpr0_sgpr1 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc300    $sgpr0_sgpr1 = S_XOR_B64 undef $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc301    $exec = S_MOV_B64_term $sgpr0_sgpr1302    S_CBRANCH_EXECZ %bb.2, implicit $exec303    S_BRANCH %bb.1304 305  bb.1.if:306    liveins: $sgpr0_sgpr1 , $sgpr4_sgpr5_sgpr6_sgpr7307    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec308 309  bb.2.end:310    liveins: $vgpr0, $sgpr0_sgpr1, $sgpr4_sgpr5_sgpr6_sgpr7311 312    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc313    $sgpr3 = S_MOV_B32 61440314    $sgpr2 = S_MOV_B32 -1315    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec316    S_ENDPGM 0317 318...319---320# CHECK-LABEL: name: optimize_if_and_saveexec_xor_modify_copy_to_exec{{$}}321# CHECK: $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc322# CHECK-NEXT: $sgpr2_sgpr3 = S_OR_B64 killed $sgpr2_sgpr3, 1, implicit-def $scc323# CHECK-NEXT: $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc324# CHECK-NEXT: $exec = COPY killed $sgpr2_sgpr3325# CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec326 327name:            optimize_if_and_saveexec_xor_modify_copy_to_exec328liveins:329  - { reg: '$vgpr0' }330body:             |331  bb.0.main_body:332    liveins: $vgpr0333 334    $sgpr0_sgpr1 = COPY $exec335    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec336    $vgpr0 = V_MOV_B32_e32 4, implicit $exec337    $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc338    $sgpr2_sgpr3 = S_OR_B64 killed $sgpr2_sgpr3, 1, implicit-def $scc339    $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc340    $exec = S_MOV_B64_term killed $sgpr2_sgpr3341    S_CBRANCH_EXECZ %bb.2, implicit $exec342    S_BRANCH %bb.1343 344  bb.1.if:345    liveins: $sgpr0_sgpr1346 347    $sgpr7 = S_MOV_B32 61440348    $sgpr6 = S_MOV_B32 -1349    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec350 351  bb.2.end:352    liveins: $vgpr0, $sgpr0_sgpr1353 354    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc355    $sgpr0 = S_MOV_B32 0356    $sgpr1 = S_MOV_B32 1357    $sgpr2 = S_MOV_B32 -1358    $sgpr3 = S_MOV_B32 61440359    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec360    S_ENDPGM 0361 362...363---364# CHECK-LABEL: name: optimize_if_and_saveexec_xor_live_out_setexec{{$}}365# CHECK: $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc366# CHECK-NEXT: $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc367# CHECK-NEXT: $exec = COPY $sgpr2_sgpr3368# CHECK-NEXT: S_CBRANCH_EXECZ369name:            optimize_if_and_saveexec_xor_live_out_setexec370liveins:371  - { reg: '$vgpr0' }372body:             |373  bb.0.main_body:374    liveins: $vgpr0375 376    $sgpr0_sgpr1 = COPY $exec377    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec378    $vgpr0 = V_MOV_B32_e32 4, implicit $exec379    $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc380    $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc381    $exec = S_MOV_B64_term $sgpr2_sgpr3382    S_CBRANCH_EXECZ %bb.2, implicit $exec383    S_BRANCH %bb.1384 385  bb.1.if:386    liveins: $sgpr0_sgpr1, $sgpr2_sgpr3387    S_SLEEP 0, implicit $sgpr2_sgpr3388    $sgpr7 = S_MOV_B32 61440389    $sgpr6 = S_MOV_B32 -1390    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec391 392  bb.2.end:393    liveins: $vgpr0, $sgpr0_sgpr1394 395    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc396    $sgpr3 = S_MOV_B32 61440397    $sgpr2 = S_MOV_B32 -1398    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec399    S_ENDPGM 0400 401...402 403# CHECK-LABEL: name: optimize_if_unknown_saveexec{{$}}404# CHECK: $sgpr0_sgpr1 = COPY $exec405# CHECK: $sgpr2_sgpr3 = S_LSHR_B64 $sgpr0_sgpr1, killed $vcc_lo, implicit-def $scc406# CHECK-NEXT: $exec = COPY killed $sgpr2_sgpr3407# CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec408 409name:            optimize_if_unknown_saveexec410liveins:411  - { reg: '$vgpr0' }412body:             |413  bb.0.main_body:414    liveins: $vgpr0415 416    $sgpr0_sgpr1 = COPY $exec417    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec418    $vgpr0 = V_MOV_B32_e32 4, implicit $exec419    $sgpr2_sgpr3 = S_LSHR_B64 $sgpr0_sgpr1, killed $vcc_lo, implicit-def $scc420    $exec = S_MOV_B64_term killed $sgpr2_sgpr3421    S_CBRANCH_EXECZ %bb.2, implicit $exec422    S_BRANCH %bb.1423 424  bb.1.if:425    liveins: $sgpr0_sgpr1426 427    $sgpr7 = S_MOV_B32 61440428    $sgpr6 = S_MOV_B32 -1429    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec430 431  bb.2.end:432    liveins: $vgpr0, $sgpr0_sgpr1433 434    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc435    $sgpr3 = S_MOV_B32 61440436    $sgpr2 = S_MOV_B32 -1437    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec438    S_ENDPGM 0439 440...441---442# CHECK-LABEL: name: optimize_if_andn2_saveexec{{$}}443# CHECK: $sgpr0_sgpr1 = S_ANDN2_SAVEEXEC_B64 $vcc, implicit-def $exec, implicit-def $scc, implicit $exec444# CHECK-NEXT: S_CBRANCH_EXECZ445 446name:            optimize_if_andn2_saveexec447liveins:448  - { reg: '$vgpr0' }449body:             |450  bb.0.main_body:451    liveins: $vgpr0452 453    $sgpr0_sgpr1 = COPY $exec454    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec455    $vgpr0 = V_MOV_B32_e32 4, implicit $exec456    $sgpr2_sgpr3 = S_ANDN2_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc457    $exec = S_MOV_B64_term killed $sgpr2_sgpr3458    S_CBRANCH_EXECZ %bb.2, implicit $exec459    S_BRANCH %bb.1460 461  bb.1.if:462    liveins: $sgpr0_sgpr1463 464    $sgpr7 = S_MOV_B32 61440465    $sgpr6 = S_MOV_B32 -1466    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec467 468  bb.2.end:469    liveins: $vgpr0, $sgpr0_sgpr1470 471    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc472    $sgpr3 = S_MOV_B32 61440473    $sgpr2 = S_MOV_B32 -1474    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec475    S_ENDPGM 0476 477...478---479# CHECK-LABEL: name: optimize_if_andn2_saveexec_no_commute{{$}}480# CHECK: $sgpr2_sgpr3 = S_ANDN2_B64 killed $vcc, $sgpr0_sgpr1, implicit-def $scc481# CHECK-NEXT: $exec = COPY killed $sgpr2_sgpr3482# CHECK-NEXT: S_CBRANCH_EXECZ %bb.2, implicit $exec483name:            optimize_if_andn2_saveexec_no_commute484liveins:485  - { reg: '$vgpr0' }486body:             |487  bb.0.main_body:488    liveins: $vgpr0489 490    $sgpr0_sgpr1 = COPY $exec491    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec492    $vgpr0 = V_MOV_B32_e32 4, implicit $exec493    $sgpr2_sgpr3 = S_ANDN2_B64 killed $vcc, $sgpr0_sgpr1, implicit-def $scc494    $exec = S_MOV_B64_term killed $sgpr2_sgpr3495    S_CBRANCH_EXECZ %bb.2, implicit $exec496    S_BRANCH %bb.1497 498  bb.1.if:499    liveins: $sgpr0_sgpr1500 501    $sgpr7 = S_MOV_B32 61440502    $sgpr6 = S_MOV_B32 -1503    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec504 505  bb.2.end:506    liveins: $vgpr0, $sgpr0_sgpr1507 508    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc509    $sgpr3 = S_MOV_B32 61440510    $sgpr2 = S_MOV_B32 -1511    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec512    S_ENDPGM 0513 514...515---516# A read from exec copy subreg prevents optimization517# CHECK-LABEL: name: if_and_xor_read_exec_copy_subreg{{$}}518# CHECK: $sgpr0_sgpr1 = COPY $exec519# CHECK-NEXT: $sgpr4 = S_MOV_B32 $sgpr1520name:            if_and_xor_read_exec_copy_subreg521liveins:522  - { reg: '$vgpr0' }523body:             |524  bb.0.main_body:525    liveins: $vgpr0526 527    $sgpr0_sgpr1 = COPY $exec528    $sgpr4 = S_MOV_B32 $sgpr1529    $vcc = V_CMP_EQ_I32_e64 0, killed $vgpr0, implicit $exec530    $vgpr0 = V_MOV_B32_e32 4, implicit $exec531    $sgpr2_sgpr3 = S_AND_B64 $sgpr0_sgpr1, killed $vcc, implicit-def $scc532    $sgpr0_sgpr1 = S_XOR_B64 $sgpr2_sgpr3, killed $sgpr0_sgpr1, implicit-def $scc533    $exec = S_MOV_B64_term killed $sgpr2_sgpr3534    S_CBRANCH_EXECZ %bb.2, implicit $exec535    S_BRANCH %bb.1536 537  bb.1.if:538    liveins: $sgpr0_sgpr1539 540    $sgpr7 = S_MOV_B32 61440541    $sgpr6 = S_MOV_B32 -1542    $vgpr0 = BUFFER_LOAD_DWORD_OFFSET $sgpr4_sgpr5_sgpr6_sgpr7, 0, 0, 0, 0, implicit $exec543 544  bb.2.end:545    liveins: $vgpr0, $sgpr0_sgpr1546 547    $exec = S_OR_B64 $exec, killed $sgpr0_sgpr1, implicit-def $scc548    $sgpr3 = S_MOV_B32 61440549    $sgpr2 = S_MOV_B32 -1550    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr0_sgpr1_sgpr2_sgpr3, 0, 0, 0, 0, implicit $exec551    S_ENDPGM 0552...553