Index: llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp =================================================================== --- llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp +++ llvm/trunk/lib/Target/X86/X86TargetTransformInfo.cpp @@ -528,17 +528,31 @@ int ISD = TLI->InstructionOpcodeToISD(Opcode); assert(ISD && "Invalid opcode"); - static const TypeConversionCostTblEntry AVX512ConversionTbl[] = { + static const TypeConversionCostTblEntry AVX512DQConversionTbl[] = { + { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 1 }, + { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i64, 1 }, + { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i64, 1 }, + { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i64, 1 }, + { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i64, 1 }, + { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i64, 1 }, + + { ISD::FP_TO_UINT, MVT::v2i64, MVT::v2f64, 1 }, + { ISD::FP_TO_UINT, MVT::v4i64, MVT::v4f64, 1 }, + { ISD::FP_TO_UINT, MVT::v8i64, MVT::v8f64, 1 }, + { ISD::FP_TO_UINT, MVT::v2i64, MVT::v2f32, 1 }, + { ISD::FP_TO_UINT, MVT::v4i64, MVT::v4f32, 1 }, + { ISD::FP_TO_UINT, MVT::v8i64, MVT::v8f32, 1 }, + }; + + static const TypeConversionCostTblEntry AVX512FConversionTbl[] = { { ISD::FP_EXTEND, MVT::v8f64, MVT::v8f32, 1 }, { ISD::FP_EXTEND, MVT::v8f64, MVT::v16f32, 3 }, { ISD::FP_ROUND, MVT::v8f32, MVT::v8f64, 1 }, - { ISD::FP_ROUND, MVT::v16f32, MVT::v8f64, 3 }, { ISD::TRUNCATE, MVT::v16i8, MVT::v16i32, 1 }, { ISD::TRUNCATE, MVT::v16i16, MVT::v16i32, 1 }, { ISD::TRUNCATE, MVT::v8i16, MVT::v8i64, 1 }, { ISD::TRUNCATE, MVT::v8i32, MVT::v8i64, 1 }, - { ISD::TRUNCATE, MVT::v16i32, MVT::v8i64, 4 }, // v16i1 -> v16i32 - load + broadcast { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i1, 2 }, @@ -548,16 +562,46 @@ { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i8, 1 }, { ISD::SIGN_EXTEND, MVT::v16i32, MVT::v16i16, 1 }, { ISD::ZERO_EXTEND, MVT::v16i32, MVT::v16i16, 1 }, - { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v16i32, 3 }, - { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v16i32, 3 }, + { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i32, 1 }, + { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i32, 1 }, + { ISD::ZERO_EXTEND, MVT::v8i64, MVT::v8i16, 1 }, + { ISD::SIGN_EXTEND, MVT::v8i64, MVT::v8i16, 1 }, { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i1, 3 }, { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i8, 2 }, { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i16, 2 }, { ISD::SINT_TO_FP, MVT::v16f32, MVT::v16i32, 1 }, { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i1, 4 }, + { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i8, 2 }, { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i16, 2 }, { ISD::SINT_TO_FP, MVT::v8f64, MVT::v8i32, 1 }, + + { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i1, 3 }, + { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i8, 2 }, + { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i16, 2 }, + { ISD::UINT_TO_FP, MVT::v16f32, MVT::v16i32, 1 }, + { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i32, 1 }, + { ISD::UINT_TO_FP, MVT::v4f32, MVT::v4i32, 1 }, + { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i1, 4 }, + { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i16, 2 }, + { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i32, 1 }, + { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i8, 2 }, + { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i8, 2 }, + { ISD::UINT_TO_FP, MVT::v8f32, MVT::v8i16, 2 }, + { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i8, 2 }, + { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i16, 2 }, + { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i32, 1 }, + { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i8, 2 }, + { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i16, 5 }, + { ISD::UINT_TO_FP, MVT::v2f32, MVT::v2i32, 2 }, + { ISD::UINT_TO_FP, MVT::v2f64, MVT::v2i64, 5 }, + { ISD::UINT_TO_FP, MVT::v4f64, MVT::v4i64, 12 }, + { ISD::UINT_TO_FP, MVT::v8f64, MVT::v8i64, 26 }, + + { ISD::FP_TO_UINT, MVT::v2i32, MVT::v2f32, 1 }, + { ISD::FP_TO_UINT, MVT::v4i32, MVT::v4f32, 1 }, + { ISD::FP_TO_UINT, MVT::v8i32, MVT::v8f32, 1 }, + { ISD::FP_TO_UINT, MVT::v16i32, MVT::v16f32, 1 }, }; static const TypeConversionCostTblEntry AVX2ConversionTbl[] = { @@ -693,12 +737,6 @@ return LTSrc.first * Entry->Cost; } - if (ST->hasAVX512()) { - if (const auto *Entry = ConvertCostTableLookup(AVX512ConversionTbl, ISD, - LTDest.second, LTSrc.second)) - return Entry->Cost; - } - EVT SrcTy = TLI->getValueType(DL, Src); EVT DstTy = TLI->getValueType(DL, Dst); @@ -706,6 +744,18 @@ if (!SrcTy.isSimple() || !DstTy.isSimple()) return BaseT::getCastInstrCost(Opcode, Dst, Src); + if (ST->hasDQI()) + if (const auto *Entry = ConvertCostTableLookup(AVX512DQConversionTbl, ISD, + DstTy.getSimpleVT(), + SrcTy.getSimpleVT())) + return Entry->Cost; + + if (ST->hasAVX512()) + if (const auto *Entry = ConvertCostTableLookup(AVX512FConversionTbl, ISD, + DstTy.getSimpleVT(), + SrcTy.getSimpleVT())) + return Entry->Cost; + if (ST->hasAVX2()) { if (const auto *Entry = ConvertCostTableLookup(AVX2ConversionTbl, ISD, DstTy.getSimpleVT(), Index: llvm/trunk/test/Analysis/CostModel/X86/cast.ll =================================================================== --- llvm/trunk/test/Analysis/CostModel/X86/cast.ll +++ llvm/trunk/test/Analysis/CostModel/X86/cast.ll @@ -84,11 +84,11 @@ ;CHECK-AVX: cost of 4 {{.*}} zext %D = zext <4 x i32> undef to <4 x i64> - ;CHECK-AVX512: cost of 3 {{.*}} %D1 = zext - %D1 = zext <16 x i32> undef to <16 x i64> + ;CHECK-AVX512: cost of 1 {{.*}} %D1 = zext + %D1 = zext <8 x i32> undef to <8 x i64> - ;CHECK-AVX512: cost of 3 {{.*}} %D2 = sext - %D2 = sext <16 x i32> undef to <16 x i64> + ;CHECK-AVX512: cost of 1 {{.*}} %D2 = sext + %D2 = sext <8 x i32> undef to <8 x i64> ;CHECK-AVX512: cost of 1 {{.*}} %D3 = zext %D3 = zext <16 x i16> undef to <16 x i32> @@ -118,9 +118,11 @@ ;CHECK_AVX512: cost of 1 {{.*}} G = trunc %G = trunc <8 x i64> undef to <8 x i32> - ;CHECK-AVX512: cost of 4 {{.*}} %G1 = trunc - %G1 = trunc <16 x i64> undef to <16 x i32> + ;CHECK-AVX512: cost of 1 {{.*}} %G1 = trunc + %G1 = trunc <16 x i32> undef to <16 x i16> + ;CHECK-AVX512: cost of 1 {{.*}} %G2 = trunc + %G2 = trunc <16 x i32> undef to <16 x i8> ret i32 undef } @@ -207,38 +209,40 @@ ; CHECK: cost of 2 {{.*}} uitofp %C2 = uitofp <4 x i16> %c to <4 x double> - ; CHECK: cost of 6 {{.*}} uitofp + ; CHECK-AVX2: cost of 6 {{.*}} uitofp %D1 = uitofp <4 x i32> %d to <4 x float> - ; CHECK: cost of 6 {{.*}} uitofp + ; CHECK-AVX2: cost of 6 {{.*}} uitofp %D2 = uitofp <4 x i32> %d to <4 x double> ret void } define void @uitofp8(<8 x i1> %a, <8 x i8> %b, <8 x i16> %c, <8 x i32> %d) { ; CHECK-LABEL: for function 'uitofp8' - ; CHECK: cost of 6 {{.*}} uitofp + ; CHECK-AVX2: cost of 6 {{.*}} uitofp %A1 = uitofp <8 x i1> %a to <8 x float> - ; CHECK: cost of 5 {{.*}} uitofp + ; CHECK-AVX2: cost of 5 {{.*}} uitofp + ; CHECK-AVX512: cost of 2 {{.*}} uitofp %B1 = uitofp <8 x i8> %b to <8 x float> - ; CHECK: cost of 5 {{.*}} uitofp + ; CHECK-AVX2: cost of 5 {{.*}} uitofp + ; CHECK-AVX512: cost of 2 {{.*}} uitofp %C1 = uitofp <8 x i16> %c to <8 x float> ; CHECK-AVX2: cost of 8 {{.*}} uitofp - ; CHECK-AVX512: cost of 8 {{.*}} uitofp + ; CHECK-AVX512: cost of 1 {{.*}} uitofp ; CHECK-AVX: cost of 9 {{.*}} uitofp %D1 = uitofp <8 x i32> %d to <8 x float> ret void } -define void @fp_conv(<8 x float> %a, <16 x float>%b) { +define void @fp_conv(<8 x float> %a, <16 x float>%b, <4 x float> %c) { ;CHECK-LABEL: for function 'fp_conv' ; CHECK-AVX512: cost of 1 {{.*}} fpext %A1 = fpext <8 x float> %a to <8 x double> - ; CHECK-AVX512: cost of 3 {{.*}} fpext - %A2 = fpext <16 x float> %b to <16 x double> + ; CHECK-AVX512: cost of 1 {{.*}} fpext + %A2 = fpext <4 x float> %c to <4 x double> ; CHECK-AVX2: cost of 3 {{.*}} %A3 = fpext ; CHECK-AVX512: cost of 1 {{.*}} %A3 = fpext @@ -248,7 +252,7 @@ ; CHECK-AVX512: cost of 1 {{.*}} %A4 = fptrunc %A4 = fptrunc <8 x double> undef to <8 x float> - ; CHECK-AVX512: cost of 3 {{.*}} %A5 = fptrunc - %A5 = fptrunc <16 x double> undef to <16 x float> + ; CHECK-AVX512: cost of 1 {{.*}} %A5 = fptrunc + %A5 = fptrunc <4 x double> undef to <4 x float> ret void } Index: llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll =================================================================== --- llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll +++ llvm/trunk/test/Analysis/CostModel/X86/sitofp.ll @@ -4,656 +4,656 @@ ; 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: sitofpv2i8v2double + ; SSE2-LABEL: sitofpv2i8v2double ; SSE2: cost of 20 {{.*}} sitofp ; - ; AVX1: sitofpv2i8v2double + ; AVX1-LABEL: sitofpv2i8v2double ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i8v2double + ; AVX2-LABEL: sitofpv2i8v2double ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i8v2double + ; 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: sitofpv4i8v4double + ; SSE2-LABEL: sitofpv4i8v4double ; SSE2: cost of 40 {{.*}} sitofp ; - ; AVX1: sitofpv4i8v4double + ; AVX1-LABEL: sitofpv4i8v4double ; AVX1: cost of 3 {{.*}} sitofp ; - ; AVX2: sitofpv4i8v4double + ; AVX2-LABEL: sitofpv4i8v4double ; AVX2: cost of 3 {{.*}} sitofp ; - ; AVX512F: sitofpv4i8v4double + ; 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: sitofpv8i8v8double + ; SSE2-LABEL: sitofpv8i8v8double ; SSE2: cost of 80 {{.*}} sitofp ; - ; AVX1: sitofpv8i8v8double + ; AVX1-LABEL: sitofpv8i8v8double ; AVX1: cost of 20 {{.*}} sitofp ; - ; AVX2: sitofpv8i8v8double + ; AVX2-LABEL: sitofpv8i8v8double ; AVX2: cost of 20 {{.*}} sitofp ; - ; AVX512F: sitofpv8i8v8double + ; 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: sitofpv16i8v16double + ; SSE2-LABEL: sitofpv16i8v16double ; SSE2: cost of 160 {{.*}} sitofp ; - ; AVX1: sitofpv16i8v16double + ; AVX1-LABEL: sitofpv16i8v16double ; AVX1: cost of 40 {{.*}} sitofp ; - ; AVX2: sitofpv16i8v16double + ; AVX2-LABEL: sitofpv16i8v16double ; AVX2: cost of 40 {{.*}} sitofp ; - ; AVX512F: sitofpv16i8v16double + ; AVX512F-LABEL: sitofpv16i8v16double ; AVX512F: cost of 44 {{.*}} 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: sitofpv32i8v32double + ; SSE2-LABEL: sitofpv32i8v32double ; SSE2: cost of 320 {{.*}} sitofp ; - ; AVX1: sitofpv32i8v32double + ; AVX1-LABEL: sitofpv32i8v32double ; AVX1: cost of 80 {{.*}} sitofp ; - ; AVX2: sitofpv32i8v32double + ; AVX2-LABEL: sitofpv32i8v32double ; AVX2: cost of 80 {{.*}} sitofp ; - ; AVX512F: sitofpv32i8v32double + ; AVX512F-LABEL: sitofpv32i8v32double ; AVX512F: cost of 88 {{.*}} 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: sitofpv2i16v2double + ; SSE2-LABEL: sitofpv2i16v2double ; SSE2: cost of 20 {{.*}} sitofp ; - ; AVX1: sitofpv2i16v2double + ; AVX1-LABEL: sitofpv2i16v2double ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i16v2double + ; AVX2-LABEL: sitofpv2i16v2double ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i16v2double + ; 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: sitofpv4i16v4double + ; SSE2-LABEL: sitofpv4i16v4double ; SSE2: cost of 40 {{.*}} sitofp ; - ; AVX1: sitofpv4i16v4double + ; AVX1-LABEL: sitofpv4i16v4double ; AVX1: cost of 3 {{.*}} sitofp ; - ; AVX2: sitofpv4i16v4double + ; AVX2-LABEL: sitofpv4i16v4double ; AVX2: cost of 3 {{.*}} sitofp ; - ; AVX512F: sitofpv4i16v4double + ; 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: sitofpv8i16v8double + ; SSE2-LABEL: sitofpv8i16v8double ; SSE2: cost of 80 {{.*}} sitofp ; - ; AVX1: sitofpv8i16v8double + ; AVX1-LABEL: sitofpv8i16v8double ; AVX1: cost of 20 {{.*}} sitofp ; - ; AVX2: sitofpv8i16v8double + ; AVX2-LABEL: sitofpv8i16v8double ; AVX2: cost of 20 {{.*}} sitofp ; - ; AVX512F: sitofpv8i16v8double + ; 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: sitofpv16i16v16double + ; SSE2-LABEL: sitofpv16i16v16double ; SSE2: cost of 160 {{.*}} sitofp ; - ; AVX1: sitofpv16i16v16double + ; AVX1-LABEL: sitofpv16i16v16double ; AVX1: cost of 40 {{.*}} sitofp ; - ; AVX2: sitofpv16i16v16double + ; AVX2-LABEL: sitofpv16i16v16double ; AVX2: cost of 40 {{.*}} sitofp ; - ; AVX512F: sitofpv16i16v16double + ; AVX512F-LABEL: sitofpv16i16v16double ; AVX512F: cost of 44 {{.*}} 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: sitofpv32i16v32double + ; SSE2-LABEL: sitofpv32i16v32double ; SSE2: cost of 320 {{.*}} sitofp ; - ; AVX1: sitofpv32i16v32double + ; AVX1-LABEL: sitofpv32i16v32double ; AVX1: cost of 80 {{.*}} sitofp ; - ; AVX2: sitofpv32i16v32double + ; AVX2-LABEL: sitofpv32i16v32double ; AVX2: cost of 80 {{.*}} sitofp ; - ; AVX512F: sitofpv32i16v32double + ; AVX512F-LABEL: sitofpv32i16v32double ; AVX512F: cost of 88 {{.*}} 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: sitofpv2i32v2double + ; SSE2-LABEL: sitofpv2i32v2double ; SSE2: cost of 20 {{.*}} sitofp ; - ; AVX1: sitofpv2i32v2double + ; AVX1-LABEL: sitofpv2i32v2double ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i32v2double + ; AVX2-LABEL: sitofpv2i32v2double ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i32v2double + ; 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: sitofpv4i32v4double + ; SSE2-LABEL: sitofpv4i32v4double ; SSE2: cost of 40 {{.*}} sitofp ; - ; AVX1: sitofpv4i32v4double + ; AVX1-LABEL: sitofpv4i32v4double ; AVX1: cost of 1 {{.*}} sitofp ; - ; AVX2: sitofpv4i32v4double + ; AVX2-LABEL: sitofpv4i32v4double ; AVX2: cost of 1 {{.*}} sitofp ; - ; AVX512F: sitofpv4i32v4double + ; 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: sitofpv8i32v8double + ; SSE2-LABEL: sitofpv8i32v8double ; SSE2: cost of 80 {{.*}} sitofp ; - ; AVX1: sitofpv8i32v8double + ; AVX1-LABEL: sitofpv8i32v8double ; AVX1: cost of 20 {{.*}} sitofp ; - ; AVX2: sitofpv8i32v8double + ; AVX2-LABEL: sitofpv8i32v8double ; AVX2: cost of 20 {{.*}} sitofp ; - ; AVX512F: sitofpv8i32v8double + ; 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: sitofpv16i32v16double + ; SSE2-LABEL: sitofpv16i32v16double ; SSE2: cost of 160 {{.*}} sitofp ; - ; AVX1: sitofpv16i32v16double + ; AVX1-LABEL: sitofpv16i32v16double ; AVX1: cost of 40 {{.*}} sitofp ; - ; AVX2: sitofpv16i32v16double + ; AVX2-LABEL: sitofpv16i32v16double ; AVX2: cost of 40 {{.*}} sitofp ; - ; AVX512F: sitofpv16i32v16double + ; AVX512F-LABEL: sitofpv16i32v16double ; AVX512F: cost of 44 {{.*}} 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: sitofpv32i32v32double + ; SSE2-LABEL: sitofpv32i32v32double ; SSE2: cost of 320 {{.*}} sitofp ; - ; AVX1: sitofpv32i32v32double + ; AVX1-LABEL: sitofpv32i32v32double ; AVX1: cost of 80 {{.*}} sitofp ; - ; AVX2: sitofpv32i32v32double + ; AVX2-LABEL: sitofpv32i32v32double ; AVX2: cost of 80 {{.*}} sitofp ; - ; AVX512F: sitofpv32i32v32double + ; AVX512F-LABEL: sitofpv32i32v32double ; AVX512F: cost of 88 {{.*}} 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: sitofpv2i64v2double + ; SSE2-LABEL: sitofpv2i64v2double ; SSE2: cost of 20 {{.*}} sitofp ; - ; AVX1: sitofpv2i64v2double + ; AVX1-LABEL: sitofpv2i64v2double ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i64v2double + ; AVX2-LABEL: sitofpv2i64v2double ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i64v2double + ; AVX512F-LABEL: sitofpv2i64v2double ; AVX512F: cost of 4 {{.*}} 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: sitofpv4i64v4double + ; SSE2-LABEL: sitofpv4i64v4double ; SSE2: cost of 40 {{.*}} sitofp ; - ; AVX1: sitofpv4i64v4double + ; AVX1-LABEL: sitofpv4i64v4double ; AVX1: cost of 10 {{.*}} sitofp ; - ; AVX2: sitofpv4i64v4double + ; AVX2-LABEL: sitofpv4i64v4double ; AVX2: cost of 10 {{.*}} sitofp ; - ; AVX512F: sitofpv4i64v4double + ; AVX512F-LABEL: sitofpv4i64v4double ; AVX512F: cost of 10 {{.*}} 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: sitofpv8i64v8double + ; SSE2-LABEL: sitofpv8i64v8double ; SSE2: cost of 80 {{.*}} sitofp ; - ; AVX1: sitofpv8i64v8double + ; AVX1-LABEL: sitofpv8i64v8double ; AVX1: cost of 20 {{.*}} sitofp ; - ; AVX2: sitofpv8i64v8double + ; AVX2-LABEL: sitofpv8i64v8double ; AVX2: cost of 20 {{.*}} sitofp ; - ; AVX512F: sitofpv8i64v8double + ; 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: sitofpv16i64v16double + ; SSE2-LABEL: sitofpv16i64v16double ; SSE2: cost of 160 {{.*}} sitofp ; - ; AVX1: sitofpv16i64v16double + ; AVX1-LABEL: sitofpv16i64v16double ; AVX1: cost of 40 {{.*}} sitofp ; - ; AVX2: sitofpv16i64v16double + ; AVX2-LABEL: sitofpv16i64v16double ; AVX2: cost of 40 {{.*}} sitofp ; - ; AVX512F: sitofpv16i64v16double + ; AVX512F-LABEL: sitofpv16i64v16double ; AVX512F: cost of 44 {{.*}} 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: sitofpv32i64v32double + ; SSE2-LABEL: sitofpv32i64v32double ; SSE2: cost of 320 {{.*}} sitofp ; - ; AVX1: sitofpv32i64v32double + ; AVX1-LABEL: sitofpv32i64v32double ; AVX1: cost of 80 {{.*}} sitofp ; - ; AVX2: sitofpv32i64v32double + ; AVX2-LABEL: sitofpv32i64v32double ; AVX2: cost of 80 {{.*}} sitofp ; - ; AVX512F: sitofpv32i64v32double + ; AVX512F-LABEL: sitofpv32i64v32double ; AVX512F: cost of 88 {{.*}} 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: sitofpv2i8v2float + ; SSE2-LABEL: sitofpv2i8v2float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv2i8v2float + ; AVX1-LABEL: sitofpv2i8v2float ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i8v2float + ; AVX2-LABEL: sitofpv2i8v2float ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i8v2float + ; 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: sitofpv4i8v4float + ; SSE2-LABEL: sitofpv4i8v4float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv4i8v4float + ; AVX1-LABEL: sitofpv4i8v4float ; AVX1: cost of 3 {{.*}} sitofp ; - ; AVX2: sitofpv4i8v4float + ; AVX2-LABEL: sitofpv4i8v4float ; AVX2: cost of 3 {{.*}} sitofp ; - ; AVX512F: sitofpv4i8v4float + ; 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: sitofpv8i8v8float + ; SSE2-LABEL: sitofpv8i8v8float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv8i8v8float + ; AVX1-LABEL: sitofpv8i8v8float ; AVX1: cost of 8 {{.*}} sitofp ; - ; AVX2: sitofpv8i8v8float + ; AVX2-LABEL: sitofpv8i8v8float ; AVX2: cost of 8 {{.*}} sitofp ; - ; AVX512F: sitofpv8i8v8float + ; 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: sitofpv16i8v16float + ; SSE2-LABEL: sitofpv16i8v16float ; SSE2: cost of 8 {{.*}} sitofp ; - ; AVX1: sitofpv16i8v16float + ; AVX1-LABEL: sitofpv16i8v16float ; AVX1: cost of 44 {{.*}} sitofp ; - ; AVX2: sitofpv16i8v16float + ; AVX2-LABEL: sitofpv16i8v16float ; AVX2: cost of 44 {{.*}} sitofp ; - ; AVX512F: sitofpv16i8v16float + ; 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: sitofpv32i8v32float + ; SSE2-LABEL: sitofpv32i8v32float ; SSE2: cost of 16 {{.*}} sitofp ; - ; AVX1: sitofpv32i8v32float + ; AVX1-LABEL: sitofpv32i8v32float ; AVX1: cost of 88 {{.*}} sitofp ; - ; AVX2: sitofpv32i8v32float + ; AVX2-LABEL: sitofpv32i8v32float ; AVX2: cost of 88 {{.*}} sitofp ; - ; AVX512F: sitofpv32i8v32float + ; AVX512F-LABEL: sitofpv32i8v32float ; AVX512F: cost of 92 {{.*}} 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: sitofpv2i16v2float + ; SSE2-LABEL: sitofpv2i16v2float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv2i16v2float + ; AVX1-LABEL: sitofpv2i16v2float ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i16v2float + ; AVX2-LABEL: sitofpv2i16v2float ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i16v2float + ; 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: sitofpv4i16v4float + ; SSE2-LABEL: sitofpv4i16v4float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv4i16v4float + ; AVX1-LABEL: sitofpv4i16v4float ; AVX1: cost of 3 {{.*}} sitofp ; - ; AVX2: sitofpv4i16v4float + ; AVX2-LABEL: sitofpv4i16v4float ; AVX2: cost of 3 {{.*}} sitofp ; - ; AVX512F: sitofpv4i16v4float + ; 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: sitofpv8i16v8float + ; SSE2-LABEL: sitofpv8i16v8float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv8i16v8float + ; AVX1-LABEL: sitofpv8i16v8float ; AVX1: cost of 5 {{.*}} sitofp ; - ; AVX2: sitofpv8i16v8float + ; AVX2-LABEL: sitofpv8i16v8float ; AVX2: cost of 5 {{.*}} sitofp ; - ; AVX512F: sitofpv8i16v8float + ; 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: sitofpv16i16v16float + ; SSE2-LABEL: sitofpv16i16v16float ; SSE2: cost of 30 {{.*}} sitofp ; - ; AVX1: sitofpv16i16v16float + ; AVX1-LABEL: sitofpv16i16v16float ; AVX1: cost of 44 {{.*}} sitofp ; - ; AVX2: sitofpv16i16v16float + ; AVX2-LABEL: sitofpv16i16v16float ; AVX2: cost of 44 {{.*}} sitofp ; - ; AVX512F: sitofpv16i16v16float + ; 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: sitofpv32i16v32float + ; SSE2-LABEL: sitofpv32i16v32float ; SSE2: cost of 60 {{.*}} sitofp ; - ; AVX1: sitofpv32i16v32float + ; AVX1-LABEL: sitofpv32i16v32float ; AVX1: cost of 88 {{.*}} sitofp ; - ; AVX2: sitofpv32i16v32float + ; AVX2-LABEL: sitofpv32i16v32float ; AVX2: cost of 88 {{.*}} sitofp ; - ; AVX512F: sitofpv32i16v32float - ; AVX512F: cost of 2 {{.*}} sitofp + ; AVX512F-LABEL: sitofpv32i16v32float + ; AVX512F: cost of 92 {{.*}} 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: sitofpv2i32v2float + ; SSE2-LABEL: sitofpv2i32v2float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv2i32v2float + ; AVX1-LABEL: sitofpv2i32v2float ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i32v2float + ; AVX2-LABEL: sitofpv2i32v2float ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i32v2float + ; 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: sitofpv4i32v4float + ; SSE2-LABEL: sitofpv4i32v4float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv4i32v4float + ; AVX1-LABEL: sitofpv4i32v4float ; AVX1: cost of 1 {{.*}} sitofp ; - ; AVX2: sitofpv4i32v4float + ; AVX2-LABEL: sitofpv4i32v4float ; AVX2: cost of 1 {{.*}} sitofp ; - ; AVX512F: sitofpv4i32v4float + ; 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: sitofpv8i32v8float + ; SSE2-LABEL: sitofpv8i32v8float ; SSE2: cost of 30 {{.*}} sitofp ; - ; AVX1: sitofpv8i32v8float + ; AVX1-LABEL: sitofpv8i32v8float ; AVX1: cost of 1 {{.*}} sitofp ; - ; AVX2: sitofpv8i32v8float + ; AVX2-LABEL: sitofpv8i32v8float ; AVX2: cost of 1 {{.*}} sitofp ; - ; AVX512F: sitofpv8i32v8float + ; 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: sitofpv16i32v16float + ; SSE2-LABEL: sitofpv16i32v16float ; SSE2: cost of 60 {{.*}} sitofp ; - ; AVX1: sitofpv16i32v16float + ; AVX1-LABEL: sitofpv16i32v16float ; AVX1: cost of 44 {{.*}} sitofp ; - ; AVX2: sitofpv16i32v16float + ; AVX2-LABEL: sitofpv16i32v16float ; AVX2: cost of 44 {{.*}} sitofp ; - ; AVX512F: sitofpv16i32v16float + ; 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: sitofpv32i32v32float + ; SSE2-LABEL: sitofpv32i32v32float ; SSE2: cost of 120 {{.*}} sitofp ; - ; AVX1: sitofpv32i32v32float + ; AVX1-LABEL: sitofpv32i32v32float ; AVX1: cost of 88 {{.*}} sitofp ; - ; AVX2: sitofpv32i32v32float + ; AVX2-LABEL: sitofpv32i32v32float ; AVX2: cost of 88 {{.*}} sitofp ; - ; AVX512F: sitofpv32i32v32float - ; AVX512F: cost of 1 {{.*}} sitofp + ; AVX512F-LABEL: sitofpv32i32v32float + ; AVX512F: cost of 92 {{.*}} 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: sitofpv2i64v2float + ; SSE2-LABEL: sitofpv2i64v2float ; SSE2: cost of 15 {{.*}} sitofp ; - ; AVX1: sitofpv2i64v2float + ; AVX1-LABEL: sitofpv2i64v2float ; AVX1: cost of 4 {{.*}} sitofp ; - ; AVX2: sitofpv2i64v2float + ; AVX2-LABEL: sitofpv2i64v2float ; AVX2: cost of 4 {{.*}} sitofp ; - ; AVX512F: sitofpv2i64v2float + ; 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: sitofpv4i64v4float + ; SSE2-LABEL: sitofpv4i64v4float ; SSE2: cost of 30 {{.*}} sitofp ; - ; AVX1: sitofpv4i64v4float + ; AVX1-LABEL: sitofpv4i64v4float ; AVX1: cost of 10 {{.*}} sitofp ; - ; AVX2: sitofpv4i64v4float + ; AVX2-LABEL: sitofpv4i64v4float ; AVX2: cost of 10 {{.*}} sitofp ; - ; AVX512F: sitofpv4i64v4float + ; 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: sitofpv8i64v8float + ; SSE2-LABEL: sitofpv8i64v8float ; SSE2: cost of 60 {{.*}} sitofp ; - ; AVX1: sitofpv8i64v8float + ; AVX1-LABEL: sitofpv8i64v8float ; AVX1: cost of 22 {{.*}} sitofp ; - ; AVX2: sitofpv8i64v8float + ; AVX2-LABEL: sitofpv8i64v8float ; AVX2: cost of 22 {{.*}} sitofp ; - ; AVX512F: sitofpv8i64v8float + ; 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: sitofpv16i64v16float + ; SSE2-LABEL: sitofpv16i64v16float ; SSE2: cost of 120 {{.*}} sitofp ; - ; AVX1: sitofpv16i64v16float + ; AVX1-LABEL: sitofpv16i64v16float ; AVX1: cost of 44 {{.*}} sitofp ; - ; AVX2: sitofpv16i64v16float + ; AVX2-LABEL: sitofpv16i64v16float ; AVX2: cost of 44 {{.*}} sitofp ; - ; AVX512F: sitofpv16i64v16float + ; AVX512F-LABEL: sitofpv16i64v16float ; AVX512F: cost of 46 {{.*}} 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: sitofpv32i64v32float + ; SSE2-LABEL: sitofpv32i64v32float ; SSE2: cost of 240 {{.*}} sitofp ; - ; AVX1: sitofpv32i64v32float + ; AVX1-LABEL: sitofpv32i64v32float ; AVX1: cost of 88 {{.*}} sitofp ; - ; AVX2: sitofpv32i64v32float + ; AVX2-LABEL: sitofpv32i64v32float ; AVX2: cost of 88 {{.*}} sitofp ; - ; AVX512F: sitofpv32i64v32float + ; AVX512F-LABEL: sitofpv32i64v32float ; AVX512F: cost of 92 {{.*}} 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: sitofpv8i1v8double + ; SSE2-LABEL: sitofpv8i1v8double ; SSE2: cost of 80 {{.*}} sitofp ; - ; AVX1: sitofpv8i1v8double + ; AVX1-LABEL: sitofpv8i1v8double ; AVX1: cost of 20 {{.*}} sitofp ; - ; AVX2: sitofpv8i1v8double + ; AVX2-LABEL: sitofpv8i1v8double ; AVX2: cost of 20 {{.*}} sitofp ; - ; AVX512F: sitofpv8i1v8double + ; 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> @@ -661,16 +661,16 @@ } define <16 x float> @sitofpv16i1v16float(<16 x float> %a) { - ; SSE2: sitofpv16i1v16float + ; SSE2-LABEL: sitofpv16i1v16float ; SSE2: cost of 8 {{.*}} sitofp ; - ; AVX1: sitofpv16i1v16float + ; AVX1-LABEL: sitofpv16i1v16float ; AVX1: cost of 44 {{.*}} sitofp ; - ; AVX2: sitofpv16i1v16float + ; AVX2-LABEL: sitofpv16i1v16float ; AVX2: cost of 44 {{.*}} sitofp ; - ; AVX512F: sitofpv16i1v16float + ; 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> Index: llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll =================================================================== --- llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll +++ llvm/trunk/test/Analysis/CostModel/X86/uitofp.ll @@ -2,644 +2,708 @@ ; 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: uitofpv2i8v2double + ; SSE2-LABEL: uitofpv2i8v2double ; SSE2: cost of 20 {{.*}} uitofp ; - ; AVX1: uitofpv2i8v2double + ; AVX1-LABEL: uitofpv2i8v2double ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i8v2double + ; AVX2-LABEL: uitofpv2i8v2double ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i8v2double - ; AVX512F: 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: uitofpv4i8v4double + ; SSE2-LABEL: uitofpv4i8v4double ; SSE2: cost of 40 {{.*}} uitofp ; - ; AVX1: uitofpv4i8v4double + ; AVX1-LABEL: uitofpv4i8v4double ; AVX1: cost of 2 {{.*}} uitofp ; - ; AVX2: uitofpv4i8v4double + ; AVX2-LABEL: uitofpv4i8v4double ; AVX2: cost of 2 {{.*}} uitofp ; - ; AVX512F: uitofpv4i8v4double + ; 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: uitofpv8i8v8double + ; SSE2-LABEL: uitofpv8i8v8double ; SSE2: cost of 80 {{.*}} uitofp ; - ; AVX1: uitofpv8i8v8double + ; AVX1-LABEL: uitofpv8i8v8double ; AVX1: cost of 20 {{.*}} uitofp ; - ; AVX2: uitofpv8i8v8double + ; AVX2-LABEL: uitofpv8i8v8double ; AVX2: cost of 20 {{.*}} uitofp ; - ; AVX512F: uitofpv8i8v8double - ; AVX512F: cost of 22 {{.*}} 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: uitofpv16i8v16double + ; SSE2-LABEL: uitofpv16i8v16double ; SSE2: cost of 160 {{.*}} uitofp ; - ; AVX1: uitofpv16i8v16double + ; AVX1-LABEL: uitofpv16i8v16double ; AVX1: cost of 40 {{.*}} uitofp ; - ; AVX2: uitofpv16i8v16double + ; AVX2-LABEL: uitofpv16i8v16double ; AVX2: cost of 40 {{.*}} uitofp ; - ; AVX512F: uitofpv16i8v16double + ; AVX512F-LABEL: uitofpv16i8v16double ; AVX512F: cost of 44 {{.*}} 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: uitofpv32i8v32double + ; SSE2-LABEL: uitofpv32i8v32double ; SSE2: cost of 320 {{.*}} uitofp ; - ; AVX1: uitofpv32i8v32double + ; AVX1-LABEL: uitofpv32i8v32double ; AVX1: cost of 80 {{.*}} uitofp ; - ; AVX2: uitofpv32i8v32double + ; AVX2-LABEL: uitofpv32i8v32double ; AVX2: cost of 80 {{.*}} uitofp ; - ; AVX512F: uitofpv32i8v32double + ; AVX512F-LABEL: uitofpv32i8v32double ; AVX512F: cost of 88 {{.*}} 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: uitofpv2i16v2double + ; SSE2-LABEL: uitofpv2i16v2double ; SSE2: cost of 20 {{.*}} uitofp ; - ; AVX1: uitofpv2i16v2double + ; AVX1-LABEL: uitofpv2i16v2double ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i16v2double + ; AVX2-LABEL: uitofpv2i16v2double ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i16v2double - ; AVX512F: 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: uitofpv4i16v4double + ; SSE2-LABEL: uitofpv4i16v4double ; SSE2: cost of 40 {{.*}} uitofp ; - ; AVX1: uitofpv4i16v4double + ; AVX1-LABEL: uitofpv4i16v4double ; AVX1: cost of 2 {{.*}} uitofp ; - ; AVX2: uitofpv4i16v4double + ; AVX2-LABEL: uitofpv4i16v4double ; AVX2: cost of 2 {{.*}} uitofp ; - ; AVX512F: uitofpv4i16v4double + ; 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: uitofpv8i16v8double + ; SSE2-LABEL: uitofpv8i16v8double ; SSE2: cost of 80 {{.*}} uitofp ; - ; AVX1: uitofpv8i16v8double + ; AVX1-LABEL: uitofpv8i16v8double ; AVX1: cost of 20 {{.*}} uitofp ; - ; AVX2: uitofpv8i16v8double + ; AVX2-LABEL: uitofpv8i16v8double ; AVX2: cost of 20 {{.*}} uitofp ; - ; AVX512F: uitofpv8i16v8double - ; AVX512F: cost of 22 {{.*}} 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: uitofpv16i16v16double + ; SSE2-LABEL: uitofpv16i16v16double ; SSE2: cost of 160 {{.*}} uitofp ; - ; AVX1: uitofpv16i16v16double + ; AVX1-LABEL: uitofpv16i16v16double ; AVX1: cost of 40 {{.*}} uitofp ; - ; AVX2: uitofpv16i16v16double + ; AVX2-LABEL: uitofpv16i16v16double ; AVX2: cost of 40 {{.*}} uitofp ; - ; AVX512F: uitofpv16i16v16double + ; AVX512F-LABEL: uitofpv16i16v16double ; AVX512F: cost of 44 {{.*}} 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: uitofpv32i16v32double + ; SSE2-LABEL: uitofpv32i16v32double ; SSE2: cost of 320 {{.*}} uitofp ; - ; AVX1: uitofpv32i16v32double + ; AVX1-LABEL: uitofpv32i16v32double ; AVX1: cost of 80 {{.*}} uitofp ; - ; AVX2: uitofpv32i16v32double + ; AVX2-LABEL: uitofpv32i16v32double ; AVX2: cost of 80 {{.*}} uitofp ; - ; AVX512F: uitofpv32i16v32double + ; AVX512F-LABEL: uitofpv32i16v32double ; AVX512F: cost of 88 {{.*}} 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: uitofpv2i32v2double + ; SSE2-LABEL: uitofpv2i32v2double ; SSE2: cost of 20 {{.*}} uitofp ; - ; AVX1: uitofpv2i32v2double + ; AVX1-LABEL: uitofpv2i32v2double ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i32v2double + ; AVX2-LABEL: uitofpv2i32v2double ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i32v2double + ; AVX512F-LABEL: uitofpv2i32v2double ; AVX512F: cost of 4 {{.*}} 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: uitofpv4i32v4double + ; SSE2-LABEL: uitofpv4i32v4double ; SSE2: cost of 40 {{.*}} uitofp ; - ; AVX1: uitofpv4i32v4double + ; AVX1-LABEL: uitofpv4i32v4double ; AVX1: cost of 6 {{.*}} uitofp ; - ; AVX2: uitofpv4i32v4double + ; AVX2-LABEL: uitofpv4i32v4double ; AVX2: cost of 6 {{.*}} uitofp ; - ; AVX512F: uitofpv4i32v4double - ; AVX512F: 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: uitofpv8i32v8double + ; SSE2-LABEL: uitofpv8i32v8double ; SSE2: cost of 80 {{.*}} uitofp ; - ; AVX1: uitofpv8i32v8double + ; AVX1-LABEL: uitofpv8i32v8double ; AVX1: cost of 20 {{.*}} uitofp ; - ; AVX2: uitofpv8i32v8double + ; AVX2-LABEL: uitofpv8i32v8double ; AVX2: cost of 20 {{.*}} uitofp ; - ; AVX512F: uitofpv8i32v8double - ; AVX512F: cost of 22 {{.*}} 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: uitofpv16i32v16double + ; SSE2-LABEL: uitofpv16i32v16double ; SSE2: cost of 160 {{.*}} uitofp ; - ; AVX1: uitofpv16i32v16double + ; AVX1-LABEL: uitofpv16i32v16double ; AVX1: cost of 40 {{.*}} uitofp ; - ; AVX2: uitofpv16i32v16double + ; AVX2-LABEL: uitofpv16i32v16double ; AVX2: cost of 40 {{.*}} uitofp ; - ; AVX512F: uitofpv16i32v16double + ; AVX512F-LABEL: uitofpv16i32v16double ; AVX512F: cost of 44 {{.*}} 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: uitofpv32i32v32double + ; SSE2-LABEL: uitofpv32i32v32double ; SSE2: cost of 320 {{.*}} uitofp ; - ; AVX1: uitofpv32i32v32double + ; AVX1-LABEL: uitofpv32i32v32double ; AVX1: cost of 80 {{.*}} uitofp ; - ; AVX2: uitofpv32i32v32double + ; AVX2-LABEL: uitofpv32i32v32double ; AVX2: cost of 80 {{.*}} uitofp ; - ; AVX512F: uitofpv32i32v32double + ; AVX512F-LABEL: uitofpv32i32v32double ; AVX512F: cost of 88 {{.*}} 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: uitofpv2i64v2double + ; SSE2-LABEL: uitofpv2i64v2double ; SSE2: cost of 20 {{.*}} uitofp ; - ; AVX1: uitofpv2i64v2double + ; AVX1-LABEL: uitofpv2i64v2double ; AVX1: cost of 20 {{.*}} uitofp ; - ; AVX2: uitofpv2i64v2double + ; AVX2-LABEL: uitofpv2i64v2double ; AVX2: cost of 20 {{.*}} uitofp ; - ; AVX512F: uitofpv2i64v2double - ; AVX512F: cost of 20 {{.*}} uitofp + ; AVX512F-LABEL: uitofpv2i64v2double + ; AVX512F: cost of 5 {{.*}} uitofp + ; + ; AVX512DQ: 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: uitofpv4i64v4double + ; SSE2-LABEL: uitofpv4i64v4double ; SSE2: cost of 40 {{.*}} uitofp ; - ; AVX1: uitofpv4i64v4double + ; AVX1-LABEL: uitofpv4i64v4double ; AVX1: cost of 40 {{.*}} uitofp ; - ; AVX2: uitofpv4i64v4double + ; AVX2-LABEL: uitofpv4i64v4double ; AVX2: cost of 40 {{.*}} uitofp ; - ; AVX512F: uitofpv4i64v4double - ; AVX512F: cost of 40 {{.*}} uitofp + ; AVX512F-LABEL: uitofpv4i64v4double + ; AVX512F: cost of 12 {{.*}} uitofp + ; + ; AVX512DQ: 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: uitofpv8i64v8double + ; SSE2-LABEL: uitofpv8i64v8double ; SSE2: cost of 80 {{.*}} uitofp ; - ; AVX1: uitofpv8i64v8double + ; AVX1-LABEL: uitofpv8i64v8double ; AVX1: cost of 20 {{.*}} uitofp ; - ; AVX2: uitofpv8i64v8double + ; AVX2-LABEL: uitofpv8i64v8double ; AVX2: cost of 20 {{.*}} uitofp ; - ; AVX512F: uitofpv8i64v8double - ; AVX512F: cost of 22 {{.*}} uitofp + ; AVX512F-LABEL: uitofpv8i64v8double + ; AVX512F: cost of 26 {{.*}} uitofp + ; + ; AVX512DQ: 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: uitofpv16i64v16double + ; SSE2-LABEL: uitofpv16i64v16double ; SSE2: cost of 160 {{.*}} uitofp ; - ; AVX1: uitofpv16i64v16double + ; AVX1-LABEL: uitofpv16i64v16double ; AVX1: cost of 40 {{.*}} uitofp ; - ; AVX2: uitofpv16i64v16double + ; AVX2-LABEL: uitofpv16i64v16double ; AVX2: cost of 40 {{.*}} uitofp ; - ; AVX512F: uitofpv16i64v16double + ; AVX512F-LABEL: uitofpv16i64v16double ; AVX512F: cost of 44 {{.*}} uitofp + ; + ; AVX512DQ: uitofpv16i64v16double + ; AVX512DQ: cost of 44 {{.*}} 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: uitofpv32i64v32double + ; SSE2-LABEL: uitofpv32i64v32double ; SSE2: cost of 320 {{.*}} uitofp ; - ; AVX1: uitofpv32i64v32double + ; AVX1-LABEL: uitofpv32i64v32double ; AVX1: cost of 80 {{.*}} uitofp ; - ; AVX2: uitofpv32i64v32double + ; AVX2-LABEL: uitofpv32i64v32double ; AVX2: cost of 80 {{.*}} uitofp ; - ; AVX512F: uitofpv32i64v32double + ; AVX512F-LABEL: uitofpv32i64v32double ; AVX512F: cost of 88 {{.*}} uitofp + ; + ; AVX512DQ: uitofpv32i64v32double + ; AVX512DQ: cost of 88 {{.*}} 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: uitofpv2i8v2float + ; SSE2-LABEL: uitofpv2i8v2float ; SSE2: cost of 15 {{.*}} uitofp ; - ; AVX1: uitofpv2i8v2float + ; AVX1-LABEL: uitofpv2i8v2float ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i8v2float + ; AVX2-LABEL: uitofpv2i8v2float ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i8v2float + ; 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: uitofpv4i8v4float + ; SSE2-LABEL: uitofpv4i8v4float ; SSE2: cost of 8 {{.*}} uitofp ; - ; AVX1: uitofpv4i8v4float + ; AVX1-LABEL: uitofpv4i8v4float ; AVX1: cost of 2 {{.*}} uitofp ; - ; AVX2: uitofpv4i8v4float + ; AVX2-LABEL: uitofpv4i8v4float ; AVX2: cost of 2 {{.*}} uitofp ; - ; AVX512F: uitofpv4i8v4float + ; 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: uitofpv8i8v8float + ; SSE2-LABEL: uitofpv8i8v8float ; SSE2: cost of 15 {{.*}} uitofp ; - ; AVX1: uitofpv8i8v8float + ; AVX1-LABEL: uitofpv8i8v8float ; AVX1: cost of 5 {{.*}} uitofp ; - ; AVX2: uitofpv8i8v8float + ; AVX2-LABEL: uitofpv8i8v8float ; AVX2: cost of 5 {{.*}} uitofp ; - ; AVX512F: uitofpv8i8v8float - ; AVX512F: 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: uitofpv16i8v16float + ; SSE2-LABEL: uitofpv16i8v16float ; SSE2: cost of 8 {{.*}} uitofp ; - ; AVX1: uitofpv16i8v16float + ; AVX1-LABEL: uitofpv16i8v16float ; AVX1: cost of 44 {{.*}} uitofp ; - ; AVX2: uitofpv16i8v16float + ; AVX2-LABEL: uitofpv16i8v16float ; AVX2: cost of 44 {{.*}} uitofp ; - ; AVX512F: uitofpv16i8v16float - ; AVX512F: cost of 46 {{.*}} 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: uitofpv32i8v32float + ; SSE2-LABEL: uitofpv32i8v32float ; SSE2: cost of 16 {{.*}} uitofp ; - ; AVX1: uitofpv32i8v32float + ; AVX1-LABEL: uitofpv32i8v32float ; AVX1: cost of 88 {{.*}} uitofp ; - ; AVX2: uitofpv32i8v32float + ; AVX2-LABEL: uitofpv32i8v32float ; AVX2: cost of 88 {{.*}} uitofp ; - ; AVX512F: uitofpv32i8v32float + ; AVX512F-LABEL: uitofpv32i8v32float ; AVX512F: cost of 92 {{.*}} 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: uitofpv2i16v2float + ; SSE2-LABEL: uitofpv2i16v2float ; SSE2: cost of 15 {{.*}} uitofp ; - ; AVX1: uitofpv2i16v2float + ; AVX1-LABEL: uitofpv2i16v2float ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i16v2float + ; AVX2-LABEL: uitofpv2i16v2float ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i16v2float + ; 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: uitofpv4i16v4float + ; SSE2-LABEL: uitofpv4i16v4float ; SSE2: cost of 8 {{.*}} uitofp ; - ; AVX1: uitofpv4i16v4float + ; AVX1-LABEL: uitofpv4i16v4float ; AVX1: cost of 2 {{.*}} uitofp ; - ; AVX2: uitofpv4i16v4float + ; AVX2-LABEL: uitofpv4i16v4float ; AVX2: cost of 2 {{.*}} uitofp ; - ; AVX512F: uitofpv4i16v4float + ; 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: uitofpv8i16v8float + ; SSE2-LABEL: uitofpv8i16v8float ; SSE2: cost of 15 {{.*}} uitofp ; - ; AVX1: uitofpv8i16v8float + ; AVX1-LABEL: uitofpv8i16v8float ; AVX1: cost of 5 {{.*}} uitofp ; - ; AVX2: uitofpv8i16v8float + ; AVX2-LABEL: uitofpv8i16v8float ; AVX2: cost of 5 {{.*}} uitofp ; - ; AVX512F: uitofpv8i16v8float - ; AVX512F: 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: uitofpv16i16v16float + ; SSE2-LABEL: uitofpv16i16v16float ; SSE2: cost of 30 {{.*}} uitofp ; - ; AVX1: uitofpv16i16v16float + ; AVX1-LABEL: uitofpv16i16v16float ; AVX1: cost of 44 {{.*}} uitofp ; - ; AVX2: uitofpv16i16v16float + ; AVX2-LABEL: uitofpv16i16v16float ; AVX2: cost of 44 {{.*}} uitofp ; - ; AVX512F: uitofpv16i16v16float - ; AVX512F: cost of 46 {{.*}} 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: uitofpv32i16v32float + ; SSE2-LABEL: uitofpv32i16v32float ; SSE2: cost of 60 {{.*}} uitofp ; - ; AVX1: uitofpv32i16v32float + ; AVX1-LABEL: uitofpv32i16v32float ; AVX1: cost of 88 {{.*}} uitofp ; - ; AVX2: uitofpv32i16v32float + ; AVX2-LABEL: uitofpv32i16v32float ; AVX2: cost of 88 {{.*}} uitofp ; - ; AVX512F: uitofpv32i16v32float + ; AVX512F-LABEL: uitofpv32i16v32float ; AVX512F: cost of 92 {{.*}} 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: uitofpv2i32v2float + ; SSE2-LABEL: uitofpv2i32v2float ; SSE2: cost of 15 {{.*}} uitofp ; - ; AVX1: uitofpv2i32v2float + ; AVX1-LABEL: uitofpv2i32v2float ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i32v2float + ; AVX2-LABEL: uitofpv2i32v2float ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i32v2float - ; AVX512F: 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: uitofpv4i32v4float + ; SSE2-LABEL: uitofpv4i32v4float ; SSE2: cost of 8 {{.*}} uitofp ; - ; AVX1: uitofpv4i32v4float + ; AVX1-LABEL: uitofpv4i32v4float ; AVX1: cost of 6 {{.*}} uitofp ; - ; AVX2: uitofpv4i32v4float + ; AVX2-LABEL: uitofpv4i32v4float ; AVX2: cost of 6 {{.*}} uitofp ; - ; AVX512F: uitofpv4i32v4float - ; AVX512F: 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: uitofpv8i32v8float + ; SSE2-LABEL: uitofpv8i32v8float ; SSE2: cost of 16 {{.*}} uitofp ; - ; AVX1: uitofpv8i32v8float + ; AVX1-LABEL: uitofpv8i32v8float ; AVX1: cost of 9 {{.*}} uitofp ; - ; AVX2: uitofpv8i32v8float + ; AVX2-LABEL: uitofpv8i32v8float ; AVX2: cost of 8 {{.*}} uitofp ; - ; AVX512F: uitofpv8i32v8float - ; AVX512F: 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: uitofpv16i32v16float + ; SSE2-LABEL: uitofpv16i32v16float ; SSE2: cost of 32 {{.*}} uitofp ; - ; AVX1: uitofpv16i32v16float + ; AVX1-LABEL: uitofpv16i32v16float ; AVX1: cost of 44 {{.*}} uitofp ; - ; AVX2: uitofpv16i32v16float + ; AVX2-LABEL: uitofpv16i32v16float ; AVX2: cost of 44 {{.*}} uitofp ; - ; AVX512F: uitofpv16i32v16float - ; AVX512F: cost of 46 {{.*}} 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: uitofpv32i32v32float + ; SSE2-LABEL: uitofpv32i32v32float ; SSE2: cost of 64 {{.*}} uitofp ; - ; AVX1: uitofpv32i32v32float + ; AVX1-LABEL: uitofpv32i32v32float ; AVX1: cost of 88 {{.*}} uitofp ; - ; AVX2: uitofpv32i32v32float + ; AVX2-LABEL: uitofpv32i32v32float ; AVX2: cost of 88 {{.*}} uitofp ; - ; AVX512F: uitofpv32i32v32float + ; AVX512F-LABEL: uitofpv32i32v32float ; AVX512F: cost of 92 {{.*}} 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: uitofpv2i64v2float + ; SSE2-LABEL: uitofpv2i64v2float ; SSE2: cost of 15 {{.*}} uitofp ; - ; AVX1: uitofpv2i64v2float + ; AVX1-LABEL: uitofpv2i64v2float ; AVX1: cost of 4 {{.*}} uitofp ; - ; AVX2: uitofpv2i64v2float + ; AVX2-LABEL: uitofpv2i64v2float ; AVX2: cost of 4 {{.*}} uitofp ; - ; AVX512F: uitofpv2i64v2float + ; AVX512F-LABEL: uitofpv2i64v2float ; AVX512F: cost of 4 {{.*}} 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: uitofpv4i64v4float + ; SSE2-LABEL: uitofpv4i64v4float ; SSE2: cost of 30 {{.*}} uitofp ; - ; AVX1: uitofpv4i64v4float + ; AVX1-LABEL: uitofpv4i64v4float ; AVX1: cost of 10 {{.*}} uitofp ; - ; AVX2: uitofpv4i64v4float + ; AVX2-LABEL: uitofpv4i64v4float ; AVX2: cost of 10 {{.*}} uitofp ; - ; AVX512F: uitofpv4i64v4float + ; 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: uitofpv8i64v8float + ; SSE2-LABEL: uitofpv8i64v8float ; SSE2: cost of 60 {{.*}} uitofp ; - ; AVX1: uitofpv8i64v8float + ; AVX1-LABEL: uitofpv8i64v8float ; AVX1: cost of 22 {{.*}} uitofp ; - ; AVX2: uitofpv8i64v8float + ; AVX2-LABEL: uitofpv8i64v8float ; AVX2: cost of 22 {{.*}} uitofp ; - ; AVX512F: uitofpv8i64v8float + ; AVX512F-LABEL: uitofpv8i64v8float ; AVX512F: cost of 22 {{.*}} 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: uitofpv16i64v16float + ; SSE2-LABEL: uitofpv16i64v16float ; SSE2: cost of 120 {{.*}} uitofp ; - ; AVX1: uitofpv16i64v16float + ; AVX1-LABEL: uitofpv16i64v16float ; AVX1: cost of 44 {{.*}} uitofp ; - ; AVX2: uitofpv16i64v16float + ; AVX2-LABEL: uitofpv16i64v16float ; AVX2: cost of 44 {{.*}} uitofp ; - ; AVX512F: uitofpv16i64v16float + ; AVX512F-LABEL: uitofpv16i64v16float ; AVX512F: cost of 46 {{.*}} 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: uitofpv32i64v32float + ; SSE2-LABEL: uitofpv32i64v32float ; SSE2: cost of 240 {{.*}} uitofp ; - ; AVX1: uitofpv32i64v32float + ; AVX1-LABEL: uitofpv32i64v32float ; AVX1: cost of 88 {{.*}} uitofp ; - ; AVX2: uitofpv32i64v32float + ; AVX2-LABEL: uitofpv32i64v32float ; AVX2: cost of 88 {{.*}} uitofp ; - ; AVX512F: uitofpv32i64v32float + ; AVX512F-LABEL: uitofpv32i64v32float ; AVX512F: cost of 92 {{.*}} 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 +}