summaryrefslogtreecommitdiff
path: root/flang
diff options
context:
space:
mode:
authorValentin Clement <clementval@gmail.com>2023-05-11 10:24:22 -0700
committerValentin Clement <clementval@gmail.com>2023-05-11 10:33:00 -0700
commit677f7cc55a3f21498e17a0c3e29d4cc126c0dc21 (patch)
treee803d9b33668651c2446b31ebdc263f9ff106f50 /flang
parente41dce4d4974f41d8e7572dfc698e5ddd55a3d4b (diff)
downloadllvm-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.h1
-rw-r--r--flang/include/flang/Optimizer/Transforms/Passes.td10
-rw-r--r--flang/lib/Optimizer/CodeGen/CMakeLists.txt1
-rw-r--r--flang/lib/Optimizer/CodeGen/CodeGen.cpp2
-rw-r--r--flang/lib/Optimizer/Transforms/CMakeLists.txt1
-rw-r--r--flang/lib/Optimizer/Transforms/OpenACC/OpenACCDataOperandConversion.cpp142
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();
-}