aboutsummaryrefslogtreecommitdiffstats
path: root/include/llvm/Target/TargetLowering.h
diff options
context:
space:
mode:
authorEvan Cheng <evan.cheng@apple.com>2007-01-12 02:11:51 +0000
committerEvan Cheng <evan.cheng@apple.com>2007-01-12 02:11:51 +0000
commit56966225d1eed9f9a6951d2167bfbbec9628c8d6 (patch)
treecceeb13fb53577b8c55e17785a124e62b125581e /include/llvm/Target/TargetLowering.h
parent28c5b1544a26adb1008ba445ec62ab69c3db09db (diff)
downloadexternal_llvm-56966225d1eed9f9a6951d2167bfbbec9628c8d6.zip
external_llvm-56966225d1eed9f9a6951d2167bfbbec9628c8d6.tar.gz
external_llvm-56966225d1eed9f9a6951d2167bfbbec9628c8d6.tar.bz2
Store default libgcc routine names and allow them to be redefined by target.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@33105 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include/llvm/Target/TargetLowering.h')
-rw-r--r--include/llvm/Target/TargetLowering.h109
1 files changed, 108 insertions, 1 deletions
diff --git a/include/llvm/Target/TargetLowering.h b/include/llvm/Target/TargetLowering.h
index 6880cdd..5749d52 100644
--- a/include/llvm/Target/TargetLowering.h
+++ b/include/llvm/Target/TargetLowering.h
@@ -38,6 +38,93 @@ namespace llvm {
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
+ };
+ }
+
//===----------------------------------------------------------------------===//
/// TargetLowering - This class defines information used to lower LLVM code to
/// legal SelectionDAG operators that the target instruction selector can accept
@@ -857,6 +944,22 @@ public:
std::vector<SDNode*>* Created) const;
+ //===--------------------------------------------------------------------===//
+ // Runtime Library hooks
+ //
+
+ /// setLibcallName - Rename the default libcall routine name for the specified
+ /// libcall.
+ void setLibcallName(RTLIB::Libcall Call, std::string 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();
+ }
+
protected:
/// addLegalAddressScale - Add a integer (> 1) value which can be used as
/// scale in the target addressing mode. Note: the ordering matters so the
@@ -989,7 +1092,11 @@ private:
/// Targets add entries to this map with AddPromotedToType(..), clients access
/// this with getTypeToPromoteTo(..).
std::map<std::pair<unsigned, MVT::ValueType>, MVT::ValueType> PromoteToType;
-
+
+ /// LibcallRoutineNames - Stores the name each libcall.
+ ///
+ std::string LibcallRoutineNames[RTLIB::UNKNOWN_LIBCALL];
+
protected:
/// When lowering %llvm.memset this field specifies the maximum number of
/// store operations that may be substituted for the call to memset. Targets