eklepilkina created this revision.
Herald added subscribers: sunshaoce, VincentWu, vkmr, frasercrmck, evandro, 
luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, 
PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, 
shiva0217, kito-cheng, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, 
arichardson, nemanjai.
Herald added a project: All.
eklepilkina requested review of this revision.
Herald added subscribers: cfe-commits, pcwang-thead, eopXD, MaskRay.
Herald added a project: clang.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D139704

Files:
  clang/lib/CodeGen/CGCall.cpp
  clang/lib/CodeGen/CodeGenModule.cpp
  clang/test/CodeGen/PowerPC/ignore-exceptions.cpp
  clang/test/CodeGen/atomic_ops.c
  clang/test/CodeGen/attr-cpuspecific.c
  clang/test/CodeGen/attr-target-clones.c
  clang/test/CodeGen/attr-target-mv-va-args.c
  clang/test/CodeGen/attr-target-mv.c
  clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp
  clang/test/CodeGenCXX/attr-cpuspecific.cpp
  clang/test/CodeGenCXX/attr-target-clones.cpp
  clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp
  clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp
  clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp
  clang/test/CodeGenCXX/attr-target-mv-overloads.cpp
  clang/test/CodeGenCXX/dynamic-cast.cpp
  clang/test/CodeGenCXX/runtimecc.cpp
  clang/test/CodeGenObjC/arc.m
  clang/test/CodeGenObjC/attr-objc-runtime-visible.m
  clang/test/CodeGenObjC/class-stubs.m
  clang/test/CodeGenObjC/nonlazy-msgSend.m
  clang/test/CodeGenObjC/objc-literal-debugger-test.m
  clang/test/PCH/objc_container.m

Index: clang/test/PCH/objc_container.m
===================================================================
--- clang/test/PCH/objc_container.m
+++ 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 {{.*}} }
Index: clang/test/CodeGenObjC/objc-literal-debugger-test.m
===================================================================
--- clang/test/CodeGenObjC/objc-literal-debugger-test.m
+++ 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" }
Index: clang/test/CodeGenObjC/nonlazy-msgSend.m
===================================================================
--- clang/test/CodeGenObjC/nonlazy-msgSend.m
+++ clang/test/CodeGenObjC/nonlazy-msgSend.m
@@ -5,4 +5,4 @@
   [x foo];
 }
 
-// CHECK: attributes [[NLB]] = { nonlazybind }
+// CHECK: attributes [[NLB]] = { nonlazybind {{.*}}}
Index: clang/test/CodeGenObjC/class-stubs.m
===================================================================
--- clang/test/CodeGenObjC/class-stubs.m
+++ 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) {{.*}} }
Index: clang/test/CodeGenObjC/attr-objc-runtime-visible.m
===================================================================
--- clang/test/CodeGenObjC/attr-objc-runtime-visible.m
+++ 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];
 }
Index: clang/test/CodeGenObjC/arc.m
===================================================================
--- clang/test/CodeGenObjC/arc.m
+++ 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 {{.*}}}
Index: clang/test/CodeGenCXX/runtimecc.cpp
===================================================================
--- clang/test/CodeGenCXX/runtimecc.cpp
+++ 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 }
Index: clang/test/CodeGenCXX/dynamic-cast.cpp
===================================================================
--- clang/test/CodeGenCXX/dynamic-cast.cpp
+++ 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 }
Index: clang/test/CodeGenCXX/attr-target-mv-overloads.cpp
===================================================================
--- clang/test/CodeGenCXX/attr-target-mv-overloads.cpp
+++ 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"
Index: clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp
===================================================================
--- clang/test/CodeGenCXX/attr-target-mv-out-of-line-defs.cpp
+++ 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)
Index: clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp
===================================================================
--- clang/test/CodeGenCXX/attr-target-mv-member-funcs.cpp
+++ 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"
Index: clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp
===================================================================
--- clang/test/CodeGenCXX/attr-target-mv-diff-ns.cpp
+++ 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)
Index: clang/test/CodeGenCXX/attr-target-clones.cpp
===================================================================
--- clang/test/CodeGenCXX/attr-target-clones.cpp
+++ 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
 
Index: clang/test/CodeGenCXX/attr-cpuspecific.cpp
===================================================================
--- clang/test/CodeGenCXX/attr-cpuspecific.cpp
+++ 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"
Index: clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp
===================================================================
--- clang/test/CodeGenCXX/RISCV/riscv-target-features-attr.cpp
+++ 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
Index: clang/test/CodeGen/attr-target-mv.c
===================================================================
--- clang/test/CodeGen/attr-target-mv.c
+++ 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()
Index: clang/test/CodeGen/attr-target-mv-va-args.c
===================================================================
--- clang/test/CodeGen/attr-target-mv-va-args.c
+++ 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
Index: clang/test/CodeGen/attr-target-clones.c
===================================================================
--- clang/test/CodeGen/attr-target-clones.c
+++ 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
 
Index: clang/test/CodeGen/attr-cpuspecific.c
===================================================================
--- clang/test/CodeGen/attr-cpuspecific.c
+++ 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()
Index: clang/test/CodeGen/atomic_ops.c
===================================================================
--- clang/test/CodeGen/atomic_ops.c
+++ clang/test/CodeGen/atomic_ops.c
@@ -113,4 +113,4 @@
   return (in *= 5);
 }
 
-// LIBCALL: [[LC_ATTRS]] = { nounwind willreturn }
+// LIBCALL: [[LC_ATTRS]] = { nounwind willreturn {{.*}} }
Index: clang/test/CodeGen/PowerPC/ignore-exceptions.cpp
===================================================================
--- clang/test/CodeGen/PowerPC/ignore-exceptions.cpp
+++ 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
Index: clang/lib/CodeGen/CodeGenModule.cpp
===================================================================
--- clang/lib/CodeGen/CodeGenModule.cpp
+++ 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);
Index: clang/lib/CodeGen/CGCall.cpp
===================================================================
--- clang/lib/CodeGen/CGCall.cpp
+++ 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);
 }
 
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
  • [PATCH] D139704: [clang][R... Elena Lepilkina via Phabricator via cfe-commits

Reply via email to