diff options
author | Valentin Clement <clementval@gmail.com> | 2023-05-11 10:24:22 -0700 |
---|---|---|
committer | Valentin Clement <clementval@gmail.com> | 2023-05-11 10:33:00 -0700 |
commit | 677f7cc55a3f21498e17a0c3e29d4cc126c0dc21 (patch) | |
tree | e803d9b33668651c2446b31ebdc263f9ff106f50 /flang | |
parent | e41dce4d4974f41d8e7572dfc698e5ddd55a3d4b (diff) | |
download | llvm-677f7cc55a3f21498e17a0c3e29d4cc126c0dc21.tar.gz |
[mlir][flang][openacc] Remove obsolete operand legalization passes
The information needed for translation is now encoded in the dialect
operations and does not require a dedicated pass to be extracted.
Remove the obsolete passes that were performing operand legalization.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D150248
Diffstat (limited to 'flang')
-rw-r--r-- | flang/include/flang/Optimizer/Transforms/Passes.h | 1 | ||||
-rw-r--r-- | flang/include/flang/Optimizer/Transforms/Passes.td | 10 | ||||
-rw-r--r-- | flang/lib/Optimizer/CodeGen/CMakeLists.txt | 1 | ||||
-rw-r--r-- | flang/lib/Optimizer/CodeGen/CodeGen.cpp | 2 | ||||
-rw-r--r-- | flang/lib/Optimizer/Transforms/CMakeLists.txt | 1 | ||||
-rw-r--r-- | flang/lib/Optimizer/Transforms/OpenACC/OpenACCDataOperandConversion.cpp | 142 |
6 files changed, 0 insertions, 157 deletions
diff --git a/flang/include/flang/Optimizer/Transforms/Passes.h b/flang/include/flang/Optimizer/Transforms/Passes.h index 863e0df1e737..93f78f0646e0 100644 --- a/flang/include/flang/Optimizer/Transforms/Passes.h +++ b/flang/include/flang/Optimizer/Transforms/Passes.h @@ -72,7 +72,6 @@ std::unique_ptr<mlir::Pass> createAlgebraicSimplificationPass(); std::unique_ptr<mlir::Pass> createAlgebraicSimplificationPass(const mlir::GreedyRewriteConfig &config); std::unique_ptr<mlir::Pass> createPolymorphicOpConversionPass(); -std::unique_ptr<mlir::Pass> createOpenACCDataOperandConversionPass(); // declarative passes #define GEN_PASS_REGISTRATION diff --git a/flang/include/flang/Optimizer/Transforms/Passes.td b/flang/include/flang/Optimizer/Transforms/Passes.td index e7a7c61b4797..b4cae024248b 100644 --- a/flang/include/flang/Optimizer/Transforms/Passes.td +++ b/flang/include/flang/Optimizer/Transforms/Passes.td @@ -286,16 +286,6 @@ def PolymorphicOpConversion : Pass<"fir-polymorphic-op", "::mlir::func::FuncOp"> ]; } -def OpenACCDataOperandConversion : Pass<"fir-openacc-data-operand-conversion", "::mlir::func::FuncOp"> { - let summary = "Convert the FIR operands in OpenACC ops to LLVM dialect"; - let dependentDialects = ["mlir::LLVM::LLVMDialect"]; - let options = [ - Option<"useOpaquePointers", "use-opaque-pointers", "bool", - /*default=*/"true", "Generate LLVM IR using opaque pointers " - "instead of typed pointers">, - ]; -} - def LoopVersioning : Pass<"loop-versioning", "mlir::func::FuncOp"> { let summary = "Loop Versioning"; let description = [{ diff --git a/flang/lib/Optimizer/CodeGen/CMakeLists.txt b/flang/lib/Optimizer/CodeGen/CMakeLists.txt index 1d65e1de6df4..016544ef870a 100644 --- a/flang/lib/Optimizer/CodeGen/CMakeLists.txt +++ b/flang/lib/Optimizer/CodeGen/CMakeLists.txt @@ -23,7 +23,6 @@ add_flang_library(FIRCodeGen MLIRMathToFuncs MLIRMathToLLVM MLIRMathToLibm - MLIROpenACCToLLVM MLIROpenMPToLLVM MLIRBuiltinToLLVMIRTranslation MLIRLLVMToLLVMIRTranslation diff --git a/flang/lib/Optimizer/CodeGen/CodeGen.cpp b/flang/lib/Optimizer/CodeGen/CodeGen.cpp index c96ce573e9c4..f3565c04abcb 100644 --- a/flang/lib/Optimizer/CodeGen/CodeGen.cpp +++ b/flang/lib/Optimizer/CodeGen/CodeGen.cpp @@ -31,7 +31,6 @@ #include "mlir/Conversion/MathToFuncs/MathToFuncs.h" #include "mlir/Conversion/MathToLLVM/MathToLLVM.h" #include "mlir/Conversion/MathToLibm/MathToLibm.h" -#include "mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h" #include "mlir/Conversion/OpenMPToLLVM/ConvertOpenMPToLLVM.h" #include "mlir/Conversion/ReconcileUnrealizedCasts/ReconcileUnrealizedCasts.h" #include "mlir/Dialect/LLVMIR/LLVMDialect.h" @@ -3690,7 +3689,6 @@ public: XEmboxOpConversion, XReboxOpConversion, ZeroOpConversion>(typeConverter, options); mlir::populateFuncToLLVMConversionPatterns(typeConverter, pattern); - mlir::populateOpenACCToLLVMConversionPatterns(typeConverter, pattern); mlir::populateOpenMPToLLVMConversionPatterns(typeConverter, pattern); mlir::arith::populateArithToLLVMConversionPatterns(typeConverter, pattern); mlir::cf::populateControlFlowToLLVMConversionPatterns(typeConverter, diff --git a/flang/lib/Optimizer/Transforms/CMakeLists.txt b/flang/lib/Optimizer/Transforms/CMakeLists.txt index 3f63035a9298..932914e12a23 100644 --- a/flang/lib/Optimizer/Transforms/CMakeLists.txt +++ b/flang/lib/Optimizer/Transforms/CMakeLists.txt @@ -15,7 +15,6 @@ add_flang_library(FIRTransforms SimplifyIntrinsics.cpp AddDebugFoundation.cpp PolymorphicOpConversion.cpp - OpenACC/OpenACCDataOperandConversion.cpp LoopVersioning.cpp DEPENDS diff --git a/flang/lib/Optimizer/Transforms/OpenACC/OpenACCDataOperandConversion.cpp b/flang/lib/Optimizer/Transforms/OpenACC/OpenACCDataOperandConversion.cpp deleted file mode 100644 index de28a8f3872c..000000000000 --- a/flang/lib/Optimizer/Transforms/OpenACC/OpenACCDataOperandConversion.cpp +++ /dev/null @@ -1,142 +0,0 @@ -//===- OpenACCDataOperandConversion.cpp - OpenACC data operand conversion -===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// - -#include "flang/Optimizer/Dialect/FIRDialect.h" -#include "flang/Optimizer/Transforms/Passes.h" -#include "mlir/Conversion/LLVMCommon/Pattern.h" -#include "mlir/Conversion/OpenACCToLLVM/ConvertOpenACCToLLVM.h" -#include "mlir/Dialect/Func/IR/FuncOps.h" -#include "mlir/Dialect/LLVMIR/LLVMDialect.h" -#include "mlir/Dialect/OpenACC/OpenACC.h" -#include "mlir/IR/Builders.h" -#include "mlir/IR/BuiltinOps.h" -#include "mlir/Pass/Pass.h" - -namespace fir { -#define GEN_PASS_DEF_OPENACCDATAOPERANDCONVERSION -#include "flang/Optimizer/Transforms/Passes.h.inc" -} // namespace fir - -#define DEBUG_TYPE "flang-openacc-conversion" -#include "flang/Optimizer/CodeGen/TypeConverter.h" - -using namespace fir; -using namespace mlir; - -//===----------------------------------------------------------------------===// -// Conversion patterns -//===----------------------------------------------------------------------===// - -namespace { - -template <typename Op> -class LegalizeDataOpForLLVMTranslation : public ConvertOpToLLVMPattern<Op> { - using ConvertOpToLLVMPattern<Op>::ConvertOpToLLVMPattern; - - LogicalResult - matchAndRewrite(Op op, typename Op::Adaptor adaptor, - ConversionPatternRewriter &builder) const override { - Location loc = op.getLoc(); - fir::LLVMTypeConverter &converter = - *static_cast<fir::LLVMTypeConverter *>(this->getTypeConverter()); - - unsigned numDataOperands = op.getNumDataOperands(); - - // Keep the non data operands without modification. - auto nonDataOperands = adaptor.getOperands().take_front( - adaptor.getOperands().size() - numDataOperands); - SmallVector<Value> convertedOperands; - convertedOperands.append(nonDataOperands.begin(), nonDataOperands.end()); - - // Go over the data operand and legalize them for translation. - for (unsigned idx = 0; idx < numDataOperands; ++idx) { - Value originalDataOperand = op.getDataOperand(idx); - if (auto refTy = - originalDataOperand.getType().dyn_cast<fir::ReferenceType>()) { - if (refTy.getEleTy().isa<fir::BaseBoxType>()) - return builder.notifyMatchFailure(op, "BaseBoxType not supported"); - mlir::Type convertedType = - converter.convertType(refTy).cast<mlir::LLVM::LLVMPointerType>(); - mlir::Value castedOperand = - builder - .create<mlir::UnrealizedConversionCastOp>(loc, convertedType, - originalDataOperand) - .getResult(0); - convertedOperands.push_back(castedOperand); - } else { - // Type not supported. - return builder.notifyMatchFailure(op, "expecting a reference type"); - } - } - - if constexpr (std::is_same_v<Op, acc::ParallelOp> || - std::is_same_v<Op, acc::DataOp>) { - auto newOp = - builder.create<Op>(op.getLoc(), TypeRange(), convertedOperands, - op.getOperation()->getAttrs()); - builder.inlineRegionBefore(op.getRegion(), newOp.getRegion(), - newOp.getRegion().end()); - if (failed(builder.convertRegionTypes(&newOp.getOperation()->getRegion(0), - *this->getTypeConverter()))) - return failure(); - builder.eraseOp(op); - } else { - builder.replaceOpWithNewOp<Op>(op, TypeRange(), convertedOperands, - op.getOperation()->getAttrs()); - } - - return success(); - } -}; -} // namespace - -namespace { -struct OpenACCDataOperandConversion - : public fir::impl::OpenACCDataOperandConversionBase< - OpenACCDataOperandConversion> { - using Base::Base; - - void runOnOperation() override; -}; -} // namespace - -void OpenACCDataOperandConversion::runOnOperation() { - auto op = getOperation(); - auto *context = op.getContext(); - - // Convert to OpenACC operations with LLVM IR dialect - RewritePatternSet patterns(context); - LowerToLLVMOptions options(context); - options.useOpaquePointers = useOpaquePointers; - fir::LLVMTypeConverter converter( - op.getOperation()->getParentOfType<mlir::ModuleOp>(), true); - patterns.add<LegalizeDataOpForLLVMTranslation<acc::ParallelOp>>(converter); - - ConversionTarget target(*context); - target.addLegalDialect<fir::FIROpsDialect>(); - target.addLegalDialect<LLVM::LLVMDialect>(); - target.addLegalOp<mlir::UnrealizedConversionCastOp>(); - - auto allDataOperandsAreConverted = [](ValueRange operands) { - for (Value operand : operands) { - if (!operand.getType().isa<LLVM::LLVMPointerType>()) - return false; - } - return true; - }; - - target.addDynamicallyLegalOp<acc::ParallelOp>( - [allDataOperandsAreConverted](acc::ParallelOp op) { - return allDataOperandsAreConverted(op.getReductionOperands()) && - allDataOperandsAreConverted(op.getGangPrivateOperands()) && - allDataOperandsAreConverted(op.getGangFirstPrivateOperands()); - }); - - if (failed(applyPartialConversion(op, target, std::move(patterns)))) - signalPassFailure(); -} |