#include "mlir/Conversion/GPUToLLVMSPV/GPUToLLVMSPVPass.h"
#include "../GPUCommon/GPUOpsLowering.h"
#include "mlir/Conversion/GPUCommon/AttrToSPIRVConverter.h"
#include "mlir/Conversion/GPUCommon/GPUCommonPass.h"
#include "mlir/Conversion/LLVMCommon/ConversionTarget.h"
#include "mlir/Conversion/LLVMCommon/LoweringOptions.h"
#include "mlir/Conversion/LLVMCommon/Pattern.h"
#include "mlir/Conversion/LLVMCommon/TypeConverter.h"
#include "mlir/Conversion/SPIRVCommon/AttrToLLVMConverter.h"
#include "mlir/Dialect/GPU/IR/GPUDialect.h"
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
#include "mlir/Dialect/SPIRV/IR/SPIRVDialect.h"
#include "mlir/Dialect/SPIRV/IR/SPIRVEnums.h"
#include "mlir/Dialect/SPIRV/IR/TargetAndABI.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/Matchers.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/IR/SymbolTable.h"
#include "mlir/Pass/Pass.h"
#include "mlir/Support/LLVM.h"
#include "mlir/Transforms/DialectConversion.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/FormatVariadic.h"
#define DEBUG_TYPE …
usingnamespacemlir;
namespace mlir {
#define GEN_PASS_DEF_CONVERTGPUOPSTOLLVMSPVOPS
#include "mlir/Conversion/Passes.h.inc"
}
static LLVM::LLVMFuncOp lookupOrCreateSPIRVFn(Operation *symbolTable,
StringRef name,
ArrayRef<Type> paramTypes,
Type resultType, bool isMemNone,
bool isConvergent) { … }
static LLVM::CallOp createSPIRVBuiltinCall(Location loc,
ConversionPatternRewriter &rewriter,
LLVM::LLVMFuncOp func,
ValueRange args) { … }
namespace {
struct GPUBarrierConversion final : ConvertOpToLLVMPattern<gpu::BarrierOp> { … };
struct LaunchConfigConversion : ConvertToLLVMPattern { … };
template <typename SourceOp>
struct LaunchConfigOpConversion final : LaunchConfigConversion { … };
template <>
StringRef LaunchConfigOpConversion<gpu::BlockIdOp>::getFuncName() { … }
template <>
StringRef LaunchConfigOpConversion<gpu::GridDimOp>::getFuncName() { … }
template <>
StringRef LaunchConfigOpConversion<gpu::BlockDimOp>::getFuncName() { … }
template <>
StringRef LaunchConfigOpConversion<gpu::ThreadIdOp>::getFuncName() { … }
template <>
StringRef LaunchConfigOpConversion<gpu::GlobalIdOp>::getFuncName() { … }
struct GPUShuffleConversion final : ConvertOpToLLVMPattern<gpu::ShuffleOp> { … };
class MemorySpaceToOpenCLMemorySpaceConverter final : public TypeConverter { … };
template <typename SubgroupOp>
struct GPUSubgroupOpConversion final : ConvertOpToLLVMPattern<SubgroupOp> { … };
struct GPUToLLVMSPVConversionPass final
: impl::ConvertGpuOpsToLLVMSPVOpsBase<GPUToLLVMSPVConversionPass> { … };
}
namespace mlir {
namespace {
static unsigned
gpuAddressSpaceToOCLAddressSpace(gpu::AddressSpace addressSpace) { … }
}
void populateGpuToLLVMSPVConversionPatterns(
const LLVMTypeConverter &typeConverter, RewritePatternSet &patterns) { … }
void populateGpuMemorySpaceAttributeConversions(TypeConverter &typeConverter) { … }
}