mirror of
https://github.com/RPCS3/llvm.git
synced 2025-01-06 03:38:34 +00:00
If we have a VLA that has a "use" in a metadata node that's then used
here but it has no other uses, then we have a problem. E.g., int foo (const int *x) { char a[*x]; return 0; } If we assign 'a' a vreg and fast isel later on has to use the selection DAG isel, it will want to copy the value to the vreg. However, there are no uses, which goes counter to what selection DAG isel expects. <rdar://problem/11134152> git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153705 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f9e894d21d
commit
84364a4e23
@ -599,7 +599,18 @@ bool FastISel::SelectCall(const User *I) {
|
||||
if (!Reg)
|
||||
Reg = lookUpRegForValue(Address);
|
||||
|
||||
if (!Reg && isa<Instruction>(Address) &&
|
||||
// If we have a VLA that has a "use" in a metadata node that's then used
|
||||
// here but it has no other uses, then we have a problem. E.g.,
|
||||
//
|
||||
// int foo (const int *x) {
|
||||
// char a[*x];
|
||||
// return 0;
|
||||
// }
|
||||
//
|
||||
// If we assign 'a' a vreg and fast isel later on has to use the selection
|
||||
// DAG isel, it will want to copy the value to the vreg. However, there are
|
||||
// no uses, which goes counter to what selection DAG isel expects.
|
||||
if (!Reg && !Address->use_empty() && isa<Instruction>(Address) &&
|
||||
(!isa<AllocaInst>(Address) ||
|
||||
!FuncInfo.StaticAllocaMap.count(cast<AllocaInst>(Address))))
|
||||
Reg = FuncInfo.InitializeRegForValue(Address);
|
||||
|
Loading…
Reference in New Issue
Block a user