diff --git a/llvm/tools/llvm-reduce/deltas/Delta.cpp b/llvm/tools/llvm-reduce/deltas/Delta.cpp --- a/llvm/tools/llvm-reduce/deltas/Delta.cpp +++ b/llvm/tools/llvm-reduce/deltas/Delta.cpp @@ -40,6 +40,11 @@ "disables parallelism. Maximum capped to 32."), cl::init(1)); +static cl::opt TmpFilesAsBitcode( + "write-tmp-files-as-bitcode", + cl::desc("Write temporary files as bitcode, instead of textual IR"), + cl::init(false)); + void writeOutput(ReducerWorkItem &M, llvm::StringRef Message); bool isReduced(ReducerWorkItem &M, TestRunner &Test, @@ -47,12 +52,26 @@ // Write ReducerWorkItem to tmp file int FD; std::error_code EC = sys::fs::createTemporaryFile( - "llvm-reduce", M.isMIR() ? "mir" : "ll", FD, CurrentFilepath); + "llvm-reduce", M.isMIR() ? "mir" : (TmpFilesAsBitcode ? "bc" : "ll"), FD, + CurrentFilepath); if (EC) { errs() << "Error making unique filename: " << EC.message() << "!\n"; exit(1); } + if (TmpFilesAsBitcode) { + llvm::raw_fd_ostream OutStream(FD, true); + WriteBitcodeToFile(M, OutStream); + OutStream.close(); + if (OutStream.has_error()) { + errs() << "Error emitting bitcode to file '" << CurrentFilepath << "'!\n"; + sys::fs::remove(CurrentFilepath); + exit(1); + } + bool Res = Test.run(CurrentFilepath); + sys::fs::remove(CurrentFilepath); + return Res; + } ToolOutputFile Out(CurrentFilepath, FD); M.print(Out.os(), /*AnnotationWriter=*/nullptr); Out.os().close();