Add support for inserting all prototypes up-front
[oota-llvm.git] / include / llvm / IntrinsicLowering.h
index 19ccb61b47d38fb5d11535eb786e22699388cb1e..43a4c991cf001406f63fcffc5175bb90857e0281 100644 (file)
 
 namespace llvm {
   class CallInst;
+  class Module;
   
   struct IntrinsicLowering {
     virtual ~IntrinsicLowering() {}
 
+    /// AddPrototypes - This method, if called, causes all of the prototypes
+    /// that might be needed by an intrinsic lowering implementation to be
+    /// inserted into the module specified.
+    virtual void AddPrototypes(Module &M) = 0;
+
     /// LowerIntrinsicCall - This method returns the LLVM function which should
     /// be used to implement the specified intrinsic function call.  If an
     /// intrinsic function must be implemented by the code generator (such as
@@ -59,6 +65,7 @@ namespace llvm {
   /// implementations should pass any unhandled intrinsics to this
   /// implementation to allow for future extensibility.
   struct DefaultIntrinsicLowering : public IntrinsicLowering {
+    virtual void AddPrototypes(Module &M);
     virtual void LowerIntrinsicCall(CallInst *CI);    
   };
 }