[PATCH] D150460: [gcov] Add nosanitize metadata to memory access instructions inserted by emitProfileNotes()
Mingjie Xu via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Fri May 19 04:17:04 PDT 2023
Enna1 updated this revision to Diff 523728.
Enna1 added a comment.
Update from MaskRay's comments.
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D150460/new/
https://reviews.llvm.org/D150460
Files:
llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
llvm/test/Transforms/GCOVProfiling/nosanitize.ll
Index: llvm/test/Transforms/GCOVProfiling/nosanitize.ll
===================================================================
--- /dev/null
+++ llvm/test/Transforms/GCOVProfiling/nosanitize.ll
@@ -0,0 +1,34 @@
+;; Ensure that the loads, stores, and atomicrmw adds for gcov have nosanitize metadata.
+; RUN: rm -rf %t && mkdir %t && cd %t
+; RUN: opt < %s -S -passes=insert-gcov-profiling | FileCheck %s
+; RUN: opt < %s -S -passes=insert-gcov-profiling -gcov-atomic-counter | FileCheck %s --check-prefixes=CHECK-ATOMIC-COUNTER
+
+; CHECK-LABEL: void @empty()
+; CHECK-NEXT: entry:
+; CHECK-NEXT: %gcov_ctr = load i64, ptr @__llvm_gcov_ctr, align 4, !dbg [[DBG:![0-9]+]], !nosanitize [[NOSANITIZE:![0-9]+]]
+; CHECK-NEXT: %0 = add i64 %gcov_ctr, 1, !dbg [[DBG]]
+; CHECK-NEXT: store i64 %0, ptr @__llvm_gcov_ctr, align 4, !dbg [[DBG]], !nosanitize [[NOSANITIZE]]
+; CHECK-NEXT: ret void, !dbg [[DBG]]
+
+; CHECK-ATOMIC-COUNTER-LABEL: void @empty()
+; CHECK-ATOMIC-COUNTER-NEXT: entry:
+; CHECK-ATOMIC-COUNTER-NEXT: %0 = atomicrmw add ptr @__llvm_gcov_ctr, i64 1 monotonic, align 8, !dbg [[DBG:![0-9]+]], !nosanitize [[NOSANITIZE:![0-9]+]]
+; CHECK-ATOMIC-COUNTER-NEXT: ret void, !dbg [[DBG]]
+
+define dso_local void @empty() !dbg !5 {
+entry:
+ ret void, !dbg !8
+}
+
+!llvm.dbg.cu = !{!0}
+!llvm.module.flags = !{!3, !4}
+
+!0 = distinct !DICompileUnit(language: DW_LANG_C99, file: !1, emissionKind: FullDebug, enums: !2)
+!1 = !DIFile(filename: "a.c", directory: "")
+!2 = !{}
+!3 = !{i32 7, !"Dwarf Version", i32 5}
+!4 = !{i32 2, !"Debug Info Version", i32 3}
+!5 = distinct !DISubprogram(name: "empty", scope: !1, file: !1, line: 1, type: !6, scopeLine: 1, flags: DIFlagAllCallsDescribed, spFlags: DISPFlagDefinition | DISPFlagOptimized, unit: !0, retainedNodes: !2)
+!6 = !DISubroutineType(types: !7)
+!7 = !{null}
+!8 = !DILocation(line: 2, column: 1, scope: !5)
Index: llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
===================================================================
--- llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
+++ llvm/lib/Transforms/Instrumentation/GCOVProfiling.cpp
@@ -919,15 +919,21 @@
IRBuilder<> Builder(E.Place, E.Place->getFirstInsertionPt());
Value *V = Builder.CreateConstInBoundsGEP2_64(
Counters->getValueType(), Counters, 0, I);
+ // Disable sanitizers to decrease size bloat. We don't expect
+ // sanitizers to catch interesting issues.
+ Instruction *Inst;
if (Options.Atomic) {
- Builder.CreateAtomicRMW(AtomicRMWInst::Add, V, Builder.getInt64(1),
- MaybeAlign(), AtomicOrdering::Monotonic);
+ Inst = Builder.CreateAtomicRMW(AtomicRMWInst::Add, V,
+ Builder.getInt64(1), MaybeAlign(),
+ AtomicOrdering::Monotonic);
} else {
- Value *Count =
+ LoadInst *OldCount =
Builder.CreateLoad(Builder.getInt64Ty(), V, "gcov_ctr");
- Count = Builder.CreateAdd(Count, Builder.getInt64(1));
- Builder.CreateStore(Count, V);
+ OldCount->setNoSanitizeMetadata();
+ Value *NewCount = Builder.CreateAdd(OldCount, Builder.getInt64(1));
+ Inst = Builder.CreateStore(NewCount, V);
}
+ Inst->setNoSanitizeMetadata();
}
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D150460.523728.patch
Type: text/x-patch
Size: 3446 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230519/91b2b155/attachment.bin>
More information about the llvm-commits
mailing list