mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-11-03 14:21:30 +00:00
fix PR5827 by disabling the phi slicing transformation in a case
where instcombine would have to split a critical edge due to a phi node of an invoke. Since instcombine can't change the CFG, it has to bail out from doing the transformation. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91763 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -11234,6 +11234,23 @@ Instruction *InstCombiner::SliceUpIllegalIntegerPHI(PHINode &FirstPhi) {
|
||||
for (unsigned PHIId = 0; PHIId != PHIsToSlice.size(); ++PHIId) {
|
||||
PHINode *PN = PHIsToSlice[PHIId];
|
||||
|
||||
// Scan the input list of the PHI. If any input is an invoke, and if the
|
||||
// input is defined in the predecessor, then we won't be split the critical
|
||||
// edge which is required to insert a truncate. Because of this, we have to
|
||||
// bail out.
|
||||
for (unsigned i = 0, e = PN->getNumIncomingValues(); i != e; ++i) {
|
||||
InvokeInst *II = dyn_cast<InvokeInst>(PN->getIncomingValue(i));
|
||||
if (II == 0) continue;
|
||||
if (II->getParent() != PN->getIncomingBlock(i))
|
||||
continue;
|
||||
|
||||
// If we have a phi, and if it's directly in the predecessor, then we have
|
||||
// a critical edge where we need to put the truncate. Since we can't
|
||||
// split the edge in instcombine, we have to bail out.
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
for (Value::use_iterator UI = PN->use_begin(), E = PN->use_end();
|
||||
UI != E; ++UI) {
|
||||
Instruction *User = cast<Instruction>(*UI);
|
||||
@@ -11316,7 +11333,9 @@ Instruction *InstCombiner::SliceUpIllegalIntegerPHI(PHINode &FirstPhi) {
|
||||
PredVal = EltPHI;
|
||||
EltPHI->addIncoming(PredVal, Pred);
|
||||
continue;
|
||||
} else if (PHINode *InPHI = dyn_cast<PHINode>(PN)) {
|
||||
}
|
||||
|
||||
if (PHINode *InPHI = dyn_cast<PHINode>(PN)) {
|
||||
// If the incoming value was a PHI, and if it was one of the PHIs we
|
||||
// already rewrote it, just use the lowered value.
|
||||
if (Value *Res = ExtractedVals[LoweredPHIRecord(InPHI, Offset, Ty)]) {
|
||||
|
||||
Reference in New Issue
Block a user