mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-02 07:32:52 +00:00
fix a really nasty basicaa mod/ref calculation bug that was causing miscompilation of
UnitTests/ObjC/messages-2.m with the recent optimizer improvements. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@131897 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
d34d429401
commit
c10ecd8f23
@ -680,9 +680,12 @@ BasicAliasAnalysis::getModRefInfo(ImmutableCallSite CS,
|
|||||||
unsigned ArgNo = 0;
|
unsigned ArgNo = 0;
|
||||||
for (ImmutableCallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
|
for (ImmutableCallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
|
||||||
CI != CE; ++CI, ++ArgNo) {
|
CI != CE; ++CI, ++ArgNo) {
|
||||||
// Only look at the no-capture pointer arguments.
|
// Only look at the no-capture or byval pointer arguments. If this
|
||||||
|
// pointer were passed to arguments that were neither of these, then it
|
||||||
|
// couldn't be no-capture.
|
||||||
if (!(*CI)->getType()->isPointerTy() ||
|
if (!(*CI)->getType()->isPointerTy() ||
|
||||||
!CS.paramHasAttr(ArgNo+1, Attribute::NoCapture))
|
(!CS.paramHasAttr(ArgNo+1, Attribute::NoCapture) &&
|
||||||
|
!CS.paramHasAttr(ArgNo+1, Attribute::ByVal)))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// If this is a no-capture pointer argument, see if we can tell that it
|
// If this is a no-capture pointer argument, see if we can tell that it
|
||||||
|
@ -236,3 +236,20 @@ define void @test18(i8* %P, i8* %Q, i8* %R) nounwind ssp {
|
|||||||
; CHECK-NEXT: call void @llvm.memcpy
|
; CHECK-NEXT: call void @llvm.memcpy
|
||||||
; CHECK-NEXT: ret
|
; CHECK-NEXT: ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
; The store here is not dead because the byval call reads it.
|
||||||
|
declare void @test19f({i32}* byval align 4 %P)
|
||||||
|
|
||||||
|
define void @test19({i32} * nocapture byval align 4 %arg5) nounwind ssp {
|
||||||
|
bb:
|
||||||
|
%tmp7 = getelementptr inbounds {i32}* %arg5, i32 0, i32 0
|
||||||
|
store i32 912, i32* %tmp7
|
||||||
|
call void @test19f({i32}* byval align 4 %arg5)
|
||||||
|
ret void
|
||||||
|
|
||||||
|
; CHECK: @test19(
|
||||||
|
; CHECK: store i32 912
|
||||||
|
; CHECK: call void @test19f
|
||||||
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user