Skip to content

Commit debfd7b

Browse files
authored
[msan] Remove unnecacary zero increment (#116185)
1 parent d119d43 commit debfd7b

File tree

14 files changed

+86
-136
lines changed

14 files changed

+86
-136
lines changed

llvm/lib/Transforms/Instrumentation/MemorySanitizer.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5685,8 +5685,7 @@ struct VarArgPowerPCHelper : public VarArgHelperBase {
56855685
"finalizeInstrumentation called twice");
56865686
IRBuilder<> IRB(MSV.FnPrologueEnd);
56875687
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
5688-
Value *CopySize =
5689-
IRB.CreateAdd(ConstantInt::get(MS.IntptrTy, 0), VAArgSize);
5688+
Value *CopySize = VAArgSize;
56905689

56915690
if (!VAStartInstrumentationList.empty()) {
56925691
// If there is a va_start in this function, make a backup copy of
@@ -5699,7 +5698,7 @@ struct VarArgPowerPCHelper : public VarArgHelperBase {
56995698

57005699
Value *SrcSize = IRB.CreateBinaryIntrinsic(
57015700
Intrinsic::umin, CopySize,
5702-
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
5701+
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
57035702
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
57045703
kShadowTLSAlignment, SrcSize);
57055704
}
@@ -6045,8 +6044,7 @@ struct VarArgGenericHelper : public VarArgHelperBase {
60456044
"finalizeInstrumentation called twice");
60466045
IRBuilder<> IRB(MSV.FnPrologueEnd);
60476046
VAArgSize = IRB.CreateLoad(IRB.getInt64Ty(), MS.VAArgOverflowSizeTLS);
6048-
Value *CopySize =
6049-
IRB.CreateAdd(ConstantInt::get(MS.IntptrTy, 0), VAArgSize);
6047+
Value *CopySize = VAArgSize;
60506048

60516049
if (!VAStartInstrumentationList.empty()) {
60526050
// If there is a va_start in this function, make a backup copy of
@@ -6058,7 +6056,7 @@ struct VarArgGenericHelper : public VarArgHelperBase {
60586056

60596057
Value *SrcSize = IRB.CreateBinaryIntrinsic(
60606058
Intrinsic::umin, CopySize,
6061-
ConstantInt::get(MS.IntptrTy, kParamTLSSize));
6059+
ConstantInt::get(IRB.getInt64Ty(), kParamTLSSize));
60626060
IRB.CreateMemCpy(VAArgTLSCopy, kShadowTLSAlignment, MS.VAArgTLS,
60636061
kShadowTLSAlignment, SrcSize);
60646062
}

llvm/test/Instrumentation/MemorySanitizer/ARM32/vararg-arm32.ll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ target triple = "mips64--linux"
77
define i32 @foo(i32 %guard, ...) {
88
; CHECK-LABEL: define i32 @foo(
99
; CHECK-SAME: i32 [[GUARD:%.*]], ...) {
10-
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
11-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
10+
; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
1211
; CHECK-NEXT: [[TMP3:%.*]] = alloca i8, i64 [[TMP2]], align 8
1312
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 0, i64 [[TMP2]], i1 false)
1413
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP2]], i64 800)
@@ -58,7 +57,6 @@ declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
5857
define i32 @bar() {
5958
; CHECK-LABEL: define i32 @bar() {
6059
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
61-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
6260
; CHECK-NEXT: call void @llvm.donothing()
6361
; CHECK-NEXT: store i32 0, ptr @__msan_param_tls, align 8
6462
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
@@ -87,7 +85,6 @@ declare i32 @foo2(i32 %g1, i32 %g2, ...)
8785
define i32 @bar2() {
8886
; CHECK-LABEL: define i32 @bar2() {
8987
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
90-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
9188
; CHECK-NEXT: call void @llvm.donothing()
9289
; CHECK-NEXT: store i32 0, ptr @__msan_param_tls, align 8
9390
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
@@ -113,7 +110,6 @@ define dso_local i64 @many_args() {
113110
; CHECK-LABEL: define dso_local i64 @many_args() {
114111
; CHECK-NEXT: [[ENTRY:.*:]]
115112
; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
116-
; CHECK-NEXT: [[TMP1:%.*]] = add i64 0, [[TMP0]]
117113
; CHECK-NEXT: call void @llvm.donothing()
118114
; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8
119115
; CHECK-NEXT: store i64 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8

llvm/test/Instrumentation/MemorySanitizer/LoongArch/vararg-loongarch64.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,9 @@ declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
1111
define i32 @foo(i32 %guard, ...) {
1212
; CHECK-LABEL: @foo
1313
; CHECK: [[TMP1:%.*]] = load {{.*}} @__msan_va_arg_overflow_size_tls
14-
; CHECK: [[TMP2:%.*]] = add i64 0, [[TMP1]]
15-
; CHECK: [[TMP3:%.*]] = alloca {{.*}} [[TMP2]]
16-
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 0, i64 [[TMP2]], i1 false)
17-
; CHECK: [[TMP4:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP2]], i64 800)
14+
; CHECK: [[TMP3:%.*]] = alloca {{.*}} [[TMP1]]
15+
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 0, i64 [[TMP1]], i1 false)
16+
; CHECK: [[TMP4:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)
1817
; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[TMP3]], ptr align 8 @__msan_va_arg_tls, i64 [[TMP4]], i1 false)
1918
;
2019
%vl = alloca ptr, align 8

llvm/test/Instrumentation/MemorySanitizer/LoongArch/vararg.ll

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ define void @VaStart(ptr %s, ...) {
99
; CHECK-LABEL: define void @VaStart(
1010
; CHECK-SAME: ptr [[S:%.*]], ...) {
1111
; CHECK-NEXT: [[ENTRY:.*:]]
12-
; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
13-
; CHECK-NEXT: [[TMP1:%.*]] = add i64 0, [[TMP0]]
12+
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
1413
; CHECK-NEXT: [[TMP2:%.*]] = alloca i8, i64 [[TMP1]], align 8
1514
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP2]], i8 0, i64 [[TMP1]], i1 false)
1615
; CHECK-NEXT: [[TMP3:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP1]], i64 800)

llvm/test/Instrumentation/MemorySanitizer/Mips/vararg-mips64.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ define i32 @foo(i32 %guard, ...) {
1616

1717
; CHECK-LABEL: @foo
1818
; CHECK: [[A:%.*]] = load {{.*}} @__msan_va_arg_overflow_size_tls
19-
; CHECK: [[B:%.*]] = add i64 0, [[A]]
20-
; CHECK: [[C:%.*]] = alloca {{.*}} [[B]]
19+
; CHECK: [[C:%.*]] = alloca {{.*}} [[A]]
2120

22-
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[B]], i1 false)
21+
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[A]], i1 false)
2322

24-
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[B]], i64 800)
23+
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[A]], i64 800)
2524
; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[C]], ptr align 8 @__msan_va_arg_tls, i64 [[D]], i1 false)
2625

2726
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1

llvm/test/Instrumentation/MemorySanitizer/Mips/vararg-mips64el.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ define i32 @foo(i32 %guard, ...) {
1616

1717
; CHECK-LABEL: @foo
1818
; CHECK: [[A:%.*]] = load {{.*}} @__msan_va_arg_overflow_size_tls
19-
; CHECK: [[B:%.*]] = add i64 0, [[A]]
20-
; CHECK: [[C:%.*]] = alloca {{.*}} [[B]]
19+
; CHECK: [[C:%.*]] = alloca {{.*}} [[A]]
2120

22-
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[B]], i1 false)
21+
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[A]], i1 false)
2322

24-
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[B]], i64 800)
23+
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[A]], i64 800)
2524
; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[C]], ptr align 8 @__msan_va_arg_tls, i64 [[D]], i1 false)
2625

2726
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1

llvm/test/Instrumentation/MemorySanitizer/Mips32/vararg-mips.ll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ target triple = "mips64--linux"
77
define i32 @foo(i32 %guard, ...) {
88
; CHECK-LABEL: define i32 @foo(
99
; CHECK-SAME: i32 [[GUARD:%.*]], ...) {
10-
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
11-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
10+
; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
1211
; CHECK-NEXT: [[TMP3:%.*]] = alloca i8, i64 [[TMP2]], align 8
1312
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 0, i64 [[TMP2]], i1 false)
1413
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP2]], i64 800)
@@ -58,7 +57,6 @@ declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
5857
define i32 @bar() {
5958
; CHECK-LABEL: define i32 @bar() {
6059
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
61-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
6260
; CHECK-NEXT: call void @llvm.donothing()
6361
; CHECK-NEXT: store i32 0, ptr @__msan_param_tls, align 8
6462
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
@@ -87,7 +85,6 @@ declare i32 @foo2(i32 %g1, i32 %g2, ...)
8785
define i32 @bar2() {
8886
; CHECK-LABEL: define i32 @bar2() {
8987
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
90-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
9188
; CHECK-NEXT: call void @llvm.donothing()
9289
; CHECK-NEXT: store i32 0, ptr @__msan_param_tls, align 8
9390
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
@@ -113,7 +110,6 @@ define dso_local i64 @many_args() {
113110
; CHECK-LABEL: define dso_local i64 @many_args() {
114111
; CHECK-NEXT: [[ENTRY:.*:]]
115112
; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
116-
; CHECK-NEXT: [[TMP1:%.*]] = add i64 0, [[TMP0]]
117113
; CHECK-NEXT: call void @llvm.donothing()
118114
; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8
119115
; CHECK-NEXT: store i64 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8

llvm/test/Instrumentation/MemorySanitizer/Mips32/vararg-mipsel.ll

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@ target triple = "mips64el--linux"
77
define i32 @foo(i32 %guard, ...) {
88
; CHECK-LABEL: define i32 @foo(
99
; CHECK-SAME: i32 [[GUARD:%.*]], ...) {
10-
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
11-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
10+
; CHECK-NEXT: [[TMP2:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
1211
; CHECK-NEXT: [[TMP3:%.*]] = alloca i8, i64 [[TMP2]], align 8
1312
; CHECK-NEXT: call void @llvm.memset.p0.i64(ptr align 8 [[TMP3]], i8 0, i64 [[TMP2]], i1 false)
1413
; CHECK-NEXT: [[TMP4:%.*]] = call i64 @llvm.umin.i64(i64 [[TMP2]], i64 800)
@@ -58,7 +57,6 @@ declare void @llvm.lifetime.end.p0(i64, ptr nocapture) #1
5857
define i32 @bar() {
5958
; CHECK-LABEL: define i32 @bar() {
6059
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
61-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
6260
; CHECK-NEXT: call void @llvm.donothing()
6361
; CHECK-NEXT: store i32 0, ptr @__msan_param_tls, align 8
6462
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
@@ -86,7 +84,6 @@ declare i32 @foo2(i32 %g1, i32 %g2, ...)
8684
define i32 @bar2() {
8785
; CHECK-LABEL: define i32 @bar2() {
8886
; CHECK-NEXT: [[TMP1:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
89-
; CHECK-NEXT: [[TMP2:%.*]] = add i64 0, [[TMP1]]
9087
; CHECK-NEXT: call void @llvm.donothing()
9188
; CHECK-NEXT: store i32 0, ptr @__msan_param_tls, align 8
9289
; CHECK-NEXT: store i32 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8
@@ -112,7 +109,6 @@ define dso_local i64 @many_args() {
112109
; CHECK-LABEL: define dso_local i64 @many_args() {
113110
; CHECK-NEXT: [[ENTRY:.*:]]
114111
; CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__msan_va_arg_overflow_size_tls, align 8
115-
; CHECK-NEXT: [[TMP1:%.*]] = add i64 0, [[TMP0]]
116112
; CHECK-NEXT: call void @llvm.donothing()
117113
; CHECK-NEXT: store i64 0, ptr @__msan_param_tls, align 8
118114
; CHECK-NEXT: store i64 0, ptr inttoptr (i64 add (i64 ptrtoint (ptr @__msan_param_tls to i64), i64 8) to ptr), align 8

llvm/test/Instrumentation/MemorySanitizer/PowerPC/vararg-ppc64.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ define i32 @foo(i32 %guard, ...) {
1616

1717
; CHECK-LABEL: @foo
1818
; CHECK: [[A:%.*]] = load {{.*}} @__msan_va_arg_overflow_size_tls
19-
; CHECK: [[B:%.*]] = add i64 0, [[A]]
20-
; CHECK: [[C:%.*]] = alloca {{.*}} [[B]]
19+
; CHECK: [[C:%.*]] = alloca {{.*}} [[A]]
2120

22-
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[B]], i1 false)
21+
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[A]], i1 false)
2322

24-
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[B]], i64 800)
23+
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[A]], i64 800)
2524
; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[C]], ptr align 8 @__msan_va_arg_tls, i64 [[D]], i1 false)
2625

2726
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1

llvm/test/Instrumentation/MemorySanitizer/PowerPC/vararg-ppc64le.ll

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,11 @@ define i32 @foo(i32 %guard, ...) {
1616

1717
; CHECK-LABEL: @foo
1818
; CHECK: [[A:%.*]] = load {{.*}} @__msan_va_arg_overflow_size_tls
19-
; CHECK: [[B:%.*]] = add i64 0, [[A]]
20-
; CHECK: [[C:%.*]] = alloca {{.*}} [[B]]
19+
; CHECK: [[C:%.*]] = alloca {{.*}} [[A]]
2120

22-
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[B]], i1 false)
21+
; CHECK: call void @llvm.memset.p0.i64(ptr align 8 [[C]], i8 0, i64 [[A]], i1 false)
2322

24-
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[B]], i64 800)
23+
; CHECK: [[D:%.*]] = call i64 @llvm.umin.i64(i64 [[A]], i64 800)
2524
; CHECK: call void @llvm.memcpy.p0.p0.i64(ptr align 8 [[C]], ptr align 8 @__msan_va_arg_tls, i64 [[D]], i1 false)
2625

2726
declare void @llvm.lifetime.start.p0(i64, ptr nocapture) #1

0 commit comments

Comments
 (0)