1f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa < %s | FileCheck %s
2f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
3f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v2i32'
4f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <2 x i32>
5f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v2i32(i32 addrspace(1)* %out, <2 x i32> addrspace(1)* %vaddr) {
6f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <2 x i32>, <2 x i32> addrspace(1)* %vaddr
7f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <2 x i32> %vec, i32 1
8f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i32 %elt, i32 addrspace(1)* %out
9f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
10f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
11f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
12f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v2f32'
13f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <2 x float>
14f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v2f32(float addrspace(1)* %out, <2 x float> addrspace(1)* %vaddr) {
15f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <2 x float>, <2 x float> addrspace(1)* %vaddr
16f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <2 x float> %vec, i32 1
17f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store float %elt, float addrspace(1)* %out
18f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
19f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
20f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
21f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v3i32'
22f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <3 x i32>
23f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v3i32(i32 addrspace(1)* %out, <3 x i32> addrspace(1)* %vaddr) {
24f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <3 x i32>, <3 x i32> addrspace(1)* %vaddr
25f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <3 x i32> %vec, i32 1
26f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i32 %elt, i32 addrspace(1)* %out
27f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
28f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
29f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
30f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v4i32'
31f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <4 x i32>
32f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v4i32(i32 addrspace(1)* %out, <4 x i32> addrspace(1)* %vaddr) {
33f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <4 x i32>, <4 x i32> addrspace(1)* %vaddr
34f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <4 x i32> %vec, i32 1
35f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i32 %elt, i32 addrspace(1)* %out
36f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
37f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
38f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
39f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v8i32'
40f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <8 x i32>
41f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v8i32(i32 addrspace(1)* %out, <8 x i32> addrspace(1)* %vaddr) {
42f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <8 x i32>, <8 x i32> addrspace(1)* %vaddr
43f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <8 x i32> %vec, i32 1
44f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i32 %elt, i32 addrspace(1)* %out
45f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
46f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
47f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
48f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; FIXME: Should be non-0
49f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v8i32_dynindex'
50f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 2 for {{.*}} extractelement <8 x i32>
51f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v8i32_dynindex(i32 addrspace(1)* %out, <8 x i32> addrspace(1)* %vaddr, i32 %idx) {
52f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <8 x i32>, <8 x i32> addrspace(1)* %vaddr
53f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <8 x i32> %vec, i32 %idx
54f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i32 %elt, i32 addrspace(1)* %out
55f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
56f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
57f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
58f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v2i64'
59f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <2 x i64>
60f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v2i64(i64 addrspace(1)* %out, <2 x i64> addrspace(1)* %vaddr) {
61f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <2 x i64>, <2 x i64> addrspace(1)* %vaddr
62f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <2 x i64> %vec, i64 1
63f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i64 %elt, i64 addrspace(1)* %out
64f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
65f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
66f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
67f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v3i64'
68f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <3 x i64>
69f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v3i64(i64 addrspace(1)* %out, <3 x i64> addrspace(1)* %vaddr) {
70f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <3 x i64>, <3 x i64> addrspace(1)* %vaddr
71f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <3 x i64> %vec, i64 1
72f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i64 %elt, i64 addrspace(1)* %out
73f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
74f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
75f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
76f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v4i64'
77f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <4 x i64>
78f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v4i64(i64 addrspace(1)* %out, <4 x i64> addrspace(1)* %vaddr) {
79f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <4 x i64>, <4 x i64> addrspace(1)* %vaddr
80f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <4 x i64> %vec, i64 1
81f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i64 %elt, i64 addrspace(1)* %out
82f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
83f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
84f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
85f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v8i64'
86f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <8 x i64>
87f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v8i64(i64 addrspace(1)* %out, <8 x i64> addrspace(1)* %vaddr) {
88f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <8 x i64>, <8 x i64> addrspace(1)* %vaddr
89f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <8 x i64> %vec, i64 1
90f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i64 %elt, i64 addrspace(1)* %out
91f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
92f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
93f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
94f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v4i8'
95f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <4 x i8>
96f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v4i8(i8 addrspace(1)* %out, <4 x i8> addrspace(1)* %vaddr) {
97f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <4 x i8>, <4 x i8> addrspace(1)* %vaddr
98f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <4 x i8> %vec, i8 1
99f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i8 %elt, i8 addrspace(1)* %out
100f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
101f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
102f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar
103f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: 'extractelement_v2i16'
104f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar; CHECK: estimated cost of 0 for {{.*}} extractelement <2 x i16>
105f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainardefine void @extractelement_v2i16(i16 addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) {
106f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr
107f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  %elt = extractelement <2 x i16> %vec, i16 1
108f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  store i16 %elt, i16 addrspace(1)* %out
109f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar  ret void
110f3ef5332fa3f4d5ec72c178a2b19dac363a19383Pirama Arumuga Nainar}
111