Clang] Fix expansion of response files in -Wp after integrated-cc1 change
[llvm-project.git] / llvm / test / Analysis / CostModel / AMDGPU / extractelement.ll
blob67ce8ffba936e05d3d7cf2b18de780b2a3f1087a
1 ; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa %s | FileCheck -check-prefixes=GCN,CI %s
2 ; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=fiji %s | FileCheck -check-prefixes=GCN,GFX89 %s
3 ; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=gfx900 %s | FileCheck -check-prefixes=GCN,GFX89 %s
4 ; RUN: opt -cost-model -cost-kind=code-size -analyze -mtriple=amdgcn-unknown-amdhsa %s | FileCheck -check-prefixes=GCN,CI %s
5 ; RUN: opt -cost-model -cost-kind=code-size -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=fiji %s | FileCheck -check-prefixes=GCN,GFX89 %s
6 ; RUN: opt -cost-model -cost-kind=code-size -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=gfx900 %s | FileCheck -check-prefixes=GCN,GFX89 %s
9 ; GCN: 'extractelement_v2i32'
10 ; GCN: estimated cost of 0 for {{.*}} extractelement <2 x i32>
11 define amdgpu_kernel void @extractelement_v2i32(i32 addrspace(1)* %out, <2 x i32> addrspace(1)* %vaddr) {
12   %vec = load <2 x i32>, <2 x i32> addrspace(1)* %vaddr
13   %elt = extractelement <2 x i32> %vec, i32 1
14   store i32 %elt, i32 addrspace(1)* %out
15   ret void
18 ; GCN: 'extractelement_v2f32'
19 ; GCN: estimated cost of 0 for {{.*}} extractelement <2 x float>
20 define amdgpu_kernel void @extractelement_v2f32(float addrspace(1)* %out, <2 x float> addrspace(1)* %vaddr) {
21   %vec = load <2 x float>, <2 x float> addrspace(1)* %vaddr
22   %elt = extractelement <2 x float> %vec, i32 1
23   store float %elt, float addrspace(1)* %out
24   ret void
27 ; GCN: 'extractelement_v3i32'
28 ; GCN: estimated cost of 0 for {{.*}} extractelement <3 x i32>
29 define amdgpu_kernel void @extractelement_v3i32(i32 addrspace(1)* %out, <3 x i32> addrspace(1)* %vaddr) {
30   %vec = load <3 x i32>, <3 x i32> addrspace(1)* %vaddr
31   %elt = extractelement <3 x i32> %vec, i32 1
32   store i32 %elt, i32 addrspace(1)* %out
33   ret void
36 ; GCN: 'extractelement_v4i32'
37 ; GCN: estimated cost of 0 for {{.*}} extractelement <4 x i32>
38 define amdgpu_kernel void @extractelement_v4i32(i32 addrspace(1)* %out, <4 x i32> addrspace(1)* %vaddr) {
39   %vec = load <4 x i32>, <4 x i32> addrspace(1)* %vaddr
40   %elt = extractelement <4 x i32> %vec, i32 1
41   store i32 %elt, i32 addrspace(1)* %out
42   ret void
45 ; GCN: 'extractelement_v5i32'
46 ; GCN: estimated cost of 0 for {{.*}} extractelement <5 x i32>
47 define amdgpu_kernel void @extractelement_v5i32(i32 addrspace(1)* %out, <5 x i32> addrspace(1)* %vaddr) {
48   %vec = load <5 x i32>, <5 x i32> addrspace(1)* %vaddr
49   %elt = extractelement <5 x i32> %vec, i32 1
50   store i32 %elt, i32 addrspace(1)* %out
51   ret void
54 ; GCN: 'extractelement_v8i32'
55 ; GCN: estimated cost of 0 for {{.*}} extractelement <8 x i32>
56 define amdgpu_kernel void @extractelement_v8i32(i32 addrspace(1)* %out, <8 x i32> addrspace(1)* %vaddr) {
57   %vec = load <8 x i32>, <8 x i32> addrspace(1)* %vaddr
58   %elt = extractelement <8 x i32> %vec, i32 1
59   store i32 %elt, i32 addrspace(1)* %out
60   ret void
63 ; FIXME: Should be non-0
64 ; GCN: 'extractelement_v8i32_dynindex'
65 ; GCN: estimated cost of 2 for {{.*}} extractelement <8 x i32>
66 define amdgpu_kernel void @extractelement_v8i32_dynindex(i32 addrspace(1)* %out, <8 x i32> addrspace(1)* %vaddr, i32 %idx) {
67   %vec = load <8 x i32>, <8 x i32> addrspace(1)* %vaddr
68   %elt = extractelement <8 x i32> %vec, i32 %idx
69   store i32 %elt, i32 addrspace(1)* %out
70   ret void
73 ; GCN: 'extractelement_v2i64'
74 ; GCN: estimated cost of 0 for {{.*}} extractelement <2 x i64>
75 define amdgpu_kernel void @extractelement_v2i64(i64 addrspace(1)* %out, <2 x i64> addrspace(1)* %vaddr) {
76   %vec = load <2 x i64>, <2 x i64> addrspace(1)* %vaddr
77   %elt = extractelement <2 x i64> %vec, i64 1
78   store i64 %elt, i64 addrspace(1)* %out
79   ret void
82 ; GCN: 'extractelement_v3i64'
83 ; GCN: estimated cost of 0 for {{.*}} extractelement <3 x i64>
84 define amdgpu_kernel void @extractelement_v3i64(i64 addrspace(1)* %out, <3 x i64> addrspace(1)* %vaddr) {
85   %vec = load <3 x i64>, <3 x i64> addrspace(1)* %vaddr
86   %elt = extractelement <3 x i64> %vec, i64 1
87   store i64 %elt, i64 addrspace(1)* %out
88   ret void
91 ; GCN: 'extractelement_v4i64'
92 ; GCN: estimated cost of 0 for {{.*}} extractelement <4 x i64>
93 define amdgpu_kernel void @extractelement_v4i64(i64 addrspace(1)* %out, <4 x i64> addrspace(1)* %vaddr) {
94   %vec = load <4 x i64>, <4 x i64> addrspace(1)* %vaddr
95   %elt = extractelement <4 x i64> %vec, i64 1
96   store i64 %elt, i64 addrspace(1)* %out
97   ret void
100 ; GCN: 'extractelement_v8i64'
101 ; GCN: estimated cost of 0 for {{.*}} extractelement <8 x i64>
102 define amdgpu_kernel void @extractelement_v8i64(i64 addrspace(1)* %out, <8 x i64> addrspace(1)* %vaddr) {
103   %vec = load <8 x i64>, <8 x i64> addrspace(1)* %vaddr
104   %elt = extractelement <8 x i64> %vec, i64 1
105   store i64 %elt, i64 addrspace(1)* %out
106   ret void
109 ; GCN: 'extractelement_v4i8'
110 ; GCN: estimated cost of 1 for {{.*}} extractelement <4 x i8>
111 define amdgpu_kernel void @extractelement_v4i8(i8 addrspace(1)* %out, <4 x i8> addrspace(1)* %vaddr) {
112   %vec = load <4 x i8>, <4 x i8> addrspace(1)* %vaddr
113   %elt = extractelement <4 x i8> %vec, i8 1
114   store i8 %elt, i8 addrspace(1)* %out
115   ret void
118 ; GCN: 'extractelement_0_v2i16':
119 ; CI: estimated cost of 1 for {{.*}} extractelement <2 x i16> %vec, i16 0
120 ; GFX89: estimated cost of 0 for {{.*}} extractelement <2 x i16>
121 define amdgpu_kernel void @extractelement_0_v2i16(i16 addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) {
122   %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr
123   %elt = extractelement <2 x i16> %vec, i16 0
124   store i16 %elt, i16 addrspace(1)* %out
125   ret void
128 ; GCN: 'extractelement_1_v2i16':
129 ; GCN: estimated cost of 1 for {{.*}} extractelement <2 x i16>
130 define amdgpu_kernel void @extractelement_1_v2i16(i16 addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) {
131   %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr
132   %elt = extractelement <2 x i16> %vec, i16 1
133   store i16 %elt, i16 addrspace(1)* %out
134   ret void
137 ; GCN: 'extractelement_var_v2i16'
138 ; GCN: estimated cost of 1 for {{.*}} extractelement <2 x i16>
139 define amdgpu_kernel void @extractelement_var_v2i16(i16 addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr, i32 %idx) {
140   %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr
141   %elt = extractelement <2 x i16> %vec, i32 %idx
142   store i16 %elt, i16 addrspace(1)* %out
143   ret void