[clang] Add noipa when lowering __attribute__((optnone)) (PR #218782)
via cfe-commits
cfe-commits at lists.llvm.org
Tue Aug 25 13:49:03 PDT 2026
llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT-->
@llvm/pr-subscribers-backend-risc-v
Author: David Blaikie (dwblaikie)
<details>
<summary>Changes</summary>
Matches GCC behavior for optnone, and a more general sense of what
"optnone" means, when it comes to interprocedural optimizations.
Some history here:
https://discourse.llvm.org/t/revisiting-refining-the-definition-of-optnone-with-interprocedural-transformations/58095/38
https://reviews.llvm.org/D101011
https://discourse.llvm.org/t/noipa-continues/74411
https://github.com/llvm/llvm-project/pull/203304
---
Patch is 260.89 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/218782.diff
97 Files Affected:
- (modified) clang/lib/CodeGen/CodeGenModule.cpp (+5)
- (modified) clang/test/CXX/special/class.dtor/p3-0x.cpp (+1-1)
- (modified) clang/test/CodeGen/2008-04-08-NoExceptions.c (+1-1)
- (modified) clang/test/CodeGen/AArch64/cpu-supports-target.c (+16-10)
- (modified) clang/test/CodeGen/AArch64/fmv-detection.c (+54-48)
- (modified) clang/test/CodeGen/AArch64/fmv-explicit-priority.c (+22-16)
- (modified) clang/test/CodeGen/AArch64/fmv-mix-explicit-implicit-default.c (+34-22)
- (modified) clang/test/CodeGen/AArch64/fmv-resolver-emission.c (+34-28)
- (modified) clang/test/CodeGen/AArch64/fmv-unreachable-version.c (+8-8)
- (modified) clang/test/CodeGen/AArch64/mixed-target-attributes.c (+30-18)
- (modified) clang/test/CodeGen/AArch64/targetattr.c (+25-22)
- (modified) clang/test/CodeGen/LoongArch/targetattr-la32.c (+2-2)
- (modified) clang/test/CodeGen/LoongArch/targetattr-la64.c (+9-9)
- (modified) clang/test/CodeGen/PowerPC/ppc64-complex-parms.c (+1-1)
- (modified) clang/test/CodeGen/PowerPC/ppc64-complex-return.c (+1-1)
- (modified) clang/test/CodeGen/PowerPC/ppc64-extend.c (+1-1)
- (modified) clang/test/CodeGen/address-space-field1.c (+1-1)
- (modified) clang/test/CodeGen/alias.c (+2-2)
- (modified) clang/test/CodeGen/amdgpu-abi-version.c (+2-2)
- (modified) clang/test/CodeGen/amdgpu-address-spaces.cpp (+1-1)
- (modified) clang/test/CodeGen/amdgpu-builtin-is-invocable-subarch.c (+2-2)
- (modified) clang/test/CodeGen/amdgpu-builtin-is-invocable.c (+3-3)
- (modified) clang/test/CodeGen/amdgpu-builtin-processor-is-subarch.c (+3-3)
- (modified) clang/test/CodeGen/amdgpu-builtin-processor-is.c (+3-3)
- (modified) clang/test/CodeGen/arm64ec-hybrid-patchable.c (+6-6)
- (modified) clang/test/CodeGen/attr-naked.c (+1-1)
- (modified) clang/test/CodeGen/attr-target-clones-aarch64.c (+79-61)
- (modified) clang/test/CodeGen/attr-target-clones-riscv.c (+8-8)
- (modified) clang/test/CodeGen/attr-target-version-riscv.c (+7-7)
- (modified) clang/test/CodeGen/attributes.c (+2-2)
- (modified) clang/test/CodeGen/fp-floatcontrol-stack.cpp (+20-20)
- (modified) clang/test/CodeGen/incomplete-function-type-2.c (+1-1)
- (modified) clang/test/CodeGen/link-bitcode-file.c (+1-1)
- (modified) clang/test/CodeGen/linux-kernel-struct-union-initializer.c (+1-1)
- (modified) clang/test/CodeGen/linux-kernel-struct-union-initializer2.c (+1-1)
- (modified) clang/test/CodeGen/micromips-attr.c (+2-2)
- (modified) clang/test/CodeGen/mips16-attr.c (+2-2)
- (modified) clang/test/CodeGen/mrtd.c (+1-1)
- (modified) clang/test/CodeGen/multi-aix-builtin-cpu-supports.c (+1-1)
- (modified) clang/test/CodeGen/nofpclass.c (+33-33)
- (modified) clang/test/CodeGen/nsan-basic.c (+1-1)
- (modified) clang/test/CodeGen/nvptx_attributes.c (+2-2)
- (modified) clang/test/CodeGen/pragma-weak.c (+2-2)
- (modified) clang/test/CodeGen/sanitize-numerical-stability-attr.cpp (+3-3)
- (modified) clang/test/CodeGen/sanitize-thread-attr.cpp (+1-1)
- (modified) clang/test/CodeGen/sanitize-type-attr.cpp (+1-1)
- (modified) clang/test/CodeGen/sanitize-type-globals.cpp (+1-1)
- (modified) clang/test/CodeGen/stackrealign-main.c (+2-2)
- (modified) clang/test/CodeGen/unwind-attr.c (+3-3)
- (modified) clang/test/CodeGenCUDA/amdgpu-kernel-attrs.cu (+1-1)
- (modified) clang/test/CodeGenCUDA/convergent.cu (+3-3)
- (modified) clang/test/CodeGenCXX/apple-kext.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/attr-target-clones-riscv.cpp (+7-7)
- (modified) clang/test/CodeGenCXX/attr-target-version-riscv.cpp (+6-6)
- (modified) clang/test/CodeGenCXX/cxx11-exception-spec.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/cxx11-noreturn.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/derived-to-base.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/dynamic-cast-address-space.cpp (+2-2)
- (modified) clang/test/CodeGenCXX/main-norecurse.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/merge-functions.cpp (+5-1)
- (modified) clang/test/CodeGenCXX/microsoft-abi-array-cookies.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/no-exceptions.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/noinline-template.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/optnone-and-attributes.cpp (+2-2)
- (modified) clang/test/CodeGenCXX/optnone-def-decl.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/pr58798.cpp (+10-10)
- (modified) clang/test/CodeGenCXX/reference-cast.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/threadsafe-statics.cpp (+2-2)
- (modified) clang/test/CodeGenCXX/thunks.cpp (+1-1)
- (modified) clang/test/CodeGenCXX/virtual-base-cast.cpp (+1-1)
- (modified) clang/test/CodeGenHIP/default-attributes.hip (+4-4)
- (modified) clang/test/CodeGenHIP/hip_weak_alias.cpp (+2-2)
- (modified) clang/test/CodeGenObjC/gnu-exceptions.m (+1-1)
- (modified) clang/test/CodeGenObjCXX/lambda-expressions.mm (+2-2)
- (modified) clang/test/CodeGenOpenCL/amdgpu-enqueue-kernel.cl (+14-14)
- (modified) clang/test/CodeGenOpenCL/cl20-device-side-enqueue-attributes.cl (+10-10)
- (modified) clang/test/CodeGenOpenCL/cl20-device-side-enqueue.cl (+2-2)
- (modified) clang/test/CodeGenOpenCL/opencl-kernel-call.cl (+56-56)
- (modified) clang/test/CodeGenSYCL/function-attrs.cpp (+6-5)
- (modified) clang/test/CodeGenSYCL/kernel-caller-entry-point.cpp (+16-16)
- (modified) clang/test/CodeGenSYCL/sycl-kernel-entry-point-exceptions.cpp (+4-4)
- (modified) clang/test/Driver/darwin-iphone-defaults.m (+1-1)
- (modified) clang/test/Modules/aarch64-sme-keywords.cppm (+1-1)
- (modified) clang/test/OpenMP/amdgcn-attributes.cpp (+4-4)
- (modified) clang/test/OpenMP/amdgcn_target_global_constructor.cpp (+1-1)
- (modified) clang/test/OpenMP/amdgcn_weak_alias.c (+2-2)
- (modified) clang/test/OpenMP/amdgcn_weak_alias.cpp (+2-2)
- (modified) clang/test/OpenMP/irbuilder_safelen.cpp (+2-2)
- (modified) clang/test/OpenMP/irbuilder_safelen_order_concurrent.cpp (+2-2)
- (modified) clang/test/OpenMP/irbuilder_simd_aligned.cpp (+2-2)
- (modified) clang/test/OpenMP/irbuilder_simdlen.cpp (+2-2)
- (modified) clang/test/OpenMP/irbuilder_simdlen_safelen.cpp (+2-2)
- (modified) clang/test/OpenMP/nvptx_weak_alias.c (+1-1)
- (modified) clang/test/PCH/objc_container.m (+1-1)
- (modified) clang/test/utils/update_cc_test_checks/Inputs/check-attributes.cpp.funcattrs.expected (+1-1)
- (modified) clang/test/utils/update_cc_test_checks/Inputs/generated-funcs.c.generated.all.expected (+3-3)
- (modified) clang/test/utils/update_cc_test_checks/Inputs/generated-funcs.c.no-generated.all.expected (+3-3)
``````````diff
diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp
index 435f67542268a..52a33e4be625d 100644
--- a/clang/lib/CodeGen/CodeGenModule.cpp
+++ b/clang/lib/CodeGen/CodeGenModule.cpp
@@ -3186,6 +3186,11 @@ void CodeGenModule::SetLLVMFunctionAttributesForDefinition(const Decl *D,
// OptimizeNone implies noinline; we should not be inlining such functions.
B.addAttribute(llvm::Attribute::NoInline);
+ // OptimizeNone implies noipa; interprocedural analysis leads to
+ // interprocedural optimization, which can often look equivalent to inlining
+ // or other similar behavior that's undesirable.
+ B.addAttribute(llvm::Attribute::NoIPA);
+
// We still need to handle naked functions even though optnone subsumes
// much of their semantics.
if (D->hasAttr<NakedAttr>())
diff --git a/clang/test/CXX/special/class.dtor/p3-0x.cpp b/clang/test/CXX/special/class.dtor/p3-0x.cpp
index 857bdca557fdc..b60b1b895a88f 100644
--- a/clang/test/CXX/special/class.dtor/p3-0x.cpp
+++ b/clang/test/CXX/special/class.dtor/p3-0x.cpp
@@ -176,4 +176,4 @@ struct TVC : VX
template <typename T>
TVC<T>::~TVC() {}
-// CHECK: attributes [[ATTRGRP]] = { mustprogress noinline nounwind{{.*}} }
+// CHECK: attributes [[ATTRGRP]] = { mustprogress noipa noinline nounwind{{.*}} }
diff --git a/clang/test/CodeGen/2008-04-08-NoExceptions.c b/clang/test/CodeGen/2008-04-08-NoExceptions.c
index 9388efb825a10..3a936aa1cc31d 100644
--- a/clang/test/CodeGen/2008-04-08-NoExceptions.c
+++ b/clang/test/CodeGen/2008-04-08-NoExceptions.c
@@ -9,4 +9,4 @@ void g(void) {
// CHECK-NOT: declare void @f() [[NUW]]
-// CHECK: attributes [[NUW]] = { noinline nounwind{{.*}} }
+// CHECK: attributes [[NUW]] = { noipa noinline nounwind{{.*}} }
diff --git a/clang/test/CodeGen/AArch64/cpu-supports-target.c b/clang/test/CodeGen/AArch64/cpu-supports-target.c
index 1cd86210095b4..b27ec31713f33 100644
--- a/clang/test/CodeGen/AArch64/cpu-supports-target.c
+++ b/clang/test/CodeGen/AArch64/cpu-supports-target.c
@@ -4,7 +4,7 @@
//.
// CHECK: @__aarch64_cpu_features = external dso_local global { i64 }
//.
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define dso_local i32 @check_all_features(
// CHECK-SAME: ) #[[ATTR0:[0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
@@ -152,7 +152,7 @@ int check_all_features() {
return 0;
}
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define dso_local i32 @neon_code(
// CHECK-SAME: ) #[[ATTR1:[0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
@@ -160,7 +160,7 @@ int check_all_features() {
//
int __attribute__((target("simd"))) neon_code() { return 1; }
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define dso_local i32 @sve_code(
// CHECK-SAME: ) #[[ATTR2:[0-9]+]] {
// CHECK-NEXT: [[ENTRY:.*:]]
@@ -168,7 +168,7 @@ int __attribute__((target("simd"))) neon_code() { return 1; }
//
int __attribute__((target("sve"))) sve_code() { return 2; }
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define dso_local i32 @code(
// CHECK-SAME: ) #[[ATTR0]] {
// CHECK-NEXT: [[ENTRY:.*:]]
@@ -176,7 +176,7 @@ int __attribute__((target("sve"))) sve_code() { return 2; }
//
int code() { return 3; }
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define dso_local i32 @test_versions(
// CHECK-SAME: ) #[[ATTR0]] {
// CHECK-NEXT: [[ENTRY:.*:]]
@@ -217,7 +217,7 @@ int test_versions() {
return code();
}
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define dso_local i32 @test_long(
// CHECK-SAME: ) #[[ATTR0]] {
// CHECK-NEXT: [[ENTRY:.*:]]
@@ -233,9 +233,15 @@ int test_long(void) {
}
//.
-// CHECK: attributes #[[ATTR0]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
-// CHECK: attributes #[[ATTR1]] = { noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+neon" }
-// CHECK: attributes #[[ATTR2]] = { noinline nounwind optnone vscale_range(1,16) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+fullfp16,+sve" }
+// CHECK: attributes #[[ATTR0]] = { noipa noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
+// CHECK: attributes #[[ATTR1]] = { noipa noinline nounwind optnone "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+neon" }
+// CHECK: attributes #[[ATTR2]] = { noipa noinline nounwind optnone vscale_range(1,16) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+fp-armv8,+fullfp16,+sve" }
//.
-// CHECK: [[META0:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+// CHECK: [[META0:![0-9]+]] = !{i32 1, !"ptrauth-elf-got", i32 0}
+// CHECK: [[META1:![0-9]+]] = !{i32 1, !"ptrauth-init-fini", i32 0}
+// CHECK: [[META2:![0-9]+]] = !{i32 1, !"ptrauth-init-fini-address-discrimination", i32 0}
+// CHECK: [[META3:![0-9]+]] = !{i32 1, !"ptrauth-sign-personality", i32 0}
+// CHECK: [[META4:![0-9]+]] = !{i32 1, !"aarch64-elf-pauthabi-platform", i32 268435458}
+// CHECK: [[META5:![0-9]+]] = !{i32 1, !"aarch64-elf-pauthabi-version", i32 0}
+// CHECK: [[META6:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
//.
diff --git a/clang/test/CodeGen/AArch64/fmv-detection.c b/clang/test/CodeGen/AArch64/fmv-detection.c
index 344bde0af8c01..53a68fc9165a0 100644
--- a/clang/test/CodeGen/AArch64/fmv-detection.c
+++ b/clang/test/CodeGen/AArch64/fmv-detection.c
@@ -107,329 +107,329 @@ int caller() {
// CHECK: @__aarch64_cpu_features = external dso_local global { i64 }
// CHECK: @fmv = weak_odr ifunc i32 (), ptr @fmv.resolver
//.
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Maes
// CHECK-SAME: () #[[ATTR0:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mbf16
// CHECK-SAME: () #[[ATTR1:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mbti
// CHECK-SAME: () #[[ATTR2:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mcrc
// CHECK-SAME: () #[[ATTR3:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mcssc
// CHECK-SAME: () #[[ATTR4:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mdit
// CHECK-SAME: () #[[ATTR5:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mdotprod
// CHECK-SAME: () #[[ATTR6:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mdpb
// CHECK-SAME: () #[[ATTR7:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mdpb2
// CHECK-SAME: () #[[ATTR8:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Mf32mm
// CHECK-SAME: () #[[ATTR9:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Mf64mm
// CHECK-SAME: () #[[ATTR10:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mfcma
// CHECK-SAME: () #[[ATTR11:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mflagm
// CHECK-SAME: () #[[ATTR12:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mflagm2
// CHECK-SAME: () #[[ATTR13:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mfp
// CHECK-SAME: () #[[ATTR14:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mfp16
// CHECK-SAME: () #[[ATTR15:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mfp16fml
// CHECK-SAME: () #[[ATTR16:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mfrintts
// CHECK-SAME: () #[[ATTR17:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mi8mm
// CHECK-SAME: () #[[ATTR18:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mjscvt
// CHECK-SAME: () #[[ATTR19:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mlse
// CHECK-SAME: () #[[ATTR20:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mmemtag
// CHECK-SAME: () #[[ATTR21:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mmops
// CHECK-SAME: () #[[ATTR22:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mrcpc
// CHECK-SAME: () #[[ATTR23:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mrcpc2
// CHECK-SAME: () #[[ATTR24:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mrcpc3
// CHECK-SAME: () #[[ATTR25:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mrdm
// CHECK-SAME: () #[[ATTR26:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mrng
// CHECK-SAME: () #[[ATTR27:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msb
// CHECK-SAME: () #[[ATTR28:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msha2
// CHECK-SAME: () #[[ATTR29:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msha3
// CHECK-SAME: () #[[ATTR30:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msimd
// CHECK-SAME: () #[[ATTR31:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msm4
// CHECK-SAME: () #[[ATTR32:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msme
// CHECK-SAME: () #[[ATTR33:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msme-f64f64
// CHECK-SAME: () #[[ATTR34:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msme-i16i64
// CHECK-SAME: () #[[ATTR35:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Msme2
// CHECK-SAME: () #[[ATTR36:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mssbs
// CHECK-SAME: () #[[ATTR37:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Msve
// CHECK-SAME: () #[[ATTR38:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Msve2
// CHECK-SAME: () #[[ATTR39:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Msve2-aes
// CHECK-SAME: () #[[ATTR40:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Msve2-bitperm
// CHECK-SAME: () #[[ATTR41:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Msve2-sha3
// CHECK-SAME: () #[[ATTR42:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@fmv._Msve2-sm4
// CHECK-SAME: () #[[ATTR43:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv._Mwfxt
// CHECK-SAME: () #[[ATTR44:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@fmv.default
// CHECK-SAME: () #[[ATTR45:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 0
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@caller
// CHECK-SAME: () #[[ATTR46:[0-9]+]] {
// CHECK-NEXT: entry:
@@ -813,5 +813,11 @@ int caller() {
// CHECK-NEXT: ret ptr @fmv.default
//
//.
-// CHECK: [[META0:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
+// CHECK: [[META0:![0-9]+]] = !{i32 1, !"ptrauth-elf-got", i32 0}
+// CHECK: [[META1:![0-9]+]] = !{i32 1, !"ptrauth-init-fini", i32 0}
+// CHECK: [[META2:![0-9]+]] = !{i32 1, !"ptrauth-init-fini-address-discrimination", i32 0}
+// CHECK: [[META3:![0-9]+]] = !{i32 1, !"ptrauth-sign-personality", i32 0}
+// CHECK: [[META4:![0-9]+]] = !{i32 1, !"aarch64-elf-pauthabi-platform", i32 268435458}
+// CHECK: [[META5:![0-9]+]] = !{i32 1, !"aarch64-elf-pauthabi-version", i32 0}
+// CHECK: [[META6:![0-9]+]] = !{!"{{.*}}clang version {{.*}}"}
//.
diff --git a/clang/test/CodeGen/AArch64/fmv-explicit-priority.c b/clang/test/CodeGen/AArch64/fmv-explicit-priority.c
index ca84db87074fe..9e578808cccbc 100644
--- a/clang/test/CodeGen/AArch64/fmv-explicit-priority.c
+++ b/clang/test/CodeGen/AArch64/fmv-explicit-priority.c
@@ -12,56 +12,56 @@ __attribute__((target_clones("sme;priority=3", "bti;priority=2", "mops;priority=
// CHECK: @foo = weak_odr ifunc i32 (), ptr @foo.resolver
// CHECK: @bar = weak_odr ifunc i32 (), ptr @bar.resolver
//.
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@foo._Mlse
// CHECK-SAME: () #[[ATTR0:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 1
//
//
-// CHECK: Function Attrs: noinline nounwind optnone
+// CHECK: Function Attrs: noipa noinline nounwind optnone
// CHECK-LABEL: define {{[^@]+}}@foo._Maes
// CHECK-SAME: () #[[ATTR1:[0-9]+]] {
// CHECK-NEXT: entry:
// CHECK-NEXT: ret i32 2
//
//
-// CHECK: Function Attrs: noinline nounwind optnone vscale_range(1,16)
+// CHECK: Function Attrs: noipa noinline nounwind optnone vscale_range(1,16)
// CHECK-LABEL: define {{[^@]+}}@foo._Msve
// CHECK-SAME: () #[[ATTR2:[0-9]+]] {
// CHECK-NEXT: entry:
/...
[truncated]
``````````
</details>
https://github.com/llvm/llvm-project/pull/218782
More information about the cfe-commits
mailing list