Skip to content

Commit

Permalink
[ARM] Fix arm_neon.h with -flax-vector-conversions=none, part 3
Browse files Browse the repository at this point in the history
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
  • Loading branch information
efriedma-quic committed Oct 17, 2019
1 parent 98a2ae7 commit 5b0e039
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
2 changes: 1 addition & 1 deletion 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

Expand Down
3 changes: 2 additions & 1 deletion clang/utils/TableGen/NeonEmitter.cpp
Expand Up @@ -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) {
Expand Down

0 comments on commit 5b0e039

Please sign in to comment.