mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Teach instsimplify to gracefully degrade in the presence of instructions
not attched to a basic block or function. There are conservatively correct answers in these cases, and this makes the analysis more useful in contexts where we have a partially formed bit of IR. I don't have any way to test this directly... suggestions welcome here, but I'm not seeing anything sadly. I only found this using a subsequent patch to the inliner which runs instsimplify on partially inlined instructions, and even then only on a quite large program. I never got a reasonable testcase out of it, and anything I do get is likely to be quite fragile due to requiring an interaction of two different passes, and the only result being a segfault if it goes wrong. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@153176 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a8d873e178
commit
ff739c1575
@ -95,6 +95,12 @@ static bool ValueDominatesPHI(Value *V, PHINode *P, const DominatorTree *DT) {
|
||||
// Arguments and constants dominate all instructions.
|
||||
return true;
|
||||
|
||||
// If we are processing instructions (and/or basic blocks) that have not been
|
||||
// fully added to a function, the parent nodes may still be null. Simply
|
||||
// return the conservative answer in these cases.
|
||||
if (!I->getParent() || !P->getParent() || !I->getParent()->getParent())
|
||||
return false;
|
||||
|
||||
// If we have a DominatorTree then do a precise test.
|
||||
if (DT) {
|
||||
if (!DT->isReachableFromEntry(P->getParent()))
|
||||
|
Loading…
Reference in New Issue
Block a user