[llvm] r241127 - [SanitizerCoverage] Don't add instrumentation to unreachable blocks.
Kostya Serebryany
kcc at google.com
Tue Jul 7 09:59:49 PDT 2015
This patch breaks a change that was sitting in my local workspace
because it breaks an assumption that all blocks in BlocksToInstrument will
be instrumented.
A better place to check isa<UnreachableInst> is in the place where we
collect BlocksToInstrument,
i.e. in runOnFunction.
I'll make this change together with my other change.
On Tue, Jun 30, 2015 at 4:11 PM, Alexey Samsonov <vonosmas at gmail.com> wrote:
> Author: samsonov
> Date: Tue Jun 30 18:11:45 2015
> New Revision: 241127
>
> URL: http://llvm.org/viewvc/llvm-project?rev=241127&view=rev
> Log:
> [SanitizerCoverage] Don't add instrumentation to unreachable blocks.
>
> Modified:
> llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
> llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=241127&r1=241126&r2=241127&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Tue
> Jun 30 18:11:45 2015
> @@ -375,6 +375,13 @@ void SanitizerCoverageModule::SetNoSanit
>
> void SanitizerCoverageModule::InjectCoverageAtBlock(Function &F,
> BasicBlock &BB,
> bool UseCalls) {
> + // Don't insert coverage for unreachable blocks: we will never call
> + // __sanitizer_cov() for them, so counting them in
> + // NumberOfInstrumentedBlocks() might complicate calculation of code
> coverage
> + // percentage. Also, unreachable instructions frequently have no debug
> + // locations.
> + if (isa<UnreachableInst>(BB.getTerminator()))
> + return;
> BasicBlock::iterator IP = BB.getFirstInsertionPt(), BE = BB.end();
> // Skip static allocas at the top of the entry block so they don't
> become
> // dynamic when we split the block. If we used our optimized stack
> layout,
>
> Modified: llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll?rev=241127&r1=241126&r2=241127&view=diff
>
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll
> (original)
> +++ llvm/trunk/test/Instrumentation/SanitizerCoverage/coverage.ll Tue Jun
> 30 18:11:45 2015
> @@ -119,3 +119,12 @@ entry:
> ; CHECK4: call void @__sanitizer_cov_indir_call16({{.*}},[[CACHE:.*]])
> ; CHECK4-NOT: call void @__sanitizer_cov_indir_call16({{.*}},[[CACHE]])
> ; CHECK4: ret void
> +
> +define void @call_unreachable() uwtable sanitize_address {
> +entry:
> + unreachable
> +}
> +
> +; CHECK4-LABEL: define void @call_unreachable
> +; CHECK4-NOT: __sanitizer_cov
> +; CHECK4: unreachable
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150707/61029bfd/attachment.html>
More information about the llvm-commits
mailing list