uselistorder: Pull the bit through WriteToBitcodFile()

Change the callers of `WriteToBitcodeFile()` to pass `true` or
`shouldPreserveBitcodeUseListOrder()` explicitly.  I left the callers
that want to send `false` alone.

I'll keep pushing the bit higher until hopefully I can delete the global
`cl::opt` entirely.

llvm-svn: 234957
This commit is contained in:
Duncan P. N. Exon Smith 2015-04-15 00:10:50 +00:00
parent 94762eaaad
commit b222408637
9 changed files with 31 additions and 23 deletions

View File

@ -56,11 +56,16 @@ namespace llvm {
parseBitcodeFile(MemoryBufferRef Buffer, LLVMContext &Context,
DiagnosticHandlerFunction DiagnosticHandler = nullptr);
/// WriteBitcodeToFile - Write the specified module to the specified
/// raw output stream. For streams where it matters, the given stream
/// should be in "binary" mode.
void WriteBitcodeToFile(const Module *M, raw_ostream &Out);
/// \brief Write the specified module to the specified raw output stream.
///
/// For streams where it matters, the given stream should be in "binary"
/// mode.
///
/// If \c ShouldPreserveUseListOrder, encode the use-list order for each \a
/// Value in \c M. These will be reconstructed exactly when \a M is
/// deserialized.
void WriteBitcodeToFile(const Module *M, raw_ostream &Out,
bool ShouldPreserveUseListOrder = false);
/// isBitcodeWrapper - Return true if the given bytes are the magic bytes
/// for an LLVM IR bitcode wrapper.

View File

@ -2312,7 +2312,8 @@ static void WriteBlockInfo(const ValueEnumerator &VE, BitstreamWriter &Stream) {
}
/// WriteModule - Emit the specified module to the bitstream.
static void WriteModule(const Module *M, BitstreamWriter &Stream) {
static void WriteModule(const Module *M, BitstreamWriter &Stream,
bool ShouldPreserveUseListOrder) {
Stream.EnterSubblock(bitc::MODULE_BLOCK_ID, 3);
SmallVector<unsigned, 1> Vals;
@ -2321,7 +2322,7 @@ static void WriteModule(const Module *M, BitstreamWriter &Stream) {
Stream.EmitRecord(bitc::MODULE_CODE_VERSION, Vals);
// Analyze the module, enumerating globals, functions, etc.
ValueEnumerator VE(*M, shouldPreserveBitcodeUseListOrder());
ValueEnumerator VE(*M, ShouldPreserveUseListOrder);
// Emit blockinfo, which defines the standard abbreviations etc.
WriteBlockInfo(VE, Stream);
@ -2440,7 +2441,8 @@ static void EmitDarwinBCHeaderAndTrailer(SmallVectorImpl<char> &Buffer,
/// WriteBitcodeToFile - Write the specified module to the specified output
/// stream.
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out,
bool ShouldPreserveUseListOrder) {
SmallVector<char, 0> Buffer;
Buffer.reserve(256*1024);
@ -2463,7 +2465,7 @@ void llvm::WriteBitcodeToFile(const Module *M, raw_ostream &Out) {
Stream.Emit(0xD, 4);
// Emit the module.
WriteModule(M, Stream);
WriteModule(M, Stream, ShouldPreserveUseListOrder);
}
if (TT.isOSDarwin())

View File

@ -15,11 +15,12 @@
#include "llvm/Bitcode/ReaderWriter.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/PassManager.h"
#include "llvm/IR/UseListOrder.h"
#include "llvm/Pass.h"
using namespace llvm;
PreservedAnalyses BitcodeWriterPass::run(Module &M) {
WriteBitcodeToFile(&M, OS);
WriteBitcodeToFile(&M, OS, shouldPreserveBitcodeUseListOrder());
return PreservedAnalyses::all();
}
@ -34,7 +35,7 @@ namespace {
const char *getPassName() const override { return "Bitcode Writer"; }
bool runOnModule(Module &M) override {
WriteBitcodeToFile(&M, OS);
WriteBitcodeToFile(&M, OS, shouldPreserveBitcodeUseListOrder());
return false;
}
};

View File

@ -215,7 +215,8 @@ bool LTOCodeGenerator::writeMergedModules(const char *path,
}
// write bitcode to it
WriteBitcodeToFile(IRLinker.getModule(), Out.os());
WriteBitcodeToFile(IRLinker.getModule(), Out.os(),
shouldPreserveBitcodeUseListOrder());
Out.os().close();
if (Out.os().has_error()) {

View File

@ -20,6 +20,7 @@
#include "llvm/IR/DataLayout.h"
#include "llvm/IR/LegacyPassManager.h"
#include "llvm/IR/Module.h"
#include "llvm/IR/UseListOrder.h"
#include "llvm/IR/Verifier.h"
#include "llvm/Support/CommandLine.h"
#include "llvm/Support/Debug.h"
@ -55,7 +56,7 @@ namespace {
/// file. If an error occurs, true is returned.
///
static bool writeProgramToFileAux(tool_output_file &Out, const Module *M) {
WriteBitcodeToFile(M, Out.os());
WriteBitcodeToFile(M, Out.os(), shouldPreserveBitcodeUseListOrder());
Out.os().close();
if (!Out.os().has_error()) {
Out.keep();
@ -151,7 +152,7 @@ bool BugDriver::runPasses(Module *Program,
tool_output_file InFile(InputFilename, InputFD);
WriteBitcodeToFile(Program, InFile.os());
WriteBitcodeToFile(Program, InFile.os(), shouldPreserveBitcodeUseListOrder());
InFile.os().close();
if (InFile.os().has_error()) {
errs() << "Error writing bitcode file: " << InputFilename << "\n";

View File

@ -734,12 +734,13 @@ static void runLTOPasses(Module &M, TargetMachine &TM) {
passes.run(M);
}
static void saveBCFile(StringRef Path, Module &M) {
static void saveBCFile(StringRef Path, Module &M,
bool ShouldPreserveUseListOrder) {
std::error_code EC;
raw_fd_ostream OS(Path, EC, sys::fs::OpenFlags::F_None);
if (EC)
message(LDPL_FATAL, "Failed to write the output file.");
WriteBitcodeToFile(&M, OS);
WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true);
}
static void codegen(Module &M) {

View File

@ -79,7 +79,7 @@ static void WriteOutputFile(const Module *M) {
}
if (Force || !CheckBitcodeOutputToConsole(Out->os(), true))
WriteBitcodeToFile(M, Out->os());
WriteBitcodeToFile(M, Out->os(), shouldPreserveBitcodeUseListOrder());
// Declare success.
Out->keep();

View File

@ -152,7 +152,8 @@ int main(int argc, char **argv) {
if (OutputAssembly) {
Out.os() << *Composite;
} else if (Force || !CheckBitcodeOutputToConsole(Out.os(), true))
WriteBitcodeToFile(Composite.get(), Out.os());
WriteBitcodeToFile(Composite.get(), Out.os(),
shouldPreserveBitcodeUseListOrder());
// Declare success.
Out.keep();

View File

@ -131,7 +131,7 @@ bool TempFile::writeBitcode(const Module &M) const {
return true;
}
WriteBitcodeToFile(&M, OS);
WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true);
return false;
}
@ -542,10 +542,6 @@ int main(int argc, char **argv) {
outs() << "*** verify-uselistorder ***\n";
// Can't verify if order isn't preserved.
if (!shouldPreserveBitcodeUseListOrder()) {
errs() << "warning: forcing -preserve-bc-uselistorder\n";
setPreserveBitcodeUseListOrder(true);
}
if (!shouldPreserveAssemblyUseListOrder()) {
errs() << "warning: forcing -preserve-ll-uselistorder\n";
setPreserveAssemblyUseListOrder(true);