blob: 3616ec1f45d31394abe8c0f01221a0407daa4ed3 [file] [log] [blame]
Matt Arsenault9a19c242016-03-11 07:42:49 +00001; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=GCN %s
2
3; Test that materialization constants that are the bit reversed of
4; inline immediates are replaced with bfrev of the inline immediate to
5; save code size.
6
7; GCN-LABEL: {{^}}materialize_0_i32:
8; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0{{$}}
9; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000010define amdgpu_kernel void @materialize_0_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000011 store i32 0, i32 addrspace(1)* %out
12 ret void
13}
14
15; GCN-LABEL: {{^}}materialize_0_i64:
16; GCN: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
Matt Arsenault2b957b52016-05-02 20:07:26 +000017; GCN: v_mov_b32_e32 v[[HIK:[0-9]+]], v[[LOK]]{{$}}
Matt Arsenault9a19c242016-03-11 07:42:49 +000018; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000019define amdgpu_kernel void @materialize_0_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000020 store i64 0, i64 addrspace(1)* %out
21 ret void
22}
23
24; GCN-LABEL: {{^}}materialize_neg1_i32:
25; GCN: v_mov_b32_e32 [[K:v[0-9]+]], -1{{$}}
26; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000027define amdgpu_kernel void @materialize_neg1_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000028 store i32 -1, i32 addrspace(1)* %out
29 ret void
30}
31
32; GCN-LABEL: {{^}}materialize_neg1_i64:
33; GCN: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}}
Matt Arsenault2b957b52016-05-02 20:07:26 +000034; GCN: v_mov_b32_e32 v[[HIK:[0-9]+]], v[[LOK]]{{$}}
Matt Arsenault9a19c242016-03-11 07:42:49 +000035; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000036define amdgpu_kernel void @materialize_neg1_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000037 store i64 -1, i64 addrspace(1)* %out
38 ret void
39}
40
41; GCN-LABEL: {{^}}materialize_signbit_i32:
42; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], 1{{$}}
43; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000044define amdgpu_kernel void @materialize_signbit_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000045 store i32 -2147483648, i32 addrspace(1)* %out
46 ret void
47}
48
49; GCN-LABEL: {{^}}materialize_signbit_i64:
50; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
51; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], 1{{$}}
52; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000053define amdgpu_kernel void @materialize_signbit_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000054 store i64 -9223372036854775808, i64 addrspace(1)* %out
55 ret void
56}
57
58; GCN-LABEL: {{^}}materialize_rev_neg16_i32:
59; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], -16{{$}}
60; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000061define amdgpu_kernel void @materialize_rev_neg16_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000062 store i32 268435455, i32 addrspace(1)* %out
63 ret void
64}
65
66; GCN-LABEL: {{^}}materialize_rev_neg16_i64:
67; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}}
68; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], -16{{$}}
69; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000070define amdgpu_kernel void @materialize_rev_neg16_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000071 store i64 1152921504606846975, i64 addrspace(1)* %out
72 ret void
73}
74
75; GCN-LABEL: {{^}}materialize_rev_neg17_i32:
76; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0xf7ffffff{{$}}
77; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000078define amdgpu_kernel void @materialize_rev_neg17_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000079 store i32 -134217729, i32 addrspace(1)* %out
80 ret void
81}
82
83; GCN-LABEL: {{^}}materialize_rev_neg17_i64:
84; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], -1{{$}}
85; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0xf7ffffff{{$}}
86; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000087define amdgpu_kernel void @materialize_rev_neg17_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000088 store i64 -576460752303423489, i64 addrspace(1)* %out
89 ret void
90}
91
92; GCN-LABEL: {{^}}materialize_rev_64_i32:
93; GCN: v_bfrev_b32_e32 [[K:v[0-9]+]], 64{{$}}
94; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +000095define amdgpu_kernel void @materialize_rev_64_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +000096 store i32 33554432, i32 addrspace(1)* %out
97 ret void
98}
99
100; GCN-LABEL: {{^}}materialize_rev_64_i64:
101; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
102; GCN-DAG: v_bfrev_b32_e32 v[[HIK:[0-9]+]], 64{{$}}
103; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000104define amdgpu_kernel void @materialize_rev_64_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000105 store i64 144115188075855872, i64 addrspace(1)* %out
106 ret void
107}
108
109; GCN-LABEL: {{^}}materialize_rev_65_i32:
110; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0x82000000{{$}}
111; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000112define amdgpu_kernel void @materialize_rev_65_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000113 store i32 -2113929216, i32 addrspace(1)* %out
114 ret void
115}
116
117; GCN-LABEL: {{^}}materialize_rev_65_i64:
118; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
119; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0x82000000{{$}}
120; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000121define amdgpu_kernel void @materialize_rev_65_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000122 store i64 -9079256848778919936, i64 addrspace(1)* %out
123 ret void
124}
125
126; GCN-LABEL: {{^}}materialize_rev_3_i32:
127; GCN: v_mov_b32_e32 [[K:v[0-9]+]], -2.0{{$}}
128; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000129define amdgpu_kernel void @materialize_rev_3_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000130 store i32 -1073741824, i32 addrspace(1)* %out
131 ret void
132}
133
134; GCN-LABEL: {{^}}materialize_rev_3_i64:
135; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0{{$}}
136; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], -2.0{{$}}
137; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000138define amdgpu_kernel void @materialize_rev_3_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000139 store i64 -4611686018427387904, i64 addrspace(1)* %out
140 ret void
141}
142
143; GCN-LABEL: {{^}}materialize_rev_1.0_i32:
144; GCN: v_mov_b32_e32 [[K:v[0-9]+]], 0x1fc{{$}}
145; GCN: buffer_store_dword [[K]]
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000146define amdgpu_kernel void @materialize_rev_1.0_i32(i32 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000147 store i32 508, i32 addrspace(1)* %out
148 ret void
149}
150
151; GCN-LABEL: {{^}}materialize_rev_1.0_i64:
152; GCN-DAG: v_mov_b32_e32 v[[LOK:[0-9]+]], 0x1fc{{$}}
153; GCN-DAG: v_mov_b32_e32 v[[HIK:[0-9]+]], 0{{$}}
154; GCN: buffer_store_dwordx2 v{{\[}}[[LOK]]:[[HIK]]{{\]}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000155define amdgpu_kernel void @materialize_rev_1.0_i64(i64 addrspace(1)* %out) {
Matt Arsenault9a19c242016-03-11 07:42:49 +0000156 store i64 508, i64 addrspace(1)* %out
157 ret void
158}
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000159
160; GCN-LABEL: {{^}}s_materialize_0_i32:
161; GCN: s_mov_b32 s{{[0-9]+}}, 0{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000162define amdgpu_kernel void @s_materialize_0_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000163 call void asm sideeffect "; use $0", "s"(i32 0)
164 ret void
165}
166
167; GCN-LABEL: {{^}}s_materialize_1_i32:
168; GCN: s_mov_b32 s{{[0-9]+}}, 1{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000169define amdgpu_kernel void @s_materialize_1_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000170 call void asm sideeffect "; use $0", "s"(i32 1)
171 ret void
172}
173
174; GCN-LABEL: {{^}}s_materialize_neg1_i32:
175; GCN: s_mov_b32 s{{[0-9]+}}, -1{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000176define amdgpu_kernel void @s_materialize_neg1_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000177 call void asm sideeffect "; use $0", "s"(i32 -1)
178 ret void
179}
180
181; GCN-LABEL: {{^}}s_materialize_signbit_i32:
182; GCN: s_brev_b32 s{{[0-9]+}}, 1{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000183define amdgpu_kernel void @s_materialize_signbit_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000184 call void asm sideeffect "; use $0", "s"(i32 -2147483648)
185 ret void
186}
187
188; GCN-LABEL: {{^}}s_materialize_rev_64_i32:
189; GCN: s_brev_b32 s{{[0-9]+}}, 64{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000190define amdgpu_kernel void @s_materialize_rev_64_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000191 call void asm sideeffect "; use $0", "s"(i32 33554432)
192 ret void
193}
194
195; GCN-LABEL: {{^}}s_materialize_rev_65_i32:
196; GCN: s_mov_b32 s{{[0-9]+}}, 0x82000000{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000197define amdgpu_kernel void @s_materialize_rev_65_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000198 call void asm sideeffect "; use $0", "s"(i32 -2113929216)
199 ret void
200}
201
202; GCN-LABEL: {{^}}s_materialize_rev_neg16_i32:
203; GCN: s_brev_b32 s{{[0-9]+}}, -16{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000204define amdgpu_kernel void @s_materialize_rev_neg16_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000205 call void asm sideeffect "; use $0", "s"(i32 268435455)
206 ret void
207}
208
209; GCN-LABEL: {{^}}s_materialize_rev_neg17_i32:
210; GCN: s_mov_b32 s{{[0-9]+}}, 0xf7ffffff{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000211define amdgpu_kernel void @s_materialize_rev_neg17_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000212 call void asm sideeffect "; use $0", "s"(i32 -134217729)
213 ret void
214}
215
216; GCN-LABEL: {{^}}s_materialize_rev_1.0_i32:
217; GCN: s_movk_i32 s{{[0-9]+}}, 0x1fc{{$}}
Matt Arsenault3dbeefa2017-03-21 21:39:51 +0000218define amdgpu_kernel void @s_materialize_rev_1.0_i32() {
Matt Arsenault663ab8c2016-11-01 23:14:20 +0000219 call void asm sideeffect "; use $0", "s"(i32 508)
220 ret void
221}