From: Simon Pilgrim Date: Tue, 22 Nov 2016 18:55:49 +0000 (+0000) Subject: [CostModel][X86] Updated sitofp/uitofp scalar/vector cost tests X-Git-Tag: llvmorg-4.0.0-rc1~3902 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=d1aed9a9e6f4f8dd38d31148272b76db24941071;p=platform%2Fupstream%2Fllvm.git [CostModel][X86] Updated sitofp/uitofp scalar/vector cost tests Better coverage of all legal types + special cases. Removed old fptoui tests which are all handled in fptoui.ll llvm-svn: 287678 --- diff --git a/llvm/test/Analysis/CostModel/X86/sitofp.ll b/llvm/test/Analysis/CostModel/X86/sitofp.ll index fb390a2..9c849a1 100644 --- a/llvm/test/Analysis/CostModel/X86/sitofp.ll +++ b/llvm/test/Analysis/CostModel/X86/sitofp.ll @@ -1,678 +1,250 @@ ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+sse2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE --check-prefix=SSE2 %s ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx -cost-model -analyze < %s | FileCheck --check-prefix=AVX --check-prefix=AVX1 %s ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx2 -cost-model -analyze < %s | FileCheck --check-prefix=AVX --check-prefix=AVX2 %s -; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512f -cost-model -analyze < %s | FileCheck --check-prefix=AVX512F %s - -define <2 x double> @sitofpv2i8v2double(<2 x i8> %a) { - ; SSE2-LABEL: sitofpv2i8v2double - ; SSE2: cost of 20 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i8v2double - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i8v2double - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i8v2double - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i8> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @sitofpv4i8v4double(<4 x i8> %a) { - ; SSE2-LABEL: sitofpv4i8v4double - ; SSE2: cost of 40 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i8v4double - ; AVX1: cost of 3 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i8v4double - ; AVX2: cost of 3 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i8v4double - ; AVX512F: cost of 3 {{.*}} sitofp - %1 = sitofp <4 x i8> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @sitofpv8i8v8double(<8 x i8> %a) { - ; SSE2-LABEL: sitofpv8i8v8double - ; SSE2: cost of 80 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i8v8double - ; AVX1: cost of 7 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i8v8double - ; AVX2: cost of 7 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i8v8double - ; AVX512F: cost of 2 {{.*}} sitofp - %1 = sitofp <8 x i8> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @sitofpv16i8v16double(<16 x i8> %a) { - ; SSE2-LABEL: sitofpv16i8v16double - ; SSE2: cost of 160 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i8v16double - ; AVX1: cost of 15 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i8v16double - ; AVX2: cost of 15 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i8v16double - ; AVX512F: cost of 5 {{.*}} sitofp - %1 = sitofp <16 x i8> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @sitofpv32i8v32double(<32 x i8> %a) { - ; SSE2-LABEL: sitofpv32i8v32double - ; SSE2: cost of 320 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i8v32double - ; AVX1: cost of 31 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i8v32double - ; AVX2: cost of 31 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i8v32double - ; AVX512F: cost of 11 {{.*}} sitofp - %1 = sitofp <32 x i8> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x double> @sitofpv2i16v2double(<2 x i16> %a) { - ; SSE2-LABEL: sitofpv2i16v2double - ; SSE2: cost of 20 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i16v2double - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i16v2double - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i16v2double - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i16> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @sitofpv4i16v4double(<4 x i16> %a) { - ; SSE2-LABEL: sitofpv4i16v4double - ; SSE2: cost of 40 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i16v4double - ; AVX1: cost of 3 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i16v4double - ; AVX2: cost of 3 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i16v4double - ; AVX512F: cost of 3 {{.*}} sitofp - %1 = sitofp <4 x i16> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @sitofpv8i16v8double(<8 x i16> %a) { - ; SSE2-LABEL: sitofpv8i16v8double - ; SSE2: cost of 80 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i16v8double - ; AVX1: cost of 7 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i16v8double - ; AVX2: cost of 7 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i16v8double - ; AVX512F: cost of 2 {{.*}} sitofp - %1 = sitofp <8 x i16> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @sitofpv16i16v16double(<16 x i16> %a) { - ; SSE2-LABEL: sitofpv16i16v16double - ; SSE2: cost of 160 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i16v16double - ; AVX1: cost of 15 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i16v16double - ; AVX2: cost of 15 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i16v16double - ; AVX512F: cost of 5 {{.*}} sitofp - %1 = sitofp <16 x i16> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @sitofpv32i16v32double(<32 x i16> %a) { - ; SSE2-LABEL: sitofpv32i16v32double - ; SSE2: cost of 320 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i16v32double - ; AVX1: cost of 31 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i16v32double - ; AVX2: cost of 31 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i16v32double - ; AVX512F: cost of 11 {{.*}} sitofp - %1 = sitofp <32 x i16> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x double> @sitofpv2i32v2double(<2 x i32> %a) { - ; SSE2-LABEL: sitofpv2i32v2double - ; SSE2: cost of 20 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i32v2double - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i32v2double - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i32v2double - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i32> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @sitofpv4i32v4double(<4 x i32> %a) { - ; SSE2-LABEL: sitofpv4i32v4double - ; SSE2: cost of 40 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i32v4double - ; AVX1: cost of 1 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i32v4double - ; AVX2: cost of 1 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i32v4double - ; AVX512F: cost of 1 {{.*}} sitofp - %1 = sitofp <4 x i32> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @sitofpv8i32v8double(<8 x i32> %a) { - ; SSE2-LABEL: sitofpv8i32v8double - ; SSE2: cost of 80 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i32v8double - ; AVX1: cost of 3 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i32v8double - ; AVX2: cost of 3 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i32v8double - ; AVX512F: cost of 1 {{.*}} sitofp - %1 = sitofp <8 x i32> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @sitofpv16i32v16double(<16 x i32> %a) { - ; SSE2-LABEL: sitofpv16i32v16double - ; SSE2: cost of 160 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i32v16double - ; AVX1: cost of 7 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i32v16double - ; AVX2: cost of 7 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i32v16double - ; AVX512F: cost of 3 {{.*}} sitofp - %1 = sitofp <16 x i32> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @sitofpv32i32v32double(<32 x i32> %a) { - ; SSE2-LABEL: sitofpv32i32v32double - ; SSE2: cost of 320 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i32v32double - ; AVX1: cost of 15 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i32v32double - ; AVX2: cost of 15 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i32v32double - ; AVX512F: cost of 7 {{.*}} sitofp - %1 = sitofp <32 x i32> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x double> @sitofpv2i64v2double(<2 x i64> %a) { - ; SSE2-LABEL: sitofpv2i64v2double - ; SSE2: cost of 20 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i64v2double - ; AVX1: cost of 20 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i64v2double - ; AVX2: cost of 20 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i64v2double - ; AVX512F: cost of 20 {{.*}} sitofp - %1 = sitofp <2 x i64> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @sitofpv4i64v4double(<4 x i64> %a) { - ; SSE2-LABEL: sitofpv4i64v4double - ; SSE2: cost of 40 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i64v4double - ; AVX1: cost of 13 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i64v4double - ; AVX2: cost of 13 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i64v4double - ; AVX512F: cost of 13 {{.*}} sitofp - %1 = sitofp <4 x i64> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @sitofpv8i64v8double(<8 x i64> %a) { - ; SSE2-LABEL: sitofpv8i64v8double - ; SSE2: cost of 80 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i64v8double - ; AVX1: cost of 27 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i64v8double - ; AVX2: cost of 27 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i64v8double - ; AVX512F: cost of 22 {{.*}} sitofp - %1 = sitofp <8 x i64> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @sitofpv16i64v16double(<16 x i64> %a) { - ; SSE2-LABEL: sitofpv16i64v16double - ; SSE2: cost of 160 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i64v16double - ; AVX1: cost of 55 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i64v16double - ; AVX2: cost of 55 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i64v16double - ; AVX512F: cost of 45 {{.*}} sitofp - %1 = sitofp <16 x i64> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @sitofpv32i64v32double(<32 x i64> %a) { - ; SSE2-LABEL: sitofpv32i64v32double - ; SSE2: cost of 320 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i64v32double - ; AVX1: cost of 111 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i64v32double - ; AVX2: cost of 111 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i64v32double - ; AVX512F: cost of 91 {{.*}} sitofp - %1 = sitofp <32 x i64> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x float> @sitofpv2i8v2float(<2 x i8> %a) { - ; SSE2-LABEL: sitofpv2i8v2float - ; SSE2: cost of 15 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i8v2float - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i8v2float - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i8v2float - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i8> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @sitofpv4i8v4float(<4 x i8> %a) { - ; SSE2-LABEL: sitofpv4i8v4float - ; SSE2: cost of 5 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i8v4float - ; AVX1: cost of 3 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i8v4float - ; AVX2: cost of 3 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i8v4float - ; AVX512F: cost of 3 {{.*}} sitofp - %1 = sitofp <4 x i8> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @sitofpv8i8v8float(<8 x i8> %a) { - ; SSE2-LABEL: sitofpv8i8v8float - ; SSE2: cost of 15 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i8v8float - ; AVX1: cost of 8 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i8v8float - ; AVX2: cost of 8 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i8v8float - ; AVX512F: cost of 8 {{.*}} sitofp - %1 = sitofp <8 x i8> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @sitofpv16i8v16float(<16 x i8> %a) { - ; SSE2-LABEL: sitofpv16i8v16float - ; SSE2: cost of 8 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i8v16float - ; AVX1: cost of 17 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i8v16float - ; AVX2: cost of 17 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i8v16float - ; AVX512F: cost of 2 {{.*}} sitofp - %1 = sitofp <16 x i8> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @sitofpv32i8v32float(<32 x i8> %a) { - ; SSE2-LABEL: sitofpv32i8v32float - ; SSE2: cost of 16 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i8v32float - ; AVX1: cost of 35 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i8v32float - ; AVX2: cost of 35 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i8v32float - ; AVX512F: cost of 5 {{.*}} sitofp - %1 = sitofp <32 x i8> %a to <32 x float> - ret <32 x float> %1 -} - -define <2 x float> @sitofpv2i16v2float(<2 x i16> %a) { - ; SSE2-LABEL: sitofpv2i16v2float - ; SSE2: cost of 15 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i16v2float - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i16v2float - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i16v2float - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i16> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @sitofpv4i16v4float(<4 x i16> %a) { - ; SSE2-LABEL: sitofpv4i16v4float - ; SSE2: cost of 5 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i16v4float - ; AVX1: cost of 3 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i16v4float - ; AVX2: cost of 3 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i16v4float - ; AVX512F: cost of 3 {{.*}} sitofp - %1 = sitofp <4 x i16> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @sitofpv8i16v8float(<8 x i16> %a) { - ; SSE2-LABEL: sitofpv8i16v8float - ; SSE2: cost of 15 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i16v8float - ; AVX1: cost of 5 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i16v8float - ; AVX2: cost of 5 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i16v8float - ; AVX512F: cost of 5 {{.*}} sitofp - %1 = sitofp <8 x i16> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @sitofpv16i16v16float(<16 x i16> %a) { - ; SSE2-LABEL: sitofpv16i16v16float - ; SSE2: cost of 30 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i16v16float - ; AVX1: cost of 11 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i16v16float - ; AVX2: cost of 11 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i16v16float - ; AVX512F: cost of 2 {{.*}} sitofp - %1 = sitofp <16 x i16> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @sitofpv32i16v32float(<32 x i16> %a) { - ; SSE2-LABEL: sitofpv32i16v32float - ; SSE2: cost of 60 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i16v32float - ; AVX1: cost of 23 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i16v32float - ; AVX2: cost of 23 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i16v32float - ; AVX512F: cost of 5 {{.*}} sitofp - %1 = sitofp <32 x i16> %a to <32 x float> - ret <32 x float> %1 -} - -define <2 x float> @sitofpv2i32v2float(<2 x i32> %a) { - ; SSE2-LABEL: sitofpv2i32v2float - ; SSE2: cost of 15 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i32v2float - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i32v2float - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i32v2float - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i32> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @sitofpv4i32v4float(<4 x i32> %a) { - ; SSE2-LABEL: sitofpv4i32v4float - ; SSE2: cost of 5 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i32v4float - ; AVX1: cost of 1 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i32v4float - ; AVX2: cost of 1 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i32v4float - ; AVX512F: cost of 1 {{.*}} sitofp - %1 = sitofp <4 x i32> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @sitofpv8i32v8float(<8 x i32> %a) { - ; SSE2-LABEL: sitofpv8i32v8float - ; SSE2: cost of 10 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i32v8float - ; AVX1: cost of 1 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i32v8float - ; AVX2: cost of 1 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i32v8float - ; AVX512F: cost of 1 {{.*}} sitofp - %1 = sitofp <8 x i32> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @sitofpv16i32v16float(<16 x i32> %a) { - ; SSE2-LABEL: sitofpv16i32v16float - ; SSE2: cost of 20 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i32v16float - ; AVX1: cost of 3 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i32v16float - ; AVX2: cost of 3 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i32v16float - ; AVX512F: cost of 1 {{.*}} sitofp - %1 = sitofp <16 x i32> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @sitofpv32i32v32float(<32 x i32> %a) { - ; SSE2-LABEL: sitofpv32i32v32float - ; SSE2: cost of 40 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i32v32float - ; AVX1: cost of 7 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i32v32float - ; AVX2: cost of 7 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i32v32float - ; AVX512F: cost of 3 {{.*}} sitofp - %1 = sitofp <32 x i32> %a to <32 x float> - ret <32 x float> %1 -} - -define <2 x float> @sitofpv2i64v2float(<2 x i64> %a) { - ; SSE2-LABEL: sitofpv2i64v2float - ; SSE2: cost of 15 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv2i64v2float - ; AVX1: cost of 4 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv2i64v2float - ; AVX2: cost of 4 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv2i64v2float - ; AVX512F: cost of 4 {{.*}} sitofp - %1 = sitofp <2 x i64> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @sitofpv4i64v4float(<4 x i64> %a) { - ; SSE2-LABEL: sitofpv4i64v4float - ; SSE2: cost of 30 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv4i64v4float - ; AVX1: cost of 10 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv4i64v4float - ; AVX2: cost of 10 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv4i64v4float - ; AVX512F: cost of 10 {{.*}} sitofp - %1 = sitofp <4 x i64> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @sitofpv8i64v8float(<8 x i64> %a) { - ; SSE2-LABEL: sitofpv8i64v8float - ; SSE2: cost of 60 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i64v8float - ; AVX1: cost of 21 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i64v8float - ; AVX2: cost of 21 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i64v8float - ; AVX512F: cost of 22 {{.*}} sitofp - %1 = sitofp <8 x i64> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @sitofpv16i64v16float(<16 x i64> %a) { - ; SSE2-LABEL: sitofpv16i64v16float - ; SSE2: cost of 120 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i64v16float - ; AVX1: cost of 43 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i64v16float - ; AVX2: cost of 43 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i64v16float - ; AVX512F: cost of 45 {{.*}} sitofp - %1 = sitofp <16 x i64> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @sitofpv32i64v32float(<32 x i64> %a) { - ; SSE2-LABEL: sitofpv32i64v32float - ; SSE2: cost of 240 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv32i64v32float - ; AVX1: cost of 87 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv32i64v32float - ; AVX2: cost of 87 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv32i64v32float - ; AVX512F: cost of 91 {{.*}} sitofp - %1 = sitofp <32 x i64> %a to <32 x float> - ret <32 x float> %1 -} - -define <8 x double> @sitofpv8i1v8double(<8 x double> %a) { - ; SSE2-LABEL: sitofpv8i1v8double - ; SSE2: cost of 80 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv8i1v8double - ; AVX1: cost of 7 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv8i1v8double - ; AVX2: cost of 7 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv8i1v8double - ; AVX512F: cost of 4 {{.*}} sitofp - %cmpres = fcmp ogt <8 x double> %a, zeroinitializer - %1 = sitofp <8 x i1> %cmpres to <8 x double> - ret <8 x double> %1 -} - -define <16 x float> @sitofpv16i1v16float(<16 x float> %a) { - ; SSE2-LABEL: sitofpv16i1v16float - ; SSE2: cost of 8 {{.*}} sitofp - ; - ; AVX1-LABEL: sitofpv16i1v16float - ; AVX1: cost of 17 {{.*}} sitofp - ; - ; AVX2-LABEL: sitofpv16i1v16float - ; AVX2: cost of 17 {{.*}} sitofp - ; - ; AVX512F-LABEL: sitofpv16i1v16float - ; AVX512F: cost of 3 {{.*}} sitofp - %cmpres = fcmp ogt <16 x float> %a, zeroinitializer - %1 = sitofp <16 x i1> %cmpres to <16 x float> - ret <16 x float> %1 +; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512f -cost-model -analyze < %s | FileCheck --check-prefix=AVX512 --check-prefix=AVX512F %s +; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512dq -cost-model -analyze < %s | FileCheck --check-prefix=AVX512 --check-prefix=AVX512DQ %s + +; CHECK-LABEL: 'sitofp_i8_double' +define i32 @sitofp_i8_double() { + ; SSE2: cost of 1 {{.*}} sitofp i8 + ; AVX1: cost of 1 {{.*}} sitofp i8 + ; AVX2: cost of 1 {{.*}} sitofp i8 + ; AVX512: cost of 1 {{.*}} sitofp i8 + %cvt_i8_f64 = sitofp i8 undef to double + + ; SSE2: cost of 20 {{.*}} sitofp <2 x i8> + ; AVX1: cost of 4 {{.*}} sitofp <2 x i8> + ; AVX2: cost of 4 {{.*}} sitofp <2 x i8> + ; AVX512: cost of 4 {{.*}} sitofp <2 x i8> + %cvt_v2i8_v2f64 = sitofp <2 x i8> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} sitofp <4 x i8> + ; AVX1: cost of 3 {{.*}} sitofp <4 x i8> + ; AVX2: cost of 3 {{.*}} sitofp <4 x i8> + ; AVX512: cost of 3 {{.*}} sitofp <4 x i8> + %cvt_v4i8_v4f64 = sitofp <4 x i8> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} sitofp <8 x i8> + ; AVX1: cost of 7 {{.*}} sitofp <8 x i8> + ; AVX2: cost of 7 {{.*}} sitofp <8 x i8> + ; AVX512: cost of 2 {{.*}} sitofp <8 x i8> + %cvt_v8i8_v8f64 = sitofp <8 x i8> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i16_double' +define i32 @sitofp_i16_double() { + ; SSE2: cost of 1 {{.*}} sitofp i16 + ; AVX1: cost of 1 {{.*}} sitofp i16 + ; AVX2: cost of 1 {{.*}} sitofp i16 + ; AVX512: cost of 1 {{.*}} sitofp i16 + %cvt_i16_f64 = sitofp i16 undef to double + + ; SSE2: cost of 20 {{.*}} sitofp <2 x i16> + ; AVX1: cost of 4 {{.*}} sitofp <2 x i16> + ; AVX2: cost of 4 {{.*}} sitofp <2 x i16> + ; AVX512: cost of 4 {{.*}} sitofp <2 x i16> + %cvt_v2i16_v2f64 = sitofp <2 x i16> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} sitofp <4 x i16> + ; AVX1: cost of 3 {{.*}} sitofp <4 x i16> + ; AVX2: cost of 3 {{.*}} sitofp <4 x i16> + ; AVX512: cost of 3 {{.*}} sitofp <4 x i16> + %cvt_v4i16_v4f64 = sitofp <4 x i16> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} sitofp <8 x i16> + ; AVX1: cost of 7 {{.*}} sitofp <8 x i16> + ; AVX2: cost of 7 {{.*}} sitofp <8 x i16> + ; AVX512: cost of 2 {{.*}} sitofp <8 x i16> + %cvt_v8i16_v8f64 = sitofp <8 x i16> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i32_double' +define i32 @sitofp_i32_double() { + ; SSE2: cost of 1 {{.*}} sitofp i32 + ; AVX1: cost of 1 {{.*}} sitofp i32 + ; AVX2: cost of 1 {{.*}} sitofp i32 + ; AVX512: cost of 1 {{.*}} sitofp i32 + %cvt_i32_f64 = sitofp i32 undef to double + + ; SSE2: cost of 20 {{.*}} sitofp <2 x i32> + ; AVX1: cost of 4 {{.*}} sitofp <2 x i32> + ; AVX2: cost of 4 {{.*}} sitofp <2 x i32> + ; AVX512: cost of 4 {{.*}} sitofp <2 x i32> + %cvt_v2i32_v2f64 = sitofp <2 x i32> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} sitofp <4 x i32> + ; AVX1: cost of 1 {{.*}} sitofp <4 x i32> + ; AVX2: cost of 1 {{.*}} sitofp <4 x i32> + ; AVX512: cost of 1 {{.*}} sitofp <4 x i32> + %cvt_v4i32_v4f64 = sitofp <4 x i32> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} sitofp <8 x i32> + ; AVX1: cost of 3 {{.*}} sitofp <8 x i32> + ; AVX2: cost of 3 {{.*}} sitofp <8 x i32> + ; AVX512: cost of 1 {{.*}} sitofp <8 x i32> + %cvt_v8i32_v8f64 = sitofp <8 x i32> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i64_double' +define i32 @sitofp_i64_double() { + ; SSE2: cost of 1 {{.*}} sitofp i64 + ; AVX1: cost of 1 {{.*}} sitofp i64 + ; AVX2: cost of 1 {{.*}} sitofp i64 + ; AVX512: cost of 1 {{.*}} sitofp i64 + %cvt_i64_f64 = sitofp i64 undef to double + + ; SSE2: cost of 20 {{.*}} sitofp <2 x i64> + ; AVX1: cost of 20 {{.*}} sitofp <2 x i64> + ; AVX2: cost of 20 {{.*}} sitofp <2 x i64> + ; AVX512F: cost of 20 {{.*}} sitofp <2 x i64> + ; AVX512DQ: cost of 20 {{.*}} sitofp <2 x i64> + %cvt_v2i64_v2f64 = sitofp <2 x i64> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} sitofp <4 x i64> + ; AVX1: cost of 13 {{.*}} sitofp <4 x i64> + ; AVX2: cost of 13 {{.*}} sitofp <4 x i64> + ; AVX512F: cost of 13 {{.*}} sitofp <4 x i64> + ; AVX512DQ: cost of 13 {{.*}} sitofp <4 x i64> + %cvt_v4i64_v4f64 = sitofp <4 x i64> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} sitofp <8 x i64> + ; AVX1: cost of 27 {{.*}} sitofp <8 x i64> + ; AVX2: cost of 27 {{.*}} sitofp <8 x i64> + ; AVX512F: cost of 22 {{.*}} sitofp <8 x i64> + ; AVX512DQ: cost of 22 {{.*}} sitofp <8 x i64> + %cvt_v8i64_v8f64 = sitofp <8 x i64> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i8_float' +define i32 @sitofp_i8_float() { + ; SSE2: cost of 1 {{.*}} sitofp i8 + ; AVX1: cost of 1 {{.*}} sitofp i8 + ; AVX2: cost of 1 {{.*}} sitofp i8 + ; AVX512: cost of 1 {{.*}} sitofp i8 + %cvt_i8_f32 = sitofp i8 undef to float + + ; SSE2: cost of 5 {{.*}} sitofp <4 x i8> + ; AVX1: cost of 3 {{.*}} sitofp <4 x i8> + ; AVX2: cost of 3 {{.*}} sitofp <4 x i8> + ; AVX512: cost of 3 {{.*}} sitofp <4 x i8> + %cvt_v4i8_v4f32 = sitofp <4 x i8> undef to <4 x float> + + ; SSE2: cost of 15 {{.*}} sitofp <8 x i8> + ; AVX1: cost of 8 {{.*}} sitofp <8 x i8> + ; AVX2: cost of 8 {{.*}} sitofp <8 x i8> + ; AVX512: cost of 8 {{.*}} sitofp <8 x i8> + %cvt_v8i8_v8f32 = sitofp <8 x i8> undef to <8 x float> + + ; SSE2: cost of 8 {{.*}} sitofp <16 x i8> + ; AVX1: cost of 17 {{.*}} sitofp <16 x i8> + ; AVX16: cost of 17 {{.*}} sitofp <16 x i8> + ; AVX512: cost of 2 {{.*}} sitofp <16 x i8> + %cvt_v16i8_v16f32 = sitofp <16 x i8> undef to <16 x float> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i16_float' +define i32 @sitofp_i16_float() { + ; SSE2: cost of 1 {{.*}} sitofp i16 + ; AVX1: cost of 1 {{.*}} sitofp i16 + ; AVX2: cost of 1 {{.*}} sitofp i16 + ; AVX512: cost of 1 {{.*}} sitofp i16 + %cvt_i16_f32 = sitofp i16 undef to float + + ; SSE2: cost of 5 {{.*}} sitofp <4 x i16> + ; AVX1: cost of 3 {{.*}} sitofp <4 x i16> + ; AVX2: cost of 3 {{.*}} sitofp <4 x i16> + ; AVX512: cost of 3 {{.*}} sitofp <4 x i16> + %cvt_v4i16_v4f32 = sitofp <4 x i16> undef to <4 x float> + + ; SSE2: cost of 15 {{.*}} sitofp <8 x i16> + ; AVX1: cost of 5 {{.*}} sitofp <8 x i16> + ; AVX2: cost of 5 {{.*}} sitofp <8 x i16> + ; AVX512: cost of 5 {{.*}} sitofp <8 x i16> + %cvt_v8i16_v8f32 = sitofp <8 x i16> undef to <8 x float> + + ; SSE2: cost of 30 {{.*}} sitofp <16 x i16> + ; AVX1: cost of 11 {{.*}} sitofp <16 x i16> + ; AVX16: cost of 11 {{.*}} sitofp <16 x i16> + ; AVX512: cost of 2 {{.*}} sitofp <16 x i16> + %cvt_v16i16_v16f32 = sitofp <16 x i16> undef to <16 x float> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i32_float' +define i32 @sitofp_i32_float() { + ; SSE2: cost of 1 {{.*}} sitofp i32 + ; AVX1: cost of 1 {{.*}} sitofp i32 + ; AVX2: cost of 1 {{.*}} sitofp i32 + ; AVX512: cost of 1 {{.*}} sitofp i32 + %cvt_i32_f32 = sitofp i32 undef to float + + ; SSE2: cost of 5 {{.*}} sitofp <4 x i32> + ; AVX1: cost of 1 {{.*}} sitofp <4 x i32> + ; AVX2: cost of 1 {{.*}} sitofp <4 x i32> + ; AVX512: cost of 1 {{.*}} sitofp <4 x i32> + %cvt_v4i32_v4f32 = sitofp <4 x i32> undef to <4 x float> + + ; SSE2: cost of 10 {{.*}} sitofp <8 x i32> + ; AVX1: cost of 1 {{.*}} sitofp <8 x i32> + ; AVX2: cost of 1 {{.*}} sitofp <8 x i32> + ; AVX512: cost of 1 {{.*}} sitofp <8 x i32> + %cvt_v8i32_v8f32 = sitofp <8 x i32> undef to <8 x float> + + ; SSE2: cost of 20 {{.*}} sitofp <16 x i32> + ; AVX1: cost of 3 {{.*}} sitofp <16 x i32> + ; AVX2: cost of 3 {{.*}} sitofp <16 x i32> + ; AVX512: cost of 1 {{.*}} sitofp <16 x i32> + %cvt_v16i32_v16f32 = sitofp <16 x i32> undef to <16 x float> + + ret i32 undef +} + +; CHECK-LABEL: 'sitofp_i64_float' +define i32 @sitofp_i64_float() { + ; SSE2: cost of 1 {{.*}} sitofp i64 + ; AVX1: cost of 1 {{.*}} sitofp i64 + ; AVX2: cost of 1 {{.*}} sitofp i64 + ; AVX512: cost of 1 {{.*}} sitofp i64 + %cvt_i64_f32 = sitofp i64 undef to float + + ; SSE2: cost of 15 {{.*}} sitofp <2 x i64> + ; AVX1: cost of 4 {{.*}} sitofp <2 x i64> + ; AVX2: cost of 4 {{.*}} sitofp <2 x i64> + ; AVX512F: cost of 4 {{.*}} sitofp <2 x i64> + ; AVX512DQ: cost of 4 {{.*}} sitofp <2 x i64> + %cvt_v2i64_v2f32 = sitofp <2 x i64> undef to <2 x float> + + ; SSE2: cost of 30 {{.*}} sitofp <4 x i64> + ; AVX1: cost of 10 {{.*}} sitofp <4 x i64> + ; AVX2: cost of 10 {{.*}} sitofp <4 x i64> + ; AVX512F: cost of 10 {{.*}} sitofp <4 x i64> + ; AVX512DQ: cost of 10 {{.*}} sitofp <4 x i64> + %cvt_v4i64_v4f32 = sitofp <4 x i64> undef to <4 x float> + + ; SSE2: cost of 60 {{.*}} sitofp <8 x i64> + ; AVX1: cost of 21 {{.*}} sitofp <8 x i64> + ; AVX2: cost of 21 {{.*}} sitofp <8 x i64> + ; AVX512F: cost of 22 {{.*}} sitofp <8 x i64> + ; AVX512DQ: cost of 22 {{.*}} sitofp <8 x i64> + %cvt_v8i64_v8f32 = sitofp <8 x i64> undef to <8 x float> + + ; SSE2: cost of 120 {{.*}} sitofp <16 x i64> + ; AVX1: cost of 43 {{.*}} sitofp <16 x i64> + ; AVX2: cost of 43 {{.*}} sitofp <16 x i64> + ; AVX512F: cost of 45 {{.*}} sitofp <16 x i64> + ; AVX512DQ: cost of 45 {{.*}} sitofp <16 x i64> + %cvt_v16i64_v16f32 = sitofp <16 x i64> undef to <16 x float> + + ret i32 undef } diff --git a/llvm/test/Analysis/CostModel/X86/uitofp.ll b/llvm/test/Analysis/CostModel/X86/uitofp.ll index 2eb8407..a0b48c0 100644 --- a/llvm/test/Analysis/CostModel/X86/uitofp.ll +++ b/llvm/test/Analysis/CostModel/X86/uitofp.ll @@ -1,709 +1,250 @@ ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+sse2 -cost-model -analyze < %s | FileCheck --check-prefix=SSE --check-prefix=SSE2 %s ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx -cost-model -analyze < %s | FileCheck --check-prefix=AVX --check-prefix=AVX1 %s ; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx2 -cost-model -analyze < %s | FileCheck --check-prefix=AVX --check-prefix=AVX2 %s -; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512f -cost-model -analyze < %s | FileCheck --check-prefix=AVX512F %s -; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512dq -cost-model -analyze < %s | FileCheck --check-prefix=AVX512DQ %s - -define <2 x double> @uitofpv2i8v2double(<2 x i8> %a) { - ; SSE2-LABEL: uitofpv2i8v2double - ; SSE2: cost of 20 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i8v2double - ; AVX1: cost of 4 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i8v2double - ; AVX2: cost of 4 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i8v2double - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <2 x i8> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @uitofpv4i8v4double(<4 x i8> %a) { - ; SSE2-LABEL: uitofpv4i8v4double - ; SSE2: cost of 40 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i8v4double - ; AVX1: cost of 2 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i8v4double - ; AVX2: cost of 2 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i8v4double - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <4 x i8> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @uitofpv8i8v8double(<8 x i8> %a) { - ; SSE2-LABEL: uitofpv8i8v8double - ; SSE2: cost of 80 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i8v8double - ; AVX1: cost of 5 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i8v8double - ; AVX2: cost of 5 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i8v8double - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <8 x i8> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @uitofpv16i8v16double(<16 x i8> %a) { - ; SSE2-LABEL: uitofpv16i8v16double - ; SSE2: cost of 160 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i8v16double - ; AVX1: cost of 11 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i8v16double - ; AVX2: cost of 11 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i8v16double - ; AVX512F: cost of 5 {{.*}} uitofp - %1 = uitofp <16 x i8> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @uitofpv32i8v32double(<32 x i8> %a) { - ; SSE2-LABEL: uitofpv32i8v32double - ; SSE2: cost of 320 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i8v32double - ; AVX1: cost of 23 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i8v32double - ; AVX2: cost of 23 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i8v32double - ; AVX512F: cost of 11 {{.*}} uitofp - %1 = uitofp <32 x i8> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x double> @uitofpv2i16v2double(<2 x i16> %a) { - ; SSE2-LABEL: uitofpv2i16v2double - ; SSE2: cost of 20 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i16v2double - ; AVX1: cost of 4 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i16v2double - ; AVX2: cost of 4 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i16v2double - ; AVX512F: cost of 5 {{.*}} uitofp - %1 = uitofp <2 x i16> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @uitofpv4i16v4double(<4 x i16> %a) { - ; SSE2-LABEL: uitofpv4i16v4double - ; SSE2: cost of 40 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i16v4double - ; AVX1: cost of 2 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i16v4double - ; AVX2: cost of 2 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i16v4double - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <4 x i16> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @uitofpv8i16v8double(<8 x i16> %a) { - ; SSE2-LABEL: uitofpv8i16v8double - ; SSE2: cost of 80 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i16v8double - ; AVX1: cost of 5 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i16v8double - ; AVX2: cost of 5 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i16v8double - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <8 x i16> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @uitofpv16i16v16double(<16 x i16> %a) { - ; SSE2-LABEL: uitofpv16i16v16double - ; SSE2: cost of 160 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i16v16double - ; AVX1: cost of 11 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i16v16double - ; AVX2: cost of 11 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i16v16double - ; AVX512F: cost of 5 {{.*}} uitofp - %1 = uitofp <16 x i16> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @uitofpv32i16v32double(<32 x i16> %a) { - ; SSE2-LABEL: uitofpv32i16v32double - ; SSE2: cost of 320 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i16v32double - ; AVX1: cost of 23 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i16v32double - ; AVX2: cost of 23 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i16v32double - ; AVX512F: cost of 11 {{.*}} uitofp - %1 = uitofp <32 x i16> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x double> @uitofpv2i32v2double(<2 x i32> %a) { - ; SSE2-LABEL: uitofpv2i32v2double - ; SSE2: cost of 20 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i32v2double - ; AVX1: cost of 6 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i32v2double - ; AVX2: cost of 6 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i32v2double - ; AVX512F: cost of 1 {{.*}} uitofp - %1 = uitofp <2 x i32> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @uitofpv4i32v4double(<4 x i32> %a) { - ; SSE2-LABEL: uitofpv4i32v4double - ; SSE2: cost of 40 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i32v4double - ; AVX1: cost of 6 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i32v4double - ; AVX2: cost of 6 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i32v4double - ; AVX512F: cost of 1 {{.*}} uitofp - %1 = uitofp <4 x i32> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @uitofpv8i32v8double(<8 x i32> %a) { - ; SSE2-LABEL: uitofpv8i32v8double - ; SSE2: cost of 80 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i32v8double - ; AVX1: cost of 13 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i32v8double - ; AVX2: cost of 13 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i32v8double - ; AVX512F: cost of 1 {{.*}} uitofp - %1 = uitofp <8 x i32> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @uitofpv16i32v16double(<16 x i32> %a) { - ; SSE2-LABEL: uitofpv16i32v16double - ; SSE2: cost of 160 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i32v16double - ; AVX1: cost of 27 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i32v16double - ; AVX2: cost of 27 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i32v16double - ; AVX512F: cost of 3 {{.*}} uitofp - %1 = uitofp <16 x i32> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @uitofpv32i32v32double(<32 x i32> %a) { - ; SSE2-LABEL: uitofpv32i32v32double - ; SSE2: cost of 320 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i32v32double - ; AVX1: cost of 55 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i32v32double - ; AVX2: cost of 55 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i32v32double - ; AVX512F: cost of 7 {{.*}} uitofp - %1 = uitofp <32 x i32> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x double> @uitofpv2i64v2double(<2 x i64> %a) { - ; SSE2-LABEL: uitofpv2i64v2double - ; SSE2: cost of 20 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i64v2double - ; AVX1: cost of 10 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i64v2double - ; AVX2: cost of 10 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i64v2double - ; AVX512F: cost of 5 {{.*}} uitofp - ; - ; AVX512DQ-LABEL: uitofpv2i64v2double - ; AVX512DQ: cost of 1 {{.*}} uitofp - %1 = uitofp <2 x i64> %a to <2 x double> - ret <2 x double> %1 -} - -define <4 x double> @uitofpv4i64v4double(<4 x i64> %a) { - ; SSE2-LABEL: uitofpv4i64v4double - ; SSE2: cost of 40 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i64v4double - ; AVX1: cost of 20 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i64v4double - ; AVX2: cost of 20 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i64v4double - ; AVX512F: cost of 12 {{.*}} uitofp - ; - ; AVX512DQ-LABEL: uitofpv4i64v4double - ; AVX512DQ: cost of 1 {{.*}} uitofp - %1 = uitofp <4 x i64> %a to <4 x double> - ret <4 x double> %1 -} - -define <8 x double> @uitofpv8i64v8double(<8 x i64> %a) { - ; SSE2-LABEL: uitofpv8i64v8double - ; SSE2: cost of 80 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i64v8double - ; AVX1: cost of 41 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i64v8double - ; AVX2: cost of 41 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i64v8double - ; AVX512F: cost of 26 {{.*}} uitofp - ; - ; AVX512DQ-LABEL: uitofpv8i64v8double - ; AVX512DQ: cost of 1 {{.*}} uitofp - %1 = uitofp <8 x i64> %a to <8 x double> - ret <8 x double> %1 -} - -define <16 x double> @uitofpv16i64v16double(<16 x i64> %a) { - ; SSE2-LABEL: uitofpv16i64v16double - ; SSE2: cost of 160 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i64v16double - ; AVX1: cost of 83 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i64v16double - ; AVX2: cost of 83 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i64v16double - ; AVX512F: cost of 53 {{.*}} uitofp - ; - ; AVX512DQ-LABEL: uitofpv16i64v16double - ; AVX512DQ: cost of 3 {{.*}} uitofp - %1 = uitofp <16 x i64> %a to <16 x double> - ret <16 x double> %1 -} - -define <32 x double> @uitofpv32i64v32double(<32 x i64> %a) { - ; SSE2-LABEL: uitofpv32i64v32double - ; SSE2: cost of 320 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i64v32double - ; AVX1: cost of 167 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i64v32double - ; AVX2: cost of 167 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i64v32double - ; AVX512F: cost of 107 {{.*}} uitofp - ; - ; AVX512DQ-LABEL: uitofpv32i64v32double - ; AVX512DQ: cost of 2 {{.*}} uitofp - %1 = uitofp <32 x i64> %a to <32 x double> - ret <32 x double> %1 -} - -define <2 x float> @uitofpv2i8v2float(<2 x i8> %a) { - ; SSE2-LABEL: uitofpv2i8v2float - ; SSE2: cost of 15 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i8v2float - ; AVX1: cost of 4 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i8v2float - ; AVX2: cost of 4 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i8v2float - ; AVX512F: cost of 4 {{.*}} uitofp - %1 = uitofp <2 x i8> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @uitofpv4i8v4float(<4 x i8> %a) { - ; SSE2-LABEL: uitofpv4i8v4float - ; SSE2: cost of 8 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i8v4float - ; AVX1: cost of 2 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i8v4float - ; AVX2: cost of 2 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i8v4float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <4 x i8> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @uitofpv8i8v8float(<8 x i8> %a) { - ; SSE2-LABEL: uitofpv8i8v8float - ; SSE2: cost of 15 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i8v8float - ; AVX1: cost of 5 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i8v8float - ; AVX2: cost of 5 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i8v8float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <8 x i8> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @uitofpv16i8v16float(<16 x i8> %a) { - ; SSE2-LABEL: uitofpv16i8v16float - ; SSE2: cost of 8 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i8v16float - ; AVX1: cost of 11 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i8v16float - ; AVX2: cost of 11 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i8v16float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <16 x i8> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @uitofpv32i8v32float(<32 x i8> %a) { - ; SSE2-LABEL: uitofpv32i8v32float - ; SSE2: cost of 16 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i8v32float - ; AVX1: cost of 23 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i8v32float - ; AVX2: cost of 23 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i8v32float - ; AVX512F: cost of 5 {{.*}} uitofp - %1 = uitofp <32 x i8> %a to <32 x float> - ret <32 x float> %1 -} - -define <2 x float> @uitofpv2i16v2float(<2 x i16> %a) { - ; SSE2-LABEL: uitofpv2i16v2float - ; SSE2: cost of 15 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i16v2float - ; AVX1: cost of 4 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i16v2float - ; AVX2: cost of 4 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i16v2float - ; AVX512F: cost of 4 {{.*}} uitofp - %1 = uitofp <2 x i16> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @uitofpv4i16v4float(<4 x i16> %a) { - ; SSE2-LABEL: uitofpv4i16v4float - ; SSE2: cost of 8 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i16v4float - ; AVX1: cost of 2 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i16v4float - ; AVX2: cost of 2 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i16v4float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <4 x i16> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @uitofpv8i16v8float(<8 x i16> %a) { - ; SSE2-LABEL: uitofpv8i16v8float - ; SSE2: cost of 15 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i16v8float - ; AVX1: cost of 5 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i16v8float - ; AVX2: cost of 5 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i16v8float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <8 x i16> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @uitofpv16i16v16float(<16 x i16> %a) { - ; SSE2-LABEL: uitofpv16i16v16float - ; SSE2: cost of 30 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i16v16float - ; AVX1: cost of 11 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i16v16float - ; AVX2: cost of 11 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i16v16float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <16 x i16> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @uitofpv32i16v32float(<32 x i16> %a) { - ; SSE2-LABEL: uitofpv32i16v32float - ; SSE2: cost of 60 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i16v32float - ; AVX1: cost of 23 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i16v32float - ; AVX2: cost of 23 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i16v32float - ; AVX512F: cost of 5 {{.*}} uitofp - %1 = uitofp <32 x i16> %a to <32 x float> - ret <32 x float> %1 -} - -define <2 x float> @uitofpv2i32v2float(<2 x i32> %a) { - ; SSE2-LABEL: uitofpv2i32v2float - ; SSE2: cost of 15 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i32v2float - ; AVX1: cost of 4 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i32v2float - ; AVX2: cost of 4 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i32v2float - ; AVX512F: cost of 2 {{.*}} uitofp - %1 = uitofp <2 x i32> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @uitofpv4i32v4float(<4 x i32> %a) { - ; SSE2-LABEL: uitofpv4i32v4float - ; SSE2: cost of 8 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i32v4float - ; AVX1: cost of 6 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i32v4float - ; AVX2: cost of 6 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i32v4float - ; AVX512F: cost of 1 {{.*}} uitofp - %1 = uitofp <4 x i32> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @uitofpv8i32v8float(<8 x i32> %a) { - ; SSE2-LABEL: uitofpv8i32v8float - ; SSE2: cost of 16 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i32v8float - ; AVX1: cost of 9 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i32v8float - ; AVX2: cost of 8 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i32v8float - ; AVX512F: cost of 1 {{.*}} uitofp - %1 = uitofp <8 x i32> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @uitofpv16i32v16float(<16 x i32> %a) { - ; SSE2-LABEL: uitofpv16i32v16float - ; SSE2: cost of 32 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i32v16float - ; AVX1: cost of 19 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i32v16float - ; AVX2: cost of 17 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i32v16float - ; AVX512F: cost of 1 {{.*}} uitofp - %1 = uitofp <16 x i32> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @uitofpv32i32v32float(<32 x i32> %a) { - ; SSE2-LABEL: uitofpv32i32v32float - ; SSE2: cost of 64 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i32v32float - ; AVX1: cost of 39 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i32v32float - ; AVX2: cost of 35 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i32v32float - ; AVX512F: cost of 3 {{.*}} uitofp - %1 = uitofp <32 x i32> %a to <32 x float> - ret <32 x float> %1 -} - -define <2 x float> @uitofpv2i64v2float(<2 x i64> %a) { - ; SSE2-LABEL: uitofpv2i64v2float - ; SSE2: cost of 15 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv2i64v2float - ; AVX1: cost of 4 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv2i64v2float - ; AVX2: cost of 4 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv2i64v2float - ; AVX512F: cost of 5 {{.*}} uitofp - %1 = uitofp <2 x i64> %a to <2 x float> - ret <2 x float> %1 -} - -define <4 x float> @uitofpv4i64v4float(<4 x i64> %a) { - ; SSE2-LABEL: uitofpv4i64v4float - ; SSE2: cost of 30 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv4i64v4float - ; AVX1: cost of 10 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv4i64v4float - ; AVX2: cost of 10 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv4i64v4float - ; AVX512F: cost of 10 {{.*}} uitofp - %1 = uitofp <4 x i64> %a to <4 x float> - ret <4 x float> %1 -} - -define <8 x float> @uitofpv8i64v8float(<8 x i64> %a) { - ; SSE2-LABEL: uitofpv8i64v8float - ; SSE2: cost of 60 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv8i64v8float - ; AVX1: cost of 21 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv8i64v8float - ; AVX2: cost of 21 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv8i64v8float - ; AVX512F: cost of 26 {{.*}} uitofp - %1 = uitofp <8 x i64> %a to <8 x float> - ret <8 x float> %1 -} - -define <16 x float> @uitofpv16i64v16float(<16 x i64> %a) { - ; SSE2-LABEL: uitofpv16i64v16float - ; SSE2: cost of 120 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv16i64v16float - ; AVX1: cost of 43 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv16i64v16float - ; AVX2: cost of 43 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv16i64v16float - ; AVX512F: cost of 53 {{.*}} uitofp - %1 = uitofp <16 x i64> %a to <16 x float> - ret <16 x float> %1 -} - -define <32 x float> @uitofpv32i64v32float(<32 x i64> %a) { - ; SSE2-LABEL: uitofpv32i64v32float - ; SSE2: cost of 240 {{.*}} uitofp - ; - ; AVX1-LABEL: uitofpv32i64v32float - ; AVX1: cost of 87 {{.*}} uitofp - ; - ; AVX2-LABEL: uitofpv32i64v32float - ; AVX2: cost of 87 {{.*}} uitofp - ; - ; AVX512F-LABEL: uitofpv32i64v32float - ; AVX512F: cost of 107 {{.*}} uitofp - %1 = uitofp <32 x i64> %a to <32 x float> - ret <32 x float> %1 -} - -define <8 x i32> @fptouiv8f32v8i32(<8 x float> %a) { - ; AVX512F-LABEL: fptouiv8f32v8i32 - ; AVX512F: cost of 1 {{.*}} fptoui - %1 = fptoui <8 x float> %a to <8 x i32> - ret <8 x i32> %1 -} - -define <4 x i32> @fptouiv4f32v4i32(<4 x float> %a) { - ; AVX512F-LABEL: fptouiv4f32v4i32 - ; AVX512F: cost of 1 {{.*}} fptoui - %1 = fptoui <4 x float> %a to <4 x i32> - ret <4 x i32> %1 -} - -define <2 x i32> @fptouiv2f32v2i32(<2 x float> %a) { - ; AVX512F-LABEL: fptouiv2f32v2i32 - ; AVX512F: cost of 1 {{.*}} fptoui - %1 = fptoui <2 x float> %a to <2 x i32> - ret <2 x i32> %1 -} - -define <16 x i32> @fptouiv16f32v16i32(<16 x float> %a) { - ; AVX512F-LABEL: fptouiv16f32v16i32 - ; AVX512F: cost of 1 {{.*}} fptoui - %1 = fptoui <16 x float> %a to <16 x i32> - ret <16 x i32> %1 -} - -define <8 x i64> @fptouiv8f32v8i64(<8 x float> %a) { - ; AVX512DQ-LABEL: fptouiv8f32v8i64 - ; AVX512DQ: cost of 1 {{.*}} fptoui - %1 = fptoui <8 x float> %a to <8 x i64> - ret <8 x i64> %1 -} - -define <4 x i64> @fptouiv4f32v4i64(<4 x float> %a) { - ; AVX512DQ-LABEL: fptouiv4f32v4i64 - ; AVX512DQ: cost of 1 {{.*}} fptoui - %1 = fptoui <4 x float> %a to <4 x i64> - ret <4 x i64> %1 -} - -define <2 x i64> @fptouiv2f32v2i64(<2 x float> %a) { - ; AVX512DQ-LABEL: fptouiv2f32v2i64 - ; AVX512DQ: cost of 1 {{.*}} fptoui - %1 = fptoui <2 x float> %a to <2 x i64> - ret <2 x i64> %1 +; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512f -cost-model -analyze < %s | FileCheck --check-prefix=AVX512 --check-prefix=AVX512F %s +; RUN: opt -mtriple=x86_64-apple-darwin -mattr=+avx512dq -cost-model -analyze < %s | FileCheck --check-prefix=AVX512 --check-prefix=AVX512DQ %s + +; CHECK-LABEL: 'uitofp_i8_double' +define i32 @uitofp_i8_double() { + ; SSE2: cost of 1 {{.*}} uitofp i8 + ; AVX1: cost of 1 {{.*}} uitofp i8 + ; AVX2: cost of 1 {{.*}} uitofp i8 + ; AVX512: cost of 1 {{.*}} uitofp i8 + %cvt_i8_f64 = uitofp i8 undef to double + + ; SSE2: cost of 20 {{.*}} uitofp <2 x i8> + ; AVX1: cost of 4 {{.*}} uitofp <2 x i8> + ; AVX2: cost of 4 {{.*}} uitofp <2 x i8> + ; AVX512: cost of 2 {{.*}} uitofp <2 x i8> + %cvt_v2i8_v2f64 = uitofp <2 x i8> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} uitofp <4 x i8> + ; AVX1: cost of 2 {{.*}} uitofp <4 x i8> + ; AVX2: cost of 2 {{.*}} uitofp <4 x i8> + ; AVX512: cost of 2 {{.*}} uitofp <4 x i8> + %cvt_v4i8_v4f64 = uitofp <4 x i8> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} uitofp <8 x i8> + ; AVX1: cost of 5 {{.*}} uitofp <8 x i8> + ; AVX2: cost of 5 {{.*}} uitofp <8 x i8> + ; AVX512: cost of 2 {{.*}} uitofp <8 x i8> + %cvt_v8i8_v8f64 = uitofp <8 x i8> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i16_double' +define i32 @uitofp_i16_double() { + ; SSE2: cost of 1 {{.*}} uitofp i16 + ; AVX1: cost of 1 {{.*}} uitofp i16 + ; AVX2: cost of 1 {{.*}} uitofp i16 + ; AVX512: cost of 1 {{.*}} uitofp i16 + %cvt_i16_f64 = uitofp i16 undef to double + + ; SSE2: cost of 20 {{.*}} uitofp <2 x i16> + ; AVX1: cost of 4 {{.*}} uitofp <2 x i16> + ; AVX2: cost of 4 {{.*}} uitofp <2 x i16> + ; AVX512: cost of 5 {{.*}} uitofp <2 x i16> + %cvt_v2i16_v2f64 = uitofp <2 x i16> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} uitofp <4 x i16> + ; AVX1: cost of 2 {{.*}} uitofp <4 x i16> + ; AVX2: cost of 2 {{.*}} uitofp <4 x i16> + ; AVX512: cost of 2 {{.*}} uitofp <4 x i16> + %cvt_v4i16_v4f64 = uitofp <4 x i16> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} uitofp <8 x i16> + ; AVX1: cost of 5 {{.*}} uitofp <8 x i16> + ; AVX2: cost of 5 {{.*}} uitofp <8 x i16> + ; AVX512: cost of 2 {{.*}} uitofp <8 x i16> + %cvt_v8i16_v8f64 = uitofp <8 x i16> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i32_double' +define i32 @uitofp_i32_double() { + ; SSE2: cost of 1 {{.*}} uitofp i32 + ; AVX1: cost of 1 {{.*}} uitofp i32 + ; AVX2: cost of 1 {{.*}} uitofp i32 + ; AVX512: cost of 1 {{.*}} uitofp i32 + %cvt_i32_f64 = uitofp i32 undef to double + + ; SSE2: cost of 20 {{.*}} uitofp <2 x i32> + ; AVX1: cost of 6 {{.*}} uitofp <2 x i32> + ; AVX2: cost of 6 {{.*}} uitofp <2 x i32> + ; AVX512: cost of 1 {{.*}} uitofp <2 x i32> + %cvt_v2i32_v2f64 = uitofp <2 x i32> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} uitofp <4 x i32> + ; AVX1: cost of 6 {{.*}} uitofp <4 x i32> + ; AVX2: cost of 6 {{.*}} uitofp <4 x i32> + ; AVX512: cost of 1 {{.*}} uitofp <4 x i32> + %cvt_v4i32_v4f64 = uitofp <4 x i32> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} uitofp <8 x i32> + ; AVX1: cost of 13 {{.*}} uitofp <8 x i32> + ; AVX2: cost of 13 {{.*}} uitofp <8 x i32> + ; AVX512: cost of 1 {{.*}} uitofp <8 x i32> + %cvt_v8i32_v8f64 = uitofp <8 x i32> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i64_double' +define i32 @uitofp_i64_double() { + ; SSE2: cost of 1 {{.*}} uitofp i64 + ; AVX1: cost of 1 {{.*}} uitofp i64 + ; AVX2: cost of 1 {{.*}} uitofp i64 + ; AVX512: cost of 1 {{.*}} uitofp i64 + %cvt_i64_f64 = uitofp i64 undef to double + + ; SSE2: cost of 20 {{.*}} uitofp <2 x i64> + ; AVX1: cost of 10 {{.*}} uitofp <2 x i64> + ; AVX2: cost of 10 {{.*}} uitofp <2 x i64> + ; AVX512F: cost of 5 {{.*}} uitofp <2 x i64> + ; AVX512DQ: cost of 1 {{.*}} uitofp <2 x i64> + %cvt_v2i64_v2f64 = uitofp <2 x i64> undef to <2 x double> + + ; SSE2: cost of 40 {{.*}} uitofp <4 x i64> + ; AVX1: cost of 20 {{.*}} uitofp <4 x i64> + ; AVX2: cost of 20 {{.*}} uitofp <4 x i64> + ; AVX512F: cost of 12 {{.*}} uitofp <4 x i64> + ; AVX512DQ: cost of 1 {{.*}} uitofp <4 x i64> + %cvt_v4i64_v4f64 = uitofp <4 x i64> undef to <4 x double> + + ; SSE2: cost of 80 {{.*}} uitofp <8 x i64> + ; AVX1: cost of 41 {{.*}} uitofp <8 x i64> + ; AVX2: cost of 41 {{.*}} uitofp <8 x i64> + ; AVX512F: cost of 26 {{.*}} uitofp <8 x i64> + ; AVX512DQ: cost of 1 {{.*}} uitofp <8 x i64> + %cvt_v8i64_v8f64 = uitofp <8 x i64> undef to <8 x double> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i8_float' +define i32 @uitofp_i8_float() { + ; SSE2: cost of 1 {{.*}} uitofp i8 + ; AVX1: cost of 1 {{.*}} uitofp i8 + ; AVX2: cost of 1 {{.*}} uitofp i8 + ; AVX512: cost of 1 {{.*}} uitofp i8 + %cvt_i8_f32 = uitofp i8 undef to float + + ; SSE2: cost of 8 {{.*}} uitofp <4 x i8> + ; AVX1: cost of 2 {{.*}} uitofp <4 x i8> + ; AVX2: cost of 2 {{.*}} uitofp <4 x i8> + ; AVX512: cost of 2 {{.*}} uitofp <4 x i8> + %cvt_v4i8_v4f32 = uitofp <4 x i8> undef to <4 x float> + + ; SSE2: cost of 15 {{.*}} uitofp <8 x i8> + ; AVX1: cost of 5 {{.*}} uitofp <8 x i8> + ; AVX2: cost of 5 {{.*}} uitofp <8 x i8> + ; AVX512: cost of 2 {{.*}} uitofp <8 x i8> + %cvt_v8i8_v8f32 = uitofp <8 x i8> undef to <8 x float> + + ; SSE2: cost of 8 {{.*}} uitofp <16 x i8> + ; AVX1: cost of 11 {{.*}} uitofp <16 x i8> + ; AVX16: cost of 11 {{.*}} uitofp <16 x i8> + ; AVX512: cost of 2 {{.*}} uitofp <16 x i8> + %cvt_v16i8_v16f32 = uitofp <16 x i8> undef to <16 x float> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i16_float' +define i32 @uitofp_i16_float() { + ; SSE2: cost of 1 {{.*}} uitofp i16 + ; AVX1: cost of 1 {{.*}} uitofp i16 + ; AVX2: cost of 1 {{.*}} uitofp i16 + ; AVX512: cost of 1 {{.*}} uitofp i16 + %cvt_i16_f32 = uitofp i16 undef to float + + ; SSE2: cost of 8 {{.*}} uitofp <4 x i16> + ; AVX1: cost of 2 {{.*}} uitofp <4 x i16> + ; AVX2: cost of 2 {{.*}} uitofp <4 x i16> + ; AVX512: cost of 2 {{.*}} uitofp <4 x i16> + %cvt_v4i16_v4f32 = uitofp <4 x i16> undef to <4 x float> + + ; SSE2: cost of 15 {{.*}} uitofp <8 x i16> + ; AVX1: cost of 5 {{.*}} uitofp <8 x i16> + ; AVX2: cost of 5 {{.*}} uitofp <8 x i16> + ; AVX512: cost of 2 {{.*}} uitofp <8 x i16> + %cvt_v8i16_v8f32 = uitofp <8 x i16> undef to <8 x float> + + ; SSE2: cost of 30 {{.*}} uitofp <16 x i16> + ; AVX1: cost of 11 {{.*}} uitofp <16 x i16> + ; AVX16: cost of 11 {{.*}} uitofp <16 x i16> + ; AVX512: cost of 2 {{.*}} uitofp <16 x i16> + %cvt_v16i16_v16f32 = uitofp <16 x i16> undef to <16 x float> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i32_float' +define i32 @uitofp_i32_float() { + ; SSE2: cost of 1 {{.*}} uitofp i32 + ; AVX1: cost of 1 {{.*}} uitofp i32 + ; AVX2: cost of 1 {{.*}} uitofp i32 + ; AVX512: cost of 1 {{.*}} uitofp i32 + %cvt_i32_f32 = uitofp i32 undef to float + + ; SSE2: cost of 8 {{.*}} uitofp <4 x i32> + ; AVX1: cost of 6 {{.*}} uitofp <4 x i32> + ; AVX2: cost of 6 {{.*}} uitofp <4 x i32> + ; AVX512: cost of 1 {{.*}} uitofp <4 x i32> + %cvt_v4i32_v4f32 = uitofp <4 x i32> undef to <4 x float> + + ; SSE2: cost of 16 {{.*}} uitofp <8 x i32> + ; AVX1: cost of 9 {{.*}} uitofp <8 x i32> + ; AVX2: cost of 8 {{.*}} uitofp <8 x i32> + ; AVX512: cost of 1 {{.*}} uitofp <8 x i32> + %cvt_v8i32_v8f32 = uitofp <8 x i32> undef to <8 x float> + + ; SSE2: cost of 32 {{.*}} uitofp <16 x i32> + ; AVX1: cost of 19 {{.*}} uitofp <16 x i32> + ; AVX2: cost of 17 {{.*}} uitofp <16 x i32> + ; AVX512: cost of 1 {{.*}} uitofp <16 x i32> + %cvt_v16i32_v16f32 = uitofp <16 x i32> undef to <16 x float> + + ret i32 undef +} + +; CHECK-LABEL: 'uitofp_i64_float' +define i32 @uitofp_i64_float() { + ; SSE2: cost of 1 {{.*}} uitofp i64 + ; AVX1: cost of 1 {{.*}} uitofp i64 + ; AVX2: cost of 1 {{.*}} uitofp i64 + ; AVX512: cost of 1 {{.*}} uitofp i64 + %cvt_i64_f32 = uitofp i64 undef to float + + ; SSE2: cost of 15 {{.*}} uitofp <2 x i64> + ; AVX1: cost of 4 {{.*}} uitofp <2 x i64> + ; AVX2: cost of 4 {{.*}} uitofp <2 x i64> + ; AVX512F: cost of 5 {{.*}} uitofp <2 x i64> + ; AVX512DQ: cost of 1 {{.*}} uitofp <2 x i64> + %cvt_v2i64_v2f32 = uitofp <2 x i64> undef to <2 x float> + + ; SSE2: cost of 30 {{.*}} uitofp <4 x i64> + ; AVX1: cost of 10 {{.*}} uitofp <4 x i64> + ; AVX2: cost of 10 {{.*}} uitofp <4 x i64> + ; AVX512F: cost of 10 {{.*}} uitofp <4 x i64> + ; AVX512DQ: cost of 1 {{.*}} uitofp <4 x i64> + %cvt_v4i64_v4f32 = uitofp <4 x i64> undef to <4 x float> + + ; SSE2: cost of 60 {{.*}} uitofp <8 x i64> + ; AVX1: cost of 21 {{.*}} uitofp <8 x i64> + ; AVX2: cost of 21 {{.*}} uitofp <8 x i64> + ; AVX512F: cost of 26 {{.*}} uitofp <8 x i64> + ; AVX512DQ: cost of 1 {{.*}} uitofp <8 x i64> + %cvt_v8i64_v8f32 = uitofp <8 x i64> undef to <8 x float> + + ; SSE2: cost of 120 {{.*}} uitofp <16 x i64> + ; AVX1: cost of 43 {{.*}} uitofp <16 x i64> + ; AVX2: cost of 43 {{.*}} uitofp <16 x i64> + ; AVX512F: cost of 53 {{.*}} uitofp <16 x i64> + ; AVX512DQ: cost of 3 {{.*}} uitofp <16 x i64> + %cvt_v16i64_v16f32 = uitofp <16 x i64> undef to <16 x float> + + ret i32 undef }