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 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 27 of file AMDGPUInstCombineIntrinsic.cpp.
#define GET_AMDGPUImageDMaskIntrinsicTable_IMPL |
Definition at line 35 of file AMDGPUInstCombineIntrinsic.cpp.
Definition at line 65 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 103 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 44 of file AMDGPUInstCombineIntrinsic.cpp.
References assert(), llvm::APFloat::compare(), and llvm::maxnum().
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 118 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 154 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::Type::getInt16Ty(), llvm::IntrinsicInst::getIntrinsicID(), 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::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 1065 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(), llvm::Shuffle, and llvm::Value::takeName().
Referenced by llvm::GCNTTIImpl::simplifyDemandedVectorEltsIntrinsic().