llvm/lld/test/wasm/lto/Inputs/comdat_ordering2.ll

target datalayout = "e-m:e-p:32:32-p10:8:8-p20:8:8-i64:64-n32:64-S128"
target triple = "wasm32-unknown-unknown"

; Generated from this C++ code and simplified manually:
;
; int foo();
; inline int unused = foo();
;
; int foo() {
;   return 42;
; }

$unused = comdat any

@unused = linkonce_odr global i32 0, comdat, align 4
@_ZGV6unused = linkonce_odr global i32 0, comdat($unused), align 4
@llvm.global_ctors = appending global [1 x { i32, ptr, ptr }] [{ i32, ptr, ptr } { i32 65535, ptr @__cxx_global_var_init, ptr @unused }]

define internal void @__cxx_global_var_init() comdat($unused) {
entry:
  %0 = load i8, ptr @_ZGV6unused, align 4
  %1 = and i8 %0, 1
  %guard.uninitialized = icmp eq i8 %1, 0
  br i1 %guard.uninitialized, label %init.check, label %init.end

init.check:                                       ; preds = %entry
  store i8 1, ptr @_ZGV6unused, align 4
  %call = call i32 @foo()
  store i32 %call, ptr @unused, align 4
  br label %init.end

init.end:                                         ; preds = %init.check, %entry
  ret void
}

define i32 @foo() {
entry:
  ret i32 42
}