mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-24 22:24:54 +00:00
Intrinsics: introduce llvm_any_ty aka ValueType Any
Specifically, gc.result benefits from this greatly. Instead of: gc.result.int.* gc.result.float.* gc.result.ptr.* ... We now have a gc.result.* that can specialize to literally any type. Differential Revision: http://reviews.llvm.org/D7020 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@226857 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -41,7 +41,7 @@ namespace Intrinsic {
|
||||
#undef GET_INTRINSIC_ENUM_VALUES
|
||||
, num_intrinsics
|
||||
};
|
||||
|
||||
|
||||
/// Return the LLVM name for an intrinsic, such as "llvm.ppc.altivec.lvx".
|
||||
std::string getName(ID id, ArrayRef<Type*> Tys = None);
|
||||
|
||||
@@ -69,7 +69,7 @@ namespace Intrinsic {
|
||||
|
||||
/// Map a MS builtin name to an intrinsic ID.
|
||||
ID getIntrinsicForMSBuiltin(const char *Prefix, const char *BuiltinName);
|
||||
|
||||
|
||||
/// This is a type descriptor which explains the type requirements of an
|
||||
/// intrinsic. This is returned by getIntrinsicInfoTableEntries.
|
||||
struct IITDescriptor {
|
||||
@@ -79,7 +79,7 @@ namespace Intrinsic {
|
||||
Argument, ExtendArgument, TruncArgument, HalfVecArgument,
|
||||
SameVecWidthArgument, PtrToArgument
|
||||
} Kind;
|
||||
|
||||
|
||||
union {
|
||||
unsigned Integer_Width;
|
||||
unsigned Float_Width;
|
||||
@@ -88,8 +88,9 @@ namespace Intrinsic {
|
||||
unsigned Struct_NumElements;
|
||||
unsigned Argument_Info;
|
||||
};
|
||||
|
||||
|
||||
enum ArgKind {
|
||||
AK_Any,
|
||||
AK_AnyInteger,
|
||||
AK_AnyFloat,
|
||||
AK_AnyVector,
|
||||
@@ -99,25 +100,25 @@ namespace Intrinsic {
|
||||
assert(Kind == Argument || Kind == ExtendArgument ||
|
||||
Kind == TruncArgument || Kind == HalfVecArgument ||
|
||||
Kind == SameVecWidthArgument || Kind == PtrToArgument);
|
||||
return Argument_Info >> 2;
|
||||
return Argument_Info >> 3;
|
||||
}
|
||||
ArgKind getArgumentKind() const {
|
||||
assert(Kind == Argument || Kind == ExtendArgument ||
|
||||
Kind == TruncArgument || Kind == HalfVecArgument ||
|
||||
Kind == SameVecWidthArgument || Kind == PtrToArgument);
|
||||
return (ArgKind)(Argument_Info & 3);
|
||||
return (ArgKind)(Argument_Info & 7);
|
||||
}
|
||||
|
||||
|
||||
static IITDescriptor get(IITDescriptorKind K, unsigned Field) {
|
||||
IITDescriptor Result = { K, { Field } };
|
||||
return Result;
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
/// Return the IIT table descriptor for the specified intrinsic into an array
|
||||
/// of IITDescriptors.
|
||||
void getIntrinsicInfoTableEntries(ID id, SmallVectorImpl<IITDescriptor> &T);
|
||||
|
||||
|
||||
} // End Intrinsic namespace
|
||||
|
||||
} // End llvm namespace
|
||||
|
Reference in New Issue
Block a user