From 0530d0d5d9dfaae2e3c78a52729abcbf9fcdd21b Mon Sep 17 00:00:00 2001 From: Jim Grosbach Date: Mon, 14 Nov 2011 23:20:14 +0000 Subject: [PATCH] Split out the plain '.{8|16|32|64}' suffix handling. Make it easier to deal with aliases for instructions that do require a suffix but accept more specific variants of the same size. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@144588 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/ARM/ARMInstrFormats.td | 32 +++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/Target/ARM/ARMInstrFormats.td b/lib/Target/ARM/ARMInstrFormats.td index 90ee0183c08..06ee2c82260 100644 --- a/lib/Target/ARM/ARMInstrFormats.td +++ b/lib/Target/ARM/ARMInstrFormats.td @@ -1995,36 +1995,52 @@ class NEONFPPat : Pat { // VFP/NEON Instruction aliases for type suffices. class VFPDataTypeInstAlias : InstAlias; -multiclass VFPDT8InstAlias { - def _8 : VFPDataTypeInstAlias; +multiclass VFPDT8ReqInstAlias { def I8 : VFPDataTypeInstAlias; def S8 : VFPDataTypeInstAlias; def U8 : VFPDataTypeInstAlias; def F8 : VFPDataTypeInstAlias; } -multiclass VFPDT16InstAlias { - def _16 : VFPDataTypeInstAlias; +// VFPDT8ReqInstAlias plus plain ".8" +multiclass VFPDT8InstAlias { + def _8 : VFPDataTypeInstAlias; + defm : VFPDT8ReqInstAlias; +} +multiclass VFPDT16ReqInstAlias { def I16 : VFPDataTypeInstAlias; def S16 : VFPDataTypeInstAlias; def U16 : VFPDataTypeInstAlias; def F16 : VFPDataTypeInstAlias; } -multiclass VFPDT32InstAlias { - def _32 : VFPDataTypeInstAlias; +// VFPDT16ReqInstAlias plus plain ".16" +multiclass VFPDT16InstAlias { + def _16 : VFPDataTypeInstAlias; + defm : VFPDT16ReqInstAlias; +} +multiclass VFPDT32ReqInstAlias { def I32 : VFPDataTypeInstAlias; def S32 : VFPDataTypeInstAlias; def U32 : VFPDataTypeInstAlias; def F32 : VFPDataTypeInstAlias; def F : VFPDataTypeInstAlias; } -multiclass VFPDT64InstAlias { - def _64 : VFPDataTypeInstAlias; +// VFPDT32ReqInstAlias plus plain ".32" +multiclass VFPDT32InstAlias { + def _32 : VFPDataTypeInstAlias; + defm : VFPDT32ReqInstAlias; +} +multiclass VFPDT64ReqInstAlias { def I64 : VFPDataTypeInstAlias; def S64 : VFPDataTypeInstAlias; def U64 : VFPDataTypeInstAlias; def F64 : VFPDataTypeInstAlias; def D : VFPDataTypeInstAlias; } +// VFPDT64ReqInstAlias plus plain ".64" +multiclass VFPDT64InstAlias { + def _64 : VFPDataTypeInstAlias; + defm : VFPDT64ReqInstAlias; +} multiclass VFPDTAnyInstAlias { defm : VFPDT8InstAlias; defm : VFPDT16InstAlias;