|
1 |
| -//===- VerifyUseListOrder.cpp - Use List Order Verifier ---------*- C++ -*-===// |
| 1 | +//===- opt.cpp - The LLVM Modular Optimizer -------------------------------===// |
2 | 2 | //
|
3 | 3 | // The LLVM Compiler Infrastructure
|
4 | 4 | //
|
|
7 | 7 | //
|
8 | 8 | //===----------------------------------------------------------------------===//
|
9 | 9 | //
|
10 |
| -// Pass to verify use-list order doesn't change after serialization. |
11 |
| -// |
12 |
| -// Despite it being a verifier, this pass *does* transform the module, since it |
13 |
| -// shuffles the use-list of every value. |
| 10 | +// Optimizations may be specified an arbitrary number of times on the command |
| 11 | +// line, They are run in the order specified. |
14 | 12 | //
|
15 | 13 | //===----------------------------------------------------------------------===//
|
16 | 14 |
|
17 |
| -#include "llvm/Transforms/IPO.h" |
18 |
| - |
19 | 15 | #include "llvm/ADT/DenseMap.h"
|
20 | 16 | #include "llvm/AsmParser/Parser.h"
|
21 | 17 | #include "llvm/Bitcode/ReaderWriter.h"
|
22 | 18 | #include "llvm/IR/LLVMContext.h"
|
23 | 19 | #include "llvm/IR/Module.h"
|
24 | 20 | #include "llvm/IR/UseListOrder.h"
|
25 |
| -#include "llvm/Pass.h" |
| 21 | +#include "llvm/IRReader/IRReader.h" |
| 22 | +#include "llvm/Support/CommandLine.h" |
26 | 23 | #include "llvm/Support/Debug.h"
|
27 | 24 | #include "llvm/Support/ErrorHandling.h"
|
28 | 25 | #include "llvm/Support/FileSystem.h"
|
29 | 26 | #include "llvm/Support/FileUtilities.h"
|
| 27 | +#include "llvm/Support/ManagedStatic.h" |
30 | 28 | #include "llvm/Support/MemoryBuffer.h"
|
| 29 | +#include "llvm/Support/PrettyStackTrace.h" |
| 30 | +#include "llvm/Support/Signals.h" |
31 | 31 | #include "llvm/Support/SourceMgr.h"
|
| 32 | +#include "llvm/Support/SystemUtils.h" |
32 | 33 |
|
33 | 34 | using namespace llvm;
|
34 | 35 |
|
35 | 36 | #define DEBUG_TYPE "use-list-order"
|
36 | 37 |
|
| 38 | +static cl::opt<std::string> InputFilename(cl::Positional, |
| 39 | + cl::desc("<input bitcode file>"), |
| 40 | + cl::init("-"), |
| 41 | + cl::value_desc("filename")); |
| 42 | + |
37 | 43 | namespace {
|
38 | 44 |
|
39 | 45 | struct TempFile {
|
@@ -329,42 +335,45 @@ static bool verifyAssemblyUseListOrder(const Module &M) {
|
329 | 335 | return matches(ValueMapping(M), ValueMapping(*OtherM));
|
330 | 336 | }
|
331 | 337 |
|
332 |
| -namespace { |
333 |
| -class VerifyUseListOrder : public ModulePass { |
334 |
| -public: |
335 |
| - static char ID; |
336 |
| - VerifyUseListOrder(); |
337 |
| - bool runOnModule(Module &M) override; |
338 |
| -}; |
339 |
| -} // end anonymous namespace |
| 338 | +int main(int argc, char **argv) { |
| 339 | + sys::PrintStackTraceOnErrorSignal(); |
| 340 | + llvm::PrettyStackTraceProgram X(argc, argv); |
340 | 341 |
|
341 |
| -char VerifyUseListOrder::ID = 0; |
342 |
| -INITIALIZE_PASS(VerifyUseListOrder, "verify-use-list-order", |
343 |
| - "Verify Use List Order", false, false) |
344 |
| -VerifyUseListOrder::VerifyUseListOrder() : ModulePass(ID) { |
345 |
| - initializeVerifyUseListOrderPass(*PassRegistry::getPassRegistry()); |
346 |
| -} |
| 342 | + // Enable debug stream buffering. |
| 343 | + EnableDebugBuffering = true; |
| 344 | + |
| 345 | + llvm_shutdown_obj Y; // Call llvm_shutdown() on exit. |
| 346 | + LLVMContext &Context = getGlobalContext(); |
| 347 | + |
| 348 | + cl::ParseCommandLineOptions(argc, argv, |
| 349 | + "llvm tool to verify use-list order\n"); |
| 350 | + |
| 351 | + SMDiagnostic Err; |
| 352 | + |
| 353 | + // Load the input module... |
| 354 | + std::unique_ptr<Module> M; |
| 355 | + M.reset(ParseIRFile(InputFilename, Err, Context)); |
| 356 | + |
| 357 | + if (!M.get()) { |
| 358 | + Err.print(argv[0], errs()); |
| 359 | + return 1; |
| 360 | + } |
347 | 361 |
|
348 |
| -bool VerifyUseListOrder::runOnModule(Module &M) { |
349 | 362 | DEBUG(dbgs() << "*** verify-use-list-order ***\n");
|
350 | 363 | if (!shouldPreserveBitcodeUseListOrder()) {
|
351 | 364 | // Can't verify if order isn't preserved.
|
352 | 365 | DEBUG(dbgs() << "warning: cannot verify bitcode; "
|
353 | 366 | "try -preserve-bc-use-list-order\n");
|
354 |
| - return false; |
| 367 | + return 0; |
355 | 368 | }
|
356 | 369 |
|
357 |
| - shuffleUseLists(M); |
358 |
| - if (!verifyBitcodeUseListOrder(M)) |
| 370 | + shuffleUseLists(*M); |
| 371 | + if (!verifyBitcodeUseListOrder(*M)) |
359 | 372 | report_fatal_error("bitcode use-list order changed");
|
360 | 373 |
|
361 | 374 | if (shouldPreserveBitcodeUseListOrder())
|
362 |
| - if (!verifyAssemblyUseListOrder(M)) |
| 375 | + if (!verifyAssemblyUseListOrder(*M)) |
363 | 376 | report_fatal_error("assembly use-list order changed");
|
364 | 377 |
|
365 |
| - return true; |
366 |
| -} |
367 |
| - |
368 |
| -ModulePass *llvm::createVerifyUseListOrderPass() { |
369 |
| - return new VerifyUseListOrder; |
| 378 | + return 0; |
370 | 379 | }
|
0 commit comments