blob: dd275338d7c03de385e3addb205175ef7bc28312 [file] [log] [blame]
Tom Stellard1c8788e2014-03-07 20:12:33 +00001; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck --check-prefix=EG-CHECK --check-prefix=FUNC %s
2; RUN: llc < %s -march=r600 -mcpu=cayman | FileCheck --check-prefix=CM-CHECK --check-prefix=FUNC %s
3; RUN: llc < %s -march=r600 -mcpu=verde -verify-machineinstrs | FileCheck --check-prefix=SI-CHECK --check-prefix=FUNC %s
Tom Stellard754f80f2013-04-05 23:31:51 +00004
Tom Stellardd3ee8c12013-08-16 01:12:06 +00005;===------------------------------------------------------------------------===;
6; Global Address Space
7;===------------------------------------------------------------------------===;
Tom Stellard1c8788e2014-03-07 20:12:33 +00008; FUNC-LABEL: @store_i1
9; EG-CHECK: MEM_RAT MSKOR
10; SI-CHECK: BUFFER_STORE_BYTE
11define void @store_i1(i1 addrspace(1)* %out) {
12entry:
13 store i1 true, i1 addrspace(1)* %out
14 ret void
15}
Tom Stellardd3ee8c12013-08-16 01:12:06 +000016
17; i8 store
Tom Stellardaf775432013-10-23 00:44:32 +000018; EG-CHECK-LABEL: @store_i8
Tom Stellardd3ee8c12013-08-16 01:12:06 +000019; EG-CHECK: MEM_RAT MSKOR T[[RW_GPR:[0-9]]].XW, T{{[0-9]}}.X
20; EG-CHECK: VTX_READ_8 [[VAL:T[0-9]\.X]], [[VAL]]
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000021; IG 0: Get the byte index and truncate the value
22; EG-CHECK: AND_INT T{{[0-9]}}.[[BI_CHAN:[XYZW]]], KC0[2].Y, literal.x
23; EG-CHECK-NEXT: AND_INT * T{{[0-9]}}.[[TRUNC_CHAN:[XYZW]]], [[VAL]], literal.y
24; EG-CHECK-NEXT: 3(4.203895e-45), 255(3.573311e-43)
25; IG 1: Truncate the calculated the shift amount for the mask
26; EG-CHECK: LSHL * T{{[0-9]}}.[[SHIFT_CHAN:[XYZW]]], PV.[[BI_CHAN]], literal.x
Tom Stellardd3ee8c12013-08-16 01:12:06 +000027; EG-CHECK-NEXT: 3
Tom Stellardd3ee8c12013-08-16 01:12:06 +000028; IG 2: Shift the value and the mask
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000029; EG-CHECK: LSHL T[[RW_GPR]].X, T{{[0-9]}}.[[TRUNC_CHAN]], PV.[[SHIFT_CHAN]]
Tom Stellardd3ee8c12013-08-16 01:12:06 +000030; EG-CHECK: LSHL * T[[RW_GPR]].W, literal.x, PV.[[SHIFT_CHAN]]
31; EG-CHECK-NEXT: 255
32; IG 3: Initialize the Y and Z channels to zero
33; XXX: An optimal scheduler should merge this into one of the prevous IGs.
34; EG-CHECK: MOV T[[RW_GPR]].Y, 0.0
35; EG-CHECK: MOV * T[[RW_GPR]].Z, 0.0
36
Tom Stellardaf775432013-10-23 00:44:32 +000037; SI-CHECK-LABEL: @store_i8
Tom Stellardd3ee8c12013-08-16 01:12:06 +000038; SI-CHECK: BUFFER_STORE_BYTE
39
40define void @store_i8(i8 addrspace(1)* %out, i8 %in) {
41entry:
42 store i8 %in, i8 addrspace(1)* %out
43 ret void
44}
45
46; i16 store
Tom Stellardaf775432013-10-23 00:44:32 +000047; EG-CHECK-LABEL: @store_i16
Tom Stellardd3ee8c12013-08-16 01:12:06 +000048; EG-CHECK: MEM_RAT MSKOR T[[RW_GPR:[0-9]]].XW, T{{[0-9]}}.X
49; EG-CHECK: VTX_READ_16 [[VAL:T[0-9]\.X]], [[VAL]]
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000050; IG 0: Get the byte index and truncate the value
51; EG-CHECK: AND_INT T{{[0-9]}}.[[BI_CHAN:[XYZW]]], KC0[2].Y, literal.x
52; EG-CHECK: AND_INT * T{{[0-9]}}.[[TRUNC_CHAN:[XYZW]]], [[VAL]], literal.y
53; EG-CHECK-NEXT: 3(4.203895e-45), 65535(9.183409e-41)
54; IG 1: Truncate the calculated the shift amount for the mask
55; EG-CHECK: LSHL * T{{[0-9]}}.[[SHIFT_CHAN:[XYZW]]], PV.[[BI_CHAN]], literal.x
56; EG-CHECK: 3
Tom Stellardd3ee8c12013-08-16 01:12:06 +000057; IG 2: Shift the value and the mask
Vincent Lejeune7e2c8322013-09-04 19:53:46 +000058; EG-CHECK: LSHL T[[RW_GPR]].X, T{{[0-9]}}.[[TRUNC_CHAN]], PV.[[SHIFT_CHAN]]
Tom Stellardd3ee8c12013-08-16 01:12:06 +000059; EG-CHECK: LSHL * T[[RW_GPR]].W, literal.x, PV.[[SHIFT_CHAN]]
60; EG-CHECK-NEXT: 65535
61; IG 3: Initialize the Y and Z channels to zero
62; XXX: An optimal scheduler should merge this into one of the prevous IGs.
63; EG-CHECK: MOV T[[RW_GPR]].Y, 0.0
64; EG-CHECK: MOV * T[[RW_GPR]].Z, 0.0
65
Tom Stellardaf775432013-10-23 00:44:32 +000066; SI-CHECK-LABEL: @store_i16
Tom Stellardd3ee8c12013-08-16 01:12:06 +000067; SI-CHECK: BUFFER_STORE_SHORT
68define void @store_i16(i16 addrspace(1)* %out, i16 %in) {
69entry:
70 store i16 %in, i16 addrspace(1)* %out
71 ret void
72}
73
Tom Stellardaf775432013-10-23 00:44:32 +000074; EG-CHECK-LABEL: @store_v2i8
Tom Stellardfbab8272013-08-16 01:12:11 +000075; EG-CHECK: MEM_RAT MSKOR
76; EG-CHECK-NOT: MEM_RAT MSKOR
Tom Stellardaf775432013-10-23 00:44:32 +000077; SI-CHECK-LABEL: @store_v2i8
Tom Stellardfbab8272013-08-16 01:12:11 +000078; SI-CHECK: BUFFER_STORE_BYTE
79; SI-CHECK: BUFFER_STORE_BYTE
80define void @store_v2i8(<2 x i8> addrspace(1)* %out, <2 x i32> %in) {
81entry:
82 %0 = trunc <2 x i32> %in to <2 x i8>
83 store <2 x i8> %0, <2 x i8> addrspace(1)* %out
84 ret void
85}
86
87
Tom Stellardaf775432013-10-23 00:44:32 +000088; EG-CHECK-LABEL: @store_v2i16
Tom Stellardfbab8272013-08-16 01:12:11 +000089; EG-CHECK: MEM_RAT_CACHELESS STORE_RAW
Tom Stellardaf775432013-10-23 00:44:32 +000090; CM-CHECK-LABEL: @store_v2i16
Tom Stellardfbab8272013-08-16 01:12:11 +000091; CM-CHECK: MEM_RAT_CACHELESS STORE_DWORD
Tom Stellardaf775432013-10-23 00:44:32 +000092; SI-CHECK-LABEL: @store_v2i16
93; SI-CHECK: BUFFER_STORE_SHORT
94; SI-CHECK: BUFFER_STORE_SHORT
Tom Stellardfbab8272013-08-16 01:12:11 +000095define void @store_v2i16(<2 x i16> addrspace(1)* %out, <2 x i32> %in) {
96entry:
97 %0 = trunc <2 x i32> %in to <2 x i16>
98 store <2 x i16> %0, <2 x i16> addrspace(1)* %out
99 ret void
100}
101
Tom Stellardaf775432013-10-23 00:44:32 +0000102; EG-CHECK-LABEL: @store_v4i8
Tom Stellardfbab8272013-08-16 01:12:11 +0000103; EG-CHECK: MEM_RAT_CACHELESS STORE_RAW
Tom Stellardaf775432013-10-23 00:44:32 +0000104; CM-CHECK-LABEL: @store_v4i8
Tom Stellardfbab8272013-08-16 01:12:11 +0000105; CM-CHECK: MEM_RAT_CACHELESS STORE_DWORD
Tom Stellardaf775432013-10-23 00:44:32 +0000106; SI-CHECK-LABEL: @store_v4i8
Tom Stellardfbab8272013-08-16 01:12:11 +0000107; SI-CHECK: BUFFER_STORE_BYTE
108; SI-CHECK: BUFFER_STORE_BYTE
109; SI-CHECK: BUFFER_STORE_BYTE
110; SI-CHECK: BUFFER_STORE_BYTE
111define void @store_v4i8(<4 x i8> addrspace(1)* %out, <4 x i32> %in) {
112entry:
113 %0 = trunc <4 x i32> %in to <4 x i8>
114 store <4 x i8> %0, <4 x i8> addrspace(1)* %out
115 ret void
116}
117
Tom Stellard5a6b0d82013-04-19 02:10:53 +0000118; floating-point store
Tom Stellardaf775432013-10-23 00:44:32 +0000119; EG-CHECK-LABEL: @store_f32
Tom Stellardac00f9d2013-08-16 01:11:46 +0000120; EG-CHECK: MEM_RAT_CACHELESS STORE_RAW T{{[0-9]+\.X, T[0-9]+\.X}}, 1
Tom Stellardaf775432013-10-23 00:44:32 +0000121; CM-CHECK-LABEL: @store_f32
Tom Stellardac00f9d2013-08-16 01:11:46 +0000122; CM-CHECK: MEM_RAT_CACHELESS STORE_DWORD T{{[0-9]+\.X, T[0-9]+\.X}}
Tom Stellardaf775432013-10-23 00:44:32 +0000123; SI-CHECK-LABEL: @store_f32
Tom Stellard754f80f2013-04-05 23:31:51 +0000124; SI-CHECK: BUFFER_STORE_DWORD
125
Tom Stellard5a6b0d82013-04-19 02:10:53 +0000126define void @store_f32(float addrspace(1)* %out, float %in) {
Tom Stellard754f80f2013-04-05 23:31:51 +0000127 store float %in, float addrspace(1)* %out
128 ret void
129}
Tom Stellard0125f2a2013-06-25 02:39:35 +0000130
Tom Stellardaf775432013-10-23 00:44:32 +0000131; EG-CHECK-LABEL: @store_v4i16
Tom Stellardfbab8272013-08-16 01:12:11 +0000132; EG-CHECK: MEM_RAT MSKOR
133; EG-CHECK: MEM_RAT MSKOR
134; EG-CHECK: MEM_RAT MSKOR
135; EG-CHECK: MEM_RAT MSKOR
136; EG-CHECK-NOT: MEM_RAT MSKOR
Tom Stellardaf775432013-10-23 00:44:32 +0000137; SI-CHECK-LABEL: @store_v4i16
Tom Stellardfbab8272013-08-16 01:12:11 +0000138; SI-CHECK: BUFFER_STORE_SHORT
139; SI-CHECK: BUFFER_STORE_SHORT
140; SI-CHECK: BUFFER_STORE_SHORT
141; SI-CHECK: BUFFER_STORE_SHORT
142; SI-CHECK-NOT: BUFFER_STORE_BYTE
143define void @store_v4i16(<4 x i16> addrspace(1)* %out, <4 x i32> %in) {
144entry:
145 %0 = trunc <4 x i32> %in to <4 x i16>
146 store <4 x i16> %0, <4 x i16> addrspace(1)* %out
147 ret void
148}
149
Tom Stellarded2f6142013-07-18 21:43:42 +0000150; vec2 floating-point stores
Tom Stellardaf775432013-10-23 00:44:32 +0000151; EG-CHECK-LABEL: @store_v2f32
Tom Stellardac00f9d2013-08-16 01:11:46 +0000152; EG-CHECK: MEM_RAT_CACHELESS STORE_RAW
Tom Stellardaf775432013-10-23 00:44:32 +0000153; CM-CHECK-LABEL: @store_v2f32
Tom Stellardac00f9d2013-08-16 01:11:46 +0000154; CM-CHECK: MEM_RAT_CACHELESS STORE_DWORD
Tom Stellardaf775432013-10-23 00:44:32 +0000155; SI-CHECK-LABEL: @store_v2f32
Tom Stellarded2f6142013-07-18 21:43:42 +0000156; SI-CHECK: BUFFER_STORE_DWORDX2
157
158define void @store_v2f32(<2 x float> addrspace(1)* %out, float %a, float %b) {
159entry:
160 %0 = insertelement <2 x float> <float 0.0, float 0.0>, float %a, i32 0
Tom Stellard8e5da412013-08-14 23:24:32 +0000161 %1 = insertelement <2 x float> %0, float %b, i32 1
Tom Stellarded2f6142013-07-18 21:43:42 +0000162 store <2 x float> %1, <2 x float> addrspace(1)* %out
163 ret void
164}
165
Tom Stellardaf775432013-10-23 00:44:32 +0000166; EG-CHECK-LABEL: @store_v4i32
Tom Stellard6d1379e2013-08-16 01:12:00 +0000167; EG-CHECK: MEM_RAT_CACHELESS STORE_RAW
168; EG-CHECK-NOT: MEM_RAT_CACHELESS STORE_RAW
Tom Stellardaf775432013-10-23 00:44:32 +0000169; CM-CHECK-LABEL: @store_v4i32
Tom Stellard6d1379e2013-08-16 01:12:00 +0000170; CM-CHECK: MEM_RAT_CACHELESS STORE_DWORD
171; CM-CHECK-NOT: MEM_RAT_CACHELESS STORE_DWORD
Tom Stellardaf775432013-10-23 00:44:32 +0000172; SI-CHECK-LABEL: @store_v4i32
Tom Stellard6d1379e2013-08-16 01:12:00 +0000173; SI-CHECK: BUFFER_STORE_DWORDX4
174define void @store_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> %in) {
175entry:
176 store <4 x i32> %in, <4 x i32> addrspace(1)* %out
177 ret void
178}
179
Tom Stellard605e1162014-05-02 15:41:46 +0000180; FUNC-LABEL: @store_i64_i8
181; EG-CHECK: MEM_RAT MSKOR
182; SI-CHECK: BUFFER_STORE_BYTE
183define void @store_i64_i8(i8 addrspace(1)* %out, i64 %in) {
184entry:
185 %0 = trunc i64 %in to i8
186 store i8 %0, i8 addrspace(1)* %out
187 ret void
188}
189
190; FUNC-LABEL: @store_i64_i16
191; EG-CHECK: MEM_RAT MSKOR
192; SI-CHECK: BUFFER_STORE_SHORT
193define void @store_i64_i16(i16 addrspace(1)* %out, i64 %in) {
194entry:
195 %0 = trunc i64 %in to i16
196 store i16 %0, i16 addrspace(1)* %out
197 ret void
198}
199
Tom Stellard2ffc3302013-08-26 15:05:44 +0000200;===------------------------------------------------------------------------===;
201; Local Address Space
202;===------------------------------------------------------------------------===;
203
Tom Stellard1c8788e2014-03-07 20:12:33 +0000204; FUNC-LABEL: @store_local_i1
205; EG-CHECK: LDS_BYTE_WRITE
206; SI-CHECK: DS_WRITE_B8
207define void @store_local_i1(i1 addrspace(3)* %out) {
208entry:
209 store i1 true, i1 addrspace(3)* %out
210 ret void
211}
212
Tom Stellardaf775432013-10-23 00:44:32 +0000213; EG-CHECK-LABEL: @store_local_i8
Tom Stellardf3d166a2013-08-26 15:05:49 +0000214; EG-CHECK: LDS_BYTE_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000215; SI-CHECK-LABEL: @store_local_i8
Tom Stellardf3d166a2013-08-26 15:05:49 +0000216; SI-CHECK: DS_WRITE_B8
217define void @store_local_i8(i8 addrspace(3)* %out, i8 %in) {
218 store i8 %in, i8 addrspace(3)* %out
219 ret void
220}
221
Tom Stellardaf775432013-10-23 00:44:32 +0000222; EG-CHECK-LABEL: @store_local_i16
Tom Stellardf3d166a2013-08-26 15:05:49 +0000223; EG-CHECK: LDS_SHORT_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000224; SI-CHECK-LABEL: @store_local_i16
Tom Stellardf3d166a2013-08-26 15:05:49 +0000225; SI-CHECK: DS_WRITE_B16
226define void @store_local_i16(i16 addrspace(3)* %out, i16 %in) {
227 store i16 %in, i16 addrspace(3)* %out
228 ret void
229}
230
Tom Stellardaf775432013-10-23 00:44:32 +0000231; EG-CHECK-LABEL: @store_local_v2i16
Tom Stellard2ffc3302013-08-26 15:05:44 +0000232; EG-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000233; CM-CHECK-LABEL: @store_local_v2i16
Tom Stellard2ffc3302013-08-26 15:05:44 +0000234; CM-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000235; SI-CHECK-LABEL: @store_local_v2i16
236; SI-CHECK: DS_WRITE_B16
237; SI-CHECK: DS_WRITE_B16
Tom Stellard2ffc3302013-08-26 15:05:44 +0000238define void @store_local_v2i16(<2 x i16> addrspace(3)* %out, <2 x i16> %in) {
239entry:
240 store <2 x i16> %in, <2 x i16> addrspace(3)* %out
241 ret void
242}
243
Tom Stellardaf775432013-10-23 00:44:32 +0000244; EG-CHECK-LABEL: @store_local_v4i8
Tom Stellard7da047c2013-08-26 15:05:55 +0000245; EG-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000246; CM-CHECK-LABEL: @store_local_v4i8
Tom Stellard7da047c2013-08-26 15:05:55 +0000247; CM-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000248; SI-CHECK-LABEL: @store_local_v4i8
Tom Stellard7da047c2013-08-26 15:05:55 +0000249; SI-CHECK: DS_WRITE_B8
250; SI-CHECK: DS_WRITE_B8
251; SI-CHECK: DS_WRITE_B8
252; SI-CHECK: DS_WRITE_B8
253define void @store_local_v4i8(<4 x i8> addrspace(3)* %out, <4 x i8> %in) {
254entry:
255 store <4 x i8> %in, <4 x i8> addrspace(3)* %out
256 ret void
257}
258
Tom Stellardaf775432013-10-23 00:44:32 +0000259; EG-CHECK-LABEL: @store_local_v2i32
Tom Stellard2ffc3302013-08-26 15:05:44 +0000260; EG-CHECK: LDS_WRITE
261; EG-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000262; CM-CHECK-LABEL: @store_local_v2i32
Tom Stellard2ffc3302013-08-26 15:05:44 +0000263; CM-CHECK: LDS_WRITE
264; CM-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000265; SI-CHECK-LABEL: @store_local_v2i32
Tom Stellard9b3816b2014-06-24 23:33:04 +0000266; SI-CHECK: DS_WRITE_B64
Tom Stellard2ffc3302013-08-26 15:05:44 +0000267define void @store_local_v2i32(<2 x i32> addrspace(3)* %out, <2 x i32> %in) {
268entry:
269 store <2 x i32> %in, <2 x i32> addrspace(3)* %out
270 ret void
271}
272
Tom Stellardaf775432013-10-23 00:44:32 +0000273; EG-CHECK-LABEL: @store_local_v4i32
Tom Stellard2ffc3302013-08-26 15:05:44 +0000274; EG-CHECK: LDS_WRITE
275; EG-CHECK: LDS_WRITE
276; EG-CHECK: LDS_WRITE
277; EG-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000278; CM-CHECK-LABEL: @store_local_v4i32
Tom Stellard2ffc3302013-08-26 15:05:44 +0000279; CM-CHECK: LDS_WRITE
280; CM-CHECK: LDS_WRITE
281; CM-CHECK: LDS_WRITE
282; CM-CHECK: LDS_WRITE
Tom Stellardaf775432013-10-23 00:44:32 +0000283; SI-CHECK-LABEL: @store_local_v4i32
Tom Stellard2ffc3302013-08-26 15:05:44 +0000284; SI-CHECK: DS_WRITE_B32
285; SI-CHECK: DS_WRITE_B32
286; SI-CHECK: DS_WRITE_B32
287; SI-CHECK: DS_WRITE_B32
288define void @store_local_v4i32(<4 x i32> addrspace(3)* %out, <4 x i32> %in) {
289entry:
290 store <4 x i32> %in, <4 x i32> addrspace(3)* %out
291 ret void
292}
293
Tom Stellard605e1162014-05-02 15:41:46 +0000294; FUNC-LABEL: @store_local_i64_i8
295; EG-CHECK: LDS_BYTE_WRITE
296; SI-CHECK: DS_WRITE_B8
297define void @store_local_i64_i8(i8 addrspace(3)* %out, i64 %in) {
298entry:
299 %0 = trunc i64 %in to i8
300 store i8 %0, i8 addrspace(3)* %out
301 ret void
302}
303
304; FUNC-LABEL: @store_local_i64_i16
305; EG-CHECK: LDS_SHORT_WRITE
306; SI-CHECK: DS_WRITE_B16
307define void @store_local_i64_i16(i16 addrspace(3)* %out, i64 %in) {
308entry:
309 %0 = trunc i64 %in to i16
310 store i16 %0, i16 addrspace(3)* %out
311 ret void
312}
313
Tom Stellard0125f2a2013-06-25 02:39:35 +0000314; The stores in this function are combined by the optimizer to create a
315; 64-bit store with 32-bit alignment. This is legal for SI and the legalizer
316; should not try to split the 64-bit store back into 2 32-bit stores.
317;
318; Evergreen / Northern Islands don't support 64-bit stores yet, so there should
319; be two 32-bit stores.
320
Tom Stellardaf775432013-10-23 00:44:32 +0000321; EG-CHECK-LABEL: @vecload2
Tom Stellardac00f9d2013-08-16 01:11:46 +0000322; EG-CHECK: MEM_RAT_CACHELESS STORE_RAW
Tom Stellardaf775432013-10-23 00:44:32 +0000323; CM-CHECK-LABEL: @vecload2
Tom Stellardac00f9d2013-08-16 01:11:46 +0000324; CM-CHECK: MEM_RAT_CACHELESS STORE_DWORD
Tom Stellardaf775432013-10-23 00:44:32 +0000325; SI-CHECK-LABEL: @vecload2
Tom Stellard0125f2a2013-06-25 02:39:35 +0000326; SI-CHECK: BUFFER_STORE_DWORDX2
327define void @vecload2(i32 addrspace(1)* nocapture %out, i32 addrspace(2)* nocapture %mem) #0 {
328entry:
Manman Ren1047fe42013-09-30 18:17:35 +0000329 %0 = load i32 addrspace(2)* %mem, align 4
Tom Stellard0125f2a2013-06-25 02:39:35 +0000330 %arrayidx1.i = getelementptr inbounds i32 addrspace(2)* %mem, i64 1
Manman Ren1047fe42013-09-30 18:17:35 +0000331 %1 = load i32 addrspace(2)* %arrayidx1.i, align 4
332 store i32 %0, i32 addrspace(1)* %out, align 4
Tom Stellard0125f2a2013-06-25 02:39:35 +0000333 %arrayidx1 = getelementptr inbounds i32 addrspace(1)* %out, i64 1
Manman Ren1047fe42013-09-30 18:17:35 +0000334 store i32 %1, i32 addrspace(1)* %arrayidx1, align 4
Tom Stellard0125f2a2013-06-25 02:39:35 +0000335 ret void
336}
337
Bill Wendling187d3dd2013-08-22 21:28:54 +0000338attributes #0 = { nounwind "less-precise-fpmad"="false" "no-frame-pointer-elim"="false" "no-infs-fp-math"="false" "no-nans-fp-math"="false" "unsafe-fp-math"="false" "use-soft-float"="false" }
Tom Stellard868fd922014-04-17 21:00:11 +0000339
340; When i128 was a legal type this program generated cannot select errors:
341
342; FUNC-LABEL: @i128-const-store
343; FIXME: We should be able to to this with one store instruction
344; EG-CHECK: STORE_RAW
345; EG-CHECK: STORE_RAW
346; EG-CHECK: STORE_RAW
347; EG-CHECK: STORE_RAW
348; CM-CHECK: STORE_DWORD
349; CM-CHECK: STORE_DWORD
350; CM-CHECK: STORE_DWORD
351; CM-CHECK: STORE_DWORD
352; SI: BUFFER_STORE_DWORDX2
353; SI: BUFFER_STORE_DWORDX2
354define void @i128-const-store(i32 addrspace(1)* %out) {
355entry:
356 store i32 1, i32 addrspace(1)* %out, align 4
357 %arrayidx2 = getelementptr inbounds i32 addrspace(1)* %out, i64 1
358 store i32 1, i32 addrspace(1)* %arrayidx2, align 4
359 %arrayidx4 = getelementptr inbounds i32 addrspace(1)* %out, i64 2
360 store i32 2, i32 addrspace(1)* %arrayidx4, align 4
361 %arrayidx6 = getelementptr inbounds i32 addrspace(1)* %out, i64 3
362 store i32 2, i32 addrspace(1)* %arrayidx6, align 4
363 ret void
364}