@@ -41,26 +41,34 @@ extern bool EnableARCOpts;
41
41
// / Test if the given module looks interesting to run ARC optimization
42
42
// / on.
43
43
inline bool ModuleHasARC (const Module &M) {
44
- return M.getNamedValue (" llvm.objc.retain" ) ||
45
- M.getNamedValue (" llvm.objc.release" ) ||
46
- M.getNamedValue (" llvm.objc.autorelease" ) ||
47
- M.getNamedValue (" llvm.objc.retainAutoreleasedReturnValue" ) ||
48
- M.getNamedValue (" llvm.objc.unsafeClaimAutoreleasedReturnValue" ) ||
49
- M.getNamedValue (" llvm.objc.retainBlock" ) ||
50
- M.getNamedValue (" llvm.objc.autoreleaseReturnValue" ) ||
51
- M.getNamedValue (" llvm.objc.autoreleasePoolPush" ) ||
52
- M.getNamedValue (" llvm.objc.loadWeakRetained" ) ||
53
- M.getNamedValue (" llvm.objc.loadWeak" ) ||
54
- M.getNamedValue (" llvm.objc.destroyWeak" ) ||
55
- M.getNamedValue (" llvm.objc.storeWeak" ) ||
56
- M.getNamedValue (" llvm.objc.initWeak" ) ||
57
- M.getNamedValue (" llvm.objc.moveWeak" ) ||
58
- M.getNamedValue (" llvm.objc.copyWeak" ) ||
59
- M.getNamedValue (" llvm.objc.retainedObject" ) ||
60
- M.getNamedValue (" llvm.objc.unretainedObject" ) ||
61
- M.getNamedValue (" llvm.objc.unretainedPointer" ) ||
62
- M.getNamedValue (" llvm.objc.clang.arc.noop.use" ) ||
63
- M.getNamedValue (" llvm.objc.clang.arc.use" );
44
+ std::initializer_list<Intrinsic::ID> Intrinsics = {
45
+ Intrinsic::objc_retain,
46
+ Intrinsic::objc_release,
47
+ Intrinsic::objc_autorelease,
48
+ Intrinsic::objc_retainAutoreleasedReturnValue,
49
+ Intrinsic::objc_retainBlock,
50
+ Intrinsic::objc_autoreleaseReturnValue,
51
+ Intrinsic::objc_autoreleasePoolPush,
52
+ Intrinsic::objc_loadWeakRetained,
53
+ Intrinsic::objc_loadWeak,
54
+ Intrinsic::objc_destroyWeak,
55
+ Intrinsic::objc_initWeak,
56
+ Intrinsic::objc_copyWeak,
57
+ Intrinsic::objc_retainedObject,
58
+ Intrinsic::objc_unretainedObject,
59
+ Intrinsic::objc_unretainedPointer,
60
+ Intrinsic::objc_clang_arc_noop_use,
61
+ Intrinsic::objc_clang_arc_use,
62
+ };
63
+ #ifndef NDEBUG
64
+ for (Intrinsic::ID IID : Intrinsics)
65
+ assert (!Intrinsic::isOverloaded (IID) &&
66
+ " Can only check non-overloaded intrinsics" );
67
+ #endif
68
+ for (Intrinsic::ID IID : Intrinsics)
69
+ if (Intrinsic::getDeclarationIfExists (&M, IID))
70
+ return true ;
71
+ return false ;
64
72
}
65
73
66
74
// / This is a wrapper around getUnderlyingObject which also knows how to
0 commit comments