mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-27 14:45:50 +00:00
Make nocapture analysis work with addrspacecast
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@199246 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
1c3e47c07a
commit
60ecc44266
@ -145,6 +145,7 @@ void llvm::PointerMayBeCaptured(const Value *V, CaptureTracker *Tracker) {
|
||||
case Instruction::GetElementPtr:
|
||||
case Instruction::PHI:
|
||||
case Instruction::Select:
|
||||
case Instruction::AddrSpaceCast:
|
||||
// The original value is not captured via this if the new value isn't.
|
||||
Count = 0;
|
||||
for (Instruction::use_iterator UI = I->use_begin(), UE = I->use_end();
|
||||
|
@ -437,6 +437,7 @@ determinePointerReadAttrs(Argument *A,
|
||||
case Instruction::GetElementPtr:
|
||||
case Instruction::PHI:
|
||||
case Instruction::Select:
|
||||
case Instruction::AddrSpaceCast:
|
||||
// The original value is not read/written via this if the new value isn't.
|
||||
for (Instruction::use_iterator UI = I->use_begin(), UE = I->use_end();
|
||||
UI != UE; ++UI) {
|
||||
@ -723,6 +724,7 @@ bool FunctionAttrs::IsFunctionMallocLike(Function *F,
|
||||
// Extend the analysis by looking upwards.
|
||||
case Instruction::BitCast:
|
||||
case Instruction::GetElementPtr:
|
||||
case Instruction::AddrSpaceCast:
|
||||
FlowsToReturn.insert(RVI->getOperand(0));
|
||||
continue;
|
||||
case Instruction::Select: {
|
||||
|
@ -91,6 +91,21 @@ l:
|
||||
ret i32 %val
|
||||
}
|
||||
|
||||
; CHECK: define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* nocapture %p, i1 %b)
|
||||
define i32 @nc1_addrspace(i32* %q, i32 addrspace(1)* %p, i1 %b) {
|
||||
e:
|
||||
br label %l
|
||||
l:
|
||||
%x = phi i32 addrspace(1)* [ %p, %e ]
|
||||
%y = phi i32* [ %q, %e ]
|
||||
%tmp = addrspacecast i32 addrspace(1)* %x to i32* ; <i32*> [#uses=2]
|
||||
%tmp2 = select i1 %b, i32* %tmp, i32* %y
|
||||
%val = load i32* %tmp2 ; <i32> [#uses=1]
|
||||
store i32 0, i32* %tmp
|
||||
store i32* %y, i32** @g
|
||||
ret i32 %val
|
||||
}
|
||||
|
||||
; CHECK: define void @nc2(i32* nocapture %p, i32* %q)
|
||||
define void @nc2(i32* %p, i32* %q) {
|
||||
%1 = call i32 @nc1(i32* %q, i32* %p, i1 0) ; <i32> [#uses=0]
|
||||
|
Loading…
Reference in New Issue
Block a user