This is an archive of the discontinued LLVM Phabricator instance.

[ARM,CDE] Implement CDE unpredicated Q-register intrinsics
ClosedPublic

Authored by miyuki on Mar 17 2020, 10:08 AM.

Details

Summary

This patch implements the following intrinsics:

uint8x16_t __arm_vcx1q_u8 (int coproc, uint32_t imm);
T __arm_vcx1qa(int coproc, T acc, uint32_t imm);
T __arm_vcx2q(int coproc, T n, uint32_t imm);
uint8x16_t __arm_vcx2q_u8(int coproc, T n, uint32_t imm);
T __arm_vcx2qa(int coproc, T acc, U n, uint32_t imm);
T __arm_vcx3q(int coproc, T n, U m, uint32_t imm);
uint8x16_t __arm_vcx3q_u8(int coproc, T n, U m, uint32_t imm);
T __arm_vcx3qa(int coproc, T acc, U n, V m, uint32_t imm);

Most of them are polymorphic. Furthermore, some intrinsics are
polymorphic by 2 or 3 parameter types, such polymorphism is not
supported by the existing MVE/CDE tablegen backends, also we don't
really want to have a combinatorial explosion caused by 1000 different
combinations of 3 vector types. Because of this some intrinsics are
implemented as macros involving a cast of the polymorphic arguments to
uint8x16_t.

The IR intrinsics are even more restricted in terms of types: all MVE
vectors are cast to v16i8.

Diff Detail

Event Timeline

miyuki created this revision.Mar 17 2020, 10:08 AM
miyuki updated this revision to Diff 251039.Mar 18 2020, 4:51 AM

Fixed formatting.

MarkMurrayARM accepted this revision.Mar 20 2020, 6:26 AM

I like to use of the macros instead of a huge cross-product of types.

This revision is now accepted and ready to land.Mar 20 2020, 6:26 AM
This revision was automatically updated to reflect the committed changes.