clang 24.0.0git
LoweringHelpers.cpp File Reference
#include "clang/CIR/LoweringHelpers.h"
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
#include "mlir/Dialect/LLVMIR/LLVMTypes.h"
#include "mlir/IR/BuiltinTypes.h"
#include "mlir/IR/SymbolTable.h"
#include "mlir/Interfaces/DataLayoutInterfaces.h"

Go to the source code of this file.

Functions

static unsigned getIntOrBoolBitWidth (mlir::Type ty)
mlir::DenseElementsAttr convertStringAttrToDenseElementsAttr (cir::ConstArrayAttr attr, mlir::Type type)
template<>
mlir::APInt getZeroInitFromType (mlir::Type ty)
template<>
mlir::APFloat getZeroInitFromType (mlir::Type ty)
template<typename AttrTy, typename StorageTy>
void convertToDenseElementsAttrImpl (cir::ConstArrayAttr attr, llvm::SmallVectorImpl< StorageTy > &values, const llvm::SmallVectorImpl< int64_t > &currentDims, int64_t dimIndex, int64_t currentIndex)
template<typename AttrTy, typename StorageTy>
mlir::DenseElementsAttr convertToDenseElementsAttr (cir::ConstArrayAttr attr, const llvm::SmallVectorImpl< int64_t > &dims, mlir::Type elementType, mlir::Type convertedElementType)
static bool globalViewMatchesPointerLeaf (cir::GlobalViewAttr gv, mlir::ModuleOp moduleOp, const mlir::TypeConverter *converter)
 Return true when gv can be lowered to a FlatSymbolRefAttr leaf without addrspacecast or bitcast (mirrors CIRAttrToValue::visitCirAttr).
static std::optional< mlir::Attribute > lowerPointerElementAttr (mlir::Attribute elt, mlir::MLIRContext *ctx, mlir::ModuleOp moduleOp, const mlir::TypeConverter *converter)
 Lower a single pointer-element of a cir.const_array to an LLVM-dialect constant leaf suitable for a bulk llvm.mlir.constant.
static bool containsPoison (mlir::Attribute attr)
std::optional< mlir::Attribute > lowerConstArrayAttr (cir::ConstArrayAttr constArr, const mlir::TypeConverter *converter, mlir::ModuleOp moduleOp)
static std::optional< mlir::Attribute > lowerConstRecordMemberAttr (mlir::Attribute attr, const mlir::TypeConverter *converter, mlir::ModuleOp moduleOp)
 Lower a constant attribute that initializes a single member of a record (or a leaf of a nested aggregate) to an LLVM-dialect attribute that can be attached directly to an llvm.mlir.global, avoiding an insertvalue initializer region.
static bool shouldPackFAMStruct (const mlir::DataLayout &dataLayout, llvm::ArrayRef< mlir::Type > members)
static mlir::Type adjustGlobalStructTypeForInit (mlir::LLVM::LLVMStructType structTy, cir::ConstRecordAttr constRecord, const mlir::TypeConverter &converter, const mlir::DataLayout &dataLayout)
static mlir::Type adjustGlobalUnionTypeForInit (mlir::LLVM::LLVMStructType structTy, cir::ConstRecordAttr constRecord, const mlir::TypeConverter &converter, const mlir::DataLayout &dataLayout)
mlir::Type adjustGlobalTypeForInit (mlir::Type llvmType, mlir::Attribute init, const mlir::TypeConverter &converter, const mlir::DataLayout &dataLayout)
 Adjust llvmType (the converted type of init) to the concrete LLVM type a global constant initialized with init actually lowers to.
std::optional< mlir::Attribute > lowerConstRecordAttr (cir::ConstRecordAttr constRecord, const mlir::TypeConverter *converter, mlir::ModuleOp moduleOp)
mlir::Value getConstAPInt (mlir::OpBuilder &bld, mlir::Location loc, mlir::Type typ, const llvm::APInt &val)
mlir::Value getConst (mlir::OpBuilder &bld, mlir::Location loc, mlir::Type typ, unsigned val)
mlir::Value createShL (mlir::OpBuilder &bld, mlir::Value lhs, unsigned rhs)
mlir::Value createAShR (mlir::OpBuilder &bld, mlir::Value lhs, unsigned rhs)
mlir::Value createAnd (mlir::OpBuilder &bld, mlir::Value lhs, const llvm::APInt &rhs)
mlir::Value createLShR (mlir::OpBuilder &bld, mlir::Value lhs, unsigned rhs)

Function Documentation

◆ adjustGlobalStructTypeForInit()

mlir::Type adjustGlobalStructTypeForInit ( mlir::LLVM::LLVMStructType structTy,
cir::ConstRecordAttr constRecord,
const mlir::TypeConverter & converter,
const mlir::DataLayout & dataLayout )
static

Definition at line 366 of file LoweringHelpers.cpp.

References adjustGlobalTypeForInit(), and shouldPackFAMStruct().

Referenced by adjustGlobalTypeForInit().

◆ adjustGlobalTypeForInit()

mlir::Type adjustGlobalTypeForInit ( mlir::Type llvmType,
mlir::Attribute init,
const mlir::TypeConverter & converter,
const mlir::DataLayout & dataLayout )

Adjust llvmType (the converted type of init) to the concrete LLVM type a global constant initialized with init actually lowers to.

This differs from a plain type conversion for flexible-array-member and union initializers, and the adjustment recurses through nested aggregates. Returns llvmType unchanged when no adjustment is needed. This is the single source of truth for the shape of a lowered record constant; the value-producing paths (the insertvalue visitor and lowerConstRecordAttr) conform to it.

Definition at line 465 of file LoweringHelpers.cpp.

References adjustGlobalStructTypeForInit(), and adjustGlobalUnionTypeForInit().

Referenced by adjustGlobalStructTypeForInit(), adjustGlobalUnionTypeForInit(), and lowerConstRecordAttr().

◆ adjustGlobalUnionTypeForInit()

mlir::Type adjustGlobalUnionTypeForInit ( mlir::LLVM::LLVMStructType structTy,
cir::ConstRecordAttr constRecord,
const mlir::TypeConverter & converter,
const mlir::DataLayout & dataLayout )
static

Definition at line 424 of file LoweringHelpers.cpp.

References adjustGlobalTypeForInit(), and getType().

Referenced by adjustGlobalTypeForInit().

◆ containsPoison()

bool containsPoison ( mlir::Attribute attr)
static

Definition at line 203 of file LoweringHelpers.cpp.

References containsPoison().

Referenced by containsPoison(), and lowerConstArrayAttr().

◆ convertStringAttrToDenseElementsAttr()

mlir::DenseElementsAttr convertStringAttrToDenseElementsAttr ( cir::ConstArrayAttr attr,
mlir::Type type )

Definition at line 29 of file LoweringHelpers.cpp.

References getIntOrBoolBitWidth().

Referenced by lowerConstArrayAttr().

◆ convertToDenseElementsAttr()

template<typename AttrTy, typename StorageTy>
mlir::DenseElementsAttr convertToDenseElementsAttr ( cir::ConstArrayAttr attr,
const llvm::SmallVectorImpl< int64_t > & dims,
mlir::Type elementType,
mlir::Type convertedElementType )

Definition at line 125 of file LoweringHelpers.cpp.

References convertToDenseElementsAttrImpl(), and getZeroInitFromType().

Referenced by lowerConstArrayAttr().

◆ convertToDenseElementsAttrImpl()

template<typename AttrTy, typename StorageTy>
void convertToDenseElementsAttrImpl ( cir::ConstArrayAttr attr,
llvm::SmallVectorImpl< StorageTy > & values,
const llvm::SmallVectorImpl< int64_t > & currentDims,
int64_t dimIndex,
int64_t currentIndex )
Parameters
attrthe ConstArrayAttr to convert
valuesthe output parameter, the values array to fill
currentDimsthe shpae of tensor we're going to convert to
dimIndexthe current dimension we're processing
currentIndexthe current index in the values array

Definition at line 73 of file LoweringHelpers.cpp.

References convertToDenseElementsAttrImpl().

Referenced by convertToDenseElementsAttr(), and convertToDenseElementsAttrImpl().

◆ createAnd()

mlir::Value createAnd ( mlir::OpBuilder & bld,
mlir::Value lhs,
const llvm::APInt & rhs )

Definition at line 549 of file LoweringHelpers.cpp.

References getConstAPInt().

◆ createAShR()

mlir::Value createAShR ( mlir::OpBuilder & bld,
mlir::Value lhs,
unsigned rhs )

Definition at line 542 of file LoweringHelpers.cpp.

References getConst().

◆ createLShR()

mlir::Value createLShR ( mlir::OpBuilder & bld,
mlir::Value lhs,
unsigned rhs )

Definition at line 555 of file LoweringHelpers.cpp.

References getConst().

◆ createShL()

mlir::Value createShL ( mlir::OpBuilder & bld,
mlir::Value lhs,
unsigned rhs )

Definition at line 535 of file LoweringHelpers.cpp.

References getConst().

◆ getConst()

mlir::Value getConst ( mlir::OpBuilder & bld,
mlir::Location loc,
mlir::Type typ,
unsigned val )

Definition at line 530 of file LoweringHelpers.cpp.

Referenced by createAShR(), createLShR(), and createShL().

◆ getConstAPInt()

mlir::Value getConstAPInt ( mlir::OpBuilder & bld,
mlir::Location loc,
mlir::Type typ,
const llvm::APInt & val )

Definition at line 525 of file LoweringHelpers.cpp.

Referenced by createAnd().

◆ getIntOrBoolBitWidth()

unsigned getIntOrBoolBitWidth ( mlir::Type ty)
static

Definition at line 20 of file LoweringHelpers.cpp.

Referenced by convertStringAttrToDenseElementsAttr().

◆ getZeroInitFromType() [1/2]

template<>
mlir::APInt getZeroInitFromType ( mlir::Type ty)

Definition at line 55 of file LoweringHelpers.cpp.

◆ getZeroInitFromType() [2/2]

template<>
mlir::APFloat getZeroInitFromType ( mlir::Type ty)

Definition at line 62 of file LoweringHelpers.cpp.

◆ globalViewMatchesPointerLeaf()

bool globalViewMatchesPointerLeaf ( cir::GlobalViewAttr gv,
mlir::ModuleOp moduleOp,
const mlir::TypeConverter * converter )
static

Return true when gv can be lowered to a FlatSymbolRefAttr leaf without addrspacecast or bitcast (mirrors CIRAttrToValue::visitCirAttr).

Definition at line 142 of file LoweringHelpers.cpp.

Referenced by lowerPointerElementAttr().

◆ lowerConstArrayAttr()

std::optional< mlir::Attribute > lowerConstArrayAttr ( cir::ConstArrayAttr constArr,
const mlir::TypeConverter * converter,
mlir::ModuleOp moduleOp )

◆ lowerConstRecordAttr()

std::optional< mlir::Attribute > lowerConstRecordAttr ( cir::ConstRecordAttr constRecord,
const mlir::TypeConverter * converter,
mlir::ModuleOp moduleOp )

◆ lowerConstRecordMemberAttr()

std::optional< mlir::Attribute > lowerConstRecordMemberAttr ( mlir::Attribute attr,
const mlir::TypeConverter * converter,
mlir::ModuleOp moduleOp )
static

Lower a constant attribute that initializes a single member of a record (or a leaf of a nested aggregate) to an LLVM-dialect attribute that can be attached directly to an llvm.mlir.global, avoiding an insertvalue initializer region.

Returns std::nullopt when the attribute cannot be represented as a single constant attribute (e.g. an indexed GlobalViewAttr), in which case the caller falls back to the region-based lowering.

Definition at line 291 of file LoweringHelpers.cpp.

References lowerConstArrayAttr(), lowerConstRecordAttr(), and lowerPointerElementAttr().

Referenced by lowerConstRecordAttr().

◆ lowerPointerElementAttr()

std::optional< mlir::Attribute > lowerPointerElementAttr ( mlir::Attribute elt,
mlir::MLIRContext * ctx,
mlir::ModuleOp moduleOp,
const mlir::TypeConverter * converter )
static

Lower a single pointer-element of a cir.const_array to an LLVM-dialect constant leaf suitable for a bulk llvm.mlir.constant.

Only handles address-of-global without indices and null pointers; indexed global views must use the per-element llvm.insertvalue fallback.

Definition at line 187 of file LoweringHelpers.cpp.

References globalViewMatchesPointerLeaf().

Referenced by lowerConstArrayAttr(), and lowerConstRecordMemberAttr().

◆ shouldPackFAMStruct()

bool shouldPackFAMStruct ( const mlir::DataLayout & dataLayout,
llvm::ArrayRef< mlir::Type > members )
static

Definition at line 339 of file LoweringHelpers.cpp.

Referenced by adjustGlobalStructTypeForInit().