Instcombine: destructor loads of structs that do not contains padding
[oota-llvm.git] / include / llvm / IR / TrackingMDRef.h
index 972ccaa5fe72cc41d99f446405d76477835d9baf..e24112154e1608f60f7649af4fc43a1287b36bff 100644 (file)
@@ -1,4 +1,4 @@
-//===- llvm/IR/TrackingMDRef.h - Tracking Metadata references -------------===//
+//===- llvm/IR/TrackingMDRef.h - Tracking Metadata references ---*- C++ -*-===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -55,7 +55,6 @@ public:
   }
   ~TrackingMDRef() { untrack(); }
 
-  LLVM_EXPLICIT operator bool() const { return get(); }
   Metadata *get() const { return MD; }
   operator Metadata *() const { return get(); }
   Metadata *operator->() const { return get(); }
@@ -78,6 +77,9 @@ public:
     return !MD || !MetadataTracking::isReplaceable(*MD);
   }
 
+  bool operator==(const TrackingMDRef &X) const { return MD == X.MD; }
+  bool operator!=(const TrackingMDRef &X) const { return MD != X.MD; }
+
 private:
   void track() {
     if (MD)
@@ -118,12 +120,14 @@ public:
     return *this;
   }
 
-  LLVM_EXPLICIT operator bool() const { return get(); }
   T *get() const { return (T *)Ref.get(); }
   operator T *() const { return get(); }
   T *operator->() const { return get(); }
   T &operator*() const { return *get(); }
 
+  bool operator==(const TypedTrackingMDRef &X) const { return Ref == X.Ref; }
+  bool operator!=(const TypedTrackingMDRef &X) const { return Ref != X.Ref; }
+
   void reset() { Ref.reset(); }
   void reset(T *MD) { Ref.reset(static_cast<Metadata *>(MD)); }