[PATCH] D67904: [ARM][MVE] More invalidForTailPredication insts
Dave Green via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 24 05:35:40 PDT 2019
dmgreen added a comment.
Exactly which instructions can and cannot go into tail predicated loops is still a bit of a mystery to me. As we talked about, a whitelist may be simpler than a blacklist to make sure we account for everything. (Thats maybe an approach if this ends up needing more in the future).
One thing I thought of, some lane moves may go through standard vmovs, or the vmovx and vins fp16 instructions. Also will interleaved fp instructions be fine in the same loop?
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:1945
def MVE_VSHLC : MVE_p<(outs rGPR:$RdmDest, MQPR:$Qd),
(ins MQPR:$QdSrc, rGPR:$RdmSrc, long_shift:$imm),
----------------
This has a cross beat carry, although I'm not sure that makes it invalid for tail predication.
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:1976
class MVE_VMOVL<string iname, string suffix, bits<2> sz, bit U,
list<dag> pattern=[]>
----------------
VMOVL is used to perform widening.
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:2089
defm MVE_VSHLL_lws8 : MVE_VSHLL_lw<"vshll", "s8", 0b00, 0b0, "$Qd, $Qm, #8">;
defm MVE_VSHLL_lws16 : MVE_VSHLL_lw<"vshll", "s16", 0b01, 0b0, "$Qd, $Qm, #16">;
----------------
VSHLL?
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:3365
class MVE_VCMUL<string iname, string suffix, bit size, string cstr="", list<dag> pattern=[]>
: MVE_qDest_qSrc<iname, suffix, (outs MQPR:$Qd),
----------------
Some of the complex instructions needed earlyclobber on them as they reach cross beat.
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:3387
class MVE_VMULL<string iname, string suffix, bit bit_28, bits<2> bits_21_20,
bit T, string cstr, list<dag> pattern=[]>
----------------
VMULL?
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:3489
class MVE_VCVT_ff<string iname, string suffix, bit op, bit T,
list<dag> pattern=[]>
----------------
Is anything that is top/bottom a problem?
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:3536
class MVE_VADCSBC<string iname, bit I, bit subtract,
dag carryin, list<dag> pattern=[]>
----------------
Cross beat carry again.
================
Comment at: lib/Target/ARM/ARMInstrMVE.td:3931
class MVE_VxDUP<string iname, string suffix, bits<2> size, bit bit_12,
list<dag> pattern=[]>
----------------
VDUP puts the value into all lanes, but I presume that would be OK.
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D67904/new/
https://reviews.llvm.org/D67904
More information about the llvm-commits
mailing list