union GenericValue {
bool BoolVal;
- unsigned char UByteVal;
- signed char SByteVal;
- unsigned short UShortVal;
- signed short ShortVal;
- unsigned int UIntVal;
- signed int IntVal;
- uint64_t ULongVal;
- int64_t LongVal;
+ unsigned char Int8Val;
+ unsigned short Int16Val;
+ unsigned int Int32Val;
+ uint64_t Int64Val;
double DoubleVal;
float FloatVal;
struct { unsigned int first; unsigned int second; } UIntPairVal;
/// involving Integer and Pointer types. They are no-op casts if the integer
/// is the same size as the pointer. However, pointer size varies with
/// platform. Generally, the result of TargetData::getIntPtrType() should be
- /// passed in. If that's not available, use Type::ULongTy, which will make
+ /// passed in. If that's not available, use Type::Int64Ty, which will make
/// the isNoopCast call conservative.
/// @brief Determine if this cast is a no-op cast.
bool isNoopCast(
def llvm_void_ty : LLVMType<isVoid, "Type::VoidTyID">;
def llvm_bool_ty : LLVMType<i1 , "Type::BoolTyID">;
-def llvm_sbyte_ty : LLVMType<i8 , "Type::SByteTyID">;
-def llvm_short_ty : LLVMType<i16, "Type::ShortTyID">;
-def llvm_int_ty : LLVMType<i32, "Type::IntTyID">;
-def llvm_long_ty : LLVMType<i64, "Type::LongTyID">;
-def llvm_ubyte_ty : LLVMType<i8, "Type::UByteTyID">;
-def llvm_ushort_ty : LLVMType<i16, "Type::UShortTyID">;
-def llvm_uint_ty : LLVMType<i32, "Type::UIntTyID">;
-def llvm_ulong_ty : LLVMType<i64, "Type::ULongTyID">;
+def llvm_sbyte_ty : LLVMType<i8 , "Type::Int8TyID">;
+def llvm_short_ty : LLVMType<i16, "Type::Int16TyID">;
+def llvm_int_ty : LLVMType<i32, "Type::Int32TyID">;
+def llvm_long_ty : LLVMType<i64, "Type::Int64TyID">;
+def llvm_ubyte_ty : LLVMType<i8, "Type::Int8TyID">;
+def llvm_ushort_ty : LLVMType<i16, "Type::Int16TyID">;
+def llvm_uint_ty : LLVMType<i32, "Type::Int32TyID">;
+def llvm_ulong_ty : LLVMType<i64, "Type::Int64TyID">;
def llvm_float_ty : LLVMType<f32, "Type::FloatTyID">;
def llvm_double_ty : LLVMType<f64, "Type::DoubleTyID">;
def llvm_ptr_ty : LLVMType<iPTR, "Type::PointerTyID">; // sbyte*
default: assert(0 && "Unknown type!");
case Type::VoidTyID: return MVT::isVoid;
case Type::BoolTyID: return MVT::i1;
- case Type::UByteTyID:
- case Type::SByteTyID: return MVT::i8;
- case Type::ShortTyID:
- case Type::UShortTyID: return MVT::i16;
- case Type::IntTyID:
- case Type::UIntTyID: return MVT::i32;
- case Type::LongTyID:
- case Type::ULongTyID: return MVT::i64;
+ case Type::Int8TyID: return MVT::i8;
+ case Type::Int16TyID: return MVT::i16;
+ case Type::Int32TyID: return MVT::i32;
+ case Type::Int64TyID: return MVT::i64;
case Type::FloatTyID: return MVT::f32;
case Type::DoubleTyID: return MVT::f64;
case Type::PointerTyID: return PointerTy;
/// actual call. This returns a pair of operands. The first element is the
/// return value for the function (if RetTy is not VoidTy). The second
/// element is the outgoing token chain.
- typedef std::vector<std::pair<SDOperand, const Type*> > ArgListTy;
+ struct ArgListEntry {
+ SDOperand Node;
+ const Type* Ty;
+ bool isSigned;
+ };
+ typedef std::vector<ArgListEntry> ArgListTy;
virtual std::pair<SDOperand, SDOperand>
- LowerCallTo(SDOperand Chain, const Type *RetTy, bool isVarArg,
- unsigned CallingConv, bool isTailCall, SDOperand Callee,
- ArgListTy &Args, SelectionDAG &DAG);
+ LowerCallTo(SDOperand Chain, const Type *RetTy, bool RetTyIsSigned,
+ bool isVarArg, unsigned CallingConv, bool isTailCall,
+ SDOperand Callee, ArgListTy &Args, SelectionDAG &DAG);
/// LowerFrameReturnAddress - This hook lowers a call to llvm.returnaddress or
/// llvm.frameaddress (depending on the value of the first argument). The