diff options
author | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-11-19 14:04:59 -0800 |
---|---|---|
committer | Francis Visoiu Mistrih <francisvm@yahoo.com> | 2019-11-19 16:30:37 -0800 |
commit | bffdee8ef379126de3f2581214d89c1b29f440b7 (patch) | |
tree | 141c880a7d81cb918e21d8612bc0bb0dd4d8b4a9 | |
parent | 1b387484b9b38a4a1e98a9d22a9a26065b0d184e (diff) | |
download | bcm5719-llvm-bffdee8ef379126de3f2581214d89c1b29f440b7.tar.gz bcm5719-llvm-bffdee8ef379126de3f2581214d89c1b29f440b7.zip |
[LTO][Legacy] Add API for passing LLVM options separately
In order to correctly pass options to LLVM, including options containing
spaces which are used as delimiters for multiple options in
lto_codegen_debug_options, add a new API:
lto_codegen_debug_options_array.
Unfortunately, tools/lto has no testing infrastructure yet, so there are
no tests associated with this patch.
Differential Revision: https://reviews.llvm.org/D70463
-rw-r--r-- | llvm/include/llvm-c/lto.h | 15 | ||||
-rw-r--r-- | llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h | 3 | ||||
-rw-r--r-- | llvm/lib/LTO/LTOCodeGenerator.cpp | 9 | ||||
-rw-r--r-- | llvm/tools/lto/lto.cpp | 13 | ||||
-rw-r--r-- | llvm/tools/lto/lto.exports | 1 |
5 files changed, 32 insertions, 9 deletions
diff --git a/llvm/include/llvm-c/lto.h b/llvm/include/llvm-c/lto.h index 0c6ce673162..97a8f482332 100644 --- a/llvm/include/llvm-c/lto.h +++ b/llvm/include/llvm-c/lto.h @@ -46,7 +46,7 @@ typedef bool lto_bool_t; * @{ */ -#define LTO_API_VERSION 25 +#define LTO_API_VERSION 26 /** * \since prior to LTO_API_VERSION=3 @@ -514,12 +514,25 @@ lto_api_version(void); /** * Sets options to help debug codegen bugs. * + * This function takes one or more options separated by spaces. + * Warning: passing file paths through this function may confuse the argument + * parser if the paths contain spaces. + * * \since prior to LTO_API_VERSION=3 */ extern void lto_codegen_debug_options(lto_code_gen_t cg, const char *); /** + * Same as the previous function, but takes every option separately through an + * array. + * + * \since prior to LTO_API_VERSION=26 + */ +extern void lto_codegen_debug_options_array(lto_code_gen_t cg, + const char *const *, int number); + +/** * Initializes LLVM disassemblers. * FIXME: This doesn't really belong here. * diff --git a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h index acb0b1fec93..114ba85947a 100644 --- a/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h +++ b/llvm/include/llvm/LTO/legacy/LTOCodeGenerator.h @@ -35,6 +35,7 @@ #define LLVM_LTO_LTOCODEGENERATOR_H #include "llvm-c/lto.h" +#include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallPtrSet.h" #include "llvm/ADT/StringMap.h" #include "llvm/ADT/StringSet.h" @@ -122,7 +123,7 @@ struct LTOCodeGenerator { /// name is misleading). This function should be called before /// LTOCodeGenerator::compilexxx(), and /// LTOCodeGenerator::writeMergedModules(). - void setCodeGenDebugOptions(StringRef Opts); + void setCodeGenDebugOptions(ArrayRef<const char *> Opts); /// Parse the options set in setCodeGenDebugOptions. /// diff --git a/llvm/lib/LTO/LTOCodeGenerator.cpp b/llvm/lib/LTO/LTOCodeGenerator.cpp index f87f232c63e..5fef14230a9 100644 --- a/llvm/lib/LTO/LTOCodeGenerator.cpp +++ b/llvm/lib/LTO/LTOCodeGenerator.cpp @@ -622,12 +622,9 @@ bool LTOCodeGenerator::compileOptimized(ArrayRef<raw_pwrite_stream *> Out) { return true; } -/// setCodeGenDebugOptions - Set codegen debugging options to aid in debugging -/// LTO problems. -void LTOCodeGenerator::setCodeGenDebugOptions(StringRef Options) { - for (std::pair<StringRef, StringRef> o = getToken(Options); !o.first.empty(); - o = getToken(o.second)) - CodegenOptions.push_back(o.first); +void LTOCodeGenerator::setCodeGenDebugOptions(ArrayRef<const char *> Options) { + for (StringRef Option : Options) + CodegenOptions.push_back(Option); } void LTOCodeGenerator::parseCodeGenDebugOptions() { diff --git a/llvm/tools/lto/lto.cpp b/llvm/tools/lto/lto.cpp index 9ff16e85db4..9933af94de1 100644 --- a/llvm/tools/lto/lto.cpp +++ b/llvm/tools/lto/lto.cpp @@ -13,6 +13,7 @@ #include "llvm-c/lto.h" #include "llvm/ADT/STLExtras.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/Bitcode/BitcodeReader.h" #include "llvm/CodeGen/CommandFlags.inc" #include "llvm/IR/DiagnosticInfo.h" @@ -453,7 +454,17 @@ bool lto_codegen_compile_to_file(lto_code_gen_t cg, const char **name) { } void lto_codegen_debug_options(lto_code_gen_t cg, const char *opt) { - unwrap(cg)->setCodeGenDebugOptions(opt); + std::vector<const char *> Options; + for (std::pair<StringRef, StringRef> o = getToken(opt); !o.first.empty(); + o = getToken(o.second)) + Options.push_back(o.first.data()); + + unwrap(cg)->setCodeGenDebugOptions(Options); +} + +void lto_codegen_debug_options_array(lto_code_gen_t cg, + const char *const *options, int number) { + unwrap(cg)->setCodeGenDebugOptions(makeArrayRef(options, number)); } unsigned int lto_api_version() { return LTO_API_VERSION; } diff --git a/llvm/tools/lto/lto.exports b/llvm/tools/lto/lto.exports index d24809fe762..fd2212cb5f3 100644 --- a/llvm/tools/lto/lto.exports +++ b/llvm/tools/lto/lto.exports @@ -33,6 +33,7 @@ lto_codegen_set_debug_model lto_codegen_set_pic_model lto_codegen_write_merged_modules lto_codegen_debug_options +lto_codegen_debug_options_array lto_codegen_set_assembler_args lto_codegen_set_assembler_path lto_codegen_set_cpu |