clang 24.0.0git
LowerMicrosoftCXXABI.cpp
Go to the documentation of this file.
1//===---- LowerMicrosoftCXXABI.cpp - Emit CIR for Microsoft-specific code -===//
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 provides CIR lowering logic targeting the Microsoft C++ ABI.
10//
11//===----------------------------------------------------------------------===//
12
13#include "CIRCXXABI.h"
14#include "LowerModule.h"
15#include "llvm/Support/ErrorHandling.h"
16
17namespace cir {
18
19namespace {
20
21class LowerMicrosoftCXXABI : public CIRCXXABI {
22public:
23 LowerMicrosoftCXXABI(LowerModule &lm) : CIRCXXABI(lm) {}
24
25 mlir::Type
26 lowerDataMemberType(cir::DataMemberType type,
27 const mlir::TypeConverter &typeConverter) const override {
28 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
29 }
30
31 mlir::Type
32 lowerMethodType(cir::MethodType type,
33 const mlir::TypeConverter &typeConverter) const override {
34 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
35 }
36
37 mlir::TypedAttr lowerDataMemberConstant(
38 cir::DataMemberAttr attr, const mlir::DataLayout &layout,
39 const mlir::TypeConverter &typeConverter) const override {
40 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
41 }
42
43 mlir::TypedAttr lowerDataMemberOffsetConstant(
44 cir::DataMemberOffsetAttr attr, const mlir::DataLayout &layout,
45 const mlir::TypeConverter &typeConverter) const override {
46 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
47 }
48
49 mlir::TypedAttr
50 lowerMethodConstant(cir::MethodAttr attr, const mlir::DataLayout &layout,
51 const mlir::TypeConverter &typeConverter) const override {
52 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
53 }
54
55 mlir::Operation *
56 lowerGetRuntimeMember(cir::GetRuntimeMemberOp op, mlir::Type loweredResultTy,
57 mlir::Value loweredAddr, mlir::Value loweredMember,
58 mlir::OpBuilder &builder) const override {
59 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
60 }
61
62 void
63 lowerGetMethod(cir::GetMethodOp op, mlir::Value &callee, mlir::Value &thisArg,
64 mlir::Value loweredMethod, mlir::Value loweredObjectPtr,
65 mlir::ConversionPatternRewriter &rewriter) const override {
66 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
67 }
68
69 mlir::Value lowerBaseDataMember(cir::BaseDataMemberOp op,
70 mlir::Value loweredSrc,
71 mlir::OpBuilder &builder) const override {
72 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
73 }
74
75 mlir::Value lowerDerivedDataMember(cir::DerivedDataMemberOp op,
76 mlir::Value loweredSrc,
77 mlir::OpBuilder &builder) const override {
78 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
79 }
80
81 mlir::Value lowerBaseMethod(cir::BaseMethodOp op, mlir::Value loweredSrc,
82 mlir::OpBuilder &builder) const override {
83 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
84 }
85
86 mlir::Value lowerDerivedMethod(cir::DerivedMethodOp op,
87 mlir::Value loweredSrc,
88 mlir::OpBuilder &builder) const override {
89 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
90 }
91
92 mlir::Value lowerDataMemberCmp(cir::CmpOp op, mlir::Value loweredLhs,
93 mlir::Value loweredRhs,
94 mlir::OpBuilder &builder) const override {
95 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
96 }
97
98 mlir::Value lowerMethodCmp(cir::CmpOp op, mlir::Value loweredLhs,
99 mlir::Value loweredRhs,
100 mlir::OpBuilder &builder) const override {
101 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
102 }
103
104 mlir::Value lowerDataMemberBitcast(cir::CastOp op, mlir::Type loweredDstTy,
105 mlir::Value loweredSrc,
106 mlir::OpBuilder &builder) const override {
107 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
108 }
109
110 mlir::Value
111 lowerDataMemberToBoolCast(cir::CastOp op, mlir::Value loweredSrc,
112 mlir::OpBuilder &builder) const override {
113 llvm_unreachable("Microsoft ABI member pointer lowering NYI");
114 }
115
116 mlir::Value lowerMethodBitcast(cir::CastOp op, mlir::Type loweredDstTy,
117 mlir::Value loweredSrc,
118 mlir::OpBuilder &builder) const override {
119 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
120 }
121
122 mlir::Value lowerMethodToBoolCast(cir::CastOp op, mlir::Value loweredSrc,
123 mlir::OpBuilder &builder) const override {
124 llvm_unreachable("Microsoft ABI method pointer lowering NYI");
125 }
126
127 mlir::Value lowerDynamicCast(cir::DynamicCastOp op,
128 mlir::OpBuilder &builder) const override {
129 llvm_unreachable("Microsoft ABI dynamic cast lowering NYI");
130 }
131
132 mlir::Value lowerVTableGetTypeInfo(cir::VTableGetTypeInfoOp op,
133 mlir::OpBuilder &builder) const override {
134 llvm_unreachable("Microsoft ABI vtable get type info lowering NYI");
135 }
136
137 clang::CharUnits
138 getArrayCookieSizeImpl(mlir::Type elementType,
139 const mlir::DataLayout &dataLayout) const override {
140 llvm_unreachable("Microsoft ABI array cookie lowering NYI");
141 }
142
143 mlir::Value readArrayCookieImpl(mlir::Location loc, mlir::Value allocPtr,
144 clang::CharUnits cookieSize,
145 clang::CharUnits cookieAlignment,
146 const mlir::DataLayout &dataLayout,
147 CIRBaseBuilderTy &builder) const override {
148 llvm_unreachable("Microsoft ABI array cookie lowering NYI");
149 }
150};
151
152} // namespace
153
154std::unique_ptr<CIRCXXABI> createMicrosoftCXXABI(LowerModule &lm) {
155 return std::make_unique<LowerMicrosoftCXXABI>(lm);
156}
157
158} // namespace cir
std::unique_ptr< CIRCXXABI > createMicrosoftCXXABI(LowerModule &lm)
Creates a Microsoft-family ABI.