Masked gather and scatter: Added code for SelectionDAG.
[oota-llvm.git] / include / llvm / CodeGen / IntrinsicLowering.h
index ae7526c369d67a92d4eba3c7ebc972d689e24a22..9e6ab7d45977e960b4dae4231106e92e32a93d33 100644 (file)
@@ -2,8 +2,8 @@
 //
 //                     The LLVM Compiler Infrastructure
 //
-// This file was developed by the LLVM research group and is distributed under
-// the University of Illinois Open Source License. See LICENSE.TXT for details.
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
 //
 //===----------------------------------------------------------------------===//
 //
 #ifndef LLVM_CODEGEN_INTRINSICLOWERING_H
 #define LLVM_CODEGEN_INTRINSICLOWERING_H
 
-#include "llvm/Intrinsics.h"
+#include "llvm/IR/Intrinsics.h"
 
 namespace llvm {
   class CallInst;
   class Module;
+  class DataLayout;
 
   class IntrinsicLowering {
+    const DataLayout& DL;
+
+    
+    bool Warned;
   public:
-    IntrinsicLowering() {}
+    explicit IntrinsicLowering(const DataLayout &DL) :
+      DL(DL), Warned(false) {}
 
     /// 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.
     void AddPrototypes(Module &M);
 
-    /// 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
-    /// va_start), this function should print a message and abort.
+    /// LowerIntrinsicCall - This method replaces a call with 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 va_start), this function should print a message and abort.
     ///
     /// Otherwise, if an intrinsic function call can be lowered, the code to
     /// implement it (often a call to a non-intrinsic function) is inserted
@@ -42,6 +48,11 @@ namespace llvm {
     /// be capable of handling this kind of change.
     ///
     void LowerIntrinsicCall(CallInst *CI);
+
+    /// LowerToByteSwap - Replace a call instruction into a call to bswap
+    /// intrinsic. Return false if it has determined the call is not a
+    /// simple integer bswap.
+    static bool LowerToByteSwap(CallInst *CI);
   };
 }