This is an archive of the discontinued LLVM Phabricator instance.

[ARM] Setting missing isLaneQ attribute on Neon Intrisics definitions
ClosedPublic

Authored by pratlucas on Feb 14 2020, 8:11 AM.

Details

Summary

Some of the *_laneq intrinsics defined in arm_neon.td were missing the
setting of the isLaneQ attribute. This patch sets the attribute on the
related definitions, as they will be required to properly perform range
checks on their lane arguments.

Diff Detail

Event Timeline

pratlucas created this revision.Feb 14 2020, 8:11 AM
Herald added a project: Restricted Project. · View Herald TranscriptFeb 14 2020, 8:12 AM
pratlucas edited the summary of this revision. (Show Details)Feb 14 2020, 8:25 AM
pratlucas added reviewers: jmolloy, t.p.northover.
dnsampaio accepted this revision.Mar 5 2020, 2:27 AM
dnsampaio added a subscriber: dnsampaio.

LGTM with a nit: we can save some space using sintax like this:

let isLaneQ = 1 in
def UDOT_LANEQ : SOpInst<"vdot_laneq", "..(<<)(<<Q)I", "iUiQiQUi", OP_DOT_LNQ>;

or concatenating those that are just one after the other:

let isLaneQ = 1 in {
  def VFMLAL_LANEQ_LOW  : SOpInst<"vfmlal_laneq_low",  "(F>)(F>)F(FQ)I", "hQh", OP_FMLAL_LN>;
   def VFMLSL_LANEQ_LOW  : SOpInst<"vfmlsl_laneq_low",  "(F>)(F>)F(FQ)I", "hQh", OP_FMLSL_LN>;
   def VFMLAL_LANEQ_HIGH : SOpInst<"vfmlal_laneq_high", "(F>)(F>)F(FQ)I", "hQh", OP_FMLAL_LN_Hi>;
   def VFMLSL_LANEQ_HIGH : SOpInst<"vfmlsl_laneq_high", "(F>)(F>)F(FQ)I", "hQh", OP_FMLSL_LN_Hi>;
}
This revision is now accepted and ready to land.Mar 5 2020, 2:27 AM
This revision was automatically updated to reflect the committed changes.