Skip to content

Commit 4eafbe4

Browse files
committed
Fix setting comdats on resolver functions
1 parent e1c1e23 commit 4eafbe4

File tree

4 files changed

+10
-10
lines changed

4 files changed

+10
-10
lines changed

clang/lib/CodeGen/CodeGenModule.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff 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

clang/test/CodeGen/AArch64/fmv-resolver-emission.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff 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

clang/test/CodeGen/attr-target-clones.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@
4444
static int __attribute__((target_clones("sse4.2, default"))) internal(void) { return 0; }
4545
int 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

5151
int __attribute__((target_clones("sse4.2, default"))) foo(void) { return 0; }
5252
// LINUX: define {{.*}}i32 @foo.sse4.2.0()

clang/test/CodeGen/attr-target-mv.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff 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()

0 commit comments

Comments
 (0)