62 lines · plain
1; Check that the basic block sections suffix naming does not conflict with __cxx_global_var_init.N naming.2; How to generate this file:3;; class A {4;; public:5;; A(bool a) { }6;; };7;;8;; extern bool bar(int);9;; A g_a(bar(5) ? bar(3) : false), g_b(true);10;;11;; $ clang -O1 -emit-llvm -S12;;13; __cxx_global_var_init has multiple basic blocks which will produce many sections.14; RUN: llc < %s -mtriple=x86_64-pc-linux -function-sections -basic-block-sections=all -unique-basic-block-section-names | FileCheck %s15 16; CHECK-LABEL: __cxx_global_var_init:17; CHECK-LABEL: __cxx_global_var_init.__part.1:18; CHECK-LABEL: __cxx_global_var_init.1:19 20%class.A = type { i8 }21 22$_ZN1AC2Eb = comdat any23 24@g_a = dso_local global %class.A zeroinitializer, align 125@g_b = dso_local global %class.A zeroinitializer, align 126@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @_GLOBAL__sub_I_symcollision.cc, ptr null }]27 28define internal fastcc void @__cxx_global_var_init() unnamed_addr section ".text.startup" {29entry:30 %call = call zeroext i1 @_Z3bari(i32 5)31 br i1 %call, label %cond.true, label %cond.end32 33cond.true: ; preds = %entry34 %call1 = call zeroext i1 @_Z3bari(i32 3)35 br label %cond.end36 37cond.end: ; preds = %entry, %cond.true38 %cond = phi i1 [ %call1, %cond.true ], [ false, %entry ]39 call void @_ZN1AC2Eb(ptr nonnull @g_a, i1 zeroext %cond)40 ret void41}42 43declare dso_local zeroext i1 @_Z3bari(i32) local_unnamed_addr44 45define linkonce_odr dso_local void @_ZN1AC2Eb(ptr %this, i1 zeroext %a) unnamed_addr comdat align 2 {46entry:47 ret void48}49 50define internal fastcc void @__cxx_global_var_init.1() unnamed_addr section ".text.startup" {51entry:52 call void @_ZN1AC2Eb(ptr nonnull @g_b, i1 zeroext true)53 ret void54}55 56define internal void @_GLOBAL__sub_I_symcollision.cc() section ".text.startup" {57entry:58 call fastcc void @__cxx_global_var_init()59 call fastcc void @__cxx_global_var_init.1()60 ret void61}62