• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
2; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
3
4; FUNC-LABEL: {{^}}extract_vector_elt_v1i8:
5; GCN: buffer_load_ubyte
6; GCN: buffer_store_byte
7define void @extract_vector_elt_v1i8(i8 addrspace(1)* %out, <1 x i8> %foo) #0 {
8  %p0 = extractelement <1 x i8> %foo, i32 0
9  store i8 %p0, i8 addrspace(1)* %out
10  ret void
11}
12
13; FUNC-LABEL: {{^}}extract_vector_elt_v2i8:
14; GCN: buffer_load_ubyte
15; GCN: buffer_load_ubyte
16; GCN: buffer_store_byte
17; GCN: buffer_store_byte
18define void @extract_vector_elt_v2i8(i8 addrspace(1)* %out, <2 x i8> %foo) #0 {
19  %p0 = extractelement <2 x i8> %foo, i32 0
20  %p1 = extractelement <2 x i8> %foo, i32 1
21  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
22  store i8 %p1, i8 addrspace(1)* %out
23  store i8 %p0, i8 addrspace(1)* %out1
24  ret void
25}
26
27; FUNC-LABEL: {{^}}extract_vector_elt_v3i8:
28; GCN: buffer_load_ubyte
29; GCN: buffer_load_ubyte
30; GCN: buffer_store_byte
31; GCN: buffer_store_byte
32define void @extract_vector_elt_v3i8(i8 addrspace(1)* %out, <3 x i8> %foo) #0 {
33  %p0 = extractelement <3 x i8> %foo, i32 0
34  %p1 = extractelement <3 x i8> %foo, i32 2
35  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
36  store i8 %p1, i8 addrspace(1)* %out
37  store i8 %p0, i8 addrspace(1)* %out1
38  ret void
39}
40
41; FUNC-LABEL: {{^}}extract_vector_elt_v4i8:
42; GCN: buffer_load_ubyte
43; GCN: buffer_load_ubyte
44; GCN: buffer_store_byte
45; GCN: buffer_store_byte
46define void @extract_vector_elt_v4i8(i8 addrspace(1)* %out, <4 x i8> %foo) #0 {
47  %p0 = extractelement <4 x i8> %foo, i32 0
48  %p1 = extractelement <4 x i8> %foo, i32 2
49  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
50  store i8 %p1, i8 addrspace(1)* %out
51  store i8 %p0, i8 addrspace(1)* %out1
52  ret void
53}
54
55; FUNC-LABEL: {{^}}extract_vector_elt_v8i8:
56; GCN: buffer_load_ubyte
57; GCN: buffer_load_ubyte
58; GCN: buffer_store_byte
59; GCN: buffer_store_byte
60define void @extract_vector_elt_v8i8(i8 addrspace(1)* %out, <8 x i8> %foo) #0 {
61  %p0 = extractelement <8 x i8> %foo, i32 0
62  %p1 = extractelement <8 x i8> %foo, i32 2
63  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
64  store i8 %p1, i8 addrspace(1)* %out
65  store i8 %p0, i8 addrspace(1)* %out1
66  ret void
67}
68
69; FUNC-LABEL: {{^}}extract_vector_elt_v16i8:
70; GCN: buffer_load_ubyte
71; GCN: buffer_load_ubyte
72; GCN: buffer_store_byte
73; GCN: buffer_store_byte
74define void @extract_vector_elt_v16i8(i8 addrspace(1)* %out, <16 x i8> %foo) #0 {
75  %p0 = extractelement <16 x i8> %foo, i32 0
76  %p1 = extractelement <16 x i8> %foo, i32 2
77  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
78  store i8 %p1, i8 addrspace(1)* %out
79  store i8 %p0, i8 addrspace(1)* %out1
80  ret void
81}
82
83; FUNC-LABEL: {{^}}extract_vector_elt_v32i8:
84; GCN: buffer_load_ubyte
85; GCN: buffer_load_ubyte
86; GCN: buffer_store_byte
87; GCN: buffer_store_byte
88define void @extract_vector_elt_v32i8(i8 addrspace(1)* %out, <32 x i8> %foo) #0 {
89  %p0 = extractelement <32 x i8> %foo, i32 0
90  %p1 = extractelement <32 x i8> %foo, i32 2
91  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
92  store i8 %p1, i8 addrspace(1)* %out
93  store i8 %p0, i8 addrspace(1)* %out1
94  ret void
95}
96
97; FUNC-LABEL: {{^}}extract_vector_elt_v64i8:
98; GCN: buffer_load_ubyte
99; GCN: buffer_load_ubyte
100; GCN: buffer_store_byte
101; GCN: buffer_store_byte
102define void @extract_vector_elt_v64i8(i8 addrspace(1)* %out, <64 x i8> %foo) #0 {
103  %p0 = extractelement <64 x i8> %foo, i32 0
104  %p1 = extractelement <64 x i8> %foo, i32 2
105  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
106  store i8 %p1, i8 addrspace(1)* %out
107  store i8 %p0, i8 addrspace(1)* %out1
108  ret void
109}
110
111; FUNC-LABEL: {{^}}dynamic_extract_vector_elt_v3i8:
112; GCN: buffer_load_ubyte
113; GCN: buffer_load_ubyte
114; GCN: buffer_load_ubyte
115
116; GCN: buffer_store_byte
117; GCN: buffer_store_byte
118; GCN: buffer_store_byte
119
120; GCN: buffer_store_byte
121; GCN: buffer_load_ubyte
122; GCN: buffer_store_byte
123define void @dynamic_extract_vector_elt_v3i8(i8 addrspace(1)* %out, <3 x i8> %foo, i32 %idx) #0 {
124  %p0 = extractelement <3 x i8> %foo, i32 %idx
125  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
126  store i8 %p0, i8 addrspace(1)* %out
127  ret void
128}
129
130; FUNC-LABEL: {{^}}dynamic_extract_vector_elt_v4i8:
131; GCN: buffer_load_ubyte
132; GCN: buffer_load_ubyte
133; GCN: buffer_load_ubyte
134; GCN: buffer_load_ubyte
135
136; GCN: buffer_store_byte
137; GCN: buffer_store_byte
138; GCN: buffer_store_byte
139; GCN: buffer_store_byte
140
141; GCN: buffer_store_byte
142; GCN: buffer_load_ubyte
143; GCN: buffer_store_byte
144define void @dynamic_extract_vector_elt_v4i8(i8 addrspace(1)* %out, <4 x i8> %foo, i32 %idx) #0 {
145  %p0 = extractelement <4 x i8> %foo, i32 %idx
146  %out1 = getelementptr i8, i8 addrspace(1)* %out, i32 1
147  store i8 %p0, i8 addrspace(1)* %out
148  ret void
149}
150
151attributes #0 = { nounwind }
152