diff --git a/llvm/test/tools/llvm-ml/output_flag.asm b/llvm/test/tools/llvm-ml/output_flag.asm new file mode 100644 --- /dev/null +++ b/llvm/test/tools/llvm-ml/output_flag.asm @@ -0,0 +1,15 @@ +; RUN: llvm-ml --filetype=s %s /Fo - | FileCheck %s --check-prefix=HAS_OUTPUT +; RUN: llvm-ml --filetype=s %s -o - | FileCheck %s --check-prefix=HAS_OUTPUT +; /Fo takes precedence over -o, so we should still expect to see output +; RUN: llvm-ml --filetype=s %s -o /dev/null /Fo - | FileCheck %s --check-prefix=HAS_OUTPUT + +; RUN: llvm-ml --filetype=s %s /Fo /dev/null | FileCheck %s --allow-empty --check-prefix=NO_OUTPUT +; RUN: llvm-ml --filetype=s %s -o /dev/null | FileCheck %s --allow-empty --check-prefix=NO_OUTPUT + +.code + +t1: +; HAS_OUTPUT: t1: +; NO_OUTPUT-NOT: t1: + +END diff --git a/llvm/tools/llvm-ml/Opts.td b/llvm/tools/llvm-ml/Opts.td --- a/llvm/tools/llvm-ml/Opts.td +++ b/llvm/tools/llvm-ml/Opts.td @@ -37,6 +37,8 @@ HelpText<"Emit a file with the given type">; def output_att_asm : LLVMFlag<"output-att-asm">, HelpText<"Use ATT syntax for output assembly">; +def output_file_llvm : LLVMJoinedOrSeparate<"o">, + HelpText<"Names the output file">; def show_encoding : LLVMFlag<"show-encoding">, HelpText<"Show instruction encodings in output assembly">; def show_inst : LLVMFlag<"show-inst">, diff --git a/llvm/tools/llvm-ml/llvm-ml.cpp b/llvm/tools/llvm-ml/llvm-ml.cpp --- a/llvm/tools/llvm-ml/llvm-ml.cpp +++ b/llvm/tools/llvm-ml/llvm-ml.cpp @@ -342,8 +342,13 @@ DefaultOutputFilename = InputFilename; sys::path::replace_extension(DefaultOutputFilename, FileType); } - const StringRef OutputFilename = - InputArgs.getLastArgValue(OPT_output_file, DefaultOutputFilename); + StringRef OutputFilename; + if (Arg *OutputFile = InputArgs.getLastArg(OPT_output_file)) + OutputFilename = OutputFile->getValue(); + else if (Arg *OutputFile = InputArgs.getLastArg(OPT_output_file_llvm)) + OutputFilename = OutputFile->getValue(); + else + OutputFilename = DefaultOutputFilename; std::unique_ptr Out = GetOutputStream(OutputFilename); if (!Out) return 1;