diff --git a/lib/Target/ARM/ARMInstrFormats.td b/lib/Target/ARM/ARMInstrFormats.td index 12cb4640f69..6d5b6a46157 100644 --- a/lib/Target/ARM/ARMInstrFormats.td +++ b/lib/Target/ARM/ARMInstrFormats.td @@ -1991,3 +1991,22 @@ class NVDupLane op19_16, bit op6, dag oops, dag iops, class NEONFPPat : Pat { list Predicates = [HasNEON,UseNEONForFP]; } + +// VFP/NEON Instruction aliases for type suffices. +class VFPDataTypeInstAlias : + InstAlias; +multiclass VFPDT32InstAlias { + def I32 : VFPDataTypeInstAlias; + def S32 : VFPDataTypeInstAlias; + def U32 : VFPDataTypeInstAlias; + def F32 : VFPDataTypeInstAlias; + def F : VFPDataTypeInstAlias; +} +multiclass VFPDT64InstAlias { + def I64 : VFPDataTypeInstAlias; + def S64 : VFPDataTypeInstAlias; + def U64 : VFPDataTypeInstAlias; + def F64 : VFPDataTypeInstAlias; + def D : VFPDataTypeInstAlias; +} + diff --git a/lib/Target/ARM/ARMInstrVFP.td b/lib/Target/ARM/ARMInstrVFP.td index 22a464e50cd..06cb79a50b3 100644 --- a/lib/Target/ARM/ARMInstrVFP.td +++ b/lib/Target/ARM/ARMInstrVFP.td @@ -1172,3 +1172,12 @@ def : VFP2InstAlias<"vstr$p $Dd, $addr", (VSTRD DPR:$Dd, addrmode5:$addr, pred:$p)>; def : VFP2InstAlias<"vstr$p $Sd, $addr", (VSTRS SPR:$Sd, addrmode5:$addr, pred:$p)>; +// The suffix can also by typed. +defm : VFPDT32InstAlias<"vldr$p", "$Sd, $addr", + (VLDRS SPR:$Sd, addrmode5:$addr, pred:$p)>; +defm : VFPDT32InstAlias<"vstr$p", "$Sd, $addr", + (VSTRS SPR:$Sd, addrmode5:$addr, pred:$p)>; +defm : VFPDT64InstAlias<"vldr$p", "$Dd, $addr", + (VLDRD DPR:$Dd, addrmode5:$addr, pred:$p)>; +defm : VFPDT64InstAlias<"vstr$p", "$Dd, $addr", + (VSTRD DPR:$Dd, addrmode5:$addr, pred:$p)>;