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