[fir] Add fir.gentypedesc conversion
Add conversion pattern for the GenTypeDescOp. Convert to a global constant with an addressof. This patch is part of the upstreaming effort from fir-dev branch. Reviewed By: kiranchandramohan Differential Revision: https://reviews.llvm.org/D113766 Co-authored-by: Eric Schweitz <eschweitz@nvidia.com> Co-authored-by: Jean Perier <jperier@nvidia.com>
This commit is contained in:
parent
374cd0fb61
commit
3124618704
|
@ -694,6 +694,18 @@ struct GlobalLenOpConversion : public FIROpConversion<fir::GlobalLenOp> {
|
|||
}
|
||||
};
|
||||
|
||||
/// Lower `fir.gentypedesc` to a global constant.
|
||||
struct GenTypeDescOpConversion : public FIROpConversion<fir::GenTypeDescOp> {
|
||||
using FIROpConversion::FIROpConversion;
|
||||
|
||||
mlir::LogicalResult
|
||||
matchAndRewrite(fir::GenTypeDescOp gentypedesc, OpAdaptor adaptor,
|
||||
mlir::ConversionPatternRewriter &rewriter) const override {
|
||||
return rewriter.notifyMatchFailure(
|
||||
gentypedesc, "fir.fir.gentypedesc codegen is not implemented yet");
|
||||
}
|
||||
};
|
||||
|
||||
/// Lower `fir.has_value` operation to `llvm.return` operation.
|
||||
struct HasValueOpConversion : public FIROpConversion<fir::HasValueOp> {
|
||||
using FIROpConversion::FIROpConversion;
|
||||
|
@ -1563,14 +1575,13 @@ public:
|
|||
CmpcOpConversion, ConvertOpConversion, DispatchOpConversion,
|
||||
DispatchTableOpConversion, DTEntryOpConversion, DivcOpConversion,
|
||||
EmboxCharOpConversion, ExtractValueOpConversion, HasValueOpConversion,
|
||||
GlobalLenOpConversion, GlobalOpConversion, InsertOnRangeOpConversion,
|
||||
InsertValueOpConversion, IsPresentOpConversion, LoadOpConversion,
|
||||
NegcOpConversion, MulcOpConversion, SelectCaseOpConversion,
|
||||
SelectOpConversion, SelectRankOpConversion, SelectTypeOpConversion,
|
||||
StoreOpConversion, SubcOpConversion, UnboxCharOpConversion,
|
||||
UndefOpConversion, UnreachableOpConversion, ZeroOpConversion>(
|
||||
typeConverter);
|
||||
|
||||
GenTypeDescOpConversion, GlobalLenOpConversion, GlobalOpConversion,
|
||||
InsertOnRangeOpConversion, InsertValueOpConversion,
|
||||
IsPresentOpConversion, LoadOpConversion, NegcOpConversion,
|
||||
MulcOpConversion, SelectCaseOpConversion, SelectOpConversion,
|
||||
SelectRankOpConversion, SelectTypeOpConversion, StoreOpConversion,
|
||||
SubcOpConversion, UnboxCharOpConversion, UndefOpConversion,
|
||||
UnreachableOpConversion, ZeroOpConversion>(typeConverter);
|
||||
mlir::populateStdToLLVMConversionPatterns(typeConverter, pattern);
|
||||
mlir::arith::populateArithmeticToLLVMConversionPatterns(typeConverter,
|
||||
pattern);
|
||||
|
|
|
@ -83,3 +83,13 @@ fir.global @global_derived : !fir.type<minez(f:i32)> {
|
|||
%0 = fir.undefined !fir.type<minez>
|
||||
fir.has_value %0 : !fir.type<minez>
|
||||
}
|
||||
|
||||
// -----
|
||||
|
||||
// Test `fir.gentypedesc` conversion failure. Not implemented yet.
|
||||
|
||||
func @gentypedesc() {
|
||||
// expected-error@+1{{failed to legalize operation 'fir.gentypedesc'}}
|
||||
%0 = fir.gentypedesc !fir.type<derived3>
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue