mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-01-31 12:41:49 +01:00
Revert part of "Cleanup some GraphTraits iteration code"
This reverts part of r300656, which caused a regression in propagateMassToSuccessors by counting edges n^2 times, where n is the number of edges from the source basic block to the same successor basic block. The result was both incorrect and very slow to compute for large values of n (e.g. switches with multiple cases that go to the same basic block). Patch by Andrew Scheidecker! llvm-svn: 320208
This commit is contained in:
parent
1a38944443
commit
27a3b015ef
@ -1314,9 +1314,12 @@ BlockFrequencyInfoImpl<BT>::propagateMassToSuccessors(LoopData *OuterLoop,
|
||||
return false;
|
||||
} else {
|
||||
const BlockT *BB = getBlock(Node);
|
||||
for (const auto Succ : children<const BlockT *>(BB))
|
||||
if (!addToDist(Dist, OuterLoop, Node, getNode(Succ),
|
||||
getWeightFromBranchProb(BPI->getEdgeProbability(BB, Succ))))
|
||||
for (auto SI = GraphTraits<const BlockT *>::child_begin(BB),
|
||||
SE = GraphTraits<const BlockT *>::child_end(BB);
|
||||
SI != SE; ++SI)
|
||||
if (!addToDist(
|
||||
Dist, OuterLoop, Node, getNode(*SI),
|
||||
getWeightFromBranchProb(BPI->getEdgeProbability(BB, SI))))
|
||||
// Irreducible backedge.
|
||||
return false;
|
||||
}
|
||||
|
22
test/Analysis/BlockFrequencyInfo/redundant_edges.ll
Normal file
22
test/Analysis/BlockFrequencyInfo/redundant_edges.ll
Normal file
@ -0,0 +1,22 @@
|
||||
; RUN: opt < %s -analyze -block-freq | FileCheck %s
|
||||
; RUN: opt < %s -analyze -lazy-block-freq | FileCheck %s
|
||||
; RUN: opt < %s -passes='print<block-freq>' -disable-output 2>&1 | FileCheck %s
|
||||
|
||||
define void @test1() {
|
||||
; CHECK-LABEL: Printing analysis {{.*}} for function 'test1':
|
||||
; CHECK-NEXT: block-frequency-info: test1
|
||||
; CHECK-NEXT: entry: float = 1.0, int = [[ENTRY:[0-9]+]]
|
||||
entry:
|
||||
br label %loop
|
||||
|
||||
; CHECK-NEXT: loop: float = 32.0
|
||||
loop:
|
||||
switch i32 undef, label %loop [
|
||||
i32 0, label %return
|
||||
i32 1, label %return
|
||||
]
|
||||
|
||||
; CHECK-NEXT: return: float = 1.0
|
||||
return:
|
||||
ret void
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user