- if (WriteMode.getValue() == 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.getValue()) {
- case dfo: // Depth First ordering
- copy(cfg::df_begin(M), cfg::df_end(M),
- ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- case rdfo: // Reverse Depth First ordering
- copy(cfg::df_begin(M, true), cfg::df_end(M),
- ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- case po: // Post Order
- copy(cfg::po_begin(M), cfg::po_end(M),
- ostream_iterator<BasicBlock*>(*Out, "\n"));
- break;
- case rpo: { // Reverse Post Order
- cfg::ReversePostOrderTraversal RPOT(M);
- copy(RPOT.begin(), RPOT.end(),
- 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;