[modules] "Specialize" a function by actually specializing a function template

rather than by adding an overload and hoping that it's declared before the code
that calls it. (In a modules build, it isn't.)

llvm-svn: 207133
This commit is contained in:
Richard Smith 2014-04-24 18:27:29 +00:00
parent 7ceec07cf6
commit 0d9ec713e7
2 changed files with 9 additions and 13 deletions

View File

@ -59,11 +59,6 @@ private:
void getAnalysisUsage(AnalysisUsage&) const override;
};
/// Specialize WriteGraph, the standard implementation won't work.
raw_ostream &WriteGraph(raw_ostream &O, const EdgeBundles &G,
bool ShortNames = false,
const Twine &Title = "");
} // end namespace llvm
#endif

View File

@ -69,15 +69,11 @@ bool EdgeBundles::runOnMachineFunction(MachineFunction &mf) {
return false;
}
/// view - Visualize the annotated bipartite CFG with Graphviz.
void EdgeBundles::view() const {
ViewGraph(*this, "EdgeBundles");
}
/// Specialize WriteGraph, the standard implementation won't work.
raw_ostream &llvm::WriteGraph(raw_ostream &O, const EdgeBundles &G,
bool ShortNames,
const Twine &Title) {
template<>
raw_ostream &llvm::WriteGraph<>(raw_ostream &O, const EdgeBundles &G,
bool ShortNames,
const Twine &Title) {
const MachineFunction *MF = G.getMachineFunction();
O << "digraph {\n";
@ -95,3 +91,8 @@ raw_ostream &llvm::WriteGraph(raw_ostream &O, const EdgeBundles &G,
O << "}\n";
return O;
}
/// view - Visualize the annotated bipartite CFG with Graphviz.
void EdgeBundles::view() const {
ViewGraph(*this, "EdgeBundles");
}