forked from llvm/clangir
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUnimplementedFeatureGuarding.h
186 lines (164 loc) · 7.83 KB
/
UnimplementedFeatureGuarding.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
//===---- UnimplementedFeatureGuarding.h - Checks against NYI ---*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
//
// This file introduces some helper classes to guard against features that
// CodeGen supports that we do not have and also do not have great ways to
// assert against.
//
//===----------------------------------------------------------------------===//
#ifndef LLVM_CLANG_LIB_CIR_UFG
#define LLVM_CLANG_LIB_CIR_UFG
namespace cir {
struct UnimplementedFeature {
// TODO(CIR): Implement the CIRGenFunction::buildTypeCheck method that handles
// sanitizer related type check features
static bool buildTypeCheck() { return false; }
static bool tbaa() { return false; }
static bool cleanups() { return false; }
static bool emitNullabilityCheck() { return false; }
// GNU vectors are done, but other kinds of vectors haven't been implemented.
static bool scalableVectors() { return false; }
static bool vectorConstants() { return false; }
// Address space related
static bool addressSpace() { return true; }
static bool addressSpaceInGlobalVar() { return false; }
static bool addressSpaceCasting() { return false; }
// Clang codegen options
static bool strictVTablePointers() { return false; }
// Unhandled global/linkage information.
static bool unnamedAddr() { return false; }
static bool setComdat() { return false; }
static bool setDSOLocal() { return false; }
static bool threadLocal() { return false; }
static bool setDLLStorageClass() { return false; }
static bool setDLLImportDLLExport() { return false; }
static bool setPartition() { return false; }
static bool setGlobalVisibility() { return false; }
static bool hiddenVisibility() { return false; }
static bool protectedVisibility() { return false; }
static bool addCompilerUsedGlobal() { return false; }
// Sanitizers
static bool reportGlobalToASan() { return false; }
static bool emitAsanPrologueOrEpilogue() { return false; }
static bool emitCheckedInBoundsGEP() { return false; }
static bool pointerOverflowSanitizer() { return false; }
static bool sanitizeDtor() { return false; }
static bool sanitizeVLABound() { return false; }
static bool sanitizerBuiltin() { return false; }
static bool sanitizerReturn() { return false; }
// ObjC
static bool setObjCGCLValueClass() { return false; }
static bool objCLifetime() { return false; }
// Debug info
static bool generateDebugInfo() { return false; }
// LLVM Attributes
static bool setFunctionAttributes() { return false; }
static bool attributeBuiltin() { return false; }
static bool attributeNoBuiltin() { return false; }
static bool parameterAttributes() { return false; }
static bool minLegalVectorWidthAttr() { return false; }
static bool vscaleRangeAttr() { return false; }
// Coroutines
static bool unhandledException() { return false; }
// Missing Emissions
static bool variablyModifiedTypeEmission() { return false; }
static bool buildLValueAlignmentAssumption() { return false; }
static bool buildDerivedToBaseCastForDevirt() { return false; }
static bool emitFunctionEpilog() { return false; }
// References related stuff
static bool ARC() { return false; } // Automatic reference counting
// Clang early optimizations or things defered to LLVM lowering.
static bool shouldUseBZeroPlusStoresToInitialize() { return false; }
static bool shouldUseMemSetToInitialize() { return false; }
static bool shouldSplitConstantStore() { return false; }
static bool shouldCreateMemCpyFromGlobal() { return false; }
static bool shouldReverseUnaryCondOnBoolExpr() { return false; }
static bool fieldMemcpyizerBuildMemcpy() { return false; }
static bool isTrivialAndisDefaultConstructor() { return false; }
static bool isMemcpyEquivalentSpecialMember() { return false; }
static bool constructABIArgDirectExtend() { return false; }
static bool mayHaveIntegerOverflow() { return false; }
static bool llvmLoweringPtrDiffConsidersPointee() { return false; }
static bool emitNullCheckForDeleteCalls() { return false; }
// Folding methods.
static bool foldBinOpFMF() { return false; }
// Fast math.
static bool fastMathGuard() { return false; }
static bool fastMathFlags() { return false; }
static bool fastMathFuncAttributes() { return false; }
// Exception handling
static bool setLandingPadCleanup() { return false; }
static bool isSEHTryScope() { return false; }
static bool ehStack() { return false; }
static bool emitStartEHSpec() { return false; }
static bool emitEndEHSpec() { return false; }
static bool simplifyCleanupEntry() { return false; }
// Type qualifiers.
static bool atomicTypes() { return false; }
static bool volatileTypes() { return false; }
static bool syncScopeID() { return false; }
static bool capturedByInit() { return false; }
static bool tryEmitAsConstant() { return false; }
static bool incrementProfileCounter() { return false; }
static bool createProfileWeightsForLoop() { return false; }
static bool getProfileCount() { return false; }
static bool emitCondLikelihoodViaExpectIntrinsic() { return false; }
static bool requiresReturnValueCheck() { return false; }
static bool shouldEmitLifetimeMarkers() { return false; }
static bool peepholeProtection() { return false; }
static bool CGCapturedStmtInfo() { return false; }
static bool cxxABI() { return false; }
static bool openCL() { return false; }
static bool CUDA() { return false; }
static bool openMP() { return false; }
static bool openMPRuntime() { return false; }
static bool openMPRegionInfo() { return false; }
static bool openMPTarget() { return false; }
static bool isVarArg() { return false; }
static bool setNonGC() { return false; }
static bool volatileLoadOrStore() { return false; }
static bool armComputeVolatileBitfields() { return false; }
static bool setCommonAttributes() { return false; }
static bool insertBuiltinUnpredictable() { return false; }
static bool createInvariantGroup() { return false; }
static bool addAutoInitAnnotation() { return false; }
static bool addHeapAllocSiteMetadata() { return false; }
static bool loopInfoStack() { return false; }
static bool requiresCleanups() { return false; }
static bool constantFoldsToSimpleInteger() { return false; }
static bool alignedLoad() { return false; }
static bool checkFunctionCallABI() { return false; }
static bool zeroInitializer() { return false; }
static bool targetCodeGenInfoIsProtoCallVariadic() { return false; }
static bool chainCalls() { return false; }
static bool operandBundles() { return false; }
static bool exceptions() { return false; }
static bool metaDataNode() { return false; }
static bool emitDeclMetadata() { return false; }
static bool emitScalarRangeCheck() { return false; }
static bool stmtExprEvaluation() { return false; }
static bool setCallingConv() { return false; }
static bool tryMarkNoThrow() { return false; }
static bool indirectBranch() { return false; }
static bool escapedLocals() { return false; }
static bool deferredReplacements() { return false; }
static bool shouldInstrumentFunction() { return false; }
// Inline assembly
static bool asm_goto() { return false; }
static bool asm_unwind_clobber() { return false; }
static bool asm_memory_effects() { return false; }
static bool asm_vector_type() { return false; }
static bool asm_llvm_assume() { return false; }
// ARM builtins
static bool translateAarch64ToMsvcIntrin() { return false; }
static bool neonEquivalentIntrinsicMap() { return false; }
static bool arm64SISDIntrinsicMap() { return false; }
static bool getNeonType() { return false; }
};
} // namespace cir
#endif