From 618b283cd9765bbc968891b81510b14321bba132 Mon Sep 17 00:00:00 2001 From: Alex Lorenz Date: Thu, 30 Jul 2015 16:54:38 +0000 Subject: MIR Serialization: Serialize the machine basic block's successor weights. Reviewers: Duncan P. N. Exon Smith llvm-svn: 243659 --- llvm/lib/CodeGen/MIRParser/MIRParser.cpp | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'llvm/lib/CodeGen/MIRParser') diff --git a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp index d49085b6fe5..a179c593380 100644 --- a/llvm/lib/CodeGen/MIRParser/MIRParser.cpp +++ b/llvm/lib/CodeGen/MIRParser/MIRParser.cpp @@ -356,12 +356,24 @@ bool MIRParserImpl::initializeMachineBasicBlock( MBB.setIsLandingPad(YamlMBB.IsLandingPad); SMDiagnostic Error; // Parse the successors. + const auto &Weights = YamlMBB.SuccessorWeights; + bool HasWeights = !Weights.empty(); + if (HasWeights && Weights.size() != YamlMBB.Successors.size()) { + bool IsFew = Weights.size() < YamlMBB.Successors.size(); + return error(IsFew ? Weights.back().SourceRange.End + : Weights[YamlMBB.Successors.size()].SourceRange.Start, + Twine("too ") + (IsFew ? "few" : "many") + + " successor weights, expected " + + Twine(YamlMBB.Successors.size()) + ", have " + + Twine(Weights.size())); + } + size_t SuccessorIndex = 0; for (const auto &MBBSource : YamlMBB.Successors) { MachineBasicBlock *SuccMBB = nullptr; if (parseMBBReference(SuccMBB, MBBSource, MF, PFS)) return true; // TODO: Report an error when adding the same successor more than once. - MBB.addSuccessor(SuccMBB); + MBB.addSuccessor(SuccMBB, HasWeights ? Weights[SuccessorIndex++].Value : 0); } // Parse the liveins. for (const auto &LiveInSource : YamlMBB.LiveIns) { -- cgit v1.2.3