- if (WriteMode == Default) {
- (*Out) << C; // Print out in list order
- } else {
- // TODO: This does not print anything other than the basic blocks in the
- // methods... more should definately be printed. It should be valid output
- // consumable by the assembler.
- //
- for (Module::iterator I = C->begin(), End = C->end(); I != End; ++I) {
- Method *M = *I;
- (*Out) << "-------------- Method: " << M->getName() << " -------------\n";
-
- switch (WriteMode) {
- case dfo: // Depth First ordering
- copy(df_begin(M), df_end(M),
- std::ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- case rdfo: // Reverse Depth First ordering
- copy(df_begin(M, true), df_end(M),
- std::ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- case po: // Post Order
- copy(po_begin(M), po_end(M),
- std::ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- case rpo: { // Reverse Post Order
- ReversePostOrderTraversal RPOT(M);
- copy(RPOT.begin(), RPOT.end(),
- std::ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- }
- default:
- abort();
- break;
- }
- }
+ PassManager Passes;
+
+ switch (WriteMode) {
+ case llvm: // Output LLVM assembly
+ Passes.add(new PrintModulePass(Out));
+ break;
+ case c: // Convert LLVM to C
+ Passes.add(createWriteToCPass(*Out));
+ break;