[fir] Add placeholder conversion pattern for disptach operations
`fir.dispatch`, `fir.dispatch_table` and `fir.dt_entry` are operations for type-bound procedures. This patch just adds placeholder conversion pattern that currently fails since F2003 is not implemented yet. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D113662
This commit is contained in:
parent
f04e387055
commit
9534e361ea
|
|
@ -560,6 +560,46 @@ struct ConvertOpConversion : public FIROpConversion<fir::ConvertOp> {
|
|||
}
|
||||
};
|
||||
|
||||
/// Lower `fir.dispatch` operation. A virtual call to a method in a dispatch
|
||||
/// table.
|
||||
struct DispatchOpConversion : public FIROpConversion<fir::DispatchOp> {
|
||||
using FIROpConversion::FIROpConversion;
|
||||
|
||||
mlir::LogicalResult
|
||||
matchAndRewrite(fir::DispatchOp dispatch, OpAdaptor adaptor,
|
||||
mlir::ConversionPatternRewriter &rewriter) const override {
|
||||
return rewriter.notifyMatchFailure(
|
||||
dispatch, "fir.dispatch codegen is not implemented yet");
|
||||
}
|
||||
};
|
||||
|
||||
/// Lower `fir.dispatch_table` operation. The dispatch table for a Fortran
|
||||
/// derived type.
|
||||
struct DispatchTableOpConversion
|
||||
: public FIROpConversion<fir::DispatchTableOp> {
|
||||
using FIROpConversion::FIROpConversion;
|
||||
|
||||
mlir::LogicalResult
|
||||
matchAndRewrite(fir::DispatchTableOp dispTab, OpAdaptor adaptor,
|
||||
mlir::ConversionPatternRewriter &rewriter) const override {
|
||||
return rewriter.notifyMatchFailure(
|
||||
dispTab, "fir.dispatch_table codegen is not implemented yet");
|
||||
}
|
||||
};
|
||||
|
||||
/// Lower `fir.dt_entry` operation. An entry in a dispatch table; binds a
|
||||
/// method-name to a function.
|
||||
struct DTEntryOpConversion : public FIROpConversion<fir::DTEntryOp> {
|
||||
using FIROpConversion::FIROpConversion;
|
||||
|
||||
mlir::LogicalResult
|
||||
matchAndRewrite(fir::DTEntryOp dtEnt, OpAdaptor adaptor,
|
||||
mlir::ConversionPatternRewriter &rewriter) const override {
|
||||
return rewriter.notifyMatchFailure(
|
||||
dtEnt, "fir.dt_entry codegen is not implemented yet");
|
||||
}
|
||||
};
|
||||
|
||||
/// Lower `fir.has_value` operation to `llvm.return` operation.
|
||||
struct HasValueOpConversion : public FIROpConversion<fir::HasValueOp> {
|
||||
using FIROpConversion::FIROpConversion;
|
||||
|
|
@ -1189,6 +1229,7 @@ public:
|
|||
BoxAddrOpConversion, BoxDimsOpConversion, BoxEleSizeOpConversion,
|
||||
BoxIsAllocOpConversion, BoxIsArrayOpConversion, BoxIsPtrOpConversion,
|
||||
BoxRankOpConversion, CallOpConversion, ConvertOpConversion,
|
||||
DispatchOpConversion, DispatchTableOpConversion, DTEntryOpConversion,
|
||||
DivcOpConversion, ExtractValueOpConversion, HasValueOpConversion,
|
||||
GlobalOpConversion, InsertOnRangeOpConversion, InsertValueOpConversion,
|
||||
LoadOpConversion, NegcOpConversion, MulcOpConversion,
|
||||
|
|
|
|||
|
|
@ -8,3 +8,22 @@ func @zero_aggregate() {
|
|||
return
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
// Test that `fir.dispatch` fails to be legalized. Not implemented yet.
|
||||
|
||||
func @dispatch(%arg0: !fir.box<!fir.type<derived3{f:f32}>>) {
|
||||
// expected-error@+1{{failed to legalize operation 'fir.dispatch'}}
|
||||
%0 = fir.dispatch "method"(%arg0) : (!fir.box<!fir.type<derived3{f:f32}>>) -> i32
|
||||
return
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
// Test that `fir.dispatch_table`/`fir.dt_entry` fails to be legalized.
|
||||
// Not implemented yet.
|
||||
|
||||
// expected-error@+1{{failed to legalize operation 'fir.dispatch_table'}}
|
||||
fir.dispatch_table @dispatch_tbl {
|
||||
fir.dt_entry "method", @method_impl
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue