blob: f8e4be44db4e2b48a59f8cdf9b5d7ecbc2e9dd50 [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 Arsenaultc88ba362016-10-29 04:05:06 +0000121
122; GCN-LABEL: {{^}}store_inline_imm_inv_2pi_f32:
123; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0x3e22f983{{$}}
124; VI: v_mov_b32_e32 [[REG:v[0-9]+]], 1/2pi{{$}}
125; GCN: buffer_store_dword [[REG]]
126define void @store_inline_imm_inv_2pi_f32(float addrspace(1)* %out) {
127 store float 0x3FC45F3060000000, float addrspace(1)* %out
128 ret void
129}
130
131; GCN-LABEL: {{^}}store_inline_imm_m_inv_2pi_f32:
132; SI: v_mov_b32_e32 [[REG:v[0-9]+]], 0xbe22f983{{$}}
133; GCN: buffer_store_dword [[REG]]
134define void @store_inline_imm_m_inv_2pi_f32(float addrspace(1)* %out) {
135 store float 0xBFC45F3060000000, float addrspace(1)* %out
136 ret void
137}
138
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000139; GCN-LABEL: {{^}}store_literal_imm_f32:
140; GCN: v_mov_b32_e32 [[REG:v[0-9]+]], 0x45800000
141; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000142define void @store_literal_imm_f32(float addrspace(1)* %out) {
143 store float 4096.0, float addrspace(1)* %out
144 ret void
145}
146
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000147; GCN-LABEL: {{^}}add_inline_imm_0.0_f32:
148; GCN: s_load_dword [[VAL:s[0-9]+]]
149; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 0{{$}}
150; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000151define void @add_inline_imm_0.0_f32(float addrspace(1)* %out, float %x) {
152 %y = fadd float %x, 0.0
153 store float %y, float addrspace(1)* %out
154 ret void
155}
156
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000157; GCN-LABEL: {{^}}add_inline_imm_0.5_f32:
158; GCN: s_load_dword [[VAL:s[0-9]+]]
159; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 0.5{{$}}
160; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000161define void @add_inline_imm_0.5_f32(float addrspace(1)* %out, float %x) {
162 %y = fadd float %x, 0.5
163 store float %y, float addrspace(1)* %out
164 ret void
165}
166
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000167; GCN-LABEL: {{^}}add_inline_imm_neg_0.5_f32:
168; GCN: s_load_dword [[VAL:s[0-9]+]]
169; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -0.5{{$}}
170; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000171define void @add_inline_imm_neg_0.5_f32(float addrspace(1)* %out, float %x) {
172 %y = fadd float %x, -0.5
173 store float %y, float addrspace(1)* %out
174 ret void
175}
176
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000177; GCN-LABEL: {{^}}add_inline_imm_1.0_f32:
178; GCN: s_load_dword [[VAL:s[0-9]+]]
179; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 1.0{{$}}
180; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000181define void @add_inline_imm_1.0_f32(float addrspace(1)* %out, float %x) {
182 %y = fadd float %x, 1.0
183 store float %y, float addrspace(1)* %out
184 ret void
185}
186
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000187; GCN-LABEL: {{^}}add_inline_imm_neg_1.0_f32:
188; GCN: s_load_dword [[VAL:s[0-9]+]]
189; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -1.0{{$}}
190; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000191define void @add_inline_imm_neg_1.0_f32(float addrspace(1)* %out, float %x) {
192 %y = fadd float %x, -1.0
193 store float %y, float addrspace(1)* %out
194 ret void
195}
196
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000197; GCN-LABEL: {{^}}add_inline_imm_2.0_f32:
198; GCN: s_load_dword [[VAL:s[0-9]+]]
199; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 2.0{{$}}
200; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000201define void @add_inline_imm_2.0_f32(float addrspace(1)* %out, float %x) {
202 %y = fadd float %x, 2.0
203 store float %y, float addrspace(1)* %out
204 ret void
205}
206
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000207; GCN-LABEL: {{^}}add_inline_imm_neg_2.0_f32:
208; GCN: s_load_dword [[VAL:s[0-9]+]]
209; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -2.0{{$}}
210; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000211define void @add_inline_imm_neg_2.0_f32(float addrspace(1)* %out, float %x) {
212 %y = fadd float %x, -2.0
213 store float %y, float addrspace(1)* %out
214 ret void
215}
216
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000217; GCN-LABEL: {{^}}add_inline_imm_4.0_f32:
218; GCN: s_load_dword [[VAL:s[0-9]+]]
219; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 4.0{{$}}
220; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000221define void @add_inline_imm_4.0_f32(float addrspace(1)* %out, float %x) {
222 %y = fadd float %x, 4.0
223 store float %y, float addrspace(1)* %out
224 ret void
225}
226
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000227; GCN-LABEL: {{^}}add_inline_imm_neg_4.0_f32:
228; GCN: s_load_dword [[VAL:s[0-9]+]]
229; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -4.0{{$}}
230; GCN: buffer_store_dword [[REG]]
Matt Arsenault02dc2652014-09-17 17:32:13 +0000231define void @add_inline_imm_neg_4.0_f32(float addrspace(1)* %out, float %x) {
232 %y = fadd float %x, -4.0
233 store float %y, float addrspace(1)* %out
234 ret void
235}
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000236
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000237; GCN-LABEL: {{^}}commute_add_inline_imm_0.5_f32:
238; GCN: buffer_load_dword [[VAL:v[0-9]+]]
239; GCN: v_add_f32_e32 [[REG:v[0-9]+]], 0.5, [[VAL]]
240; GCN: buffer_store_dword [[REG]]
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000241define void @commute_add_inline_imm_0.5_f32(float addrspace(1)* %out, float addrspace(1)* %in) {
David Blaikiea79ac142015-02-27 21:17:42 +0000242 %x = load float, float addrspace(1)* %in
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000243 %y = fadd float %x, 0.5
244 store float %y, float addrspace(1)* %out
245 ret void
246}
247
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000248; GCN-LABEL: {{^}}commute_add_literal_f32:
249; GCN: buffer_load_dword [[VAL:v[0-9]+]]
250; GCN: v_add_f32_e32 [[REG:v[0-9]+]], 0x44800000, [[VAL]]
251; GCN: buffer_store_dword [[REG]]
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000252define void @commute_add_literal_f32(float addrspace(1)* %out, float addrspace(1)* %in) {
David Blaikiea79ac142015-02-27 21:17:42 +0000253 %x = load float, float addrspace(1)* %in
Matt Arsenault6d3cd542014-10-17 18:00:39 +0000254 %y = fadd float %x, 1024.0
255 store float %y, float addrspace(1)* %out
256 ret void
257}
Matt Arsenault303011a2014-12-17 21:04:08 +0000258
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000259; GCN-LABEL: {{^}}add_inline_imm_1_f32:
260; GCN: s_load_dword [[VAL:s[0-9]+]]
261; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 1{{$}}
262; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000263define void @add_inline_imm_1_f32(float addrspace(1)* %out, float %x) {
264 %y = fadd float %x, 0x36a0000000000000
265 store float %y, float addrspace(1)* %out
266 ret void
267}
268
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000269; GCN-LABEL: {{^}}add_inline_imm_2_f32:
270; GCN: s_load_dword [[VAL:s[0-9]+]]
271; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 2{{$}}
272; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000273define void @add_inline_imm_2_f32(float addrspace(1)* %out, float %x) {
274 %y = fadd float %x, 0x36b0000000000000
275 store float %y, float addrspace(1)* %out
276 ret void
277}
278
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000279; GCN-LABEL: {{^}}add_inline_imm_16_f32:
280; GCN: s_load_dword [[VAL:s[0-9]+]]
281; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 16
282; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000283define void @add_inline_imm_16_f32(float addrspace(1)* %out, float %x) {
284 %y = fadd float %x, 0x36e0000000000000
285 store float %y, float addrspace(1)* %out
286 ret void
287}
288
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000289; GCN-LABEL: {{^}}add_inline_imm_neg_1_f32:
290; GCN: s_load_dword [[VAL:s[0-9]+]]
291; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -1{{$}}
292; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000293define void @add_inline_imm_neg_1_f32(float addrspace(1)* %out, float %x) {
294 %y = fadd float %x, 0xffffffffe0000000
295 store float %y, float addrspace(1)* %out
296 ret void
297}
298
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000299; GCN-LABEL: {{^}}add_inline_imm_neg_2_f32:
300; GCN: s_load_dword [[VAL:s[0-9]+]]
301; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -2{{$}}
302; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000303define void @add_inline_imm_neg_2_f32(float addrspace(1)* %out, float %x) {
304 %y = fadd float %x, 0xffffffffc0000000
305 store float %y, float addrspace(1)* %out
306 ret void
307}
308
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000309; GCN-LABEL: {{^}}add_inline_imm_neg_16_f32:
310; GCN: s_load_dword [[VAL:s[0-9]+]]
311; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], -16
312; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000313define void @add_inline_imm_neg_16_f32(float addrspace(1)* %out, float %x) {
314 %y = fadd float %x, 0xfffffffe00000000
315 store float %y, float addrspace(1)* %out
316 ret void
317}
318
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000319; GCN-LABEL: {{^}}add_inline_imm_63_f32:
320; GCN: s_load_dword [[VAL:s[0-9]+]]
321; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 63
322; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000323define void @add_inline_imm_63_f32(float addrspace(1)* %out, float %x) {
324 %y = fadd float %x, 0x36ff800000000000
325 store float %y, float addrspace(1)* %out
326 ret void
327}
328
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000329; GCN-LABEL: {{^}}add_inline_imm_64_f32:
330; GCN: s_load_dword [[VAL:s[0-9]+]]
331; GCN: v_add_f32_e64 [[REG:v[0-9]+]], [[VAL]], 64
332; GCN: buffer_store_dword [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000333define void @add_inline_imm_64_f32(float addrspace(1)* %out, float %x) {
334 %y = fadd float %x, 0x3700000000000000
335 store float %y, float addrspace(1)* %out
336 ret void
337}
338
Matt Arsenault11a4d672015-02-13 19:05:03 +0000339
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000340; GCN-LABEL: {{^}}add_inline_imm_0.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000341; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
342; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000343; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 0{{$}}
344; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000345define void @add_inline_imm_0.0_f64(double addrspace(1)* %out, double %x) {
346 %y = fadd double %x, 0.0
347 store double %y, double addrspace(1)* %out
348 ret void
349}
350
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000351; GCN-LABEL: {{^}}add_inline_imm_0.5_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000352; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
353; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000354; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 0.5
355; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000356define void @add_inline_imm_0.5_f64(double addrspace(1)* %out, double %x) {
357 %y = fadd double %x, 0.5
358 store double %y, double addrspace(1)* %out
359 ret void
360}
361
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000362; GCN-LABEL: {{^}}add_inline_imm_neg_0.5_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000363; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
364; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000365; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -0.5
366; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000367define void @add_inline_imm_neg_0.5_f64(double addrspace(1)* %out, double %x) {
368 %y = fadd double %x, -0.5
369 store double %y, double addrspace(1)* %out
370 ret void
371}
372
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000373; GCN-LABEL: {{^}}add_inline_imm_1.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000374; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
375; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000376; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 1.0
377; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000378define void @add_inline_imm_1.0_f64(double addrspace(1)* %out, double %x) {
379 %y = fadd double %x, 1.0
380 store double %y, double addrspace(1)* %out
381 ret void
382}
383
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000384; GCN-LABEL: {{^}}add_inline_imm_neg_1.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000385; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
386; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000387; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -1.0
388; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000389define void @add_inline_imm_neg_1.0_f64(double addrspace(1)* %out, double %x) {
390 %y = fadd double %x, -1.0
391 store double %y, double addrspace(1)* %out
392 ret void
393}
394
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000395; GCN-LABEL: {{^}}add_inline_imm_2.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000396; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
397; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000398; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 2.0
399; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000400define void @add_inline_imm_2.0_f64(double addrspace(1)* %out, double %x) {
401 %y = fadd double %x, 2.0
402 store double %y, double addrspace(1)* %out
403 ret void
404}
405
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000406; GCN-LABEL: {{^}}add_inline_imm_neg_2.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000407; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
408; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000409; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -2.0
410; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000411define void @add_inline_imm_neg_2.0_f64(double addrspace(1)* %out, double %x) {
412 %y = fadd double %x, -2.0
413 store double %y, double addrspace(1)* %out
414 ret void
415}
416
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000417; GCN-LABEL: {{^}}add_inline_imm_4.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000418; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
419; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000420; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 4.0
421; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000422define void @add_inline_imm_4.0_f64(double addrspace(1)* %out, double %x) {
423 %y = fadd double %x, 4.0
424 store double %y, double addrspace(1)* %out
425 ret void
426}
427
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000428; GCN-LABEL: {{^}}add_inline_imm_neg_4.0_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000429; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
430; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000431; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -4.0
432; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000433define void @add_inline_imm_neg_4.0_f64(double addrspace(1)* %out, double %x) {
434 %y = fadd double %x, -4.0
435 store double %y, double addrspace(1)* %out
436 ret void
437}
438
Matt Arsenaultc88ba362016-10-29 04:05:06 +0000439; GCN-LABEL: {{^}}add_inline_imm_inv_2pi_f64:
440; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
441; SI-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0x6dc9c882
442; SI-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x3fc45f30
443; SI: v_add_f64 v{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
444
445; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
446; VI: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 1/2pi
447; VI: buffer_store_dwordx2 [[REG]]
448define void @add_inline_imm_inv_2pi_f64(double addrspace(1)* %out, double %x) {
449 %y = fadd double %x, 0x3fc45f306dc9c882
450 store double %y, double addrspace(1)* %out
451 ret void
452}
453
454; GCN-LABEL: {{^}}add_m_inv_2pi_f64:
455; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0x6dc9c882
456; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xbfc45f30
457; GCN: v_add_f64 v{{\[[0-9]+:[0-9]+\]}}, s{{\[[0-9]+:[0-9]+\]}}, v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
458define void @add_m_inv_2pi_f64(double addrspace(1)* %out, double %x) {
459 %y = fadd double %x, 0xbfc45f306dc9c882
460 store double %y, double addrspace(1)* %out
461 ret void
462}
Matt Arsenault303011a2014-12-17 21:04:08 +0000463
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000464; GCN-LABEL: {{^}}add_inline_imm_1_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000465; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
466; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000467; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 1{{$}}
468; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000469define void @add_inline_imm_1_f64(double addrspace(1)* %out, double %x) {
470 %y = fadd double %x, 0x0000000000000001
471 store double %y, double addrspace(1)* %out
472 ret void
473}
474
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000475; GCN-LABEL: {{^}}add_inline_imm_2_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000476; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
477; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000478; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 2{{$}}
479; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000480define void @add_inline_imm_2_f64(double addrspace(1)* %out, double %x) {
481 %y = fadd double %x, 0x0000000000000002
482 store double %y, double addrspace(1)* %out
483 ret void
484}
485
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000486; GCN-LABEL: {{^}}add_inline_imm_16_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000487; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
488; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000489; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 16
490; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000491define void @add_inline_imm_16_f64(double addrspace(1)* %out, double %x) {
492 %y = fadd double %x, 0x0000000000000010
493 store double %y, double addrspace(1)* %out
494 ret void
495}
496
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000497; GCN-LABEL: {{^}}add_inline_imm_neg_1_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000498; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
499; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000500; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -1
501; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000502define void @add_inline_imm_neg_1_f64(double addrspace(1)* %out, double %x) {
503 %y = fadd double %x, 0xffffffffffffffff
504 store double %y, double addrspace(1)* %out
505 ret void
506}
507
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000508; GCN-LABEL: {{^}}add_inline_imm_neg_2_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000509; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
510; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000511; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -2
512; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000513define void @add_inline_imm_neg_2_f64(double addrspace(1)* %out, double %x) {
514 %y = fadd double %x, 0xfffffffffffffffe
515 store double %y, double addrspace(1)* %out
516 ret void
517}
518
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000519; GCN-LABEL: {{^}}add_inline_imm_neg_16_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000520; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
521; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000522; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], -16
523; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000524define void @add_inline_imm_neg_16_f64(double addrspace(1)* %out, double %x) {
525 %y = fadd double %x, 0xfffffffffffffff0
526 store double %y, double addrspace(1)* %out
527 ret void
528}
529
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000530; GCN-LABEL: {{^}}add_inline_imm_63_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000531; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
532; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000533; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 63
534; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000535define void @add_inline_imm_63_f64(double addrspace(1)* %out, double %x) {
536 %y = fadd double %x, 0x000000000000003F
537 store double %y, double addrspace(1)* %out
538 ret void
539}
540
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000541; GCN-LABEL: {{^}}add_inline_imm_64_f64:
Marek Olsakfa6607d2015-02-11 14:26:46 +0000542; SI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0xb
543; VI: s_load_dwordx2 [[VAL:s\[[0-9]+:[0-9]+\]]], {{s\[[0-9]+:[0-9]+\]}}, 0x2c
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000544; GCN: v_add_f64 [[REG:v\[[0-9]+:[0-9]+\]]], [[VAL]], 64
545; GCN: buffer_store_dwordx2 [[REG]]
Matt Arsenault303011a2014-12-17 21:04:08 +0000546define void @add_inline_imm_64_f64(double addrspace(1)* %out, double %x) {
547 %y = fadd double %x, 0x0000000000000040
548 store double %y, double addrspace(1)* %out
549 ret void
550}
551
552
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000553; GCN-LABEL: {{^}}store_inline_imm_0.0_f64:
554; GCN: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0
555; GCN: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], v[[LO_VREG]]{{$}}
556; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault303011a2014-12-17 21:04:08 +0000557define void @store_inline_imm_0.0_f64(double addrspace(1)* %out) {
558 store double 0.0, double addrspace(1)* %out
559 ret void
560}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000561
562
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000563; GCN-LABEL: {{^}}store_literal_imm_neg_0.0_f64:
564; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
565; GCN-DAG: v_bfrev_b32_e32 v[[HI_VREG:[0-9]+]], 1{{$}}
566; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000567define void @store_literal_imm_neg_0.0_f64(double addrspace(1)* %out) {
568 store double -0.0, double addrspace(1)* %out
569 ret void
570}
571
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000572; GCN-LABEL: {{^}}store_inline_imm_0.5_f64:
573; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
574; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x3fe00000
575; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000576define void @store_inline_imm_0.5_f64(double addrspace(1)* %out) {
577 store double 0.5, double addrspace(1)* %out
578 ret void
579}
580
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000581; GCN-LABEL: {{^}}store_inline_imm_m_0.5_f64:
582; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
583; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xbfe00000
584; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000585define void @store_inline_imm_m_0.5_f64(double addrspace(1)* %out) {
586 store double -0.5, double addrspace(1)* %out
587 ret void
588}
589
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000590; GCN-LABEL: {{^}}store_inline_imm_1.0_f64:
591; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
592; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x3ff00000
593; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000594define void @store_inline_imm_1.0_f64(double addrspace(1)* %out) {
595 store double 1.0, double addrspace(1)* %out
596 ret void
597}
598
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000599; GCN-LABEL: {{^}}store_inline_imm_m_1.0_f64:
600; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
601; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xbff00000
602; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000603define void @store_inline_imm_m_1.0_f64(double addrspace(1)* %out) {
604 store double -1.0, double addrspace(1)* %out
605 ret void
606}
607
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000608; GCN-LABEL: {{^}}store_inline_imm_2.0_f64:
609; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
610; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 2.0
611; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000612define void @store_inline_imm_2.0_f64(double addrspace(1)* %out) {
613 store double 2.0, double addrspace(1)* %out
614 ret void
615}
616
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000617; GCN-LABEL: {{^}}store_inline_imm_m_2.0_f64:
618; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
619; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], -2.0
620; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000621define void @store_inline_imm_m_2.0_f64(double addrspace(1)* %out) {
622 store double -2.0, double addrspace(1)* %out
623 ret void
624}
625
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000626; GCN-LABEL: {{^}}store_inline_imm_4.0_f64:
627; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
628; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x40100000
629; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000630define void @store_inline_imm_4.0_f64(double addrspace(1)* %out) {
631 store double 4.0, double addrspace(1)* %out
632 ret void
633}
634
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000635; GCN-LABEL: {{^}}store_inline_imm_m_4.0_f64:
636; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
637; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xc0100000
638; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000639define void @store_inline_imm_m_4.0_f64(double addrspace(1)* %out) {
640 store double -4.0, double addrspace(1)* %out
641 ret void
642}
643
Matt Arsenaultc88ba362016-10-29 04:05:06 +0000644; GCN-LABEL: {{^}}store_inv_2pi_f64:
645; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0x6dc9c882
646; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x3fc45f30
647; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
648define void @store_inv_2pi_f64(double addrspace(1)* %out) {
649 store double 0x3fc45f306dc9c882, double addrspace(1)* %out
650 ret void
651}
652
653; GCN-LABEL: {{^}}store_inline_imm_m_inv_2pi_f64:
654; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0x6dc9c882
655; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0xbfc45f30
656; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
657define void @store_inline_imm_m_inv_2pi_f64(double addrspace(1)* %out) {
658 store double 0xbfc45f306dc9c882, double addrspace(1)* %out
659 ret void
660}
661
Matt Arsenaultb5f2bb12016-10-28 20:33:01 +0000662; GCN-LABEL: {{^}}store_literal_imm_f64:
663; GCN-DAG: v_mov_b32_e32 v[[LO_VREG:[0-9]+]], 0{{$}}
664; GCN-DAG: v_mov_b32_e32 v[[HI_VREG:[0-9]+]], 0x40b00000
665; GCN: buffer_store_dwordx2 v{{\[}}[[LO_VREG]]:[[HI_VREG]]{{\]}}
Matt Arsenault11a4d672015-02-13 19:05:03 +0000666define void @store_literal_imm_f64(double addrspace(1)* %out) {
667 store double 4096.0, double addrspace(1)* %out
668 ret void
669}