From 700bba297ba8a99c5dfd31ceaa894fbd1496a03e Mon Sep 17 00:00:00 2001 From: Matt Arsenault Date: Mon, 10 Feb 2014 19:57:42 +0000 Subject: [PATCH] R600: Implement isTruncateFree Truncation is just accessing a subregister for any multiple of the register size, so it's free. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@201107 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/R600/AMDGPUISelLowering.cpp | 5 +++++ lib/Target/R600/AMDGPUISelLowering.h | 1 + 2 files changed, 6 insertions(+) diff --git a/lib/Target/R600/AMDGPUISelLowering.cpp b/lib/Target/R600/AMDGPUISelLowering.cpp index 47f88c3f0c6..1df02d3f987 100644 --- a/lib/Target/R600/AMDGPUISelLowering.cpp +++ b/lib/Target/R600/AMDGPUISelLowering.cpp @@ -232,6 +232,11 @@ bool AMDGPUTargetLowering::isFNegFree(EVT VT) const { return VT == MVT::f32; } +bool AMDGPUTargetLowering::isTruncateFree(EVT, EVT Dest) const { + // Truncate is just accessing a subregister. + return (Dest.getSizeInBits() % 32 == 0); +} + //===---------------------------------------------------------------------===// // TargetLowering Callbacks //===---------------------------------------------------------------------===// diff --git a/lib/Target/R600/AMDGPUISelLowering.h b/lib/Target/R600/AMDGPUISelLowering.h index 9782b5e755a..311959e682b 100644 --- a/lib/Target/R600/AMDGPUISelLowering.h +++ b/lib/Target/R600/AMDGPUISelLowering.h @@ -81,6 +81,7 @@ public: virtual bool isFAbsFree(EVT VT) const; virtual bool isFNegFree(EVT VT) const; + virtual bool isTruncateFree(EVT Src, EVT Dest) const LLVM_OVERRIDE; virtual MVT getVectorIdxTy() const; virtual bool isLoadBitCastBeneficial(EVT, EVT) const LLVM_OVERRIDE; virtual SDValue LowerReturn(SDValue Chain, CallingConv::ID CallConv,