diff --git a/test/LLVMC/opt-test.c b/test/LLVMC/opt-test.c new file mode 100644 index 00000000000..25ca66a5c6b --- /dev/null +++ b/test/LLVMC/opt-test.c @@ -0,0 +1,12 @@ +/* + * Check that the -opt switch works. + * RUN: llvmc2 %s -opt -o %t + * RUN: ./%t | grep hello + */ + +#include + +int main() { + printf("hello\n"); + return 0; +} diff --git a/tools/llvmc2/CompilationGraph.cpp b/tools/llvmc2/CompilationGraph.cpp index 9cdcac38457..acf391a2906 100644 --- a/tools/llvmc2/CompilationGraph.cpp +++ b/tools/llvmc2/CompilationGraph.cpp @@ -151,6 +151,10 @@ namespace { Out.appendComponent(BaseName); } Out.appendSuffix(Suffix); + // NOTE: makeUnique always *creates* a unique temporary file, + // which is good, since there will be no races. However, some + // tools do not like it when the output file already exists, so + // they have to be placated with -f or something like that. Out.makeUnique(true, NULL); return Out; } diff --git a/tools/llvmc2/Tools.td b/tools/llvmc2/Tools.td index 28fba8d5a36..852d7fea062 100644 --- a/tools/llvmc2/Tools.td +++ b/tools/llvmc2/Tools.td @@ -27,9 +27,12 @@ def llvm_gcc_c : Tool< (output_suffix "bc"), (cmd_line (case (switch_on "E"), - "llvm-g++ -E -x c $INFILE", + (case (not_empty "o"), + "llvm-gcc -E -x c++ $INFILE -o $OUTFILE", + (default), + "llvm-gcc -E -x c++ $INFILE"), (default), - "llvm-g++ -c -x c $INFILE -o $OUTFILE -emit-llvm")), + "llvm-gcc -c -x c $INFILE -o $OUTFILE -emit-llvm")), (switch_option "E", (stop_compilation), (help "Stop after the preprocessing stage, do not run the compiler")), (sink) @@ -41,8 +44,10 @@ def llvm_gcc_cpp : Tool< (output_suffix "bc"), (cmd_line (case (switch_on "E"), - // TOFIX: this does not play well with -o - "llvm-g++ -E -x c++ $INFILE", + (case (not_empty "o"), + "llvm-g++ -E -x c++ $INFILE -o $OUTFILE", + (default), + "llvm-g++ -E -x c++ $INFILE"), (default), "llvm-g++ -c -x c++ $INFILE -o $OUTFILE -emit-llvm")), (switch_option "E", (stop_compilation)), @@ -54,7 +59,7 @@ def opt : Tool< (out_language "llvm-bitcode"), (switch_option "opt", (help "Enable opt")), (output_suffix "bc"), - (cmd_line "opt $INFILE -o $OUTFILE") + (cmd_line "opt -f $INFILE -o $OUTFILE") ]>; def llvm_as : Tool< diff --git a/tools/llvmc2/llvmc.cpp b/tools/llvmc2/llvmc.cpp index 560ee98173a..e073845d09e 100644 --- a/tools/llvmc2/llvmc.cpp +++ b/tools/llvmc2/llvmc.cpp @@ -32,8 +32,6 @@ using namespace llvmc; // Built-in command-line options. // External linkage here is intentional. -// TOFIX: Write a 'driver driver' (easier to do as a separate -// executable that drives llvmc2 proper). cl::list InputFilenames(cl::Positional, cl::desc(""), cl::ZeroOrMore); cl::opt OutputFilename("o", cl::desc("Output file name"), @@ -42,7 +40,7 @@ cl::list Languages("x", cl::desc("Specify the language of the following input files"), cl::ZeroOrMore); cl::opt DryRun("dry-run", - cl::desc("only pretend to run commands")); + cl::desc("Only pretend to run commands")); cl::opt VerboseMode("v", cl::desc("Enable verbose mode")); cl::opt WriteGraph("write-graph",