mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-15 16:09:57 +00:00
[RS4GC] Update and simplify handling of Constants in findBaseDefiningValueOfVector().
Summary: This is analogous to r256079, which removed an overly strong assertion, and r256812, which simplified the code by replacing three conditionals by one. Reviewers: reames Subscribers: sanjoy, llvm-commits Differential Revision: http://reviews.llvm.org/D16019 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@257250 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
38c36e3216
commit
f7f825a803
@ -371,26 +371,10 @@ findBaseDefiningValueOfVector(Value *I) {
|
||||
// An incoming argument to the function is a base pointer
|
||||
return BaseDefiningValueResult(I, true);
|
||||
|
||||
// We shouldn't see the address of a global as a vector value?
|
||||
assert(!isa<GlobalVariable>(I) &&
|
||||
"unexpected global variable found in base of vector");
|
||||
|
||||
// inlining could possibly introduce phi node that contains
|
||||
// undef if callee has multiple returns
|
||||
if (isa<UndefValue>(I))
|
||||
// utterly meaningless, but useful for dealing with partially optimized
|
||||
// code.
|
||||
if (isa<Constant>(I))
|
||||
// Constant vectors consist only of constant pointers.
|
||||
return BaseDefiningValueResult(I, true);
|
||||
|
||||
// Due to inheritance, this must be _after_ the global variable and undef
|
||||
// checks
|
||||
if (Constant *Con = dyn_cast<Constant>(I)) {
|
||||
assert(!isa<GlobalVariable>(I) && !isa<UndefValue>(I) &&
|
||||
"order of checks wrong!");
|
||||
assert(Con->isNullValue() && "null is the only case which makes sense");
|
||||
return BaseDefiningValueResult(Con, true);
|
||||
}
|
||||
|
||||
if (isa<LoadInst>(I))
|
||||
return BaseDefiningValueResult(I, true);
|
||||
|
||||
|
@ -92,4 +92,13 @@ use:
|
||||
ret i8 addrspace(1)* %res
|
||||
}
|
||||
|
||||
|
||||
; Globals don't move and thus don't get relocated
|
||||
define i8 addrspace(1)* @test5(i1 %always_true) gc "statepoint-example" {
|
||||
; CHECK-LABEL: @test5
|
||||
; CHECK: gc.statepoint
|
||||
; CHECK-NEXT: %res = extractelement <2 x i8 addrspace(1)*> <i8 addrspace(1)* @G, i8 addrspace(1)* @G>, i32 0
|
||||
entry:
|
||||
call token (i64, i32, void ()*, i32, i32, ...) @llvm.experimental.gc.statepoint.p0f_isVoidf(i64 0, i32 0, void ()* @foo, i32 0, i32 0, i32 0, i32 0)
|
||||
%res = extractelement <2 x i8 addrspace(1)*> <i8 addrspace(1)* @G, i8 addrspace(1)* @G>, i32 0
|
||||
ret i8 addrspace(1)* %res
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user