From: Alban Bridonneau Date: Wed, 26 Jan 2022 13:33:38 +0000 (+0000) Subject: Implement correct cost for SVE bitcasts X-Git-Tag: upstream/15.0.7~19057 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=2feddb37b48ea55f0d586d2710b9bc17f607e3e1;p=platform%2Fupstream%2Fllvm.git Implement correct cost for SVE bitcasts We have some bitcasts which we know will be simplified, so their cost is zero. Reviewed By: david-arm, sdesmalen Differential Revision: https://reviews.llvm.org/D118019 --- diff --git a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp index 2df5f09..a4d666a 100644 --- a/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp +++ b/llvm/lib/Target/AArch64/AArch64TargetTransformInfo.cpp @@ -1590,6 +1590,15 @@ InstructionCost AArch64TTIImpl::getCastInstrCost(unsigned Opcode, Type *Dst, { ISD::FP_EXTEND, MVT::nxv4f64, MVT::nxv4f32, 2}, { ISD::FP_EXTEND, MVT::nxv8f64, MVT::nxv8f32, 6}, + // Bitcasts from float to integer + { ISD::BITCAST, MVT::nxv2f16, MVT::nxv2i16, 0 }, + { ISD::BITCAST, MVT::nxv4f16, MVT::nxv4i16, 0 }, + { ISD::BITCAST, MVT::nxv2f32, MVT::nxv2i32, 0 }, + + // Bitcasts from integer to float + { ISD::BITCAST, MVT::nxv2i16, MVT::nxv2f16, 0 }, + { ISD::BITCAST, MVT::nxv4i16, MVT::nxv4f16, 0 }, + { ISD::BITCAST, MVT::nxv2i32, MVT::nxv2f32, 0 }, }; if (const auto *Entry = ConvertCostTableLookup(ConversionTbl, ISD, diff --git a/llvm/test/Analysis/CostModel/AArch64/sve-bitcast.ll b/llvm/test/Analysis/CostModel/AArch64/sve-bitcast.ll index a0069e7..1e09a40 100644 --- a/llvm/test/Analysis/CostModel/AArch64/sve-bitcast.ll +++ b/llvm/test/Analysis/CostModel/AArch64/sve-bitcast.ll @@ -1,8 +1,61 @@ ; RUN: opt -mtriple=aarch64-linux-gnu -mattr=+sve -cost-model -analyze < %s | FileCheck %s -; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to +; Integer to float bitcasts + +define @test_nxv2f64( %a) { +; CHECK-LABEL: test_nxv2f64 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +} + +define @test_nxv2f16( %a) { +; CHECK-LABEL: test_nxv2f16 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +} + +define @test_nxv4f16( %a) { +; CHECK-LABEL: test_nxv4f16 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +} + +define @test_nxv2f32( %a) { +; CHECK-LABEL: test_nxv2f32 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +} -define @foo( %a, i32 %x) { +; Float to integer bitcasts + +define @test_nxv2i64( %a) { +; CHECK-LABEL: test_nxv2i64 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to %b = bitcast %a to ret %b } + +define @test_nxv2i16( %a) { +; CHECK-LABEL: test_nxv2i16 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +} + +define @test_nxv4i16( %a) { +; CHECK-LABEL: test_nxv4i16 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +} + +define @test_nxv2i32( %a) { +; CHECK-LABEL: test_nxv2i32 +; CHECK: Found an estimated cost of 0 for instruction: %b = bitcast %a to + %b = bitcast %a to + ret %b +}