137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===- CoverageFilters.cpp - Function coverage mapping filters ------------===// 237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// The LLVM Compiler Infrastructure 437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// This file is distributed under the University of Illinois Open Source 637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// License. See LICENSE.TXT for details. 737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===// 937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 1037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// These classes provide filtering for function coverage mapping records. 1137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines// 1237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines//===----------------------------------------------------------------------===// 1337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "CoverageFilters.h" 1537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "CoverageSummaryInfo.h" 1637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines#include "llvm/Support/Regex.h" 1737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 1837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesusing namespace llvm; 1937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesbool NameCoverageFilter::matches(const coverage::FunctionRecord &Function) { 2137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines StringRef FuncName = Function.Name; 2237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return FuncName.find(Name) != StringRef::npos; 2337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 2437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 2537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesbool 2637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen HinesNameRegexCoverageFilter::matches(const coverage::FunctionRecord &Function) { 2737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return llvm::Regex(Regex).match(Function.Name); 2837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 2937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesbool RegionCoverageFilter::matches(const coverage::FunctionRecord &Function) { 3137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return PassesThreshold(FunctionCoverageSummary::get(Function) 3237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines .RegionCoverage.getPercentCovered()); 3337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 3437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 3537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesbool LineCoverageFilter::matches(const coverage::FunctionRecord &Function) { 3637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return PassesThreshold( 3737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines FunctionCoverageSummary::get(Function).LineCoverage.getPercentCovered()); 3837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 3937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesvoid CoverageFilters::push_back(std::unique_ptr<CoverageFilter> Filter) { 4137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines Filters.push_back(std::move(Filter)); 4237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 4337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 4437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesbool CoverageFilters::matches(const coverage::FunctionRecord &Function) { 4537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines for (const auto &Filter : Filters) { 4637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines if (Filter->matches(Function)) 4737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return true; 4837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 4937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return false; 5037ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 5137ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines 5237ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hinesbool 5337ed9c199ca639565f6ce88105f9e39e898d82d0Stephen HinesCoverageFiltersMatchAll::matches(const coverage::FunctionRecord &Function) { 5437ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines for (const auto &Filter : Filters) { 5537ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines if (!Filter->matches(Function)) 5637ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return false; 5737ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines } 5837ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines return true; 5937ed9c199ca639565f6ce88105f9e39e898d82d0Stephen Hines} 60