25
25
namespace swift {
26
26
27
27
enum RT_Kind {
28
- // / An instruction with this classification is known to not access (read or
29
- // / write) memory.
30
- RT_NoMemoryAccessed,
31
-
32
- // / void swift_retain(SwiftHeapObject *object)
33
- RT_Retain,
34
-
35
- // / void swift_retain_n(SwiftHeapObject *object)
36
- RT_RetainN,
37
-
38
- // / void swift::swift_retainUnowned(HeapObject *object)
39
- RT_RetainUnowned,
40
-
41
- // / void swift_checkUnowned(HeapObject *object)
42
- RT_CheckUnowned,
43
-
44
- // / void swift_release(SwiftHeapObject *object)
45
- RT_Release,
46
-
47
- // / void swift_release_n(SwiftHeapObject *object)
48
- RT_ReleaseN,
49
-
50
- // / SwiftHeapObject *swift_allocObject(SwiftHeapMetadata *metadata,
51
- // / size_t size, size_t alignment)
52
- RT_AllocObject,
53
-
54
- // / void objc_release(%objc_object* %P)
55
- RT_ObjCRelease,
56
-
57
- // / %objc_object* objc_retain(%objc_object* %P)
58
- RT_ObjCRetain,
59
-
60
- // / void swift_unknownRetain(%swift.refcounted* %P)
61
- RT_UnknownRetain,
62
-
63
- // / void swift_unknownRetain_n(%swift.refcounted* %P)
64
- RT_UnknownRetainN,
65
-
66
- // / void swift_unknownRelease(%swift.refcounted* %P)
67
- RT_UnknownRelease,
68
-
69
- // / void swift_unknownRelease_n(%swift.refcounted* %P)
70
- RT_UnknownReleaseN,
71
-
72
- // / void __swift_fixLifetime(%swift.refcounted* %P)
73
- RT_FixLifetime,
74
-
75
- // / void swift_bridgeRetain(%swift.refcounted* %P)
76
- RT_BridgeRetain,
77
-
78
- // / void swift_bridgeRetain_n(%swift.refcounted* %P)
79
- RT_BridgeRetainN,
80
-
81
- // / void swift_bridgeRelease(%swift.refcounted* %P)
82
- RT_BridgeRelease,
83
-
84
- // / void swift_bridgeRelease_n(%swift.refcounted* %P)
85
- RT_BridgeReleaseN,
86
-
87
- // / This is not a runtime function that we support. Maybe it is not a call,
88
- // / or is a call to something we don't care about.
89
- RT_Unknown,
28
+ #define KIND (Name, MemBehavior ) RT_ ## Name,
29
+ #include " LLVMSwift.def"
90
30
};
91
31
92
32
// / classifyInstruction - Take a look at the specified instruction and classify
@@ -102,77 +42,38 @@ inline RT_Kind classifyInstruction(const llvm::Instruction &I) {
102
42
if (F == 0 ) return RT_Unknown;
103
43
104
44
return llvm::StringSwitch<RT_Kind>(F->getName ())
105
- .Case (" swift_retain" , RT_Retain)
106
- .Case (" swift_retain_n" , RT_RetainN)
107
- .Case (" swift_release" , RT_Release)
108
- .Case (" swift_release_n" , RT_ReleaseN)
109
- .Case (" swift_allocObject" , RT_AllocObject)
110
- .Case (" objc_release" , RT_ObjCRelease)
111
- .Case (" objc_retain" , RT_ObjCRetain)
112
- .Case (" swift_retainUnowned" , RT_RetainUnowned)
113
- .Case (" swift_checkUnowned" , RT_CheckUnowned)
114
- .Case (" swift_bridgeObjectRetain" , RT_BridgeRetain)
115
- .Case (" swift_bridgeObjectRetain_n" , RT_BridgeRetainN)
116
- .Case (" swift_bridgeObjectRelease" , RT_BridgeRelease)
117
- .Case (" swift_bridgeObjectRelease_n" , RT_BridgeReleaseN)
118
- .Case (" swift_unknownRetain" , RT_UnknownRetain)
119
- .Case (" swift_unknownRetain_n" , RT_UnknownRetainN)
120
- .Case (" swift_unknownRelease" , RT_UnknownRelease)
121
- .Case (" swift_unknownRelease_n" , RT_UnknownReleaseN)
122
- .Case (" __swift_fixLifetime" , RT_FixLifetime)
45
+ #define SWIFT_FUNC (Name, MemBehavior, TextualName ) \
46
+ .Case (" swift_" #TextualName, RT_ ## Name)
47
+ #define OBJC_FUNC (Name, MemBehavior, TextualName ) \
48
+ .Case (" objc_" #TextualName, RT_ ## Name)
49
+ #define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC (Name, MemBehavior, TextualName ) \
50
+ .Case (" __swift_" #TextualName, RT_ ## Name)
51
+ #include " LLVMSwift.def"
52
+
123
53
#if defined(SWIFT_WRAPPER_PREFIX)
124
- .Case (SWIFT_WRAPPER_NAME (" swift_retain" ), RT_Retain)
125
- .Case (SWIFT_WRAPPER_NAME (" swift_retain_n" ), RT_RetainN)
126
- .Case (SWIFT_WRAPPER_NAME (" swift_release" ), RT_Release)
127
- .Case (SWIFT_WRAPPER_NAME (" swift_release_n" ), RT_ReleaseN)
128
- .Case (SWIFT_WRAPPER_NAME (" swift_allocObject" ), RT_AllocObject)
129
- .Case (SWIFT_WRAPPER_NAME (" objc_release" ), RT_ObjCRelease)
130
- .Case (SWIFT_WRAPPER_NAME (" objc_retain" ), RT_ObjCRetain)
131
- .Case (SWIFT_WRAPPER_NAME (" swift_retainUnowned" ), RT_RetainUnowned)
132
- .Case (SWIFT_WRAPPER_NAME (" swift_checkUnowned" ), RT_CheckUnowned)
133
- .Case (SWIFT_WRAPPER_NAME (" swift_bridgeObjectRetain" ), RT_BridgeRetain)
134
- .Case (SWIFT_WRAPPER_NAME (" swift_bridgeObjectRetain_n" ), RT_BridgeRetainN)
135
- .Case (SWIFT_WRAPPER_NAME (" swift_bridgeObjectRelease" ), RT_BridgeRelease)
136
- .Case (SWIFT_WRAPPER_NAME (" swift_bridgeObjectRelease_n" ), RT_BridgeReleaseN)
137
- .Case (SWIFT_WRAPPER_NAME (" swift_unknownRetain" ), RT_UnknownRetain)
138
- .Case (SWIFT_WRAPPER_NAME (" swift_unknownRetain_n" ), RT_UnknownRetainN)
139
- .Case (SWIFT_WRAPPER_NAME (" swift_unknownRelease" ), RT_UnknownRelease)
140
- .Case (SWIFT_WRAPPER_NAME (" swift_unknownRelease_n" ), RT_UnknownReleaseN)
54
+ #define SWIFT_FUNC (Name, MemBehavior, TextualName ) \
55
+ .Case (SWIFT_WRAPPER_NAME (" swift_" #TextualName), RT_ ## Name)
56
+ #define OBJC_FUNC (Name, MemBehavior, TextualName ) \
57
+ .Case (SWIFT_WRAPPER_NAME (" objc_" #TextualName), RT_ ## Name)
58
+ #define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC (Name, MemBehavior, TextualName )
59
+ #include " LLVMSwift.def"
141
60
#endif
61
+
142
62
// Support non-atomic versions of reference counting entry points.
143
- .Case (" swift_nonatomic_retain" , RT_Retain)
144
- .Case (" swift_nonatomic_retain_n" , RT_RetainN)
145
- .Case (" swift_nonatomic_release" , RT_Release)
146
- .Case (" swift_nonatomic_release_n" , RT_ReleaseN)
147
- .Case (" objc_nonatomic_release" , RT_ObjCRelease)
148
- .Case (" objc_nonatomic_retain" , RT_ObjCRetain)
149
- .Case (" swift_nonatomic_retainUnowned" , RT_RetainUnowned)
150
- .Case (" swift_nonatomic_checkUnowned" , RT_CheckUnowned)
151
- .Case (" swift_nonatomic_bridgeObjectRetain" , RT_BridgeRetain)
152
- .Case (" swift_nonatomic_bridgeObjectRetain_n" , RT_BridgeRetainN)
153
- .Case (" swift_nonatomic_bridgeObjectRelease" , RT_BridgeRelease)
154
- .Case (" swift_nonatomic_bridgeObjectRelease_n" , RT_BridgeReleaseN)
155
- .Case (" swift_nonatomic_unknownRetain" , RT_UnknownRetain)
156
- .Case (" swift_nonatomic_unknownRetain_n" , RT_UnknownRetainN)
157
- .Case (" swift_nonatomic_unknownRelease" , RT_UnknownRelease)
158
- .Case (" swift_nonatomic_unknownRelease_n" , RT_UnknownReleaseN)
63
+ #define SWIFT_FUNC (Name, MemBehavior, TextualName ) \
64
+ .Case (" swift_nonatomic_" #TextualName, RT_ ## Name)
65
+ #define OBJC_FUNC (Name, MemBehavior, TextualName ) \
66
+ .Case (" objc_nonatomic_" #TextualName, RT_ ## Name)
67
+ #define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC (Name, MemBehavior, TextualName )
68
+ #include " LLVMSwift.def"
69
+
159
70
#if defined(SWIFT_WRAPPER_PREFIX)
160
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_retain" ), RT_Retain)
161
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_retain_n" ), RT_RetainN)
162
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_release" ), RT_Release)
163
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_release_n" ), RT_ReleaseN)
164
- .Case (SWIFT_WRAPPER_NAME (" objc_nonatomic_release" ), RT_ObjCRelease)
165
- .Case (SWIFT_WRAPPER_NAME (" objc_nonatomic_retain" ), RT_ObjCRetain)
166
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_retainUnowned" ), RT_RetainUnowned)
167
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_checkUnowned" ), RT_CheckUnowned)
168
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_bridgeObjectRetain" ), RT_BridgeRetain)
169
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_bridgeObjectRetain_n" ), RT_BridgeRetainN)
170
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_bridgeObjectRelease" ), RT_BridgeRelease)
171
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_bridgeObjectRelease_n" ), RT_BridgeReleaseN)
172
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_unknownRetain" ), RT_UnknownRetain)
173
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_unknownRetain_n" ), RT_UnknownRetainN)
174
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_unknownRelease" ), RT_UnknownRelease)
175
- .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_unknownRelease_n" ), RT_UnknownReleaseN)
71
+ #define SWIFT_FUNC (Name, MemBehavior, TextualName ) \
72
+ .Case (SWIFT_WRAPPER_NAME (" swift_nonatomic_" #TextualName), RT_ ## Name)
73
+ #define OBJC_FUNC (Name, MemBehavior, TextualName ) \
74
+ .Case (SWIFT_WRAPPER_NAME (" objc_nonatomic_" #TextualName), RT_ ## Name)
75
+ #define SWIFT_INTERNAL_FUNC_NEVER_NONATOMIC (Name, MemBehavior, TextualName )
76
+ #include " LLVMSwift.def"
176
77
#endif
177
78
.Default (RT_Unknown);
178
79
}
0 commit comments