diff options
author | Igor Laevsky <igmyrj@gmail.com> | 2017-11-10 12:19:08 +0000 |
---|---|---|
committer | Igor Laevsky <igmyrj@gmail.com> | 2017-11-10 12:19:08 +0000 |
commit | 13cc995c3d7ce55326f255718ee1f09fb4ca8bbb (patch) | |
tree | 8047b05e438bbd44e39a3dfe4abe3ed8d8702df4 /llvm/lib/FuzzMutate | |
parent | 7ca61e31acf2107cf7cdf1782b7a1becd7c95701 (diff) | |
download | bcm5719-llvm-13cc995c3d7ce55326f255718ee1f09fb4ca8bbb.tar.gz bcm5719-llvm-13cc995c3d7ce55326f255718ee1f09fb4ca8bbb.zip |
[llvm-opt-fuzzer] Introduce llvm-opt-fuzzer for fuzzing optimization passes
This change adds generic fuzzing tools capable of running libFuzzer tests on
any optimization pass or combination of them.
Differential Revision: https://reviews.llvm.org/D39555
llvm-svn: 317883
Diffstat (limited to 'llvm/lib/FuzzMutate')
-rw-r--r-- | llvm/lib/FuzzMutate/FuzzerCLI.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/llvm/lib/FuzzMutate/FuzzerCLI.cpp b/llvm/lib/FuzzMutate/FuzzerCLI.cpp index ef6958efa0b..906f7af393f 100644 --- a/llvm/lib/FuzzMutate/FuzzerCLI.cpp +++ b/llvm/lib/FuzzMutate/FuzzerCLI.cpp @@ -67,6 +67,40 @@ void llvm::handleExecNameEncodedBEOpts(StringRef ExecName) { cl::ParseCommandLineOptions(CLArgs.size(), CLArgs.data()); } +void llvm::handleExecNameEncodedOptimizerOpts(StringRef ExecName) { + // TODO: Refactor parts common with the 'handleExecNameEncodedBEOpts' + std::vector<std::string> Args{ExecName}; + + auto NameAndArgs = ExecName.split("--"); + if (NameAndArgs.second.empty()) + return; + + SmallVector<StringRef, 4> Opts; + NameAndArgs.second.split(Opts, '-'); + for (StringRef Opt : Opts) { + if (Opt.startswith("instcombine")) { + Args.push_back("-passes=instcombine"); + } else if (Triple(Opt).getArch()) { + Args.push_back("-mtriple=" + Opt.str()); + } else { + errs() << ExecName << ": Unknown option: " << Opt << ".\n"; + exit(1); + } + } + + errs() << NameAndArgs.first << ": Injected args:"; + for (int I = 1, E = Args.size(); I < E; ++I) + errs() << " " << Args[I]; + errs() << "\n"; + + std::vector<const char *> CLArgs; + CLArgs.reserve(Args.size()); + for (std::string &S : Args) + CLArgs.push_back(S.c_str()); + + cl::ParseCommandLineOptions(CLArgs.size(), CLArgs.data()); +} + int llvm::runFuzzerOnInputs(int ArgC, char *ArgV[], FuzzerTestFun TestOne, FuzzerInitFun Init) { errs() << "*** This tool was not linked to libFuzzer.\n" |