diff options
| author | Chris Lattner <sabre@nondot.org> | 2001-09-19 16:52:09 +0000 |
|---|---|---|
| committer | Chris Lattner <sabre@nondot.org> | 2001-09-19 16:52:09 +0000 |
| commit | 46f1b61d9852f1585fd37f9c1ebe1e4d1ac91cf8 (patch) | |
| tree | 37c2926613ae0d8d4fbc5b572313aad508ba4277 /llvm | |
| parent | 0bde2affb1effb9bf0d33aadedfaff7d7165b089 (diff) | |
| download | bcm5719-llvm-46f1b61d9852f1585fd37f9c1ebe1e4d1ac91cf8.tar.gz bcm5719-llvm-46f1b61d9852f1585fd37f9c1ebe1e4d1ac91cf8.zip | |
Add proper support to send output to the right place
llvm-svn: 649
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/tools/llc/llc.cpp | 39 |
1 files changed, 36 insertions, 3 deletions
diff --git a/llvm/tools/llc/llc.cpp b/llvm/tools/llc/llc.cpp index b8bcb1d1312..c4bdc4589d1 100644 --- a/llvm/tools/llc/llc.cpp +++ b/llvm/tools/llc/llc.cpp @@ -12,15 +12,17 @@ #include "llvm/Module.h" #include "llvm/Method.h" #include <memory> +#include <fstream> cl::String InputFilename ("", "Input filename", cl::NoFlags, "-"); cl::String OutputFilename("o", "Output filename", cl::NoFlags, ""); +cl::Flag Force ("f", "Overwrite output files", cl::NoFlags, false); //-------------------------- Internal Functions -----------------------------// -static void NormalizeMethod(Method* method) { - NormalizePhiConstantArgs(method); +static void NormalizeMethod(Method *M) { + NormalizePhiConstantArgs(M); } @@ -57,7 +59,38 @@ int main(int argc, char **argv) { } } - Target->emitAssembly(M.get(), cout); + // Figure out where we are going to send the output... + ostream *Out = 0; + if (OutputFilename != "") { // Specified an output filename? + Out = new ofstream(OutputFilename.c_str(), + (Force ? 0 : ios::noreplace)|ios::out); + } else { + if (InputFilename == "-") { + OutputFilename = "-"; + Out = &cout; + } else { + string IFN = InputFilename; + int Len = IFN.length(); + if (IFN[Len-3] == '.' && IFN[Len-2] == 'b' && IFN[Len-1] == 'c') { + OutputFilename = string(IFN.begin(), IFN.end()-3); // s/.bc/.s/ + } else { + OutputFilename = IFN; // Append a .s to it + } + OutputFilename += ".s"; + Out = new ofstream(OutputFilename.c_str(), + (Force ? 0 : ios::noreplace)|ios::out); + if (!Out->good()) { + cerr << "Error opening " << OutputFilename << "!\n"; + delete Out; + return 1; + } + } + } + + // Emit the output... + Target->emitAssembly(M.get(), *Out); + + if (Out != &cout) delete Out; return 0; } |

