This is an archive of the discontinued LLVM Phabricator instance.

[AArch64][SVE] Correct intrinsics and patterns for logical predicate instructions
ClosedPublic

Authored by paulwalker-arm on Dec 19 2019, 9:36 AM.

Details

Summary
In general SVE intrinsics are considered predicated and merging
with everything else having suitable decoration.  For predicated
zeroing operations (like the predicate logical instructions) we
use the "_z" suffix.  After this change all intrinsics use their
expected names (i.e. orr instead of or and eor instead of xor).

I've removed intrinsics and patterns for condition code setting
instructions as that data is not returned as part of the intrinsic.
The expectation is to ask for a cc flag explicitly.

For example:
  a = and_z(pg, p1, p2)
  cc = ptest_<flag>(pg, a)

With the code generator expected to use "s" variants of instructions
when available.

Diff Detail

Event Timeline

paulwalker-arm created this revision.Dec 19 2019, 9:36 AM
Herald added a reviewer: efriedma. · View Herald Transcript
Herald added a project: Restricted Project. · View Herald Transcript
efriedma accepted this revision.Dec 19 2019, 10:06 AM

LGTM

I probably should have spotted the issue with the "s" intrinsics earlier; I wasn't really thinking about it.

This revision is now accepted and ready to land.Dec 19 2019, 10:06 AM
This revision was automatically updated to reflect the committed changes.