diff --git a/clang/lib/CodeGen/CGCall.cpp b/clang/lib/CodeGen/CGCall.cpp --- a/clang/lib/CodeGen/CGCall.cpp +++ b/clang/lib/CodeGen/CGCall.cpp @@ -1991,7 +1991,7 @@ llvm::AttrBuilder FuncAttrs(F.getContext()); getDefaultFunctionAttributes(F.getName(), F.hasOptNone(), /* AttrOnCallSite = */ false, FuncAttrs); - // TODO: call GetCPUAndFeaturesAttributes? + GetCPUAndFeaturesAttributes(GlobalDecl(), FuncAttrs); F.addFnAttrs(FuncAttrs); } diff --git a/clang/lib/CodeGen/CodeGenModule.cpp b/clang/lib/CodeGen/CodeGenModule.cpp --- a/clang/lib/CodeGen/CodeGenModule.cpp +++ b/clang/lib/CodeGen/CodeGenModule.cpp @@ -4063,6 +4063,8 @@ assert(F->getName() == MangledName && "name was uniqued!"); if (D) SetFunctionAttributes(GD, F, IsIncompleteFunction, IsThunk); + else + addDefaultFunctionDefinitionAttributes(*F); if (ExtraAttrs.hasFnAttrs()) { llvm::AttrBuilder B(F->getContext(), ExtraAttrs.getFnAttrs()); F->addFnAttrs(B); diff --git a/clang/test/CodeGen/PowerPC/ignore-exceptions.cpp b/clang/test/CodeGen/PowerPC/ignore-exceptions.cpp --- a/clang/test/CodeGen/PowerPC/ignore-exceptions.cpp +++ b/clang/test/CodeGen/PowerPC/ignore-exceptions.cpp @@ -12,9 +12,9 @@ } catch(...) { } // CHECK: %a = alloca %struct.A, align 1 -// CHECK: %exception = call ptr @__cxa_allocate_exception(i64 4) #1 +// CHECK: %exception = call ptr @__cxa_allocate_exception(i64 4) #{{[0-9]+}} // CHECK: store i32 1, ptr %exception, align 16 -// CHECK: call void @__cxa_throw(ptr %exception, ptr @_ZTIi, ptr null) #2 +// CHECK: call void @__cxa_throw(ptr %exception, ptr @_ZTIi, ptr null) #{{[0-9]+}} // CHECK: unreachable // CHECK-NOT: invoke diff --git a/clang/test/CodeGen/atomic_ops.c b/clang/test/CodeGen/atomic_ops.c --- a/clang/test/CodeGen/atomic_ops.c +++ b/clang/test/CodeGen/atomic_ops.c @@ -113,4 +113,4 @@ return (in *= 5); } -// LIBCALL: [[LC_ATTRS]] = { nounwind willreturn } +// LIBCALL: [[LC_ATTRS]] = { nounwind willreturn {{.*}} } diff --git a/clang/test/CodeGen/attr-cpuspecific.c b/clang/test/CodeGen/attr-cpuspecific.c --- a/clang/test/CodeGen/attr-cpuspecific.c +++ b/clang/test/CodeGen/attr-cpuspecific.c @@ -47,7 +47,7 @@ // LINUX: call void @llvm.trap // LINUX: unreachable -// WINDOWS: define weak_odr dso_local void @SingleVersion() comdat +// WINDOWS: define weak_odr dso_local void @SingleVersion() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call void @SingleVersion.S() // WINDOWS-NEXT: ret void @@ -72,7 +72,7 @@ // LINUX: call void @llvm.trap // LINUX: unreachable -// WINDOWS: define weak_odr dso_local void @TwoVersions() comdat +// WINDOWS: define weak_odr dso_local void @TwoVersions() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call void @TwoVersions.Z() // WINDOWS-NEXT: ret void @@ -112,7 +112,7 @@ // LINUX: call void @llvm.trap // LINUX: unreachable -// WINDOWS: define weak_odr dso_local void @OrderDispatchUsageSpecific() comdat +// WINDOWS: define weak_odr dso_local void @OrderDispatchUsageSpecific() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call void @OrderDispatchUsageSpecific.Z() // WINDOWS-NEXT: ret void @@ -161,7 +161,7 @@ // LINUX: call void @llvm.trap // LINUX: unreachable -// WINDOWS: define weak_odr dso_local void @TwoVersionsSameAttr() comdat +// WINDOWS: define weak_odr dso_local void @TwoVersionsSameAttr() #{{[0-9]+}} comdat // WINDOWS: call void @TwoVersionsSameAttr.Z // WINDOWS-NEXT: ret void // WINDOWS: call void @TwoVersionsSameAttr.S @@ -181,7 +181,7 @@ // LINUX: call void @llvm.trap // LINUX: unreachable -// WINDOWS: define weak_odr dso_local void @ThreeVersionsSameAttr() comdat +// WINDOWS: define weak_odr dso_local void @ThreeVersionsSameAttr() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: call void @ThreeVersionsSameAttr.Z // WINDOWS-NEXT: ret void @@ -197,7 +197,7 @@ // LINUX: define weak_odr ptr @OrderSpecificUsageDispatch.resolver() // LINUX: ret ptr @OrderSpecificUsageDispatch.Z -// WINDOWS: define weak_odr dso_local void @OrderSpecificUsageDispatch() comdat +// WINDOWS: define weak_odr dso_local void @OrderSpecificUsageDispatch() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: call void @OrderSpecificUsageDispatch.Z // WINDOWS-NEXT: ret void @@ -213,7 +213,7 @@ // LINUX: call void @llvm.trap // LINUX: unreachable -// WINDOWS: define weak_odr dso_local void @NoSpecifics() comdat +// WINDOWS: define weak_odr dso_local void @NoSpecifics() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: call void @NoSpecifics.Z // WINDOWS-NEXT: ret void @@ -234,7 +234,7 @@ // LINUX: ret ptr @HasGeneric.A // LINUX-NOT: call void @llvm.trap -// WINDOWS: define weak_odr dso_local void @HasGeneric() comdat +// WINDOWS: define weak_odr dso_local void @HasGeneric() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: call void @HasGeneric.Z // WINDOWS-NEXT: ret void @@ -256,7 +256,7 @@ // LINUX: ret ptr @HasParams.A // LINUX-NOT: call void @llvm.trap -// WINDOWS: define weak_odr dso_local void @HasParams(i32 %0, double %1) comdat +// WINDOWS: define weak_odr dso_local void @HasParams(i32 %0, double %1) #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: call void @HasParams.Z(i32 %0, double %1) // WINDOWS-NEXT: ret void @@ -278,7 +278,7 @@ // LINUX: ret ptr @HasParamsAndReturn.A // LINUX-NOT: call void @llvm.trap -// WINDOWS: define weak_odr dso_local i32 @HasParamsAndReturn(i32 %0, double %1) comdat +// WINDOWS: define weak_odr dso_local i32 @HasParamsAndReturn(i32 %0, double %1) #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: %[[RET:.+]] = musttail call i32 @HasParamsAndReturn.Z(i32 %0, double %1) // WINDOWS-NEXT: ret i32 %[[RET]] @@ -299,7 +299,7 @@ // LINUX-NOT: ret ptr @GenericAndPentium.A // LINUX-NOT: call void @llvm.trap -// WINDOWS: define weak_odr dso_local i32 @GenericAndPentium(i32 %0, double %1) comdat +// WINDOWS: define weak_odr dso_local i32 @GenericAndPentium(i32 %0, double %1) #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init // WINDOWS: %[[RET:.+]] = musttail call i32 @GenericAndPentium.O(i32 %0, double %1) // WINDOWS-NEXT: ret i32 %[[RET]] @@ -314,7 +314,7 @@ // LINUX: ret ptr @DispatchFirst.O // LINUX: ret ptr @DispatchFirst.B -// WINDOWS: define weak_odr dso_local i32 @DispatchFirst() comdat +// WINDOWS: define weak_odr dso_local i32 @DispatchFirst() #{{[0-9]+}} comdat // WINDOWS: %[[RET:.+]] = musttail call i32 @DispatchFirst.O() // WINDOWS-NEXT: ret i32 %[[RET]] // WINDOWS: %[[RET:.+]] = musttail call i32 @DispatchFirst.B() diff --git a/clang/test/CodeGen/attr-target-clones.c b/clang/test/CodeGen/attr-target-clones.c --- a/clang/test/CodeGen/attr-target-clones.c +++ b/clang/test/CodeGen/attr-target-clones.c @@ -23,26 +23,26 @@ int __attribute__((target_clones("sse4.2, default"))) foo(void) { return 0; } // LINUX: define {{.*}}i32 @foo.sse4.2.0() // LINUX: define {{.*}}i32 @foo.default.1() -// LINUX: define weak_odr ptr @foo.resolver() comdat +// LINUX: define weak_odr ptr @foo.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @foo.sse4.2.0 // LINUX: ret ptr @foo.default.1 // WINDOWS: define dso_local i32 @foo.sse4.2.0() // WINDOWS: define dso_local i32 @foo.default.1() -// WINDOWS: define weak_odr dso_local i32 @foo() comdat +// WINDOWS: define weak_odr dso_local i32 @foo() #{{[0-9]+}} comdat // WINDOWS: musttail call i32 @foo.sse4.2.0 // WINDOWS: musttail call i32 @foo.default.1 __attribute__((target_clones("default,default ,sse4.2"))) void foo_dupes(void) {} // LINUX: define {{.*}}void @foo_dupes.default.1() // LINUX: define {{.*}}void @foo_dupes.sse4.2.0() -// LINUX: define weak_odr ptr @foo_dupes.resolver() comdat +// LINUX: define weak_odr ptr @foo_dupes.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @foo_dupes.sse4.2.0 // LINUX: ret ptr @foo_dupes.default.1 // WINDOWS: define dso_local void @foo_dupes.default.1() // WINDOWS: define dso_local void @foo_dupes.sse4.2.0() -// WINDOWS: define weak_odr dso_local void @foo_dupes() comdat +// WINDOWS: define weak_odr dso_local void @foo_dupes() #{{[0-9]+}} comdat // WINDOWS: musttail call void @foo_dupes.sse4.2.0 // WINDOWS: musttail call void @foo_dupes.default.1 @@ -65,13 +65,13 @@ void __attribute__((target_clones("default, arch=ivybridge"))) unused(void) {} // LINUX: define {{.*}}void @unused.default.1() // LINUX: define {{.*}}void @unused.arch_ivybridge.0() -// LINUX: define weak_odr ptr @unused.resolver() comdat +// LINUX: define weak_odr ptr @unused.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @unused.arch_ivybridge.0 // LINUX: ret ptr @unused.default.1 // WINDOWS: define dso_local void @unused.default.1() // WINDOWS: define dso_local void @unused.arch_ivybridge.0() -// WINDOWS: define weak_odr dso_local void @unused() comdat +// WINDOWS: define weak_odr dso_local void @unused() #{{[0-9]+}} comdat // WINDOWS: musttail call void @unused.arch_ivybridge.0 // WINDOWS: musttail call void @unused.default.1 @@ -91,24 +91,24 @@ // WINDOWS: call i32 @foo_inline2() } -// LINUX: define weak_odr ptr @foo_inline.resolver() comdat +// LINUX: define weak_odr ptr @foo_inline.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @foo_inline.arch_sandybridge.0 // LINUX: ret ptr @foo_inline.sse4.2.1 // LINUX: ret ptr @foo_inline.default.2 -// WINDOWS: define weak_odr dso_local i32 @foo_inline() comdat +// WINDOWS: define weak_odr dso_local i32 @foo_inline() #{{[0-9]+}} comdat // WINDOWS: musttail call i32 @foo_inline.arch_sandybridge.0 // WINDOWS: musttail call i32 @foo_inline.sse4.2.1 // WINDOWS: musttail call i32 @foo_inline.default.2 inline int __attribute__((target_clones("arch=sandybridge,default,sse4.2"))) foo_inline2(void){ return 0; } -// LINUX: define weak_odr ptr @foo_inline2.resolver() comdat +// LINUX: define weak_odr ptr @foo_inline2.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @foo_inline2.arch_sandybridge.0 // LINUX: ret ptr @foo_inline2.sse4.2.1 // LINUX: ret ptr @foo_inline2.default.2 -// WINDOWS: define weak_odr dso_local i32 @foo_inline2() comdat +// WINDOWS: define weak_odr dso_local i32 @foo_inline2() #{{[0-9]+}} comdat // WINDOWS: musttail call i32 @foo_inline2.arch_sandybridge.0 // WINDOWS: musttail call i32 @foo_inline2.sse4.2.1 // WINDOWS: musttail call i32 @foo_inline2.default.2 @@ -129,11 +129,11 @@ } -// LINUX: define weak_odr ptr @foo_used_no_defn.resolver() comdat +// LINUX: define weak_odr ptr @foo_used_no_defn.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @foo_used_no_defn.sse4.2.0 // LINUX: ret ptr @foo_used_no_defn.default.1 -// WINDOWS: define weak_odr dso_local i32 @foo_used_no_defn() comdat +// WINDOWS: define weak_odr dso_local i32 @foo_used_no_defn() #{{[0-9]+}} comdat // WINDOWS: musttail call i32 @foo_used_no_defn.sse4.2.0 // WINDOWS: musttail call i32 @foo_used_no_defn.default.1 diff --git a/clang/test/CodeGen/attr-target-mv-va-args.c b/clang/test/CodeGen/attr-target-mv-va-args.c --- a/clang/test/CodeGen/attr-target-mv-va-args.c +++ b/clang/test/CodeGen/attr-target-mv-va-args.c @@ -21,7 +21,7 @@ // LINUX: call i32 (i32, ...) @foo.ifunc(i32 noundef 1, i32 noundef 97, double // LINUX: call i32 (i32, ...) @foo.ifunc(i32 noundef 2, double noundef 2.2{{[0-9Ee+]+}}, i8* noundef getelementptr inbounds -// LINUX: define weak_odr i32 (i32, ...)* @foo.resolver() comdat +// LINUX: define weak_odr i32 (i32, ...)* @foo.resolver() #{{[0-9]+}} comdat // LINUX: ret i32 (i32, ...)* @foo.arch_sandybridge // LINUX: ret i32 (i32, ...)* @foo.arch_ivybridge // LINUX: ret i32 (i32, ...)* @foo.sse4.2 @@ -38,8 +38,8 @@ // NO-IFUNC: call i32 (i32, ...) @foo.resolver(i32 noundef 1, i32 noundef 97, double // NO-IFUNC: call i32 (i32, ...) @foo.resolver(i32 noundef 2, double noundef 2.2{{[0-9Ee+]+}}, i8* noundef getelementptr inbounds -// WINDOWS: define weak_odr dso_local i32 @foo.resolver(i32 %0, ...) comdat -// FUCHSIA: define weak_odr i32 @foo.resolver(i32 %0, ...) comdat +// WINDOWS: define weak_odr dso_local i32 @foo.resolver(i32 %0, ...) #{{[0-9]+}} comdat +// FUCHSIA: define weak_odr i32 @foo.resolver(i32 %0, ...) #{{[0-9]+}} comdat // NO-IFUNC: musttail call i32 (i32, ...) @foo.arch_sandybridge // NO-IFUNC: musttail call i32 (i32, ...) @foo.arch_ivybridge // NO-IFUNC: musttail call i32 (i32, ...) @foo.sse4.2 diff --git a/clang/test/CodeGen/attr-target-mv.c b/clang/test/CodeGen/attr-target-mv.c --- a/clang/test/CodeGen/attr-target-mv.c +++ b/clang/test/CodeGen/attr-target-mv.c @@ -210,14 +210,14 @@ // WINDOWS: define dso_local i32 @bar() // WINDOWS: call i32 @foo.resolver() -// LINUX: define weak_odr ptr @foo.resolver() comdat +// LINUX: define weak_odr ptr @foo.resolver() #{{[0-9]+}} comdat // LINUX: call void @__cpu_indicator_init() // LINUX: ret ptr @foo.arch_sandybridge // LINUX: ret ptr @foo.arch_ivybridge // LINUX: ret ptr @foo.sse4.2 // LINUX: ret ptr @foo -// WINDOWS: define weak_odr dso_local i32 @foo.resolver() comdat +// WINDOWS: define weak_odr dso_local i32 @foo.resolver() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call i32 @foo.arch_sandybridge // WINDOWS: call i32 @foo.arch_ivybridge @@ -230,14 +230,14 @@ // WINDOWS: define dso_local i32 @bar2() // WINDOWS: call i32 @foo_inline.resolver() -// LINUX: define weak_odr ptr @foo_inline.resolver() comdat +// LINUX: define weak_odr ptr @foo_inline.resolver() #{{[0-9]+}} comdat // LINUX: call void @__cpu_indicator_init() // LINUX: ret ptr @foo_inline.arch_sandybridge // LINUX: ret ptr @foo_inline.arch_ivybridge // LINUX: ret ptr @foo_inline.sse4.2 // LINUX: ret ptr @foo_inline -// WINDOWS: define weak_odr dso_local i32 @foo_inline.resolver() comdat +// WINDOWS: define weak_odr dso_local i32 @foo_inline.resolver() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call i32 @foo_inline.arch_sandybridge // WINDOWS: call i32 @foo_inline.arch_ivybridge @@ -250,11 +250,11 @@ // WINDOWS: define dso_local void @bar3() // WINDOWS: call void @foo_decls.resolver() -// LINUX: define weak_odr ptr @foo_decls.resolver() comdat +// LINUX: define weak_odr ptr @foo_decls.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @foo_decls.sse4.2 // LINUX: ret ptr @foo_decls -// WINDOWS: define weak_odr dso_local void @foo_decls.resolver() comdat +// WINDOWS: define weak_odr dso_local void @foo_decls.resolver() #{{[0-9]+}} comdat // WINDOWS: call void @foo_decls.sse4.2 // WINDOWS: call void @foo_decls @@ -264,7 +264,7 @@ // WINDOWS: define dso_local void @bar4() // WINDOWS: call void @foo_multi.resolver(i32 noundef 1, double noundef 5.{{[0+e]*}}) -// LINUX: define weak_odr ptr @foo_multi.resolver() comdat +// LINUX: define weak_odr ptr @foo_multi.resolver() #{{[0-9]+}} comdat // LINUX: and i32 %{{.*}}, 4352 // LINUX: icmp eq i32 %{{.*}}, 4352 // LINUX: ret ptr @foo_multi.fma4_sse4.2 @@ -277,7 +277,7 @@ // LINUX: ret ptr @foo_multi.avx_sse4.2 // LINUX: ret ptr @foo_multi -// WINDOWS: define weak_odr dso_local void @foo_multi.resolver(i32 %0, double %1) comdat +// WINDOWS: define weak_odr dso_local void @foo_multi.resolver(i32 %0, double %1) #{{[0-9]+}} comdat // WINDOWS: and i32 %{{.*}}, 4352 // WINDOWS: icmp eq i32 %{{.*}}, 4352 // WINDOWS: call void @foo_multi.fma4_sse4.2(i32 %0, double %1) @@ -316,18 +316,18 @@ // WINDOWS: call i32 @fwd_decl_default.resolver() // WINDOWS: call i32 @fwd_decl_avx.resolver() -// LINUX: define weak_odr ptr @fwd_decl_default.resolver() comdat +// LINUX: define weak_odr ptr @fwd_decl_default.resolver() #{{[0-9]+}} comdat // LINUX: call void @__cpu_indicator_init() // LINUX: ret ptr @fwd_decl_default -// LINUX: define weak_odr ptr @fwd_decl_avx.resolver() comdat +// LINUX: define weak_odr ptr @fwd_decl_avx.resolver() #{{[0-9]+}} comdat // LINUX: call void @__cpu_indicator_init() // LINUX: ret ptr @fwd_decl_avx.avx // LINUX: ret ptr @fwd_decl_avx -// WINDOWS: define weak_odr dso_local i32 @fwd_decl_default.resolver() comdat +// WINDOWS: define weak_odr dso_local i32 @fwd_decl_default.resolver() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call i32 @fwd_decl_default -// WINDOWS: define weak_odr dso_local i32 @fwd_decl_avx.resolver() comdat +// WINDOWS: define weak_odr dso_local i32 @fwd_decl_avx.resolver() #{{[0-9]+}} comdat // WINDOWS: call void @__cpu_indicator_init() // WINDOWS: call i32 @fwd_decl_avx.avx // WINDOWS: call i32 @fwd_decl_avx @@ -400,11 +400,11 @@ // WINDOWS: define linkonce_odr dso_local void @pr50025c() #{{[0-9]*}} comdat // WINDOWS: call void @pr50025b.resolver() -// LINUX: define weak_odr ptr @pr50025b.resolver() comdat +// LINUX: define weak_odr ptr @pr50025b.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @pr50025b // LINUX: define linkonce void @pr50025b() // LINUX: call void @must_be_emitted() -// WINDOWS: define weak_odr dso_local void @pr50025b.resolver() comdat +// WINDOWS: define weak_odr dso_local void @pr50025b.resolver() #{{[0-9]+}} comdat // WINDOWS: musttail call void @pr50025b() // WINDOWS: define linkonce_odr dso_local void @pr50025b() #{{[0-9]*}} comdat // WINDOWS: call void @must_be_emitted() diff --git a/clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp b/clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp --- a/clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp +++ b/clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp @@ -17,6 +17,8 @@ return 1; } -// CHECK: declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr -// CHECK: declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr -// CHECK: define dso_local noundef signext i32 @main() local_unnamed_addr #1 { \ No newline at end of file +// CHECK: declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr #[[A:[0-9]+]] +// CHECK: declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr #[[A:[0-9]+]] +// CHECK: define dso_local noundef signext i32 @main() local_unnamed_addr #[[B:[0-9]+]] { +// CHECK: attributes #[[A]] = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+64bit" } +// CHECK: attributes #[[B]] = { mustprogress norecurse noreturn "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+64bit" } \ No newline at end of file diff --git a/clang/test/CodeGenCXX/attr-cpuspecific.cpp b/clang/test/CodeGenCXX/attr-cpuspecific.cpp --- a/clang/test/CodeGenCXX/attr-cpuspecific.cpp +++ b/clang/test/CodeGenCXX/attr-cpuspecific.cpp @@ -21,7 +21,7 @@ // LINUX: declare void @_ZN1S4FuncEv.S // LINUX: define linkonce_odr void @_ZN1S4FuncEv.O -// WINDOWS: define weak_odr dso_local void @"?Func@S@@QEAAXXZ"(ptr %0) comdat +// WINDOWS: define weak_odr dso_local void @"?Func@S@@QEAAXXZ"(ptr %0) #{{[0-9]+}} comdat // WINDOWS: musttail call void @"?Func@S@@QEAAXXZ.S"(ptr %0) // WINDOWS: musttail call void @"?Func@S@@QEAAXXZ.O"(ptr %0) // WINDOWS: declare dso_local void @"?Func@S@@QEAAXXZ.S" diff --git a/clang/test/CodeGenCXX/attr-target-clones.cpp b/clang/test/CodeGenCXX/attr-target-clones.cpp --- a/clang/test/CodeGenCXX/attr-target-clones.cpp +++ b/clang/test/CodeGenCXX/attr-target-clones.cpp @@ -12,26 +12,26 @@ int __attribute__((target_clones("sse4.2", "default"))) overloaded(int) { return 1; } // LINUX: define {{.*}}i32 @_Z10overloadedi.sse4.2.0(i32{{.+}}) // LINUX: define {{.*}}i32 @_Z10overloadedi.default.1(i32{{.+}}) -// LINUX: define weak_odr i32 (i32)* @_Z10overloadedi.resolver() comdat +// LINUX: define weak_odr i32 (i32)* @_Z10overloadedi.resolver() #{{[0-9]+}} comdat // LINUX: ret i32 (i32)* @_Z10overloadedi.sse4.2.0 // LINUX: ret i32 (i32)* @_Z10overloadedi.default.1 // WINDOWS: define dso_local noundef i32 @"?overloaded@@YAHH@Z.sse4.2.0"(i32{{.+}}) // WINDOWS: define dso_local noundef i32 @"?overloaded@@YAHH@Z.default.1"(i32{{.+}}) -// WINDOWS: define weak_odr dso_local i32 @"?overloaded@@YAHH@Z"(i32{{.+}}) comdat +// WINDOWS: define weak_odr dso_local i32 @"?overloaded@@YAHH@Z"(i32{{.+}}) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?overloaded@@YAHH@Z.sse4.2.0" // WINDOWS: call i32 @"?overloaded@@YAHH@Z.default.1" int __attribute__((target_clones("arch=ivybridge", "default"))) overloaded(const char *) { return 2; } // LINUX: define {{.*}}i32 @_Z10overloadedPKc.arch_ivybridge.0(i8*{{.+}}) // LINUX: define {{.*}}i32 @_Z10overloadedPKc.default.1(i8*{{.+}}) -// LINUX: define weak_odr i32 (i8*)* @_Z10overloadedPKc.resolver() comdat +// LINUX: define weak_odr i32 (i8*)* @_Z10overloadedPKc.resolver() #{{[0-9]+}} comdat // LINUX: ret i32 (i8*)* @_Z10overloadedPKc.arch_ivybridge.0 // LINUX: ret i32 (i8*)* @_Z10overloadedPKc.default.1 // WINDOWS: define dso_local noundef i32 @"?overloaded@@YAHPEBD@Z.arch_ivybridge.0"(i8*{{.+}}) // WINDOWS: define dso_local noundef i32 @"?overloaded@@YAHPEBD@Z.default.1"(i8*{{.+}}) -// WINDOWS: define weak_odr dso_local i32 @"?overloaded@@YAHPEBD@Z"(i8*{{.+}}) comdat +// WINDOWS: define weak_odr dso_local i32 @"?overloaded@@YAHPEBD@Z"(i8*{{.+}}) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?overloaded@@YAHPEBD@Z.arch_ivybridge.0" // WINDOWS: call i32 @"?overloaded@@YAHPEBD@Z.default.1" @@ -81,7 +81,7 @@ // WINDOWS: call noundef i32 @"?foo@?$C@NM@@QEAAHXZ"(%struct.C } -// LINUX: define weak_odr i32 (%struct.C*)* @_ZN1CIssE3fooEv.resolver() comdat +// LINUX: define weak_odr i32 (%struct.C*)* @_ZN1CIssE3fooEv.resolver() #{{[0-9]+}} comdat // LINUX: ret i32 (%struct.C*)* @_ZN1CIssE3fooEv.sse4.2.0 // LINUX: ret i32 (%struct.C*)* @_ZN1CIssE3fooEv.default.1 @@ -89,7 +89,7 @@ // WINDOWS: call i32 @"?foo@?$C@FF@@QEAAHXZ.sse4.2.0" // WINDOWS: call i32 @"?foo@?$C@FF@@QEAAHXZ.default.1" -// LINUX: define weak_odr i32 (%struct.C{{.+}})* @_ZN1CIisE3fooEv.resolver() comdat +// LINUX: define weak_odr i32 (%struct.C{{.+}})* @_ZN1CIisE3fooEv.resolver() #{{[0-9]+}} comdat // LINUX: ret i32 (%struct.C{{.+}})* @_ZN1CIisE3fooEv.sse4.2.0 // LINUX: ret i32 (%struct.C{{.+}})* @_ZN1CIisE3fooEv.default.1 @@ -97,7 +97,7 @@ // WINDOWS: call i32 @"?foo@?$C@HF@@QEAAHXZ.sse4.2.0" // WINDOWS: call i32 @"?foo@?$C@HF@@QEAAHXZ.default.1" -// LINUX: define weak_odr i32 (%struct.C{{.+}})* @_ZN1CIdfE3fooEv.resolver() comdat +// LINUX: define weak_odr i32 (%struct.C{{.+}})* @_ZN1CIdfE3fooEv.resolver() #{{[0-9]+}} comdat // LINUX: ret i32 (%struct.C{{.+}})* @_ZN1CIdfE3fooEv.sse4.2.0 // LINUX: ret i32 (%struct.C{{.+}})* @_ZN1CIdfE3fooEv.default.1 diff --git a/clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp b/clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp --- a/clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp +++ b/clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp @@ -57,25 +57,25 @@ // WINDOWS: call noundef i32 @"?foo@@YAHH@Z.resolver"(i32 noundef 1) // WINDOWS: call noundef i32 @"?foo@ns@@YAHH@Z.resolver"(i32 noundef 2) -// LINUX: define weak_odr ptr @_Z3fooi.resolver() comdat +// LINUX: define weak_odr ptr @_Z3fooi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_Z3fooi.arch_sandybridge // LINUX: ret ptr @_Z3fooi.arch_ivybridge // LINUX: ret ptr @_Z3fooi.sse4.2 // LINUX: ret ptr @_Z3fooi -// WINDOWS: define weak_odr dso_local i32 @"?foo@@YAHH@Z.resolver"(i32 %0) comdat +// WINDOWS: define weak_odr dso_local i32 @"?foo@@YAHH@Z.resolver"(i32 %0) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?foo@@YAHH@Z.arch_sandybridge"(i32 %0) // WINDOWS: call i32 @"?foo@@YAHH@Z.arch_ivybridge"(i32 %0) // WINDOWS: call i32 @"?foo@@YAHH@Z.sse4.2"(i32 %0) // WINDOWS: call i32 @"?foo@@YAHH@Z"(i32 %0) -// LINUX: define weak_odr ptr @_ZN2ns3fooEi.resolver() comdat +// LINUX: define weak_odr ptr @_ZN2ns3fooEi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN2ns3fooEi.arch_sandybridge // LINUX: ret ptr @_ZN2ns3fooEi.arch_ivybridge // LINUX: ret ptr @_ZN2ns3fooEi.sse4.2 // LINUX: ret ptr @_ZN2ns3fooEi -// WINDOWS: define weak_odr dso_local i32 @"?foo@ns@@YAHH@Z.resolver"(i32 %0) comdat +// WINDOWS: define weak_odr dso_local i32 @"?foo@ns@@YAHH@Z.resolver"(i32 %0) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?foo@ns@@YAHH@Z.arch_sandybridge"(i32 %0) // WINDOWS: call i32 @"?foo@ns@@YAHH@Z.arch_ivybridge"(i32 %0) // WINDOWS: call i32 @"?foo@ns@@YAHH@Z.sse4.2"(i32 %0) diff --git a/clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp b/clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp --- a/clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp +++ b/clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp @@ -91,7 +91,7 @@ // WINDOWS: call noundef nonnull align 1 dereferenceable(1) ptr @"??4S@@QEAAAEAU0@AEBU0@@Z.resolver"(ptr {{[^,]*}} %s2 // WINDOWS: call noundef i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr {{[^,]*}} %s, i32 noundef 0) -// LINUX: define weak_odr ptr @_ZN1SaSERKS_.resolver() comdat +// LINUX: define weak_odr ptr @_ZN1SaSERKS_.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN1SaSERKS_.arch_ivybridge // LINUX: ret ptr @_ZN1SaSERKS_ @@ -99,7 +99,7 @@ // WINDOWS: call ptr @"??4S@@QEAAAEAU0@AEBU0@@Z.arch_ivybridge" // WINDOWS: call ptr @"??4S@@QEAAAEAU0@AEBU0@@Z" -// LINUX: define weak_odr ptr @_ZNK9ConvertTocv1SEv.resolver() comdat +// LINUX: define weak_odr ptr @_ZNK9ConvertTocv1SEv.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZNK9ConvertTocv1SEv.arch_ivybridge // LINUX: ret ptr @_ZNK9ConvertTocv1SEv @@ -107,7 +107,7 @@ // WINDOWS: call void @"??BConvertTo@@QEBA?AUS@@XZ.arch_ivybridge" // WINDOWS: call void @"??BConvertTo@@QEBA?AUS@@XZ" -// LINUX: define weak_odr ptr @_ZN1S3fooEi.resolver() comdat +// LINUX: define weak_odr ptr @_ZN1S3fooEi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN1S3fooEi.arch_sandybridge // LINUX: ret ptr @_ZN1S3fooEi.arch_ivybridge // LINUX: ret ptr @_ZN1S3fooEi.sse4.2 @@ -125,7 +125,7 @@ // WINDOWS: define dso_local noundef i32 @"?bar2@@YAHXZ"() // WINDOWS: call noundef i32 @"?foo@S2@@QEAAHH@Z.resolver" -// LINUX: define weak_odr ptr @_ZN2S23fooEi.resolver() comdat +// LINUX: define weak_odr ptr @_ZN2S23fooEi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN2S23fooEi.arch_sandybridge // LINUX: ret ptr @_ZN2S23fooEi.arch_ivybridge // LINUX: ret ptr @_ZN2S23fooEi.sse4.2 @@ -153,7 +153,7 @@ // WINDOWS: call noundef i32 @"?foo@?$templ@H@@QEAAHH@Z.resolver" // WINDOWS: call noundef i32 @"?foo@?$templ@N@@QEAAHH@Z.resolver" -// LINUX: define weak_odr ptr @_ZN5templIiE3fooEi.resolver() comdat +// LINUX: define weak_odr ptr @_ZN5templIiE3fooEi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN5templIiE3fooEi.arch_sandybridge // LINUX: ret ptr @_ZN5templIiE3fooEi.arch_ivybridge // LINUX: ret ptr @_ZN5templIiE3fooEi.sse4.2 @@ -165,13 +165,13 @@ // WINDOWS: call i32 @"?foo@?$templ@H@@QEAAHH@Z.sse4.2" // WINDOWS: call i32 @"?foo@?$templ@H@@QEAAHH@Z" -// LINUX: define weak_odr ptr @_ZN5templIdE3fooEi.resolver() comdat +// LINUX: define weak_odr ptr @_ZN5templIdE3fooEi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN5templIdE3fooEi.arch_sandybridge // LINUX: ret ptr @_ZN5templIdE3fooEi.arch_ivybridge // LINUX: ret ptr @_ZN5templIdE3fooEi.sse4.2 // LINUX: ret ptr @_ZN5templIdE3fooEi -// WINDOWS: define weak_odr dso_local i32 @"?foo@?$templ@N@@QEAAHH@Z.resolver"(ptr %0, i32 %1) comdat +// WINDOWS: define weak_odr dso_local i32 @"?foo@?$templ@N@@QEAAHH@Z.resolver"(ptr %0, i32 %1) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?foo@?$templ@N@@QEAAHH@Z.arch_sandybridge" // WINDOWS: call i32 @"?foo@?$templ@N@@QEAAHH@Z.arch_ivybridge" // WINDOWS: call i32 @"?foo@?$templ@N@@QEAAHH@Z.sse4.2" diff --git a/clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp b/clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp --- a/clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp +++ b/clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp @@ -44,13 +44,13 @@ // WINDOWS: %s = alloca %struct.S, align 1 // WINDOWS: %call = call noundef i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr {{[^,]*}} %s, i32 noundef 0) -// LINUX: define weak_odr ptr @_ZN1S3fooEi.resolver() comdat +// LINUX: define weak_odr ptr @_ZN1S3fooEi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_ZN1S3fooEi.arch_sandybridge // LINUX: ret ptr @_ZN1S3fooEi.arch_ivybridge // LINUX: ret ptr @_ZN1S3fooEi.sse4.2 // LINUX: ret ptr @_ZN1S3fooEi -// WINDOWS: define weak_odr dso_local i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr %0, i32 %1) comdat +// WINDOWS: define weak_odr dso_local i32 @"?foo@S@@QEAAHH@Z.resolver"(ptr %0, i32 %1) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.arch_sandybridge"(ptr %0, i32 %1) // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.arch_ivybridge"(ptr %0, i32 %1) // WINDOWS: call i32 @"?foo@S@@QEAAHH@Z.sse4.2"(ptr %0, i32 %1) diff --git a/clang/test/CodeGenCXX/attr-target-mv-overloads.cpp b/clang/test/CodeGenCXX/attr-target-mv-overloads.cpp --- a/clang/test/CodeGenCXX/attr-target-mv-overloads.cpp +++ b/clang/test/CodeGenCXX/attr-target-mv-overloads.cpp @@ -51,25 +51,25 @@ // WINDOWS: call noundef i32 @"?foo_overload@@YAHXZ.resolver"() // WINDOWS: call noundef i32 @"?foo_overload@@YAHH@Z.resolver"(i32 noundef 1) -// LINUX: define weak_odr ptr @_Z12foo_overloadv.resolver() comdat +// LINUX: define weak_odr ptr @_Z12foo_overloadv.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_Z12foo_overloadv.arch_sandybridge // LINUX: ret ptr @_Z12foo_overloadv.arch_ivybridge // LINUX: ret ptr @_Z12foo_overloadv.sse4.2 // LINUX: ret ptr @_Z12foo_overloadv -// WINDOWS: define weak_odr dso_local i32 @"?foo_overload@@YAHXZ.resolver"() comdat +// WINDOWS: define weak_odr dso_local i32 @"?foo_overload@@YAHXZ.resolver"() #{{[0-9]+}} comdat // WINDOWS: call i32 @"?foo_overload@@YAHXZ.arch_sandybridge" // WINDOWS: call i32 @"?foo_overload@@YAHXZ.arch_ivybridge" // WINDOWS: call i32 @"?foo_overload@@YAHXZ.sse4.2" // WINDOWS: call i32 @"?foo_overload@@YAHXZ" -// LINUX: define weak_odr ptr @_Z12foo_overloadi.resolver() comdat +// LINUX: define weak_odr ptr @_Z12foo_overloadi.resolver() #{{[0-9]+}} comdat // LINUX: ret ptr @_Z12foo_overloadi.arch_sandybridge // LINUX: ret ptr @_Z12foo_overloadi.arch_ivybridge // LINUX: ret ptr @_Z12foo_overloadi.sse4.2 // LINUX: ret ptr @_Z12foo_overloadi -// WINDOWS: define weak_odr dso_local i32 @"?foo_overload@@YAHH@Z.resolver"(i32 %0) comdat +// WINDOWS: define weak_odr dso_local i32 @"?foo_overload@@YAHH@Z.resolver"(i32 %0) #{{[0-9]+}} comdat // WINDOWS: call i32 @"?foo_overload@@YAHH@Z.arch_sandybridge" // WINDOWS: call i32 @"?foo_overload@@YAHH@Z.arch_ivybridge" // WINDOWS: call i32 @"?foo_overload@@YAHH@Z.sse4.2" diff --git a/clang/test/CodeGenCXX/dynamic-cast.cpp b/clang/test/CodeGenCXX/dynamic-cast.cpp --- a/clang/test/CodeGenCXX/dynamic-cast.cpp +++ b/clang/test/CodeGenCXX/dynamic-cast.cpp @@ -20,5 +20,5 @@ // CHECK: declare ptr @__dynamic_cast(ptr, ptr, ptr, i64) [[NUW_RO:#[0-9]+]] -// CHECK: attributes [[NUW_RO]] = { nounwind memory(read) } +// CHECK: attributes [[NUW_RO]] = { nounwind memory(read) {{.*}} } // CHECK: attributes [[NR]] = { noreturn } diff --git a/clang/test/CodeGenCXX/runtimecc.cpp b/clang/test/CodeGenCXX/runtimecc.cpp --- a/clang/test/CodeGenCXX/runtimecc.cpp +++ b/clang/test/CodeGenCXX/runtimecc.cpp @@ -26,7 +26,7 @@ // CHECK-NEXT: ret void } -// CHECK: declare i32 @__cxa_atexit(ptr, ptr, ptr) [[NOUNWIND]] +// CHECK: declare i32 @__cxa_atexit(ptr, ptr, ptr) [[NOUNWIND1:#[0-9]+]] namespace test1 { void test() { @@ -47,6 +47,6 @@ // CHECK-LABEL: define internal void @_GLOBAL__sub_I_runtimecc.cpp() // CHECK: call void @__cxx_global_var_init() - +// CHECK: attributes [[NOUNWIND1]] = { nounwind {{.*}} } // CHECK: attributes [[NOUNWIND]] = { nounwind } // CHECK: attributes [[NORETURN]] = { noreturn } diff --git a/clang/test/CodeGenObjC/arc.m b/clang/test/CodeGenObjC/arc.m --- a/clang/test/CodeGenObjC/arc.m +++ b/clang/test/CodeGenObjC/arc.m @@ -1586,6 +1586,6 @@ __strong id t[] = (__strong id[]){a, b}; } -// ARC-ALIEN: attributes [[NLB]] = { nonlazybind } -// ARC-NATIVE: attributes [[NLB]] = { nonlazybind } -// CHECK: attributes [[NUW]] = { nounwind } +// ARC-ALIEN: attributes [[NLB]] = { nonlazybind {{.*}}} +// ARC-NATIVE: attributes [[NLB]] = { nonlazybind {{.*}}} +// CHECK: attributes [[NUW]] = { nounwind {{.*}}} diff --git a/clang/test/CodeGenObjC/attr-objc-runtime-visible.m b/clang/test/CodeGenObjC/attr-objc-runtime-visible.m --- a/clang/test/CodeGenObjC/attr-objc-runtime-visible.m +++ b/clang/test/CodeGenObjC/attr-objc-runtime-visible.m @@ -14,6 +14,6 @@ // CHECK: [[CLASSNAME:@.*]] = private unnamed_addr constant [22 x i8] c"MyRuntimeVisibleClass // CHECK: define{{.*}} i8* @getClass() #0 { Class getClass(void) { - // CHECK: call i8* @objc_lookUpClass(i8* getelementptr inbounds ([22 x i8], [22 x i8]* [[CLASSNAME]], i32 0, i32 0)) #2 + // CHECK: call i8* @objc_lookUpClass(i8* getelementptr inbounds ([22 x i8], [22 x i8]* [[CLASSNAME]], i32 0, i32 0)) #{{[0-9]+}} return [A class]; } diff --git a/clang/test/CodeGenObjC/class-stubs.m b/clang/test/CodeGenObjC/class-stubs.m --- a/clang/test/CodeGenObjC/class-stubs.m +++ b/clang/test/CodeGenObjC/class-stubs.m @@ -81,4 +81,4 @@ @end // -- calls to objc_loadClassRef() are readnone -// CHECK: attributes [[ATTRLIST]] = { nounwind nonlazybind memory(none) } +// CHECK: attributes [[ATTRLIST]] = { nounwind nonlazybind memory(none) {{.*}} } diff --git a/clang/test/CodeGenObjC/nonlazy-msgSend.m b/clang/test/CodeGenObjC/nonlazy-msgSend.m --- a/clang/test/CodeGenObjC/nonlazy-msgSend.m +++ b/clang/test/CodeGenObjC/nonlazy-msgSend.m @@ -5,4 +5,4 @@ [x foo]; } -// CHECK: attributes [[NLB]] = { nonlazybind } +// CHECK: attributes [[NLB]] = { nonlazybind {{.*}}} diff --git a/clang/test/CodeGenObjC/objc-literal-debugger-test.m b/clang/test/CodeGenObjC/objc-literal-debugger-test.m --- a/clang/test/CodeGenObjC/objc-literal-debugger-test.m +++ b/clang/test/CodeGenObjC/objc-literal-debugger-test.m @@ -52,4 +52,4 @@ // CHECK: declare i8* @objc_msgSend(i8*, i8*, ...) [[NLB:#[0-9]+]] -// CHECK: attributes [[NLB]] = { nonlazybind } +// CHECK: attributes [[NLB]] = { nonlazybind "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-features"="+cx8,+mmx,+sse,+sse2,+x87" } diff --git a/clang/test/PCH/objc_container.m b/clang/test/PCH/objc_container.m --- a/clang/test/PCH/objc_container.m +++ b/clang/test/PCH/objc_container.m @@ -23,4 +23,4 @@ // CHECK-IR: ret void // CHECK-IR: attributes #0 = { noinline nounwind {{.*}} } -// CHECK-IR: attributes #1 = { nonlazybind } +// CHECK-IR: attributes #1 = { nonlazybind {{.*}} }