mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 04:30:23 +00:00
We may visit a call that uses an alloca multiple times in callUsesLocalStack, sometimes with IsNocapture true and sometimes with IsNocapture false. We accidentally skipped work we needed to do in the IsNocapture=false case if we were called with IsNocapture=true the first time. Fixes PR20405!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213726 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
b8d3634313
commit
1bda2d9386
@ -227,12 +227,10 @@ struct AllocaDerivedValueTracker {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void callUsesLocalStack(CallSite CS, bool IsNocapture) {
|
void callUsesLocalStack(CallSite CS, bool IsNocapture) {
|
||||||
// Add it to the list of alloca users. If it's already there, skip further
|
// Add it to the list of alloca users.
|
||||||
// processing.
|
AllocaUsers.insert(CS.getInstruction());
|
||||||
if (!AllocaUsers.insert(CS.getInstruction()))
|
|
||||||
return;
|
|
||||||
|
|
||||||
// If it's nocapture then it can't capture the alloca.
|
// If it's nocapture then it can't capture this alloca.
|
||||||
if (IsNocapture)
|
if (IsNocapture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -174,3 +174,17 @@ if.end:
|
|||||||
return:
|
return:
|
||||||
ret void
|
ret void
|
||||||
}
|
}
|
||||||
|
|
||||||
|
declare void @test11_helper1(i8** nocapture, i8*)
|
||||||
|
declare void @test11_helper2(i8*)
|
||||||
|
define void @test11() {
|
||||||
|
; CHECK-LABEL: @test11
|
||||||
|
; CHECK-NOT: tail
|
||||||
|
%a = alloca i8*
|
||||||
|
%b = alloca i8
|
||||||
|
call void @test11_helper1(i8** %a, i8* %b) ; a = &b
|
||||||
|
%c = load i8** %a
|
||||||
|
call void @test11_helper2(i8* %c)
|
||||||
|
; CHECK: call void @test11_helper2
|
||||||
|
ret void
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user