Skip to content

Commit ac60263

Browse files
committed
[MemoryLocation] Handle memset_pattern{4,8,16} in getForDest.
memset_pattern{4,8,16} writes to the first argument. Use getForDest to return the corresponding MemoryLocation. Reviewed By: ab Differential Revision: https://reviews.llvm.org/D114906
1 parent a376a3f commit ac60263

File tree

2 files changed

+6
-9
lines changed

2 files changed

+6
-9
lines changed

llvm/lib/Analysis/MemoryLocation.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,9 @@ MemoryLocation::getForDest(const CallBase *CB, const TargetLibraryInfo &TLI) {
137137
LibFunc LF;
138138
if (TLI.getLibFunc(*CB, LF) && TLI.has(LF)) {
139139
switch (LF) {
140+
case LibFunc_memset_pattern4:
141+
case LibFunc_memset_pattern8:
142+
case LibFunc_memset_pattern16:
140143
case LibFunc_strncpy:
141144
case LibFunc_strcpy:
142145
case LibFunc_strcat:

llvm/test/Transforms/DeadStoreElimination/libcalls-darwin.ll

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,7 @@ declare void @memset_pattern16(i8*, i8*, i64)
1010
define void @test_memset_pattern4_const_size(i8* noalias %a, i8* noalias %pattern) {
1111
; CHECK-LABEL: @test_memset_pattern4_const_size(
1212
; CHECK-NEXT: entry:
13-
; CHECK-NEXT: [[A_GEP_1:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 1
14-
; CHECK-NEXT: store i8 0, i8* [[A_GEP_1]], align 1
15-
; CHECK-NEXT: [[A_GEP_17:%.*]] = getelementptr i8, i8* [[A]], i32 17
13+
; CHECK-NEXT: [[A_GEP_17:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 17
1614
; CHECK-NEXT: store i8 1, i8* [[A_GEP_17]], align 1
1715
; CHECK-NEXT: call void @memset_pattern4(i8* [[A]], i8* [[PATTERN:%.*]], i64 17)
1816
; CHECK-NEXT: ret void
@@ -48,9 +46,7 @@ entry:
4846
define void @test_memset_pattern8_const_size(i8* noalias %a, i8* noalias %pattern) {
4947
; CHECK-LABEL: @test_memset_pattern8_const_size(
5048
; CHECK-NEXT: entry:
51-
; CHECK-NEXT: [[A_GEP_1:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 1
52-
; CHECK-NEXT: store i8 0, i8* [[A_GEP_1]], align 1
53-
; CHECK-NEXT: [[A_GEP_17:%.*]] = getelementptr i8, i8* [[A]], i32 17
49+
; CHECK-NEXT: [[A_GEP_17:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 17
5450
; CHECK-NEXT: store i8 1, i8* [[A_GEP_17]], align 1
5551
; CHECK-NEXT: call void @memset_pattern8(i8* [[A]], i8* [[PATTERN:%.*]], i64 17)
5652
; CHECK-NEXT: ret void
@@ -86,9 +82,7 @@ entry:
8682
define void @test_memset_pattern16_const_size(i8* noalias %a, i8* noalias %pattern) {
8783
; CHECK-LABEL: @test_memset_pattern16_const_size(
8884
; CHECK-NEXT: entry:
89-
; CHECK-NEXT: [[A_GEP_1:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 1
90-
; CHECK-NEXT: store i8 0, i8* [[A_GEP_1]], align 1
91-
; CHECK-NEXT: [[A_GEP_17:%.*]] = getelementptr i8, i8* [[A]], i32 17
85+
; CHECK-NEXT: [[A_GEP_17:%.*]] = getelementptr i8, i8* [[A:%.*]], i32 17
9286
; CHECK-NEXT: store i8 1, i8* [[A_GEP_17]], align 1
9387
; CHECK-NEXT: call void @memset_pattern16(i8* [[A]], i8* [[PATTERN:%.*]], i64 17)
9488
; CHECK-NEXT: ret void

0 commit comments

Comments
 (0)