File tree Expand file tree Collapse file tree 4 files changed +10
-10
lines changed Expand file tree Collapse file tree 4 files changed +10
-10
lines changed Original file line number Diff line number Diff line change @@ -4610,10 +4610,6 @@ void CodeGenModule::emitMultiVersionFunctions() {
46104610 }
46114611 llvm::Function *ResolverFunc = cast<llvm::Function>(ResolverConstant);
46124612
4613- if (!ResolverFunc->hasLocalLinkage () && supportsCOMDAT ())
4614- ResolverFunc->setComdat (
4615- getModule ().getOrInsertComdat (ResolverFunc->getName ()));
4616-
46174613 const TargetInfo &TI = getTarget ();
46184614 llvm::stable_sort (
46194615 Options, [&TI](const CodeGenFunction::FMVResolverOption &LHS,
@@ -4622,7 +4618,11 @@ void CodeGenModule::emitMultiVersionFunctions() {
46224618 });
46234619 CodeGenFunction CGF (*this );
46244620 CGF.EmitMultiVersionResolver (ResolverFunc, Options);
4621+
46254622 setMultiVersionResolverAttributes (ResolverFunc, GD);
4623+ if (!ResolverFunc->hasLocalLinkage () && supportsCOMDAT ())
4624+ ResolverFunc->setComdat (
4625+ getModule ().getOrInsertComdat (ResolverFunc->getName ()));
46264626 }
46274627
46284628 // Ensure that any additions to the deferred decls list caused by emitting a
Original file line number Diff line number Diff line change @@ -328,7 +328,7 @@ __attribute__((target_clones("aes"))) void clones_without_default(void) {}
328328// CHECK-NEXT: ret void
329329//
330330//
331- // CHECK-LABEL: define {{[^@]+}}@internal_func.resolver() comdat {
331+ // CHECK-LABEL: define {{[^@]+}}@internal_func.resolver() {
332332// CHECK-NEXT: resolver_entry:
333333// CHECK-NEXT: call void @__init_cpu_features_resolver()
334334// CHECK-NEXT: [[TMP0:%.*]] = load i64, ptr @__aarch64_cpu_features, align 8
Original file line number Diff line number Diff line change 4444static int __attribute__((target_clones ("sse4.2, default" ))) internal (void ) { return 0 ; }
4545int use (void ) { return internal (); }
4646/// Internal linkage resolvers do not use comdat.
47- // LINUX: define internal ptr @internal.resolver() comdat {
47+ // LINUX: define internal ptr @internal.resolver() {
4848// DARWIN: define internal ptr @internal.resolver() {
49- // WINDOWS: define internal i32 @internal() comdat {
49+ // WINDOWS: define internal i32 @internal() {
5050
5151int __attribute__((target_clones ("sse4.2, default" ))) foo (void ) { return 0 ; }
5252// LINUX: define {{.*}}i32 @foo.sse4.2.0()
Original file line number Diff line number Diff line change @@ -283,9 +283,9 @@ void calls_pr50025c(void) { pr50025c(); }
283283// WINDOWS: call i32 @foo
284284
285285/// Internal linkage resolvers do not use comdat.
286- // LINUX: define internal ptr @foo_internal.resolver() comdat {
287- // DARWIN: define internal ptr @foo_internal.resolver() {
288- // WINDOWS: define internal i32 @foo_internal.resolver() comdat {
286+ // ITANIUM: define internal ptr @foo_internal.resolver() {
287+
288+ // WINDOWS: define internal i32 @foo_internal.resolver() {
289289
290290// ITANIUM: define{{.*}} i32 @bar2()
291291// ITANIUM: call i32 @foo_inline.ifunc()
You can’t perform that action at this time.
0 commit comments