LLVM 17.0.0git
|
#include "AMDGPUInstrInfo.h"
#include "AMDGPUTargetTransformInfo.h"
#include "GCNSubtarget.h"
#include "llvm/ADT/FloatingPointMode.h"
#include "llvm/IR/IntrinsicsAMDGPU.h"
#include "llvm/Transforms/InstCombine/InstCombiner.h"
#include <optional>
#include "InstCombineTables.inc"
Go to the source code of this file.
Macros | |
#define | DEBUG_TYPE "AMDGPUtti" |
#define | GET_AMDGPUImageDMaskIntrinsicTable_IMPL |
Functions | |
static APFloat | fmed3AMDGCN (const APFloat &Src0, const APFloat &Src1, const APFloat &Src2) |
static bool | canSafelyConvertTo16Bit (Value &V, bool IsFloat) |
static Value * | convertTo16Bit (Value &V, InstCombiner::BuilderTy &Builder) |
static std::optional< Instruction * > | modifyIntrinsicCall (IntrinsicInst &OldIntr, Instruction &InstToReplace, unsigned NewIntr, InstCombiner &IC, std::function< void(SmallVectorImpl< Value * > &, SmallVectorImpl< Type * > &)> Func) |
Applies Func(OldIntr.Args, OldIntr.ArgTys), creates intrinsic call with modified arguments (based on OldIntr) and replaces InstToReplace with this newly created intrinsic call. | |
static std::optional< Instruction * > | simplifyAMDGCNImageIntrinsic (const GCNSubtarget *ST, const AMDGPU::ImageDimIntrinsicInfo *ImageDimIntr, IntrinsicInst &II, InstCombiner &IC) |
static bool | matchFPExtFromF16 (Value *Arg, Value *&FPExtSrc) |
Match an fpext from half to float, or a constant we can convert. | |
static Value * | simplifyAMDGCNMemoryIntrinsicDemanded (InstCombiner &IC, IntrinsicInst &II, APInt DemandedElts, int DMaskIdx=-1) |
Implement SimplifyDemandedVectorElts for amdgcn buffer and image intrinsics. | |
#define DEBUG_TYPE "AMDGPUtti" |
Definition at line 28 of file AMDGPUInstCombineIntrinsic.cpp.
#define GET_AMDGPUImageDMaskIntrinsicTable_IMPL |
Definition at line 36 of file AMDGPUInstCombineIntrinsic.cpp.
Definition at line 66 of file AMDGPUInstCombineIntrinsic.cpp.
References llvm::APFloat::convert(), llvm::APInt::getActiveBits(), llvm::Value::getType(), llvm::Type::isHalfTy(), llvm::Type::isIntegerTy(), llvm::PatternMatch::m_FPExt(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::m_ZExt(), and llvm::PatternMatch::match().
Referenced by simplifyAMDGCNImageIntrinsic().
|
static |
Definition at line 104 of file AMDGPUInstCombineIntrinsic.cpp.
References Builder, llvm::Type::getHalfTy(), llvm::Type::getInt16Ty(), llvm::Type::isFloatingPointTy(), llvm::Type::isIntegerTy(), and llvm_unreachable.
|
static |
Definition at line 45 of file AMDGPUInstCombineIntrinsic.cpp.
References assert(), llvm::APFloat::compare(), and llvm::maxnum().
Referenced by llvm::GCNTTIImpl::instCombineIntrinsic().
Match an fpext from half to float, or a constant we can convert.
Definition at line 360 of file AMDGPUInstCombineIntrinsic.cpp.
References Arg, llvm::APFloat::convert(), llvm::ConstantFP::get(), llvm::Type::getHalfTy(), llvm::Value::getType(), llvm::ConstantFP::getValueAPF(), llvm::APFloatBase::IEEEhalf(), llvm::Type::isHalfTy(), llvm::PatternMatch::m_ConstantFP(), llvm::PatternMatch::m_FPExt(), llvm::PatternMatch::m_OneUse(), llvm::PatternMatch::m_Value(), llvm::PatternMatch::match(), and llvm::APFloatBase::rmNearestTiesToEven.
Referenced by llvm::GCNTTIImpl::instCombineIntrinsic().
|
static |
Applies Func(OldIntr.Args, OldIntr.ArgTys), creates intrinsic call with modified arguments (based on OldIntr) and replaces InstToReplace with this newly created intrinsic call.
Definition at line 119 of file AMDGPUInstCombineIntrinsic.cpp.
References llvm::CallBase::args(), llvm::InstCombiner::Builder, llvm::Instruction::copyFastMathFlags(), llvm::Instruction::copyMetadata(), llvm::IRBuilderBase::CreateCall(), llvm::InstCombiner::eraseInstFromFunction(), llvm::CallBase::getCalledFunction(), llvm::Intrinsic::getDeclaration(), llvm::Intrinsic::getIntrinsicSignature(), llvm::Instruction::getModule(), llvm::Value::getType(), I, llvm::Type::isVoidTy(), llvm::InstCombiner::replaceInstUsesWith(), and llvm::Value::takeName().
Referenced by simplifyAMDGCNImageIntrinsic().
|
static |
Definition at line 155 of file AMDGPUInstCombineIntrinsic.cpp.
References assert(), llvm::AMDGPU::ImageDimIntrinsicInfo::BaseOpcode, llvm::AMDGPU::ImageDimIntrinsicInfo::BiasIndex, canSafelyConvertTo16Bit(), llvm::AMDGPU::ImageDimIntrinsicInfo::CoordStart, llvm::AMDGPU::ImageDimIntrinsicInfo::Dim, for(), llvm::Value::getContext(), llvm::Type::getHalfTy(), llvm::AMDGPU::getImageDimIntrinsicByBaseOpcode(), llvm::Type::getInt16Ty(), llvm::IntrinsicInst::getIntrinsicID(), llvm::AMDGPU::getMIMGBaseOpcodeInfo(), llvm::AMDGPU::getMIMGBiasMappingInfo(), llvm::AMDGPU::getMIMGLZMappingInfo(), llvm::AMDGPU::getMIMGMIPMappingInfo(), llvm::AMDGPU::getMIMGOffsetMappingInfo(), llvm::User::getOperand(), llvm::Type::getScalarType(), llvm::Value::getType(), llvm::AMDGPU::ImageDimIntrinsicInfo::GradientStart, llvm::AMDGPU::MIMGBaseOpcodeInfo::HasD16, llvm::Value::hasOneUse(), if(), llvm::AMDGPU::ImageDimIntrinsicInfo::Intr, llvm::Type::isFloatingPointTy(), llvm::Type::isHalfTy(), llvm::AMDGPU::ImageDimIntrinsicInfo::LodIndex, llvm::AMDGPU::ImageDimIntrinsicInfo::MipIndex, modifyIntrinsicCall(), llvm::AMDGPU::ImageDimIntrinsicInfo::NumBiasArgs, llvm::AMDGPU::ImageDimIntrinsicInfo::OffsetIndex, llvm::AMDGPU::MIMGBaseOpcodeInfo::Sampler, llvm::Instruction::user_back(), and llvm::AMDGPU::ImageDimIntrinsicInfo::VAddrEnd.
Referenced by llvm::GCNTTIImpl::instCombineIntrinsic().
|
static |
Implement SimplifyDemandedVectorElts for amdgcn buffer and image intrinsics.
Note: This only supports non-TFE/LWE image intrinsic calls; those have struct returns.
Definition at line 1052 of file AMDGPUInstCombineIntrinsic.cpp.
References llvm::CallBase::args(), llvm::InstCombiner::Builder, llvm::Instruction::copyMetadata(), llvm::APInt::countr_zero(), llvm::IRBuilderBase::CreateAdd(), llvm::IRBuilderBase::CreateCall(), llvm::IRBuilderBase::CreateInsertElement(), llvm::IRBuilderBase::CreateShuffleVector(), llvm::FixedVectorType::get(), llvm::UndefValue::get(), llvm::ConstantInt::get(), llvm::APInt::getActiveBits(), llvm::CallBase::getCalledFunction(), llvm::InstCombiner::getDataLayout(), llvm::Intrinsic::getDeclaration(), llvm::IntrinsicInst::getIntrinsicID(), llvm::Intrinsic::getIntrinsicSignature(), llvm::Instruction::getModule(), llvm::ConstantInt::getType(), llvm::Value::getType(), llvm::DataLayout::getTypeSizeInBits(), llvm::ConstantInt::getZExtValue(), llvm::APInt::isMask(), llvm::Offset, llvm::APInt::popcount(), llvm::popcount(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::CallBase::setArgOperand(), llvm::IRBuilderBase::SetInsertPoint(), and llvm::Value::takeName().
Referenced by llvm::GCNTTIImpl::simplifyDemandedVectorEltsIntrinsic().