[BFloat] Add convert/copy instrinsic support
authorMikhail Maltsev <mikhail.maltsev@arm.com>
Tue, 23 Jun 2020 14:24:33 +0000 (14:24 +0000)
committerMikhail Maltsev <mikhail.maltsev@arm.com>
Tue, 23 Jun 2020 14:27:05 +0000 (14:27 +0000)
commit3f353a2e5a98d19be2a4d7414b8eb258c32965fd
treeb75f05dfec51ee0fc158703797dc2b421bf0be78
parentdb777eaea3a7bfd6c02a3f8d5e5a42bd90943690
[BFloat] Add convert/copy instrinsic support

This patch is part of a series implementing the Bfloat16 extension of the Armv8.6-a architecture, as detailed here:

https://community.arm.com/developer/ip-products/processors/b/processors-ip-blog/posts/arm-architecture-developments-armv8-6-a

Specifically it adds intrinsic support in clang and llvm for Arm and AArch64.

The bfloat type, and its properties are specified in the Arm Architecture Reference Manual:

https://developer.arm.com/docs/ddi0487/latest/arm-architecture-reference-manual-armv8-for-armv8-a-architecture-profile

The following people contributed to this patch:
  - Alexandros Lamprineas
  - Luke Cheeseman
  - Mikhail Maltsev
  - Momchil Velikov
  - Luke Geeson

Differential Revision: https://reviews.llvm.org/D80928
14 files changed:
clang/include/clang/Basic/arm_neon.td
clang/lib/CodeGen/CGBuiltin.cpp
clang/test/CodeGen/aarch64-bf16-lane-intrinsics.c [new file with mode: 0644]
clang/test/CodeGen/arm-bf16-convert-intrinsics.c [new file with mode: 0644]
clang/test/Sema/aarch64-neon-bf16-ranges.c [new file with mode: 0644]
clang/utils/TableGen/NeonEmitter.cpp
llvm/include/llvm/IR/IntrinsicsAArch64.td
llvm/include/llvm/IR/IntrinsicsARM.td
llvm/lib/Target/AArch64/AArch64InstrFormats.td
llvm/lib/Target/AArch64/AArch64InstrInfo.td
llvm/lib/Target/ARM/ARMISelDAGToDAG.cpp
llvm/test/CodeGen/AArch64/bf16-convert-intrinsics.ll [new file with mode: 0644]
llvm/test/CodeGen/AArch64/bf16-vector-shuffle.ll
llvm/test/CodeGen/ARM/bf16-convert-intrinsics.ll [new file with mode: 0644]