Add support for vcadd_* family of intrinsics. This set of intrinsics is
available in Armv8.3-A.
The fp16 versions require the FP16 extension, which has been available
(opt-in) since Armv8.2-A.
| Paths 
 |  Differential  D70862  
[ARM][AArch64] Complex addition Neon intrinsics for Armv8.3-A ClosedPublic Authored by vhscampos on Nov 29 2019, 9:10 AM. 
Details Summary Add support for vcadd_* family of intrinsics. This set of intrinsics is The fp16 versions require the FP16 extension, which has been available 
Diff Detail 
 Event TimelineHerald added projects: Restricted Project, Restricted Project.  ·  View Herald TranscriptNov 29 2019, 9:10 AM Herald added subscribers: llvm-commits, cfe-commits, hiraditya, kristof.beyls.  ·  View Herald Transcript Comment Actions Why are you only implementing rot90 and rot270 intrinsics? My quick calculations made rot0 and rot90 the natural ones to implement a bog-standard complex multiplication, but even if I slipped up there I'd expect the others to be useful in some situations. 
 Comment Actions 
 Sorry, ignore that. I didn't notice you were doing the addition instructions rather than multiplication. LGTM! This revision is now accepted and ready to land.Dec 2 2019, 1:36 AM Closed by commit rGdcf11c5e86ce: [ARM][AArch64] Complex addition Neon intrinsics for Armv8.3-A (authored by vhscampos).  ·  Explain WhyDec 2 2019, 6:40 AM This revision was automatically updated to reflect the committed changes. 
Revision Contents 
 
Diff 231701 clang/include/clang/Basic/arm_neon.td
 clang/lib/Basic/Targets/AArch64.cpp
 clang/lib/Basic/Targets/ARM.h
 clang/lib/Basic/Targets/ARM.cpp
 clang/lib/CodeGen/CGBuiltin.cpp
 
 clang/test/CodeGen/aarch64-neon-vcadd.c
 
 clang/test/CodeGen/arm-neon-vcadd.c
 
 llvm/include/llvm/IR/IntrinsicsAArch64.td
 llvm/include/llvm/IR/IntrinsicsARM.td
 llvm/lib/Target/AArch64/AArch64InstrInfo.td
 
 llvm/lib/Target/ARM/ARMInstrNEON.td
 
 llvm/test/CodeGen/AArch64/neon-vcadd.ll
 
 llvm/test/CodeGen/ARM/neon-vcadd.ll
 
 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
I take it you can't fuse this with vcadd_rot90 because NeonEmitter tries to call it vcadd_rot90q? If so, I think your solution is reasonable, the rotations are a tiny edge-case in the ISA.