Home | History | Annotate | Download | only in AMDGPU
      1 # RUN: llc -march=amdgcn -mcpu=gfx803 -run-pass si-memory-legalizer %s -o - | FileCheck -check-prefix=GCN %s
      2 
      3 ---
      4 
      5 # GCN-LABEL: name: load_singlethread_unordered
      6 
      7 # GCN-LABEL: bb.0:
      8 # GCN-NOT:   S_WAITCNT
      9 # GCN:       DS_READ_B32
     10 # GCN-NOT:   S_WAITCNT
     11 # GCN:       FLAT_STORE_DWORD
     12 
     13 name:            load_singlethread_unordered
     14 body:             |
     15   bb.0:
     16     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
     17     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
     18     $m0 = S_MOV_B32 -1
     19     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
     20     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread") unordered 4 from `i32 addrspace(3)* undef`)
     21     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
     22     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
     23     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
     24     S_ENDPGM
     25 
     26 ...
     27 ---
     28 
     29 # GCN-LABEL: name: load_singlethread_monotonic
     30 
     31 # GCN-LABEL: bb.0:
     32 # GCN-NOT:   S_WAITCNT
     33 # GCN:       DS_READ_B32
     34 # GCN-NOT:   S_WAITCNT
     35 # GCN:       FLAT_STORE_DWORD
     36 
     37 name:            load_singlethread_monotonic
     38 body:             |
     39   bb.0:
     40     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
     41     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
     42     $m0 = S_MOV_B32 -1
     43     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
     44     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread") monotonic 4 from `i32 addrspace(3)* undef`)
     45     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
     46     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
     47     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
     48     S_ENDPGM
     49 
     50 ...
     51 ---
     52 
     53 # GCN-LABEL: name: load_singlethread_acquire
     54 
     55 # GCN-LABEL: bb.0:
     56 # GCN-NOT:   S_WAITCNT
     57 # GCN:       DS_READ_B32
     58 # GCN-NOT:   S_WAITCNT
     59 # GCN:       FLAT_STORE_DWORD
     60 
     61 name:            load_singlethread_acquire
     62 body:             |
     63   bb.0:
     64     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
     65     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
     66     $m0 = S_MOV_B32 -1
     67     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
     68     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread") acquire 4 from `i32 addrspace(3)* undef`)
     69     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
     70     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
     71     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
     72     S_ENDPGM
     73 
     74 ...
     75 ---
     76 
     77 # GCN-LABEL: name: load_singlethread_seq_cst
     78 
     79 # GCN-LABEL: bb.0:
     80 # GCN-NOT:   S_WAITCNT
     81 # GCN:       DS_READ_B32
     82 # GCN-NOT:   S_WAITCNT
     83 # GCN:       FLAT_STORE_DWORD
     84 
     85 name:            load_singlethread_seq_cst
     86 body:             |
     87   bb.0:
     88     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
     89     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
     90     $m0 = S_MOV_B32 -1
     91     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
     92     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("singlethread") seq_cst 4 from `i32 addrspace(3)* undef`)
     93     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
     94     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
     95     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
     96     S_ENDPGM
     97 
     98 ...
     99 ---
    100 
    101 # GCN-LABEL: name: load_wavefront_unordered
    102 
    103 # GCN-LABEL: bb.0:
    104 # GCN-NOT:   S_WAITCNT
    105 # GCN:       DS_READ_B32
    106 # GCN-NOT:   S_WAITCNT
    107 # GCN:       FLAT_STORE_DWORD
    108 
    109 name:            load_wavefront_unordered
    110 body:             |
    111   bb.0:
    112     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    113     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    114     $m0 = S_MOV_B32 -1
    115     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    116     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront") unordered 4 from `i32 addrspace(3)* undef`)
    117     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    118     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    119     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    120     S_ENDPGM
    121 
    122 ...
    123 ---
    124 
    125 # GCN-LABEL: name: load_wavefront_monotonic
    126 
    127 # GCN-LABEL: bb.0:
    128 # GCN-NOT:   S_WAITCNT
    129 # GCN:       DS_READ_B32
    130 # GCN-NOT:   S_WAITCNT
    131 # GCN:       FLAT_STORE_DWORD
    132 
    133 name:            load_wavefront_monotonic
    134 body:             |
    135   bb.0:
    136     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    137     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    138     $m0 = S_MOV_B32 -1
    139     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    140     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront") monotonic 4 from `i32 addrspace(3)* undef`)
    141     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    142     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    143     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    144     S_ENDPGM
    145 
    146 ...
    147 ---
    148 
    149 # GCN-LABEL: name: load_wavefront_acquire
    150 
    151 # GCN-LABEL: bb.0:
    152 # GCN-NOT:   S_WAITCNT
    153 # GCN:       DS_READ_B32
    154 # GCN-NOT:   S_WAITCNT
    155 # GCN:       FLAT_STORE_DWORD
    156 
    157 name:            load_wavefront_acquire
    158 body:             |
    159   bb.0:
    160     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    161     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    162     $m0 = S_MOV_B32 -1
    163     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    164     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront") acquire 4 from `i32 addrspace(3)* undef`)
    165     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    166     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    167     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    168     S_ENDPGM
    169 
    170 ...
    171 ---
    172 
    173 # GCN-LABEL: name: load_wavefront_seq_cst
    174 
    175 # GCN-LABEL: bb.0:
    176 # GCN-NOT:   S_WAITCNT
    177 # GCN:       DS_READ_B32
    178 # GCN-NOT:   S_WAITCNT
    179 # GCN:       FLAT_STORE_DWORD
    180 
    181 name:            load_wavefront_seq_cst
    182 body:             |
    183   bb.0:
    184     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    185     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    186     $m0 = S_MOV_B32 -1
    187     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    188     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("wavefront") seq_cst 4 from `i32 addrspace(3)* undef`)
    189     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    190     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    191     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    192     S_ENDPGM
    193 
    194 ...
    195 ---
    196 
    197 # GCN-LABEL: name: load_workgroup_unordered
    198 
    199 # GCN-LABEL: bb.0:
    200 # GCN-NOT:   S_WAITCNT
    201 # GCN:       DS_READ_B32
    202 # GCN-NOT:   S_WAITCNT
    203 # GCN:       FLAT_STORE_DWORD
    204 
    205 name:            load_workgroup_unordered
    206 body:             |
    207   bb.0:
    208     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    209     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    210     $m0 = S_MOV_B32 -1
    211     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    212     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup") unordered 4 from `i32 addrspace(3)* undef`)
    213     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    214     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    215     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    216     S_ENDPGM
    217 
    218 ...
    219 ---
    220 
    221 # GCN-LABEL: name: load_workgroup_monotonic
    222 
    223 # GCN-LABEL: bb.0:
    224 # GCN-NOT:   S_WAITCNT
    225 # GCN:       DS_READ_B32
    226 # GCN-NOT:   S_WAITCNT
    227 # GCN:       FLAT_STORE_DWORD
    228 
    229 name:            load_workgroup_monotonic
    230 body:             |
    231   bb.0:
    232     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    233     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    234     $m0 = S_MOV_B32 -1
    235     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    236     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup") monotonic 4 from `i32 addrspace(3)* undef`)
    237     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    238     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    239     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    240     S_ENDPGM
    241 
    242 ...
    243 ---
    244 
    245 # GCN-LABEL: name: load_workgroup_acquire
    246 
    247 # GCN-LABEL: bb.0:
    248 # GCN-NOT:   S_WAITCNT
    249 # GCN:       DS_READ_B32
    250 # GCN-NOT:   S_WAITCNT
    251 # GCN:       FLAT_STORE_DWORD
    252 
    253 name:            load_workgroup_acquire
    254 body:             |
    255   bb.0:
    256     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    257     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    258     $m0 = S_MOV_B32 -1
    259     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    260     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup") acquire 4 from `i32 addrspace(3)* undef`)
    261     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    262     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    263     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    264     S_ENDPGM
    265 
    266 ...
    267 ---
    268 
    269 # GCN-LABEL: name: load_workgroup_seq_cst
    270 
    271 # GCN-LABEL: bb.0:
    272 # GCN-NOT:   S_WAITCNT
    273 # GCN:       DS_READ_B32
    274 # GCN-NOT:   S_WAITCNT
    275 # GCN:       FLAT_STORE_DWORD
    276 
    277 name:            load_workgroup_seq_cst
    278 body:             |
    279   bb.0:
    280     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    281     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    282     $m0 = S_MOV_B32 -1
    283     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    284     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("workgroup") seq_cst 4 from `i32 addrspace(3)* undef`)
    285     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    286     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    287     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    288     S_ENDPGM
    289 
    290 ...
    291 ---
    292 
    293 # GCN-LABEL: name: load_agent_unordered
    294 
    295 # GCN-LABEL: bb.0:
    296 # GCN-NOT:   S_WAITCNT
    297 # GCN:       DS_READ_B32
    298 # GCN-NOT:   S_WAITCNT
    299 # GCN:       FLAT_STORE_DWORD
    300 
    301 name:            load_agent_unordered
    302 body:             |
    303   bb.0:
    304     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    305     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    306     $m0 = S_MOV_B32 -1
    307     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    308     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("agent") unordered 4 from `i32 addrspace(3)* undef`)
    309     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    310     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    311     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    312     S_ENDPGM
    313 
    314 ...
    315 ---
    316 
    317 # GCN-LABEL: name: load_agent_monotonic
    318 
    319 # GCN-LABEL: bb.0:
    320 # GCN-NOT:   S_WAITCNT
    321 # GCN:       DS_READ_B32
    322 # GCN-NOT:   S_WAITCNT
    323 # GCN:       FLAT_STORE_DWORD
    324 
    325 name:            load_agent_monotonic
    326 body:             |
    327   bb.0:
    328     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    329     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    330     $m0 = S_MOV_B32 -1
    331     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    332     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("agent") monotonic 4 from `i32 addrspace(3)* undef`)
    333     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    334     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    335     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    336     S_ENDPGM
    337 
    338 ...
    339 ---
    340 
    341 # GCN-LABEL: name: load_agent_acquire
    342 
    343 # GCN-LABEL: bb.0:
    344 # GCN-NOT:   S_WAITCNT
    345 # GCN:       DS_READ_B32
    346 # GCN-NOT:   S_WAITCNT
    347 # GCN:       FLAT_STORE_DWORD
    348 
    349 name:            load_agent_acquire
    350 body:             |
    351   bb.0:
    352     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    353     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    354     $m0 = S_MOV_B32 -1
    355     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    356     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("agent") acquire 4 from `i32 addrspace(3)* undef`)
    357     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    358     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    359     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    360     S_ENDPGM
    361 
    362 ...
    363 ---
    364 
    365 # GCN-LABEL: name: load_agent_seq_cst
    366 
    367 # GCN-LABEL: bb.0:
    368 # GCN-NOT:   S_WAITCNT
    369 # GCN:       DS_READ_B32
    370 # GCN-NOT:   S_WAITCNT
    371 # GCN:       FLAT_STORE_DWORD
    372 
    373 name:            load_agent_seq_cst
    374 body:             |
    375   bb.0:
    376     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    377     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    378     $m0 = S_MOV_B32 -1
    379     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    380     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load syncscope("agent") seq_cst 4 from `i32 addrspace(3)* undef`)
    381     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    382     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    383     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    384     S_ENDPGM
    385 
    386 ...
    387 ---
    388 
    389 # GCN-LABEL: name: load_system_unordered
    390 
    391 # GCN-LABEL: bb.0:
    392 # GCN-NOT:   S_WAITCNT
    393 # GCN:       DS_READ_B32
    394 # GCN-NOT:   S_WAITCNT
    395 # GCN:       FLAT_STORE_DWORD
    396 
    397 name:            load_system_unordered
    398 body:             |
    399   bb.0:
    400     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    401     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    402     $m0 = S_MOV_B32 -1
    403     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    404     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load unordered 4 from `i32 addrspace(3)* undef`)
    405     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    406     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    407     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    408     S_ENDPGM
    409 
    410 ...
    411 ---
    412 
    413 # GCN-LABEL: name: load_system_monotonic
    414 
    415 # GCN-LABEL: bb.0:
    416 # GCN-NOT:   S_WAITCNT
    417 # GCN:       DS_READ_B32
    418 # GCN-NOT:   S_WAITCNT
    419 # GCN:       FLAT_STORE_DWORD
    420 
    421 name:            load_system_monotonic
    422 body:             |
    423   bb.0:
    424     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    425     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    426     $m0 = S_MOV_B32 -1
    427     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    428     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load monotonic 4 from `i32 addrspace(3)* undef`)
    429     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    430     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    431     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    432     S_ENDPGM
    433 
    434 ...
    435 ---
    436 
    437 # GCN-LABEL: name: load_system_acquire
    438 
    439 # GCN-LABEL: bb.0:
    440 # GCN-NOT:   S_WAITCNT
    441 # GCN:       DS_READ_B32
    442 # GCN-NOT:   S_WAITCNT
    443 # GCN:       FLAT_STORE_DWORD
    444 
    445 name:            load_system_acquire
    446 body:             |
    447   bb.0:
    448     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    449     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    450     $m0 = S_MOV_B32 -1
    451     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    452     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load acquire 4 from `i32 addrspace(3)* undef`)
    453     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    454     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    455     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    456     S_ENDPGM
    457 
    458 ...
    459 ---
    460 
    461 # GCN-LABEL: name: load_system_seq_cst
    462 
    463 # GCN-LABEL: bb.0:
    464 # GCN-NOT:   S_WAITCNT
    465 # GCN:       DS_READ_B32
    466 # GCN-NOT:   S_WAITCNT
    467 # GCN:       FLAT_STORE_DWORD
    468 
    469 name:            load_system_seq_cst
    470 body:             |
    471   bb.0:
    472     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    473     $sgpr0_sgpr1 = S_LOAD_DWORDX2_IMM killed $sgpr0_sgpr1, 44, 0 :: (dereferenceable invariant load 8 from `i64 addrspace(4)* undef`, align 4, addrspace 4)
    474     $m0 = S_MOV_B32 -1
    475     $vgpr0 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    476     renamable $vgpr2 = DS_READ_B32 killed renamable $vgpr0, 0, 0, implicit $m0, implicit $exec :: (volatile load seq_cst 4 from `i32 addrspace(3)* undef`)
    477     $vgpr0 = V_MOV_B32_e32 $sgpr0, implicit $exec, implicit-def $vgpr0_vgpr1, implicit $sgpr0_sgpr1
    478     $vgpr1 = V_MOV_B32_e32 killed $sgpr1, implicit $exec, implicit $sgpr0_sgpr1, implicit $exec
    479     FLAT_STORE_DWORD killed renamable $vgpr0_vgpr1, killed renamable $vgpr2, 0, 0, 0, implicit $exec, implicit $flat_scr :: (store 4 into `i32* undef`)
    480     S_ENDPGM
    481 
    482 ...
    483 ---
    484 
    485 # GCN-LABEL: name: store_singlethread_unordered
    486 
    487 # GCN-LABEL: bb.0:
    488 # GCN-NOT:   S_WAITCNT
    489 # GCN:       DS_WRITE_B32
    490 # GCN-NOT:   S_WAITCNT
    491 # GCN:       S_ENDPGM
    492 
    493 name:            store_singlethread_unordered
    494 body:             |
    495   bb.0:
    496     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    497     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    498     $m0 = S_MOV_B32 -1
    499     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    500     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    501     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") unordered 4 into `i32 addrspace(3)* undef`)
    502     S_ENDPGM
    503 
    504 ...
    505 ---
    506 
    507 # GCN-LABEL: name: store_singlethread_monotonic
    508 
    509 # GCN-LABEL: bb.0:
    510 # GCN-NOT:   S_WAITCNT
    511 # GCN:       DS_WRITE_B32
    512 # GCN-NOT:   S_WAITCNT
    513 # GCN:       S_ENDPGM
    514 
    515 name:            store_singlethread_monotonic
    516 body:             |
    517   bb.0:
    518     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    519     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    520     $m0 = S_MOV_B32 -1
    521     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    522     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    523     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") monotonic 4 into `i32 addrspace(3)* undef`)
    524     S_ENDPGM
    525 
    526 ...
    527 ---
    528 
    529 # GCN-LABEL: name: store_singlethread_release
    530 
    531 # GCN-LABEL: bb.0:
    532 # GCN-NOT:   S_WAITCNT
    533 # GCN:       DS_WRITE_B32
    534 # GCN-NOT:   S_WAITCNT
    535 # GCN:       S_ENDPGM
    536 
    537 name:            store_singlethread_release
    538 body:             |
    539   bb.0:
    540     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    541     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    542     $m0 = S_MOV_B32 -1
    543     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    544     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    545     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") release 4 into `i32 addrspace(3)* undef`)
    546     S_ENDPGM
    547 
    548 ...
    549 ---
    550 
    551 # GCN-LABEL: name: store_singlethread_seq_cst
    552 
    553 # GCN-LABEL: bb.0:
    554 # GCN-NOT:   S_WAITCNT
    555 # GCN:       DS_WRITE_B32
    556 # GCN-NOT:   S_WAITCNT
    557 # GCN:       S_ENDPGM
    558 
    559 name:            store_singlethread_seq_cst
    560 body:             |
    561   bb.0:
    562     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    563     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    564     $m0 = S_MOV_B32 -1
    565     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    566     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    567     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") seq_cst 4 into `i32 addrspace(3)* undef`)
    568     S_ENDPGM
    569 
    570 ...
    571 ---
    572 
    573 # GCN-LABEL: name: store_wavefront_unordered
    574 
    575 # GCN-LABEL: bb.0:
    576 # GCN-NOT:   S_WAITCNT
    577 # GCN:       DS_WRITE_B32
    578 # GCN-NOT:   S_WAITCNT
    579 # GCN:       S_ENDPGM
    580 
    581 name:            store_wavefront_unordered
    582 body:             |
    583   bb.0:
    584     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    585     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    586     $m0 = S_MOV_B32 -1
    587     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    588     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    589     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront") unordered 4 into `i32 addrspace(3)* undef`)
    590     S_ENDPGM
    591 
    592 ...
    593 ---
    594 
    595 # GCN-LABEL: name: store_wavefront_monotonic
    596 
    597 # GCN-LABEL: bb.0:
    598 # GCN-NOT:   S_WAITCNT
    599 # GCN:       DS_WRITE_B32
    600 # GCN-NOT:   S_WAITCNT
    601 # GCN:       S_ENDPGM
    602 
    603 name:            store_wavefront_monotonic
    604 body:             |
    605   bb.0:
    606     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    607     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    608     $m0 = S_MOV_B32 -1
    609     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    610     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    611     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront") monotonic 4 into `i32 addrspace(3)* undef`)
    612     S_ENDPGM
    613 
    614 ...
    615 ---
    616 
    617 # GCN-LABEL: name: store_wavefront_release
    618 
    619 # GCN-LABEL: bb.0:
    620 # GCN-NOT:   S_WAITCNT
    621 # GCN:       DS_WRITE_B32
    622 # GCN-NOT:   S_WAITCNT
    623 # GCN:       S_ENDPGM
    624 
    625 name:            store_wavefront_release
    626 body:             |
    627   bb.0:
    628     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    629     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    630     $m0 = S_MOV_B32 -1
    631     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    632     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    633     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront") release 4 into `i32 addrspace(3)* undef`)
    634     S_ENDPGM
    635 
    636 ...
    637 ---
    638 
    639 # GCN-LABEL: name: store_wavefront_seq_cst
    640 
    641 # GCN-LABEL: bb.0:
    642 # GCN-NOT:   S_WAITCNT
    643 # GCN:       DS_WRITE_B32
    644 # GCN-NOT:   S_WAITCNT
    645 # GCN:       S_ENDPGM
    646 
    647 name:            store_wavefront_seq_cst
    648 body:             |
    649   bb.0:
    650     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    651     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    652     $m0 = S_MOV_B32 -1
    653     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    654     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    655     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("wavefront") seq_cst 4 into `i32 addrspace(3)* undef`)
    656     S_ENDPGM
    657 
    658 ...
    659 ---
    660 
    661 # GCN-LABEL: name: store_workgroup_unordered
    662 
    663 # GCN-LABEL: bb.0:
    664 # GCN-NOT:   S_WAITCNT
    665 # GCN:       DS_WRITE_B32
    666 # GCN-NOT:   S_WAITCNT
    667 # GCN:       S_ENDPGM
    668 
    669 name:            store_workgroup_unordered
    670 body:             |
    671   bb.0:
    672     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    673     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    674     $m0 = S_MOV_B32 -1
    675     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    676     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    677     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup") unordered 4 into `i32 addrspace(3)* undef`)
    678     S_ENDPGM
    679 
    680 ...
    681 ---
    682 
    683 # GCN-LABEL: name: store_workgroup_monotonic
    684 
    685 # GCN-LABEL: bb.0:
    686 # GCN-NOT:   S_WAITCNT
    687 # GCN:       DS_WRITE_B32
    688 # GCN-NOT:   S_WAITCNT
    689 # GCN:       S_ENDPGM
    690 
    691 name:            store_workgroup_monotonic
    692 body:             |
    693   bb.0:
    694     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    695     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    696     $m0 = S_MOV_B32 -1
    697     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    698     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    699     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup") monotonic 4 into `i32 addrspace(3)* undef`)
    700     S_ENDPGM
    701 
    702 ...
    703 ---
    704 
    705 # GCN-LABEL: name: store_workgroup_release
    706 
    707 # GCN-LABEL: bb.0:
    708 # GCN-NOT:   S_WAITCNT
    709 # GCN:       DS_WRITE_B32
    710 # GCN-NOT:   S_WAITCNT
    711 # GCN:       S_ENDPGM
    712 
    713 name:            store_workgroup_release
    714 body:             |
    715   bb.0:
    716     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    717     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    718     $m0 = S_MOV_B32 -1
    719     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    720     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    721     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup") release 4 into `i32 addrspace(3)* undef`)
    722     S_ENDPGM
    723 
    724 ...
    725 ---
    726 
    727 # GCN-LABEL: name: store_workgroup_seq_cst
    728 
    729 # GCN-LABEL: bb.0:
    730 # GCN-NOT:   S_WAITCNT
    731 # GCN:       DS_WRITE_B32
    732 # GCN-NOT:   S_WAITCNT
    733 # GCN:       S_ENDPGM
    734 
    735 name:            store_workgroup_seq_cst
    736 body:             |
    737   bb.0:
    738     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    739     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    740     $m0 = S_MOV_B32 -1
    741     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    742     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    743     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("workgroup") seq_cst 4 into `i32 addrspace(3)* undef`)
    744     S_ENDPGM
    745 
    746 ...
    747 ---
    748 
    749 # GCN-LABEL: name: store_agent_unordered
    750 
    751 # GCN-LABEL: bb.0:
    752 # GCN-NOT:   S_WAITCNT
    753 # GCN:       DS_WRITE_B32
    754 # GCN-NOT:   S_WAITCNT
    755 # GCN:       S_ENDPGM
    756 
    757 name:            store_agent_unordered
    758 body:             |
    759   bb.0:
    760     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    761     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    762     $m0 = S_MOV_B32 -1
    763     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    764     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    765     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("agent") unordered 4 into `i32 addrspace(3)* undef`)
    766     S_ENDPGM
    767 
    768 ...
    769 ---
    770 
    771 # GCN-LABEL: name: store_agent_monotonic
    772 
    773 # GCN-LABEL: bb.0:
    774 # GCN-NOT:   S_WAITCNT
    775 # GCN:       DS_WRITE_B32
    776 # GCN-NOT:   S_WAITCNT
    777 # GCN:       S_ENDPGM
    778 
    779 name:            store_agent_monotonic
    780 body:             |
    781   bb.0:
    782     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    783     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    784     $m0 = S_MOV_B32 -1
    785     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    786     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    787     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("agent") monotonic 4 into `i32 addrspace(3)* undef`)
    788     S_ENDPGM
    789 
    790 ...
    791 ---
    792 
    793 # GCN-LABEL: name: store_agent_release
    794 
    795 # GCN-LABEL: bb.0:
    796 # GCN-NOT:   S_WAITCNT
    797 # GCN:       DS_WRITE_B32
    798 # GCN-NOT:   S_WAITCNT
    799 # GCN:       S_ENDPGM
    800 
    801 name:            store_agent_release
    802 body:             |
    803   bb.0:
    804     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    805     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    806     $m0 = S_MOV_B32 -1
    807     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    808     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    809     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("agent") release 4 into `i32 addrspace(3)* undef`)
    810     S_ENDPGM
    811 
    812 ...
    813 ---
    814 
    815 # GCN-LABEL: name: store_agent_seq_cst
    816 
    817 # GCN-LABEL: bb.0:
    818 # GCN-NOT:   S_WAITCNT
    819 # GCN:       DS_WRITE_B32
    820 # GCN-NOT:   S_WAITCNT
    821 # GCN:       S_ENDPGM
    822 
    823 name:            store_agent_seq_cst
    824 body:             |
    825   bb.0:
    826     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    827     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    828     $m0 = S_MOV_B32 -1
    829     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    830     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    831     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("agent") seq_cst 4 into `i32 addrspace(3)* undef`)
    832     S_ENDPGM
    833 
    834 ...
    835 ---
    836 
    837 # GCN-LABEL: name: store_system_unordered
    838 
    839 # GCN-LABEL: bb.0:
    840 # GCN-NOT:   S_WAITCNT
    841 # GCN:       DS_WRITE_B32
    842 # GCN-NOT:   S_WAITCNT
    843 # GCN:       S_ENDPGM
    844 
    845 name:            store_system_unordered
    846 body:             |
    847   bb.0:
    848     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    849     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    850     $m0 = S_MOV_B32 -1
    851     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    852     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    853     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store unordered 4 into `i32 addrspace(3)* undef`)
    854     S_ENDPGM
    855 
    856 ...
    857 ---
    858 
    859 # GCN-LABEL: name: store_system_monotonic
    860 
    861 # GCN-LABEL: bb.0:
    862 # GCN-NOT:   S_WAITCNT
    863 # GCN:       DS_WRITE_B32
    864 # GCN-NOT:   S_WAITCNT
    865 # GCN:       S_ENDPGM
    866 
    867 name:            store_system_monotonic
    868 body:             |
    869   bb.0:
    870     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    871     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    872     $m0 = S_MOV_B32 -1
    873     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    874     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    875     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store monotonic 4 into `i32 addrspace(3)* undef`)
    876     S_ENDPGM
    877 
    878 ...
    879 ---
    880 
    881 # GCN-LABEL: name: store_system_release
    882 
    883 # GCN-LABEL: bb.0:
    884 # GCN-NOT:   S_WAITCNT
    885 # GCN:       DS_WRITE_B32
    886 # GCN-NOT:   S_WAITCNT
    887 # GCN:       S_ENDPGM
    888 
    889 name:            store_system_release
    890 body:             |
    891   bb.0:
    892     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    893     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    894     $m0 = S_MOV_B32 -1
    895     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    896     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    897     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store release 4 into `i32 addrspace(3)* undef`)
    898     S_ENDPGM
    899 
    900 ...
    901 ---
    902 
    903 # GCN-LABEL: name: store_system_seq_cst
    904 
    905 # GCN-LABEL: bb.0:
    906 # GCN-NOT:   S_WAITCNT
    907 # GCN:       DS_WRITE_B32
    908 # GCN-NOT:   S_WAITCNT
    909 # GCN:       S_ENDPGM
    910 
    911 name:            store_system_seq_cst
    912 body:             |
    913   bb.0:
    914     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    915     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    916     $m0 = S_MOV_B32 -1
    917     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    918     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    919     DS_WRITE_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store seq_cst 4 into `i32 addrspace(3)* undef`)
    920     S_ENDPGM
    921 
    922 ...
    923 ---
    924 
    925 # GCN-LABEL: name: atomicrmw_singlethread_unordered
    926 
    927 # GCN-LABEL: bb.0:
    928 # GCN-NOT:   S_WAITCNT
    929 # GCN:       DS_WRXCHG_RTN_B32
    930 # GCN-NOT:   S_WAITCNT
    931 # GCN:       S_ENDPGM
    932 
    933 name:            atomicrmw_singlethread_unordered
    934 body:             |
    935   bb.0:
    936     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    937     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    938     $m0 = S_MOV_B32 -1
    939     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    940     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    941     $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") unordered 4 into `i32 addrspace(3)* undef`)
    942     S_ENDPGM
    943 
    944 ...
    945 ---
    946 
    947 # GCN-LABEL: name: atomicrmw_singlethread_monotonic
    948 
    949 # GCN-LABEL: bb.0:
    950 # GCN-NOT:   S_WAITCNT
    951 # GCN:       DS_WRXCHG_RTN_B32
    952 # GCN-NOT:   S_WAITCNT
    953 # GCN:       S_ENDPGM
    954 
    955 name:            atomicrmw_singlethread_monotonic
    956 body:             |
    957   bb.0:
    958     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    959     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    960     $m0 = S_MOV_B32 -1
    961     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    962     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    963     $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") monotonic 4 into `i32 addrspace(3)* undef`)
    964     S_ENDPGM
    965 
    966 ...
    967 ---
    968 
    969 # GCN-LABEL: name: atomicrmw_singlethread_acquire
    970 
    971 # GCN-LABEL: bb.0:
    972 # GCN-NOT:   S_WAITCNT
    973 # GCN:       DS_WRXCHG_RTN_B32
    974 # GCN-NOT:   S_WAITCNT
    975 # GCN:       S_ENDPGM
    976 
    977 name:            atomicrmw_singlethread_acquire
    978 body:             |
    979   bb.0:
    980     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
    981     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
    982     $m0 = S_MOV_B32 -1
    983     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
    984     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
    985     $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") acquire 4 into `i32 addrspace(3)* undef`)
    986     S_ENDPGM
    987 
    988 ...
    989 ---
    990 
    991 # GCN-LABEL: name: atomicrmw_singlethread_release
    992 
    993 # GCN-LABEL: bb.0:
    994 # GCN-NOT:   S_WAITCNT
    995 # GCN:       DS_WRXCHG_RTN_B32
    996 # GCN-NOT:   S_WAITCNT
    997 # GCN:       S_ENDPGM
    998 
    999 name:            atomicrmw_singlethread_release
   1000 body:             |
   1001   bb.0:
   1002     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
   1003     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
   1004     $m0 = S_MOV_B32 -1
   1005     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
   1006     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
   1007     $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") release 4 into `i32 addrspace(3)* undef`)
   1008     S_ENDPGM
   1009 
   1010 ...
   1011 ---
   1012 
   1013 # GCN-LABEL: name: atomicrmw_singlethread_acq_rel
   1014 
   1015 # GCN-LABEL: bb.0:
   1016 # GCN-NOT:   S_WAITCNT
   1017 # GCN:       DS_WRXCHG_RTN_B32
   1018 # GCN-NOT:   S_WAITCNT
   1019 # GCN:       S_ENDPGM
   1020 
   1021 name:            atomicrmw_singlethread_acq_rel
   1022 body:             |
   1023   bb.0:
   1024     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
   1025     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
   1026     $m0 = S_MOV_B32 -1
   1027     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
   1028     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
   1029     $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") acq_rel 4 into `i32 addrspace(3)* undef`)
   1030     S_ENDPGM
   1031 
   1032 ...
   1033 ---
   1034 
   1035 # GCN-LABEL: name: atomicrmw_singlethread_seq_cst
   1036 
   1037 # GCN-LABEL: bb.0:
   1038 # GCN-NOT:   S_WAITCNT
   1039 # GCN:       DS_WRXCHG_RTN_B32
   1040 # GCN-NOT:   S_WAITCNT
   1041 # GCN:       S_ENDPGM
   1042 
   1043 name:            atomicrmw_singlethread_seq_cst
   1044 body:             |
   1045   bb.0:
   1046     $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 36, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, addrspace 4)
   1047     $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 40, 0 :: (dereferenceable invariant load 4 from `i32 addrspace(4)* undef`, align 8, addrspace 4)
   1048     $m0 = S_MOV_B32 -1
   1049     $vgpr1 = V_MOV_B32_e32 killed $sgpr2, implicit $exec, implicit $exec
   1050     $vgpr0 = V_MOV_B32_e32 killed $sgpr0, implicit $exec, implicit $exec
   1051     $vgpr2 = DS_WRXCHG_RTN_B32 killed renamable $vgpr0, killed renamable $vgpr1, 0, 0, implicit $m0, implicit $exec :: (volatile store syncscope("singlethread") seq_cst 4 into `i32 addrspace(3)* undef`)
   1052     S_ENDPGM
   1053 
   1054 ...
   1055