diff options
| author | Benjamin Kramer <benny.kra@googlemail.com> | 2018-06-28 13:15:03 +0000 | 
|---|---|---|
| committer | Benjamin Kramer <benny.kra@googlemail.com> | 2018-06-28 13:15:03 +0000 | 
| commit | 269eb21e1ce3e8f0054f0b22a189cf9534c8ce8b (patch) | |
| tree | 9f96d044c8d881e677edb353ee437944ee350e85 /llvm/lib/Transforms | |
| parent | c89ca5582a0666e926426e3ad95233ed85f8e5b1 (diff) | |
| download | bcm5719-llvm-269eb21e1ce3e8f0054f0b22a189cf9534c8ce8b.tar.gz bcm5719-llvm-269eb21e1ce3e8f0054f0b22a189cf9534c8ce8b.zip | |
Revert "Add support for generating a call graph profile from Branch Frequency Info."
This reverts commits r335794 and r335797. Breaks ThinLTO+FDO selfhost.
llvm-svn: 335851
Diffstat (limited to 'llvm/lib/Transforms')
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/CGProfile.cpp | 100 | ||||
| -rw-r--r-- | llvm/lib/Transforms/Instrumentation/CMakeLists.txt | 1 | 
2 files changed, 0 insertions, 101 deletions
| diff --git a/llvm/lib/Transforms/Instrumentation/CGProfile.cpp b/llvm/lib/Transforms/Instrumentation/CGProfile.cpp deleted file mode 100644 index 9606b3da247..00000000000 --- a/llvm/lib/Transforms/Instrumentation/CGProfile.cpp +++ /dev/null @@ -1,100 +0,0 @@ -//===-- CGProfile.cpp -----------------------------------------------------===// -// -//                      The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// - -#include "llvm/Transforms/Instrumentation/CGProfile.h" - -#include "llvm/ADT/MapVector.h" -#include "llvm/Analysis/BlockFrequencyInfo.h" -#include "llvm/Analysis/TargetTransformInfo.h" -#include "llvm/IR/CallSite.h" -#include "llvm/IR/Constants.h" -#include "llvm/IR/Instructions.h" -#include "llvm/IR/MDBuilder.h" -#include "llvm/IR/PassManager.h" -#include "llvm/ProfileData/InstrProf.h" -#include "llvm/Transforms/Instrumentation.h" - -#include <array> - -using namespace llvm; - -PreservedAnalyses CGProfilePass::run(Module &M, ModuleAnalysisManager &MAM) { -  MapVector<std::pair<Function *, Function *>, uint64_t> Counts; -  FunctionAnalysisManager &FAM = -      MAM.getResult<FunctionAnalysisManagerModuleProxy>(M).getManager(); -  InstrProfSymtab Symtab; -  auto UpdateCounts = [&](TargetTransformInfo &TTI, Function *F, -                          Function *CalledF, uint64_t NewCount) { -    if (!CalledF || !TTI.isLoweredToCall(CalledF)) -      return; -    uint64_t &Count = Counts[std::make_pair(F, CalledF)]; -    Count = SaturatingAdd(Count, NewCount); -  }; -  // Ignore error here.  Indirect calls are ignored if this fails. -  (void)(bool)Symtab.create(M); -  for (auto &F : M) { -    if (F.isDeclaration()) -      continue; -    auto &BFI = FAM.getResult<BlockFrequencyAnalysis>(F); -    if (BFI.getEntryFreq() == 0) -      continue; -    TargetTransformInfo &TTI = FAM.getResult<TargetIRAnalysis>(F); -    for (auto &BB : F) { -      Optional<uint64_t> BBCount = BFI.getBlockProfileCount(&BB); -      if (!BBCount) -        continue; -      for (auto &I : BB) { -        CallSite CS(&I); -        if (!CS) -          continue; -        if (CS.isIndirectCall()) { -          InstrProfValueData ValueData[8]; -          uint32_t ActualNumValueData; -          uint64_t TotalC; -          if (!getValueProfDataFromInst(*CS.getInstruction(), -                                        IPVK_IndirectCallTarget, 8, ValueData, -                                        ActualNumValueData, TotalC)) -            continue; -          for (const auto &VD : -               ArrayRef<InstrProfValueData>(ValueData, ActualNumValueData)) { -            UpdateCounts(TTI, &F, Symtab.getFunction(VD.Value), VD.Count); -          } -          continue; -        } -        UpdateCounts(TTI, &F, CS.getCalledFunction(), *BBCount); -      } -    } -  } - -  addModuleFlags(M, Counts); - -  return PreservedAnalyses::all(); -} - -void CGProfilePass::addModuleFlags( -    Module &M, -    MapVector<std::pair<Function *, Function *>, uint64_t> &Counts) const { -  if (Counts.empty()) -    return; - -  LLVMContext &Context = M.getContext(); -  MDBuilder MDB(Context); -  std::vector<Metadata *> Nodes; - -  for (auto E : Counts) { -    SmallVector<Metadata *, 3> Vals; -    Vals.push_back(ValueAsMetadata::get(E.first.first)); -    Vals.push_back(ValueAsMetadata::get(E.first.second)); -    Vals.push_back(MDB.createConstant( -        ConstantInt::get(Type::getInt64Ty(Context), E.second))); -    Nodes.push_back(MDNode::get(Context, Vals)); -  } - -  M.addModuleFlag(Module::Append, "CG Profile", MDNode::get(Context, Nodes)); -} diff --git a/llvm/lib/Transforms/Instrumentation/CMakeLists.txt b/llvm/lib/Transforms/Instrumentation/CMakeLists.txt index 5d008482319..66fdcb3ccc4 100644 --- a/llvm/lib/Transforms/Instrumentation/CMakeLists.txt +++ b/llvm/lib/Transforms/Instrumentation/CMakeLists.txt @@ -1,7 +1,6 @@  add_llvm_library(LLVMInstrumentation    AddressSanitizer.cpp    BoundsChecking.cpp -  CGProfile.cpp    DataFlowSanitizer.cpp    GCOVProfiling.cpp    MemorySanitizer.cpp | 

