Skip to content

Commit ba4c156

Browse files
committed
Tune inlining, improve perf for -g
1 parent 3a980a0 commit ba4c156

File tree

2 files changed

+27
-11
lines changed

2 files changed

+27
-11
lines changed

llvm/lib/Transforms/Instrumentation/GPUSan.cpp

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,8 @@ class GPUSanImpl final {
231231
}
232232
FunctionCallee getAllocationInfoFn(PtrOrigin PO) {
233233
assert(PO >= LOCAL && PO <= GLOBAL && "Origin does not need handling.");
234+
if (auto *F = M.getFunction("ompx_get_allocation_info" + getSuffix(PO)))
235+
return FunctionCallee(F->getFunctionType(), F);
234236
return getOrCreateFn(
235237
AllocationInfoFn[PO], "ompx_get_allocation_info" + getSuffix(PO),
236238
StructType::create({getPtrTy(PO), Int64Ty, Int32Ty}), {getPtrTy(PO)});
@@ -872,13 +874,14 @@ bool GPUSanImpl::instrument() {
872874
Value *Idx = createCall(IRB, getThreadIdFn(), {}, "san.gtid");
873875
Value *Ptr = IRB.CreateGEP(Int64Ty, LocationsArray, {Idx});
874876
IRB.CreateStore(ConstantInt::get(Int64Ty, 0), Ptr);
875-
}
876-
IRB.CreateRetVoid();
877877

878-
for (auto *KernelFn : Kernels) {
879-
IRBuilder<> IRB(&*KernelFn->getEntryBlock().getFirstNonPHIOrDbgOrAlloca());
880-
createCall(IRB, InitSharedFn, {});
878+
for (auto *KernelFn : Kernels) {
879+
IRBuilder<> IRB(
880+
&*KernelFn->getEntryBlock().getFirstNonPHIOrDbgOrAlloca());
881+
createCall(IRB, InitSharedFn, {});
882+
}
881883
}
884+
IRB.CreateRetVoid();
882885

883886
for (const auto &It : llvm::enumerate(AmbiguousCallsOrdered)) {
884887
IRBuilder<> IRB(It.value());
@@ -910,6 +913,13 @@ bool GPUSanImpl::instrument() {
910913
GV->setVisibility(GlobalValue::ProtectedVisibility);
911914

912915
for (auto *CI : Calls) {
916+
if (!CI->getCalledFunction()) {
917+
CI->dump();
918+
continue;
919+
}
920+
// if (!CI->getCalledFunction()->getName().contains("gep") &&
921+
// !CI->getCalledFunction()->getName().contains("info"))
922+
// continue;
913923
InlineFunctionInfo IFI;
914924
if (InlineFunction(*CI, IFI).isSuccess())
915925
Changed = true;

offload/include/Shared/Sanitizer.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ int64_t __san_get_location_value();
2222
}
2323

2424
#define INLINE gnu::always_inline
25+
#define NOINLINE gnu::noinline
2526

2627
enum class AllocationKind { LOCAL, GLOBAL, LAST = GLOBAL };
2728

@@ -234,7 +235,8 @@ struct SanitizerTrapInfoTy {
234235
}
235236

236237
template <enum AllocationKind AK>
237-
[[clang::disable_sanitizer_instrumentation, noreturn, INLINE, gnu::cold]] void
238+
[[clang::disable_sanitizer_instrumentation, noreturn, NOINLINE,
239+
gnu::cold]] void
238240
exceedsAllocationLength(_AS_PTR(void, AK) Start, uint64_t Length,
239241
int64_t AllocationId, uint64_t Slot,
240242
int64_t SourceId) {
@@ -244,7 +246,8 @@ struct SanitizerTrapInfoTy {
244246
}
245247

246248
template <enum AllocationKind AK>
247-
[[clang::disable_sanitizer_instrumentation, noreturn, INLINE, gnu::cold]] void
249+
[[clang::disable_sanitizer_instrumentation, noreturn, NOINLINE,
250+
gnu::cold]] void
248251
exceedsAllocationSlots(_AS_PTR(void, AK) Start, uint64_t Length,
249252
int64_t AllocationId, uint64_t Slot,
250253
int64_t SourceId) {
@@ -254,7 +257,8 @@ struct SanitizerTrapInfoTy {
254257
}
255258

256259
template <enum AllocationKind AK>
257-
[[clang::disable_sanitizer_instrumentation, noreturn, INLINE, gnu::cold]] void
260+
[[clang::disable_sanitizer_instrumentation, noreturn, NOINLINE,
261+
gnu::cold]] void
258262
pointerOutsideAllocation(_AS_PTR(void, AK) Start, uint64_t Length,
259263
int64_t AllocationId, uint64_t Slot, uint64_t PC) {
260264
allocationError<AK>(PointerOutsideAllocation, Start, Length, AllocationId,
@@ -287,12 +291,14 @@ struct SanitizerTrapInfoTy {
287291
}
288292

289293
template <enum AllocationKind AK>
290-
[[clang::disable_sanitizer_instrumentation, noreturn, INLINE, gnu::cold]] void
294+
[[clang::disable_sanitizer_instrumentation, noreturn, NOINLINE,
295+
gnu::cold]] void
291296
accessError(const AllocationPtrTy<AK> AP, int64_t Size, int64_t AccessId,
292297
int64_t SourceId);
293298

294299
template <enum AllocationKind AK>
295-
[[clang::disable_sanitizer_instrumentation, noreturn, INLINE, gnu::cold]] void
300+
[[clang::disable_sanitizer_instrumentation, noreturn, NOINLINE,
301+
gnu::cold]] void
296302
garbagePointer(const AllocationPtrTy<AK> AP, void *P, int64_t SourceId) {
297303
ErrorCode = GarbagePointer;
298304
AllocationStart = P;
@@ -343,7 +349,7 @@ getAllocation(const AllocationPtrTy<AK> AP, int64_t AccessId = 0) {
343349
}
344350

345351
template <enum AllocationKind AK>
346-
[[clang::disable_sanitizer_instrumentation, noreturn, INLINE, gnu::cold]] void
352+
[[clang::disable_sanitizer_instrumentation, noreturn, NOINLINE, gnu::cold]] void
347353
SanitizerTrapInfoTy::accessError(const AllocationPtrTy<AK> AP, int64_t Size,
348354
int64_t AccessId, int64_t SourceId) {
349355
auto &A = getAllocationArray<AK>().Arr[AP.AllocationId];

0 commit comments

Comments
 (0)