Add some functionality to the IntrinsicInst class and some comments
authorChris Lattner <sabre@nondot.org>
Fri, 13 Jan 2006 19:49:02 +0000 (19:49 +0000)
committerChris Lattner <sabre@nondot.org>
Fri, 13 Jan 2006 19:49:02 +0000 (19:49 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25289 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/IntrinsicInst.h

index 2b26ad52154cca40b331d7b4ac558ab03cc306bd..90b3761a09ba8f82063553115727353cc335c1a3 100644 (file)
@@ -30,6 +30,9 @@
 #include "llvm/Intrinsics.h"
 
 namespace llvm {
+  /// IntrinsicInst - A useful wrapper class for inspecting calls to intrinsic
+  /// functions.  This allows the standard isa/dyncast/cast functionality to
+  /// work with calls to intrinsic functions.
   class IntrinsicInst : public CallInst {
     IntrinsicInst();                      // DO NOT IMPLEMENT
     IntrinsicInst(const IntrinsicInst&);  // DO NOT IMPLEMENT
@@ -40,6 +43,23 @@ namespace llvm {
     /// casts from the specified value, returning the original uncasted value.
     /// Note that the returned value is guaranteed to have pointer type.
     static Value *StripPointerCasts(Value *Ptr);
+    
+    /// getIntrinsicID - Return the intrinsic ID of this intrinsic.
+    ///
+    Intrinsic::ID getIntrinsicID() const {
+      return (Intrinsic::ID)getCalledFunction()->getIntrinsicID();
+    }
+    
+    // Methods for support type inquiry through isa, cast, and dyn_cast:
+    static inline bool classof(const IntrinsicInst *) { return true; }
+    static inline bool classof(const CallInst *I) {
+      if (const Function *CF = I->getCalledFunction())
+        return CF->getIntrinsicID() != 0;
+      return false;
+    }
+    static inline bool classof(const Value *V) {
+      return isa<CallInst>(V) && classof(cast<CallInst>(V));
+    }
   };
 
   /// DbgInfoIntrinsic - This is the common base class for debug info intrinsics