make doxygen comment much better. Patch by B. Scott Michel!
[oota-llvm.git] / include / llvm / Target / TargetLowering.h
index f6bd676277e7cda5f28ba67332524e1ae675b307..34bc3ad7ee86b78a265045922412b1e00dfad579 100644 (file)
 #ifndef LLVM_TARGET_TARGETLOWERING_H
 #define LLVM_TARGET_TARGETLOWERING_H
 
-#include "llvm/DerivedTypes.h"
 #include "llvm/CodeGen/SelectionDAGNodes.h"
+#include "llvm/CodeGen/RuntimeLibcalls.h"
 #include <map>
+#include <vector>
 
 namespace llvm {
   class Value;
@@ -37,93 +38,7 @@ namespace llvm {
   class SelectionDAG;
   class MachineBasicBlock;
   class MachineInstr;
-
-namespace RTLIB {
-  /// RTLIB::Libcall enum - This enum defines all of the runtime library calls
-  /// the backend can emit.
-  ///
-  enum Libcall {
-    // Integer
-    SHL_I32,
-    SHL_I64,
-    SRL_I32,
-    SRL_I64,
-    SRA_I32,
-    SRA_I64,
-    MUL_I32,
-    MUL_I64,
-    SDIV_I32,
-    SDIV_I64,
-    UDIV_I32,
-    UDIV_I64,
-    SREM_I32,
-    SREM_I64,
-    UREM_I32,
-    UREM_I64,
-    NEG_I32,
-    NEG_I64,
-
-    // FLOATING POINT
-    ADD_F32,
-    ADD_F64,
-    SUB_F32,
-    SUB_F64,
-    MUL_F32,
-    MUL_F64,
-    DIV_F32,
-    DIV_F64,
-    REM_F32,
-    REM_F64,
-    NEG_F32,
-    NEG_F64,
-    POWI_F32,
-    POWI_F64,
-    SQRT_F32,
-    SQRT_F64,
-    SIN_F32,
-    SIN_F64,
-    COS_F32,
-    COS_F64,
-
-    // CONVERSION
-    FPEXT_F32_F64,
-    FPROUND_F64_F32,
-    FPTOSINT_F32_I32,
-    FPTOSINT_F32_I64,
-    FPTOSINT_F64_I32,
-    FPTOSINT_F64_I64,
-    FPTOUINT_F32_I32,
-    FPTOUINT_F32_I64,
-    FPTOUINT_F64_I32,
-    FPTOUINT_F64_I64,
-    SINTTOFP_I32_F32,
-    SINTTOFP_I32_F64,
-    SINTTOFP_I64_F32,
-    SINTTOFP_I64_F64,
-    UINTTOFP_I32_F32,
-    UINTTOFP_I32_F64,
-    UINTTOFP_I64_F32,
-    UINTTOFP_I64_F64,
-
-    // COMPARISON
-    OEQ_F32,
-    OEQ_F64,
-    UNE_F32,
-    UNE_F64,
-    OGE_F32,
-    OGE_F64,
-    OLT_F32,
-    OLT_F64,
-    OLE_F32,
-    OLE_F64,
-    OGT_F32,
-    OGT_F64,
-    UO_F32,
-    UO_F64,
-
-    UNKNOWN_LIBCALL
-  };
-  }
+  class PackedType;
 
 //===----------------------------------------------------------------------===//
 /// TargetLowering - This class defines information used to lower LLVM code to
@@ -425,27 +340,7 @@ public:
 
   /// getValueType - Return the MVT::ValueType corresponding to this LLVM type.
   /// This is fixed by the LLVM operations except for the pointer size.
-  MVT::ValueType getValueType(const Type *Ty) const {
-    switch (Ty->getTypeID()) {
-    default: assert(0 && "Unknown type!");
-    case Type::VoidTyID:    return MVT::isVoid;
-    case Type::IntegerTyID:
-      switch (cast<IntegerType>(Ty)->getBitWidth()) {
-        default: assert(0 && "Invalid width for value type");
-        case 1:    return MVT::i1;
-        case 8:    return MVT::i8;
-        case 16:   return MVT::i16;
-        case 32:   return MVT::i32;
-        case 64:   return MVT::i64;
-      }
-      break;
-    case Type::FloatTyID:   return MVT::f32;
-    case Type::DoubleTyID:  return MVT::f64;
-    case Type::PointerTyID: return PointerTy;
-    case Type::PackedTyID:  return MVT::Vector;
-    }
-    return MVT::isVoid;  // Silence a compiler warning.
-  }
+  MVT::ValueType getValueType(const Type *Ty) const;
 
   /// getNumElements - Return the number of registers that this ValueType will
   /// eventually require.  This is one for any types promoted to live in larger
@@ -956,14 +851,14 @@ public:
 
   /// setLibcallName - Rename the default libcall routine name for the specified
   /// libcall.
-  void setLibcallName(RTLIB::Libcall Call, std::string Name) {
+  void setLibcallName(RTLIB::Libcall Call, const char *Name) {
     LibcallRoutineNames[Call] = Name;
   }
 
   /// getLibcallName - Get the libcall routine name for the specified libcall.
   ///
   const char *getLibcallName(RTLIB::Libcall Call) const {
-    return LibcallRoutineNames[Call].c_str();
+    return LibcallRoutineNames[Call];
   }
 
 protected:
@@ -1101,7 +996,7 @@ private:
 
   /// LibcallRoutineNames - Stores the name each libcall.
   ///
-  std::string LibcallRoutineNames[RTLIB::UNKNOWN_LIBCALL];
+  const char *LibcallRoutineNames[RTLIB::UNKNOWN_LIBCALL];
 
 protected:
   /// When lowering %llvm.memset this field specifies the maximum number of