[llvm] r366153 - Revert "[NewPM] Port Sancov"

Philip Reames via llvm-commits llvm-commits at lists.llvm.org
Tue Jul 16 10:09:29 PDT 2019


Reminder: Please indicate *why* something is reverted when doing so.

On 7/15/19 4:18 PM, Leonard Chan via llvm-commits wrote:
> Author: leonardchan
> Date: Mon Jul 15 16:18:31 2019
> New Revision: 366153
>
> URL: http://llvm.org/viewvc/llvm-project?rev=366153&view=rev
> Log:
> Revert "[NewPM] Port Sancov"
>
> This reverts commit 5652f35817f07b16f8b3856d594cc42f4d7ee29c.
>
> Removed:
>      llvm/trunk/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h
> Modified:
>      llvm/trunk/include/llvm/InitializePasses.h
>      llvm/trunk/include/llvm/Transforms/Instrumentation.h
>      llvm/trunk/lib/Passes/PassBuilder.cpp
>      llvm/trunk/lib/Passes/PassRegistry.def
>      llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp
>      llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/backedge-pruning.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/chains.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_32.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_64.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-comdat.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-used-ctor.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/const-cmp-tracing.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage-dbg.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage2-dbg.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/div-tracing.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/gep-tracing.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/interposable-symbol-nocomdat.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/no-func.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/pc-table.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/postdominator_check.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/seh.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/switch-tracing.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-8bit-counters.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll
>      llvm/trunk/test/Instrumentation/SanitizerCoverage/wineh.ll
>
> Modified: llvm/trunk/include/llvm/InitializePasses.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/InitializePasses.h?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/InitializePasses.h (original)
> +++ llvm/trunk/include/llvm/InitializePasses.h Mon Jul 15 16:18:31 2019
> @@ -360,9 +360,7 @@ void initializeSROALegacyPassPass(PassRe
>   void initializeSafeStackLegacyPassPass(PassRegistry&);
>   void initializeSafepointIRVerifierPass(PassRegistry&);
>   void initializeSampleProfileLoaderLegacyPassPass(PassRegistry&);
> -void initializeSanitizerCoverageFunctionCheckLegacyPassPass(PassRegistry &);
> -void initializeSanitizerCoverageLegacyPassPass(PassRegistry &);
> -void initializeModuleSanitizerCoverageLegacyPassPass(PassRegistry &);
> +void initializeSanitizerCoverageModulePass(PassRegistry&);
>   void initializeScalarEvolutionWrapperPassPass(PassRegistry&);
>   void initializeScalarizeMaskedMemIntrinPass(PassRegistry&);
>   void initializeScalarizerLegacyPassPass(PassRegistry&);
>
> Modified: llvm/trunk/include/llvm/Transforms/Instrumentation.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Instrumentation.h?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Instrumentation.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Instrumentation.h Mon Jul 15 16:18:31 2019
> @@ -181,6 +181,10 @@ struct SanitizerCoverageOptions {
>     SanitizerCoverageOptions() = default;
>   };
>   
> +// Insert SanitizerCoverage instrumentation.
> +ModulePass *createSanitizerCoverageModulePass(
> +    const SanitizerCoverageOptions &Options = SanitizerCoverageOptions());
> +
>   /// Calculate what to divide by to scale counts.
>   ///
>   /// Given the maximum count, calculate a divisor that will scale all the
>
> Removed: llvm/trunk/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h?rev=366152&view=auto
> ==============================================================================
> --- llvm/trunk/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h (original)
> +++ llvm/trunk/include/llvm/Transforms/Instrumentation/SanitizerCoverage.h (removed)
> @@ -1,62 +0,0 @@
> -//===--------- Definition of the SanitizerCoverage class --------*- C++ -*-===//
> -//
> -//                     The LLVM Compiler Infrastructure
> -//
> -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
> -// See https://llvm.org/LICENSE.txt for license information.
> -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
> -//
> -//===----------------------------------------------------------------------===//
> -//
> -// This file declares the SanitizerCoverage class which is a port of the legacy
> -// SanitizerCoverage pass to use the new PassManager infrastructure.
> -//
> -//===----------------------------------------------------------------------===//
> -
> -#ifndef LLVM_TRANSFORMS_INSTRUMENTATION_SANITIZERCOVERAGE_H
> -#define LLVM_TRANSFORMS_INSTRUMENTATION_SANITIZERCOVERAGE_H
> -
> -#include "llvm/IR/Function.h"
> -#include "llvm/IR/Module.h"
> -#include "llvm/IR/PassManager.h"
> -#include "llvm/Transforms/Instrumentation.h"
> -
> -namespace llvm {
> -
> -/// This is the SanitizerCoverage pass used in the new pass manager. The
> -/// pass instruments functions for coverage.
> -class SanitizerCoveragePass : public PassInfoMixin<SanitizerCoveragePass> {
> -public:
> -  explicit SanitizerCoveragePass(
> -      SanitizerCoverageOptions Options = SanitizerCoverageOptions())
> -      : Options(Options) {}
> -  PreservedAnalyses run(Function &F, FunctionAnalysisManager &AM);
> -
> -private:
> -  SanitizerCoverageOptions Options;
> -};
> -
> -/// This is the ModuleSanitizerCoverage pass used in the new pass manager. This
> -/// adds initialization calls to the module for trace PC guards and 8bit
> -/// counters if they are requested.
> -class ModuleSanitizerCoveragePass
> -    : public PassInfoMixin<ModuleSanitizerCoveragePass> {
> -public:
> -  explicit ModuleSanitizerCoveragePass(
> -      SanitizerCoverageOptions Options = SanitizerCoverageOptions())
> -      : Options(Options) {}
> -  PreservedAnalyses run(Module &M, ModuleAnalysisManager &AM);
> -
> -private:
> -  SanitizerCoverageOptions Options;
> -};
> -
> -// Insert SanitizerCoverage instrumentation.
> -FunctionPass *createSanitizerCoverageLegacyPassPass(
> -    const SanitizerCoverageOptions &Options = SanitizerCoverageOptions());
> -ModulePass *createModuleSanitizerCoverageLegacyPassPass(
> -    const SanitizerCoverageOptions &Options = SanitizerCoverageOptions());
> -
> -} // namespace llvm
> -
> -#endif
>
> Modified: llvm/trunk/lib/Passes/PassBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassBuilder.cpp?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassBuilder.cpp (original)
> +++ llvm/trunk/lib/Passes/PassBuilder.cpp Mon Jul 15 16:18:31 2019
> @@ -101,7 +101,6 @@
>   #include "llvm/Transforms/Instrumentation/MemorySanitizer.h"
>   #include "llvm/Transforms/Instrumentation/PGOInstrumentation.h"
>   #include "llvm/Transforms/Instrumentation/PoisonChecking.h"
> -#include "llvm/Transforms/Instrumentation/SanitizerCoverage.h"
>   #include "llvm/Transforms/Instrumentation/ThreadSanitizer.h"
>   #include "llvm/Transforms/Scalar/ADCE.h"
>   #include "llvm/Transforms/Scalar/AlignmentFromAssumptions.h"
> @@ -144,8 +143,8 @@
>   #include "llvm/Transforms/Scalar/LowerWidenableCondition.h"
>   #include "llvm/Transforms/Scalar/MakeGuardsExplicit.h"
>   #include "llvm/Transforms/Scalar/MemCpyOptimizer.h"
> -#include "llvm/Transforms/Scalar/MergeICmps.h"
>   #include "llvm/Transforms/Scalar/MergedLoadStoreMotion.h"
> +#include "llvm/Transforms/Scalar/MergeICmps.h"
>   #include "llvm/Transforms/Scalar/NaryReassociate.h"
>   #include "llvm/Transforms/Scalar/NewGVN.h"
>   #include "llvm/Transforms/Scalar/PartiallyInlineLibCalls.h"
>
> Modified: llvm/trunk/lib/Passes/PassRegistry.def
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Passes/PassRegistry.def?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Passes/PassRegistry.def (original)
> +++ llvm/trunk/lib/Passes/PassRegistry.def Mon Jul 15 16:18:31 2019
> @@ -86,7 +86,6 @@ MODULE_PASS("wholeprogramdevirt", WholeP
>   MODULE_PASS("verify", VerifierPass())
>   MODULE_PASS("asan-module", ModuleAddressSanitizerPass(/*CompileKernel=*/false, false, true, false))
>   MODULE_PASS("kasan-module", ModuleAddressSanitizerPass(/*CompileKernel=*/true, false, true, false))
> -MODULE_PASS("sancov-module", ModuleSanitizerCoveragePass())
>   MODULE_PASS("poison-checking", PoisonCheckingPass())
>   #undef MODULE_PASS
>   
> @@ -246,7 +245,6 @@ FUNCTION_PASS("khwasan", HWAddressSaniti
>   FUNCTION_PASS("msan", MemorySanitizerPass({}))
>   FUNCTION_PASS("kmsan", MemorySanitizerPass({0, false, /*Kernel=*/true}))
>   FUNCTION_PASS("tsan", ThreadSanitizerPass())
> -FUNCTION_PASS("sancov-func", SanitizerCoveragePass())
>   #undef FUNCTION_PASS
>   
>   #ifndef FUNCTION_PASS_WITH_PARAMS
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/Instrumentation.cpp Mon Jul 15 16:18:31 2019
> @@ -116,7 +116,7 @@ void llvm::initializeInstrumentation(Pas
>     initializeMemorySanitizerLegacyPassPass(Registry);
>     initializeHWAddressSanitizerLegacyPassPass(Registry);
>     initializeThreadSanitizerLegacyPassPass(Registry);
> -  initializeSanitizerCoverageLegacyPassPass(Registry);
> +  initializeSanitizerCoverageModulePass(Registry);
>     initializeDataFlowSanitizerPass(Registry);
>   }
>   
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Mon Jul 15 16:18:31 2019
> @@ -10,7 +10,6 @@
>   //
>   //===----------------------------------------------------------------------===//
>   
> -#include "llvm/Transforms/Instrumentation/SanitizerCoverage.h"
>   #include "llvm/ADT/ArrayRef.h"
>   #include "llvm/ADT/SmallVector.h"
>   #include "llvm/Analysis/EHPersonalities.h"
> @@ -177,158 +176,24 @@ SanitizerCoverageOptions OverrideFromCL(
>     return Options;
>   }
>   
> -bool canInstrumentWithSancov(const Function &F) {
> -  if (F.empty())
> -    return false;
> -  if (F.getName().find(".module_ctor") != std::string::npos)
> -    return false; // Should not instrument sanitizer init functions.
> -  if (F.getName().startswith("__sanitizer_"))
> -    return false; // Don't instrument __sanitizer_* callbacks.
> -  // Don't touch available_externally functions, their actual body is elewhere.
> -  if (F.getLinkage() == GlobalValue::AvailableExternallyLinkage)
> -    return false;
> -  // Don't instrument MSVC CRT configuration helpers. They may run before normal
> -  // initialization.
> -  if (F.getName() == "__local_stdio_printf_options" ||
> -      F.getName() == "__local_stdio_scanf_options")
> -    return false;
> -  if (isa<UnreachableInst>(F.getEntryBlock().getTerminator()))
> -    return false;
> -  // Don't instrument functions using SEH for now. Splitting basic blocks like
> -  // we do for coverage breaks WinEHPrepare.
> -  // FIXME: Remove this when SEH no longer uses landingpad pattern matching.
> -  if (F.hasPersonalityFn() &&
> -      isAsynchronousEHPersonality(classifyEHPersonality(F.getPersonalityFn())))
> -    return false;
> -  return true;
> -}
> -
> -/// This is a class for instrumenting the module to add calls to initializing
> -/// the trace PC guards and 8bit counter globals. This should only be done
> -/// though if there is at least one function that can be instrumented with
> -/// Sancov.
> -class ModuleSanitizerCoverage {
> +class SanitizerCoverageModule : public ModulePass {
>   public:
> -  ModuleSanitizerCoverage(const SanitizerCoverageOptions &Options)
> -      : Options(OverrideFromCL(Options)) {}
> -
> -  bool instrumentModule(Module &M) {
> -    if (Options.CoverageType == SanitizerCoverageOptions::SCK_None)
> -      return false;
> -
> -    Function *Ctor = nullptr;
> -    LLVMContext *C = &(M.getContext());
> -    const DataLayout *DL = &M.getDataLayout();
> -    TargetTriple = Triple(M.getTargetTriple());
> -    IntptrTy = Type::getIntNTy(*C, DL->getPointerSizeInBits());
> -    Type *IntptrPtrTy = PointerType::getUnqual(IntptrTy);
> -    IRBuilder<> IRB(*C);
> -    Type *Int32PtrTy = PointerType::getUnqual(IRB.getInt32Ty());
> -    Int8PtrTy = PointerType::getUnqual(IRB.getInt8Ty());
> -    Int8Ty = IRB.getInt8Ty();
> -
> -    // Check that the __sancov_lowest_stack marker does not already exist.
> -    Constant *SanCovLowestStackConstant =
> -        M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
> -    GlobalVariable *SanCovLowestStack =
> -        dyn_cast<GlobalVariable>(SanCovLowestStackConstant);
> -    if (!SanCovLowestStack) {
> -      C->emitError(StringRef("'") + SanCovLowestStackName +
> -                   "' should not be declared by the user");
> -      return true;
> -    }
> -
> -    // We want to emit guard init calls if the module contains a function that
> -    // we can instrument with SanitizerCoverage. We ignore any functions that
> -    // were inserted by SanitizerCoverage and get the result from the analysis
> -    // that checks for a valid function that the analysis may have run over.
> -    if (!llvm::any_of(
> -            M, [](const Function &F) { return canInstrumentWithSancov(F); }))
> -      return false;
> -
> -    // Emit the init calls.
> -    if (Options.TracePCGuard)
> -      Ctor = CreateInitCallsForSections(M, SanCovModuleCtorTracePcGuardName,
> -                                        SanCovTracePCGuardInitName, Int32PtrTy,
> -                                        SanCovGuardsSectionName);
> -    if (Options.Inline8bitCounters)
> -      Ctor = CreateInitCallsForSections(M, SanCovModuleCtor8bitCountersName,
> -                                        SanCov8bitCountersInitName, Int8PtrTy,
> -                                        SanCovCountersSectionName);
> -    if (Ctor && Options.PCTable) {
> -      auto SecStartEnd =
> -          CreateSecStartEnd(M, SanCovPCsSectionName, IntptrPtrTy);
> -      FunctionCallee InitFunction = declareSanitizerInitFunction(
> -          M, SanCovPCsInitName, {IntptrPtrTy, IntptrPtrTy});
> -      IRBuilder<> IRBCtor(Ctor->getEntryBlock().getTerminator());
> -      IRBCtor.CreateCall(InitFunction, {SecStartEnd.first, SecStartEnd.second});
> -    }
> -    return Ctor;
> -  }
> -
> -private:
> -  Function *CreateInitCallsForSections(Module &M, const char *CtorName,
> -                                       const char *InitFunctionName, Type *Ty,
> -                                       const char *Section);
> -  std::pair<Value *, Value *> CreateSecStartEnd(Module &M, const char *Section,
> -                                                Type *Ty);
> -  std::string getSectionStart(const std::string &Section) const {
> -    if (TargetTriple.isOSBinFormatMachO())
> -      return "\1section$start$__DATA$__" + Section;
> -    return "__start___" + Section;
> -  }
> -  std::string getSectionEnd(const std::string &Section) const {
> -    if (TargetTriple.isOSBinFormatMachO())
> -      return "\1section$end$__DATA$__" + Section;
> -    return "__stop___" + Section;
> +  SanitizerCoverageModule(
> +      const SanitizerCoverageOptions &Options = SanitizerCoverageOptions())
> +      : ModulePass(ID), Options(OverrideFromCL(Options)) {
> +    initializeSanitizerCoverageModulePass(*PassRegistry::getPassRegistry());
>     }
> +  bool runOnModule(Module &M) override;
> +  bool runOnFunction(Function &F);
> +  static char ID; // Pass identification, replacement for typeid
> +  StringRef getPassName() const override { return "SanitizerCoverageModule"; }
>   
> -  SanitizerCoverageOptions Options;
> -  Triple TargetTriple;
> -  Type *IntptrTy, *Int8PtrTy, *Int8Ty;
> -};
> -
> -class ModuleSanitizerCoverageLegacyPass : public ModulePass {
> -public:
> -  static char ID;
> -
> -  ModuleSanitizerCoverageLegacyPass(
> -      SanitizerCoverageOptions Options = SanitizerCoverageOptions())
> -      : ModulePass(ID), Options(Options) {
> -    initializeModuleSanitizerCoverageLegacyPassPass(
> -        *PassRegistry::getPassRegistry());
> -  }
> -
> -  bool runOnModule(Module &M) override {
> -    ModuleSanitizerCoverage ModuleSancov(Options);
> -    return ModuleSancov.instrumentModule(M);
> -  };
> -
> -  StringRef getPassName() const override {
> -    return "ModuleSanitizerCoverageLegacyPass";
> -  }
> -
> -private:
> -  SanitizerCoverageOptions Options;
> -};
> -
> -char ModuleSanitizerCoverageLegacyPass::ID = 0;
> -
> -class SanitizerCoverage {
> -public:
> -  SanitizerCoverage(Function &F, const SanitizerCoverageOptions &Options)
> -      : CurModule(F.getParent()), Options(OverrideFromCL(Options)) {
> -    initializeModule(*F.getParent());
> +  void getAnalysisUsage(AnalysisUsage &AU) const override {
> +    AU.addRequired<DominatorTreeWrapperPass>();
> +    AU.addRequired<PostDominatorTreeWrapperPass>();
>     }
>   
> -  ~SanitizerCoverage() { finalizeModule(*CurModule); }
> -
> -  bool instrumentFunction(Function &F, const DominatorTree *DT,
> -                          const PostDominatorTree *PDT);
> -
>   private:
> -  void initializeModule(Module &M);
> -  void finalizeModule(Module &M);
>     void InjectCoverageForIndirectCalls(Function &F,
>                                         ArrayRef<Instruction *> IndirCalls);
>     void InjectTraceForCmp(Function &F, ArrayRef<Instruction *> CmpTraceTargets);
> @@ -347,6 +212,11 @@ private:
>     void CreateFunctionLocalArrays(Function &F, ArrayRef<BasicBlock *> AllBlocks);
>     void InjectCoverageAtBlock(Function &F, BasicBlock &BB, size_t Idx,
>                                bool IsLeafFunc = true);
> +  Function *CreateInitCallsForSections(Module &M, const char *CtorName,
> +                                       const char *InitFunctionName, Type *Ty,
> +                                       const char *Section);
> +  std::pair<Value *, Value *> CreateSecStartEnd(Module &M, const char *Section,
> +                                                Type *Ty);
>   
>     void SetNoSanitizeMetadata(Instruction *I) {
>       I->setMetadata(I->getModule()->getMDKindID("nosanitize"),
> @@ -354,6 +224,8 @@ private:
>     }
>   
>     std::string getSectionName(const std::string &Section) const;
> +  std::string getSectionStart(const std::string &Section) const;
> +  std::string getSectionEnd(const std::string &Section) const;
>     FunctionCallee SanCovTracePCIndir;
>     FunctionCallee SanCovTracePC, SanCovTracePCGuard;
>     FunctionCallee SanCovTraceCmpFunction[4];
> @@ -380,63 +252,10 @@ private:
>     SanitizerCoverageOptions Options;
>   };
>   
> -class SanitizerCoverageLegacyPass : public FunctionPass {
> -public:
> -  static char ID; // Pass identification, replacement for typeid
> -
> -  SanitizerCoverageLegacyPass(
> -      SanitizerCoverageOptions Options = SanitizerCoverageOptions())
> -      : FunctionPass(ID), Options(Options) {
> -    initializeSanitizerCoverageLegacyPassPass(*PassRegistry::getPassRegistry());
> -  }
> -
> -  bool runOnFunction(Function &F) override {
> -    const DominatorTree *DT =
> -        &getAnalysis<DominatorTreeWrapperPass>().getDomTree();
> -    const PostDominatorTree *PDT =
> -        &getAnalysis<PostDominatorTreeWrapperPass>().getPostDomTree();
> -    SanitizerCoverage Sancov(F, Options);
> -    return Sancov.instrumentFunction(F, DT, PDT);
> -  }
> -
> -  StringRef getPassName() const override {
> -    return "SanitizerCoverageLegacyPass";
> -  }
> -
> -  void getAnalysisUsage(AnalysisUsage &AU) const override {
> -    // Make the module sancov pass required by this pass so that it runs when
> -    // -sancov is passed.
> -    AU.addRequired<ModuleSanitizerCoverageLegacyPass>();
> -    AU.addRequired<DominatorTreeWrapperPass>();
> -    AU.addRequired<PostDominatorTreeWrapperPass>();
> -  }
> -
> -private:
> -  SanitizerCoverageOptions Options;
> -};
> -
>   } // namespace
>   
> -PreservedAnalyses SanitizerCoveragePass::run(Function &F,
> -                                             FunctionAnalysisManager &AM) {
> -  const DominatorTree *DT = &AM.getResult<DominatorTreeAnalysis>(F);
> -  const PostDominatorTree *PDT = &AM.getResult<PostDominatorTreeAnalysis>(F);
> -  SanitizerCoverage Sancov(F, Options);
> -  if (Sancov.instrumentFunction(F, DT, PDT))
> -    return PreservedAnalyses::none();
> -  return PreservedAnalyses::all();
> -}
> -
> -PreservedAnalyses ModuleSanitizerCoveragePass::run(Module &M,
> -                                                   ModuleAnalysisManager &AM) {
> -  ModuleSanitizerCoverage ModuleSancov(Options);
> -  if (ModuleSancov.instrumentModule(M))
> -    return PreservedAnalyses::none();
> -  return PreservedAnalyses::all();
> -}
> -
>   std::pair<Value *, Value *>
> -ModuleSanitizerCoverage::CreateSecStartEnd(Module &M, const char *Section,
> +SanitizerCoverageModule::CreateSecStartEnd(Module &M, const char *Section,
>                                              Type *Ty) {
>     GlobalVariable *SecStart =
>         new GlobalVariable(M, Ty, false, GlobalVariable::ExternalLinkage, nullptr,
> @@ -446,7 +265,6 @@ ModuleSanitizerCoverage::CreateSecStartE
>         new GlobalVariable(M, Ty, false, GlobalVariable::ExternalLinkage,
>                            nullptr, getSectionEnd(Section));
>     SecEnd->setVisibility(GlobalValue::HiddenVisibility);
> -
>     IRBuilder<> IRB(M.getContext());
>     Value *SecEndPtr = IRB.CreatePointerCast(SecEnd, Ty);
>     if (!TargetTriple.isOSBinFormatCOFF())
> @@ -460,7 +278,7 @@ ModuleSanitizerCoverage::CreateSecStartE
>     return std::make_pair(IRB.CreatePointerCast(GEP, Ty), SecEndPtr);
>   }
>   
> -Function *ModuleSanitizerCoverage::CreateInitCallsForSections(
> +Function *SanitizerCoverageModule::CreateInitCallsForSections(
>       Module &M, const char *CtorName, const char *InitFunctionName, Type *Ty,
>       const char *Section) {
>     auto SecStartEnd = CreateSecStartEnd(M, Section, Ty);
> @@ -492,11 +310,12 @@ Function *ModuleSanitizerCoverage::Creat
>     return CtorFunc;
>   }
>   
> -void SanitizerCoverage::initializeModule(Module &M) {
> +bool SanitizerCoverageModule::runOnModule(Module &M) {
>     if (Options.CoverageType == SanitizerCoverageOptions::SCK_None)
> -    return;
> +    return false;
>     C = &(M.getContext());
>     DL = &M.getDataLayout();
> +  CurModule = &M;
>     CurModuleUniqueId = getUniqueModuleId(CurModule);
>     TargetTriple = Triple(M.getTargetTriple());
>     FunctionGuardArray = nullptr;
> @@ -564,6 +383,11 @@ void SanitizerCoverage::initializeModule
>     Constant *SanCovLowestStackConstant =
>         M.getOrInsertGlobal(SanCovLowestStackName, IntptrTy);
>     SanCovLowestStack = dyn_cast<GlobalVariable>(SanCovLowestStackConstant);
> +  if (!SanCovLowestStack) {
> +    C->emitError(StringRef("'") + SanCovLowestStackName +
> +                 "' should not be declared by the user");
> +    return true;
> +  }
>     SanCovLowestStack->setThreadLocalMode(
>         GlobalValue::ThreadLocalMode::InitialExecTLSModel);
>     if (Options.StackDepth && !SanCovLowestStack->isDeclaration())
> @@ -577,14 +401,33 @@ void SanitizerCoverage::initializeModule
>     SanCovTracePC = M.getOrInsertFunction(SanCovTracePCName, VoidTy);
>     SanCovTracePCGuard =
>         M.getOrInsertFunction(SanCovTracePCGuardName, VoidTy, Int32PtrTy);
> -}
>   
> -void SanitizerCoverage::finalizeModule(Module &M) {
> +  for (auto &F : M)
> +    runOnFunction(F);
> +
> +  Function *Ctor = nullptr;
> +
> +  if (FunctionGuardArray)
> +    Ctor = CreateInitCallsForSections(M, SanCovModuleCtorTracePcGuardName,
> +                                      SanCovTracePCGuardInitName, Int32PtrTy,
> +                                      SanCovGuardsSectionName);
> +  if (Function8bitCounterArray)
> +    Ctor = CreateInitCallsForSections(M, SanCovModuleCtor8bitCountersName,
> +                                      SanCov8bitCountersInitName, Int8PtrTy,
> +                                      SanCovCountersSectionName);
> +  if (Ctor && Options.PCTable) {
> +    auto SecStartEnd = CreateSecStartEnd(M, SanCovPCsSectionName, IntptrPtrTy);
> +    FunctionCallee InitFunction = declareSanitizerInitFunction(
> +        M, SanCovPCsInitName, {IntptrPtrTy, IntptrPtrTy});
> +    IRBuilder<> IRBCtor(Ctor->getEntryBlock().getTerminator());
> +    IRBCtor.CreateCall(InitFunction, {SecStartEnd.first, SecStartEnd.second});
> +  }
>     // We don't reference these arrays directly in any of our runtime functions,
>     // so we need to prevent them from being dead stripped.
>     if (TargetTriple.isOSBinFormatMachO())
>       appendToUsed(M, GlobalsToAppendToUsed);
>     appendToCompilerUsed(M, GlobalsToAppendToCompilerUsed);
> +  return true;
>   }
>   
>   // True if block has successors and it dominates all of them.
> @@ -675,11 +518,28 @@ static bool IsInterestingCmp(ICmpInst *C
>     return true;
>   }
>   
> -bool SanitizerCoverage::instrumentFunction(Function &F, const DominatorTree *DT,
> -                                           const PostDominatorTree *PDT) {
> -  if (Options.CoverageType == SanitizerCoverageOptions::SCK_None)
> +bool SanitizerCoverageModule::runOnFunction(Function &F) {
> +  if (F.empty())
> +    return false;
> +  if (F.getName().find(".module_ctor") != std::string::npos)
> +    return false; // Should not instrument sanitizer init functions.
> +  if (F.getName().startswith("__sanitizer_"))
> +    return false;  // Don't instrument __sanitizer_* callbacks.
> +  // Don't touch available_externally functions, their actual body is elewhere.
> +  if (F.getLinkage() == GlobalValue::AvailableExternallyLinkage)
>       return false;
> -  if (!canInstrumentWithSancov(F))
> +  // Don't instrument MSVC CRT configuration helpers. They may run before normal
> +  // initialization.
> +  if (F.getName() == "__local_stdio_printf_options" ||
> +      F.getName() == "__local_stdio_scanf_options")
> +    return false;
> +  if (isa<UnreachableInst>(F.getEntryBlock().getTerminator()))
> +    return false;
> +  // Don't instrument functions using SEH for now. Splitting basic blocks like
> +  // we do for coverage breaks WinEHPrepare.
> +  // FIXME: Remove this when SEH no longer uses landingpad pattern matching.
> +  if (F.hasPersonalityFn() &&
> +      isAsynchronousEHPersonality(classifyEHPersonality(F.getPersonalityFn())))
>       return false;
>     if (Options.CoverageType >= SanitizerCoverageOptions::SCK_Edge)
>       SplitAllCriticalEdges(F, CriticalEdgeSplittingOptions().setIgnoreUnreachableDests());
> @@ -690,6 +550,10 @@ bool SanitizerCoverage::instrumentFuncti
>     SmallVector<BinaryOperator *, 8> DivTraceTargets;
>     SmallVector<GetElementPtrInst *, 8> GepTraceTargets;
>   
> +  const DominatorTree *DT =
> +      &getAnalysis<DominatorTreeWrapperPass>(F).getDomTree();
> +  const PostDominatorTree *PDT =
> +      &getAnalysis<PostDominatorTreeWrapperPass>(F).getPostDomTree();
>     bool IsLeafFunc = true;
>   
>     for (auto &BB : F) {
> @@ -732,7 +596,7 @@ bool SanitizerCoverage::instrumentFuncti
>     return true;
>   }
>   
> -GlobalVariable *SanitizerCoverage::CreateFunctionLocalArrayInSection(
> +GlobalVariable *SanitizerCoverageModule::CreateFunctionLocalArrayInSection(
>       size_t NumElements, Function &F, Type *Ty, const char *Section) {
>     ArrayType *ArrayTy = ArrayType::get(Ty, NumElements);
>     auto Array = new GlobalVariable(
> @@ -755,8 +619,8 @@ GlobalVariable *SanitizerCoverage::Creat
>   }
>   
>   GlobalVariable *
> -SanitizerCoverage::CreatePCArray(Function &F,
> -                                 ArrayRef<BasicBlock *> AllBlocks) {
> +SanitizerCoverageModule::CreatePCArray(Function &F,
> +                                       ArrayRef<BasicBlock *> AllBlocks) {
>     size_t N = AllBlocks.size();
>     assert(N);
>     SmallVector<Constant *, 32> PCs;
> @@ -782,7 +646,7 @@ SanitizerCoverage::CreatePCArray(Functio
>     return PCArray;
>   }
>   
> -void SanitizerCoverage::CreateFunctionLocalArrays(
> +void SanitizerCoverageModule::CreateFunctionLocalArrays(
>       Function &F, ArrayRef<BasicBlock *> AllBlocks) {
>     if (Options.TracePCGuard)
>       FunctionGuardArray = CreateFunctionLocalArrayInSection(
> @@ -796,9 +660,9 @@ void SanitizerCoverage::CreateFunctionLo
>       FunctionPCsArray = CreatePCArray(F, AllBlocks);
>   }
>   
> -bool SanitizerCoverage::InjectCoverage(Function &F,
> -                                       ArrayRef<BasicBlock *> AllBlocks,
> -                                       bool IsLeafFunc) {
> +bool SanitizerCoverageModule::InjectCoverage(Function &F,
> +                                             ArrayRef<BasicBlock *> AllBlocks,
> +                                             bool IsLeafFunc) {
>     if (AllBlocks.empty()) return false;
>     CreateFunctionLocalArrays(F, AllBlocks);
>     for (size_t i = 0, N = AllBlocks.size(); i < N; i++)
> @@ -813,7 +677,7 @@ bool SanitizerCoverage::InjectCoverage(F
>   //     The cache is used to speed up recording the caller-callee pairs.
>   // The address of the caller is passed implicitly via caller PC.
>   // CacheSize is encoded in the name of the run-time function.
> -void SanitizerCoverage::InjectCoverageForIndirectCalls(
> +void SanitizerCoverageModule::InjectCoverageForIndirectCalls(
>       Function &F, ArrayRef<Instruction *> IndirCalls) {
>     if (IndirCalls.empty())
>       return;
> @@ -832,7 +696,7 @@ void SanitizerCoverage::InjectCoverageFo
>   // __sanitizer_cov_trace_switch(CondValue,
>   //      {NumCases, ValueSizeInBits, Case0Value, Case1Value, Case2Value, ... })
>   
> -void SanitizerCoverage::InjectTraceForSwitch(
> +void SanitizerCoverageModule::InjectTraceForSwitch(
>       Function &, ArrayRef<Instruction *> SwitchTraceTargets) {
>     for (auto I : SwitchTraceTargets) {
>       if (SwitchInst *SI = dyn_cast<SwitchInst>(I)) {
> @@ -871,7 +735,7 @@ void SanitizerCoverage::InjectTraceForSw
>     }
>   }
>   
> -void SanitizerCoverage::InjectTraceForDiv(
> +void SanitizerCoverageModule::InjectTraceForDiv(
>       Function &, ArrayRef<BinaryOperator *> DivTraceTargets) {
>     for (auto BO : DivTraceTargets) {
>       IRBuilder<> IRB(BO);
> @@ -889,7 +753,7 @@ void SanitizerCoverage::InjectTraceForDi
>     }
>   }
>   
> -void SanitizerCoverage::InjectTraceForGep(
> +void SanitizerCoverageModule::InjectTraceForGep(
>       Function &, ArrayRef<GetElementPtrInst *> GepTraceTargets) {
>     for (auto GEP : GepTraceTargets) {
>       IRBuilder<> IRB(GEP);
> @@ -900,7 +764,7 @@ void SanitizerCoverage::InjectTraceForGe
>     }
>   }
>   
> -void SanitizerCoverage::InjectTraceForCmp(
> +void SanitizerCoverageModule::InjectTraceForCmp(
>       Function &, ArrayRef<Instruction *> CmpTraceTargets) {
>     for (auto I : CmpTraceTargets) {
>       if (ICmpInst *ICMP = dyn_cast<ICmpInst>(I)) {
> @@ -935,8 +799,9 @@ void SanitizerCoverage::InjectTraceForCm
>     }
>   }
>   
> -void SanitizerCoverage::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
> -                                              size_t Idx, bool IsLeafFunc) {
> +void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
> +                                                    size_t Idx,
> +                                                    bool IsLeafFunc) {
>     BasicBlock::iterator IP = BB.getFirstInsertionPt();
>     bool IsEntryBB = &BB == &F.getEntryBlock();
>     DebugLoc EntryLoc;
> @@ -993,7 +858,7 @@ void SanitizerCoverage::InjectCoverageAt
>   }
>   
>   std::string
> -SanitizerCoverage::getSectionName(const std::string &Section) const {
> +SanitizerCoverageModule::getSectionName(const std::string &Section) const {
>     if (TargetTriple.isOSBinFormatCOFF()) {
>       if (Section == SanCovCountersSectionName)
>         return ".SCOV$CM";
> @@ -1006,25 +871,33 @@ SanitizerCoverage::getSectionName(const
>     return "__" + Section;
>   }
>   
> -INITIALIZE_PASS(ModuleSanitizerCoverageLegacyPass, "module-sancov",
> -                "Pass for inserting sancov top-level initialization calls",
> -                false, false)
> -
> -char SanitizerCoverageLegacyPass::ID = 0;
> -INITIALIZE_PASS_BEGIN(SanitizerCoverageLegacyPass, "sancov",
> -                      "Pass for instrumenting coverage on functions", false,
> -                      false)
> -INITIALIZE_PASS_DEPENDENCY(ModuleSanitizerCoverageLegacyPass)
> +std::string
> +SanitizerCoverageModule::getSectionStart(const std::string &Section) const {
> +  if (TargetTriple.isOSBinFormatMachO())
> +    return "\1section$start$__DATA$__" + Section;
> +  return "__start___" + Section;
> +}
> +
> +std::string
> +SanitizerCoverageModule::getSectionEnd(const std::string &Section) const {
> +  if (TargetTriple.isOSBinFormatMachO())
> +    return "\1section$end$__DATA$__" + Section;
> +  return "__stop___" + Section;
> +}
> +
> +
> +char SanitizerCoverageModule::ID = 0;
> +INITIALIZE_PASS_BEGIN(SanitizerCoverageModule, "sancov",
> +                      "SanitizerCoverage: TODO."
> +                      "ModulePass",
> +                      false, false)
>   INITIALIZE_PASS_DEPENDENCY(DominatorTreeWrapperPass)
>   INITIALIZE_PASS_DEPENDENCY(PostDominatorTreeWrapperPass)
> -INITIALIZE_PASS_END(SanitizerCoverageLegacyPass, "sancov",
> -                    "Pass for instrumenting coverage on functions", false,
> -                    false)
> -FunctionPass *llvm::createSanitizerCoverageLegacyPassPass(
> -    const SanitizerCoverageOptions &Options) {
> -  return new SanitizerCoverageLegacyPass(Options);
> -}
> -ModulePass *llvm::createModuleSanitizerCoverageLegacyPassPass(
> +INITIALIZE_PASS_END(SanitizerCoverageModule, "sancov",
> +                    "SanitizerCoverage: TODO."
> +                    "ModulePass",
> +                    false, false)
> +ModulePass *llvm::createSanitizerCoverageModulePass(
>       const SanitizerCoverageOptions &Options) {
> -  return new ModuleSanitizerCoverageLegacyPass(Options);
> +  return new SanitizerCoverageModule(Options);
>   }
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/abort-in-entry-block.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Checks that a function with no-return in the entry block is not instrumented.
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -S | FileCheck %s
>   ; CHECK-NOT: call void @__sanitizer_cov_trace_pc_guard
>   
>   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/backedge-pruning.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/backedge-pruning.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/backedge-pruning.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/backedge-pruning.ll Mon Jul 15 16:18:31 2019
> @@ -1,8 +1,6 @@
>   ; Test -sanitizer-coverage-trace-compares=1 and how it prunes backedge compares.
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s --check-prefix=PRUNE
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -sanitizer-coverage-prune-blocks=0 -S | FileCheck %s --check-prefix=NOPRUNE
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s --check-prefix=PRUNE
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -sanitizer-coverage-prune-blocks=0 -S | FileCheck %s --check-prefix=NOPRUNE
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/chains.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/chains.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/chains.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/chains.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=1  -S | FileCheck %s
>   
>   define i32 @blah(i32) #0 {
>     %2 = icmp sgt i32 %0, 1
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_32.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_32.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_32.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_32.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-compares=1 API declarations on a non-x86_64 arch
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
>   
>   target triple = "i386-unknown-linux-gnu"
>   define i32 @foo() #0 {
> @@ -8,16 +7,16 @@ entry:
>     ret i32 0
>   }
>   
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_indir(i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp1(i8, i8)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp2(i16, i16)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp4(i32, i32)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp8(i64, i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_div4(i32)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_div8(i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_gep(i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_switch(i64, i64*)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc()
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_guard(i32*)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_guard_init(i32*, i32*)
> +; CHECK: declare void @__sanitizer_cov_trace_pc_indir(i64)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp1(i8, i8)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp2(i16, i16)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp4(i32, i32)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp8(i64, i64)
> +; CHECK: declare void @__sanitizer_cov_trace_div4(i32)
> +; CHECK: declare void @__sanitizer_cov_trace_div8(i64)
> +; CHECK: declare void @__sanitizer_cov_trace_gep(i64)
> +; CHECK: declare void @__sanitizer_cov_trace_switch(i64, i64*)
> +; CHECK: declare void @__sanitizer_cov_trace_pc()
> +; CHECK: declare void @__sanitizer_cov_trace_pc_guard(i32*)
> +; CHECK: declare void @__sanitizer_cov_trace_pc_guard_init(i32*, i32*)
>   ; CHECK-NOT: declare
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_64.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_64.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_64.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_64.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-compares=1 API declarations on x86_64
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
>   
>   target triple = "x86_64-unknown-linux-gnu"
>   define i32 @foo() #0 {
> @@ -8,16 +7,16 @@ entry:
>     ret i32 0
>   }
>   
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_indir(i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp1(i8 zeroext, i8 zeroext)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp2(i16 zeroext, i16 zeroext)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp4(i32 zeroext, i32 zeroext)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp8(i64, i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_div4(i32 zeroext)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_div8(i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_gep(i64)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_switch(i64, i64*)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc()
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_guard(i32*)
> -; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_guard_init(i32*, i32*)
> +; CHECK: declare void @__sanitizer_cov_trace_pc_indir(i64)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp1(i8 zeroext, i8 zeroext)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp2(i16 zeroext, i16 zeroext)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp4(i32 zeroext, i32 zeroext)
> +; CHECK: declare void @__sanitizer_cov_trace_cmp8(i64, i64)
> +; CHECK: declare void @__sanitizer_cov_trace_div4(i32 zeroext)
> +; CHECK: declare void @__sanitizer_cov_trace_div8(i64)
> +; CHECK: declare void @__sanitizer_cov_trace_gep(i64)
> +; CHECK: declare void @__sanitizer_cov_trace_switch(i64, i64*)
> +; CHECK: declare void @__sanitizer_cov_trace_pc()
> +; CHECK: declare void @__sanitizer_cov_trace_pc_guard(i32*)
> +; CHECK: declare void @__sanitizer_cov_trace_pc_guard_init(i32*, i32*)
>   ; CHECK-NOT: declare
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/cmp-tracing.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-compares=1
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-comdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-comdat.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-comdat.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-comdat.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1 -S | FileCheck %s
>   
>   ; Make sure we use the right comdat groups for COFF to avoid relocations
>   ; against discarded sections. Internal linkage functions are also different from
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Checks that the PC and 8-bit Counter Arrays are placed in their own sections in COFF binaries.
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1 -S | FileCheck %s
>   target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-pc-windows-msvc19.14.26433"
>   
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-used-ctor.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-used-ctor.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-used-ctor.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-used-ctor.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Checks that sancov.module_ctor is marked used.
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1 -S | FileCheck %s
>   target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-pc-windows-msvc19.14.26433"
>   
> @@ -9,4 +8,4 @@ entry:
>     ret void
>   }
>   
> -; CHECK: @llvm.used = appending global {{.*}} @sancov.module_ctor
> +; CHECK: @llvm.used = appending global {{.*}} @sancov.module_ctor
> \ No newline at end of file
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/const-cmp-tracing.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/const-cmp-tracing.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/const-cmp-tracing.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/const-cmp-tracing.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-compares=1
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage-dbg.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage-dbg.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage-dbg.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage-dbg.ll Mon Jul 15 16:18:31 2019
> @@ -1,7 +1,6 @@
>   ; Test that coverage instrumentation does not lose debug location.
>   
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -S | FileCheck %s
>   
>   ; C++ source:
>   ; 1: struct A {
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll Mon Jul 15 16:18:31 2019
> @@ -1,8 +1,6 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC
> -; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s --check-prefix=CHECKPRUNE
>   
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s --check-prefix=CHECKPRUNE
> +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s --check-prefix=CHECKPRUNE
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage2-dbg.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage2-dbg.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage2-dbg.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage2-dbg.ll Mon Jul 15 16:18:31 2019
> @@ -1,7 +1,6 @@
>   ; Test that coverage instrumentation does not lose debug location.
>   
>   ; RUN: opt < %s -sancov  -sanitizer-coverage-level=2 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=2 -S | FileCheck %s
>   
>   ; C++ source:
>   ; 1: void foo(int *a) {
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/div-tracing.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/div-tracing.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/div-tracing.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/div-tracing.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-divs=1
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-divs=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-divs=1  -S | FileCheck %s
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/gep-tracing.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/gep-tracing.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/gep-tracing.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/gep-tracing.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-geps=1
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-geps=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-geps=1  -S | FileCheck %s
>   
>   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/inline-8bit-counters.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-inline-8bit-counters=1
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-8bit-counters=1  -S | FileCheck %s
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/interposable-symbol-nocomdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/interposable-symbol-nocomdat.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/interposable-symbol-nocomdat.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/interposable-symbol-nocomdat.ll Mon Jul 15 16:18:31 2019
> @@ -1,8 +1,6 @@
>   ; Test that interposable symbols do not get put in comdats.
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -mtriple x86_64-linux-gnu -S | FileCheck %s
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -mtriple x86_64-windows-msvc -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -mtriple x86_64-linux-gnu -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -mtriple x86_64-windows-msvc -S | FileCheck %s
>   
>   define void @Vanilla() {
>   entry:
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/no-func.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/no-func.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/no-func.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/no-func.ll Mon Jul 15 16:18:31 2019
> @@ -1,7 +1,6 @@
>   ; Tests that we don't insert __sanitizer_cov_trace_pc_guard_init or some such
>   ; when there is no instrumentation.
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s
>   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-unknown-linux-gnu"
>   
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/pc-table.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/pc-table.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/pc-table.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/pc-table.ll Mon Jul 15 16:18:31 2019
> @@ -1,8 +1,6 @@
>   ; Test -sanitizer-coverage-pc-table=1
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard       -sanitizer-coverage-pc-table=1 -S | FileCheck %s
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard       -sanitizer-coverage-pc-table=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/postdominator_check.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/postdominator_check.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/postdominator_check.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/postdominator_check.ll Mon Jul 15 16:18:31 2019
> @@ -1,7 +1,5 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=0 -S | FileCheck %s --check-prefix=CHECK_NO_PRUNE
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc -sanitizer-coverage-prune-blocks=0 -S | FileCheck %s --check-prefix=CHECK_NO_PRUNE
>   
>   define i32 @foo(i32) #0 {
>     %2 = icmp sgt i32 %0, 0
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/seh.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/seh.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/seh.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/seh.ll Mon Jul 15 16:18:31 2019
> @@ -1,9 +1,6 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=0 -S | FileCheck %s
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -S | FileCheck %s
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=2 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=0 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=2 -S | FileCheck %s
>   
>   target datalayout = "e-m:x-p:32:32-i64:64-f80:32-n8:16:32-a:0:32-S32"
>   target triple = "i686-pc-windows-msvc18.0.0"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth-variable-declared-by-user.ll Mon Jul 15 16:18:31 2019
> @@ -2,8 +2,6 @@
>   ; user declares `__sancov_lowest_stack` with an unexpected type.
>   ; RUN: not opt < %s -sancov -sanitizer-coverage-level=1 \
>   ; RUN:         -sanitizer-coverage-stack-depth -S 2>&1 | FileCheck %s
> -; RUN: not opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 \
> -; RUN:         -sanitizer-coverage-stack-depth -S 2>&1 | FileCheck %s
>   
>   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/stack-depth.ll Mon Jul 15 16:18:31 2019
> @@ -4,11 +4,6 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 \
>   ; RUN:     -sanitizer-coverage-stack-depth -sanitizer-coverage-trace-pc-guard \
>   ; RUN:     -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 \
> -; RUN:     -sanitizer-coverage-stack-depth -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 \
> -; RUN:     -sanitizer-coverage-stack-depth -sanitizer-coverage-trace-pc-guard \
> -; RUN:     -S | FileCheck %s
>   
>   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/switch-tracing.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/switch-tracing.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/switch-tracing.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/switch-tracing.ll Mon Jul 15 16:18:31 2019
> @@ -1,6 +1,5 @@
>   ; Test -sanitizer-coverage-trace-compares=1 (instrumenting a switch)
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-compares=1  -S | FileCheck %s
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-comdat.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC_GUARD
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC_GUARD
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-8bit-counters.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-8bit-counters.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-8bit-counters.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-8bit-counters.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-8bit-counters -S | FileCheck %s
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-8bit-counters -S | FileCheck %s
>   
>   ; Module ctors should have stable names across modules, not something like
>   ; @sancov.module_ctor.3 that may cause duplicate ctors after linked together.
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/trace-pc-guard-nocomdat.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC_GUARD
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=4 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s --check-prefix=CHECK_TRACE_PC_GUARD
>   
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-apple-darwin10.0.0"
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll Mon Jul 15 16:18:31 2019
> @@ -2,9 +2,6 @@
>   ; RUN: opt < %s -sancov                    -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
>   ; Make sure asan does not instrument __sancov_gen_
>   ; RUN: opt < %s -sancov -asan -asan-module -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
> -
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
> -; RUN: opt < %s -passes='module(require<asan-globals-md>,sancov-module,asan-module),function(sancov-func,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
>   target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
>   target triple = "x86_64-unknown-linux-gnu"
>   $Foo = comdat any
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/tracing.ll Mon Jul 15 16:18:31 2019
> @@ -3,10 +3,6 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s --check-prefix=CHECK_PC_GUARD
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S -mtriple=x86_64-apple-macosx | FileCheck %s --check-prefix=CHECK_PC_GUARD_DARWIN
>   
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc  -S | FileCheck %s --check-prefix=CHECK_PC
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S | FileCheck %s --check-prefix=CHECK_PC_GUARD
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S -mtriple=x86_64-apple-macosx | FileCheck %s --check-prefix=CHECK_PC_GUARD_DARWIN
> -
>   target datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
>   target triple = "x86_64-unknown-linux-gnu"
>   define void @foo(i32* %a) sanitize_address {
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/unreachable-critedge.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -S -sancov -sanitizer-coverage-level=3 | FileCheck %s
> -; RUN: opt < %s -S -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 | FileCheck %s
>   
>   ; The critical edges to unreachable_bb should not be split.
>   define i32 @foo(i32 %c, i32 %d) {
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/wineh.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/wineh.ll?rev=366153&r1=366152&r2=366153&view=diff
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/wineh.ll (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/wineh.ll Mon Jul 15 16:18:31 2019
> @@ -1,5 +1,4 @@
>   ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc -S | FileCheck %s --check-prefix=CHECK
> -; RUN: opt < %s -passes='module(sancov-module),function(sancov-func)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc -S | FileCheck %s --check-prefix=CHECK
>   
>   ; Generated from this C++ source:
>   ; $ clang -O2 t.cpp -S -emit-llvm
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits


More information about the llvm-commits mailing list