[LLVMdev] CFG modifcations and code gen
Villmow, Micah
Micah.Villmow at amd.com
Mon Oct 13 17:14:09 PDT 2008
As stated in an earlier email, I am working on getting break/continue to
work correctly for my backend, but I ran into another issue with codegen
and the CFG. It seems that code gen is not done based on the CFG, but
rather on the block numbers, and the function call
MachineFunction::RenumberBlocks doesn't renumber the blocks based on the
CFG. So how can I modify the CFG so that when codegen occurs, it follows
the graph and not just does a linear scan over the MachineBasicBlock
vector?
In the attached dot file, block 2 gets printed before block 3 and 5 and
block 4 gets printed between blocks 3 and 5. This obviously is not what
the CFG is saying it should be done. The code I'm using to do this
transformation, which takes 2 & 4 and places them after block 5 is:
MachineBasicBlock* newExitPath = findLowestNumSuccBB(root);
pHigh->addSuccessor(newExitPath);
root->removeSuccessor(newExitPath);
root->CorrectExtraCFGEdges(*root->succ_begin(), NULL,
false);
pHigh->CorrectExtraCFGEdges(*pHigh->succ_begin(),
newExitPath, false);
newExitPath->moveAfter(pHigh);
root->getParent()->RenumberBlocks();
So what am I doing wrong?
Thanks,
Micah Villmow
Systems Engineer
Advanced Technology & Performance
Advanced Micro Devices Inc.
4555 Great America Pkwy,
Santa Clara, CA. 95054
P: 408-572-6219
F: 408-572-6596
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081013/13c37349/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: mftest_fc_for_break_or.dot
Type: application/octet-stream
Size: 2455 bytes
Desc: mftest_fc_for_break_or.dot
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20081013/13c37349/attachment.obj>
More information about the llvm-dev
mailing list