From 3cbd488e9a8724adff28ee1f8b5fb9f80f93ff08 Mon Sep 17 00:00:00 2001 From: "Duncan P. N. Exon Smith" Date: Thu, 20 Mar 2014 03:57:11 +0000 Subject: [PATCH] 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 --- lib/CodeGen/CodeGenPGO.cpp | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) 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)); -- 2.50.1