12#ifndef CLANG_CIR_LOWERTOLLVM_H
13#define CLANG_CIR_LOWERTOLLVM_H
15#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
16#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
17#include "mlir/Transforms/DialectConversion.h"
27 mlir::ConversionPatternRewriter &rewriter,
28 const mlir::TypeConverter *converter);
33 cir::SideEffect sideEffect,
34 mlir::LLVM::MemoryEffectsAttr &memoryEffect,
35 bool &noUnwind,
bool &willReturn);
38 :
public mlir::OpConversionPattern<cir::AssumeOp> {
40 using mlir::OpConversionPattern<cir::AssumeOp>::OpConversionPattern;
44 mlir::ConversionPatternRewriter &)
const override;
48 :
public mlir::OpConversionPattern<cir::AssumeAlignedOp> {
50 using mlir::OpConversionPattern<cir::AssumeAlignedOp>::OpConversionPattern;
54 mlir::ConversionPatternRewriter &)
const override;
58 :
public mlir::OpConversionPattern<cir::AssumeSepStorageOp> {
60 using mlir::OpConversionPattern<cir::AssumeSepStorageOp>::OpConversionPattern;
64 mlir::ConversionPatternRewriter &)
const override;
68 :
public mlir::OpConversionPattern<cir::BitClrsbOp> {
70 using mlir::OpConversionPattern<cir::BitClrsbOp>::OpConversionPattern;
74 mlir::ConversionPatternRewriter &)
const override;
78 :
public mlir::OpConversionPattern<cir::BitClzOp> {
80 using mlir::OpConversionPattern<cir::BitClzOp>::OpConversionPattern;
84 mlir::ConversionPatternRewriter &)
const override;
88 :
public mlir::OpConversionPattern<cir::BitCtzOp> {
90 using mlir::OpConversionPattern<cir::BitCtzOp>::OpConversionPattern;
94 mlir::ConversionPatternRewriter &)
const override;
98 :
public mlir::OpConversionPattern<cir::BitFfsOp> {
100 using mlir::OpConversionPattern<cir::BitFfsOp>::OpConversionPattern;
104 mlir::ConversionPatternRewriter &)
const override;
108 :
public mlir::OpConversionPattern<cir::BitParityOp> {
110 using mlir::OpConversionPattern<cir::BitParityOp>::OpConversionPattern;
114 mlir::ConversionPatternRewriter &)
const override;
118 :
public mlir::OpConversionPattern<cir::BitPopcountOp> {
120 using mlir::OpConversionPattern<cir::BitPopcountOp>::OpConversionPattern;
124 mlir::ConversionPatternRewriter &)
const override;
128 :
public mlir::OpConversionPattern<cir::BitReverseOp> {
130 using mlir::OpConversionPattern<cir::BitReverseOp>::OpConversionPattern;
134 mlir::ConversionPatternRewriter &)
const override;
138 :
public mlir::OpConversionPattern<cir::BrCondOp> {
140 using mlir::OpConversionPattern<cir::BrCondOp>::OpConversionPattern;
144 mlir::ConversionPatternRewriter &)
const override;
148 :
public mlir::OpConversionPattern<cir::ByteSwapOp> {
150 using mlir::OpConversionPattern<cir::ByteSwapOp>::OpConversionPattern;
154 mlir::ConversionPatternRewriter &)
const override;
158 mlir::DataLayout
const &dataLayout;
160 mlir::Type convertTy(mlir::Type ty)
const;
164 mlir::MLIRContext *context,
165 mlir::DataLayout
const &dataLayout)
166 : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
170 mlir::ConversionPatternRewriter &)
const override;
174 :
public mlir::OpConversionPattern<cir::ExpectOp> {
176 using mlir::OpConversionPattern<cir::ExpectOp>::OpConversionPattern;
180 mlir::ConversionPatternRewriter &)
const override;
184 :
public mlir::OpConversionPattern<cir::ReturnOp> {
186 using mlir::OpConversionPattern<cir::ReturnOp>::OpConversionPattern;
190 mlir::ConversionPatternRewriter &)
const override;
194 :
public mlir::OpConversionPattern<cir::RotateOp> {
196 using mlir::OpConversionPattern<cir::RotateOp>::OpConversionPattern;
200 mlir::ConversionPatternRewriter &)
const override;
205 using mlir::OpConversionPattern<cir::CallOp>::OpConversionPattern;
209 mlir::ConversionPatternRewriter &rewriter)
const override;
213 :
public mlir::OpConversionPattern<cir::ReturnAddrOp> {
215 using mlir::OpConversionPattern<cir::ReturnAddrOp>::OpConversionPattern;
219 mlir::ConversionPatternRewriter &)
const override;
223 :
public mlir::OpConversionPattern<cir::FrameAddrOp> {
225 using mlir::OpConversionPattern<cir::FrameAddrOp>::OpConversionPattern;
229 mlir::ConversionPatternRewriter &)
const override;
233 :
public mlir::OpConversionPattern<cir::AllocaOp> {
234 mlir::DataLayout
const &dataLayout;
238 mlir::MLIRContext *context,
239 mlir::DataLayout
const &dataLayout)
240 : OpConversionPattern<
cir::AllocaOp>(typeConverter, context),
241 dataLayout(dataLayout) {}
243 using mlir::OpConversionPattern<cir::AllocaOp>::OpConversionPattern;
247 mlir::ConversionPatternRewriter &)
const override;
251 mlir::DataLayout
const &dataLayout;
255 mlir::MLIRContext *context,
256 mlir::DataLayout
const &dataLayout)
257 : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
261 mlir::ConversionPatternRewriter &)
const override;
265 :
public mlir::OpConversionPattern<cir::StoreOp> {
266 mlir::DataLayout
const &dataLayout;
270 mlir::MLIRContext *context,
271 mlir::DataLayout
const &dataLayout)
272 : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
276 mlir::ConversionPatternRewriter &)
const override;
280 :
public mlir::OpConversionPattern<cir::ConstantOp> {
283 mlir::MLIRContext *context)
284 : OpConversionPattern(typeConverter, context) {
285 setHasBoundedRewriteRecursion();
290 mlir::ConversionPatternRewriter &)
const override;
294 static mlir::StringRef getLinkageAttrNameString() {
return "linkage"; }
296 void lowerFuncAttributes(
297 cir::FuncOp func,
bool filterArgAndResAttrs,
298 mlir::SmallVectorImpl<mlir::NamedAttribute> &result)
const;
301 matchAndRewriteAlias(cir::FuncOp op, llvm::StringRef aliasee, mlir::Type ty,
303 mlir::ConversionPatternRewriter &rewriter)
const;
306 using mlir::OpConversionPattern<cir::FuncOp>::OpConversionPattern;
310 mlir::ConversionPatternRewriter &)
const override;
314 :
public mlir::OpConversionPattern<cir::SwitchFlatOp> {
316 using mlir::OpConversionPattern<cir::SwitchFlatOp>::OpConversionPattern;
320 mlir::ConversionPatternRewriter &)
const override;
324 :
public mlir::OpConversionPattern<cir::GetGlobalOp> {
326 using mlir::OpConversionPattern<cir::GetGlobalOp>::OpConversionPattern;
330 mlir::ConversionPatternRewriter &)
const override;
334 :
public mlir::OpConversionPattern<cir::GlobalOp> {
335 const mlir::DataLayout &dataLayout;
339 mlir::MLIRContext *context,
340 const mlir::DataLayout &dataLayout)
341 : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {
342 setHasBoundedRewriteRecursion();
347 mlir::ConversionPatternRewriter &rewriter)
const override;
350 mlir::LogicalResult matchAndRewriteRegionInitializedGlobal(
351 cir::GlobalOp op, mlir::Attribute init,
352 mlir::ConversionPatternRewriter &rewriter)
const;
354 void setupRegionInitializedLLVMGlobalOp(
355 cir::GlobalOp op, mlir::ConversionPatternRewriter &rewriter)
const;
357 mutable mlir::LLVM::ComdatOp comdatOp =
nullptr;
358 mlir::SymbolRefAttr getComdatAttr(cir::GlobalOp &op,
359 mlir::OpBuilder &builder)
const;
363 :
public mlir::OpConversionPattern<cir::UnaryOp> {
365 using mlir::OpConversionPattern<cir::UnaryOp>::OpConversionPattern;
369 mlir::ConversionPatternRewriter &)
const override;
373 mlir::LLVM::IntegerOverflowFlags getIntOverflowFlag(cir::BinOp op)
const;
376 using mlir::OpConversionPattern<cir::BinOp>::OpConversionPattern;
380 mlir::ConversionPatternRewriter &)
const override;
386 mlir::MLIRContext *context)
387 : OpConversionPattern(typeConverter, context) {
388 setHasBoundedRewriteRecursion();
393 mlir::ConversionPatternRewriter &)
const override;
397 :
public mlir::OpConversionPattern<cir::ShiftOp> {
399 using mlir::OpConversionPattern<cir::ShiftOp>::OpConversionPattern;
403 mlir::ConversionPatternRewriter &)
const override;
407 :
public mlir::OpConversionPattern<cir::SelectOp> {
409 using mlir::OpConversionPattern<cir::SelectOp>::OpConversionPattern;
413 mlir::ConversionPatternRewriter &)
const override;
418 using mlir::OpConversionPattern<cir::BrOp>::OpConversionPattern;
422 mlir::ConversionPatternRewriter &)
const override;
426 :
public mlir::OpConversionPattern<cir::GetMemberOp> {
428 using mlir::OpConversionPattern<cir::GetMemberOp>::OpConversionPattern;
432 mlir::ConversionPatternRewriter &)
const override;
436 :
public mlir::OpConversionPattern<cir::UnreachableOp> {
438 using mlir::OpConversionPattern<cir::UnreachableOp>::OpConversionPattern;
442 mlir::ConversionPatternRewriter &)
const override;
447 using mlir::OpConversionPattern<cir::TrapOp>::OpConversionPattern;
451 mlir::ConversionPatternRewriter &)
const override;
455 :
public mlir::OpConversionPattern<cir::PtrStrideOp> {
456 mlir::DataLayout
const &dataLayout;
460 mlir::MLIRContext *context,
461 mlir::DataLayout
const &dataLayout)
462 : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
463 using mlir::OpConversionPattern<cir::PtrStrideOp>::OpConversionPattern;
467 mlir::ConversionPatternRewriter &)
const override;
471 :
public mlir::OpConversionPattern<cir::BaseClassAddrOp> {
473 using mlir::OpConversionPattern<cir::BaseClassAddrOp>::OpConversionPattern;
477 mlir::ConversionPatternRewriter &)
const override;
481 :
public mlir::OpConversionPattern<cir::VTableAddrPointOp> {
483 using mlir::OpConversionPattern<cir::VTableAddrPointOp>::OpConversionPattern;
487 mlir::ConversionPatternRewriter &)
const override;
491 :
public mlir::OpConversionPattern<cir::VTableGetVPtrOp> {
493 using mlir::OpConversionPattern<cir::VTableGetVPtrOp>::OpConversionPattern;
497 mlir::ConversionPatternRewriter &)
const override;
501 :
public mlir::OpConversionPattern<cir::VTableGetVirtualFnAddrOp> {
503 using mlir::OpConversionPattern<
504 cir::VTableGetVirtualFnAddrOp>::OpConversionPattern;
508 mlir::ConversionPatternRewriter &)
const override;
512 :
public mlir::OpConversionPattern<cir::VTTAddrPointOp> {
514 using mlir::OpConversionPattern<cir::VTTAddrPointOp>::OpConversionPattern;
518 mlir::ConversionPatternRewriter &)
const override;
522 :
public mlir::OpConversionPattern<cir::StackSaveOp> {
524 using mlir::OpConversionPattern<cir::StackSaveOp>::OpConversionPattern;
528 mlir::ConversionPatternRewriter &)
const override;
532 :
public mlir::OpConversionPattern<cir::StackRestoreOp> {
534 using OpConversionPattern<cir::StackRestoreOp>::OpConversionPattern;
538 mlir::ConversionPatternRewriter &rewriter)
const override;
542 :
public mlir::OpConversionPattern<cir::VecCreateOp> {
544 using mlir::OpConversionPattern<cir::VecCreateOp>::OpConversionPattern;
548 mlir::ConversionPatternRewriter &)
const override;
552 :
public mlir::OpConversionPattern<cir::VecExtractOp> {
554 using mlir::OpConversionPattern<cir::VecExtractOp>::OpConversionPattern;
558 mlir::ConversionPatternRewriter &)
const override;
562 :
public mlir::OpConversionPattern<cir::VecInsertOp> {
564 using mlir::OpConversionPattern<cir::VecInsertOp>::OpConversionPattern;
568 mlir::ConversionPatternRewriter &)
const override;
572 :
public mlir::OpConversionPattern<cir::VecCmpOp> {
574 using mlir::OpConversionPattern<cir::VecCmpOp>::OpConversionPattern;
578 mlir::ConversionPatternRewriter &)
const override;
582 :
public mlir::OpConversionPattern<cir::VecSplatOp> {
584 using mlir::OpConversionPattern<cir::VecSplatOp>::OpConversionPattern;
588 mlir::ConversionPatternRewriter &)
const override;
592 :
public mlir::OpConversionPattern<cir::VecShuffleOp> {
594 using mlir::OpConversionPattern<cir::VecShuffleOp>::OpConversionPattern;
598 mlir::ConversionPatternRewriter &)
const override;
602 :
public mlir::OpConversionPattern<cir::VecShuffleDynamicOp> {
604 using mlir::OpConversionPattern<
605 cir::VecShuffleDynamicOp>::OpConversionPattern;
609 mlir::ConversionPatternRewriter &)
const override;
613 :
public mlir::OpConversionPattern<cir::VecTernaryOp> {
615 using mlir::OpConversionPattern<cir::VecTernaryOp>::OpConversionPattern;
619 mlir::ConversionPatternRewriter &)
const override;
623 :
public mlir::OpConversionPattern<cir::ComplexCreateOp> {
625 using mlir::OpConversionPattern<cir::ComplexCreateOp>::OpConversionPattern;
629 mlir::ConversionPatternRewriter &)
const override;
633 :
public mlir::OpConversionPattern<cir::ComplexRealOp> {
635 using mlir::OpConversionPattern<cir::ComplexRealOp>::OpConversionPattern;
639 mlir::ConversionPatternRewriter &)
const override;
643 :
public mlir::OpConversionPattern<cir::ComplexImagOp> {
645 using mlir::OpConversionPattern<cir::ComplexImagOp>::OpConversionPattern;
649 mlir::ConversionPatternRewriter &)
const override;
653 :
public mlir::OpConversionPattern<cir::ComplexImagPtrOp> {
655 using mlir::OpConversionPattern<cir::ComplexImagPtrOp>::OpConversionPattern;
659 mlir::ConversionPatternRewriter &)
const override;
663 :
public mlir::OpConversionPattern<cir::ComplexRealPtrOp> {
665 using mlir::OpConversionPattern<cir::ComplexRealPtrOp>::OpConversionPattern;
669 mlir::ConversionPatternRewriter &)
const override;
673 :
public mlir::OpConversionPattern<cir::ComplexAddOp> {
675 using mlir::OpConversionPattern<cir::ComplexAddOp>::OpConversionPattern;
679 mlir::ConversionPatternRewriter &)
const override;
683 :
public mlir::OpConversionPattern<cir::ComplexSubOp> {
685 using mlir::OpConversionPattern<cir::ComplexSubOp>::OpConversionPattern;
689 mlir::ConversionPatternRewriter &)
const override;
693 :
public mlir::OpConversionPattern<cir::SetBitfieldOp> {
695 using mlir::OpConversionPattern<cir::SetBitfieldOp>::OpConversionPattern;
699 mlir::ConversionPatternRewriter &)
const override;
703 :
public mlir::OpConversionPattern<cir::GetBitfieldOp> {
705 using mlir::OpConversionPattern<cir::GetBitfieldOp>::OpConversionPattern;
709 mlir::ConversionPatternRewriter &)
const override;
714 using mlir::OpConversionPattern<cir::FAbsOp>::OpConversionPattern;
718 mlir::ConversionPatternRewriter &)
const override;
722 :
public mlir::OpConversionPattern<cir::InlineAsmOp> {
723 mlir::DataLayout
const &dataLayout;
727 mlir::MLIRContext *context,
728 mlir::DataLayout
const &dataLayout)
729 : OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
731 using mlir::OpConversionPattern<cir::InlineAsmOp>::OpConversionPattern;
735 mlir::ConversionPatternRewriter &)
const override;
739 :
public mlir::OpConversionPattern<cir::ThrowOp> {
741 using mlir::OpConversionPattern<cir::ThrowOp>::OpConversionPattern;
745 mlir::ConversionPatternRewriter &)
const override;
749 :
public mlir::OpConversionPattern<cir::VAStartOp> {
751 using mlir::OpConversionPattern<cir::VAStartOp>::OpConversionPattern;
755 mlir::ConversionPatternRewriter &)
const override;
759 :
public mlir::OpConversionPattern<cir::VAEndOp> {
761 using mlir::OpConversionPattern<cir::VAEndOp>::OpConversionPattern;
765 mlir::ConversionPatternRewriter &)
const override;
769 :
public mlir::OpConversionPattern<cir::VAArgOp> {
771 using mlir::OpConversionPattern<cir::VAArgOp>::OpConversionPattern;
775 mlir::ConversionPatternRewriter &)
const override;
CIRToLLVMAllocaOpLowering(mlir::TypeConverter const &typeConverter, mlir::MLIRContext *context, mlir::DataLayout const &dataLayout)
mlir::LogicalResult matchAndRewrite(cir::AllocaOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::AssumeAlignedOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::AssumeOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::AssumeSepStorageOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BaseClassAddrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BinOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitClrsbOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitClzOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitCtzOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitFfsOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitParityOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitPopcountOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BitReverseOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BrCondOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::BrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ByteSwapOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::CallOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override
CIRToLLVMCastOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context, mlir::DataLayout const &dataLayout)
mlir::LogicalResult matchAndRewrite(cir::CastOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
CIRToLLVMCmpOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context)
mlir::LogicalResult matchAndRewrite(cir::CmpOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexAddOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexCreateOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexImagOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexImagPtrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexRealOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexRealPtrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ComplexSubOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ConstantOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
CIRToLLVMConstantOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context)
mlir::LogicalResult matchAndRewrite(cir::ExpectOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::FAbsOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::FrameAddrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::FuncOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::GetBitfieldOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::GetGlobalOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::GetMemberOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::GlobalOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override
CIRToLLVMGlobalOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context, const mlir::DataLayout &dataLayout)
CIRToLLVMInlineAsmOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context, mlir::DataLayout const &dataLayout)
mlir::LogicalResult matchAndRewrite(cir::InlineAsmOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
CIRToLLVMLoadOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context, mlir::DataLayout const &dataLayout)
mlir::LogicalResult matchAndRewrite(cir::LoadOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
CIRToLLVMPtrStrideOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context, mlir::DataLayout const &dataLayout)
mlir::LogicalResult matchAndRewrite(cir::PtrStrideOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ReturnAddrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ReturnOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::RotateOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::SelectOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::SetBitfieldOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ShiftOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::StackRestoreOp op, OpAdaptor adaptor, mlir::ConversionPatternRewriter &rewriter) const override
mlir::LogicalResult matchAndRewrite(cir::StackSaveOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
CIRToLLVMStoreOpLowering(const mlir::TypeConverter &typeConverter, mlir::MLIRContext *context, mlir::DataLayout const &dataLayout)
mlir::LogicalResult matchAndRewrite(cir::StoreOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::SwitchFlatOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::ThrowOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::TrapOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::UnaryOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::UnreachableOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VAArgOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VAEndOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VAStartOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VTTAddrPointOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VTableAddrPointOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VTableGetVPtrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VTableGetVirtualFnAddrOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecCmpOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecCreateOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecInsertOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecShuffleDynamicOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecShuffleOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecSplatOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
mlir::LogicalResult matchAndRewrite(cir::VecTernaryOp op, OpAdaptor, mlir::ConversionPatternRewriter &) const override
void convertSideEffectForCall(mlir::Operation *callOp, bool isNothrow, cir::SideEffect sideEffect, mlir::LLVM::MemoryEffectsAttr &memoryEffect, bool &noUnwind, bool &willReturn)
mlir::Value lowerCirAttrAsValue(mlir::Operation *parentOp, const mlir::Attribute attr, mlir::ConversionPatternRewriter &rewriter, const mlir::TypeConverter *converter)
Switches on the type of attribute and calls the appropriate conversion.
mlir::LLVM::Linkage convertLinkage(cir::GlobalLinkageKind linkage)