Skip to content

Commit 4646cab

Browse files
authored
[SanitizerCoverage] Avoid unnecessary inttoptr
We are indexing into an array here, so we can use CreateConstInBoundsGEP2_64 instead of the manual arithmetic. Reviewed By: vitalybuka Pull Request: #119097
1 parent b6c22a4 commit 4646cab

File tree

3 files changed

+6
-7
lines changed

3 files changed

+6
-7
lines changed

llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1045,10 +1045,8 @@ void ModuleSanitizerCoverage::InjectCoverageAtBlock(Function &F, BasicBlock &BB,
10451045
->setCannotMerge(); // gets the PC using GET_CALLER_PC.
10461046
}
10471047
if (Options.TracePCGuard) {
1048-
auto GuardPtr = IRB.CreateIntToPtr(
1049-
IRB.CreateAdd(IRB.CreatePointerCast(FunctionGuardArray, IntptrTy),
1050-
ConstantInt::get(IntptrTy, Idx * 4)),
1051-
PtrTy);
1048+
auto GuardPtr = IRB.CreateConstInBoundsGEP2_64(
1049+
FunctionGuardArray->getValueType(), FunctionGuardArray, 0, Idx);
10521050
if (Options.GatedCallbacks) {
10531051
Instruction *I = &*IP;
10541052
auto GateBranch = CreateGateBranch(F, FunctionGateCmp, I);

llvm/test/Instrumentation/SanitizerCoverage/cmp-tracing-api-x86_32.ll

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@ target triple = "i386-unknown-linux-gnu"
77
define i32 @foo() #0 {
88
; CHECK-LABEL: define i32 @foo() comdat {
99
; CHECK-NEXT: entry:
10-
; CHECK-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr inttoptr (i32 ptrtoint (ptr @__sancov_gen_ to i32) to ptr)) #[[ATTR1:[0-9]+]]
10+
; CHECK-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr @__sancov_gen_) #[[ATTR1:[0-9]+]]
1111
; CHECK-NEXT: ret i32 0
1212
;
1313
entry:
1414
ret i32 0
1515
}
1616

17+
; UTC_ARGS: --disable
1718
; CHECK-DAG: declare void @__sanitizer_cov_trace_pc_indir(i32)
1819
; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp1(i8 zeroext, i8 zeroext)
1920
; CHECK-DAG: declare void @__sanitizer_cov_trace_cmp2(i16 zeroext, i16 zeroext)

llvm/test/Instrumentation/SanitizerCoverage/missing_dbg.ll

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ define i32 @with_dbg(ptr %a, ptr %b) !dbg !3 {
1212
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 42
1313
; CHECK-NEXT: br i1 [[CMP]], label %[[BB0:.*]], label %[[BB1:.*]]
1414
; CHECK: [[BB0]]:
15-
; CHECK-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr inttoptr (i64 add (i64 ptrtoint (ptr @__sancov_gen_ to i64), i64 4) to ptr)) #[[ATTR1]], !dbg [[DBG7:![0-9]+]]
15+
; CHECK-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr getelementptr inbounds ([2 x i32], ptr @__sancov_gen_, i64 0, i64 1)) #[[ATTR1]], !dbg [[DBG7:![0-9]+]]
1616
; CHECK-NEXT: store i32 [[TMP1]], ptr [[B]], align 4
1717
; CHECK-NEXT: br label %[[BB1]]
1818
; CHECK: [[BB1]]:
@@ -38,7 +38,7 @@ define i32 @without_dbg(ptr %a, ptr %b) {
3838
; CHECK-NEXT: [[CMP:%.*]] = icmp eq i32 [[TMP1]], 42
3939
; CHECK-NEXT: br i1 [[CMP]], label %[[BB0:.*]], label %[[BB1:.*]]
4040
; CHECK: [[BB0]]:
41-
; CHECK-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr inttoptr (i64 add (i64 ptrtoint (ptr @__sancov_gen_.1 to i64), i64 4) to ptr)) #[[ATTR1]]
41+
; CHECK-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr getelementptr inbounds ([2 x i32], ptr @__sancov_gen_.1, i64 0, i64 1)) #[[ATTR1]]
4242
; CHECK-NEXT: store i32 [[TMP1]], ptr [[B]], align 4
4343
; CHECK-NEXT: br label %[[BB1]]
4444
; CHECK: [[BB1]]:

0 commit comments

Comments
 (0)