Add a disable-output option to the gold plugin.

This corresponds to the opt option and is handy for profiling.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@222687 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Rafael Espindola 2014-11-24 21:18:14 +00:00
parent 7fe9d46f39
commit f1ca1d4bc3
2 changed files with 26 additions and 9 deletions

View File

@ -13,6 +13,12 @@
; RUN: llvm-dis %t3.o.bc -o - | FileCheck %s ; RUN: llvm-dis %t3.o.bc -o - | FileCheck %s
; RUN: llvm-dis %t3.o.opt.bc -o - | FileCheck --check-prefix=OPT %s ; RUN: llvm-dis %t3.o.opt.bc -o - | FileCheck --check-prefix=OPT %s
; RUN: rm -f %t4.o
; RUN: ld -plugin %llvmshlibdir/LLVMgold.so \
; RUN: -m elf_x86_64 --plugin-opt=disable-output \
; RUN: -shared %t.o -o %t4.o
; RUN: not test -a %t4.o
target triple = "x86_64-unknown-linux-gnu" target triple = "x86_64-unknown-linux-gnu"
; CHECK: define internal void @f1() ; CHECK: define internal void @f1()

View File

@ -78,9 +78,14 @@ static std::vector<std::string> Cleanup;
static llvm::TargetOptions TargetOpts; static llvm::TargetOptions TargetOpts;
namespace options { namespace options {
enum generate_bc { BC_NO, BC_ONLY, BC_SAVE_TEMPS }; enum OutputType {
OT_NORMAL,
OT_DISABLE,
OT_BC_ONLY,
OT_SAVE_TEMPS
};
static bool generate_api_file = false; static bool generate_api_file = false;
static generate_bc generate_bc_file = BC_NO; static OutputType TheOutputType = OT_NORMAL;
static std::string obj_path; static std::string obj_path;
static std::string extra_library_path; static std::string extra_library_path;
static std::string triple; static std::string triple;
@ -109,9 +114,11 @@ namespace options {
} else if (opt.startswith("obj-path=")) { } else if (opt.startswith("obj-path=")) {
obj_path = opt.substr(strlen("obj-path=")); obj_path = opt.substr(strlen("obj-path="));
} else if (opt == "emit-llvm") { } else if (opt == "emit-llvm") {
generate_bc_file = BC_ONLY; TheOutputType = OT_BC_ONLY;
} else if (opt == "save-temps") { } else if (opt == "save-temps") {
generate_bc_file = BC_SAVE_TEMPS; TheOutputType = OT_SAVE_TEMPS;
} else if (opt == "disable-output") {
TheOutputType = OT_DISABLE;
} else { } else {
// Save this option to pass to the code generator. // Save this option to pass to the code generator.
// ParseCommandLineOptions() expects argv[0] to be program name. Lazily // ParseCommandLineOptions() expects argv[0] to be program name. Lazily
@ -711,7 +718,7 @@ static void codegen(Module &M) {
runLTOPasses(M, *TM); runLTOPasses(M, *TM);
if (options::generate_bc_file == options::BC_SAVE_TEMPS) if (options::TheOutputType == options::OT_SAVE_TEMPS)
saveBCFile(output_name + ".opt.bc", M); saveBCFile(output_name + ".opt.bc", M);
PassManager CodeGenPasses; PassManager CodeGenPasses;
@ -795,14 +802,17 @@ static ld_plugin_status allSymbolsReadHook(raw_fd_ostream *ApiFile) {
internalize(*GV); internalize(*GV);
} }
if (options::generate_bc_file != options::BC_NO) { if (options::TheOutputType == options::OT_DISABLE)
return LDPS_OK;
if (options::TheOutputType != options::OT_NORMAL) {
std::string path; std::string path;
if (options::generate_bc_file == options::BC_ONLY) if (options::TheOutputType == options::OT_BC_ONLY)
path = output_name; path = output_name;
else else
path = output_name + ".bc"; path = output_name + ".bc";
saveBCFile(path, *L.getModule()); saveBCFile(path, *L.getModule());
if (options::generate_bc_file == options::BC_ONLY) if (options::TheOutputType == options::OT_BC_ONLY)
return LDPS_OK; return LDPS_OK;
} }
@ -828,7 +838,8 @@ static ld_plugin_status all_symbols_read_hook(void) {
Ret = allSymbolsReadHook(&ApiFile); Ret = allSymbolsReadHook(&ApiFile);
} }
if (options::generate_bc_file == options::BC_ONLY) if (options::TheOutputType == options::OT_BC_ONLY ||
options::TheOutputType == options::OT_DISABLE)
exit(0); exit(0);
return Ret; return Ret;