From ed3b3cfeb9ea7a80d30225a06a9851b84b5138a6 Mon Sep 17 00:00:00 2001 From: Simon Pilgrim Date: Sun, 6 Jun 2021 22:24:34 +0100 Subject: [PATCH] [CostModel][X86] Add 512-bit bswap cost tests --- llvm/test/Analysis/CostModel/X86/bswap-vec.ll | 93 +++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/llvm/test/Analysis/CostModel/X86/bswap-vec.ll b/llvm/test/Analysis/CostModel/X86/bswap-vec.ll index c8d1ddf..fbf6d38 100644 --- a/llvm/test/Analysis/CostModel/X86/bswap-vec.ll +++ b/llvm/test/Analysis/CostModel/X86/bswap-vec.ll @@ -5,6 +5,8 @@ ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx2 | FileCheck %s -check-prefixes=AVX,AVX2 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+xop,+avx | FileCheck %s -check-prefixes=AVX,AVX1 ; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+xop,+avx2 | FileCheck %s -check-prefixes=AVX,AVX2 +; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx512f | FileCheck %s -check-prefixes=AVX,AVX512 +; RUN: opt < %s -mtriple=x86_64-unknown-linux-gnu -cost-model -analyze -mattr=+avx512bw | FileCheck %s -check-prefixes=AVX,AVX512 ; Verify the cost of vector bswap instructions. @@ -16,6 +18,10 @@ declare <4 x i64> @llvm.bswap.v4i64(<4 x i64>) declare <8 x i32> @llvm.bswap.v8i32(<8 x i32>) declare <16 x i16> @llvm.bswap.v16i16(<16 x i16>) +declare <8 x i64> @llvm.bswap.v8i64(<8 x i64>) +declare <16 x i32> @llvm.bswap.v16i32(<16 x i32>) +declare <32 x i16> @llvm.bswap.v32i16(<32 x i16>) + define <2 x i64> @var_bswap_v2i64(<2 x i64> %a) { ; SSE2-LABEL: 'var_bswap_v2i64' ; SSE2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %bswap = call <2 x i64> @llvm.bswap.v2i64(<2 x i64> %a) @@ -50,10 +56,39 @@ define <4 x i64> @var_bswap_v4i64(<4 x i64> %a) { ; AVX2-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bswap = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %a) ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bswap ; +; AVX512-LABEL: 'var_bswap_v4i64' +; AVX512-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bswap = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %a) +; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <4 x i64> %bswap +; %bswap = call <4 x i64> @llvm.bswap.v4i64(<4 x i64> %a) ret <4 x i64> %bswap } +define <8 x i64> @var_bswap_v8i64(<8 x i64> %a) { +; SSE2-LABEL: 'var_bswap_v8i64' +; SSE2-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %bswap = call <8 x i64> @llvm.bswap.v8i64(<8 x i64> %a) +; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bswap +; +; SSE42-LABEL: 'var_bswap_v8i64' +; SSE42-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bswap = call <8 x i64> @llvm.bswap.v8i64(<8 x i64> %a) +; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bswap +; +; AVX1-LABEL: 'var_bswap_v8i64' +; AVX1-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bswap = call <8 x i64> @llvm.bswap.v8i64(<8 x i64> %a) +; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bswap +; +; AVX2-LABEL: 'var_bswap_v8i64' +; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bswap = call <8 x i64> @llvm.bswap.v8i64(<8 x i64> %a) +; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bswap +; +; AVX512-LABEL: 'var_bswap_v8i64' +; AVX512-NEXT: Cost Model: Found an estimated cost of 34 for instruction: %bswap = call <8 x i64> @llvm.bswap.v8i64(<8 x i64> %a) +; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i64> %bswap +; + %bswap = call <8 x i64> @llvm.bswap.v8i64(<8 x i64> %a) + ret <8 x i64> %bswap +} + define <4 x i32> @var_bswap_v4i32(<4 x i32> %a) { ; SSE2-LABEL: 'var_bswap_v4i32' ; SSE2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %bswap = call <4 x i32> @llvm.bswap.v4i32(<4 x i32> %a) @@ -88,10 +123,39 @@ define <8 x i32> @var_bswap_v8i32(<8 x i32> %a) { ; AVX2-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bswap = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %a) ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bswap ; +; AVX512-LABEL: 'var_bswap_v8i32' +; AVX512-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bswap = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %a) +; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <8 x i32> %bswap +; %bswap = call <8 x i32> @llvm.bswap.v8i32(<8 x i32> %a) ret <8 x i32> %bswap } +define <16 x i32> @var_bswap_v16i32(<16 x i32> %a) { +; SSE2-LABEL: 'var_bswap_v16i32' +; SSE2-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %bswap = call <16 x i32> @llvm.bswap.v16i32(<16 x i32> %a) +; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bswap +; +; SSE42-LABEL: 'var_bswap_v16i32' +; SSE42-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bswap = call <16 x i32> @llvm.bswap.v16i32(<16 x i32> %a) +; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bswap +; +; AVX1-LABEL: 'var_bswap_v16i32' +; AVX1-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bswap = call <16 x i32> @llvm.bswap.v16i32(<16 x i32> %a) +; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bswap +; +; AVX2-LABEL: 'var_bswap_v16i32' +; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bswap = call <16 x i32> @llvm.bswap.v16i32(<16 x i32> %a) +; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bswap +; +; AVX512-LABEL: 'var_bswap_v16i32' +; AVX512-NEXT: Cost Model: Found an estimated cost of 64 for instruction: %bswap = call <16 x i32> @llvm.bswap.v16i32(<16 x i32> %a) +; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i32> %bswap +; + %bswap = call <16 x i32> @llvm.bswap.v16i32(<16 x i32> %a) + ret <16 x i32> %bswap +} + define <8 x i16> @var_bswap_v8i16(<8 x i16> %a) { ; SSE2-LABEL: 'var_bswap_v8i16' ; SSE2-NEXT: Cost Model: Found an estimated cost of 7 for instruction: %bswap = call <8 x i16> @llvm.bswap.v8i16(<8 x i16> %a) @@ -126,6 +190,35 @@ define <16 x i16> @var_bswap_v16i16(<16 x i16> %a) { ; AVX2-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bswap = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %a) ; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bswap ; +; AVX512-LABEL: 'var_bswap_v16i16' +; AVX512-NEXT: Cost Model: Found an estimated cost of 1 for instruction: %bswap = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %a) +; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <16 x i16> %bswap +; %bswap = call <16 x i16> @llvm.bswap.v16i16(<16 x i16> %a) ret <16 x i16> %bswap } + +define <32 x i16> @var_bswap_v32i16(<32 x i16> %a) { +; SSE2-LABEL: 'var_bswap_v32i16' +; SSE2-NEXT: Cost Model: Found an estimated cost of 28 for instruction: %bswap = call <32 x i16> @llvm.bswap.v32i16(<32 x i16> %a) +; SSE2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bswap +; +; SSE42-LABEL: 'var_bswap_v32i16' +; SSE42-NEXT: Cost Model: Found an estimated cost of 4 for instruction: %bswap = call <32 x i16> @llvm.bswap.v32i16(<32 x i16> %a) +; SSE42-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bswap +; +; AVX1-LABEL: 'var_bswap_v32i16' +; AVX1-NEXT: Cost Model: Found an estimated cost of 8 for instruction: %bswap = call <32 x i16> @llvm.bswap.v32i16(<32 x i16> %a) +; AVX1-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bswap +; +; AVX2-LABEL: 'var_bswap_v32i16' +; AVX2-NEXT: Cost Model: Found an estimated cost of 2 for instruction: %bswap = call <32 x i16> @llvm.bswap.v32i16(<32 x i16> %a) +; AVX2-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bswap +; +; AVX512-LABEL: 'var_bswap_v32i16' +; AVX512-NEXT: Cost Model: Found an estimated cost of 124 for instruction: %bswap = call <32 x i16> @llvm.bswap.v32i16(<32 x i16> %a) +; AVX512-NEXT: Cost Model: Found an estimated cost of 0 for instruction: ret <32 x i16> %bswap +; + %bswap = call <32 x i16> @llvm.bswap.v32i16(<32 x i16> %a) + ret <32 x i16> %bswap +} -- 2.7.4