diff options
| author | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-03-20 03:57:11 +0000 |
|---|---|---|
| committer | Duncan P. N. Exon Smith <dexonsmith@apple.com> | 2014-03-20 03:57:11 +0000 |
| commit | 780443e83beef27f112e95580921e5011e4eaf84 (patch) | |
| tree | 96e5b9242b66a833d4a5c5354ef235d9d7d7c5c9 /clang/lib/CodeGen/CodeGenPGO.cpp | |
| parent | 177b0a3600d8d3eaf6ccbf573d0bf053c4b24191 (diff) | |
| download | bcm5719-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.cpp | 11 |
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)); |

