mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-24 12:29:33 +00:00
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. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@203489 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d89b0f200c
commit
8da0b7358d
@ -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 {
|
|||||||
; 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
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user