forked from OSchip/llvm-project
CodeGen: BlockPlacement: Clear ComputedEdges between functions.
Not clearing was causing non-deterministic compiles for large files. Addresses for MachineBasicBlocks would end up colliding and we would lay out a block that we assumed had been pre-computed when it had not been. llvm-svn: 300022
This commit is contained in:
parent
f2435b9574
commit
04300b033e
|
@ -2640,6 +2640,9 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &MF) {
|
|||
// there are no MachineLoops.
|
||||
PreferredLoopExit = nullptr;
|
||||
|
||||
assert(BlockToChain.empty());
|
||||
assert(ComputedEdges.empty());
|
||||
|
||||
if (TailDupPlacement) {
|
||||
MPDT = &getAnalysis<MachinePostDominatorTree>();
|
||||
unsigned TailDupSize = TailDupPlacementThreshold;
|
||||
|
@ -2649,8 +2652,6 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &MF) {
|
|||
precomputeTriangleChains();
|
||||
}
|
||||
|
||||
assert(BlockToChain.empty());
|
||||
|
||||
buildCFGChains();
|
||||
|
||||
// Changing the layout can create new tail merging opportunities.
|
||||
|
@ -2671,6 +2672,7 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &MF) {
|
|||
/*AfterBlockPlacement=*/true)) {
|
||||
// Redo the layout if tail merging creates/removes/moves blocks.
|
||||
BlockToChain.clear();
|
||||
ComputedEdges.clear();
|
||||
// Must redo the post-dominator tree if blocks were changed.
|
||||
if (MPDT)
|
||||
MPDT->runOnMachineFunction(MF);
|
||||
|
@ -2683,6 +2685,7 @@ bool MachineBlockPlacement::runOnMachineFunction(MachineFunction &MF) {
|
|||
alignBlocks();
|
||||
|
||||
BlockToChain.clear();
|
||||
ComputedEdges.clear();
|
||||
ChainAllocator.DestroyAll();
|
||||
|
||||
if (AlignAllBlock)
|
||||
|
|
Loading…
Reference in New Issue