mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
asan: do not instrument direct inbounds accesses to stack variables
Do not instrument direct accesses to stack variables that can be proven to be inbounds, e.g. accesses to fields of structs on stack. But it eliminates 33% of instrumentation on webrtc/modules_unittests (number of memory accesses goes down from 290152 to 193998) and reduces binary size by 15% (from 74M to 64M) and improved compilation time by 6-12%. The optimization is guarded by asan-opt-stack flag that is off by default. http://reviews.llvm.org/D7583 llvm-svn: 231241
This commit is contained in:
parent
b4f7eabf1c
commit
a173129afb
File diff suppressed because it is too large
Load Diff
48
test/Instrumentation/AddressSanitizer/instrument-stack.ll
Normal file
48
test/Instrumentation/AddressSanitizer/instrument-stack.ll
Normal file
@ -0,0 +1,48 @@
|
||||
; This test checks that we are not instrumenting direct inbound stack accesses.
|
||||
; RUN: opt < %s -asan -asan-module -asan-opt-stack -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-S128"
|
||||
target triple = "x86_64-unknown-linux-gnu"
|
||||
|
||||
;@sink = global i32* null, align 4
|
||||
|
||||
; Ignore direct inbounds stack access.
|
||||
define void @foo() uwtable sanitize_address {
|
||||
entry:
|
||||
%a = alloca i32, align 4
|
||||
store i32 42, i32* %a, align 4
|
||||
ret void
|
||||
; CHECK-LABEL: define void @foo
|
||||
; CHECK-NOT: __asan_report
|
||||
; CHECK: ret void
|
||||
}
|
||||
|
||||
; Don't ignore dynamic indexing.
|
||||
define void @baz(i64 %i) sanitize_address {
|
||||
entry:
|
||||
%a = alloca [10 x i32], align 4
|
||||
%e = getelementptr inbounds [10 x i32], [10 x i32]* %a, i32 0, i64 %i
|
||||
store i32 42, i32* %e, align 4
|
||||
ret void
|
||||
; CHECK-LABEL: define void @baz
|
||||
; CHECK: __asan_report
|
||||
; CHECK: ret void
|
||||
}
|
||||
|
||||
define void @bar() sanitize_address {
|
||||
entry:
|
||||
%a = alloca [10 x i32], align 4
|
||||
%e = getelementptr inbounds [10 x i32], [10 x i32]* %a, i32 0, i64 12
|
||||
store i32 42, i32* %e, align 4
|
||||
ret void
|
||||
; CHECK-LABEL: define void @bar
|
||||
; CHECK: __asan_report
|
||||
; CHECK: ret void
|
||||
}
|
||||
|
||||
define void @endoftests() sanitize_address {
|
||||
entry:
|
||||
ret void
|
||||
; CHECK-LABEL: define void @endoftests
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user