1 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=pentium4 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE2 2 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=SSE42 3 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=corei7-avx -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX -check-prefix=AVX1 4 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=core-avx2 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=AVX -check-prefix=AVX2 5 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver2 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=XOP -check-prefix=XOPAVX1 6 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -mcpu=bdver4 -cost-model -analyze | FileCheck %s -check-prefix=CHECK -check-prefix=XOP -check-prefix=XOPAVX2 7 8 ; Verify the cost of vector bswap instructions. 9 10 declare <2 x i64> @llvm.bswap.v2i64(<2 x i64>) 11 declare <4 x i32> @llvm.bswap.v4i32(<4 x i32>) 12 declare <8 x i16> @llvm.bswap.v8i16(<8 x i16>) 13 14 declare <4 x i64> @llvm.bswap.v4i64(<4 x i64>) 15 declare <8 x i32> @llvm.bswap.v8i32(<8 x i32>) 16 declare <16 x i16> @llvm.bswap.v16i16(<16 x i16>) 17 18 define <2 x i64> @var_bswap_v2i64(<2 x i64> %a) { 19 ; CHECK: 'Cost Model Analysis' for function 'var_bswap_v2i64': 20 ; SSE2: Found an estimated cost of 7 for instruction: %bswap 21 ; SSE42: Found an estimated cost of 1 for instruction: %bswap 22 ; AVX: Found an estimated cost of 1 for instruction: %bswap 23 ; XOP: Found an estimated cost of 1 for instruction: %bswap 24 %bswap = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %a) 25 ret <2 x i64> %bswap 26 } 27 28 define <4 x i64> @var_bswap_v4i64(<4 x i64> %a) { 29 ; CHECK: 'Cost Model Analysis' for function 'var_bswap_v4i64': 30 ; SSE2: Found an estimated cost of 14 for instruction: %bswap 31 ; SSE42: Found an estimated cost of 2 for instruction: %bswap 32 ; AVX1: Found an estimated cost of 4 for instruction: %bswap 33 ; AVX2: Found an estimated cost of 1 for instruction: %bswap 34 ; XOPAVX1: Found an estimated cost of 4 for instruction: %bswap 35 ; XOPAVX2: Found an estimated cost of 1 for instruction: %bswap 36 %bswap = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %a) 37 ret <4 x i64> %bswap 38 } 39 40 define <4 x i32> @var_bswap_v4i32(<4 x i32> %a) { 41 ; CHECK: 'Cost Model Analysis' for function 'var_bswap_v4i32': 42 ; SSE2: Found an estimated cost of 7 for instruction: %bswap 43 ; SSE42: Found an estimated cost of 1 for instruction: %bswap 44 ; AVX: Found an estimated cost of 1 for instruction: %bswap 45 ; XOP: Found an estimated cost of 1 for instruction: %bswap 46 %bswap = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %a) 47 ret <4 x i32> %bswap 48 } 49 50 define <8 x i32> @var_bswap_v8i32(<8 x i32> %a) { 51 ; CHECK: 'Cost Model Analysis' for function 'var_bswap_v8i32': 52 ; SSE2: Found an estimated cost of 14 for instruction: %bswap 53 ; SSE42: Found an estimated cost of 2 for instruction: %bswap 54 ; AVX1: Found an estimated cost of 4 for instruction: %bswap 55 ; AVX2: Found an estimated cost of 1 for instruction: %bswap 56 ; XOPAVX1: Found an estimated cost of 4 for instruction: %bswap 57 ; XOPAVX2: Found an estimated cost of 1 for instruction: %bswap 58 %bswap = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %a) 59 ret <8 x i32> %bswap 60 } 61 62 define <8 x i16> @var_bswap_v8i16(<8 x i16> %a) { 63 ; CHECK: 'Cost Model Analysis' for function 'var_bswap_v8i16': 64 ; SSE2: Found an estimated cost of 7 for instruction: %bswap 65 ; SSE42: Found an estimated cost of 1 for instruction: %bswap 66 ; AVX: Found an estimated cost of 1 for instruction: %bswap 67 ; XOP: Found an estimated cost of 1 for instruction: %bswap 68 %bswap = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %a) 69 ret <8 x i16> %bswap 70 } 71 72 define <16 x i16> @var_bswap_v16i16(<16 x i16> %a) { 73 ; CHECK: 'Cost Model Analysis' for function 'var_bswap_v16i16': 74 ; SSE2: Found an estimated cost of 14 for instruction: %bswap 75 ; SSE42: Found an estimated cost of 2 for instruction: %bswap 76 ; AVX1: Found an estimated cost of 4 for instruction: %bswap 77 ; AVX2: Found an estimated cost of 1 for instruction: %bswap 78 ; XOPAVX1: Found an estimated cost of 4 for instruction: %bswap 79 ; XOPAVX2: Found an estimated cost of 1 for instruction: %bswap 80 %bswap = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %a) 81 ret <16 x i16> %bswap 82 } 83