Skip to content
Snippets Groups Projects
Commit 3ef5e46b authored by Benjamin Kramer's avatar Benjamin Kramer
Browse files

MemCpyOpt: When merging memsets also merge the trivial case of two memsets...

MemCpyOpt: When merging memsets also merge the trivial case of two memsets with the same destination.

The testcase is from PR19092, but I think the bug described there is actually a clang issue.

llvm-svn: 203489
parent 0e8f4612
No related branches found
No related tags found
No related merge requests found
...@@ -75,6 +75,13 @@ static bool IsPointerOffset(Value *Ptr1, Value *Ptr2, int64_t &Offset, ...@@ -75,6 +75,13 @@ static bool IsPointerOffset(Value *Ptr1, Value *Ptr2, int64_t &Offset,
const DataLayout &TD) { const DataLayout &TD) {
Ptr1 = Ptr1->stripPointerCasts(); Ptr1 = Ptr1->stripPointerCasts();
Ptr2 = Ptr2->stripPointerCasts(); Ptr2 = Ptr2->stripPointerCasts();
// Handle the trivial case first.
if (Ptr1 == Ptr2) {
Offset = 0;
return true;
}
GEPOperator *GEP1 = dyn_cast<GEPOperator>(Ptr1); GEPOperator *GEP1 = dyn_cast<GEPOperator>(Ptr1);
GEPOperator *GEP2 = dyn_cast<GEPOperator>(Ptr2); GEPOperator *GEP2 = dyn_cast<GEPOperator>(Ptr2);
......
...@@ -272,3 +272,15 @@ define void @test9() nounwind { ...@@ -272,3 +272,15 @@ define void @test9() nounwind {
; CHECK-LABEL: @test9( ; CHECK-LABEL: @test9(
; CHECK: call void @llvm.memset.p0i8.i64(i8* bitcast ([16 x i64]* @test9buf to i8*), i8 -1, i64 16, i32 16, i1 false) ; CHECK: call void @llvm.memset.p0i8.i64(i8* bitcast ([16 x i64]* @test9buf to i8*), i8 -1, i64 16, i32 16, i1 false)
} }
; PR19092
define void @test10(i8* nocapture %P) nounwind {
tail call void @llvm.memset.p0i8.i64(i8* %P, i8 0, i64 42, i32 1, i1 false)
tail call void @llvm.memset.p0i8.i64(i8* %P, i8 0, i64 23, i32 1, i1 false)
ret void
; CHECK-LABEL: @test10(
; CHECK-NOT: memset
; CHECK: call void @llvm.memset.p0i8.i64(i8* %P, i8 0, i64 42, i32 1, i1 false)
; CHECK-NOT: memset
; CHECK: ret void
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment