[PATCH] D13919: Add helper functions and remove hard coded references to instProf related name/name-prefixes

Justin Bogner via llvm-commits llvm-commits at lists.llvm.org
Thu Oct 22 11:57:58 PDT 2015


David Li <davidxl at google.com> writes:
> davidxl created this revision.
> davidxl added a reviewer: bogner.
> davidxl added a subscriber: llvm-commits.
>
> This is a clean up patch that defines instr prof section and variable
> name prefixes in a common header with access helper functions.  clang
> FE change will be done as a follow up once this patch is in.

LGTM

> http://reviews.llvm.org/D13919
>
> Files:
>   include/llvm/ProfileData/InstrProf.h
>   lib/ProfileData/CoverageMappingReader.cpp
>   lib/Transforms/Instrumentation/InstrProfiling.cpp
>
> Index: lib/Transforms/Instrumentation/InstrProfiling.cpp
> ===================================================================
> --- lib/Transforms/Instrumentation/InstrProfiling.cpp
> +++ lib/Transforms/Instrumentation/InstrProfiling.cpp
> @@ -13,6 +13,7 @@
>  //
>  //===----------------------------------------------------------------------===//
>  
> +#include "llvm/ProfileData/InstrProf.h"
>  #include "llvm/Transforms/Instrumentation.h"
>  
>  #include "llvm/ADT/Triple.h"
> @@ -58,22 +59,22 @@
>  
>    /// Get the section name for the counter variables.
>    StringRef getCountersSection() const {
> -    return isMachO() ? "__DATA,__llvm_prf_cnts" : "__llvm_prf_cnts";
> +    return getInstrProfCountersSectionName(isMachO());
>    }
>  
>    /// Get the section name for the name variables.
>    StringRef getNameSection() const {
> -    return isMachO() ? "__DATA,__llvm_prf_names" : "__llvm_prf_names";
> +    return getInstrProfNameSectionName(isMachO());
>    }
>  
>    /// Get the section name for the profile data variables.
>    StringRef getDataSection() const {
> -    return isMachO() ? "__DATA,__llvm_prf_data" : "__llvm_prf_data";
> +    return getInstrProfDataSectionName(isMachO());
>    }
>  
>    /// Get the section name for the coverage mapping data.
>    StringRef getCoverageSection() const {
> -    return isMachO() ? "__DATA,__llvm_covmap" : "__llvm_covmap";
> +    return getInstrProfCoverageSectionName(isMachO());
>    }
>  
>    /// Replace instrprof_increment with an increment of the appropriate value.
> @@ -127,7 +128,8 @@
>            lowerIncrement(Inc);
>            MadeChange = true;
>          }
> -  if (GlobalVariable *Coverage = M.getNamedGlobal("__llvm_coverage_mapping")) {
> +  if (GlobalVariable *Coverage =
> +          M.getNamedGlobal(getCoverageMappingVarName())) {
>      lowerCoverageData(Coverage);
>      MadeChange = true;
>    }
> @@ -183,10 +185,10 @@
>  }
>  
>  /// Get the name of a profiling variable for a particular function.
> -static std::string getVarName(InstrProfIncrementInst *Inc, StringRef VarName) {
> +static std::string getVarName(InstrProfIncrementInst *Inc, StringRef Prefix) {
>    auto *Arr = cast<ConstantDataArray>(Inc->getName()->getInitializer());
>    StringRef Name = Arr->isCString() ? Arr->getAsCString() : Arr->getAsString();
> -  return ("__llvm_profile_" + VarName + "_" + Name).str();
> +  return (Prefix + Name).str();
>  }
>  
>  GlobalVariable *
> @@ -203,7 +205,8 @@
>    Function *Fn = Inc->getParent()->getParent();
>    Comdat *ProfileVarsComdat = nullptr;
>    if (Fn->hasComdat())
> -    ProfileVarsComdat = M->getOrInsertComdat(StringRef(getVarName(Inc, "vars")));
> +    ProfileVarsComdat = M->getOrInsertComdat(
> +        StringRef(getVarName(Inc, getInstrProfComdatPrefix())));
>    Name->setSection(getNameSection());
>    Name->setAlignment(1);
>    Name->setComdat(ProfileVarsComdat);
> @@ -213,9 +216,10 @@
>    ArrayType *CounterTy = ArrayType::get(Type::getInt64Ty(Ctx), NumCounters);
>  
>    // Create the counters variable.
> -  auto *Counters = new GlobalVariable(*M, CounterTy, false, Name->getLinkage(),
> -                                      Constant::getNullValue(CounterTy),
> -                                      getVarName(Inc, "counters"));
> +  auto *Counters =
> +      new GlobalVariable(*M, CounterTy, false, Name->getLinkage(),
> +                         Constant::getNullValue(CounterTy),
> +                         getVarName(Inc, getInstrProfCountersVarPrefix()));
>    Counters->setVisibility(Name->getVisibility());
>    Counters->setSection(getCountersSection());
>    Counters->setAlignment(8);
> @@ -240,7 +244,7 @@
>        ConstantExpr::getBitCast(Counters, Int64PtrTy)};
>    auto *Data = new GlobalVariable(*M, DataTy, true, Name->getLinkage(),
>                                    ConstantStruct::get(DataTy, DataVals),
> -                                  getVarName(Inc, "data"));
> +                                  getVarName(Inc, getInstrProfDataVarPrefix()));
>    Data->setVisibility(Name->getVisibility());
>    Data->setSection(getDataSection());
>    Data->setAlignment(8);
> Index: lib/ProfileData/CoverageMappingReader.cpp
> ===================================================================
> --- lib/ProfileData/CoverageMappingReader.cpp
> +++ lib/ProfileData/CoverageMappingReader.cpp
> @@ -477,10 +477,11 @@
>                                  : support::endianness::big;
>  
>    // Look for the sections that we are interested in.
> -  auto NamesSection = lookupSection(*OF, "__llvm_prf_names");
> +  auto NamesSection = lookupSection(*OF, getInstrProfNameSectionName(false));
>    if (auto EC = NamesSection.getError())
>      return EC;
> -  auto CoverageSection = lookupSection(*OF, "__llvm_covmap");
> +  auto CoverageSection =
> +      lookupSection(*OF, getInstrProfCoverageSectionName(false));
>    if (auto EC = CoverageSection.getError())
>      return EC;
>  
> Index: include/llvm/ProfileData/InstrProf.h
> ===================================================================
> --- include/llvm/ProfileData/InstrProf.h
> +++ include/llvm/ProfileData/InstrProf.h
> @@ -27,6 +27,37 @@
>  #include <vector>
>  
>  namespace llvm {
> +
> +inline StringRef getInstrProfCountersSectionName(bool AddSegment) {
> +  return AddSegment ? "__DATA,__llvm_prf_cnts" : "__llvm_prf_cnts";
> +}
> +
> +inline StringRef getInstrProfNameSectionName(bool AddSegment) {
> +  return AddSegment ? "__DATA,__llvm_prf_names" : "__llvm_prf_names";
> +}
> +
> +inline StringRef getInstrProfDataSectionName(bool AddSegment) {
> +  return AddSegment ? "__DATA,__llvm_prf_data" : "__llvm_prf_data";
> +}
> +
> +inline StringRef getInstrProfCoverageSectionName(bool AddSegment) {
> +  return AddSegment ? "__DATA,__llvm_covmap" : "__llvm_covmap";
> +}
> +
> +inline StringRef getInstrProfNameVarPrefix() { return "__llvm_profile_names_"; }
> +
> +inline StringRef getInstrProfDataVarPrefix() { return "__llvm_profile_data_"; }
> +
> +inline StringRef getInstrProfCountersVarPrefix() {
> +  return "__llvm_profile_counters_";
> +}
> +
> +inline StringRef getInstrProfComdatPrefix() { return "__llvm_profile_vars_"; }
> +
> +inline StringRef getCoverageMappingVarName() {
> +  return "__llvm_coverage_mapping";
> +}
> +
>  const std::error_category &instrprof_category();
>  
>  enum class instrprof_error {


More information about the llvm-commits mailing list