Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/contrib/llvm-project/clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.h
213845 views
1
//====- LowerToLLVM.h- Lowering from CIR to LLVM --------------------------===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file declares an interface for converting CIR modules to LLVM IR.
10
//
11
//===----------------------------------------------------------------------===//
12
#ifndef CLANG_CIR_LOWERTOLLVM_H
13
#define CLANG_CIR_LOWERTOLLVM_H
14
15
#include "mlir/Dialect/LLVMIR/LLVMAttrs.h"
16
#include "mlir/Dialect/LLVMIR/LLVMDialect.h"
17
#include "mlir/Transforms/DialectConversion.h"
18
#include "clang/CIR/Dialect/IR/CIRDialect.h"
19
20
namespace cir {
21
22
namespace direct {
23
24
/// Convert a CIR attribute to an LLVM attribute. May use the datalayout for
25
/// lowering attributes to-be-stored in memory.
26
mlir::Value lowerCirAttrAsValue(mlir::Operation *parentOp, mlir::Attribute attr,
27
mlir::ConversionPatternRewriter &rewriter,
28
const mlir::TypeConverter *converter);
29
30
mlir::LLVM::Linkage convertLinkage(cir::GlobalLinkageKind linkage);
31
32
void convertSideEffectForCall(mlir::Operation *callOp, bool isNothrow,
33
cir::SideEffect sideEffect,
34
mlir::LLVM::MemoryEffectsAttr &memoryEffect,
35
bool &noUnwind, bool &willReturn);
36
37
class CIRToLLVMAssumeOpLowering
38
: public mlir::OpConversionPattern<cir::AssumeOp> {
39
public:
40
using mlir::OpConversionPattern<cir::AssumeOp>::OpConversionPattern;
41
42
mlir::LogicalResult
43
matchAndRewrite(cir::AssumeOp op, OpAdaptor,
44
mlir::ConversionPatternRewriter &) const override;
45
};
46
47
class CIRToLLVMBitClrsbOpLowering
48
: public mlir::OpConversionPattern<cir::BitClrsbOp> {
49
public:
50
using mlir::OpConversionPattern<cir::BitClrsbOp>::OpConversionPattern;
51
52
mlir::LogicalResult
53
matchAndRewrite(cir::BitClrsbOp op, OpAdaptor,
54
mlir::ConversionPatternRewriter &) const override;
55
};
56
57
class CIRToLLVMBitClzOpLowering
58
: public mlir::OpConversionPattern<cir::BitClzOp> {
59
public:
60
using mlir::OpConversionPattern<cir::BitClzOp>::OpConversionPattern;
61
62
mlir::LogicalResult
63
matchAndRewrite(cir::BitClzOp op, OpAdaptor,
64
mlir::ConversionPatternRewriter &) const override;
65
};
66
67
class CIRToLLVMBitCtzOpLowering
68
: public mlir::OpConversionPattern<cir::BitCtzOp> {
69
public:
70
using mlir::OpConversionPattern<cir::BitCtzOp>::OpConversionPattern;
71
72
mlir::LogicalResult
73
matchAndRewrite(cir::BitCtzOp op, OpAdaptor,
74
mlir::ConversionPatternRewriter &) const override;
75
};
76
77
class CIRToLLVMBitParityOpLowering
78
: public mlir::OpConversionPattern<cir::BitParityOp> {
79
public:
80
using mlir::OpConversionPattern<cir::BitParityOp>::OpConversionPattern;
81
82
mlir::LogicalResult
83
matchAndRewrite(cir::BitParityOp op, OpAdaptor,
84
mlir::ConversionPatternRewriter &) const override;
85
};
86
87
class CIRToLLVMBitPopcountOpLowering
88
: public mlir::OpConversionPattern<cir::BitPopcountOp> {
89
public:
90
using mlir::OpConversionPattern<cir::BitPopcountOp>::OpConversionPattern;
91
92
mlir::LogicalResult
93
matchAndRewrite(cir::BitPopcountOp op, OpAdaptor,
94
mlir::ConversionPatternRewriter &) const override;
95
};
96
97
class CIRToLLVMBitReverseOpLowering
98
: public mlir::OpConversionPattern<cir::BitReverseOp> {
99
public:
100
using mlir::OpConversionPattern<cir::BitReverseOp>::OpConversionPattern;
101
102
mlir::LogicalResult
103
matchAndRewrite(cir::BitReverseOp op, OpAdaptor,
104
mlir::ConversionPatternRewriter &) const override;
105
};
106
107
class CIRToLLVMBrCondOpLowering
108
: public mlir::OpConversionPattern<cir::BrCondOp> {
109
public:
110
using mlir::OpConversionPattern<cir::BrCondOp>::OpConversionPattern;
111
112
mlir::LogicalResult
113
matchAndRewrite(cir::BrCondOp op, OpAdaptor,
114
mlir::ConversionPatternRewriter &) const override;
115
};
116
117
class CIRToLLVMByteSwapOpLowering
118
: public mlir::OpConversionPattern<cir::ByteSwapOp> {
119
public:
120
using mlir::OpConversionPattern<cir::ByteSwapOp>::OpConversionPattern;
121
122
mlir::LogicalResult
123
matchAndRewrite(cir::ByteSwapOp op, OpAdaptor,
124
mlir::ConversionPatternRewriter &) const override;
125
};
126
127
class CIRToLLVMCastOpLowering : public mlir::OpConversionPattern<cir::CastOp> {
128
mlir::DataLayout const &dataLayout;
129
130
mlir::Type convertTy(mlir::Type ty) const;
131
132
public:
133
CIRToLLVMCastOpLowering(const mlir::TypeConverter &typeConverter,
134
mlir::MLIRContext *context,
135
mlir::DataLayout const &dataLayout)
136
: OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
137
138
mlir::LogicalResult
139
matchAndRewrite(cir::CastOp op, OpAdaptor,
140
mlir::ConversionPatternRewriter &) const override;
141
};
142
143
class CIRToLLVMExpectOpLowering
144
: public mlir::OpConversionPattern<cir::ExpectOp> {
145
public:
146
using mlir::OpConversionPattern<cir::ExpectOp>::OpConversionPattern;
147
148
mlir::LogicalResult
149
matchAndRewrite(cir::ExpectOp op, OpAdaptor,
150
mlir::ConversionPatternRewriter &) const override;
151
};
152
153
class CIRToLLVMReturnOpLowering
154
: public mlir::OpConversionPattern<cir::ReturnOp> {
155
public:
156
using mlir::OpConversionPattern<cir::ReturnOp>::OpConversionPattern;
157
158
mlir::LogicalResult
159
matchAndRewrite(cir::ReturnOp op, OpAdaptor,
160
mlir::ConversionPatternRewriter &) const override;
161
};
162
163
class CIRToLLVMCallOpLowering : public mlir::OpConversionPattern<cir::CallOp> {
164
public:
165
using mlir::OpConversionPattern<cir::CallOp>::OpConversionPattern;
166
167
mlir::LogicalResult
168
matchAndRewrite(cir::CallOp op, OpAdaptor adaptor,
169
mlir::ConversionPatternRewriter &rewriter) const override;
170
};
171
172
class CIRToLLVMAllocaOpLowering
173
: public mlir::OpConversionPattern<cir::AllocaOp> {
174
mlir::DataLayout const &dataLayout;
175
176
public:
177
CIRToLLVMAllocaOpLowering(mlir::TypeConverter const &typeConverter,
178
mlir::MLIRContext *context,
179
mlir::DataLayout const &dataLayout)
180
: OpConversionPattern<cir::AllocaOp>(typeConverter, context),
181
dataLayout(dataLayout) {}
182
183
using mlir::OpConversionPattern<cir::AllocaOp>::OpConversionPattern;
184
185
mlir::LogicalResult
186
matchAndRewrite(cir::AllocaOp op, OpAdaptor,
187
mlir::ConversionPatternRewriter &) const override;
188
};
189
190
class CIRToLLVMLoadOpLowering : public mlir::OpConversionPattern<cir::LoadOp> {
191
mlir::DataLayout const &dataLayout;
192
193
public:
194
CIRToLLVMLoadOpLowering(const mlir::TypeConverter &typeConverter,
195
mlir::MLIRContext *context,
196
mlir::DataLayout const &dataLayout)
197
: OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
198
199
mlir::LogicalResult
200
matchAndRewrite(cir::LoadOp op, OpAdaptor,
201
mlir::ConversionPatternRewriter &) const override;
202
};
203
204
class CIRToLLVMStoreOpLowering
205
: public mlir::OpConversionPattern<cir::StoreOp> {
206
mlir::DataLayout const &dataLayout;
207
208
public:
209
CIRToLLVMStoreOpLowering(const mlir::TypeConverter &typeConverter,
210
mlir::MLIRContext *context,
211
mlir::DataLayout const &dataLayout)
212
: OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
213
214
mlir::LogicalResult
215
matchAndRewrite(cir::StoreOp op, OpAdaptor,
216
mlir::ConversionPatternRewriter &) const override;
217
};
218
219
class CIRToLLVMConstantOpLowering
220
: public mlir::OpConversionPattern<cir::ConstantOp> {
221
public:
222
CIRToLLVMConstantOpLowering(const mlir::TypeConverter &typeConverter,
223
mlir::MLIRContext *context)
224
: OpConversionPattern(typeConverter, context) {
225
setHasBoundedRewriteRecursion();
226
}
227
228
mlir::LogicalResult
229
matchAndRewrite(cir::ConstantOp op, OpAdaptor,
230
mlir::ConversionPatternRewriter &) const override;
231
};
232
233
class CIRToLLVMFuncOpLowering : public mlir::OpConversionPattern<cir::FuncOp> {
234
static mlir::StringRef getLinkageAttrNameString() { return "linkage"; }
235
236
void lowerFuncAttributes(
237
cir::FuncOp func, bool filterArgAndResAttrs,
238
mlir::SmallVectorImpl<mlir::NamedAttribute> &result) const;
239
240
public:
241
using mlir::OpConversionPattern<cir::FuncOp>::OpConversionPattern;
242
243
mlir::LogicalResult
244
matchAndRewrite(cir::FuncOp op, OpAdaptor,
245
mlir::ConversionPatternRewriter &) const override;
246
};
247
248
class CIRToLLVMSwitchFlatOpLowering
249
: public mlir::OpConversionPattern<cir::SwitchFlatOp> {
250
public:
251
using mlir::OpConversionPattern<cir::SwitchFlatOp>::OpConversionPattern;
252
253
mlir::LogicalResult
254
matchAndRewrite(cir::SwitchFlatOp op, OpAdaptor,
255
mlir::ConversionPatternRewriter &) const override;
256
};
257
258
class CIRToLLVMGetGlobalOpLowering
259
: public mlir::OpConversionPattern<cir::GetGlobalOp> {
260
public:
261
using mlir::OpConversionPattern<cir::GetGlobalOp>::OpConversionPattern;
262
263
mlir::LogicalResult
264
matchAndRewrite(cir::GetGlobalOp op, OpAdaptor,
265
mlir::ConversionPatternRewriter &) const override;
266
};
267
268
class CIRToLLVMGlobalOpLowering
269
: public mlir::OpConversionPattern<cir::GlobalOp> {
270
const mlir::DataLayout &dataLayout;
271
272
public:
273
CIRToLLVMGlobalOpLowering(const mlir::TypeConverter &typeConverter,
274
mlir::MLIRContext *context,
275
const mlir::DataLayout &dataLayout)
276
: OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {
277
setHasBoundedRewriteRecursion();
278
}
279
280
mlir::LogicalResult
281
matchAndRewrite(cir::GlobalOp op, OpAdaptor adaptor,
282
mlir::ConversionPatternRewriter &rewriter) const override;
283
284
private:
285
mlir::LogicalResult matchAndRewriteRegionInitializedGlobal(
286
cir::GlobalOp op, mlir::Attribute init,
287
mlir::ConversionPatternRewriter &rewriter) const;
288
289
void setupRegionInitializedLLVMGlobalOp(
290
cir::GlobalOp op, mlir::ConversionPatternRewriter &rewriter) const;
291
292
mutable mlir::LLVM::ComdatOp comdatOp = nullptr;
293
mlir::SymbolRefAttr getComdatAttr(cir::GlobalOp &op,
294
mlir::OpBuilder &builder) const;
295
};
296
297
class CIRToLLVMUnaryOpLowering
298
: public mlir::OpConversionPattern<cir::UnaryOp> {
299
public:
300
using mlir::OpConversionPattern<cir::UnaryOp>::OpConversionPattern;
301
302
mlir::LogicalResult
303
matchAndRewrite(cir::UnaryOp op, OpAdaptor,
304
mlir::ConversionPatternRewriter &) const override;
305
};
306
307
class CIRToLLVMBinOpLowering : public mlir::OpConversionPattern<cir::BinOp> {
308
mlir::LLVM::IntegerOverflowFlags getIntOverflowFlag(cir::BinOp op) const;
309
310
public:
311
using mlir::OpConversionPattern<cir::BinOp>::OpConversionPattern;
312
313
mlir::LogicalResult
314
matchAndRewrite(cir::BinOp op, OpAdaptor,
315
mlir::ConversionPatternRewriter &) const override;
316
};
317
318
class CIRToLLVMCmpOpLowering : public mlir::OpConversionPattern<cir::CmpOp> {
319
public:
320
CIRToLLVMCmpOpLowering(const mlir::TypeConverter &typeConverter,
321
mlir::MLIRContext *context)
322
: OpConversionPattern(typeConverter, context) {
323
setHasBoundedRewriteRecursion();
324
}
325
326
mlir::LogicalResult
327
matchAndRewrite(cir::CmpOp op, OpAdaptor,
328
mlir::ConversionPatternRewriter &) const override;
329
};
330
331
class CIRToLLVMShiftOpLowering
332
: public mlir::OpConversionPattern<cir::ShiftOp> {
333
public:
334
using mlir::OpConversionPattern<cir::ShiftOp>::OpConversionPattern;
335
336
mlir::LogicalResult
337
matchAndRewrite(cir::ShiftOp op, OpAdaptor,
338
mlir::ConversionPatternRewriter &) const override;
339
};
340
341
class CIRToLLVMSelectOpLowering
342
: public mlir::OpConversionPattern<cir::SelectOp> {
343
public:
344
using mlir::OpConversionPattern<cir::SelectOp>::OpConversionPattern;
345
346
mlir::LogicalResult
347
matchAndRewrite(cir::SelectOp op, OpAdaptor,
348
mlir::ConversionPatternRewriter &) const override;
349
};
350
351
class CIRToLLVMBrOpLowering : public mlir::OpConversionPattern<cir::BrOp> {
352
public:
353
using mlir::OpConversionPattern<cir::BrOp>::OpConversionPattern;
354
355
mlir::LogicalResult
356
matchAndRewrite(cir::BrOp op, OpAdaptor,
357
mlir::ConversionPatternRewriter &) const override;
358
};
359
360
class CIRToLLVMGetMemberOpLowering
361
: public mlir::OpConversionPattern<cir::GetMemberOp> {
362
public:
363
using mlir::OpConversionPattern<cir::GetMemberOp>::OpConversionPattern;
364
365
mlir::LogicalResult
366
matchAndRewrite(cir::GetMemberOp op, OpAdaptor,
367
mlir::ConversionPatternRewriter &) const override;
368
};
369
370
class CIRToLLVMTrapOpLowering : public mlir::OpConversionPattern<cir::TrapOp> {
371
public:
372
using mlir::OpConversionPattern<cir::TrapOp>::OpConversionPattern;
373
374
mlir::LogicalResult
375
matchAndRewrite(cir::TrapOp op, OpAdaptor,
376
mlir::ConversionPatternRewriter &) const override;
377
};
378
379
class CIRToLLVMPtrStrideOpLowering
380
: public mlir::OpConversionPattern<cir::PtrStrideOp> {
381
mlir::DataLayout const &dataLayout;
382
383
public:
384
CIRToLLVMPtrStrideOpLowering(const mlir::TypeConverter &typeConverter,
385
mlir::MLIRContext *context,
386
mlir::DataLayout const &dataLayout)
387
: OpConversionPattern(typeConverter, context), dataLayout(dataLayout) {}
388
using mlir::OpConversionPattern<cir::PtrStrideOp>::OpConversionPattern;
389
390
mlir::LogicalResult
391
matchAndRewrite(cir::PtrStrideOp op, OpAdaptor,
392
mlir::ConversionPatternRewriter &) const override;
393
};
394
395
class CIRToLLVMBaseClassAddrOpLowering
396
: public mlir::OpConversionPattern<cir::BaseClassAddrOp> {
397
public:
398
using mlir::OpConversionPattern<cir::BaseClassAddrOp>::OpConversionPattern;
399
400
mlir::LogicalResult
401
matchAndRewrite(cir::BaseClassAddrOp op, OpAdaptor,
402
mlir::ConversionPatternRewriter &) const override;
403
};
404
405
class CIRToLLVMStackSaveOpLowering
406
: public mlir::OpConversionPattern<cir::StackSaveOp> {
407
public:
408
using mlir::OpConversionPattern<cir::StackSaveOp>::OpConversionPattern;
409
410
mlir::LogicalResult
411
matchAndRewrite(cir::StackSaveOp op, OpAdaptor,
412
mlir::ConversionPatternRewriter &) const override;
413
};
414
415
class CIRToLLVMStackRestoreOpLowering
416
: public mlir::OpConversionPattern<cir::StackRestoreOp> {
417
public:
418
using OpConversionPattern<cir::StackRestoreOp>::OpConversionPattern;
419
420
mlir::LogicalResult
421
matchAndRewrite(cir::StackRestoreOp op, OpAdaptor adaptor,
422
mlir::ConversionPatternRewriter &rewriter) const override;
423
};
424
425
class CIRToLLVMVecCreateOpLowering
426
: public mlir::OpConversionPattern<cir::VecCreateOp> {
427
public:
428
using mlir::OpConversionPattern<cir::VecCreateOp>::OpConversionPattern;
429
430
mlir::LogicalResult
431
matchAndRewrite(cir::VecCreateOp op, OpAdaptor,
432
mlir::ConversionPatternRewriter &) const override;
433
};
434
435
class CIRToLLVMVecExtractOpLowering
436
: public mlir::OpConversionPattern<cir::VecExtractOp> {
437
public:
438
using mlir::OpConversionPattern<cir::VecExtractOp>::OpConversionPattern;
439
440
mlir::LogicalResult
441
matchAndRewrite(cir::VecExtractOp op, OpAdaptor,
442
mlir::ConversionPatternRewriter &) const override;
443
};
444
445
class CIRToLLVMVecInsertOpLowering
446
: public mlir::OpConversionPattern<cir::VecInsertOp> {
447
public:
448
using mlir::OpConversionPattern<cir::VecInsertOp>::OpConversionPattern;
449
450
mlir::LogicalResult
451
matchAndRewrite(cir::VecInsertOp op, OpAdaptor,
452
mlir::ConversionPatternRewriter &) const override;
453
};
454
455
class CIRToLLVMVecCmpOpLowering
456
: public mlir::OpConversionPattern<cir::VecCmpOp> {
457
public:
458
using mlir::OpConversionPattern<cir::VecCmpOp>::OpConversionPattern;
459
460
mlir::LogicalResult
461
matchAndRewrite(cir::VecCmpOp op, OpAdaptor,
462
mlir::ConversionPatternRewriter &) const override;
463
};
464
465
class CIRToLLVMVecSplatOpLowering
466
: public mlir::OpConversionPattern<cir::VecSplatOp> {
467
public:
468
using mlir::OpConversionPattern<cir::VecSplatOp>::OpConversionPattern;
469
470
mlir::LogicalResult
471
matchAndRewrite(cir::VecSplatOp op, OpAdaptor,
472
mlir::ConversionPatternRewriter &) const override;
473
};
474
475
class CIRToLLVMVecShuffleOpLowering
476
: public mlir::OpConversionPattern<cir::VecShuffleOp> {
477
public:
478
using mlir::OpConversionPattern<cir::VecShuffleOp>::OpConversionPattern;
479
480
mlir::LogicalResult
481
matchAndRewrite(cir::VecShuffleOp op, OpAdaptor,
482
mlir::ConversionPatternRewriter &) const override;
483
};
484
485
class CIRToLLVMVecShuffleDynamicOpLowering
486
: public mlir::OpConversionPattern<cir::VecShuffleDynamicOp> {
487
public:
488
using mlir::OpConversionPattern<
489
cir::VecShuffleDynamicOp>::OpConversionPattern;
490
491
mlir::LogicalResult
492
matchAndRewrite(cir::VecShuffleDynamicOp op, OpAdaptor,
493
mlir::ConversionPatternRewriter &) const override;
494
};
495
496
class CIRToLLVMVecTernaryOpLowering
497
: public mlir::OpConversionPattern<cir::VecTernaryOp> {
498
public:
499
using mlir::OpConversionPattern<cir::VecTernaryOp>::OpConversionPattern;
500
501
mlir::LogicalResult
502
matchAndRewrite(cir::VecTernaryOp op, OpAdaptor,
503
mlir::ConversionPatternRewriter &) const override;
504
};
505
506
class CIRToLLVMComplexCreateOpLowering
507
: public mlir::OpConversionPattern<cir::ComplexCreateOp> {
508
public:
509
using mlir::OpConversionPattern<cir::ComplexCreateOp>::OpConversionPattern;
510
511
mlir::LogicalResult
512
matchAndRewrite(cir::ComplexCreateOp op, OpAdaptor,
513
mlir::ConversionPatternRewriter &) const override;
514
};
515
516
class CIRToLLVMComplexRealOpLowering
517
: public mlir::OpConversionPattern<cir::ComplexRealOp> {
518
public:
519
using mlir::OpConversionPattern<cir::ComplexRealOp>::OpConversionPattern;
520
521
mlir::LogicalResult
522
matchAndRewrite(cir::ComplexRealOp op, OpAdaptor,
523
mlir::ConversionPatternRewriter &) const override;
524
};
525
526
class CIRToLLVMComplexImagOpLowering
527
: public mlir::OpConversionPattern<cir::ComplexImagOp> {
528
public:
529
using mlir::OpConversionPattern<cir::ComplexImagOp>::OpConversionPattern;
530
531
mlir::LogicalResult
532
matchAndRewrite(cir::ComplexImagOp op, OpAdaptor,
533
mlir::ConversionPatternRewriter &) const override;
534
};
535
536
class CIRToLLVMComplexImagPtrOpLowering
537
: public mlir::OpConversionPattern<cir::ComplexImagPtrOp> {
538
public:
539
using mlir::OpConversionPattern<cir::ComplexImagPtrOp>::OpConversionPattern;
540
541
mlir::LogicalResult
542
matchAndRewrite(cir::ComplexImagPtrOp op, OpAdaptor,
543
mlir::ConversionPatternRewriter &) const override;
544
};
545
546
class CIRToLLVMComplexRealPtrOpLowering
547
: public mlir::OpConversionPattern<cir::ComplexRealPtrOp> {
548
public:
549
using mlir::OpConversionPattern<cir::ComplexRealPtrOp>::OpConversionPattern;
550
551
mlir::LogicalResult
552
matchAndRewrite(cir::ComplexRealPtrOp op, OpAdaptor,
553
mlir::ConversionPatternRewriter &) const override;
554
};
555
556
class CIRToLLVMComplexAddOpLowering
557
: public mlir::OpConversionPattern<cir::ComplexAddOp> {
558
public:
559
using mlir::OpConversionPattern<cir::ComplexAddOp>::OpConversionPattern;
560
561
mlir::LogicalResult
562
matchAndRewrite(cir::ComplexAddOp op, OpAdaptor,
563
mlir::ConversionPatternRewriter &) const override;
564
};
565
566
class CIRToLLVMComplexSubOpLowering
567
: public mlir::OpConversionPattern<cir::ComplexSubOp> {
568
public:
569
using mlir::OpConversionPattern<cir::ComplexSubOp>::OpConversionPattern;
570
571
mlir::LogicalResult
572
matchAndRewrite(cir::ComplexSubOp op, OpAdaptor,
573
mlir::ConversionPatternRewriter &) const override;
574
};
575
576
class CIRToLLVMSetBitfieldOpLowering
577
: public mlir::OpConversionPattern<cir::SetBitfieldOp> {
578
public:
579
using mlir::OpConversionPattern<cir::SetBitfieldOp>::OpConversionPattern;
580
581
mlir::LogicalResult
582
matchAndRewrite(cir::SetBitfieldOp op, OpAdaptor,
583
mlir::ConversionPatternRewriter &) const override;
584
};
585
586
class CIRToLLVMGetBitfieldOpLowering
587
: public mlir::OpConversionPattern<cir::GetBitfieldOp> {
588
public:
589
using mlir::OpConversionPattern<cir::GetBitfieldOp>::OpConversionPattern;
590
591
mlir::LogicalResult
592
matchAndRewrite(cir::GetBitfieldOp op, OpAdaptor,
593
mlir::ConversionPatternRewriter &) const override;
594
};
595
596
} // namespace direct
597
} // namespace cir
598
599
#endif // CLANG_CIR_LOWERTOLLVM_H
600
601