Don't forget that strcpy and friends return a pointer to the destination, so

it's not a dead store if that pointer is used. Whoops!


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164583 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Nick Lewycky 2012-09-25 01:55:59 +00:00
parent e5510db57c
commit 24ab21c691
2 changed files with 12 additions and 2 deletions

View File

@ -266,8 +266,8 @@ static bool isRemovable(Instruction *I) {
}
}
if (CallSite(I)) // If we assume hasMemoryWrite(I) is true,
return true; // then there's nothing left to check.
if (CallSite CS = I)
return CS.getInstruction()->use_empty();
return false;
}

View File

@ -44,3 +44,13 @@ define void @test4(i8* %src) {
ret void
}
define void @test5(i8* nocapture %src) {
; CHECK: @test5
%dest = alloca [100 x i8], align 16
%arraydecay = getelementptr inbounds [100 x i8]* %dest, i64 0, i64 0
%call = call i8* @strcpy(i8* %arraydecay, i8* %src)
; CHECK: %call = call i8* @strcpy
%arrayidx = getelementptr inbounds i8* %call, i64 10
store i8 97, i8* %arrayidx, align 1
ret void
}