[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:
Alexandros Lamprineas 2021-07-31 08:46:20 +01:00
parent 29b263a34f
commit 3094e5389b
4 changed files with 7 additions and 1 deletions

View File

@ -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

View File

@ -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:

View File

@ -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:

View File

@ -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";