forked from OSchip/llvm-project
[AArch64] Add a Machine Value Type for 8 consecutive registers
Adds MVT::i64x8, a Machine Value Type needed for lowering inline assembly operands which materialize a sequence of eight general purpose registers. Differential Revision: https://reviews.llvm.org/D94096
This commit is contained in:
parent
29b263a34f
commit
3094e5389b
|
@ -216,6 +216,7 @@ def untyped : ValueType<8, 174>; // Produces an untyped value
|
||||||
def funcref : ValueType<0, 175>; // WebAssembly's funcref type
|
def funcref : ValueType<0, 175>; // WebAssembly's funcref type
|
||||||
def externref : ValueType<0, 176>; // WebAssembly's externref type
|
def externref : ValueType<0, 176>; // WebAssembly's externref type
|
||||||
def x86amx : ValueType<8192, 177>; // X86 AMX value
|
def x86amx : ValueType<8192, 177>; // X86 AMX value
|
||||||
|
def i64x8 : ValueType<512, 178>; // 8 Consecutive GPRs (AArch64)
|
||||||
|
|
||||||
|
|
||||||
def token : ValueType<0, 248>; // TokenTy
|
def token : ValueType<0, 248>; // TokenTy
|
||||||
|
|
|
@ -270,9 +270,10 @@ namespace llvm {
|
||||||
funcref = 175, // WebAssembly's funcref type
|
funcref = 175, // WebAssembly's funcref type
|
||||||
externref = 176, // WebAssembly's externref type
|
externref = 176, // WebAssembly's externref type
|
||||||
x86amx = 177, // This is an X86 AMX value
|
x86amx = 177, // This is an X86 AMX value
|
||||||
|
i64x8 = 178, // 8 Consecutive GPRs (AArch64)
|
||||||
|
|
||||||
FIRST_VALUETYPE = 1, // This is always the beginning of the list.
|
FIRST_VALUETYPE = 1, // This is always the beginning of the list.
|
||||||
LAST_VALUETYPE = x86amx, // This always remains at the end of the list.
|
LAST_VALUETYPE = i64x8, // This always remains at the end of the list.
|
||||||
VALUETYPE_SIZE = LAST_VALUETYPE + 1,
|
VALUETYPE_SIZE = LAST_VALUETYPE + 1,
|
||||||
|
|
||||||
// This is the current maximum for LAST_VALUETYPE.
|
// This is the current maximum for LAST_VALUETYPE.
|
||||||
|
@ -987,6 +988,7 @@ namespace llvm {
|
||||||
case nxv16f16:
|
case nxv16f16:
|
||||||
case nxv8f32:
|
case nxv8f32:
|
||||||
case nxv4f64: return TypeSize::Scalable(256);
|
case nxv4f64: return TypeSize::Scalable(256);
|
||||||
|
case i64x8:
|
||||||
case v512i1:
|
case v512i1:
|
||||||
case v64i8:
|
case v64i8:
|
||||||
case v32i16:
|
case v32i16:
|
||||||
|
|
|
@ -167,6 +167,7 @@ std::string EVT::getEVTString() const {
|
||||||
case MVT::Glue: return "glue";
|
case MVT::Glue: return "glue";
|
||||||
case MVT::x86mmx: return "x86mmx";
|
case MVT::x86mmx: return "x86mmx";
|
||||||
case MVT::x86amx: return "x86amx";
|
case MVT::x86amx: return "x86amx";
|
||||||
|
case MVT::i64x8: return "i64x8";
|
||||||
case MVT::Metadata: return "Metadata";
|
case MVT::Metadata: return "Metadata";
|
||||||
case MVT::Untyped: return "Untyped";
|
case MVT::Untyped: return "Untyped";
|
||||||
case MVT::funcref: return "funcref";
|
case MVT::funcref: return "funcref";
|
||||||
|
@ -198,6 +199,7 @@ Type *EVT::getTypeForEVT(LLVMContext &Context) const {
|
||||||
case MVT::ppcf128: return Type::getPPC_FP128Ty(Context);
|
case MVT::ppcf128: return Type::getPPC_FP128Ty(Context);
|
||||||
case MVT::x86mmx: return Type::getX86_MMXTy(Context);
|
case MVT::x86mmx: return Type::getX86_MMXTy(Context);
|
||||||
case MVT::x86amx: return Type::getX86_AMXTy(Context);
|
case MVT::x86amx: return Type::getX86_AMXTy(Context);
|
||||||
|
case MVT::i64x8: return IntegerType::get(Context, 512);
|
||||||
case MVT::externref:
|
case MVT::externref:
|
||||||
return PointerType::get(StructType::create(Context), 10);
|
return PointerType::get(StructType::create(Context), 10);
|
||||||
case MVT::funcref:
|
case MVT::funcref:
|
||||||
|
|
|
@ -77,6 +77,7 @@ StringRef llvm::getEnumName(MVT::SimpleValueType T) {
|
||||||
case MVT::ppcf128: return "MVT::ppcf128";
|
case MVT::ppcf128: return "MVT::ppcf128";
|
||||||
case MVT::x86mmx: return "MVT::x86mmx";
|
case MVT::x86mmx: return "MVT::x86mmx";
|
||||||
case MVT::x86amx: return "MVT::x86amx";
|
case MVT::x86amx: return "MVT::x86amx";
|
||||||
|
case MVT::i64x8: return "MVT::i64x8";
|
||||||
case MVT::Glue: return "MVT::Glue";
|
case MVT::Glue: return "MVT::Glue";
|
||||||
case MVT::isVoid: return "MVT::isVoid";
|
case MVT::isVoid: return "MVT::isVoid";
|
||||||
case MVT::v1i1: return "MVT::v1i1";
|
case MVT::v1i1: return "MVT::v1i1";
|
||||||
|
|
Loading…
Reference in New Issue