mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-04 22:07:27 +00:00
isAllocLikeFn is allowed to return true for functions which read memory; make
sure we account for that correctly in DeadStoreElimination. Fixes a regression from r158919. PR13547. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@161468 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
913ff09a9a
commit
1b88fc0122
@ -740,12 +740,19 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (isa<AllocaInst>(BBI) || isAllocLikeFn(BBI)) {
|
||||
if (isa<AllocaInst>(BBI)) {
|
||||
// Remove allocas from the list of dead stack objects; there can't be
|
||||
// any references before the definition.
|
||||
DeadStackObjects.remove(BBI);
|
||||
continue;
|
||||
}
|
||||
|
||||
if (CallSite CS = cast<Value>(BBI)) {
|
||||
// Remove allocation function calls from the list of dead stack objects;
|
||||
// there can't be any references before the definition.
|
||||
if (isAllocLikeFn(BBI))
|
||||
DeadStackObjects.remove(BBI);
|
||||
|
||||
// If this call does not access memory, it can't be loading any of our
|
||||
// pointers.
|
||||
if (AA->doesNotAccessMemory(CS))
|
||||
@ -771,7 +778,7 @@ bool DSE::handleEndBlock(BasicBlock &BB) {
|
||||
// If all of the allocas were clobbered by the call then we're not going
|
||||
// to find anything else to process.
|
||||
if (DeadStackObjects.empty())
|
||||
return MadeChange;
|
||||
break;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
@ -276,3 +276,18 @@ define void @test22(i1 %i, i32 %k, i32 %m) nounwind {
|
||||
; CHECK-NEXT: ret void
|
||||
ret void
|
||||
}
|
||||
|
||||
; PR13547
|
||||
; CHECK: @test23
|
||||
; CHECK: store i8 97
|
||||
; CHECK: store i8 0
|
||||
declare noalias i8* @strdup(i8* nocapture) nounwind
|
||||
define noalias i8* @test23() nounwind uwtable ssp {
|
||||
%x = alloca [2 x i8], align 1
|
||||
%arrayidx = getelementptr inbounds [2 x i8]* %x, i64 0, i64 0
|
||||
store i8 97, i8* %arrayidx, align 1
|
||||
%arrayidx1 = getelementptr inbounds [2 x i8]* %x, i64 0, i64 1
|
||||
store i8 0, i8* %arrayidx1, align 1
|
||||
%call = call i8* @strdup(i8* %arrayidx) nounwind
|
||||
ret i8* %call
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user