1 //===- VerifyUseListOrder.cpp - Use List Order Verifier ---------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 // Pass to verify use-list order doesn't change after serialization.
12 // Despite it being a verifier, this pass *does* transform the module, since it
13 // shuffles the use-list of every value.
15 //===----------------------------------------------------------------------===//
17 #include "llvm/Transforms/IPO.h"
18 #include "llvm/IR/UseListOrder.h"
19 #include "llvm/Pass.h"
20 #include "llvm/Support/Debug.h"
21 #include "llvm/Support/ErrorHandling.h"
25 #define DEBUG_TYPE "use-list-order"
28 class VerifyUseListOrder : public ModulePass {
32 bool runOnModule(Module &M) override;
34 } // end anonymous namespace
36 char VerifyUseListOrder::ID = 0;
37 INITIALIZE_PASS(VerifyUseListOrder, "verify-use-list-order",
38 "Verify Use List Order", false, false)
39 VerifyUseListOrder::VerifyUseListOrder() : ModulePass(ID) {
40 initializeVerifyUseListOrderPass(*PassRegistry::getPassRegistry());
43 bool VerifyUseListOrder::runOnModule(Module &M) {
44 DEBUG(dbgs() << "*** verify-use-list-order ***\n");
45 if (!shouldPreserveBitcodeUseListOrder()) {
46 // Can't verify if order isn't preserved.
47 DEBUG(dbgs() << "warning: cannot verify bitcode; "
48 "try -preserve-bc-use-list-order\n");
53 if (!verifyBitcodeUseListOrder(M))
54 report_fatal_error("bitcode use-list order changed");
59 ModulePass *llvm::createVerifyUseListOrderPass() {
60 return new VerifyUseListOrder;