summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEli Friedman <efriedma@quicinc.com>2019-10-17 21:57:28 +0000
committerEli Friedman <efriedma@quicinc.com>2019-10-17 21:57:28 +0000
commit5b0e039a7a7dc027ddadb1f3d350f2b53e30a479 (patch)
tree505b565f123ee2fcb97365619892c297709daf34
parent98a2ae7dadf897305e1cc2d9a5d63edf925c07f7 (diff)
downloadbcm5719-llvm-5b0e039a7a7dc027ddadb1f3d350f2b53e30a479.tar.gz
bcm5719-llvm-5b0e039a7a7dc027ddadb1f3d350f2b53e30a479.zip
[ARM] Fix arm_neon.h with -flax-vector-conversions=none, part 3
It's completely impossible to check that I've actually found all the issues, due to the use of macros in arm_neon.h, but hopefully this time it'll take more than a few hours for someone to find another issue. I have no idea why, but apparently there's a rule that some, but not all, builtins which should take an fp16 vector actually take an int8 vector as an argument. Fix this, and add test coverage. Differential Revision: https://reviews.llvm.org/D68838 llvm-svn: 375179
-rw-r--r--clang/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c2
-rw-r--r--clang/utils/TableGen/NeonEmitter.cpp3
2 files changed, 3 insertions, 2 deletions
diff --git a/clang/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c b/clang/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c
index 55e91c2ca69..fc339faa6cd 100644
--- a/clang/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c
+++ b/clang/test/CodeGen/aarch64-v8.2a-neon-intrinsics.c
@@ -1,5 +1,5 @@
// RUN: %clang_cc1 -triple arm64-none-linux-gnu -target-feature +neon -target-feature +fullfp16 -target-feature +v8.2a\
-// RUN: -fallow-half-arguments-and-returns -S -disable-O0-optnone -emit-llvm -o - %s \
+// RUN: -fallow-half-arguments-and-returns -flax-vector-conversions=none -S -disable-O0-optnone -emit-llvm -o - %s \
// RUN: | opt -S -mem2reg \
// RUN: | FileCheck %s
diff --git a/clang/utils/TableGen/NeonEmitter.cpp b/clang/utils/TableGen/NeonEmitter.cpp
index 2cf7d902911..9d668a28153 100644
--- a/clang/utils/TableGen/NeonEmitter.cpp
+++ b/clang/utils/TableGen/NeonEmitter.cpp
@@ -1442,7 +1442,8 @@ void Intrinsic::emitBodyAsBuiltinCall() {
}
// Check if an explicit cast is needed.
- if (CastToType.isVector() && LocalCK == ClassB) {
+ if (CastToType.isVector() &&
+ (LocalCK == ClassB || (T.isHalf() && !T.isScalarForMangling()))) {
CastToType.makeInteger(8, true);
Arg = "(" + CastToType.str() + ")" + Arg;
} else if (CastToType.isVector() && LocalCK == ClassI) {
OpenPOWER on IntegriCloud