Attributes


ASTCXXConstructorDeclAttr

Wraps a ‘const clang::CXXConstructorDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::CXXConstructorDecl *  

ASTCXXConversionDeclAttr

Wraps a ‘const clang::CXXConversionDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::CXXConversionDecl *  

ASTCXXDestructorDeclAttr

Wraps a ‘const clang::CXXDestructorDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::CXXDestructorDecl *  

ASTCXXMethodDeclAttr

Wraps a ‘const clang::CXXMethodDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::CXXMethodDecl *  

ASTCallExprAttr

Wraps a ‘const clang::CallExpr *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::CallExpr *  

ASTDeclAttr

Wraps a ‘const clang::Decl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::Decl *  

ASTExprAttr

Wraps a ‘const clang::Expr *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::Expr *  

ASTFunctionDeclAttr

Wraps a ‘const clang::FunctionDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::FunctionDecl *  

ASTRecordDeclAttr

Wraps a ‘const clang::RecordDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::RecordDecl *  

ASTTagDeclAttr

Wraps a ‘const clang::TagDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::TagDecl *  

ASTTypeDeclAttr

Wraps a ‘const clang::TypeDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::TypeDecl *  

ASTVarDeclAttr

Wraps a ‘const clang::VarDecl *' AST node.

Operations optionally refer to this node, they could be available depending on the CIR lowering stage. Whether it's attached to the appropriated CIR operation is delegated to the operation verifier.

This always implies a non-null AST reference (verified).

Parameters:

Parameter C++ type Description
ast const clang::VarDecl *  

BitfieldInfoAttr

Represents a bit field info

Syntax:

#cir.bitfield_info<
  StringAttr,   # name
  Type,   # storage_type
  uint64_t,   # size
  uint64_t,   # offset
  bool   # is_signed
>

Holds the next information about bitfields: name, storage type, a bitfield size and position in the storage, if the bitfield is signed or not.

Parameters:

Parameter C++ type Description
name StringAttr  
storage_type Type  
size uint64_t  
offset uint64_t  
is_signed bool  

BoolAttr

Represent true/false for !cir.bool types

Syntax:

#cir.bool<
  mlir::cir::BoolType,   # type
  bool   # value
>

The BoolAttr represents a ‘true' or ‘false' value.

Parameters:

Parameter C++ type Description
type mlir::cir::BoolType  
value bool  

CmpThreeWayInfoAttr

Holds information about a three-way comparison operation

Syntax:

#cir.cmp3way_info<
  CmpOrdering,   # ordering
  int64_t,   # lt
  int64_t,   # eq
  int64_t,   # gt
  std::optional<int64_t>   # unordered
>

The #cmp3way_info attribute contains information about a three-way comparison operation cir.cmp3way.

The ordering parameter gives the ordering kind of the three-way comparison operation. It may be either strong ordering or partial ordering.

Given the two input operands of the three-way comparison operation lhs and rhs, the lt, eq, gt, and unordered parameters gives the result value that should be produced by the three-way comparison operation when the ordering between lhs and rhs is lhs < rhs, lhs == rhs, lhs > rhs, or neither, respectively.

Parameters:

Parameter C++ type Description
ordering CmpOrdering  
lt int64_t  
eq int64_t  
gt int64_t  
unordered std::optional<int64_t>  

ConstArrayAttr

A constant array from ArrayAttr or StringRefAttr

An CIR array attribute is an array of literals of the specified attr types.

Parameters:

Parameter C++ type Description
type ::mlir::Type  
elts Attribute  
trailingZerosNum int  

ConstPtrAttr

Holds a constant pointer value

Syntax:

#cir.ptr<
  ::mlir::cir::PointerType,   # type
  uint64_t   # value
>

A pointer attribute is a literal attribute that represents an integral value of a pointer type.

Parameters:

Parameter C++ type Description
type ::mlir::cir::PointerType  
value uint64_t  

ConstStructAttr

Represents a constant struct

Syntax:

#cir.const_struct<
  ::mlir::Type,   # type
  ArrayAttr   # members
>

Effectively supports "struct-like" constants. It's must be built from an mlir::ArrayAttr instance where each elements is a typed attribute (mlir::TypedAttribute).

Example:

cir.global external @rgb2 = #cir.const_struct<{0 : i8,
                                               5 : i64, #cir.null : !cir.ptr<i8>
                                              }> : !cir.struct<"", i8, i64, !cir.ptr<i8>>

Parameters:

Parameter C++ type Description
type ::mlir::Type  
members ArrayAttr  

DataMemberAttr

Holds a constant data member pointer value

Syntax:

#cir.data_member<
  mlir::cir::DataMemberType,   # type
  std::optional<size_t>   # memberIndex
>

A data member attribute is a literal attribute that represents a constant pointer-to-data-member value.

The memberIndex parameter represents the index of the pointed-to member within its containing struct. It is an optional parameter; lack of this parameter indicates a null pointer-to-data-member value.

Example:

#ptr = #cir.data_member<1> : !cir.data_member<!s32i in !ty_22Point22>

#null = #cir.data_member<null> : !cir.data_member<!s32i in !ty_22Point22>

Parameters:

Parameter C++ type Description
type mlir::cir::DataMemberType  
memberIndex std::optional<size_t>  

DynamicCastInfoAttr

ABI specific information about a dynamic cast

Syntax:

#cir.dyn_cast_info<
  ::mlir::cir::GlobalViewAttr,   # srcRtti
  ::mlir::cir::GlobalViewAttr,   # destRtti
  FlatSymbolRefAttr,   # runtimeFunc
  FlatSymbolRefAttr,   # badCastFunc
  ::mlir::cir::IntAttr   # offsetHint
>

Provide ABI specific information about a dynamic cast operation.

The srcRtti and the destRtti parameters give the RTTI of the source struct type and the destination struct type, respectively.

The runtimeFunc parameter gives the __dynamic_cast function which is provided by the runtime. The badCastFunc parameter gives the __cxa_bad_cast function which is also provided by the runtime.

The offsetHint parameter gives the hint value that should be passed to the __dynamic_cast runtime function.

Parameters:

Parameter C++ type Description
srcRtti ::mlir::cir::GlobalViewAttr Provides constant access to a global address
destRtti ::mlir::cir::GlobalViewAttr Provides constant access to a global address
runtimeFunc FlatSymbolRefAttr  
badCastFunc FlatSymbolRefAttr  
offsetHint ::mlir::cir::IntAttr An Attribute containing a integer value

ExtraFuncAttributesAttr

Represents aggregated attributes for a function

Syntax:

#cir.extra<
  DictionaryAttr   # elements
>

This is a wrapper of dictionary attrbiute that contains extra attributes of a function.

Parameters:

Parameter C++ type Description
elements DictionaryAttr  

FPAttr

An attribute containing a floating-point value

Syntax:

#cir.fp<
  ::mlir::Type,   # type
  APFloat   # value
>

An fp attribute is a literal attribute that represents a floating-point value of the specified floating-point type.

Parameters:

Parameter C++ type Description
type ::mlir::Type  
value APFloat  

GlobalCtorAttr

Marks a function as a global constructor

Syntax:

#cir.global_ctor<
  StringAttr,   # name
  int   # priority
>

A function with this attribute executes before main()

Parameters:

Parameter C++ type Description
name StringAttr  
priority int  

GlobalDtorAttr

Marks a function as a global destructor

Syntax:

#cir.global_dtor<
  StringAttr,   # name
  int   # priority
>

A function with this attribute excutes before module unloading

Parameters:

Parameter C++ type Description
name StringAttr  
priority int  

GlobalViewAttr

Provides constant access to a global address

Syntax:

#cir.global_view<
  ::mlir::Type,   # type
  FlatSymbolRefAttr,   # symbol
  ArrayAttr   # indices
>

Get constant address of global symbol and optionally apply offsets to access existing subelements. It provides a way to access globals from other global and always produces a pointer.

The type of the input symbol can be different from #cir.global_view output type, since a given view of the global might require a static cast for initializing other globals.

A list of indices can be optionally passed and each element subsequently indexes underlying types. For symbol types like !cir.array and !cir.struct, it leads to the constant address of sub-elements, while for !cir.ptr, an offset is applied. The first index is relative to the original symbol type, not the produced one.

Example:

  cir.global external @s = @".str2": !cir.ptr<i8>
  cir.global external @x = #cir.global_view<@s> : !cir.ptr<i8>

  cir.global external @rgb = #cir.const_array<[0 : i8, -23 : i8, 33 : i8] : !cir.array<i8 x 3>>
  cir.global external @elt_ptr = #cir.global_view<@rgb, [1]> : !cir.ptr<i8>
  cir.global external @table_of_ptrs = #cir.const_array<[#cir.global_view<@rgb, [1]> : !cir.ptr<i8>] : !cir.array<!cir.ptr<i8> x 1>>

Parameters:

Parameter C++ type Description
type ::mlir::Type  
symbol FlatSymbolRefAttr  
indices ArrayAttr  

InlineAttr

Inline attribute

Syntax:

#cir.inline<
  InlineKind   # value
>

Inline attributes represents user directives.

Parameters:

Parameter C++ type Description
value InlineKind  

IntAttr

An Attribute containing a integer value

An integer attribute is a literal attribute that represents an integral value of the specified integer type.

Parameters:

Parameter C++ type Description
type ::mlir::Type  
value APInt  

LangAttr

Module source language

Represents the source language used to generate the module.

Example:

// Module compiled from C.
module attributes {cir.lang = cir.lang<c>} {}
// Module compiled from C++.
module attributes {cir.lang = cir.lang<cxx>} {}

Parameters:

Parameter C++ type Description
lang ::mlir::cir::SourceLanguage Source language

NoThrowAttr

Syntax: #cir.nothrow

OptNoneAttr

Syntax: #cir.optnone

SignedOverflowBehaviorAttr

Parameters:

Parameter C++ type Description
behavior sob::SignedOverflowBehavior  

StructLayoutAttr

ABI specific information about a struct layout

Syntax:

#cir.struct_layout<
  unsigned,   # size
  unsigned,   # alignment
  bool,   # padded
  mlir::Type,   # largest_member
  mlir::ArrayAttr   # offsets
>

Holds layout information often queried by !cir.struct users during lowering passes and optimizations.

Parameters:

Parameter C++ type Description
size unsigned  
alignment unsigned  
padded bool  
largest_member mlir::Type  
offsets mlir::ArrayAttr  

TypeInfoAttr

Represents a typeinfo used for RTTI

Syntax:

#cir.typeinfo<
  ::mlir::Type,   # type
  mlir::ArrayAttr   # data
>

The typeinfo data for a given class is stored into an ArrayAttr. The layout is determined by the C++ ABI used (clang only implements itanium on CIRGen).

The verifier enforces that the output type is always a !cir.struct, and that the ArrayAttr element types match the equivalent member type for the resulting struct, i.e, a GlobalViewAttr for symbol reference or an IntAttr for flags.

Example:

cir.global "private" external @_ZTVN10__cxxabiv120__si_class_type_infoE : !cir.ptr<i32>

cir.global external @type_info_B = #cir.typeinfo<<
  {#cir.global_view<@_ZTVN10__cxxabiv120__si_class_type_infoE, [2]> : !cir.ptr<i8>}
>> : !cir.struct<"", !cir.ptr<i8>>

Parameters:

Parameter C++ type Description
type ::mlir::Type  
data mlir::ArrayAttr  

VTableAttr

Represents a C++ vtable

Syntax:

#cir.vtable<
  ::mlir::Type,   # type
  ArrayAttr   # vtable_data
>

Wraps a #cir.const_struct containing vtable data.

Example:

cir.global linkonce_odr @_ZTV1B = #cir.vtable<<
    {#cir.const_array<[#cir.null : !cir.ptr<i8>,
     #cir.global_view<@_ZTI1B> : !cir.ptr<i8>,
     #cir.global_view<@_ZN1BD1Ev> : !cir.ptr<i8>,
     #cir.global_view<@_ZN1BD0Ev> : !cir.ptr<i8>,
     #cir.global_view<@_ZNK1A5quackEv> : !cir.ptr<i8>]>
     : !cir.array<!cir.ptr<i8> x 5>}>>
  : !cir.struct<"", !cir.array<!cir.ptr<i8> x 5>>

Parameters:

Parameter C++ type Description
type ::mlir::Type  
vtable_data ArrayAttr  

ZeroAttr

Attribute to represent zero initialization

Syntax:

#cir.zero<
  ::mlir::Type   # type
>

The ZeroAttr is used to indicate zero initialization on structs.

Parameters:

Parameter C++ type Description
type ::mlir::Type