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
15 lines
627 B
C++
15 lines
627 B
C++
// 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
|
|
// we don't crash when an alias is used.
|
|
|
|
struct B {
|
|
B();
|
|
};
|
|
B::B() {
|
|
}
|
|
|
|
// 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
|