Home | History | Annotate | Download | only in IPO
      1 //===- BarrierNoopPass.cpp - A barrier pass for the pass manager ----------===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 //
     10 // NOTE: DO NOT USE THIS IF AVOIDABLE
     11 //
     12 // This pass is a nonce pass intended to allow manipulation of the implicitly
     13 // nesting pass manager. For example, it can be used to cause a CGSCC pass
     14 // manager to be closed prior to running a new collection of function passes.
     15 //
     16 // FIXME: This is a huge HACK. This should be removed when the pass manager's
     17 // nesting is made explicit instead of implicit.
     18 //
     19 //===----------------------------------------------------------------------===//
     20 
     21 #include "llvm/Pass.h"
     22 #include "llvm/Transforms/IPO.h"
     23 using namespace llvm;
     24 
     25 namespace {
     26 /// \brief A nonce module pass used to place a barrier in a pass manager.
     27 ///
     28 /// There is no mechanism for ending a CGSCC pass manager once one is started.
     29 /// This prevents extension points from having clear deterministic ordering
     30 /// when they are phrased as non-module passes.
     31 class BarrierNoop : public ModulePass {
     32 public:
     33   static char ID; // Pass identification.
     34 
     35   BarrierNoop() : ModulePass(ID) {
     36     initializeBarrierNoopPass(*PassRegistry::getPassRegistry());
     37   }
     38 
     39   bool runOnModule(Module &M) override { return false; }
     40 };
     41 }
     42 
     43 ModulePass *llvm::createBarrierNoopPass() { return new BarrierNoop(); }
     44 
     45 char BarrierNoop::ID = 0;
     46 INITIALIZE_PASS(BarrierNoop, "barrier", "A No-Op Barrier Pass",
     47                 false, false)
     48