diff options
author | Diego Trevino Ferrer <diegof30@gmail.com> | 2019-08-08 22:16:33 +0000 |
---|---|---|
committer | Diego Trevino Ferrer <diegof30@gmail.com> | 2019-08-08 22:16:33 +0000 |
commit | ddc64eb948c7e71039325f21bc4e1cc763494da5 (patch) | |
tree | dbe0cd9c324b0fbad0c464911ee0ec74057a9873 /llvm/tools/llvm-reduce/TestRunner.cpp | |
parent | bb17e46644bbebdc665ccdee941aab48a9ee0bd4 (diff) | |
download | bcm5719-llvm-ddc64eb948c7e71039325f21bc4e1cc763494da5.tar.gz bcm5719-llvm-ddc64eb948c7e71039325f21bc4e1cc763494da5.zip |
Added Delta IR Reduction Tool
Summary: Tool parses input IR file, and runs the delta debugging algorithm to reduce the functions inside the input file.
Reviewers: alexshap, chandlerc
Subscribers: mgorny, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63672
> llvm-svn: 368071
llvm-svn: 368358
Diffstat (limited to 'llvm/tools/llvm-reduce/TestRunner.cpp')
-rw-r--r-- | llvm/tools/llvm-reduce/TestRunner.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/llvm/tools/llvm-reduce/TestRunner.cpp b/llvm/tools/llvm-reduce/TestRunner.cpp new file mode 100644 index 00000000000..09548a63e69 --- /dev/null +++ b/llvm/tools/llvm-reduce/TestRunner.cpp @@ -0,0 +1,57 @@ +//===-- TestRunner.cpp ----------------------------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#include "TestRunner.h" + +using namespace llvm; + +/// Gets Current Working Directory and tries to create a Tmp Directory +static SmallString<128> initializeTmpDirectory() { + SmallString<128> CWD; + if (std::error_code EC = sys::fs::current_path(CWD)) { + errs() << "Error getting current directory: " << EC.message() << "!\n"; + exit(1); + } + + SmallString<128> TmpDirectory; + sys::path::append(TmpDirectory, CWD, "tmp"); + if (std::error_code EC = sys::fs::create_directory(TmpDirectory)) + errs() << "Error creating tmp directory: " << EC.message() << "!\n"; + + return TmpDirectory; +} + +TestRunner::TestRunner(StringRef TestName, std::vector<std::string> TestArgs, + StringRef ReducedFilepath) + : TestName(TestName), TestArgs(std::move(TestArgs)), + ReducedFilepath(ReducedFilepath) { + TmpDirectory = initializeTmpDirectory(); +} + +/// Runs the interestingness test, passes file to be tested as first argument +/// and other specified test arguments after that. +int TestRunner::run(StringRef Filename) { + std::vector<StringRef> ProgramArgs; + ProgramArgs.push_back(TestName); + ProgramArgs.push_back(Filename); + + for (auto Arg : TestArgs) + ProgramArgs.push_back(Arg.c_str()); + + Optional<StringRef> Redirects[3]; // STDIN, STDOUT, STDERR + int Result = sys::ExecuteAndWait(TestName, ProgramArgs, None, Redirects); + + if (Result < 0) { + Error E = make_error<StringError>("Error running interesting-ness test\n", + inconvertibleErrorCode()); + outs() << toString(std::move(E)); + exit(1); + } + + return !Result; +} |