diff options
author | Akira Hatanaka <ahatanaka@apple.com> | 2019-06-14 22:06:28 +0000 |
---|---|---|
committer | Akira Hatanaka <ahatanaka@apple.com> | 2019-06-14 22:06:28 +0000 |
commit | 6cb2d9dbd2d46ee1811f756d4b1f567b8ff36aa9 (patch) | |
tree | ad9a46f1a38ce64d675f990cccee3f3ffceb15ec /clang/lib/CodeGen | |
parent | 05e48cb9fabe58b2704fbca14530c844a9d2243d (diff) | |
download | bcm5719-llvm-6cb2d9dbd2d46ee1811f756d4b1f567b8ff36aa9.tar.gz bcm5719-llvm-6cb2d9dbd2d46ee1811f756d4b1f567b8ff36aa9.zip |
[CodeGen][ObjC] Annotate retain-agnostic ObjC globals with attribute
'objc_arc_inert'
The attribute enables the ARC optimizer to delete ObjC ARC runtime calls
on the annotated globals (see https://reviews.llvm.org/D62433). We
currently only annotate global variables for string literals and global
blocks with the attribute.
rdar://problem/49839633
Differential Revision: https://reviews.llvm.org/D62831
llvm-svn: 363467
Diffstat (limited to 'clang/lib/CodeGen')
-rw-r--r-- | clang/lib/CodeGen/CGBlocks.cpp | 4 | ||||
-rw-r--r-- | clang/lib/CodeGen/CodeGenModule.cpp | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGBlocks.cpp b/clang/lib/CodeGen/CGBlocks.cpp index 2a317fc956d..c3ee7129d9d 100644 --- a/clang/lib/CodeGen/CGBlocks.cpp +++ b/clang/lib/CodeGen/CGBlocks.cpp @@ -1434,10 +1434,12 @@ static llvm::Constant *buildGlobalBlock(CodeGenModule &CGM, if (CGM.getContext().getLangOpts().OpenCL) AddrSpace = CGM.getContext().getTargetAddressSpace(LangAS::opencl_global); - llvm::Constant *literal = fields.finishAndCreateGlobal( + llvm::GlobalVariable *literal = fields.finishAndCreateGlobal( "__block_literal_global", blockInfo.BlockAlign, /*constant*/ !IsWindows, llvm::GlobalVariable::InternalLinkage, AddrSpace); + literal->addAttribute("objc_arc_inert"); + // Windows does not allow globals to be initialised to point to globals in // different DLLs. Any such variables must run code to initialise them. if (IsWindows) { diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp index bd44a493a28..7edac4d0114 100644 --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -4652,6 +4652,7 @@ CodeGenModule::GetAddrOfConstantCFString(const StringLiteral *Literal) { GV = Fields.finishAndCreateGlobal("_unnamed_cfstring_", Alignment, /*isConstant=*/false, llvm::GlobalVariable::PrivateLinkage); + GV->addAttribute("objc_arc_inert"); switch (Triple.getObjectFormat()) { case llvm::Triple::UnknownObjectFormat: llvm_unreachable("unknown file format"); |