LLVM 22.0.0git
|
#include "SPIRV.h"
#include "SPIRVSubtarget.h"
#include "SPIRVUtils.h"
#include "llvm/ADT/PostOrderIterator.h"
#include "llvm/CodeGen/GlobalISel/CSEInfo.h"
#include "llvm/CodeGen/GlobalISel/GISelValueTracking.h"
#include "llvm/IR/Attributes.h"
#include "llvm/IR/Constants.h"
#include "llvm/IR/IntrinsicsSPIRV.h"
Go to the source code of this file.
Namespaces | |
namespace | llvm |
This is an optimization pass for GlobalISel generic memory operations. |
Macros | |
#define | DEBUG_TYPE "spirv-prelegalizer" |
#define DEBUG_TYPE "spirv-prelegalizer" |
Definition at line 25 of file SPIRVPreLegalizer.cpp.
|
static |
Definition at line 45 of file SPIRVPreLegalizer.cpp.
References llvm::SPIRVIRMapping::add(), llvm::SPIRVGlobalRegistry::addGlobalObject(), llvm::MachineInstr::addOperand(), assert(), llvm::cast(), llvm::MachineOperand::CreateReg(), llvm::dyn_cast(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::SPIRVIRMapping::find(), llvm::MachineFunction::front(), llvm::MachineBasicBlock::getFirstNonPHI(), llvm::SPIRVSubtarget::getInstrInfo(), llvm::MachineInstr::getOpcode(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), llvm::MachineFunction::getRegInfo(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), MBB, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, and llvm::MachineInstr::setDesc().
|
static |
Definition at line 176 of file SPIRVPreLegalizer.cpp.
References llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::MachineIRBuilder::buildInstr(), llvm::MachineIRBuilder::getMRI(), llvm::SPIRVGlobalRegistry::getRegClass(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::SPIRVGlobalRegistry::isBitcastCompatible(), MRI, and llvm::report_fatal_error().
Referenced by selectOpBitcasts().
|
static |
Definition at line 914 of file SPIRVPreLegalizer.cpp.
References llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), MBB, MI, and llvm::SmallVectorTemplateBase< T, bool >::push_back().
|
static |
Definition at line 700 of file SPIRVPreLegalizer.cpp.
References AbstractManglingParser< Derived, Alloc >::Ops, F, llvm::MachineOperand::getImm(), llvm::MachineOperand::getReg(), llvm::MachineOperand::isDef(), llvm::MachineOperand::isImm(), llvm::MachineOperand::isMetadata(), llvm::MachineOperand::isReg(), MI, and llvm::InlineAsm::MIOp_FirstOperand.
Referenced by insertInlineAsmProcess().
|
static |
Definition at line 831 of file SPIRVPreLegalizer.cpp.
References F.
Referenced by insertSpirvDecorations().
|
static |
Definition at line 162 of file SPIRVPreLegalizer.cpp.
References I, llvm::isSpvIntrinsic(), MRI, Reg, and UseMI.
Referenced by insertBitcasts().
|
static |
Definition at line 138 of file SPIRVPreLegalizer.cpp.
References llvm::buildOpName(), llvm::cast(), llvm::MDNode::getOperand(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), MBB, MI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().
|
static |
Definition at line 492 of file SPIRVPreLegalizer.cpp.
References llvm::SPIRVIRMapping::add(), llvm::addressSpaceToStorageClass(), llvm::SPIRVGlobalRegistry::addValueAttrs(), assert(), llvm::cast(), E(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::SPIRVIRMapping::find(), llvm::VectorType::get(), llvm::MachineOperand::getCImm(), llvm::MachineOperand::getFPImm(), llvm::getMDOperandAsType(), llvm::MachineOperand::getMetadata(), llvm::MachineIRBuilder::getMF(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MDNode::getOperand(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(), llvm::MachineOperand::getReg(), llvm::MachineFunction::getRegInfo(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::Value::getType(), llvm::SPIRVGlobalRegistry::getTypeForSPIRVType(), llvm::getVRegDef(), I, llvm::insertAssignInstr(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), llvm_unreachable, MBB, MI, MRI, llvm::post_order(), propagateSPIRVType(), llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, llvm::MachineIRBuilder::setInsertPt(), UseMI, widenCImmType(), and widenScalarType().
|
static |
Definition at line 232 of file SPIRVPreLegalizer.cpp.
References llvm::addressSpaceToStorageClass(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::MachineIRBuilder::buildBitcast(), findAssignTypeInstr(), llvm::getMDOperandAsType(), llvm::MachineIRBuilder::getMF(), llvm::MachineIRBuilder::getMRI(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVPointerType(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), MBB, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().
|
static |
Definition at line 809 of file SPIRVPreLegalizer.cpp.
References insertInlineAsmProcess(), llvm::isSpvIntrinsic(), MBB, MI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::report_fatal_error(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
|
static |
Definition at line 729 of file SPIRVPreLegalizer.cpp.
References llvm::SPIRVIRMapping::add(), llvm::MachineInstrBuilder::addDef(), llvm::MachineInstrBuilder::addImm(), llvm::addStringImm(), llvm::MachineInstrBuilder::addUse(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::MachineIRBuilder::buildInstr(), llvm::cast(), collectInlineAsmInstrOperands(), llvm::InlineAsm::Extra_HasSideEffects, llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::getMDOperandAsType(), llvm::SPIRVGlobalRegistry::getOrCreateOpTypeFunctionWithArgs(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), llvm::MachineFunction::getRegInfo(), llvm::SPIRVGlobalRegistry::getSPIRVTypeID(), llvm::Type::getVoidTy(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), llvm::Register::isValid(), MI, llvm::InlineAsm::MIOp_AsmString, llvm::InlineAsm::MIOp_ExtraInfo, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), llvm::LLT::scalar(), llvm::MachineIRBuilder::setInsertPt(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
Referenced by insertInlineAsm().
|
static |
Definition at line 840 of file SPIRVPreLegalizer.cpp.
References llvm::SPIRVGlobalRegistry::buildMemAliasingOpDecorate(), llvm::buildOpDecorate(), llvm::buildOpSpirvDecorations(), convertFloatToSPIRVWord(), llvm::APFloat::convertToFloat(), llvm::mdconst::dyn_extract(), llvm::ConstantFP::getValueAPF(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::isSpvIntrinsic(), MBB, MI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().
|
static |
Definition at line 1035 of file SPIRVPreLegalizer.cpp.
References E(), llvm::isSpvIntrinsic(), and MBB.
Referenced by removeImplicitFallthroughs().
|
static |
Definition at line 933 of file SPIRVPreLegalizer.cpp.
References assert(), llvm::MachineOperand::CreateMBB(), llvm::Constant::destroyConstant(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::end(), llvm::DenseMapBase< DerivedT, KeyT, ValueT, KeyInfoT, BucketT >::find(), llvm::BlockAddress::getBasicBlock(), llvm::MachineOperand::getBlockAddress(), llvm::Function::getContext(), llvm::MachineFunction::getFunction(), llvm::Type::getInt32Ty(), llvm::ConstantExpr::getIntToPtr(), llvm::MachineInstr::getOpcode(), llvm::MachineInstr::getOperand(), llvm::MachineFunction::getRegInfo(), llvm::Value::getType(), llvm::SmallPtrSetImpl< PtrType >::insert(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), llvm::MachineOperand::isBlockAddress(), llvm::isSpvIntrinsic(), MBB, MI, MRI, llvm::Next, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, llvm::Value::replaceAllUsesWith(), llvm::report_fatal_error(), and llvm::SmallVectorTemplateCommon< T, typename >::size().
|
static |
Definition at line 689 of file SPIRVPreLegalizer.cpp.
References llvm::MachineFunction::getRegInfo(), llvm::isTypeFoldingSupported(), MBB, MI, MRI, and llvm::processInstr().
|
static |
Definition at line 881 of file SPIRVPreLegalizer.cpp.
References assert(), llvm::MachineOperand::CreateCImm(), llvm::MachineOperand::getCImm(), llvm::getDefInstrMaybeConstant(), llvm::MachineInstr::getOperand(), llvm::MachineFunction::getRegInfo(), llvm::isSpvIntrinsic(), MBB, MI, MRI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), Reg, and llvm::SmallVectorTemplateCommon< T, typename >::size().
|
static |
Definition at line 292 of file SPIRVPreLegalizer.cpp.
References llvm::addressSpaceToStorageClass(), assert(), llvm::SPIRVGlobalRegistry::assignSPIRVTypeToVReg(), llvm::SPIRVGlobalRegistry::changePointerStorageClass(), llvm::TypedPointerType::get(), llvm::LLT::getAddressSpace(), llvm::SPIRVGlobalRegistry::getDeducedGlobalValueType(), llvm::MachineIRBuilder::getMF(), llvm::MachineInstr::getOpcode(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVIntegerType(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVType(), llvm::SPIRVGlobalRegistry::getOrCreateSPIRVVectorType(), llvm::SPIRVGlobalRegistry::getPointerStorageClass(), llvm::SPIRVGlobalRegistry::getRegClass(), llvm::SPIRVGlobalRegistry::getScalarOrVectorBitWidth(), llvm::SPIRVGlobalRegistry::getScalarOrVectorComponentCount(), llvm::SPIRVGlobalRegistry::getSPIRVTypeForVReg(), llvm::Global, llvm::LLT::isPointer(), MI, MRI, propagateSPIRVType(), Reg, llvm::MachineIRBuilder::setInsertPt(), llvm::storageClassToAddressSpace(), and llvm::toTypedPointer().
Referenced by generateAssignInstrs(), and propagateSPIRVType().
|
static |
Definition at line 1054 of file SPIRVPreLegalizer.cpp.
References assert(), llvm::MachineIRBuilder::buildBr(), isImplicitFallthrough(), MBB, and llvm::MachineIRBuilder::setInsertPt().
|
static |
Definition at line 213 of file SPIRVPreLegalizer.cpp.
References buildOpBitcast(), llvm::SPIRVGlobalRegistry::invalidateMachineInstr(), MBB, MI, llvm::SmallVectorTemplateBase< T, bool >::push_back(), and llvm::MachineIRBuilder::setInsertPt().
|
static |
Definition at line 409 of file SPIRVPreLegalizer.cpp.
References MBB, and llvm::MachineIRBuilder::setInsertPt().
Referenced by llvm::insertAssignInstr().
Definition at line 382 of file SPIRVPreLegalizer.cpp.
References llvm::BitWidth, and llvm::Log2_32_Ceil().
Referenced by widenCImmType(), and widenScalarType().
|
static |
Definition at line 398 of file SPIRVPreLegalizer.cpp.
References llvm::ConstantInt::getBitWidth(), llvm::MachineOperand::getCImm(), llvm::Type::getContext(), llvm::Value::getType(), llvm::ConstantInt::getValue(), llvm::MachineOperand::setCImm(), widenBitWidthToNextPow2(), and llvm::APInt::zextOrTrunc().
Referenced by generateAssignInstrs().
|
static |
Definition at line 388 of file SPIRVPreLegalizer.cpp.
References llvm::LLT::getScalarSizeInBits(), llvm::LLT::isScalar(), MRI, Reg, llvm::LLT::scalar(), and widenBitWidthToNextPow2().
Referenced by generateAssignInstrs().