From: Matthias Braun Date: Fri, 19 Aug 2016 22:31:45 +0000 (+0000) Subject: MachineFunction: Cleanup/simplify MachineFunctionProperties::print() X-Git-Tag: llvmorg-4.0.0-rc1~11855 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a7d6fc9618aaee28fbbe2324ee8f6168e551d64f;p=platform%2Fupstream%2Fllvm.git MachineFunction: Cleanup/simplify MachineFunctionProperties::print() - Always compile print() regardless of LLVM_ENABLE_DUMP. (We usually only gard dump() functions with that). - Only show the set properties to reduce output clutter. - Remove the unused variant that even shows the unset properties. - Fix comments llvm-svn: 279338 --- diff --git a/llvm/include/llvm/CodeGen/MachineFunction.h b/llvm/include/llvm/CodeGen/MachineFunction.h index e0c7dd2..7374c07 100644 --- a/llvm/include/llvm/CodeGen/MachineFunction.h +++ b/llvm/include/llvm/CodeGen/MachineFunction.h @@ -84,7 +84,6 @@ struct MachineFunctionInfo { /// require that a property be set. class MachineFunctionProperties { // TODO: Add MachineVerifier checks for AllVRegsAllocated - // TODO: Add a way to print the properties and make more useful error messages // Possible TODO: Allow targets to extend this (perhaps by allowing the // constructor to specify the size of the bit vector) // Possible TODO: Allow requiring the negative (e.g. VRegsAllocated could be @@ -155,9 +154,8 @@ public: return !V.Properties.test(Properties); } - // Print the MachineFunctionProperties in human-readable form. If OnlySet is - // true, only print the properties that are set. - void print(raw_ostream &ROS, bool OnlySet=false) const; + /// Print the MachineFunctionProperties in human-readable form. + void print(raw_ostream &OS) const; private: BitVector Properties = diff --git a/llvm/lib/CodeGen/MachineFunction.cpp b/llvm/lib/CodeGen/MachineFunction.cpp index 4cdb6c8..2ed6517 100644 --- a/llvm/lib/CodeGen/MachineFunction.cpp +++ b/llvm/lib/CodeGen/MachineFunction.cpp @@ -54,40 +54,26 @@ static cl::opt void MachineFunctionInitializer::anchor() {} -void MachineFunctionProperties::print(raw_ostream &ROS, bool OnlySet) const { - // Leave this function even in NDEBUG as an out-of-line anchor. -#if !defined(NDEBUG) || defined(LLVM_ENABLE_DUMP) - bool NeedsComma = false; - for (BitVector::size_type i = 0; i < Properties.size(); ++i) { - bool HasProperty = Properties[i]; - if (OnlySet && !HasProperty) +static const char *getPropertyName(MachineFunctionProperties::Property Prop) { + typedef MachineFunctionProperties::Property P; + switch(Prop) { + case P::AllVRegsAllocated: return "AllVRegsAllocated"; + case P::IsSSA: return "IsSSA"; + case P::Legalized: return "Legalized"; + case P::RegBankSelected: return "RegBankSelected"; + case P::Selected: return "Selected"; + case P::TracksLiveness: return "TracksLiveness"; + } +} + +void MachineFunctionProperties::print(raw_ostream &OS) const { + const char *Separator = ""; + for (BitVector::size_type I = 0; I < Properties.size(); ++I) { + if (!Properties[I]) continue; - if (NeedsComma) - ROS << ", "; - else - NeedsComma = true; - switch(static_cast(i)) { - case Property::IsSSA: - ROS << (HasProperty ? "SSA" : "Post SSA"); - break; - case Property::TracksLiveness: - ROS << (HasProperty ? "" : "not ") << "tracking liveness"; - break; - case Property::AllVRegsAllocated: - ROS << (HasProperty ? "AllVRegsAllocated" : "HasVRegs"); - break; - case Property::Legalized: - ROS << (HasProperty ? "" : "not ") << "legalized"; - break; - case Property::RegBankSelected: - ROS << (HasProperty ? "" : "not ") << "RegBank-selected"; - break; - case Property::Selected: - ROS << (HasProperty ? "" : "not ") << "selected"; - break; - } + OS << Separator << getPropertyName(static_cast(I)); + Separator = ", "; } -#endif } //===----------------------------------------------------------------------===// @@ -418,9 +404,7 @@ StringRef MachineFunction::getName() const { void MachineFunction::print(raw_ostream &OS, const SlotIndexes *Indexes) const { OS << "# Machine code for function " << getName() << ": "; - OS << "Properties: <"; getProperties().print(OS); - OS << ">\n"; // Print Frame Information FrameInfo->print(*this, OS); diff --git a/llvm/lib/CodeGen/MachineFunctionPass.cpp b/llvm/lib/CodeGen/MachineFunctionPass.cpp index 228fe17..524ebdb 100644 --- a/llvm/lib/CodeGen/MachineFunctionPass.cpp +++ b/llvm/lib/CodeGen/MachineFunctionPass.cpp @@ -49,7 +49,7 @@ bool MachineFunctionPass::runOnFunction(Function &F) { errs() << "MachineFunctionProperties required by " << getPassName() << " pass are not met by function " << F.getName() << ".\n" << "Required properties: "; - RequiredProperties.print(errs(), /*OnlySet=*/true); + RequiredProperties.print(errs()); errs() << "\nCurrent properties: "; MFProps.print(errs()); errs() << "\n"; diff --git a/llvm/test/CodeGen/AArch64/arm64-misched-multimmo.ll b/llvm/test/CodeGen/AArch64/arm64-misched-multimmo.ll index d4e8aa1a..3593668 100644 --- a/llvm/test/CodeGen/AArch64/arm64-misched-multimmo.ll +++ b/llvm/test/CodeGen/AArch64/arm64-misched-multimmo.ll @@ -7,7 +7,7 @@ ; Check that no scheduling dependencies are created between the paired loads and the store during post-RA MI scheduling. ; -; CHECK-LABEL: # Machine code for function foo: Properties: , %W{{[0-9]+}} = LDPWi ; CHECK: Successors: ; CHECK-NOT: ch SU(4)