clang 23.0.0git
CIRDialect.cpp File Reference
#include "clang/CIR/Dialect/IR/CIRDialect.h"
#include "clang/CIR/Dialect/IR/CIRAttrs.h"
#include "clang/CIR/Dialect/IR/CIROpsEnums.h"
#include "clang/CIR/Dialect/IR/CIRTypes.h"
#include "mlir/IR/Attributes.h"
#include "mlir/IR/DialectImplementation.h"
#include "mlir/IR/PatternMatch.h"
#include "mlir/Interfaces/ControlFlowInterfaces.h"
#include "mlir/Interfaces/FunctionImplementation.h"
#include "mlir/Support/LLVM.h"
#include "clang/CIR/Dialect/IR/CIROpsDialect.cpp.inc"
#include "clang/CIR/Dialect/IR/CIROpsEnums.cpp.inc"
#include "clang/CIR/MissingFeatures.h"
#include "llvm/ADT/SetOperations.h"
#include "llvm/ADT/SmallSet.h"
#include "llvm/ADT/TypeSwitch.h"
#include "llvm/Support/LogicalResult.h"
#include "clang/CIR/Dialect/IR/CIROps.cpp.inc"

Go to the source code of this file.

Macros

#define GET_OP_LIST
#define REGISTER_ENUM_TYPE(Ty)
#define GET_OP_CLASSES

Functions

static int parseOptionalKeywordAlternative (AsmParser &parser, ArrayRef< llvm::StringRef > keywords)
template<typename EnumTy, typename RetTy = EnumTy>
static RetTy parseOptionalCIRKeyword (AsmParser &parser, EnumTy defaultValue)
 Parse an enum from the keyword, or default to the provided default value.
template<typename EnumTy, typename RetTy = EnumTy>
static ParseResult parseCIRKeyword (AsmParser &parser, RetTy &result)
 Parse an enum from the keyword, return failure if the keyword is not found.
static LogicalResult ensureRegionTerm (OpAsmParser &parser, Region &region, SMLoc errLoc)
static bool omitRegionTerm (mlir::Region &r)
ParseResult parseInlineKindAttr (OpAsmParser &parser, cir::InlineKindAttr &inlineKindAttr)
void printInlineKindAttr (OpAsmPrinter &p, cir::InlineKindAttr inlineKindAttr)
static mlir::ParseResult parseOmittedTerminatorRegion (mlir::OpAsmParser &parser, mlir::Region &region)
static void printOmittedTerminatorRegion (mlir::OpAsmPrinter &printer, cir::ScopeOp &op, mlir::Region &region)
mlir::OptionalParseResult parseGlobalAddressSpaceValue (mlir::AsmParser &p, mlir::ptr::MemorySpaceAttrInterface &attr)
void printGlobalAddressSpaceValue (mlir::AsmPrinter &printer, cir::GlobalOp op, mlir::ptr::MemorySpaceAttrInterface attr)
template<typename Op>
static LogicalResult verifyArrayCtorDtor (Op op)
static void printAssumeBundle (OpAsmPrinter &p, cir::AssumeOp op, cir::AssumeBundleKindAttr kindAttr, OperandRange bundleArgs, TypeRange bundleArgTypes)
static ParseResult parseAssumeBundle (OpAsmParser &p, cir::AssumeBundleKindAttr &bundleKindAttr, llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand, 4 > &bundleArgs, llvm::SmallVector< mlir::Type, 1 > &bundleArgTypes)
static LogicalResult checkConstantTypes (mlir::Operation *op, mlir::Type opType, mlir::Attribute attrType)
static bool isIntOrBoolCast (cir::CastOp op)
static bool isCirFunctionPointerType (mlir::Type ty)
static Value tryFoldCastChain (cir::CastOp op)
static mlir::ParseResult parseTryCallDestinations (mlir::OpAsmParser &parser, mlir::OperationState &result)
static mlir::ParseResult parseCallCommon (mlir::OpAsmParser &parser, mlir::OperationState &result, bool hasDestinationBlocks=false)
static void printCallCommon (mlir::Operation *op, mlir::FlatSymbolRefAttr calleeSym, mlir::Value indirectCallee, mlir::OpAsmPrinter &printer, bool isNothrow, cir::SideEffect sideEffect, ArrayAttr argAttrs, ArrayAttr resAttrs, mlir::Block *normalDest=nullptr, mlir::Block *unwindDest=nullptr)
static LogicalResult verifyCallCommInSymbolUses (mlir::Operation *op, SymbolTableCollection &symbolTable)
static mlir::LogicalResult checkReturnAndFunction (cir::ReturnOp op, cir::FuncOp function)
ParseResult parseIndirectBrOpSucessors (OpAsmParser &parser, Type &flagType, SmallVectorImpl< Block * > &succOperandBlocks, SmallVectorImpl< SmallVector< OpAsmParser::UnresolvedOperand > > &succOperands, SmallVectorImpl< SmallVector< Type > > &succOperandsTypes)
void printIndirectBrOpSucessors (OpAsmPrinter &p, cir::IndirectBrOp op, Type flagType, SuccessorRange succs, OperandRangeRange succOperands, const TypeRangeRange &succOperandsTypes)
static ParseResult parseSwitchFlatOpCases (OpAsmParser &parser, Type flagType, mlir::ArrayAttr &caseValues, SmallVectorImpl< Block * > &caseDestinations, SmallVectorImpl< llvm::SmallVector< OpAsmParser::UnresolvedOperand > > &caseOperands, SmallVectorImpl< llvm::SmallVector< Type > > &caseOperandTypes)
 <cases> ::= [ (case (, case )* )?
static void printSwitchFlatOpCases (OpAsmPrinter &p, cir::SwitchFlatOp op, Type flagType, mlir::ArrayAttr caseValues, SuccessorRange caseDestinations, OperandRangeRange caseOperands, const TypeRangeRange &caseOperandTypes)
static ParseResult parseConstantValue (OpAsmParser &parser, mlir::Attribute &valueAttr)
static void printConstant (OpAsmPrinter &p, Attribute value)
static void printGlobalOpTypeAndInitialValue (OpAsmPrinter &p, cir::GlobalOp op, TypeAttr type, Attribute initAttr, mlir::Region &ctorRegion, mlir::Region &dtorRegion)
static ParseResult parseGlobalOpTypeAndInitialValue (OpAsmParser &parser, TypeAttr &typeAttr, Attribute &initialValueAttr, mlir::Region &ctorRegion, mlir::Region &dtorRegion)
static llvm::StringRef getLinkageAttrNameString ()
 Returns the name used for the linkage attribute.
static LogicalResult verifyBinaryOverflowOp (mlir::Operation *op, bool noSignedWrap, bool noUnsignedWrap, bool saturated, bool hasSat)
static LogicalResult verifyMemberPtrCast (Operation *op, mlir::Value src, mlir::Type resultTy)
static OpFoldResult foldUnaryBitOp (mlir::Attribute inputAttr, llvm::function_ref< llvm::APInt(const llvm::APInt &)> func, bool poisonZero=false)
static void printTryHandlerRegions (mlir::OpAsmPrinter &printer, cir::TryOp op, mlir::MutableArrayRef< mlir::Region > handlerRegions, mlir::ArrayAttr handlerTypes)
static mlir::ParseResult parseTryHandlerRegions (mlir::OpAsmParser &parser, llvm::SmallVectorImpl< std::unique_ptr< mlir::Region > > &handlerRegions, mlir::ArrayAttr &handlerTypes)
static ParseResult parseEhDispatchDestinations (OpAsmParser &parser, mlir::ArrayAttr &catchTypes, SmallVectorImpl< Block * > &catchDestinations, Block *&defaultDestination, mlir::UnitAttr &defaultIsCatchAll)
static void printEhDispatchDestinations (OpAsmPrinter &p, cir::EhDispatchOp op, mlir::ArrayAttr catchTypes, SuccessorRange catchDestinations, Block *defaultDestination, mlir::UnitAttr defaultIsCatchAll)

Macro Definition Documentation

◆ GET_OP_CLASSES

#define GET_OP_CLASSES

Definition at line 4562 of file CIRDialect.cpp.

◆ GET_OP_LIST

#define GET_OP_LIST

◆ REGISTER_ENUM_TYPE

#define REGISTER_ENUM_TYPE ( Ty)
Value:
template <> struct EnumTraits<cir::Ty> { \
static llvm::StringRef stringify(cir::Ty value) { \
return stringify##Ty(value); \
} \
static unsigned getMaxEnumVal() { return cir::getMaxEnumValFor##Ty(); } \
}

Definition at line 130 of file CIRDialect.cpp.

Function Documentation

◆ checkConstantTypes()

LogicalResult checkConstantTypes ( mlir::Operation * op,
mlir::Type opType,
mlir::Attribute attrType )
static

Definition at line 528 of file CIRDialect.cpp.

◆ checkReturnAndFunction()

mlir::LogicalResult checkReturnAndFunction ( cir::ReturnOp op,
cir::FuncOp function )
static

Definition at line 1320 of file CIRDialect.cpp.

◆ ensureRegionTerm()

LogicalResult ensureRegionTerm ( OpAsmParser & parser,
Region & region,
SMLoc errLoc )
static

◆ foldUnaryBitOp()

OpFoldResult foldUnaryBitOp ( mlir::Attribute inputAttr,
llvm::function_ref< llvm::APInt(const llvm::APInt &)> func,
bool poisonZero = false )
static

Definition at line 3787 of file CIRDialect.cpp.

◆ getLinkageAttrNameString()

llvm::StringRef getLinkageAttrNameString ( )
static

Returns the name used for the linkage attribute.

This must correspond to the name of the attribute in ODS.

Definition at line 2277 of file CIRDialect.cpp.

◆ isCirFunctionPointerType()

bool isCirFunctionPointerType ( mlir::Type ty)
static

Definition at line 844 of file CIRDialect.cpp.

Referenced by tryFoldCastChain().

◆ isIntOrBoolCast()

bool isIntOrBoolCast ( cir::CastOp op)
static

Definition at line 838 of file CIRDialect.cpp.

References kind.

Referenced by tryFoldCastChain().

◆ omitRegionTerm()

bool omitRegionTerm ( mlir::Region & r)
static

Definition at line 202 of file CIRDialect.cpp.

Referenced by printOmittedTerminatorRegion().

◆ parseAssumeBundle()

ParseResult parseAssumeBundle ( OpAsmParser & p,
cir::AssumeBundleKindAttr & bundleKindAttr,
llvm::SmallVector< mlir::OpAsmParser::UnresolvedOperand, 4 > & bundleArgs,
llvm::SmallVector< mlir::Type, 1 > & bundleArgTypes )
static

Definition at line 398 of file CIRDialect.cpp.

◆ parseCallCommon()

mlir::ParseResult parseCallCommon ( mlir::OpAsmParser & parser,
mlir::OperationState & result,
bool hasDestinationBlocks = false )
static

Definition at line 1006 of file CIRDialect.cpp.

References parseCIRKeyword(), and parseTryCallDestinations().

◆ parseCIRKeyword()

template<typename EnumTy, typename RetTy = EnumTy>
ParseResult parseCIRKeyword ( AsmParser & parser,
RetTy & result )
static

Parse an enum from the keyword, return failure if the keyword is not found.

Definition at line 161 of file CIRDialect.cpp.

References parseOptionalKeywordAlternative().

Referenced by parseCallCommon().

◆ parseConstantValue()

ParseResult parseConstantValue ( OpAsmParser & parser,
mlir::Attribute & valueAttr )
static

Definition at line 1945 of file CIRDialect.cpp.

Referenced by parseGlobalOpTypeAndInitialValue().

◆ parseEhDispatchDestinations()

ParseResult parseEhDispatchDestinations ( OpAsmParser & parser,
mlir::ArrayAttr & catchTypes,
SmallVectorImpl< Block * > & catchDestinations,
Block *& defaultDestination,
mlir::UnitAttr & defaultIsCatchAll )
static

Definition at line 4421 of file CIRDialect.cpp.

◆ parseGlobalAddressSpaceValue()

mlir::OptionalParseResult parseGlobalAddressSpaceValue ( mlir::AsmParser & p,
mlir::ptr::MemorySpaceAttrInterface & attr )

Definition at line 1158 of file CIRTypes.cpp.

References parseAddressSpaceValue().

◆ parseGlobalOpTypeAndInitialValue()

ParseResult parseGlobalOpTypeAndInitialValue ( OpAsmParser & parser,
TypeAttr & typeAttr,
Attribute & initialValueAttr,
mlir::Region & ctorRegion,
mlir::Region & dtorRegion )
static

Definition at line 2095 of file CIRDialect.cpp.

References ensureRegionTerm(), and parseConstantValue().

◆ parseIndirectBrOpSucessors()

ParseResult parseIndirectBrOpSucessors ( OpAsmParser & parser,
Type & flagType,
SmallVectorImpl< Block * > & succOperandBlocks,
SmallVectorImpl< SmallVector< OpAsmParser::UnresolvedOperand > > & succOperands,
SmallVectorImpl< SmallVector< Type > > & succOperandsTypes )

Definition at line 1690 of file CIRDialect.cpp.

◆ parseInlineKindAttr()

ParseResult parseInlineKindAttr ( OpAsmParser & parser,
cir::InlineKindAttr & inlineKindAttr )

Definition at line 215 of file CIRDialect.cpp.

◆ parseOmittedTerminatorRegion()

mlir::ParseResult parseOmittedTerminatorRegion ( mlir::OpAsmParser & parser,
mlir::Region & region )
static

Definition at line 250 of file CIRDialect.cpp.

References ensureRegionTerm().

◆ parseOptionalCIRKeyword()

template<typename EnumTy, typename RetTy = EnumTy>
RetTy parseOptionalCIRKeyword ( AsmParser & parser,
EnumTy defaultValue )
static

Parse an enum from the keyword, or default to the provided default value.

The return type is the enum type by default, unless overriden with the second template argument.

Definition at line 148 of file CIRDialect.cpp.

References parseOptionalKeywordAlternative().

◆ parseOptionalKeywordAlternative()

int parseOptionalKeywordAlternative ( AsmParser & parser,
ArrayRef< llvm::StringRef > keywords )
static

Definition at line 118 of file CIRDialect.cpp.

Referenced by parseCIRKeyword(), and parseOptionalCIRKeyword().

◆ parseSwitchFlatOpCases()

ParseResult parseSwitchFlatOpCases ( OpAsmParser & parser,
Type flagType,
mlir::ArrayAttr & caseValues,
SmallVectorImpl< Block * > & caseDestinations,
SmallVectorImpl< llvm::SmallVector< OpAsmParser::UnresolvedOperand > > & caseOperands,
SmallVectorImpl< llvm::SmallVector< Type > > & caseOperandTypes )
static

<cases> ::= [ (case (, case )* )?

] <case> ::= integer : bb-id (( ssa-use-and-type-list ))?

Definition at line 1868 of file CIRDialect.cpp.

◆ parseTryCallDestinations()

mlir::ParseResult parseTryCallDestinations ( mlir::OpAsmParser & parser,
mlir::OperationState & result )
static

Definition at line 988 of file CIRDialect.cpp.

Referenced by parseCallCommon().

◆ parseTryHandlerRegions()

mlir::ParseResult parseTryHandlerRegions ( mlir::OpAsmParser & parser,
llvm::SmallVectorImpl< std::unique_ptr< mlir::Region > > & handlerRegions,
mlir::ArrayAttr & handlerTypes )
static

Definition at line 4276 of file CIRDialect.cpp.

◆ printAssumeBundle()

void printAssumeBundle ( OpAsmPrinter & p,
cir::AssumeOp op,
cir::AssumeBundleKindAttr kindAttr,
OperandRange bundleArgs,
TypeRange bundleArgTypes )
static

Definition at line 379 of file CIRDialect.cpp.

References kind.

◆ printCallCommon()

void printCallCommon ( mlir::Operation * op,
mlir::FlatSymbolRefAttr calleeSym,
mlir::Value indirectCallee,
mlir::OpAsmPrinter & printer,
bool isNothrow,
cir::SideEffect sideEffect,
ArrayAttr argAttrs,
ArrayAttr resAttrs,
mlir::Block * normalDest = nullptr,
mlir::Block * unwindDest = nullptr )
static

Definition at line 1115 of file CIRDialect.cpp.

◆ printConstant()

void printConstant ( OpAsmPrinter & p,
Attribute value )
static

Definition at line 1951 of file CIRDialect.cpp.

Referenced by printGlobalOpTypeAndInitialValue().

◆ printEhDispatchDestinations()

void printEhDispatchDestinations ( OpAsmPrinter & p,
cir::EhDispatchOp op,
mlir::ArrayAttr catchTypes,
SuccessorRange catchDestinations,
Block * defaultDestination,
mlir::UnitAttr defaultIsCatchAll )
static

Definition at line 4519 of file CIRDialect.cpp.

◆ printGlobalAddressSpaceValue()

void printGlobalAddressSpaceValue ( mlir::AsmPrinter & printer,
cir::GlobalOp op,
mlir::ptr::MemorySpaceAttrInterface attr )

Definition at line 1167 of file CIRTypes.cpp.

References printAddressSpaceValue().

◆ printGlobalOpTypeAndInitialValue()

void printGlobalOpTypeAndInitialValue ( OpAsmPrinter & p,
cir::GlobalOp op,
TypeAttr type,
Attribute initAttr,
mlir::Region & ctorRegion,
mlir::Region & dtorRegion )
static

Definition at line 2061 of file CIRDialect.cpp.

References printConstant().

◆ printIndirectBrOpSucessors()

void printIndirectBrOpSucessors ( OpAsmPrinter & p,
cir::IndirectBrOp op,
Type flagType,
SuccessorRange succs,
OperandRangeRange succOperands,
const TypeRangeRange & succOperandsTypes )

Definition at line 1722 of file CIRDialect.cpp.

◆ printInlineKindAttr()

void printInlineKindAttr ( OpAsmPrinter & p,
cir::InlineKindAttr inlineKindAttr )

Definition at line 241 of file CIRDialect.cpp.

◆ printOmittedTerminatorRegion()

void printOmittedTerminatorRegion ( mlir::OpAsmPrinter & printer,
cir::ScopeOp & op,
mlir::Region & region )
static

Definition at line 260 of file CIRDialect.cpp.

References omitRegionTerm().

◆ printSwitchFlatOpCases()

void printSwitchFlatOpCases ( OpAsmPrinter & p,
cir::SwitchFlatOp op,
Type flagType,
mlir::ArrayAttr caseValues,
SuccessorRange caseDestinations,
OperandRangeRange caseOperands,
const TypeRangeRange & caseOperandTypes )
static

Definition at line 1911 of file CIRDialect.cpp.

◆ printTryHandlerRegions()

void printTryHandlerRegions ( mlir::OpAsmPrinter & printer,
cir::TryOp op,
mlir::MutableArrayRef< mlir::Region > handlerRegions,
mlir::ArrayAttr handlerTypes )
static

Definition at line 4242 of file CIRDialect.cpp.

◆ tryFoldCastChain()

Value tryFoldCastChain ( cir::CastOp op)
static

Definition at line 849 of file CIRDialect.cpp.

References isCirFunctionPointerType(), and isIntOrBoolCast().

◆ verifyArrayCtorDtor()

template<typename Op>
LogicalResult verifyArrayCtorDtor ( Op op)
static

Definition at line 297 of file CIRDialect.cpp.

◆ verifyBinaryOverflowOp()

LogicalResult verifyBinaryOverflowOp ( mlir::Operation * op,
bool noSignedWrap,
bool noUnsignedWrap,
bool saturated,
bool hasSat )
static

Definition at line 2801 of file CIRDialect.cpp.

◆ verifyCallCommInSymbolUses()

LogicalResult verifyCallCommInSymbolUses ( mlir::Operation * op,
SymbolTableCollection & symbolTable )
static

Definition at line 1200 of file CIRDialect.cpp.

References cir::MissingFeatures::opCallCallConv().

◆ verifyMemberPtrCast()

LogicalResult verifyMemberPtrCast ( Operation * op,
mlir::Value src,
mlir::Type resultTy )
static

Definition at line 3057 of file CIRDialect.cpp.

References cir::MissingFeatures::memberFuncPtrCast().