mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-28 15:33:16 +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;
|
||||
for (ImmutableCallSite::arg_iterator CI = CS.arg_begin(), CE = CS.arg_end();
|
||||
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() ||
|
||||
!CS.paramHasAttr(ArgNo+1, Attribute::NoCapture))
|
||||
(!CS.paramHasAttr(ArgNo+1, Attribute::NoCapture) &&
|
||||
!CS.paramHasAttr(ArgNo+1, Attribute::ByVal)))
|
||||
continue;
|
||||
|
||||
// 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: 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