Taints the non-acquire RMW's store address with the load part
[oota-llvm.git] / include / llvm / Support / RegistryParser.h
1 //=== RegistryParser.h - Linker-supported plugin registries -----*- C++ -*-===//
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 // Defines a command-line parser for a registry.
11 //
12 //===----------------------------------------------------------------------===//
13
14 #ifndef LLVM_SUPPORT_REGISTRYPARSER_H
15 #define LLVM_SUPPORT_REGISTRYPARSER_H
16
17 #include "llvm/Support/CommandLine.h"
18 #include "llvm/Support/Registry.h"
19
20 namespace llvm {
21
22   /// A command-line parser for a registry. Use like such:
23   ///
24   ///   static cl::opt<Registry<Collector>::entry, false,
25   ///                  RegistryParser<Collector> >
26   ///   GCOpt("gc", cl::desc("Garbage collector to use."),
27   ///               cl::value_desc());
28   ///
29   /// To make use of the value:
30   ///
31   ///   Collector *TheCollector = GCOpt->instantiate();
32   ///
33   template <typename T, typename U = RegistryTraits<T> >
34   class RegistryParser :
35   public cl::parser<const typename U::entry*>,
36     public Registry<T, U>::listener {
37     typedef U traits;
38     typedef typename U::entry entry;
39     typedef typename Registry<T, U>::listener listener;
40
41   protected:
42     void registered(const entry &E) {
43       addLiteralOption(traits::nameof(E), &E, traits::descof(E));
44     }
45
46   public:
47     void initialize(cl::Option &O) {
48       listener::init();
49       cl::parser<const typename U::entry*>::initialize(O);
50     }
51   };
52
53 }
54
55 #endif // LLVM_SUPPORT_REGISTRYPARSER_H