Index: llvm/lib/ProfileData/InstrProf.cpp =================================================================== --- llvm/lib/ProfileData/InstrProf.cpp +++ llvm/lib/ProfileData/InstrProf.cpp @@ -926,8 +926,7 @@ if (F.hasComdat()) return true; - Triple TT(M.getTargetTriple()); - if (!TT.isOSBinFormatELF() && !TT.isOSBinFormatWasm()) + if (!Triple(M.getTargetTriple()).supportsCOMDAT()) return false; // See createPGOFuncNameVar for more details. To avoid link errors, profile Index: llvm/test/Instrumentation/InstrProfiling/linkage.ll =================================================================== --- llvm/test/Instrumentation/InstrProfiling/linkage.ll +++ llvm/test/Instrumentation/InstrProfiling/linkage.ll @@ -32,6 +32,8 @@ ; COMMON: @"__profc_linkage.ll:foo_internal" = internal global ; COMMON: @"__profd_linkage.ll:foo_internal" = internal global +; COFF: @"__profc_linkage.ll:foo_internal" = internal global +; COFF: @"__profd_linkage.ll:foo_internal" = internal global define internal void @foo_internal() { call void @llvm.instrprof.increment(i8* getelementptr inbounds ([23 x i8], [23 x i8]* @"__profn_linkage.ll:foo_internal", i32 0, i32 0), i64 0, i32 1, i32 0) ret void @@ -39,6 +41,9 @@ ; COMMON: @__profc_foo_inline = linkonce_odr hidden global ; COMMON: @__profd_foo_inline = linkonce_odr hidden global +; FIXME: Should we put a comdat here? +; COFF: @__profc_foo_inline = linkonce_odr hidden global {{.*}}section ".lprfc", align 8 +; COFF: @__profd_foo_inline = linkonce_odr hidden global {{.*}}section ".lprfd", align 8 define linkonce_odr void @foo_inline() { call void @llvm.instrprof.increment(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @__profn_foo_inline, i32 0, i32 0), i64 0, i32 1, i32 0) ret void @@ -48,6 +53,8 @@ ; LINUX: @__profd_foo_extern = linkonce_odr hidden global {{.*}}section "__llvm_prf_data", comdat($__profv_foo_extern), align 8 ; OTHER: @__profc_foo_extern = linkonce_odr hidden global ; OTHER: @__profd_foo_extern = linkonce_odr hidden global +; COFF: @__profc_foo_extern = linkonce_odr hidden global {{.*}}section ".lprfc", comdat, align 8 +; COFF: @__profd_foo_extern = linkonce_odr hidden global {{.*}}section ".lprfd", comdat($__profc_foo_extern), align 8 define available_externally void @foo_extern() { call void @llvm.instrprof.increment(i8* getelementptr inbounds ([10 x i8], [10 x i8]* @__profn_foo_extern, i32 0, i32 0), i64 0, i32 1, i32 0) ret void Index: llvm/test/Transforms/PGOProfile/comdat_rename.ll =================================================================== --- llvm/test/Transforms/PGOProfile/comdat_rename.ll +++ llvm/test/Transforms/PGOProfile/comdat_rename.ll @@ -1,25 +1,25 @@ -; RUN: opt < %s -mtriple=x86_64-unknown-linux -pgo-instr-gen -do-comdat-renaming=true -S | FileCheck --check-prefixes COMMON,ELFONLY %s -; RUN: opt < %s -mtriple=x86_64-unknown-linux -passes=pgo-instr-gen -do-comdat-renaming=true -S | FileCheck --check-prefixes COMMON,ELFONLY %s -; RUN: opt < %s -mtriple=x86_64-pc-win32-coff -pgo-instr-gen -do-comdat-renaming=true -S | FileCheck --check-prefixes COMMON,COFFONLY %s -; RUN: opt < %s -mtriple=x86_64-pc-win32-coff -passes=pgo-instr-gen -do-comdat-renaming=true -S | FileCheck --check-prefixes COMMON,COFFONLY %s +; RUN: opt < %s -mtriple=x86_64-unknown-linux -pgo-instr-gen -do-comdat-renaming=true -S | FileCheck %s +; RUN: opt < %s -mtriple=x86_64-unknown-linux -passes=pgo-instr-gen -do-comdat-renaming=true -S | FileCheck %s +; RUN: opt < %s -mtriple=x86_64-pc-win32-coff -pgo-instr-gen -do-comdat-renaming=true -S | FileCheck %s +; RUN: opt < %s -mtriple=x86_64-pc-win32-coff -passes=pgo-instr-gen -do-comdat-renaming=true -S | FileCheck %s ; Rename Comdat group and its function. $f = comdat any -; COMMON: $f.[[SINGLEBB_HASH:[0-9]+]] = comdat any +; CHECK: $f.[[SINGLEBB_HASH:[0-9]+]] = comdat any define linkonce_odr void @f() comdat($f) { ret void } ; Not rename Comdat with right linkage. $nf = comdat any -; COMMON: $nf = comdat any +; CHECK: $nf = comdat any define void @nf() comdat($nf) { ret void } ; Not rename Comdat with variable members. $f_with_var = comdat any -; COMMON: $f_with_var = comdat any +; CHECK: $f_with_var = comdat any @var = global i32 0, comdat($f_with_var) define linkonce_odr void @f_with_var() comdat($f_with_var) { %tmp = load i32, i32* @var, align 4 @@ -30,7 +30,7 @@ ; Not rename Comdat with multiple functions. $tf = comdat any -; COMMON: $tf = comdat any +; CHECK: $tf = comdat any define linkonce void @tf() comdat($tf) { ret void } @@ -39,14 +39,13 @@ } ; Rename AvailableExternallyLinkage functions -; ELFONLY-DAG: $aef.[[SINGLEBB_HASH]] = comdat any +; CHECK-DAG: $aef.[[SINGLEBB_HASH]] = comdat any -; ELFONLY: @f = weak alias void (), void ()* @f.[[SINGLEBB_HASH]] -; ELFONLY: @aef = weak alias void (), void ()* @aef.[[SINGLEBB_HASH]] +; CHECK: @f = weak alias void (), void ()* @f.[[SINGLEBB_HASH]] +; CHECK: @aef = weak alias void (), void ()* @aef.[[SINGLEBB_HASH]] define available_externally void @aef() { -; ELFONLY: define linkonce_odr void @aef.[[SINGLEBB_HASH]]() comdat { -; COFFONLY: define available_externally void @aef() { +; CHECK: define linkonce_odr void @aef.[[SINGLEBB_HASH]]() comdat { ret void }