From: Duncan P. N. Exon Smith Date: Thu, 20 Mar 2014 03:57:11 +0000 (+0000) Subject: PGO: use linker magic to find instrumentation data on Darwin X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=3cbd488e9a8724adff28ee1f8b5fb9f80f93ff08;p=clang PGO: use linker magic to find instrumentation data on Darwin git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@204301 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/CodeGenPGO.cpp b/lib/CodeGen/CodeGenPGO.cpp index 86df30e547..4071caee69 100644 --- a/lib/CodeGen/CodeGenPGO.cpp +++ b/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));