[clang][modules] Don't prevent translation of FW_Private includes when explicitly...
[llvm-project.git] / llvm / test / CodeGen / AMDGPU / merge-sbuffer-load.mir
blob5ff0dbe65b5d12ffe1f10804b28472a3b25252b0
1 # RUN: llc -march=amdgcn -mcpu=gfx1010 -verify-machineinstrs -run-pass si-load-store-opt -o - %s | FileCheck %s
3 # CHECK-LABEL: name: merge_s_buffer_load_x2
4 # CHECK: S_BUFFER_LOAD_DWORDX2_IMM %0, 0, 0 :: (dereferenceable invariant load (s64), align 4)
6 name: merge_s_buffer_load_x2
7 tracksRegLiveness: true
8 body:             |
9   bb.0:
10     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
12     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
13     %1:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s32))
14     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 4, 0 :: (dereferenceable invariant load (s32))
16     S_ENDPGM 0
17 ...
18 ---
20 # CHECK-LABEL: name: merge_s_buffer_load_x4
21 # CHECK: S_BUFFER_LOAD_DWORDX4_IMM %0, 0, 0 :: (dereferenceable invariant load (s128), align 4)
22 name: merge_s_buffer_load_x4
23 tracksRegLiveness: true
24 body:             |
25   bb.0:
26     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
28     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
29     %1:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s32))
30     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 4, 0 :: (dereferenceable invariant load (s32))
31     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 8, 0 :: (dereferenceable invariant load (s32))
32     %4:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 12, 0 :: (dereferenceable invariant load (s32))
34     S_ENDPGM 0
35 ...
36 ---
38 # CHECK-LABEL: name: merge_s_buffer_load_x8
39 # CHECK: S_BUFFER_LOAD_DWORDX8_IMM %0, 0, 0 :: (dereferenceable invariant load (s256), align 4)
40 name: merge_s_buffer_load_x8
41 tracksRegLiveness: true
42 body:             |
43   bb.0:
44     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
46     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
47     %1:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s32))
48     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 4, 0 :: (dereferenceable invariant load (s32))
49     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 8, 0 :: (dereferenceable invariant load (s32))
50     %4:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 12, 0 :: (dereferenceable invariant load (s32))
51     %5:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 16, 0 :: (dereferenceable invariant load (s32))
52     %6:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 20, 0 :: (dereferenceable invariant load (s32))
53     %7:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 24, 0 :: (dereferenceable invariant load (s32))
54     %8:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 28, 0 :: (dereferenceable invariant load (s32))
56     S_ENDPGM 0
57 ...
58 ---
60 # CHECK-LABEL: name: merge_s_buffer_load_x8_reordered
61 # CHECK: S_BUFFER_LOAD_DWORDX8_IMM %0, 0, 0 :: (dereferenceable invariant load (s256), align 4)
62 name: merge_s_buffer_load_x8_reordered
63 tracksRegLiveness: true
64 body:             |
65   bb.0:
66     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
68     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
69     %1:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 20, 0 :: (dereferenceable invariant load (s32))
70     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 4, 0 :: (dereferenceable invariant load (s32))
71     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s32))
72     %4:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 28, 0 :: (dereferenceable invariant load (s32))
73     %5:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 12, 0 :: (dereferenceable invariant load (s32))
74     %6:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 16, 0 :: (dereferenceable invariant load (s32))
75     %7:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 8, 0 :: (dereferenceable invariant load (s32))
76     %8:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 24, 0 :: (dereferenceable invariant load (s32))
78     S_ENDPGM 0
79 ...
80 ---
82 # CHECK-LABEL: name: merge_s_buffer_load_x8_out_of_x2
83 # CHECK: S_BUFFER_LOAD_DWORDX8_IMM %0, 0, 0 :: (dereferenceable invariant load (s256), align 8)
84 name: merge_s_buffer_load_x8_out_of_x2
85 tracksRegLiveness: true
86 body:             |
87   bb.0:
88     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
90     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
91     %1:sgpr_64 = S_BUFFER_LOAD_DWORDX2_IMM %0:sgpr_128, 16, 0 :: (dereferenceable invariant load (s64))
92     %2:sgpr_64 = S_BUFFER_LOAD_DWORDX2_IMM %0:sgpr_128, 8, 0 :: (dereferenceable invariant load (s64))
93     %3:sgpr_64 = S_BUFFER_LOAD_DWORDX2_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s64))
94     %4:sgpr_64 = S_BUFFER_LOAD_DWORDX2_IMM %0:sgpr_128, 24, 0 :: (dereferenceable invariant load (s64))
96     S_ENDPGM 0
97 ...
98 ---
100 # CHECK-LABEL: name: merge_s_buffer_load_x8_out_of_x4
101 # CHECK: S_BUFFER_LOAD_DWORDX8_IMM %0, 0, 0 :: (dereferenceable invariant load (s256), align 16)
102 name: merge_s_buffer_load_x8_out_of_x4
103 tracksRegLiveness: true
104 body:             |
105   bb.0:
106     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
108     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
109     %1:sgpr_128 = S_BUFFER_LOAD_DWORDX4_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s128))
110     %2:sgpr_128 = S_BUFFER_LOAD_DWORDX4_IMM %0:sgpr_128, 16, 0 :: (dereferenceable invariant load (s128))
112     S_ENDPGM 0
116 # CHECK-LABEL: name: merge_s_buffer_load_x8_mixed
117 # CHECK: S_BUFFER_LOAD_DWORDX8_IMM %0, 0, 0 :: (dereferenceable invariant load (s256), align 16)
118 name: merge_s_buffer_load_x8_mixed
119 tracksRegLiveness: true
120 body:             |
121   bb.0:
122     liveins: $sgpr0_sgpr1_sgpr2_sgpr3
124     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
125     %1:sgpr_128 = S_BUFFER_LOAD_DWORDX4_IMM %0:sgpr_128, 0, 0 :: (dereferenceable invariant load (s128))
126     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 16, 0 :: (dereferenceable invariant load (s32))
127     %3:sgpr_64 = S_BUFFER_LOAD_DWORDX2_IMM %0:sgpr_128, 24, 0 :: (dereferenceable invariant load (s64))
128     %4:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_IMM %0:sgpr_128, 20, 0 :: (dereferenceable invariant load (s32))
130     S_ENDPGM 0
134 # CHECK-LABEL: name: merge_s_buffer_load_sgpr_imm
135 # CHECK: S_BUFFER_LOAD_DWORDX4_SGPR_IMM %0, %1, 0, 0 :: (dereferenceable invariant load (s128), align 4)
136 name: merge_s_buffer_load_sgpr_imm
137 tracksRegLiveness: true
138 body:             |
139   bb.0:
140     liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
142     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
143     %1:sreg_32 = COPY $sgpr4
144     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 0, 0 :: (dereferenceable invariant load (s32))
145     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 4, 0 :: (dereferenceable invariant load (s32))
146     %4:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 8, 0 :: (dereferenceable invariant load (s32))
147     %5:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 12, 0 :: (dereferenceable invariant load (s32))
149     S_ENDPGM 0
153 # CHECK-LABEL: name: no_merge_for_different_soffsets
154 # CHECK: S_BUFFER_LOAD_DWORD_SGPR_IMM %0, %1, 4, 0 :: (dereferenceable invariant load (s32))
155 # CHECK: S_BUFFER_LOAD_DWORD_SGPR_IMM %0, %2, 8, 0 :: (dereferenceable invariant load (s32))
156 name: no_merge_for_different_soffsets
157 tracksRegLiveness: true
158 body:             |
159   bb.0:
160     liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4, $sgpr5
162     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
163     %1:sreg_32 = COPY $sgpr4
164     %2:sreg_32 = COPY $sgpr5
165     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 4, 0 :: (dereferenceable invariant load (s32))
166     %4:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %2:sreg_32, 8, 0 :: (dereferenceable invariant load (s32))
168     S_ENDPGM 0
172 # CHECK-LABEL: name: no_merge_for_non_adjacent_offsets
173 # CHECK: S_BUFFER_LOAD_DWORD_SGPR_IMM %0, %1, 4, 0 :: (dereferenceable invariant load (s32))
174 # CHECK: S_BUFFER_LOAD_DWORD_SGPR_IMM %0, %1, 12, 0 :: (dereferenceable invariant load (s32))
175 name: no_merge_for_non_adjacent_offsets
176 tracksRegLiveness: true
177 body:             |
178   bb.0:
179     liveins: $sgpr0_sgpr1_sgpr2_sgpr3, $sgpr4
181     %0:sgpr_128 = COPY $sgpr0_sgpr1_sgpr2_sgpr3
182     %1:sreg_32 = COPY $sgpr4
183     %2:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 4, 0 :: (dereferenceable invariant load (s32))
184     %3:sreg_32_xm0_xexec = S_BUFFER_LOAD_DWORD_SGPR_IMM %0:sgpr_128, %1:sreg_32, 12, 0 :: (dereferenceable invariant load (s32))
186     S_ENDPGM 0