llvmbot wrote:

<!--LLVM PR SUMMARY COMMENT-->

@llvm/pr-subscribers-backend-x86

Author: Nick Sarnie (sarnex)

<details>
<summary>Changes</summary>

Warnings should suggest changes that are valid on both MSVC and Clang where 
possible. 
Right now when using ARM intrinsics without including `arm_acle.h`, we throw a 
warning saying to include it or provide a declaration for the function.
MSVC doesn't have any ARM-intrinsic specific header, so include Clang's ARM 
intrinsic header (`arm_acle.h`) in `intrin.h`, and update the intrinsic usage 
warnings to suggest `intrin.h`.

See https://github.com/llvm/llvm-project/pull/140910 for more info.

---
Full diff: https://github.com/llvm/llvm-project/pull/144172.diff


7 Files Affected:

- (modified) clang/include/clang/Basic/BuiltinHeaders.def (-1) 
- (modified) clang/include/clang/Basic/BuiltinsAArch64.def (+8-8) 
- (modified) clang/include/clang/Basic/BuiltinsARM.def (+8-8) 
- (modified) clang/lib/Headers/intrin.h (+4) 
- (modified) 
clang/test/CodeGen/arm-former-microsoft-intrinsics-header-warning.c (+8-8) 
- (modified) 
clang/test/CodeGen/arm64-former-microsoft-intrinsics-header-warning.c (+8-8) 
- (added) clang/test/Headers/arm-acle-no-direct-include.c (+7) 


``````````diff
diff --git a/clang/include/clang/Basic/BuiltinHeaders.def 
b/clang/include/clang/Basic/BuiltinHeaders.def
index 22668ec7a3396..8e4a2f9bee9aa 100644
--- a/clang/include/clang/Basic/BuiltinHeaders.def
+++ b/clang/include/clang/Basic/BuiltinHeaders.def
@@ -12,7 +12,6 @@
 
//===----------------------------------------------------------------------===//
 
 HEADER(NO_HEADER, nullptr)
-HEADER(ARMACLE_H, "arm_acle.h")
 HEADER(BLOCKS_H, "Blocks.h")
 HEADER(COMPLEX_H, "complex.h")
 HEADER(CTYPE_H, "ctype.h")
diff --git a/clang/include/clang/Basic/BuiltinsAArch64.def 
b/clang/include/clang/Basic/BuiltinsAArch64.def
index 8867a9fe09fb9..4a1db34b9b30f 100644
--- a/clang/include/clang/Basic/BuiltinsAArch64.def
+++ b/clang/include/clang/Basic/BuiltinsAArch64.def
@@ -50,11 +50,11 @@ BUILTIN(__builtin_arm_wfi, "v", "")
 BUILTIN(__builtin_arm_sev, "v", "")
 BUILTIN(__builtin_arm_sevl, "v", "")
 BUILTIN(__builtin_arm_chkfeat, "WUiWUi", "")
-TARGET_HEADER_BUILTIN(__yield, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfe,   "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfi,   "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sev,   "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sevl,  "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__yield, "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__wfe,   "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__wfi,   "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__sev,   "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__sevl,  "v", "h", INTRIN_H, ALL_LANGUAGES, "")
 
 // Like __builtin_trap but provide an 16-bit immediate reason code (which goes 
into `brk #N`).
 BUILTIN(__builtin_arm_trap, "vUIs", "nr")
@@ -87,9 +87,9 @@ TARGET_BUILTIN(__builtin_arm_mops_memset_tag, "v*v*iz", "", 
"mte,mops")
 BUILTIN(__builtin_arm_dmb, "vUi", "nc")
 BUILTIN(__builtin_arm_dsb, "vUi", "nc")
 BUILTIN(__builtin_arm_isb, "vUi", "nc")
-TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", INTRIN_H, ALL_LANGUAGES, "")
 
 TARGET_BUILTIN(__builtin_arm_jcvt, "Zid", "nc", "v8.3a")
 
diff --git a/clang/include/clang/Basic/BuiltinsARM.def 
b/clang/include/clang/Basic/BuiltinsARM.def
index 2592e25e95c37..20a41dc248859 100644
--- a/clang/include/clang/Basic/BuiltinsARM.def
+++ b/clang/include/clang/Basic/BuiltinsARM.def
@@ -186,19 +186,19 @@ BUILTIN(__builtin_arm_wfi, "v", "")
 BUILTIN(__builtin_arm_sev, "v", "")
 BUILTIN(__builtin_arm_sevl, "v", "")
 BUILTIN(__builtin_arm_dbg, "vUi", "")
-TARGET_HEADER_BUILTIN(__yield, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfe, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__wfi, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sev, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__sevl, "v", "h", ARMACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__yield, "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__wfe, "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__wfi, "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__sev, "v", "h", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__sevl, "v", "h", INTRIN_H, ALL_LANGUAGES, "")
 
 // Data barrier
 BUILTIN(__builtin_arm_dmb, "vUi", "nc")
 BUILTIN(__builtin_arm_dsb, "vUi", "nc")
 BUILTIN(__builtin_arm_isb, "vUi", "nc")
-TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
-TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", ARMACLE_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__dmb, "vUi", "nch", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__dsb, "vUi", "nch", INTRIN_H, ALL_LANGUAGES, "")
+TARGET_HEADER_BUILTIN(__isb, "vUi", "nch", INTRIN_H, ALL_LANGUAGES, "")
 
 // Prefetch
 BUILTIN(__builtin_arm_prefetch, "vvC*UiUi", "nc")
diff --git a/clang/lib/Headers/intrin.h b/clang/lib/Headers/intrin.h
index 3dd1eb45817d4..969a5bb4aa81f 100644
--- a/clang/lib/Headers/intrin.h
+++ b/clang/lib/Headers/intrin.h
@@ -30,6 +30,10 @@
 #include <arm64intr.h>
 #endif
 
+#if defined(__ARM_ACLE)
+#include <arm_acle.h>
+#endif
+
 /* For the definition of jmp_buf. */
 #if __STDC_HOSTED__
 #include <setjmp.h>
diff --git 
a/clang/test/CodeGen/arm-former-microsoft-intrinsics-header-warning.c 
b/clang/test/CodeGen/arm-former-microsoft-intrinsics-header-warning.c
index 8edcbbeb0375d..19216629373ef 100644
--- a/clang/test/CodeGen/arm-former-microsoft-intrinsics-header-warning.c
+++ b/clang/test/CodeGen/arm-former-microsoft-intrinsics-header-warning.c
@@ -3,48 +3,48 @@
 
 void check__dmb(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __dmb(0);
 }
 
 void check__dsb(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __dsb(0);
 }
 
 void check__isb(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __isb(0);
 }
 
 void check__yield(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __yield();
 }
 
 void check__wfe(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __wfe();
 }
 
 void check__wfi(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __wfi();
 }
 
 void check__sev(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __sev();
 }
 
 void check__sevl(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __sevl();
 }
diff --git 
a/clang/test/CodeGen/arm64-former-microsoft-intrinsics-header-warning.c 
b/clang/test/CodeGen/arm64-former-microsoft-intrinsics-header-warning.c
index 52fed49db4dd2..3f829d39b413b 100644
--- a/clang/test/CodeGen/arm64-former-microsoft-intrinsics-header-warning.c
+++ b/clang/test/CodeGen/arm64-former-microsoft-intrinsics-header-warning.c
@@ -6,48 +6,48 @@
 
 void check__dmb(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __dmb(0);
 }
 
 void check__dsb(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __dsb(0);
 }
 
 void check__isb(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __isb(0);
 }
 
 void check__yield(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __yield();
 }
 
 void check__wfe(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __wfe();
 }
 
 void check__wfi(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __wfi();
 }
 
 void check__sev(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __sev();
 }
 
 void check__sevl(void) {
   // expected-warning@+2{{call to undeclared library function}}
-  // expected-note@+1{{include the header <arm_acle.h> or explicitly provide a 
declaration for}}
+  // expected-note@+1{{include the header <intrin.h> or explicitly provide a 
declaration for}}
   __sevl();
 }
diff --git a/clang/test/Headers/arm-acle-no-direct-include.c 
b/clang/test/Headers/arm-acle-no-direct-include.c
new file mode 100644
index 0000000000000..26e7c914ce833
--- /dev/null
+++ b/clang/test/Headers/arm-acle-no-direct-include.c
@@ -0,0 +1,7 @@
+// RUN: %clang_cl --target=aarch64-windows-msvc -Xclang -verify /E 
-U__STDC_HOSTED__ -Wno-builtin-macro-redefined %s 2>&1 | FileCheck %s
+
+// expected-no-diagnostics
+
+// CHECK: void __yield(void);
+#include <intrin.h>
+void f() { __yield(); }

``````````

</details>


https://github.com/llvm/llvm-project/pull/144172
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to