blob: 92a14685459c6e8f034a13ddaba04846b3ccfb69 [file] [log] [blame]
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +00001; RUN: llc -march=amdgcn -mcpu=verde -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=SI %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=GCN -check-prefix=VI %s
Tom Stellardedbf1eb2013-04-05 23:31:20 +00003
Tom Stellardedbf1eb2013-04-05 23:31:20 +00004; Use a 64-bit value with lo bits that can be represented as an inline constant
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +00005; GCN-LABEL: {{^}}i64_imm_inline_lo:
6; GCN: v_mov_b32_e32 v[[LO_VGPR:[0-9]+]], 5
7; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VGPR]]:
Tom Stellardedbf1eb2013-04-05 23:31:20 +00008define void @i64_imm_inline_lo(i64 addrspace(1) *%out) {
9entry:
10 store i64 1311768464867721221, i64 addrspace(1) *%out ; 0x1234567800000005
11 ret void
12}
13
14; Use a 64-bit value with hi bits that can be represented as an inline constant
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000015; GCN-LABEL: {{^}}i64_imm_inline_hi:
16; GCN: v_mov_b32_e32 v[[HI_VGPR:[0-9]+]], 5
17; GCN: buffer_store_dwordx2 v{{\[[0-9]+:}}[[HI_VGPR]]
Tom Stellardedbf1eb2013-04-05 23:31:20 +000018define void @i64_imm_inline_hi(i64 addrspace(1) *%out) {
19entry:
20 store i64 21780256376, i64 addrspace(1) *%out ; 0x0000000512345678
21 ret void
22}
Matt Arsenault02dc2652014-09-17 17:32:13 +000023
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000024; GCN-LABEL: {{^}}store_imm_neg_0.0_i64:
25; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
26; GCN-DAG: v_bfrev_b32_e32 v[[HI_VREG:[0-9]+]], 1{{$}}
27; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +000028define void @store_imm_neg_0.0_i64(i64 addrspace(1) *%out) {
29 store i64 -9223372036854775808, i64 addrspace(1) *%out
30 ret void
31}
32
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000033; GCN-LABEL: {{^}}store_inline_imm_neg_0.0_i32:
34; GCN: v_bfrev_b32_e32 [[REG:v[0-9]+]], 1{{$}}
35; GCN: buffer_store_dword [[REG]]
Matt Arsenault11a4d672015-02-13 19:05:03 +000036define void @store_inline_imm_neg_0.0_i32(i32 addrspace(1)* %out) {
37 store i32 -2147483648, i32 addrspace(1)* %out
38 ret void
39}
40
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000041; GCN-LABEL: {{^}}store_inline_imm_0.0_f32:
42; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0{{$}}
43; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +000044define void @store_inline_imm_0.0_f32(float addrspace(1)* %out) {
45 store float 0.0, float addrspace(1)* %out
46 ret void
47}
48
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000049; GCN-LABEL: {{^}}store_imm_neg_0.0_f32:
50; GCN: v_bfrev_b32_e32 [[REG:v[0-9]+]], 1{{$}}
51; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +000052define void @store_imm_neg_0.0_f32(float addrspace(1)* %out) {
53 store float -0.0, float addrspace(1)* %out
54 ret void
55}
56
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000057; GCN-LABEL: {{^}}store_inline_imm_0.5_f32:
58; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0.5{{$}}
59; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +000060define void @store_inline_imm_0.5_f32(float addrspace(1)* %out) {
61 store float 0.5, float addrspace(1)* %out
62 ret void
63}
64
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000065; GCN-LABEL: {{^}}store_inline_imm_m_0.5_f32:
66; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], -0.5{{$}}
67; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +000068define void @store_inline_imm_m_0.5_f32(float addrspace(1)* %out) {
69 store float -0.5, float addrspace(1)* %out
70 ret void
71}
72
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000073; GCN-LABEL: {{^}}store_inline_imm_1.0_f32:
74; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 1.0{{$}}
75; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +000076define void @store_inline_imm_1.0_f32(float addrspace(1)* %out) {
77 store float 1.0, float addrspace(1)* %out
78 ret void
79}
80
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000081; GCN-LABEL: {{^}}store_inline_imm_m_1.0_f32:
82; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], -1.0{{$}}
83; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +000084define void @store_inline_imm_m_1.0_f32(float addrspace(1)* %out) {
85 store float -1.0, float addrspace(1)* %out
86 ret void
87}
88
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000089; GCN-LABEL: {{^}}store_inline_imm_2.0_f32:
90; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 2.0{{$}}
91; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +000092define void @store_inline_imm_2.0_f32(float addrspace(1)* %out) {
93 store float 2.0, float addrspace(1)* %out
94 ret void
95}
96
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +000097; GCN-LABEL: {{^}}store_inline_imm_m_2.0_f32:
98; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], -2.0{{$}}
99; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000100define void @store_inline_imm_m_2.0_f32(float addrspace(1)* %out) {
101 store float -2.0, float addrspace(1)* %out
102 ret void
103}
104
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000105; GCN-LABEL: {{^}}store_inline_imm_4.0_f32:
106; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 4.0{{$}}
107; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000108define void @store_inline_imm_4.0_f32(float addrspace(1)* %out) {
109 store float 4.0, float addrspace(1)* %out
110 ret void
111}
112
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000113; GCN-LABEL: {{^}}store_inline_imm_m_4.0_f32:
114; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], -4.0{{$}}
115; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000116define void @store_inline_imm_m_4.0_f32(float addrspace(1)* %out) {
117 store float -4.0, float addrspace(1)* %out
118 ret void
119}
120
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000121; GCN-LABEL: {{^}}store_literal_imm_f32:
122; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x45800000
123; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000124define void @store_literal_imm_f32(float addrspace(1)* %out) {
125 store float 4096.0, float addrspace(1)* %out
126 ret void
127}
128
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000129; GCN-LABEL: {{^}}add_inline_imm_0.0_f32:
130; GCN: s_load_dword [[VAL:s[0-9]+]]
131; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 0{{$}}
132; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000133define void @add_inline_imm_0.0_f32(float addrspace(1)* %out, float %x) {
134 %y = fadd float %x, 0.0
135 store float %y, float addrspace(1)* %out
136 ret void
137}
138
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000139; GCN-LABEL: {{^}}add_inline_imm_0.5_f32:
140; GCN: s_load_dword [[VAL:s[0-9]+]]
141; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 0.5{{$}}
142; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000143define void @add_inline_imm_0.5_f32(float addrspace(1)* %out, float %x) {
144 %y = fadd float %x, 0.5
145 store float %y, float addrspace(1)* %out
146 ret void
147}
148
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000149; GCN-LABEL: {{^}}add_inline_imm_neg_0.5_f32:
150; GCN: s_load_dword [[VAL:s[0-9]+]]
151; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -0.5{{$}}
152; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000153define void @add_inline_imm_neg_0.5_f32(float addrspace(1)* %out, float %x) {
154 %y = fadd float %x, -0.5
155 store float %y, float addrspace(1)* %out
156 ret void
157}
158
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000159; GCN-LABEL: {{^}}add_inline_imm_1.0_f32:
160; GCN: s_load_dword [[VAL:s[0-9]+]]
161; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 1.0{{$}}
162; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000163define void @add_inline_imm_1.0_f32(float addrspace(1)* %out, float %x) {
164 %y = fadd float %x, 1.0
165 store float %y, float addrspace(1)* %out
166 ret void
167}
168
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000169; GCN-LABEL: {{^}}add_inline_imm_neg_1.0_f32:
170; GCN: s_load_dword [[VAL:s[0-9]+]]
171; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -1.0{{$}}
172; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000173define void @add_inline_imm_neg_1.0_f32(float addrspace(1)* %out, float %x) {
174 %y = fadd float %x, -1.0
175 store float %y, float addrspace(1)* %out
176 ret void
177}
178
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000179; GCN-LABEL: {{^}}add_inline_imm_2.0_f32:
180; GCN: s_load_dword [[VAL:s[0-9]+]]
181; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 2.0{{$}}
182; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000183define void @add_inline_imm_2.0_f32(float addrspace(1)* %out, float %x) {
184 %y = fadd float %x, 2.0
185 store float %y, float addrspace(1)* %out
186 ret void
187}
188
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000189; GCN-LABEL: {{^}}add_inline_imm_neg_2.0_f32:
190; GCN: s_load_dword [[VAL:s[0-9]+]]
191; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -2.0{{$}}
192; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000193define void @add_inline_imm_neg_2.0_f32(float addrspace(1)* %out, float %x) {
194 %y = fadd float %x, -2.0
195 store float %y, float addrspace(1)* %out
196 ret void
197}
198
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000199; GCN-LABEL: {{^}}add_inline_imm_4.0_f32:
200; GCN: s_load_dword [[VAL:s[0-9]+]]
201; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 4.0{{$}}
202; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000203define void @add_inline_imm_4.0_f32(float addrspace(1)* %out, float %x) {
204 %y = fadd float %x, 4.0
205 store float %y, float addrspace(1)* %out
206 ret void
207}
208
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000209; GCN-LABEL: {{^}}add_inline_imm_neg_4.0_f32:
210; GCN: s_load_dword [[VAL:s[0-9]+]]
211; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -4.0{{$}}
212; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000213define void @add_inline_imm_neg_4.0_f32(float addrspace(1)* %out, float %x) {
214 %y = fadd float %x, -4.0
215 store float %y, float addrspace(1)* %out
216 ret void
217}
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000218
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000219; GCN-LABEL: {{^}}commute_add_inline_imm_0.5_f32:
220; GCN: buffer_load_dword [[VAL:v[0-9]+]]
221; GCN: v_add_f32_e32 [[REG:v[0-9]+]], 0.5, [[VAL]]
222; GCN: buffer_store_dword [[REG]]
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000223define void @commute_add_inline_imm_0.5_f32(float addrspace(1)* %out, float addrspace(1)* %in) {
David Blaikiea79ac142015-02-27 21:17:42 +0000224 %x = load float, float addrspace(1)* %in
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000225 %y = fadd float %x, 0.5
226 store float %y, float addrspace(1)* %out
227 ret void
228}
229
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000230; GCN-LABEL: {{^}}commute_add_literal_f32:
231; GCN: buffer_load_dword [[VAL:v[0-9]+]]
232; GCN: v_add_f32_e32 [[REG:v[0-9]+]], 0x44800000, [[VAL]]
233; GCN: buffer_store_dword [[REG]]
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000234define void @commute_add_literal_f32(float addrspace(1)* %out, float addrspace(1)* %in) {
David Blaikiea79ac142015-02-27 21:17:42 +0000235 %x = load float, float addrspace(1)* %in
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000236 %y = fadd float %x, 1024.0
237 store float %y, float addrspace(1)* %out
238 ret void
239}
Matt Arsenault303011a2014-12-17 21:04:08 +0000240
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000241; GCN-LABEL: {{^}}add_inline_imm_1_f32:
242; GCN: s_load_dword [[VAL:s[0-9]+]]
243; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 1{{$}}
244; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000245define void @add_inline_imm_1_f32(float addrspace(1)* %out, float %x) {
246 %y = fadd float %x, 0x36a0000000000000
247 store float %y, float addrspace(1)* %out
248 ret void
249}
250
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000251; GCN-LABEL: {{^}}add_inline_imm_2_f32:
252; GCN: s_load_dword [[VAL:s[0-9]+]]
253; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 2{{$}}
254; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000255define void @add_inline_imm_2_f32(float addrspace(1)* %out, float %x) {
256 %y = fadd float %x, 0x36b0000000000000
257 store float %y, float addrspace(1)* %out
258 ret void
259}
260
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000261; GCN-LABEL: {{^}}add_inline_imm_16_f32:
262; GCN: s_load_dword [[VAL:s[0-9]+]]
263; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 16
264; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000265define void @add_inline_imm_16_f32(float addrspace(1)* %out, float %x) {
266 %y = fadd float %x, 0x36e0000000000000
267 store float %y, float addrspace(1)* %out
268 ret void
269}
270
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000271; GCN-LABEL: {{^}}add_inline_imm_neg_1_f32:
272; GCN: s_load_dword [[VAL:s[0-9]+]]
273; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -1{{$}}
274; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000275define void @add_inline_imm_neg_1_f32(float addrspace(1)* %out, float %x) {
276 %y = fadd float %x, 0xffffffffe0000000
277 store float %y, float addrspace(1)* %out
278 ret void
279}
280
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000281; GCN-LABEL: {{^}}add_inline_imm_neg_2_f32:
282; GCN: s_load_dword [[VAL:s[0-9]+]]
283; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -2{{$}}
284; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000285define void @add_inline_imm_neg_2_f32(float addrspace(1)* %out, float %x) {
286 %y = fadd float %x, 0xffffffffc0000000
287 store float %y, float addrspace(1)* %out
288 ret void
289}
290
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000291; GCN-LABEL: {{^}}add_inline_imm_neg_16_f32:
292; GCN: s_load_dword [[VAL:s[0-9]+]]
293; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -16
294; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000295define void @add_inline_imm_neg_16_f32(float addrspace(1)* %out, float %x) {
296 %y = fadd float %x, 0xfffffffe00000000
297 store float %y, float addrspace(1)* %out
298 ret void
299}
300
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000301; GCN-LABEL: {{^}}add_inline_imm_63_f32:
302; GCN: s_load_dword [[VAL:s[0-9]+]]
303; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 63
304; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000305define void @add_inline_imm_63_f32(float addrspace(1)* %out, float %x) {
306 %y = fadd float %x, 0x36ff800000000000
307 store float %y, float addrspace(1)* %out
308 ret void
309}
310
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000311; GCN-LABEL: {{^}}add_inline_imm_64_f32:
312; GCN: s_load_dword [[VAL:s[0-9]+]]
313; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 64
314; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000315define void @add_inline_imm_64_f32(float addrspace(1)* %out, float %x) {
316 %y = fadd float %x, 0x3700000000000000
317 store float %y, float addrspace(1)* %out
318 ret void
319}
320
Matt Arsenault11a4d672015-02-13 19:05:03 +0000321
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000322; GCN-LABEL: {{^}}add_inline_imm_0.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000323; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
324; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000325; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 0{{$}}
326; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000327define void @add_inline_imm_0.0_f64(double addrspace(1)* %out, double %x) {
328 %y = fadd double %x, 0.0
329 store double %y, double addrspace(1)* %out
330 ret void
331}
332
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000333; GCN-LABEL: {{^}}add_inline_imm_0.5_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000334; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
335; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000336; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 0.5
337; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000338define void @add_inline_imm_0.5_f64(double addrspace(1)* %out, double %x) {
339 %y = fadd double %x, 0.5
340 store double %y, double addrspace(1)* %out
341 ret void
342}
343
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000344; GCN-LABEL: {{^}}add_inline_imm_neg_0.5_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000345; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
346; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000347; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -0.5
348; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000349define void @add_inline_imm_neg_0.5_f64(double addrspace(1)* %out, double %x) {
350 %y = fadd double %x, -0.5
351 store double %y, double addrspace(1)* %out
352 ret void
353}
354
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000355; GCN-LABEL: {{^}}add_inline_imm_1.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000356; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
357; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000358; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 1.0
359; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000360define void @add_inline_imm_1.0_f64(double addrspace(1)* %out, double %x) {
361 %y = fadd double %x, 1.0
362 store double %y, double addrspace(1)* %out
363 ret void
364}
365
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000366; GCN-LABEL: {{^}}add_inline_imm_neg_1.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000367; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
368; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000369; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -1.0
370; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000371define void @add_inline_imm_neg_1.0_f64(double addrspace(1)* %out, double %x) {
372 %y = fadd double %x, -1.0
373 store double %y, double addrspace(1)* %out
374 ret void
375}
376
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000377; GCN-LABEL: {{^}}add_inline_imm_2.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000378; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
379; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000380; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 2.0
381; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000382define void @add_inline_imm_2.0_f64(double addrspace(1)* %out, double %x) {
383 %y = fadd double %x, 2.0
384 store double %y, double addrspace(1)* %out
385 ret void
386}
387
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000388; GCN-LABEL: {{^}}add_inline_imm_neg_2.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000389; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
390; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000391; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -2.0
392; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000393define void @add_inline_imm_neg_2.0_f64(double addrspace(1)* %out, double %x) {
394 %y = fadd double %x, -2.0
395 store double %y, double addrspace(1)* %out
396 ret void
397}
398
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000399; GCN-LABEL: {{^}}add_inline_imm_4.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000400; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
401; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000402; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 4.0
403; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000404define void @add_inline_imm_4.0_f64(double addrspace(1)* %out, double %x) {
405 %y = fadd double %x, 4.0
406 store double %y, double addrspace(1)* %out
407 ret void
408}
409
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000410; GCN-LABEL: {{^}}add_inline_imm_neg_4.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000411; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
412; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000413; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -4.0
414; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000415define void @add_inline_imm_neg_4.0_f64(double addrspace(1)* %out, double %x) {
416 %y = fadd double %x, -4.0
417 store double %y, double addrspace(1)* %out
418 ret void
419}
420
421
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000422; GCN-LABEL: {{^}}add_inline_imm_1_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000423; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
424; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000425; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 1{{$}}
426; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000427define void @add_inline_imm_1_f64(double addrspace(1)* %out, double %x) {
428 %y = fadd double %x, 0x0000000000000001
429 store double %y, double addrspace(1)* %out
430 ret void
431}
432
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000433; GCN-LABEL: {{^}}add_inline_imm_2_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000434; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
435; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000436; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 2{{$}}
437; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000438define void @add_inline_imm_2_f64(double addrspace(1)* %out, double %x) {
439 %y = fadd double %x, 0x0000000000000002
440 store double %y, double addrspace(1)* %out
441 ret void
442}
443
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000444; GCN-LABEL: {{^}}add_inline_imm_16_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000445; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
446; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000447; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 16
448; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000449define void @add_inline_imm_16_f64(double addrspace(1)* %out, double %x) {
450 %y = fadd double %x, 0x0000000000000010
451 store double %y, double addrspace(1)* %out
452 ret void
453}
454
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000455; GCN-LABEL: {{^}}add_inline_imm_neg_1_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000456; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
457; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000458; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -1
459; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000460define void @add_inline_imm_neg_1_f64(double addrspace(1)* %out, double %x) {
461 %y = fadd double %x, 0xffffffffffffffff
462 store double %y, double addrspace(1)* %out
463 ret void
464}
465
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000466; GCN-LABEL: {{^}}add_inline_imm_neg_2_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000467; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
468; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000469; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -2
470; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000471define void @add_inline_imm_neg_2_f64(double addrspace(1)* %out, double %x) {
472 %y = fadd double %x, 0xfffffffffffffffe
473 store double %y, double addrspace(1)* %out
474 ret void
475}
476
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000477; GCN-LABEL: {{^}}add_inline_imm_neg_16_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000478; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
479; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000480; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -16
481; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000482define void @add_inline_imm_neg_16_f64(double addrspace(1)* %out, double %x) {
483 %y = fadd double %x, 0xfffffffffffffff0
484 store double %y, double addrspace(1)* %out
485 ret void
486}
487
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000488; GCN-LABEL: {{^}}add_inline_imm_63_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000489; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
490; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000491; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 63
492; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000493define void @add_inline_imm_63_f64(double addrspace(1)* %out, double %x) {
494 %y = fadd double %x, 0x000000000000003F
495 store double %y, double addrspace(1)* %out
496 ret void
497}
498
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000499; GCN-LABEL: {{^}}add_inline_imm_64_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000500; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
501; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000502; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 64
503; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000504define void @add_inline_imm_64_f64(double addrspace(1)* %out, double %x) {
505 %y = fadd double %x, 0x0000000000000040
506 store double %y, double addrspace(1)* %out
507 ret void
508}
509
510
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000511; GCN-LABEL: {{^}}store_inline_imm_0.0_f64:
512; GCN: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0
513; GCN: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], v[[LO_VREG]]{{$}}
514; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault303011a2014-12-17 21:04:08 +0000515define void @store_inline_imm_0.0_f64(double addrspace(1)* %out) {
516 store double 0.0, double addrspace(1)* %out
517 ret void
518}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000519
520
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000521; GCN-LABEL: {{^}}store_literal_imm_neg_0.0_f64:
522; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
523; GCN-DAG: v_bfrev_b32_e32 v[[HI_VREG:[0-9]+]], 1{{$}}
524; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000525define void @store_literal_imm_neg_0.0_f64(double addrspace(1)* %out) {
526 store double -0.0, double addrspace(1)* %out
527 ret void
528}
529
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000530; GCN-LABEL: {{^}}store_inline_imm_0.5_f64:
531; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
532; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x3fe00000
533; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000534define void @store_inline_imm_0.5_f64(double addrspace(1)* %out) {
535 store double 0.5, double addrspace(1)* %out
536 ret void
537}
538
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000539; GCN-LABEL: {{^}}store_inline_imm_m_0.5_f64:
540; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
541; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xbfe00000
542; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000543define void @store_inline_imm_m_0.5_f64(double addrspace(1)* %out) {
544 store double -0.5, double addrspace(1)* %out
545 ret void
546}
547
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000548; GCN-LABEL: {{^}}store_inline_imm_1.0_f64:
549; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
550; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x3ff00000
551; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000552define void @store_inline_imm_1.0_f64(double addrspace(1)* %out) {
553 store double 1.0, double addrspace(1)* %out
554 ret void
555}
556
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000557; GCN-LABEL: {{^}}store_inline_imm_m_1.0_f64:
558; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
559; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xbff00000
560; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000561define void @store_inline_imm_m_1.0_f64(double addrspace(1)* %out) {
562 store double -1.0, double addrspace(1)* %out
563 ret void
564}
565
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000566; GCN-LABEL: {{^}}store_inline_imm_2.0_f64:
567; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
568; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 2.0
569; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000570define void @store_inline_imm_2.0_f64(double addrspace(1)* %out) {
571 store double 2.0, double addrspace(1)* %out
572 ret void
573}
574
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000575; GCN-LABEL: {{^}}store_inline_imm_m_2.0_f64:
576; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
577; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], -2.0
578; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000579define void @store_inline_imm_m_2.0_f64(double addrspace(1)* %out) {
580 store double -2.0, double addrspace(1)* %out
581 ret void
582}
583
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000584; GCN-LABEL: {{^}}store_inline_imm_4.0_f64:
585; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
586; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x40100000
587; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000588define void @store_inline_imm_4.0_f64(double addrspace(1)* %out) {
589 store double 4.0, double addrspace(1)* %out
590 ret void
591}
592
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000593; GCN-LABEL: {{^}}store_inline_imm_m_4.0_f64:
594; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
595; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xc0100000
596; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000597define void @store_inline_imm_m_4.0_f64(double addrspace(1)* %out) {
598 store double -4.0, double addrspace(1)* %out
599 ret void
600}
601
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000602; GCN-LABEL: {{^}}store_literal_imm_f64:
603; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
604; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x40b00000
605; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000606define void @store_literal_imm_f64(double addrspace(1)* %out) {
607 store double 4096.0, double addrspace(1)* %out
608 ret void
609}