1; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=gfx900 %s | FileCheck -check-prefixes=GFX9,GCN,TPT %s 2; RUN: opt -cost-model -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=fiji %s | FileCheck -check-prefixes=VI,GCN,TPT %s 3; RUN: opt -cost-model -cost-kind=code-size -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=gfx900 %s | FileCheck -check-prefixes=GFX9,GCN,CS %s 4; RUN: opt -cost-model -cost-kind=code-size -analyze -mtriple=amdgcn-unknown-amdhsa -mcpu=fiji %s | FileCheck -check-prefixes=VI,GCN,CS %s 5 6; GCN-LABEL: 'shufflevector_00_v2i16' 7; GFX9: estimated cost of 0 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> zeroinitializer 8; VI: estimated cost of 1 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> zeroinitializer 9define amdgpu_kernel void @shufflevector_00_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) { 10 %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr 11 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> zeroinitializer 12 store <2 x i16> %shuf, <2 x i16> addrspace(1)* %out 13 ret void 14} 15 16; GCN-LABEL: 'shufflevector_01_v2i16' 17; GCN: estimated cost of 0 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 0, i32 1> 18define amdgpu_kernel void @shufflevector_01_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) { 19 %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr 20 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 0, i32 1> 21 store <2 x i16> %shuf, <2 x i16> addrspace(1)* %out 22 ret void 23} 24 25; GCN-LABEL: 'shufflevector_10_v2i16' 26; GFX9: estimated cost of 0 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 1, i32 0> 27; VI: estimated cost of 2 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 1, i32 0> 28define amdgpu_kernel void @shufflevector_10_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) { 29 %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr 30 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 1, i32 0> 31 store <2 x i16> %shuf, <2 x i16> addrspace(1)* %out 32 ret void 33} 34 35; GCN-LABEL: 'shufflevector_11_v2i16' 36; GFX9: estimated cost of 0 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 1, i32 1> 37; VI: estimated cost of 2 for {{.*}} shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 1, i32 1> 38define amdgpu_kernel void @shufflevector_11_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr) { 39 %vec = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr 40 %shuf = shufflevector <2 x i16> %vec, <2 x i16> undef, <2 x i32> <i32 1, i32 1> 41 store <2 x i16> %shuf, <2 x i16> addrspace(1)* %out 42 ret void 43} 44 45; GCN-LABEL: 'shufflevector_02_v2i16' 46; GCN: estimated cost of 2 for {{.*}} shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 0, i32 2> 47define amdgpu_kernel void @shufflevector_02_v2i16(<2 x i16> addrspace(1)* %out, <2 x i16> addrspace(1)* %vaddr0, <2 x i16> addrspace(1)* %vaddr1) { 48 %vec0 = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr0 49 %vec1 = load <2 x i16>, <2 x i16> addrspace(1)* %vaddr1 50 %shuf = shufflevector <2 x i16> %vec0, <2 x i16> %vec1, <2 x i32> <i32 0, i32 2> 51 store <2 x i16> %shuf, <2 x i16> addrspace(1)* %out 52 ret void 53} 54 55; GCN-LABEL: 'shufflevector_xxx' 56; TPT: estimated cost of -1 for {{.*}} shufflevector <2 x i8> %vec, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> 57; CS: estimated cost of 1 for {{.*}} shufflevector <2 x i8> %vec, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> 58; Should not assert 59define amdgpu_kernel void @shufflevector_xxx(<4 x i8> addrspace(1)* %out, <2 x i8> addrspace(1)* %vaddr) { 60 %vec = load <2 x i8>, <2 x i8> addrspace(1)* %vaddr 61 %shuf = shufflevector <2 x i8> %vec, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef> 62 store <4 x i8> %shuf, <4 x i8> addrspace(1)* %out 63 ret void 64} 65