X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=tools%2Fverify-uselistorder%2Fverify-uselistorder.cpp;h=c3fec1326acb0d4000319e8df9438447139d918c;hb=d0f8afa9b6d5bc8697c56f1b909cfce0e30eec9e;hp=09931587470151e5f4f65bf28b2a94fd36ae93c6;hpb=4e5fdbfc61a1fb4efd5e9eb0e208e1bde91f9853;p=oota-llvm.git diff --git a/tools/verify-uselistorder/verify-uselistorder.cpp b/tools/verify-uselistorder/verify-uselistorder.cpp index 09931587470..c3fec1326ac 100644 --- a/tools/verify-uselistorder/verify-uselistorder.cpp +++ b/tools/verify-uselistorder/verify-uselistorder.cpp @@ -53,7 +53,7 @@ using namespace llvm; -#define DEBUG_TYPE "use-list-order" +#define DEBUG_TYPE "uselistorder" static cl::opt InputFilename(cl::Positional, cl::desc(""), @@ -109,16 +109,16 @@ struct ValueMapping { bool TempFile::init(const std::string &Ext) { SmallVector Vector; DEBUG(dbgs() << " - create-temp-file\n"); - if (auto EC = sys::fs::createTemporaryFile("use-list-order", Ext, Vector)) { - (void)EC; - DEBUG(dbgs() << "error: " << EC.message() << "\n"); + if (auto EC = sys::fs::createTemporaryFile("uselistorder", Ext, Vector)) { + errs() << "verify-uselistorder: error: " << EC.message() << "\n"; return true; } assert(!Vector.empty()); Filename.assign(Vector.data(), Vector.data() + Vector.size()); Remover.setFile(Filename, !SaveTemps); - DEBUG(dbgs() << " - filename = " << Filename << "\n"); + if (SaveTemps) + outs() << " - filename = " << Filename << "\n"; return false; } @@ -127,11 +127,11 @@ bool TempFile::writeBitcode(const Module &M) const { std::error_code EC; raw_fd_ostream OS(Filename, EC, sys::fs::F_None); if (EC) { - DEBUG(dbgs() << "error: " << EC.message() << "\n"); + errs() << "verify-uselistorder: error: " << EC.message() << "\n"; return true; } - WriteBitcodeToFile(&M, OS); + WriteBitcodeToFile(&M, OS, /* ShouldPreserveUseListOrder */ true); return false; } @@ -140,11 +140,11 @@ bool TempFile::writeAssembly(const Module &M) const { std::error_code EC; raw_fd_ostream OS(Filename, EC, sys::fs::F_Text); if (EC) { - DEBUG(dbgs() << "error: " << EC.message() << "\n"); + errs() << "verify-uselistorder: error: " << EC.message() << "\n"; return true; } - OS << M; + M.print(OS, nullptr, /* ShouldPreserveUseListOrder */ true); return false; } @@ -153,18 +153,20 @@ std::unique_ptr TempFile::readBitcode(LLVMContext &Context) const { ErrorOr> BufferOr = MemoryBuffer::getFile(Filename); if (!BufferOr) { - DEBUG(dbgs() << "error: " << BufferOr.getError().message() << "\n"); + errs() << "verify-uselistorder: error: " << BufferOr.getError().message() + << "\n"; return nullptr; } MemoryBuffer *Buffer = BufferOr.get().get(); - ErrorOr ModuleOr = + ErrorOr> ModuleOr = parseBitcodeFile(Buffer->getMemBufferRef(), Context); if (!ModuleOr) { - DEBUG(dbgs() << "error: " << ModuleOr.getError().message() << "\n"); + errs() << "verify-uselistorder: error: " << ModuleOr.getError().message() + << "\n"; return nullptr; } - return std::unique_ptr(ModuleOr.get()); + return std::move(ModuleOr.get()); } std::unique_ptr TempFile::readAssembly(LLVMContext &Context) const { @@ -172,7 +174,7 @@ std::unique_ptr TempFile::readAssembly(LLVMContext &Context) const { SMDiagnostic Err; std::unique_ptr M = parseAssemblyFile(Filename, Err, Context); if (!M.get()) - DEBUG(dbgs() << "error: "; Err.print("verify-use-list-order", dbgs())); + Err.print("verify-uselistorder", errs()); return M; } @@ -203,6 +205,8 @@ ValueMapping::ValueMapping(const Module &M) { map(F.getPrefixData()); if (F.hasPrologueData()) map(F.getPrologueData()); + if (F.hasPersonalityFn()) + map(F.getPersonalityFn()); } // Function bodies. @@ -342,8 +346,8 @@ static void verifyAfterRoundTrip(const Module &M, if (!matches(ValueMapping(M), ValueMapping(*OtherM))) report_fatal_error("use-list order changed"); } + static void verifyBitcodeUseListOrder(const Module &M) { - errs() << "*** verify-use-list-order: bitcode ***\n"; TempFile F; if (F.init("bc")) report_fatal_error("failed to initialize bitcode file"); @@ -356,7 +360,6 @@ static void verifyBitcodeUseListOrder(const Module &M) { } static void verifyAssemblyUseListOrder(const Module &M) { - errs() << "*** verify-use-list-order: assembly ***\n"; TempFile F; if (F.init("ll")) report_fatal_error("failed to initialize assembly file"); @@ -369,7 +372,9 @@ static void verifyAssemblyUseListOrder(const Module &M) { } static void verifyUseListOrder(const Module &M) { + outs() << "verify bitcode\n"; verifyBitcodeUseListOrder(M); + outs() << "verify assembly\n"; verifyAssemblyUseListOrder(M); } @@ -472,6 +477,8 @@ static void changeUseLists(Module &M, Changer changeValueUseList) { changeValueUseList(F.getPrefixData()); if (F.hasPrologueData()) changeValueUseList(F.getPrologueData()); + if (F.hasPersonalityFn()) + changeValueUseList(F.getPersonalityFn()); } // Function bodies. @@ -498,7 +505,6 @@ static void changeUseLists(Module &M, Changer changeValueUseList) { } static void shuffleUseLists(Module &M, unsigned SeedOffset) { - errs() << "*** shuffle-use-lists ***\n"; std::minstd_rand0 Gen(std::minstd_rand0::default_seed + SeedOffset); DenseSet Seen; changeUseLists(M, [&](Value *V) { shuffleValueUseLists(V, Gen, Seen); }); @@ -506,7 +512,6 @@ static void shuffleUseLists(Module &M, unsigned SeedOffset) { } static void reverseUseLists(Module &M) { - errs() << "*** reverse-use-lists ***\n"; DenseSet Seen; changeUseLists(M, [&](Value *V) { reverseValueUseLists(V, Seen); }); DEBUG(dbgs() << "\n"); @@ -540,30 +545,23 @@ int main(int argc, char **argv) { return 1; } - errs() << "*** verify-use-list-order ***\n"; - // Can't verify if order isn't preserved. - if (!shouldPreserveBitcodeUseListOrder()) { - errs() << "warning: forcing -preserve-bc-use-list-order\n"; - setPreserveBitcodeUseListOrder(true); - } - if (!shouldPreserveAssemblyUseListOrder()) { - errs() << "warning: forcing -preserve-ll-use-list-order\n"; - setPreserveAssemblyUseListOrder(true); - } - // Verify the use lists now and after reversing them. + outs() << "*** verify-uselistorder ***\n"; verifyUseListOrder(*M); + outs() << "reverse\n"; reverseUseLists(*M); verifyUseListOrder(*M); for (unsigned I = 0, E = NumShuffles; I != E; ++I) { - errs() << "*** shuffle iteration: " << I + 1 << " of " << E << " ***\n"; + outs() << "\n"; // Shuffle with a different (deterministic) seed each time. + outs() << "shuffle (" << I + 1 << " of " << E << ")\n"; shuffleUseLists(*M, I); // Verify again before and after reversing. verifyUseListOrder(*M); + outs() << "reverse\n"; reverseUseLists(*M); verifyUseListOrder(*M); }