[Clang] Add option to disable -mconstructor-aliases with -mno-constructor-aliases
We've found that when profiling, counts are only generated for the real definition of constructor aliases (C2 in mangled name). However, when compiling the C1 version is present at the callsite and leads to a lack of counts due to this aliasing. This causes us to miss out on inlining an otherwise hot constructor. -mconstructor-aliases is AFAICT an optimization, so having a disabling flag if wanted seems valuable. Testing: ninja check-all Reviewed By: wenlei Differential Revision: https://reviews.llvm.org/D114130
This commit is contained in:
parent
a503cb00d1
commit
9b704d31b5
|
@ -5065,9 +5065,10 @@ def msmall_data_limit : Separate<["-"], "msmall-data-limit">,
|
||||||
def funwind_tables_EQ : Joined<["-"], "funwind-tables=">,
|
def funwind_tables_EQ : Joined<["-"], "funwind-tables=">,
|
||||||
HelpText<"Generate unwinding tables for all functions">,
|
HelpText<"Generate unwinding tables for all functions">,
|
||||||
MarshallingInfoInt<CodeGenOpts<"UnwindTables">>;
|
MarshallingInfoInt<CodeGenOpts<"UnwindTables">>;
|
||||||
def mconstructor_aliases : Flag<["-"], "mconstructor-aliases">,
|
defm constructor_aliases : BoolOption<"m", "constructor-aliases",
|
||||||
HelpText<"Emit complete constructors and destructors as aliases when possible">,
|
CodeGenOpts<"CXXCtorDtorAliases">, DefaultFalse,
|
||||||
MarshallingInfoFlag<CodeGenOpts<"CXXCtorDtorAliases">>;
|
PosFlag<SetTrue, [], "Enable">, NegFlag<SetFalse, [], "Disable">,
|
||||||
|
BothFlags<[CC1Option], " emitting complete constructors and destructors as aliases when possible">>;
|
||||||
def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">,
|
def mlink_bitcode_file : Separate<["-"], "mlink-bitcode-file">,
|
||||||
HelpText<"Link the given bitcode file before performing optimizations.">;
|
HelpText<"Link the given bitcode file before performing optimizations.">;
|
||||||
def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">,
|
def mlink_builtin_bitcode : Separate<["-"], "mlink-builtin-bitcode">,
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
// RUN: %clang_cc1 -emit-llvm -triple mipsel--linux-gnu -mconstructor-aliases -o - %s | FileCheck %s
|
// RUN: %clang_cc1 -emit-llvm -triple mipsel--linux-gnu -mno-constructor-aliases -mconstructor-aliases -o - %s | FileCheck %s
|
||||||
|
// RUN: %clang_cc1 -emit-llvm -triple mipsel--linux-gnu -mconstructor-aliases -mno-constructor-aliases -o - %s | FileCheck %s --check-prefix=NO-ALIAS
|
||||||
|
|
||||||
// The target attribute code used to get confused with aliases. Make sure
|
// The target attribute code used to get confused with aliases. Make sure
|
||||||
// we don't crash when an alias is used.
|
// we don't crash when an alias is used.
|
||||||
|
@ -10,3 +11,4 @@ B::B() {
|
||||||
}
|
}
|
||||||
|
|
||||||
// CHECK: @_ZN1BC1Ev ={{.*}} unnamed_addr alias void (%struct.B*), void (%struct.B*)* @_ZN1BC2Ev
|
// CHECK: @_ZN1BC1Ev ={{.*}} unnamed_addr alias void (%struct.B*), void (%struct.B*)* @_ZN1BC2Ev
|
||||||
|
// NO-ALIAS-NOT: @_ZN1BC1Ev ={{.*}} unnamed_addr alias void (%struct.B*), void (%struct.B*)* @_ZN1BC2Ev
|
||||||
|
|
Loading…
Reference in New Issue