diff options
Diffstat (limited to 'llvm')
-rw-r--r-- | llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp | 5 | ||||
-rw-r--r-- | llvm/test/Analysis/BlockFrequencyInfo/irreducible_loop_crash.ll | 155 |
2 files changed, 159 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp index 6ceda06aac1..903a263a65f 100644 --- a/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp +++ b/llvm/lib/Analysis/BlockFrequencyInfoImpl.cpp @@ -743,7 +743,10 @@ void BlockFrequencyInfoImplBase::adjustLoopHeaderMass(LoopData &Loop) { auto &BackedgeMass = Loop.BackedgeMass[Loop.getHeaderIndex(HeaderNode)]; DEBUG(dbgs() << " - Add back edge mass for node " << getBlockName(HeaderNode) << ": " << BackedgeMass << "\n"); - Dist.addLocal(HeaderNode, BackedgeMass.getMass()); + if (BackedgeMass.getMass() > 0) + Dist.addLocal(HeaderNode, BackedgeMass.getMass()); + else + DEBUG(dbgs() << " Nothing added. Back edge mass is zero\n"); } DitheringDistributer D(Dist, LoopMass); diff --git a/llvm/test/Analysis/BlockFrequencyInfo/irreducible_loop_crash.ll b/llvm/test/Analysis/BlockFrequencyInfo/irreducible_loop_crash.ll new file mode 100644 index 00000000000..2bcd088dd16 --- /dev/null +++ b/llvm/test/Analysis/BlockFrequencyInfo/irreducible_loop_crash.ll @@ -0,0 +1,155 @@ +; RUN: opt < %s -analyze -block-freq + +target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128" +target triple = "x86_64-unknown-linux-gnu" + +define void @fn1(i32* %f) { +entry: + %tobool7 = icmp eq i32 undef, 0 + br i1 undef, label %if.end.12, label %for.body.5 + +for.inc: + store i32 undef, i32* %f, align 4 + br label %for.body.5 + +for.body.5: ; preds = %for.cond.4.preheader + br i1 %tobool7, label %for.inc.9, label %for.inc + +for.inc.9: ; preds = %for.body.5 + br i1 %tobool7, label %for.inc.9.1, label %for.inc + +if.end.12: ; preds = %if.end.12, %for.body + br i1 undef, label %for.end.17, label %for.inc + +for.end.17: ; preds = %entry + ret void + +for.inc.9.1: ; preds = %for.inc.9 + br i1 %tobool7, label %for.inc.9.2, label %for.inc + +for.inc.9.2: ; preds = %for.inc.9.1 + br i1 %tobool7, label %for.inc.9.3, label %for.inc + +for.inc.9.3: ; preds = %for.inc.9.2 + br i1 %tobool7, label %for.inc.9.4, label %for.inc + +for.inc.9.4: ; preds = %for.inc.9.3 + br i1 %tobool7, label %for.inc.9.5, label %for.inc + +for.inc.9.5: ; preds = %for.inc.9.4 + br i1 %tobool7, label %for.inc.9.6, label %for.inc + +for.inc.9.6: ; preds = %for.inc.9.5 + br i1 %tobool7, label %for.inc.9.7, label %for.inc + +for.inc.9.7: ; preds = %for.inc.9.6 + br i1 %tobool7, label %for.inc.9.8, label %for.inc + +for.inc.9.8: ; preds = %for.inc.9.7 + br i1 %tobool7, label %for.inc.9.9, label %for.inc + +for.inc.9.9: ; preds = %for.inc.9.8 + br i1 %tobool7, label %for.inc.9.10, label %for.inc + +for.inc.9.10: ; preds = %for.inc.9.9 + br i1 %tobool7, label %for.inc.9.11, label %for.inc + +for.inc.9.11: ; preds = %for.inc.9.10 + br i1 %tobool7, label %for.inc.9.12, label %for.inc + +for.inc.9.12: ; preds = %for.inc.9.11 + br i1 %tobool7, label %for.inc.9.13, label %for.inc + +for.inc.9.13: ; preds = %for.inc.9.12 + br i1 %tobool7, label %for.inc.9.14, label %for.inc + +for.inc.9.14: ; preds = %for.inc.9.13 + br i1 %tobool7, label %for.inc.9.15, label %for.inc + +for.inc.9.15: ; preds = %for.inc.9.14 + br i1 %tobool7, label %for.inc.9.16, label %for.inc + +for.inc.9.16: ; preds = %for.inc.9.15 + br i1 %tobool7, label %for.inc.9.17, label %for.inc + +for.inc.9.17: ; preds = %for.inc.9.16 + br i1 %tobool7, label %for.inc.9.18, label %for.inc + +for.inc.9.18: ; preds = %for.inc.9.17 + br i1 %tobool7, label %for.inc.9.19, label %for.inc + +for.inc.9.19: ; preds = %for.inc.9.18 + br i1 %tobool7, label %for.inc.9.20, label %for.inc + +for.inc.9.20: ; preds = %for.inc.9.19 + br i1 %tobool7, label %for.inc.9.21, label %for.inc + +for.inc.9.21: ; preds = %for.inc.9.20 + br i1 %tobool7, label %for.inc.9.22, label %for.inc + +for.inc.9.22: ; preds = %for.inc.9.21 + br i1 %tobool7, label %for.inc.9.23, label %for.inc + +for.inc.9.23: ; preds = %for.inc.9.22 + br i1 %tobool7, label %for.inc.9.24, label %for.inc + +for.inc.9.24: ; preds = %for.inc.9.23 + br i1 %tobool7, label %for.inc.9.25, label %for.inc + +for.inc.9.25: ; preds = %for.inc.9.24 + br i1 %tobool7, label %for.inc.9.26, label %for.inc + +for.inc.9.26: ; preds = %for.inc.9.25 + br i1 %tobool7, label %for.inc.9.27, label %for.inc + +for.inc.9.27: ; preds = %for.inc.9.26 + br i1 %tobool7, label %for.inc.9.28, label %for.inc + +for.inc.9.28: ; preds = %for.inc.9.27 + br i1 %tobool7, label %for.inc.9.29, label %for.inc + +for.inc.9.29: ; preds = %for.inc.9.28 + br i1 %tobool7, label %for.inc.9.30, label %for.inc + +for.inc.9.30: ; preds = %for.inc.9.29 + br i1 %tobool7, label %for.inc.9.31, label %for.inc + +for.inc.9.31: ; preds = %for.inc.9.30 + br i1 %tobool7, label %for.inc.9.32, label %for.inc + +for.inc.9.32: ; preds = %for.inc.9.31 + br i1 %tobool7, label %for.inc.9.33, label %for.inc + +for.inc.9.33: ; preds = %for.inc.9.32 + br i1 %tobool7, label %for.inc.9.34, label %for.inc + +for.inc.9.34: ; preds = %for.inc.9.33 + br i1 %tobool7, label %for.inc.9.35, label %for.inc + +for.inc.9.35: ; preds = %for.inc.9.34 + br i1 %tobool7, label %for.inc.9.36, label %for.inc + +for.inc.9.36: ; preds = %for.inc.9.35 + br i1 %tobool7, label %for.inc.9.37, label %for.inc + +for.inc.9.37: ; preds = %for.inc.9.36 + br i1 %tobool7, label %for.inc.9.38, label %for.inc + +for.inc.9.38: ; preds = %for.inc.9.37 + br i1 %tobool7, label %for.inc.9.39, label %for.inc + +for.inc.9.39: ; preds = %for.inc.9.38 + br i1 %tobool7, label %for.inc.9.40, label %for.inc + +for.inc.9.40: ; preds = %for.inc.9.39 + br i1 %tobool7, label %for.inc.9.41, label %for.inc + +for.inc.9.41: ; preds = %for.inc.9.40 + br i1 %tobool7, label %for.inc.9.42, label %for.inc + +for.inc.9.42: ; preds = %for.inc.9.41 + br i1 %tobool7, label %for.inc.9.43, label %for.inc + +for.inc.9.43: ; preds = %for.inc.9.42 + br i1 %tobool7, label %if.end.12, label %for.inc +} |