mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-20 00:43:48 +00:00
[asan] Assign a low branch weight to ASan's slow path, patch by Jonas Wagner. This speeds up asan (at least on SPEC) by 1%-5% or more. Also fix lint in dfsan.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@216972 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
2aab51a118
commit
891198b358
@ -870,8 +870,11 @@ void AddressSanitizer::instrumentAddress(Instruction *OrigIns,
|
||||
TerminatorInst *CrashTerm = nullptr;
|
||||
|
||||
if (ClAlwaysSlowPath || (TypeSize < 8 * Granularity)) {
|
||||
// We use branch weights for the slow path check, to indicate that the slow
|
||||
// path is rarely taken. This seems to be the case for SPEC benchmarks.
|
||||
TerminatorInst *CheckTerm =
|
||||
SplitBlockAndInsertIfThen(Cmp, InsertBefore, false);
|
||||
SplitBlockAndInsertIfThen(Cmp, InsertBefore, false,
|
||||
MDBuilder(*C).createBranchWeights(1, 100000));
|
||||
assert(dyn_cast<BranchInst>(CheckTerm)->isUnconditional());
|
||||
BasicBlock *NextBB = CheckTerm->getSuccessor(0);
|
||||
IRB.SetInsertPoint(CheckTerm);
|
||||
|
@ -139,7 +139,7 @@ class DFSanABIList {
|
||||
std::unique_ptr<SpecialCaseList> SCL;
|
||||
|
||||
public:
|
||||
DFSanABIList(std::unique_ptr<SpecialCaseList> SCL) : SCL(std::move(SCL)) {}
|
||||
DFSanABIList(std::unique_ptr<SpecialCaseList> SCL) : SCL(std::move(SCL)) {}
|
||||
|
||||
/// Returns whether either this function or its source file are listed in the
|
||||
/// given category.
|
||||
|
@ -14,7 +14,7 @@ define i32 @test_load(i32* %a) sanitize_address {
|
||||
; CHECK: %[[LOAD_SHADOW_PTR:[^ ]*]] = inttoptr
|
||||
; CHECK: %[[LOAD_SHADOW:[^ ]*]] = load i8* %[[LOAD_SHADOW_PTR]]
|
||||
; CHECK: icmp ne i8
|
||||
; CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}
|
||||
; CHECK: br i1 %{{.*}}, label %{{.*}}, label %{{.*}}!prof ![[PROF:[0-9]+]]
|
||||
;
|
||||
; First instrumentation block refines the shadow test.
|
||||
; CHECK: and i64 %[[LOAD_ADDR]], 7
|
||||
@ -169,3 +169,5 @@ define void @memintr_test(i8* %a, i8* %b) nounwind uwtable sanitize_address {
|
||||
; CHECK: __asan_memcpy
|
||||
; CHECK: ret void
|
||||
|
||||
; PROF
|
||||
; CHECK: ![[PROF]] = metadata !{metadata !"branch_weights", i32 1, i32 100000}
|
||||
|
Loading…
x
Reference in New Issue
Block a user