Author: Sriraman Tallam Date: 2020-09-21T10:00:12-07:00 New Revision: 6950db36d33d85d18e3241ab6c87494c05ebe0fb
URL: https://github.com/llvm/llvm-project/commit/6950db36d33d85d18e3241ab6c87494c05ebe0fb DIFF: https://github.com/llvm/llvm-project/commit/6950db36d33d85d18e3241ab6c87494c05ebe0fb.diff LOG: The wrong placement of add pass with optimizations led to -funique-internal-linkage-names being disabled. Fixed the placement of the MPM.addpass for UniqueInternalLinkageNames to make it work correctly with -O2 and new pass manager. Updated the tests to explicitly check O0 and O2. Previously, the addPass was placed before BackendUtil.cpp#L1373 which is wrong as MPM gets assigned at this point and any additions to the pass vector before this is wrong. This change just moves it after MPM is assigned and places it at a point where O0 and O0+ can share it. Differential Revision: https://reviews.llvm.org/D87921 Added: Modified: clang/lib/CodeGen/BackendUtil.cpp clang/test/CodeGen/unique-internal-linkage-names.cpp Removed: ################################################################################ diff --git a/clang/lib/CodeGen/BackendUtil.cpp b/clang/lib/CodeGen/BackendUtil.cpp index 01f7e239f790..07c476218bb0 100644 --- a/clang/lib/CodeGen/BackendUtil.cpp +++ b/clang/lib/CodeGen/BackendUtil.cpp @@ -1262,12 +1262,6 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( if (LangOpts.Sanitize.has(SanitizerKind::LocalBounds)) MPM.addPass(createModuleToFunctionPassAdaptor(BoundsCheckingPass())); - // Add UniqueInternalLinkageNames Pass which renames internal linkage - // symbols with unique names. - if (CodeGenOpts.UniqueInternalLinkageNames) { - MPM.addPass(UniqueInternalLinkageNamesPass()); - } - // Lastly, add semantically necessary passes for LTO. if (IsLTO || IsThinLTO) { MPM.addPass(CanonicalizeAliasesPass()); @@ -1363,12 +1357,6 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( MPM.addPass(InstrProfiling(*Options, false)); }); - // Add UniqueInternalLinkageNames Pass which renames internal linkage - // symbols with unique names. - if (CodeGenOpts.UniqueInternalLinkageNames) { - MPM.addPass(UniqueInternalLinkageNamesPass()); - } - if (IsThinLTO) { MPM = PB.buildThinLTOPreLinkDefaultPipeline( Level, CodeGenOpts.DebugPassManager); @@ -1385,6 +1373,11 @@ void EmitAssemblyHelper::EmitAssemblyWithNewPassManager( } } + // Add UniqueInternalLinkageNames Pass which renames internal linkage + // symbols with unique names. + if (CodeGenOpts.UniqueInternalLinkageNames) + MPM.addPass(UniqueInternalLinkageNamesPass()); + if (CodeGenOpts.MemProf) { MPM.addPass(createModuleToFunctionPassAdaptor(MemProfilerPass())); MPM.addPass(ModuleMemProfilerPass()); diff --git a/clang/test/CodeGen/unique-internal-linkage-names.cpp b/clang/test/CodeGen/unique-internal-linkage-names.cpp index 271d30e4e6fb..6bef338b5f1d 100644 --- a/clang/test/CodeGen/unique-internal-linkage-names.cpp +++ b/clang/test/CodeGen/unique-internal-linkage-names.cpp @@ -1,8 +1,10 @@ // This test checks if internal linkage symbols get unique names with // -funique-internal-linkage-names option. // RUN: %clang_cc1 -triple x86_64 -x c++ -S -emit-llvm -o - < %s | FileCheck %s --check-prefix=PLAIN -// RUN: %clang_cc1 -triple x86_64 -x c++ -S -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE -// RUN: %clang_cc1 -triple x86_64 -x c++ -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE +// RUN: %clang_cc1 -triple x86_64 -x c++ -O0 -S -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE +// RUN: %clang_cc1 -triple x86_64 -x c++ -O1 -S -emit-llvm -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUEO1 +// RUN: %clang_cc1 -triple x86_64 -x c++ -O0 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUE +// RUN: %clang_cc1 -triple x86_64 -x c++ -O1 -S -emit-llvm -fexperimental-new-pass-manager -funique-internal-linkage-names -o - < %s | FileCheck %s --check-prefix=UNIQUEO1 static int glob; static int foo() { @@ -59,3 +61,7 @@ int mver_call() { // UNIQUE: define weak_odr i32 ()* @_ZL4mverv.resolver() // UNIQUE: define internal i32 @_ZL4mverv.{{[0-9a-f]+}}() // UNIQUE: define internal i32 @_ZL4mverv.sse4.2.{{[0-9a-f]+}} +// UNIQUEO1: define internal i32 @_ZL3foov.{{[0-9a-f]+}}() +// UNIQUEO1: define weak_odr i32 ()* @_ZL4mverv.resolver() +// UNIQUEO1: define internal i32 @_ZL4mverv.{{[0-9a-f]+}}() +// UNIQUEO1: define internal i32 @_ZL4mverv.sse4.2.{{[0-9a-f]+}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits