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: multiple_mem_operands
6
7# GCN-LABEL: bb.3:
8# GCN:       S_WAITCNT 3952
9# GCN-NEXT:  BUFFER_LOAD_DWORD_OFFEN
10# GCN-NEXT:  S_WAITCNT 3952
11# GCN-NEXT:  BUFFER_WBINVL1_VOL
12
13name:            multiple_mem_operands
14body:             |
15  bb.0.entry:
16    successors: %bb.1(0x30000000), %bb.2(0x50000000)
17    liveins: $sgpr0_sgpr1, $sgpr3
18
19    $sgpr2 = S_LOAD_DWORD_IMM $sgpr0_sgpr1, 44, 0 :: (non-temporal dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`)
20    $sgpr8 = S_MOV_B32 &SCRATCH_RSRC_DWORD0, implicit-def $sgpr8_sgpr9_sgpr10_sgpr11
21    $sgpr4_sgpr5 = S_LOAD_DWORDX2_IMM $sgpr0_sgpr1, 36, 0 :: (non-temporal dereferenceable invariant load (s64) from `i64 addrspace(4)* undef`)
22    $sgpr9 = S_MOV_B32 &SCRATCH_RSRC_DWORD1, implicit-def $sgpr8_sgpr9_sgpr10_sgpr11
23    $sgpr10 = S_MOV_B32 4294967295, implicit-def $sgpr8_sgpr9_sgpr10_sgpr11
24    $sgpr11 = S_MOV_B32 15204352, implicit-def $sgpr8_sgpr9_sgpr10_sgpr11
25    $vgpr0 = V_MOV_B32_e32 1, implicit $exec
26    BUFFER_STORE_DWORD_OFFSET killed $vgpr0, $sgpr8_sgpr9_sgpr10_sgpr11, $sgpr3, 4, 0, 0, 0, implicit $exec :: (store (s32) into `i32 addrspace(5)* undef`)
27    S_WAITCNT 127
28    S_CMP_LG_U32 killed $sgpr2, 0, implicit-def $scc
29    S_WAITCNT 3855
30    $vgpr0 = V_MOV_B32_e32 2, implicit $exec
31    $vgpr1 = V_MOV_B32_e32 32772, implicit $exec
32    BUFFER_STORE_DWORD_OFFEN killed $vgpr0, killed $vgpr1, $sgpr8_sgpr9_sgpr10_sgpr11, $sgpr3, 0, 0, 0, 0, implicit $exec :: (store (s32) into `i32 addrspace(5)* undef`)
33    S_CBRANCH_SCC0 %bb.1, implicit killed $scc
34
35  bb.2:
36    successors: %bb.3(0x80000000)
37    liveins: $sgpr0_sgpr1, $sgpr4_sgpr5, $sgpr3, $sgpr8_sgpr9_sgpr10_sgpr11
38
39    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 52, 0 :: (non-temporal dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`)
40    S_WAITCNT 3855
41    $vgpr0 = V_MOV_B32_e32 32772, implicit $exec
42    S_BRANCH %bb.3
43
44  bb.1:
45    successors: %bb.3(0x80000000)
46    liveins: $sgpr0_sgpr1, $sgpr4_sgpr5, $sgpr3, $sgpr8_sgpr9_sgpr10_sgpr11
47
48    $sgpr0 = S_LOAD_DWORD_IMM killed $sgpr0_sgpr1, 48, 0 :: (non-temporal dereferenceable invariant load (s32) from `i32 addrspace(4)* undef`)
49    S_WAITCNT 3855
50    $vgpr0 = V_MOV_B32_e32 4, implicit $exec
51
52  bb.3:
53    liveins: $sgpr3, $sgpr4_sgpr5, $sgpr8_sgpr9_sgpr10_sgpr11, $vgpr0, $sgpr0
54
55    S_WAITCNT 127
56    $sgpr0 = S_LSHL_B32 killed $sgpr0, 2, implicit-def dead $scc
57    $vgpr0 = V_ADD_CO_U32_e32 killed $sgpr0, killed $vgpr0, implicit-def dead $vcc, implicit $exec
58    $vgpr0 = BUFFER_LOAD_DWORD_OFFEN killed $vgpr0, killed $sgpr8_sgpr9_sgpr10_sgpr11, $sgpr3, 0, 0, 0, 0, implicit $exec :: (load syncscope("agent-one-as") unordered (s32) from `i32 addrspace(1)* undef`), (load syncscope("workgroup-one-as") seq_cst (s32) from `[8192 x i32] addrspace(5)* undef`)
59    $vgpr1 = V_MOV_B32_e32 $sgpr4, implicit $exec, implicit-def $vgpr1_vgpr2, implicit $sgpr4_sgpr5
60    $vgpr2 = V_MOV_B32_e32 killed $sgpr5, implicit $exec, implicit $sgpr4_sgpr5, implicit $exec
61    S_WAITCNT 3952
62    FLAT_STORE_DWORD killed $vgpr1_vgpr2, killed $vgpr0, 0, 0, implicit $exec, implicit $flat_scr :: (store (s32) into `i32 addrspace(1)* undef`)
63    S_ENDPGM 0
64
65...
66