; RUN: opt < %s -globalopt -disable-output
; PR820
target datalayout = "e-p:32:32"
target triple = "i686-pc-linux-gnu"
	%struct..0FileDescriptor = type { i32 }
	%"struct.FlagDescription<int32>" = type { i8*, i32*, i1, i1, i32, i8* }
	%"struct.FlagRegisterer<bool>" = type { i8 }
	%struct.MutexLock = type { %struct..0FileDescriptor* }
	%"struct.std::DisabledRangeMap" = type { %"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >" }
	%"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >" = type { %"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >::_Rb_tree_impl<StringCmp,false>" }
	%"struct.std::_Rb_tree<const char*,std::pair<const char* const, FlagDescription<bool> >,std::_Select1st<std::pair<const char* const, FlagDescription<bool> > >,StringCmp,std::allocator<std::pair<const char* const, FlagDescription<bool> > > >::_Rb_tree_impl<StringCmp,false>" = type { %"struct.FlagRegisterer<bool>", %"struct.std::_Rb_tree_node_base", i32 }
	%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >" = type { %"struct.std::_Rb_tree_node_base"* }
	%"struct.std::_Rb_tree_node_base" = type { i32, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"*, %"struct.std::_Rb_tree_node_base"* }
	%"struct.std::_Vector_base<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" }
	%"struct.std::_Vector_base<int,std::allocator<int> >::_Vector_impl" = type { i32*, i32*, i32* }
	%"struct.std::vector<int,std::allocator<int> >" = type { %"struct.std::_Vector_base<int,std::allocator<int> >" }
@registry_lock = external global %struct..0FileDescriptor		; <%struct..0FileDescriptor*> [#uses=0]
@_ZN61FLAG__foo_int32_44FLAGS_E = external global %"struct.FlagRegisterer<bool>"		; <%"struct.FlagRegisterer<bool>"*> [#uses=0]
@llvm.global_ctors = appending global [20 x { i32, void ()* }] [ { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_10FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN60FLAG__foo_bool_19FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZNK5Bzh4Enum13is_contiguousEv }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_21FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN7ScannerC2Ev }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__Z11StripStringPSsPKcc }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZNK9__gnu_cxx4hashI11StringPieceEclERKS1_ }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN8Hasher325ResetEj }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__Z25ACLRv }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int64_25FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_7FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_18FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_25FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I_eventbuf }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN61FLAG__foo_int32_26FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN62FLAG__foo_string_16FLAGS_E }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__ZN17InitializerC2EPKcS1_PFvvE }, { i32, void ()* } { i32 65535, void ()* @_GLOBAL__I__checker_bcad_variable } ]		; <[20 x { i32, void ()* }]*> [#uses=0]

declare void @_GLOBAL__I__ZN62FLAG__foo_string_10FLAGS_E()

declare void @_GLOBAL__I__ZN60FLAG__foo_bool_19FLAGS_E()

declare void @_GLOBAL__I__ZNK5Bzh4Enum13is_contiguousEv()

declare void @_GLOBAL__I__ZN62FLAG__foo_string_17FLAGS_E()

declare void @_GLOBAL__I__ZN61FLAG__foo_int32_21FLAGS_E()

define void @_ZN14FlagRegistererIiEC1EPKcRK15FlagDescriptionIiE() {
entry:
	call void @_Z12RegisterFlagIiEvPKcRK15FlagDescriptionIT_E( )
	ret void
}

define void @_Z12RegisterFlagIiEvPKcRK15FlagDescriptionIT_E() {
entry:
	call void @_ZN9MutexLockC1EP5Mutex( )
	ret void
}

declare void @_GLOBAL__I__ZN7ScannerC2Ev()

declare void @_GLOBAL__I__Z11StripStringPSsPKcc()

define void @_ZNSt6vectorIiSaIiEEC1ERKS0_() {
entry:
	unreachable
}

declare void @_GLOBAL__I__ZNK9__gnu_cxx4hashI11StringPieceEclERKS1_()

declare void @_GLOBAL__I__ZN8Hasher325ResetEj()

declare void @_GLOBAL__I__Z25ACLRv()

define void @_ZN9MutexLockC1EP5Mutex() {
entry:
	call void @_ZN5Mutex4LockEv( )
	ret void
}

define void @_ZN5Mutex4LockEv() {
entry:
	call void @_Z22Acquire_CASPViii( )
	ret void
}

define void @_ZNSt3mapIPKc15FlagDescriptionIiE9StringCmpSaISt4pairIKS1_S3_EEE3endEv(%"struct.std::_Rb_tree_const_iterator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >"* sret  %agg.result) {
entry:
	unreachable
}

declare void @_GLOBAL__I__ZN61FLAG__foo_int64_25FLAGS_E()

define void @_Z14CASPViii() {
entry:
	%tmp3 = call i32 asm sideeffect "lock; cmpxchg $1,$2", "={ax},q,m,0,~{dirflag},~{fpsr},~{flags},~{memory}"( i32 0, i32* null, i32 0 )		; <i32> [#uses=0]
	unreachable
}

declare void @_GLOBAL__I__ZN61FLAG__foo_int32_7FLAGS_E()

declare void @_GLOBAL__I__ZN62FLAG__foo_string_18FLAGS_E()

define void @_Z22Acquire_CASPViii() {
entry:
	call void @_Z14CASPViii( )
	unreachable
}

declare void @_GLOBAL__I__ZN61FLAG__foo_int32_25FLAGS_E()

declare void @_GLOBAL__I_eventbuf()

define void @_GLOBAL__I__ZN61FLAG__foo_int32_26FLAGS_E() {
entry:
	call void @_Z41__static_initialization_and_destruction_0ii1662( i32 1, i32 65535 )
	ret void
}

define void @_Z41__static_initialization_and_destruction_0ii1662(i32 %__initialize_p, i32 %__priority) {
entry:
	%__initialize_p_addr = alloca i32		; <i32*> [#uses=2]
	%__priority_addr = alloca i32		; <i32*> [#uses=2]
	store i32 %__initialize_p, i32* %__initialize_p_addr
	store i32 %__priority, i32* %__priority_addr
	%tmp = load i32, i32* %__priority_addr		; <i32> [#uses=1]
	%tmp.upgrd.1 = icmp eq i32 %tmp, 65535		; <i1> [#uses=1]
	br i1 %tmp.upgrd.1, label %cond_true, label %cond_next14

cond_true:		; preds = %entry
	%tmp8 = load i32, i32* %__initialize_p_addr		; <i32> [#uses=1]
	%tmp9 = icmp eq i32 %tmp8, 1		; <i1> [#uses=1]
	br i1 %tmp9, label %cond_true10, label %cond_next14

cond_true10:		; preds = %cond_true
	call void @_ZN14FlagRegistererIiEC1EPKcRK15FlagDescriptionIiE( )
	ret void

cond_next14:		; preds = %cond_true, %entry
	ret void
}

declare void @_GLOBAL__I__ZN62FLAG__foo_string_16FLAGS_E()

define void @_ZN9__gnu_cxx13new_allocatorIPNS_15_Hashtable_nodeIjEEEC2Ev() {
entry:
	unreachable
}

declare void @_GLOBAL__I__ZN17InitializerC2EPKcS1_PFvvE()

declare void @_GLOBAL__I__checker_bcad_variable()
