[PATCH] D55018: [CodeExtractor] Split PHI nodes with incoming values from outlined region (PR39433)
Vedant Kumar via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Wed Nov 28 16:05:55 PST 2018
vsk added inline comments.
================
Comment at: lib/Transforms/Utils/CodeExtractor.cpp:635
+ ExitBB->getParent(), ExitBB);
+ for (pred_iterator I = pred_begin(ExitBB), E = pred_end(ExitBB);
+ I != E;) {
----------------
Why not "for (BasicBlock &PredBB : predecessors(ExitBB))"?
================
Comment at: lib/Transforms/Utils/CodeExtractor.cpp:650
+ for (unsigned i : IncomingVals)
+ NewPN->addIncoming(PN.getIncomingValue(i), PN.getIncomingBlock(i));
+ for (unsigned i : reverse(IncomingVals))
----------------
When you replace all uses of ExitBB with NewBB for every terminator in a predecessor of ExitBB, every new PHI inserted into NewBB must have *some* incoming value (just undef?) from *each* predecessor of NewBB. Otherwise, the verifier complains (taken from a stage2 build with hot/cold splitting enabled):
```
PHINode should have one entry for each predecessor of its parent basic block!
%conv97.lcssa106.ce = phi i64 [ 1, %if.then31.1 ], [ 1, %if.then31.1 ], [ 2, %if.then31.2 ], [ 2, %if.then31.2 ]
fatal error: error in backend: verification of newFunction failed!
```
Repository:
rL LLVM
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D55018/new/
https://reviews.llvm.org/D55018
More information about the llvm-commits
mailing list