Run DCE after a LoopFlatten test to reduce spurious output [nfc]
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / load-store-opt-scc.mir
blob19f44dc6164f8f87bc1048c52a1ea95b953cf71c
1 # RUN: llc -march=amdgcn -mcpu=gfx90a -run-pass=si-load-store-opt -verify-machineinstrs -o - %s | FileCheck %s
3 # The purpose of this test is to make sure we are combining relevant memory
4 # operations correctly with/without SCC bit.
6 --- |
7   define amdgpu_kernel void @test1(ptr addrspace(1) %out) {
8     %out.gep.1 = getelementptr i32, ptr addrspace(1) %out, i32 1
9     store i32 123, ptr addrspace(1) %out.gep.1
10     store i32 456, ptr addrspace(1) %out
11     ret void
12   }
14   define amdgpu_kernel void @test2(ptr addrspace(1) %out) {
15     %out.gep.1 = getelementptr i32, ptr addrspace(1) %out, i32 1
16     store i32 123, ptr addrspace(1) %out.gep.1
17     store i32 456, ptr addrspace(1) %out
18     ret void
19   }
21   define amdgpu_kernel void @test3(ptr addrspace(1) %out) {
22     %out.gep.1 = getelementptr i32, ptr addrspace(1) %out, i32 1
23     store i32 123, ptr addrspace(1) %out.gep.1
24     store i32 456, ptr addrspace(1) %out
25     ret void
26   }
27   define amdgpu_kernel void @test4(ptr addrspace(1) %out) {
28     %out.gep.1 = getelementptr i32, ptr addrspace(1) %out, i32 1
29     store i32 123, ptr addrspace(1) %out.gep.1
30     store i32 456, ptr addrspace(1) %out
31     ret void
32   }
33 ...
35 # CHECK: BUFFER_STORE_DWORDX2_OFFSET killed %{{[0-9]+}}, %{{[0-9]+}}, 0, 4, 0, 0, implicit $exec :: (store (s64) into %ir.out.gep.1, align 4, addrspace 1)
36 ---
37 name: test1
38 liveins:
39   - { reg: '$sgpr0_sgpr1', virtual-reg: '' }
40 body: |
41   bb.0 (%ir-block.0):
42     liveins: $sgpr0_sgpr1
44     $vgpr0 = V_MOV_B32_e32 123, implicit $exec
45     $vgpr1 = V_MOV_B32_e32 456, implicit $exec
47     $sgpr2 = S_MOV_B32 -1
48     $sgpr3 = S_MOV_B32 61440
50     %0:sgpr_64 = COPY $sgpr0_sgpr1
51     %1:sgpr_64 = S_LOAD_DWORDX2_IMM %1, 36, 0 :: (dereferenceable invariant load (s64) from `ptr addrspace(4) undef`, addrspace 4)
52     %2:sgpr_32 = COPY $sgpr2
53     %3:sgpr_32 = COPY $sgpr3
54     %4:sgpr_128 = REG_SEQUENCE %1, %subreg.sub0, %2, %subreg.sub1, %3, %subreg.sub2
56     %5:vgpr_32 = COPY $vgpr0
57     %6:vgpr_32 = COPY $vgpr1
59     BUFFER_STORE_DWORD_OFFSET %5, %4, 0, 4, 0, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
60     BUFFER_STORE_DWORD_OFFSET %6, %4, 0, 8, 0, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
62     S_ENDPGM 0
63 ...
65 # CHECK: BUFFER_STORE_DWORD_OFFSET %{{[0-9]+}}, %{{[0-9]+}}, 0, 4, 16, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
66 # CHECK: BUFFER_STORE_DWORD_OFFSET %{{[0-9]+}}, %{{[0-9]+}}, 0, 8, 0, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
67 ---
68 name: test2
69 liveins:
70   - { reg: '$sgpr0_sgpr1', virtual-reg: '' }
71 body: |
72   bb.0 (%ir-block.0):
73     liveins: $sgpr0_sgpr1
75     $vgpr0 = V_MOV_B32_e32 123, implicit $exec
76     $vgpr1 = V_MOV_B32_e32 456, implicit $exec
78     $sgpr2 = S_MOV_B32 -1
79     $sgpr3 = S_MOV_B32 61440
81     %0:sgpr_64 = COPY $sgpr0_sgpr1
82     %1:sgpr_64 = S_LOAD_DWORDX2_IMM %1, 36, 0 :: (dereferenceable invariant load (s64) from `ptr addrspace(4) undef`, addrspace 4)
83     %2:sgpr_32 = COPY $sgpr2
84     %3:sgpr_32 = COPY $sgpr3
85     %4:sgpr_128 = REG_SEQUENCE %1, %subreg.sub0, %2, %subreg.sub1, %3, %subreg.sub2
87     %5:vgpr_32 = COPY $vgpr0
88     %6:vgpr_32 = COPY $vgpr1
90     BUFFER_STORE_DWORD_OFFSET %5, %4, 0, 4, 16, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
91     BUFFER_STORE_DWORD_OFFSET %6, %4, 0, 8, 0, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
93     S_ENDPGM 0
94 ...
96 # CHECK: BUFFER_STORE_DWORD_OFFSET %{{[0-9]+}}, %{{[0-9]+}}, 0, 4, 0, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
97 # CHECK: BUFFER_STORE_DWORD_OFFSET %{{[0-9]+}}, %{{[0-9]+}}, 0, 8, 16, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
98 ---
99 name: test3
100 liveins:
101   - { reg: '$sgpr0_sgpr1', virtual-reg: '' }
102 body: |
103   bb.0 (%ir-block.0):
104     liveins: $sgpr0_sgpr1
106     $vgpr0 = V_MOV_B32_e32 123, implicit $exec
107     $vgpr1 = V_MOV_B32_e32 456, implicit $exec
109     $sgpr2 = S_MOV_B32 -1
110     $sgpr3 = S_MOV_B32 61440
112     %0:sgpr_64 = COPY $sgpr0_sgpr1
113     %1:sgpr_64 = S_LOAD_DWORDX2_IMM %1, 36, 0 :: (dereferenceable invariant load (s64) from `ptr addrspace(4) undef`, addrspace 4)
114     %2:sgpr_32 = COPY $sgpr2
115     %3:sgpr_32 = COPY $sgpr3
116     %4:sgpr_128 = REG_SEQUENCE %1, %subreg.sub0, %2, %subreg.sub1, %3, %subreg.sub2
118     %5:vgpr_32 = COPY $vgpr0
119     %6:vgpr_32 = COPY $vgpr1
121     BUFFER_STORE_DWORD_OFFSET %5, %4, 0, 4, 0, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
122     BUFFER_STORE_DWORD_OFFSET %6, %4, 0, 8, 16, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
124     S_ENDPGM 0
127 # CHECK: BUFFER_STORE_DWORDX2_OFFSET killed %{{[0-9]+}}, %{{[0-9]+}}, 0, 4, 16, 0, implicit $exec :: (store (s64) into %ir.out.gep.1, align 4, addrspace 1)
129 name: test4
130 liveins:
131   - { reg: '$sgpr0_sgpr1', virtual-reg: '' }
132 body: |
133   bb.0 (%ir-block.0):
134     liveins: $sgpr0_sgpr1
136     $vgpr0 = V_MOV_B32_e32 123, implicit $exec
137     $vgpr1 = V_MOV_B32_e32 456, implicit $exec
139     $sgpr2 = S_MOV_B32 -1
140     $sgpr3 = S_MOV_B32 61440
142     %0:sgpr_64 = COPY $sgpr0_sgpr1
143     %1:sgpr_64 = S_LOAD_DWORDX2_IMM %1, 36, 0 :: (dereferenceable invariant load (s64) from `ptr addrspace(4) undef`, addrspace 4)
144     %2:sgpr_32 = COPY $sgpr2
145     %3:sgpr_32 = COPY $sgpr3
146     %4:sgpr_128 = REG_SEQUENCE %1, %subreg.sub0, %2, %subreg.sub1, %3, %subreg.sub2
148     %5:vgpr_32 = COPY $vgpr0
149     %6:vgpr_32 = COPY $vgpr1
151     BUFFER_STORE_DWORD_OFFSET %5, %4, 0, 4, 16, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
152     BUFFER_STORE_DWORD_OFFSET %6, %4, 0, 8, 16, 0, implicit $exec :: (store (s32) into %ir.out.gep.1, addrspace 1)
154     S_ENDPGM 0