Split out the plain '.{8|16|32|64}' suffix handling.
authorJim Grosbach <grosbach@apple.com>
Mon, 14 Nov 2011 23:20:14 +0000 (23:20 +0000)
committerJim Grosbach <grosbach@apple.com>
Mon, 14 Nov 2011 23:20:14 +0000 (23:20 +0000)
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

index 90ee0183c08a832fc66c60afa881cc93bf72b958..06ee2c82260d249123ff42a3cb587cc71bb6206e 100644 (file)
@@ -1995,36 +1995,52 @@ class NEONFPPat<dag pattern, dag result> : Pat<pattern, result> {
 // VFP/NEON Instruction aliases for type suffices.
 class VFPDataTypeInstAlias<string opc, string dt, string asm, dag Result> :
   InstAlias<!strconcat(opc, dt, asm), Result>;
-multiclass VFPDT8InstAlias<string opc, string asm, dag Result> {
-  def _8 : VFPDataTypeInstAlias<opc, ".8", asm, Result>;
+multiclass VFPDT8ReqInstAlias<string opc, string asm, dag Result> {
   def I8 : VFPDataTypeInstAlias<opc, ".i8", asm, Result>;
   def S8 : VFPDataTypeInstAlias<opc, ".s8", asm, Result>;
   def U8 : VFPDataTypeInstAlias<opc, ".u8", asm, Result>;
   def F8 : VFPDataTypeInstAlias<opc, ".p8", asm, Result>;
 }
-multiclass VFPDT16InstAlias<string opc, string asm, dag Result> {
-  def _16 : VFPDataTypeInstAlias<opc, ".16", asm, Result>;
+// VFPDT8ReqInstAlias plus plain ".8"
+multiclass VFPDT8InstAlias<string opc, string asm, dag Result> {
+  def _8 : VFPDataTypeInstAlias<opc, ".8", asm, Result>;
+  defm : VFPDT8ReqInstAlias<opc, asm, Result>;
+}
+multiclass VFPDT16ReqInstAlias<string opc, string asm, dag Result> {
   def I16 : VFPDataTypeInstAlias<opc, ".i16", asm, Result>;
   def S16 : VFPDataTypeInstAlias<opc, ".s16", asm, Result>;
   def U16 : VFPDataTypeInstAlias<opc, ".u16", asm, Result>;
   def F16 : VFPDataTypeInstAlias<opc, ".p16", asm, Result>;
 }
-multiclass VFPDT32InstAlias<string opc, string asm, dag Result> {
-  def _32 : VFPDataTypeInstAlias<opc, ".32",  asm, Result>;
+// VFPDT16ReqInstAlias plus plain ".16"
+multiclass VFPDT16InstAlias<string opc, string asm, dag Result> {
+  def _16 : VFPDataTypeInstAlias<opc, ".16", asm, Result>;
+  defm : VFPDT16ReqInstAlias<opc, asm, Result>;
+}
+multiclass VFPDT32ReqInstAlias<string opc, string asm, dag Result> {
   def I32 : VFPDataTypeInstAlias<opc, ".i32", asm, Result>;
   def S32 : VFPDataTypeInstAlias<opc, ".s32", asm, Result>;
   def U32 : VFPDataTypeInstAlias<opc, ".u32", asm, Result>;
   def F32 : VFPDataTypeInstAlias<opc, ".f32", asm, Result>;
   def F   : VFPDataTypeInstAlias<opc, ".f",   asm, Result>;
 }
-multiclass VFPDT64InstAlias<string opc, string asm, dag Result> {
-  def _64 : VFPDataTypeInstAlias<opc, ".64",  asm, Result>;
+// VFPDT32ReqInstAlias plus plain ".32"
+multiclass VFPDT32InstAlias<string opc, string asm, dag Result> {
+  def _32 : VFPDataTypeInstAlias<opc, ".32", asm, Result>;
+  defm : VFPDT32ReqInstAlias<opc, asm, Result>;
+}
+multiclass VFPDT64ReqInstAlias<string opc, string asm, dag Result> {
   def I64 : VFPDataTypeInstAlias<opc, ".i64", asm, Result>;
   def S64 : VFPDataTypeInstAlias<opc, ".s64", asm, Result>;
   def U64 : VFPDataTypeInstAlias<opc, ".u64", asm, Result>;
   def F64 : VFPDataTypeInstAlias<opc, ".f64", asm, Result>;
   def D   : VFPDataTypeInstAlias<opc, ".d",   asm, Result>;
 }
+// VFPDT64ReqInstAlias plus plain ".64"
+multiclass VFPDT64InstAlias<string opc, string asm, dag Result> {
+  def _64 : VFPDataTypeInstAlias<opc, ".64", asm, Result>;
+  defm : VFPDT64ReqInstAlias<opc, asm, Result>;
+}
 multiclass VFPDTAnyInstAlias<string opc, string asm, dag Result> {
   defm : VFPDT8InstAlias<opc, asm, Result>;
   defm : VFPDT16InstAlias<opc, asm, Result>;