
The current testcase I'm trying to reduce only reproduces with IPRA enabled and requires handling multiple functions. The only real difference vs. the IR is the extra indirect to look for the underlying MachineFunction, so treat the ReduceWorkItem as the module instead of the function. The ugliest piece of this is really the ugliness of MachineModuleInfo. It not only tracks actual module state, but has a number of transient fields used for isel and/or the asm printer. These shouldn't do any harm for the use here, though they should be separated out.
48 lines
1.6 KiB
C++
48 lines
1.6 KiB
C++
//===-- 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;
|
|
|
|
TestRunner::TestRunner(StringRef TestName,
|
|
const std::vector<std::string> &TestArgs,
|
|
std::unique_ptr<ReducerWorkItem> Program,
|
|
std::unique_ptr<TargetMachine> TM)
|
|
: TestName(TestName), TestArgs(TestArgs), Program(std::move(Program)),
|
|
TM(std::move(TM)) {
|
|
assert(this->Program && "Initialized with null program?");
|
|
}
|
|
|
|
/// 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);
|
|
|
|
for (const auto &Arg : TestArgs)
|
|
ProgramArgs.push_back(Arg);
|
|
|
|
ProgramArgs.push_back(Filename);
|
|
|
|
std::string ErrMsg;
|
|
int Result = sys::ExecuteAndWait(
|
|
TestName, ProgramArgs, /*Env=*/None, /*Redirects=*/None,
|
|
/*SecondsToWait=*/0, /*MemoryLimit=*/0, &ErrMsg);
|
|
|
|
if (Result < 0) {
|
|
Error E = make_error<StringError>("Error running interesting-ness test: " +
|
|
ErrMsg,
|
|
inconvertibleErrorCode());
|
|
errs() << toString(std::move(E));
|
|
exit(1);
|
|
}
|
|
|
|
return !Result;
|
|
}
|