diff options
| author | Sam Parker <sam.parker@arm.com> | 2019-09-17 07:43:04 +0000 |
|---|---|---|
| committer | Sam Parker <sam.parker@arm.com> | 2019-09-17 07:43:04 +0000 |
| commit | 26a475afe5cf9acf8dfe3e6cf8ebf1343ec3b72c (patch) | |
| tree | d8f2fae86fa0461c8b15d67ae7ad40560d95f6c2 /llvm/lib | |
| parent | 30d86f1858dbeaaeb5d5a2a6ba8631f7f839e094 (diff) | |
| download | bcm5719-llvm-26a475afe5cf9acf8dfe3e6cf8ebf1343ec3b72c.tar.gz bcm5719-llvm-26a475afe5cf9acf8dfe3e6cf8ebf1343ec3b72c.zip | |
[ARM][MVE] Add invalidForTailPredication to TSFlags
Set this bit for the MVE reduction instructions to prevent a loop from
becoming tail predicated in their presence.
Differential Revision: https://reviews.llvm.org/D67444
llvm-svn: 372076
Diffstat (limited to 'llvm/lib')
| -rw-r--r-- | llvm/lib/Target/ARM/ARMInstrFormats.td | 3 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/ARMInstrMVE.td | 7 | ||||
| -rw-r--r-- | llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h | 4 |
3 files changed, 14 insertions, 0 deletions
diff --git a/llvm/lib/Target/ARM/ARMInstrFormats.td b/llvm/lib/Target/ARM/ARMInstrFormats.td index 043b54a7deb..53af05cf5f4 100644 --- a/llvm/lib/Target/ARM/ARMInstrFormats.td +++ b/llvm/lib/Target/ARM/ARMInstrFormats.td @@ -408,6 +408,8 @@ class InstTemplate<AddrMode am, int sz, IndexMode im, // mnemonic (when not in an IT block) or preclude it (when in an IT block). bit thumbArithFlagSetting = 0; + bit invalidForTailPredication = 0; + // If this is a pseudo instruction, mark it isCodeGenOnly. let isCodeGenOnly = !eq(!cast<string>(f), "Pseudo"); @@ -419,6 +421,7 @@ class InstTemplate<AddrMode am, int sz, IndexMode im, let TSFlags{14} = canXformTo16Bit; let TSFlags{18-15} = D.Value; let TSFlags{19} = thumbArithFlagSetting; + let TSFlags{20} = invalidForTailPredication; let Constraints = cstr; let Itinerary = itin; diff --git a/llvm/lib/Target/ARM/ARMInstrMVE.td b/llvm/lib/Target/ARM/ARMInstrMVE.td index 9623b4d1d57..fdc162eacca 100644 --- a/llvm/lib/Target/ARM/ARMInstrMVE.td +++ b/llvm/lib/Target/ARM/ARMInstrMVE.td @@ -506,6 +506,7 @@ class MVE_VABAV<string suffix, bit U, bits<2> size, list<dag> pattern=[]> let Inst{5} = Qm{3}; let Inst{3-1} = Qm{2-0}; let Inst{0} = 0b1; + let invalidForTailPredication = 1; } def MVE_VABAVs8 : MVE_VABAV<"s8", 0b0, 0b00>; @@ -532,6 +533,7 @@ class MVE_VADDV<string iname, string suffix, dag iops, string cstr, let Inst{5} = A; let Inst{3-1} = Qm{2-0}; let Inst{0} = 0b0; + let invalidForTailPredication = 1; } multiclass MVE_VADDV_A<string suffix, bit U, bits<2> size, @@ -582,6 +584,7 @@ class MVE_VADDLV<string iname, string suffix, dag iops, string cstr, let Inst{5} = A; let Inst{3-1} = Qm{2-0}; let Inst{0} = 0b0; + let invalidForTailPredication = 1; } multiclass MVE_VADDLV_A<string suffix, bit U, list<dag> pattern=[]> { @@ -619,6 +622,7 @@ class MVE_VMINMAXNMV<string iname, string suffix, bit sz, let Inst{0} = 0b0; let Predicates = [HasMVEFloat]; + let invalidForTailPredication = 1; } multiclass MVE_VMINMAXNMV_fty<string iname, bit bit_7, list<dag> pattern=[]> { @@ -655,6 +659,7 @@ class MVE_VMINMAXV<string iname, string suffix, bit U, bits<2> size, let Inst{6-5} = 0b00; let Inst{3-1} = Qm{2-0}; let Inst{0} = 0b0; + let invalidForTailPredication = 1; } multiclass MVE_VMINMAXV_ty<string iname, bit bit_7, list<dag> pattern=[]> { @@ -727,6 +732,7 @@ class MVE_VMLAMLSDAV<string iname, string suffix, dag iops, string cstr, let Inst{5} = A; let Inst{3-1} = Qm{2-0}; let Inst{0} = bit_0; + let invalidForTailPredication = 1; } multiclass MVE_VMLAMLSDAV_A<string iname, string x, string suffix, @@ -802,6 +808,7 @@ class MVE_VMLALDAVBase<string iname, string suffix, dag iops, string cstr, let Inst{5} = A; let Inst{3-1} = Qm{2-0}; let Inst{0} = bit_0; + let invalidForTailPredication = 1; } multiclass MVE_VMLALDAVBase_A<string iname, string x, string suffix, diff --git a/llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h b/llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h index c4daafe8ee9..6893229580c 100644 --- a/llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h +++ b/llvm/lib/Target/ARM/MCTargetDesc/ARMBaseInfo.h @@ -393,6 +393,10 @@ namespace ARMII { // in an IT block). ThumbArithFlagSetting = 1 << 19, + // Whether an instruction should be excluded from an MVE tail-predicated + // loop. + InvalidForTailPredication = 1 << 20, + //===------------------------------------------------------------------===// // Code domain. DomainShift = 15, |

