[clang][AArch64][SVE] Avoid going through memory for VLAT <-> VLST casts
authorJoe Ellis <joe.ellis@arm.com>
Wed, 16 Dec 2020 09:01:28 +0000 (09:01 +0000)
committerJoe Ellis <joe.ellis@arm.com>
Wed, 16 Dec 2020 12:24:32 +0000 (12:24 +0000)
commitdad07baf123e672b1d5d5e7c21e73b92399d5a0c
tree0df608812c948e217df4ca1c1f25e02e443779f5
parent9322e571d7356a9a0e86aab954c3a916f0f07855
[clang][AArch64][SVE] Avoid going through memory for VLAT <-> VLST casts

This change makes use of the llvm.vector.extract intrinsic to avoid
going through memory when performing bitcasts between vector-length
agnostic types and vector-length specific types.

Depends on D91362

Reviewed By: c-rhodes

Differential Revision: https://reviews.llvm.org/D92761
clang/lib/CodeGen/CGExprScalar.cpp
clang/test/CodeGen/aarch64-sve-acle-__ARM_FEATURE_SVE_VECTOR_OPERATORS.c
clang/test/CodeGen/attr-arm-sve-vector-bits-bitcast.c
clang/test/CodeGen/attr-arm-sve-vector-bits-call.c
clang/test/CodeGen/attr-arm-sve-vector-bits-cast.c
clang/test/CodeGen/attr-arm-sve-vector-bits-codegen.c
clang/test/CodeGen/attr-arm-sve-vector-bits-globals.c
llvm/include/llvm/IR/IRBuilder.h