Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
devel/llvm16: backport fix for generate arm_neon.h
Backport db49231: [clang][BFloat] Avoid redefining bfloat16_t in arm_neon.h. This fixes builds of FreeBSD/aarch64. The change was merged to the llvm16 in src prior to commit. (cherry picked from commit 4b88732)
- Loading branch information
1 parent
5e81b03
commit 4ab820d
Showing
2 changed files
with
51 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
commit db492316399a0edc26788265c7fce78c63a0f838 | ||
Author: Dimitry Andric <dimitry@andric.com> | ||
Date: Wed May 3 17:53:59 2023 +0200 | ||
|
||
[clang][BFloat] Avoid redefining bfloat16_t in arm_neon.h | ||
|
||
As of https://reviews.llvm.org/D79708, clang-tblgen generates `arm_neon.h`, | ||
`arm_sve.h` and `arm_bf16.h`, and all those generated files will contain a | ||
typedef of `bfloat16_t`. However, `arm_neon.h` and `arm_sve.h` include | ||
`arm_bf16.h` immediately before their own typedef: | ||
|
||
#include <arm_bf16.h> | ||
typedef __bf16 bfloat16_t; | ||
|
||
With a recent version of clang (I used 16.0.1) this results in warnings: | ||
|
||
/usr/lib/clang/16/include/arm_neon.h:38:16: error: redefinition of typedef 'bfloat16_t' is a C11 feature [-Werror,-Wtypedef-redefinition] | ||
|
||
Since `arm_bf16.h` is very likely supposed to be the one true place where | ||
`bfloat16_t` is defined, I propose to delete the duplicate typedefs from the | ||
generated `arm_neon.h` and `arm_sve.h`. | ||
|
||
Reviewed By: sdesmalen, simonbutcher | ||
|
||
Differential Revision: https://reviews.llvm.org/D148822 | ||
|
||
diff --git clang/utils/TableGen/NeonEmitter.cpp clang/utils/TableGen/NeonEmitter.cpp | ||
index 51bb774c6da9..6ef5790731a6 100644 | ||
--- clang/utils/TableGen/NeonEmitter.cpp | ||
+++ clang/utils/TableGen/NeonEmitter.cpp | ||
@@ -2353,7 +2353,6 @@ void NeonEmitter::run(raw_ostream &OS) { | ||
OS << "#include <stdint.h>\n\n"; | ||
|
||
OS << "#include <arm_bf16.h>\n"; | ||
- OS << "typedef __bf16 bfloat16_t;\n"; | ||
|
||
// Emit NEON-specific scalar typedefs. | ||
OS << "typedef float float32_t;\n"; | ||
diff --git clang/utils/TableGen/SveEmitter.cpp clang/utils/TableGen/SveEmitter.cpp | ||
index bc50cbad4b54..d5d3f5fe558a 100644 | ||
--- clang/utils/TableGen/SveEmitter.cpp | ||
+++ clang/utils/TableGen/SveEmitter.cpp | ||
@@ -1103,7 +1103,6 @@ void SVEEmitter::createHeader(raw_ostream &OS) { | ||
OS << "typedef __SVBFloat16_t svbfloat16_t;\n"; | ||
|
||
OS << "#include <arm_bf16.h>\n"; | ||
- OS << "typedef __bf16 bfloat16_t;\n"; | ||
|
||
OS << "typedef __SVFloat32_t svfloat32_t;\n"; | ||
OS << "typedef __SVFloat64_t svfloat64_t;\n"; |