FLANG
Public Member Functions | Static Public Member Functions | List of all members
CoordinateOpConversion Struct Reference
Inheritance diagram for CoordinateOpConversion:
fir::FIROpAndTypeConversion< fir::CoordinateOp > fir::FIROpConversion< SourceOp > fir::ConvertFIRToLLVMPattern

Public Member Functions

llvm::LogicalResult doRewrite (fir::CoordinateOp coor, mlir::Type ty, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override
 
- Public Member Functions inherited from fir::FIROpAndTypeConversion< fir::CoordinateOp >
llvm::LogicalResult matchAndRewrite (fir::CoordinateOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const final
 
virtual llvm::LogicalResult doRewrite (fir::CoordinateOp addr, mlir::Type ty, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const=0
 
- Public Member Functions inherited from fir::FIROpConversion< SourceOp >
 FIROpConversion (const LLVMTypeConverter &typeConverter, const fir::FIRToLLVMPassOptions &options, mlir::PatternBenefit benefit=1)
 
void rewrite (mlir::Operation *op, mlir::ArrayRef< mlir::Value > operands, mlir::ConversionPatternRewriter &rewriter) const final
 Wrappers around the RewritePattern methods that pass the derived op type.
 
void rewrite (mlir::Operation *op, mlir::ArrayRef< mlir::ValueRange > operands, mlir::ConversionPatternRewriter &rewriter) const final
 
llvm::LogicalResult match (mlir::Operation *op) const final
 
llvm::LogicalResult matchAndRewrite (mlir::Operation *op, mlir::ArrayRef< mlir::Value > operands, mlir::ConversionPatternRewriter &rewriter) const final
 
llvm::LogicalResult matchAndRewrite (mlir::Operation *op, mlir::ArrayRef< mlir::ValueRange > operands, mlir::ConversionPatternRewriter &rewriter) const final
 
virtual llvm::LogicalResult match (SourceOp op) const
 
virtual void rewrite (SourceOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const
 
virtual void rewrite (SourceOp op, OneToNOpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const
 
virtual llvm::LogicalResult matchAndRewrite (SourceOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const
 
virtual llvm::LogicalResult matchAndRewrite (SourceOp op, OneToNOpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const
 
- Public Member Functions inherited from fir::ConvertFIRToLLVMPattern
 ConvertFIRToLLVMPattern (llvm::StringRef rootOpName, mlir::MLIRContext *context, const fir::LLVMTypeConverter &typeConverter, const fir::FIRToLLVMPassOptions &options, mlir::PatternBenefit benefit=1)
 

Static Public Member Functions

static unsigned getFieldNumber (fir::RecordType ty, mlir::Value op)
 
static bool hasSubDimensions (mlir::Type type)
 
static bool supportedCoordinate (mlir::Type type, mlir::ValueRange coors)
 
static bool arraysHaveKnownShape (mlir::Type type, mlir::ValueRange coors)
 

Additional Inherited Members

- Public Types inherited from fir::FIROpAndTypeConversion< fir::CoordinateOp >
using OpAdaptor = typename FromOp::Adaptor
 
- Public Types inherited from fir::FIROpConversion< SourceOp >
using OpAdaptor = typename SourceOp::Adaptor
 
using OneToNOpAdaptor = typename SourceOp::template GenericAdaptor< mlir::ArrayRef< mlir::ValueRange > >
 
- Protected Member Functions inherited from fir::ConvertFIRToLLVMPattern
mlir::Type convertType (mlir::Type ty) const
 
mlir::Type convertObjectType (mlir::Type firType) const
 
mlir::LLVM::ConstantOp genI32Constant (mlir::Location loc, mlir::ConversionPatternRewriter &rewriter, int value) const
 
mlir::LLVM::ConstantOp genConstantOffset (mlir::Location loc, mlir::ConversionPatternRewriter &rewriter, int offset) const
 
mlir::Value integerCast (mlir::Location loc, mlir::ConversionPatternRewriter &rewriter, mlir::Type ty, mlir::Value val, bool fold=false) const
 
TypePair getBoxTypePair (mlir::Type firBoxTy) const
 
mlir::Value getValueFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::Type resultTy, mlir::ConversionPatternRewriter &rewriter, int boxValue) const
 Construct code sequence to extract the specific value from a fir.box.
 
llvm::SmallVector< mlir::Value, 3 > getDimsFromBox (mlir::Location loc, llvm::ArrayRef< mlir::Type > retTys, TypePair boxTy, mlir::Value box, mlir::Value dim, mlir::ConversionPatternRewriter &rewriter) const
 
llvm::SmallVector< mlir::Value, 3 > getDimsFromBox (mlir::Location loc, llvm::ArrayRef< mlir::Type > retTys, TypePair boxTy, mlir::Value box, int dim, mlir::ConversionPatternRewriter &rewriter) const
 
mlir::Value loadDimFieldFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::Value dim, int off, mlir::Type ty, mlir::ConversionPatternRewriter &rewriter) const
 
mlir::Value getDimFieldFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, int dim, int off, mlir::Type ty, mlir::ConversionPatternRewriter &rewriter) const
 
mlir::Value getStrideFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, unsigned dim, mlir::ConversionPatternRewriter &rewriter) const
 
mlir::Value getBaseAddrFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter) const
 Read base address from a fir.box. Returned address has type ty.
 
mlir::Value getElementSizeFromBox (mlir::Location loc, mlir::Type resultTy, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter) const
 
mlir::Value getRankFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter) const
 Read base address from a fir.box. Returned address has type ty.
 
mlir::Value getExtraFromBox (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter) const
 Read the extra field from a fir.box.
 
mlir::Type getBoxEleTy (mlir::Type type, llvm::ArrayRef< std::int64_t > indexes) const
 
mlir::Type getLlvmObjectTypeFromBoxType (mlir::Type boxType) const
 
mlir::Value loadTypeDescAddress (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter) const
 Read the address of the type descriptor from a box.
 
mlir::Value genBoxAttributeCheck (mlir::Location loc, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter, unsigned maskValue) const
 
mlir::Value computeBoxSize (mlir::Location, TypePair boxTy, mlir::Value box, mlir::ConversionPatternRewriter &rewriter) const
 
template<typename... ARGS>
mlir::LLVM::GEPOp genGEP (mlir::Location loc, mlir::Type ty, mlir::ConversionPatternRewriter &rewriter, mlir::Value base, ARGS... args) const
 
mlir::Block * getBlockForAllocaInsert (mlir::Operation *op, mlir::Region *parentRegion) const
 
mlir::Value genAllocaAndAddrCastWithType (mlir::Location loc, mlir::Type llvmObjectTy, unsigned alignment, mlir::ConversionPatternRewriter &rewriter) const
 
const fir::LLVMTypeConverterlowerTy () const
 
void attachTBAATag (mlir::LLVM::AliasAnalysisOpInterface op, mlir::Type baseFIRType, mlir::Type accessFIRType, mlir::LLVM::GEPOp gep) const
 
unsigned getAllocaAddressSpace (mlir::ConversionPatternRewriter &rewriter) const
 
unsigned getProgramAddressSpace (mlir::ConversionPatternRewriter &rewriter) const
 
- Protected Attributes inherited from fir::ConvertFIRToLLVMPattern
const fir::FIRToLLVMPassOptionsoptions
 

Detailed Description

Convert to (memory) reference to a reference to a subobject. The coordinate_of op is a Swiss army knife operation that can be used on (memory) references to records, arrays, complex, etc. as well as boxes. With unboxed arrays, there is the restriction that the array have a static shape in all but the last column.

Member Function Documentation

◆ arraysHaveKnownShape()

static bool CoordinateOpConversion::arraysHaveKnownShape ( mlir::Type  type,
mlir::ValueRange  coors 
)
inlinestatic

Walk the abstract memory layout and determine if the path traverses any array types with unknown shape. Return true iff all the array types have a constant shape along the path.

◆ doRewrite()

llvm::LogicalResult CoordinateOpConversion::doRewrite ( fir::CoordinateOp  coor,
mlir::Type  ty,
OpAdaptor  adaptor,
mlir::ConversionPatternRewriter &  rewriter 
) const
inlineoverridevirtual

◆ supportedCoordinate()

static bool CoordinateOpConversion::supportedCoordinate ( mlir::Type  type,
mlir::ValueRange  coors 
)
inlinestatic

Check whether this form of !fir.coordinate_of is supported. These additional checks are required, because we are not yet able to convert all valid forms of !fir.coordinate_of. TODO: Either implement the unsupported cases or extend the verifier in FIROps.cpp instead.


The documentation for this struct was generated from the following file: