[llvm-commits] [llvm] r50732 - in /llvm/trunk/tools/llvmc2: CompilationGraph.cpp CompilationGraph.h Example.td Tools.td
Mikhail Glushenkov
foldr at codedgers.com
Tue May 6 10:23:50 PDT 2008
Author: foldr
Date: Tue May 6 12:23:50 2008
New Revision: 50732
URL: http://llvm.org/viewvc/llvm-project?rev=50732&view=rev
Log:
Add an ability to choose between different edges based on edge properties.
Modified:
llvm/trunk/tools/llvmc2/CompilationGraph.cpp
llvm/trunk/tools/llvmc2/CompilationGraph.h
llvm/trunk/tools/llvmc2/Example.td
llvm/trunk/tools/llvmc2/Tools.td
Modified: llvm/trunk/tools/llvmc2/CompilationGraph.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc2/CompilationGraph.cpp?rev=50732&r1=50731&r2=50732&view=diff
==============================================================================
--- llvm/trunk/tools/llvmc2/CompilationGraph.cpp (original)
+++ llvm/trunk/tools/llvmc2/CompilationGraph.cpp Tue May 6 12:23:50 2008
@@ -25,6 +25,31 @@
extern cl::list<std::string> InputFilenames;
extern cl::opt<std::string> OutputFilename;
+// Choose one of the edges based on command-line options.
+const Edge* Node::ChooseEdge() const {
+ const Edge* DefaultEdge = 0;
+ for (const_iterator B = EdgesBegin(), E = EdgesEnd();
+ B != E; ++B) {
+ const Edge* E = (*B).getPtr();
+ if (E->isDefault())
+ if (!DefaultEdge)
+ DefaultEdge = E;
+ else
+ throw std::runtime_error("Node " + Name() +
+ ": multiple default edges found!"
+ "Most probably a specification error.");
+ if (E->isEnabled())
+ return E;
+ }
+
+ if (DefaultEdge)
+ return DefaultEdge;
+ else
+ throw std::runtime_error("Node " + Name() +
+ ": no suitable edge found! "
+ "Most probably a specification error.");
+}
+
CompilationGraph::CompilationGraph() {
NodesMap["root"] = Node(this);
}
@@ -84,8 +109,8 @@
}
}
-// TOFIX: support edge properties.
-// TOFIX: support more interesting graph topologies.
+// TOFIX: support more interesting graph topologies. We will need to
+// do topological sorting to process multiple Join nodes correctly.
int CompilationGraph::Build (const sys::Path& tempDir) const {
PathVector JoinList;
const Tool* JoinTool = 0;
@@ -102,7 +127,7 @@
throw std::runtime_error("Tool names vector is empty!");
const Node* N = &getNode(*TV.begin());
- // Pass it through the chain until we bump into a Join node or a
+ // Pass file through the chain until we bump into a Join node or a
// node that says that it is the last.
bool Last = false;
while(!Last) {
@@ -135,7 +160,7 @@
if (CurTool->GenerateAction(In, Out).Execute() != 0)
throw std::runtime_error("Tool returned error code!");
- N = &getNode((*N->EdgesBegin())->ToolName());
+ N = &getNode(N->ChooseEdge()->ToolName());
In = Out; Out.clear();
}
}
@@ -166,7 +191,7 @@
template<typename GraphType>
static std::string getNodeLabel(const Node* N, const GraphType&) {
if (N->ToolPtr)
- return N->ToolPtr->Name();
+ return N->Name();
else
return "root";
}
Modified: llvm/trunk/tools/llvmc2/CompilationGraph.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc2/CompilationGraph.h?rev=50732&r1=50731&r2=50732&view=diff
==============================================================================
--- llvm/trunk/tools/llvmc2/CompilationGraph.h (original)
+++ llvm/trunk/tools/llvmc2/CompilationGraph.h Tue May 6 12:23:50 2008
@@ -45,7 +45,7 @@
class SimpleEdge : public Edge {
public:
SimpleEdge(const std::string& T) : Edge(T) {}
- bool isEnabled() const { return true;}
+ bool isEnabled() const { return false;}
bool isDefault() const { return true;}
};
@@ -60,12 +60,16 @@
Node(CompilationGraph* G, Tool* T) : OwningGraph(G), ToolPtr(T) {}
bool HasChildren() const { return !OutEdges.empty(); }
+ const std::string Name() const { return ToolPtr->Name(); }
iterator EdgesBegin() { return OutEdges.begin(); }
const_iterator EdgesBegin() const { return OutEdges.begin(); }
iterator EdgesEnd() { return OutEdges.end(); }
const_iterator EdgesEnd() const { return OutEdges.end(); }
+ // Choose one of the edges based on command-line options.
+ const Edge* ChooseEdge() const;
+
// Takes ownership of the object.
void AddEdge(Edge* E)
{ OutEdges.push_back(llvm::IntrusiveRefCntPtr<Edge>(E)); }
Modified: llvm/trunk/tools/llvmc2/Example.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc2/Example.td?rev=50732&r1=50731&r2=50732&view=diff
==============================================================================
--- llvm/trunk/tools/llvmc2/Example.td (original)
+++ llvm/trunk/tools/llvmc2/Example.td Tue May 6 12:23:50 2008
@@ -26,11 +26,10 @@
Edge<llvm_gcc_cpp, llc>,
Edge<llvm_as, llc>,
- OptionalEdge<llvm_gcc_c, opt, [(switch_on "S")]>,
- OptionalEdge<llvm_gcc_cpp, opt, [(switch_on "S")]>,
- OptionalEdge<llvm_as, opt, [(switch_on "S")]>,
- OptionalEdge<opt, llc, [(and (switch_on "S"), (parameter_equals "O", "V")),
- (element_in_list "P", "E")]>,
+ OptionalEdge<llvm_gcc_c, opt, [(switch_on "opt")]>,
+ OptionalEdge<llvm_gcc_cpp, opt, [(switch_on "opt")]>,
+ OptionalEdge<llvm_as, opt, [(switch_on "opt")]>,
+ Edge<opt, llc>,
Edge<llc, llvm_gcc_assembler>,
Edge<llvm_gcc_assembler, llvm_gcc_linker>
Modified: llvm/trunk/tools/llvmc2/Tools.td
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvmc2/Tools.td?rev=50732&r1=50731&r2=50732&view=diff
==============================================================================
--- llvm/trunk/tools/llvmc2/Tools.td (original)
+++ llvm/trunk/tools/llvmc2/Tools.td Tue May 6 12:23:50 2008
@@ -38,9 +38,9 @@
def opt : Tool<
[(in_language "llvm-bitcode"),
(out_language "llvm-bitcode"),
- (switch_option "S", (help "Test switch")),
- (parameter_option "O", (help "Test Parameter")),
- (prefix_list_option "P", (help "Test Parameter List")),
+ (switch_option "opt", (help "Enable opt")),
+ //(parameter_option "O", (help "Test Parameter")),
+ //(prefix_list_option "P", (help "Test Parameter List")),
(output_suffix "bc"),
(cmd_line "opt $INFILE -o $OUTFILE")
]>;
More information about the llvm-commits
mailing list