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
7; END.
8
9; GCN-LABEL: 'extractelement_32'
10; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <2 x i32>
11; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <2 x float>
12; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <3 x i32>
13; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <4 x i32>
14; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <5 x i32>
15; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <8 x i32>
16; GCN-NEXT: estimated cost of 2 for {{.*}} extractelement <8 x i32>
17define amdgpu_kernel void @extractelement_32(i32 %arg) {
18  %v2i32_1 = extractelement <2 x i32> undef, i32 1
19  %v2f32_1 = extractelement <2 x float> undef, i32 1
20  %v3i32_1 = extractelement <3 x i32> undef, i32 1
21  %v4i32_1 = extractelement <4 x i32> undef, i32 1
22  %v5i32_1 = extractelement <5 x i32> undef, i32 1
23  %v8i32_1 = extractelement <8 x i32> undef, i32 1
24  %v8i32_a = extractelement <8 x i32> undef, i32 %arg
25  ret void
26}
27
28; GCN-LABEL: 'extractelement_64'
29; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <2 x i64>
30; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <3 x i64>
31; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <4 x i64>
32; GCN-NEXT: estimated cost of 0 for {{.*}} extractelement <8 x i64>
33define amdgpu_kernel void @extractelement_64() {
34  %v2i64_1 = extractelement <2 x i64> undef, i64 1
35  %v3i64_1 = extractelement <3 x i64> undef, i64 1
36  %v4i64_1 = extractelement <4 x i64> undef, i64 1
37  %v8i64_1 = extractelement <8 x i64> undef, i64 1
38  ret void
39}
40
41; GCN-LABEL: 'extractelement_8'
42; GCN-NEXT: estimated cost of 1 for {{.*}} extractelement <4 x i8>
43define amdgpu_kernel void @extractelement_8() {
44  %v4i8_1 = extractelement <4 x i8> undef, i8 1
45  ret void
46}
47
48; GCN-LABEL: 'extractelement_16'
49; CI-NEXT: estimated cost of 1 for {{.*}} extractelement <2 x i16> undef, i16 0
50; GFX89-NEXT: estimated cost of 0 for {{.*}} extractelement <2 x i16>
51; GCN-NEXT: estimated cost of 1 for {{.*}} extractelement <2 x i16>
52; GCN-NEXT: estimated cost of 1 for {{.*}} extractelement <2 x i16>
53define amdgpu_kernel void @extractelement_16(i32 %arg) {
54  %v2i16_0 = extractelement <2 x i16> undef, i16 0
55  %v2i16_1 = extractelement <2 x i16> undef, i16 1
56  %v2i16_a = extractelement <2 x i16> undef, i32 %arg
57  ret void
58}
59