mirror of
https://github.com/intel/llvm.git
synced 2026-02-04 20:00:11 +08:00
Add a function to get lowering patterns from GPU to NVVM.
This enables combining the patterns with other patterns into larger lowerings. PiperOrigin-RevId: 284979271
This commit is contained in:
committed by
A. Unique TensorFlower
parent
bae8a7a724
commit
b96f86daaf
@@ -26,6 +26,10 @@ class OwningRewritePatternList;
|
||||
class ModuleOp;
|
||||
template <typename OpT> class OpPassBase;
|
||||
|
||||
/// Collect a set of patterns to convert from the GPU dialect to NVVM.
|
||||
void populateGpuToNVVMConversionPatterns(LLVMTypeConverter &converter,
|
||||
OwningRewritePatternList &patterns);
|
||||
|
||||
/// Creates a pass that lowers GPU dialect operations to NVVM counterparts.
|
||||
std::unique_ptr<OpPassBase<ModuleOp>> createLowerGpuOpsToNVVMOpsPass();
|
||||
|
||||
|
||||
@@ -605,19 +605,7 @@ public:
|
||||
OwningRewritePatternList patterns;
|
||||
LLVMTypeConverter converter(m.getContext());
|
||||
populateStdToLLVMConversionPatterns(converter, patterns);
|
||||
populateWithGenerated(&getContext(), &patterns);
|
||||
patterns.insert<
|
||||
GPUIndexIntrinsicOpLowering<gpu::ThreadIdOp, NVVM::ThreadIdXOp,
|
||||
NVVM::ThreadIdYOp, NVVM::ThreadIdZOp>,
|
||||
GPUIndexIntrinsicOpLowering<gpu::BlockDimOp, NVVM::BlockDimXOp,
|
||||
NVVM::BlockDimYOp, NVVM::BlockDimZOp>,
|
||||
GPUIndexIntrinsicOpLowering<gpu::BlockIdOp, NVVM::BlockIdXOp,
|
||||
NVVM::BlockIdYOp, NVVM::BlockIdZOp>,
|
||||
GPUIndexIntrinsicOpLowering<gpu::GridDimOp, NVVM::GridDimXOp,
|
||||
NVVM::GridDimYOp, NVVM::GridDimZOp>,
|
||||
GPUAllReduceOpLowering, FuncOpLowering>(converter);
|
||||
patterns.insert<OpToFuncCallLowering<ExpOp>>(converter, "__nv_expf",
|
||||
"__nv_exp");
|
||||
populateGpuToNVVMConversionPatterns(converter, patterns);
|
||||
ConversionTarget target(getContext());
|
||||
target.addIllegalDialect<gpu::GPUDialect>();
|
||||
target.addIllegalOp<LLVM::ExpOp>();
|
||||
@@ -633,6 +621,23 @@ public:
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
void mlir::populateGpuToNVVMConversionPatterns(
|
||||
LLVMTypeConverter &converter, OwningRewritePatternList &patterns) {
|
||||
populateWithGenerated(converter.getDialect()->getContext(), &patterns);
|
||||
patterns
|
||||
.insert<GPUIndexIntrinsicOpLowering<gpu::ThreadIdOp, NVVM::ThreadIdXOp,
|
||||
NVVM::ThreadIdYOp, NVVM::ThreadIdZOp>,
|
||||
GPUIndexIntrinsicOpLowering<gpu::BlockDimOp, NVVM::BlockDimXOp,
|
||||
NVVM::BlockDimYOp, NVVM::BlockDimZOp>,
|
||||
GPUIndexIntrinsicOpLowering<gpu::BlockIdOp, NVVM::BlockIdXOp,
|
||||
NVVM::BlockIdYOp, NVVM::BlockIdZOp>,
|
||||
GPUIndexIntrinsicOpLowering<gpu::GridDimOp, NVVM::GridDimXOp,
|
||||
NVVM::GridDimYOp, NVVM::GridDimZOp>,
|
||||
GPUAllReduceOpLowering, FuncOpLowering>(converter);
|
||||
patterns.insert<OpToFuncCallLowering<ExpOp>>(converter, "__nv_expf",
|
||||
"__nv_exp");
|
||||
}
|
||||
|
||||
std::unique_ptr<OpPassBase<ModuleOp>> mlir::createLowerGpuOpsToNVVMOpsPass() {
|
||||
return std::make_unique<LowerGpuOpsToNVVMOpsPass>();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user