From 9a5419ecf7cb4149bd9ccd035c27aec690b19e34 Mon Sep 17 00:00:00 2001 From: Renato Golin Date: Sat, 27 Feb 2016 14:19:19 +0000 Subject: [PATCH] Revert "[sancov] do not instrument nodes that are full pre-dominators" This reverts commit r262103, as it broke all ARM and AArch64 bots. llvm-svn: 262139 --- .../Instrumentation/SanitizerCoverage.cpp | 33 ++++++++-------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index f110f17..1b88dbd 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -31,7 +31,6 @@ #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" #include "llvm/Analysis/EHPersonalities.h" -#include "llvm/Analysis/PostDominators.h" #include "llvm/IR/CFG.h" #include "llvm/IR/CallSite.h" #include "llvm/IR/DataLayout.h" @@ -160,12 +159,8 @@ class SanitizerCoverageModule : public ModulePass { const char *getPassName() const override { return "SanitizerCoverageModule"; } - void getAnalysisUsage(AnalysisUsage &AU) const override { - AU.addRequired(); - AU.addRequired(); - } -private: + private: void InjectCoverageForIndirectCalls(Function &F, ArrayRef IndirCalls); void InjectTraceForCmp(Function &F, ArrayRef CmpTraceTargets); @@ -312,24 +307,20 @@ bool SanitizerCoverageModule::runOnModule(Module &M) { return true; } -static bool shouldInstrumentBlock(const BasicBlock *BB, const DominatorTree *DT, - const PostDominatorTree *PDT) { +static bool shouldInstrumentBlock(const BasicBlock *BB, + const DominatorTree *DT) { if (!ClPruneBlocks) return true; + if (succ_begin(BB) == succ_end(BB)) + return true; // Check if BB dominates all its successors. - bool DominatesAll = succ_begin(BB) != succ_end(BB); for (const BasicBlock *SUCC : make_range(succ_begin(BB), succ_end(BB))) { - DominatesAll &= DT->dominates(BB, SUCC); + if (!DT->dominates(BB, SUCC)) + return true; } - // Check if BB pre-dominates all predecessors. - bool PreDominatesAll = pred_begin(BB) != pred_end(BB); - for (const BasicBlock *PRED : make_range(pred_begin(BB), pred_end(BB))) { - PreDominatesAll &= PDT->dominates(BB, PRED); - } - - return !(DominatesAll || PreDominatesAll); + return false; } bool SanitizerCoverageModule::runOnFunction(Function &F) { @@ -349,12 +340,10 @@ bool SanitizerCoverageModule::runOnFunction(Function &F) { SmallVector CmpTraceTargets; SmallVector SwitchTraceTargets; - DominatorTree *DT = &getAnalysis(F).getDomTree(); - PostDominatorTree *PDT = - &getAnalysis(F).getPostDomTree(); - + DominatorTree DT; + DT.recalculate(F); for (auto &BB : F) { - if (shouldInstrumentBlock(&BB, DT, PDT)) + if (shouldInstrumentBlock(&BB, &DT)) BlocksToInstrument.push_back(&BB); for (auto &Inst : BB) { if (Options.IndirectCalls) { -- 2.7.4