summaryrefslogtreecommitdiffstats
path: root/clang/lib/CodeGen/CodeGenPGO.cpp
diff options
context:
space:
mode:
authorDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-03-20 03:57:11 +0000
committerDuncan P. N. Exon Smith <dexonsmith@apple.com>2014-03-20 03:57:11 +0000
commit780443e83beef27f112e95580921e5011e4eaf84 (patch)
tree96e5b9242b66a833d4a5c5354ef235d9d7d7c5c9 /clang/lib/CodeGen/CodeGenPGO.cpp
parent177b0a3600d8d3eaf6ccbf573d0bf053c4b24191 (diff)
downloadbcm5719-llvm-780443e83beef27f112e95580921e5011e4eaf84.tar.gz
bcm5719-llvm-780443e83beef27f112e95580921e5011e4eaf84.zip
PGO: use linker magic to find instrumentation data on Darwin
<rdar://problem/15943240> llvm-svn: 204301
Diffstat (limited to 'clang/lib/CodeGen/CodeGenPGO.cpp')
-rw-r--r--clang/lib/CodeGen/CodeGenPGO.cpp11
1 files changed, 8 insertions, 3 deletions
diff --git a/clang/lib/CodeGen/CodeGenPGO.cpp b/clang/lib/CodeGen/CodeGenPGO.cpp
index 86df30e5475..4071caee691 100644
--- a/clang/lib/CodeGen/CodeGenPGO.cpp
+++ b/clang/lib/CodeGen/CodeGenPGO.cpp
@@ -182,6 +182,10 @@ static llvm::Function *getRegisterFunc(CodeGenModule &CGM) {
}
static llvm::BasicBlock *getOrInsertRegisterBB(CodeGenModule &CGM) {
+ // Don't do this for Darwin. compiler-rt uses linker magic.
+ if (CGM.getTarget().getTriple().isOSDarwin())
+ return nullptr;
+
// Only need to insert this once per module.
if (llvm::Function *RegisterF = getRegisterFunc(CGM))
return &RegisterF->getEntryBlock();
@@ -286,9 +290,10 @@ void CodeGenPGO::emitInstrumentationData() {
auto *Data = buildDataVar();
// Register the data.
- //
- // TODO: only register when static initialization is required.
- CGBuilderTy Builder(getOrInsertRegisterBB(CGM)->getTerminator());
+ auto *RegisterBB = getOrInsertRegisterBB(CGM);
+ if (!RegisterBB)
+ return;
+ CGBuilderTy Builder(RegisterBB->getTerminator());
auto *VoidPtrTy = llvm::Type::getInt8PtrTy(CGM.getLLVMContext());
Builder.CreateCall(getOrInsertRuntimeRegister(CGM),
Builder.CreateBitCast(Data, VoidPtrTy));
OpenPOWER on IntegriCloud