mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-08-05 13:26:55 +00:00
[asan] extend asan-coverage (still experimental).
- add a mode for collecting per-block coverage (-asan-coverage=2). So far the implementation is naive (all blocks are instrumented), the performance overhead on top of asan could be as high as 30%. - Make sure the one-time calls to __sanitizer_cov are moved to function buttom, which in turn required to copy the original debug info into the call insn. Here is the performance data on SPEC 2006 (train data, comparing asan with asan-coverage={0,1,2}): asan+cov0 asan+cov1 diff 0-1 asan+cov2 diff 0-2 diff 1-2 400.perlbench, 65.60, 65.80, 1.00, 76.20, 1.16, 1.16 401.bzip2, 65.10, 65.50, 1.01, 75.90, 1.17, 1.16 403.gcc, 1.64, 1.69, 1.03, 2.04, 1.24, 1.21 429.mcf, 21.90, 22.60, 1.03, 23.20, 1.06, 1.03 445.gobmk, 166.00, 169.00, 1.02, 205.00, 1.23, 1.21 456.hmmer, 88.30, 87.90, 1.00, 91.00, 1.03, 1.04 458.sjeng, 210.00, 222.00, 1.06, 258.00, 1.23, 1.16 462.libquantum, 1.73, 1.75, 1.01, 2.11, 1.22, 1.21 464.h264ref, 147.00, 152.00, 1.03, 160.00, 1.09, 1.05 471.omnetpp, 115.00, 116.00, 1.01, 140.00, 1.22, 1.21 473.astar, 133.00, 131.00, 0.98, 142.00, 1.07, 1.08 483.xalancbmk, 118.00, 120.00, 1.02, 154.00, 1.31, 1.28 433.milc, 19.80, 20.00, 1.01, 20.10, 1.02, 1.01 444.namd, 16.20, 16.20, 1.00, 17.60, 1.09, 1.09 447.dealII, 41.80, 42.20, 1.01, 43.50, 1.04, 1.03 450.soplex, 7.51, 7.82, 1.04, 8.25, 1.10, 1.05 453.povray, 14.00, 14.40, 1.03, 15.80, 1.13, 1.10 470.lbm, 33.30, 34.10, 1.02, 34.10, 1.02, 1.00 482.sphinx3, 12.40, 12.30, 0.99, 13.00, 1.05, 1.06 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199488 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -1,13 +1,30 @@
|
||||
; RUN: opt < %s -asan -asan-coverage=1 -S | FileCheck %s
|
||||
; RUN: opt < %s -asan -asan-coverage=1 -S | FileCheck %s --check-prefix=CHECK1
|
||||
; RUN: opt < %s -asan -asan-coverage=2 -S | FileCheck %s --check-prefix=CHECK2
|
||||
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 i32 @foo(i32* %a) sanitize_address {
|
||||
define void @foo(i32* %a) sanitize_address {
|
||||
entry:
|
||||
ret i32 0
|
||||
%tobool = icmp eq i32* %a, null
|
||||
br i1 %tobool, label %if.end, label %if.then
|
||||
|
||||
if.then: ; preds = %entry
|
||||
store i32 0, i32* %a, align 4
|
||||
br label %if.end
|
||||
|
||||
if.end: ; preds = %entry, %if.then
|
||||
ret void
|
||||
}
|
||||
; CHECK: define i32 @foo(i32* %a) #0 {
|
||||
; CHECK: %0 = load atomic i8* @__asan_gen_cov_foo monotonic, align 1
|
||||
; CHECK: %1 = icmp eq i8 0, %0
|
||||
; CHECK: br i1 %1, label %2, label %3
|
||||
; CHECK: call void @__sanitizer_cov(i64 ptrtoint (i32 (i32*)* @foo to i64))
|
||||
; CHECK: store atomic i8 1, i8* @__asan_gen_cov_foo monotonic, align 1
|
||||
; CHECK1-LABEL: define void @foo
|
||||
; CHECK1: %0 = load atomic i8* @__asan_gen_cov_foo monotonic, align 1
|
||||
; CHECK1: %1 = icmp eq i8 0, %0
|
||||
; CHECK1: br i1 %1, label %2, label %3
|
||||
; CHECK1: call void @__sanitizer_cov
|
||||
; CHECK1-NOT: call void @__sanitizer_cov
|
||||
; CHECK1: store atomic i8 1, i8* @__asan_gen_cov_foo monotonic, align 1
|
||||
|
||||
; CHECK2-LABEL: define void @foo
|
||||
; CHECK2: call void @__sanitizer_cov
|
||||
; CHECK2: call void @__sanitizer_cov
|
||||
; CHECK2: call void @__sanitizer_cov
|
||||
; CHECK2-NOT: call void @__sanitizer_cov
|
||||
; CHECK2: ret void
|
||||
|
Reference in New Issue
Block a user