; LLVM IR from thepowersgang/mrustc :: src/mir/optimise.ll (Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)

; Unoptimized IR (clang -disable-llvm-passes):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.TraceLog = type { ptr, %"class.std::function" }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.430 = type { i8 }
%class.anon.432 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%struct.FmtLambda = type { %"class.std::function" }
%class.anon.433 = type { ptr }
%"class.MIR::Constant" = type { i32, %"union.MIR::Constant::DataUnion" }
%"union.MIR::Constant::DataUnion" = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.MIR::Constant::Data_Uint" = type <{ %class.U128, i32, [4 x i8] }>
%class.U128 = type { i64, i64 }
%"class.MIR::Statement" = type { i32, %"union.MIR::Statement::DataUnion" }
%"union.MIR::Statement::DataUnion" = type { %"struct.MIR::Statement::Data_Assign" }
%"struct.MIR::Statement::Data_Assign" = type { %"struct.MIR::LValue", %"class.MIR::RValue" }
%"struct.MIR::LValue" = type { %"class.MIR::LValue::Storage", %"class.std::vector.106" }
%"class.MIR::LValue::Storage" = type { i64 }
%"class.std::vector.106" = type { %"struct.std::_Vector_base.107" }
%"struct.std::_Vector_base.107" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::RValue" = type { i32, %"union.MIR::RValue::DataUnion" }
%"union.MIR::RValue::DataUnion" = type { %"struct.MIR::RValue::Data_BinOp" }
%"struct.MIR::RValue::Data_BinOp" = type { %"class.MIR::Param", i32, %"class.MIR::Param" }
%"class.MIR::Param" = type { i32, %"union.MIR::Param::DataUnion" }
%"union.MIR::Param::DataUnion" = type { %"struct.MIR::Param::Data_Borrow" }
%"struct.MIR::Param::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%"class.MIR::Terminator" = type { i32, %"union.MIR::Terminator::DataUnion" }
%"union.MIR::Terminator::DataUnion" = type { %"struct.MIR::Terminator::Data_Call" }
%"struct.MIR::Terminator::Data_Call" = type { i32, i32, %"struct.MIR::LValue", %"class.MIR::CallTarget", %"class.std::vector.138" }
%"class.MIR::CallTarget" = type { i32, %"union.MIR::CallTarget::DataUnion" }
%"union.MIR::CallTarget::DataUnion" = type { %"class.HIR::Path" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.133, %class.ThinVector.134, %class.ThinVector.135 }
%class.ThinVector.133 = type { ptr }
%class.ThinVector.134 = type { ptr }
%class.ThinVector.135 = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.137" }
%"struct.std::_Head_base.137" = type { ptr }
%"class.std::vector.138" = type { %"struct.std::_Vector_base.139" }
%"struct.std::_Vector_base.139" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.434 = type { i8 }
%"struct.MIR::RValue::Data_DstMeta" = type { %"struct.MIR::LValue" }
%"class.std::function.436" = type { %"class.std::_Function_base", ptr }
%class.anon.439 = type { i8 }
%"struct.MIR::Constant::Data_Bool" = type { i8 }
%"class.std::map.441" = type { %"class.std::_Rb_tree.442" }
%"class.std::_Rb_tree.442" = type { %"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, MIR::Constant>, std::_Select1st<std::pair<const MIR::LValue, MIR::Constant>>, std::less<MIR::LValue>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, MIR::Constant>, std::_Select1st<std::pair<const MIR::LValue, MIR::Constant>>, std::less<MIR::LValue>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.447" = type { %"class.std::_Rb_tree.448" }
%"class.std::_Rb_tree.448" = type { %"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, unsigned int>, std::_Select1st<std::pair<const MIR::LValue, unsigned int>>, std::less<MIR::LValue>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, unsigned int>, std::_Select1st<std::pair<const MIR::LValue, unsigned int>>, std::less<MIR::LValue>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.452" = type { %"class.std::_Rb_tree.453" }
%"class.std::_Rb_tree.453" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, bool>, std::_Select1st<std::pair<const unsigned int, bool>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, bool>, std::_Select1st<std::pair<const unsigned int, bool>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%class.anon.457 = type { ptr, ptr }
%class.anon.458 = type { ptr, ptr }
%class.anon.459 = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.148" = type { ptr }
%"class.std::function.267" = type { %"class.std::_Function_base", ptr }
%"class.std::unique_ptr.157" = type { %"struct.std::__uniq_ptr_data.158" }
%"struct.std::__uniq_ptr_data.158" = type { %"class.std::__uniq_ptr_impl.159" }
%"class.std::__uniq_ptr_impl.159" = type { %"class.std::tuple.160" }
%"class.std::tuple.160" = type { %"struct.std::_Tuple_impl.161" }
%"struct.std::_Tuple_impl.161" = type { %"struct.std::_Head_base.164" }
%"struct.std::_Head_base.164" = type { ptr }
%"struct.MIR::Constant::Data_Int" = type <{ %class.S128, i32, [4 x i8] }>
%class.S128 = type { %class.U128 }
%class.anon.460 = type { ptr }
%class.anon.461 = type { ptr }
%class.anon.478 = type { i8 }
%class.anon.480 = type { ptr }
%class.anon.481 = type { ptr, ptr }
%class.anon.482 = type { ptr, ptr }
%"struct.MIR::Constant::Data_Float" = type { double, i32 }
%class.anon.483 = type { ptr, ptr }
%class.anon.484 = type { ptr, ptr }
%class.anon.485 = type { ptr, ptr }
%class.anon.486 = type { ptr, ptr }
%class.anon.487 = type { ptr, ptr }
%class.anon.488 = type { ptr, ptr }
%class.anon.489 = type { ptr, ptr }
%class.anon.490 = type { ptr, ptr }
%class.anon.491 = type { ptr, ptr }
%class.anon.492 = type { ptr, ptr }
%class.anon.493 = type { ptr, ptr }
%class.anon.494 = type { ptr, ptr }
%class.anon.495 = type { ptr, ptr }
%class.anon.496 = type { ptr, ptr }
%class.anon.497 = type { ptr, ptr }
%class.anon.498 = type { ptr, ptr }
%class.anon.499 = type { i8 }
%class.anon.501 = type { ptr, ptr }
%class.anon.502 = type { i8 }
%class.anon.504 = type { ptr, ptr }
%class.anon.505 = type { ptr, ptr }
%class.anon.506 = type { ptr, ptr }
%class.anon.507 = type { ptr, ptr }
%class.anon.508 = type { ptr, ptr }
%class.anon.509 = type { ptr, ptr }
%class.anon.510 = type { ptr, ptr }
%class.anon.511 = type { ptr, ptr }
%class.anon.512 = type { ptr, ptr }
%class.anon.513 = type { ptr, ptr, ptr }
%class.anon.514 = type { ptr, ptr }
%class.anon.515 = type { ptr, ptr, ptr }
%class.anon.516 = type { ptr, ptr }
%"struct.std::_Rb_tree_iterator.517" = type { ptr }
%class.anon.520 = type { ptr }
%class.anon.521 = type { ptr }
%"class.__gnu_cxx::__normal_iterator.215" = type { ptr }
%"struct.std::pair.526" = type <{ i32, i8, [3 x i8] }>
%"struct.std::pair.522" = type <{ %"struct.std::_Rb_tree_iterator.524", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator.524" = type { ptr }
%"struct.MIR::Statement::Data_ScopeEnd" = type { %"class.std::vector.111" }
%"class.std::vector.111" = type { %"struct.std::_Vector_base.112" }
%"struct.std::_Vector_base.112" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::function.226" = type { %"class.std::_Function_base", ptr }
%class.anon.532 = type { ptr, ptr }
%"struct.std::pair.536" = type { %"struct.MIR::LValue", %"class.MIR::Constant" }
%"struct.std::pair.533" = type <{ %"struct.std::_Rb_tree_iterator.517", i8, [7 x i8] }>
%"struct.std::pair.542" = type <{ %"struct.MIR::LValue", i32, [4 x i8] }>
%"struct.std::pair.538" = type <{ %"struct.std::_Rb_tree_iterator.540", i8, [7 x i8] }>
%"struct.std::_Rb_tree_iterator.540" = type { ptr }
%class.anon.548 = type { ptr, ptr }
%class.anon.549 = type { ptr }
%class.anon.550 = type { ptr }
%"class.MIR::Function" = type { %"class.std::vector.20", %"class.std::vector.25", %"class.std::vector.29", %"class.MIR::EnumCachePtr" }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.25" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::vector.29" = type { %"struct.std::_Vector_base.30" }
%"struct.std::_Vector_base.30" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::EnumCachePtr" = type { ptr }
%"struct.MIR::BasicBlock" = type { %"class.std::vector.101", %"class.MIR::Terminator" }
%"class.std::vector.101" = type { %"struct.std::_Vector_base.102" }
%"struct.std::_Vector_base.102" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"struct.MIR::CallTarget::Data_Intrinsic" = type { %class.RcString, %"struct.HIR::PathParams" }
%"class.MIR::TypeResolve" = type { i32, ptr, ptr, ptr, %struct.FmtLambda, ptr, ptr, ptr, ptr, ptr, ptr, i32, i32 }
%"struct.MIR::RValue::Data_SizedArray" = type { %"class.MIR::Param", %"class.HIR::ArraySize" }
%"class.HIR::ArraySize" = type { i32, %"union.HIR::ArraySize::DataUnion" }
%"union.HIR::ArraySize::DataUnion" = type { %"class.HIR::ConstGeneric" }
%"class.HIR::ConstGeneric" = type { i32, %"union.HIR::ConstGeneric::DataUnion" }
%"union.HIR::ConstGeneric::DataUnion" = type { %"class.std::unique_ptr.165", [8 x i8] }
%"class.std::unique_ptr.165" = type { %"struct.std::__uniq_ptr_data.166" }
%"struct.std::__uniq_ptr_data.166" = type { %"class.std::__uniq_ptr_impl.167" }
%"class.std::__uniq_ptr_impl.167" = type { %"class.std::tuple.168" }
%"class.std::tuple.168" = type { %"struct.std::_Tuple_impl.169" }
%"struct.std::_Tuple_impl.169" = type { %"struct.std::_Head_base.172" }
%"struct.std::_Head_base.172" = type { ptr }
%"struct.MIR::RValue::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%"struct.MIR::RValue::Data_Cast" = type { %"struct.MIR::LValue", %"class.HIR::TypeRef" }
%"struct.HIR::TypeData_Path" = type { %"class.HIR::Path", %"class.HIR::TypePathBinding", %"class.std::unique_ptr" }
%"class.HIR::TypePathBinding" = type { i32, %"union.HIR::TypePathBinding::DataUnion" }
%"union.HIR::TypePathBinding::DataUnion" = type { ptr }
%"struct.MIR::RValue::Data_UniOp" = type <{ %"struct.MIR::LValue", i32, [4 x i8] }>
%"struct.std::pair.518" = type { %"struct.MIR::LValue", %"class.MIR::Constant" }
%"struct.MIR::RValue::Data_MakeDst" = type { %"class.MIR::Param", %"class.MIR::Param" }
%"struct.MIR::RValue::Data_Tuple" = type { %"class.std::vector.138" }
%"struct.MIR::RValue::Data_Array" = type { %"class.std::vector.138" }
%"struct.MIR::RValue::Data_UnionVariant" = type { %"class.HIR::GenericPath", i32, %"class.MIR::Param" }
%"struct.MIR::RValue::Data_EnumVariant" = type { %"class.HIR::GenericPath", i32, %"class.std::vector.138" }
%"struct.MIR::RValue::Data_Struct" = type { %"class.HIR::GenericPath", %"class.std::vector.138" }
%"struct.MIR::Statement::Data_SetDropFlag" = type { i32, i8, i32 }
%"struct.std::pair.529" = type <{ i32, i8, [3 x i8] }>
%"struct.MIR::Statement::Data_Drop" = type <{ i32, [4 x i8], %"struct.MIR::LValue", i32, [4 x i8] }>
%"struct.std::pair.545" = type <{ %"struct.MIR::LValue", i32, [4 x i8] }>
%"struct.MIR::Terminator::Data_Switch" = type { %"struct.MIR::LValue", %"class.std::vector.111" }
%"struct.MIR::Terminator::Data_If" = type { %"struct.MIR::LValue", i32, i32 }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@g_debug_indent_level = external global i32, align 4
@.str.8 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@.str.28 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [4 x i8], align 1
@__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [28 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [11 x i8], align 1
@__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [74 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

declare noundef zeroext i1 @_Z13debug_enabledv() #1

; Function Attrs: nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9FmtLambdaC2ESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN9FmtLambdaD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: nounwind
declare void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4

declare void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, ptr noundef, ptr noundef) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(96) %1) #2 personality ptr @__gxx_personality_v0 {
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca i8, align 1
  %6 = alloca %class.TraceLog, align 8
  %7 = alloca %"class.std::function", align 8
  %8 = alloca %class.anon.430, align 1
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.432, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca ptr, align 8
  %14 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %16 = alloca i32, align 4
  %17 = alloca ptr, align 8
  %18 = alloca %struct.FmtLambda, align 8
  %19 = alloca %"class.std::function", align 8
  %20 = alloca %class.anon.433, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca %"class.MIR::Constant", align 8
  %25 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %26 = alloca %"class.MIR::Statement", align 8
  %27 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %28 = alloca %"class.MIR::Constant", align 8
  %29 = alloca i1, align 1
  %30 = alloca %"class.MIR::Terminator", align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca %"class.MIR::Constant", align 8
  %34 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %35 = alloca %"class.MIR::Statement", align 8
  %36 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %37 = alloca %"class.MIR::Constant", align 8
  %38 = alloca i1, align 1
  %39 = alloca %"class.MIR::Terminator", align 8
  %40 = alloca i64, align 8
  %41 = alloca %"class.MIR::Constant", align 8
  %42 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %43 = alloca %"class.MIR::Statement", align 8
  %44 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %45 = alloca %"class.MIR::Constant", align 8
  %46 = alloca i1, align 1
  %47 = alloca %"class.MIR::Terminator", align 8
  %48 = alloca i64, align 8
  %49 = alloca i64, align 8
  %50 = alloca %"class.MIR::Constant", align 8
  %51 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %52 = alloca %"class.MIR::Statement", align 8
  %53 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %54 = alloca %"class.MIR::Constant", align 8
  %55 = alloca i1, align 1
  %56 = alloca %"class.MIR::Terminator", align 8
  %57 = alloca i32, align 4
  %58 = alloca i32, align 4
  %59 = alloca ptr, align 8
  %60 = alloca %"class.MIR::Statement", align 8
  %61 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %62 = alloca %"struct.MIR::LValue", align 8
  %63 = alloca i1, align 1
  %64 = alloca %"class.MIR::Statement", align 8
  %65 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %66 = alloca %"class.MIR::Constant", align 8
  %67 = alloca i1, align 1
  %68 = alloca %"class.MIR::Terminator", align 8
  %69 = alloca %"class.std::function", align 8
  %70 = alloca %class.anon.434, align 1
  %71 = alloca ptr, align 8
  %72 = alloca %"class.MIR::Statement", align 8
  %73 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %74 = alloca %"struct.MIR::RValue::Data_DstMeta", align 8
  %75 = alloca i1, align 1
  %76 = alloca %"class.MIR::Terminator", align 8
  %77 = alloca ptr, align 8
  %78 = alloca %"class.std::function.436", align 8
  %79 = alloca %class.anon.439, align 1
  %80 = alloca i8, align 1
  %81 = alloca %"class.MIR::Statement", align 8
  %82 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %83 = alloca %"class.MIR::Constant", align 8
  %84 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %85 = alloca i1, align 1
  %86 = alloca %"class.MIR::Terminator", align 8
  %87 = alloca ptr, align 8
  %88 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %89 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %90 = alloca ptr, align 8
  %91 = alloca i64, align 8
  %92 = alloca %"class.std::map.441", align 8
  %93 = alloca %"class.std::map.447", align 8
  %94 = alloca %"class.std::map.452", align 8
  %95 = alloca %class.anon.457, align 8
  %96 = alloca %class.anon.458, align 8
  %97 = alloca %class.anon.459, align 8
  %98 = alloca ptr, align 8
  %99 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %100 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %101 = alloca ptr, align 8
  %102 = alloca i64, align 8
  %103 = alloca %"class.std::function.267", align 8
  %104 = alloca ptr, align 8
  %105 = alloca i8, align 1
  %106 = alloca ptr, align 8
  %107 = alloca i8, align 1
  %108 = alloca ptr, align 8
  %109 = alloca %"class.MIR::Constant", align 8
  %110 = alloca %"class.MIR::RValue", align 8
  %111 = alloca %"class.MIR::Constant", align 8
  %112 = alloca i8, align 1
  %113 = alloca ptr, align 8
  %114 = alloca i8, align 1
  %115 = alloca ptr, align 8
  %116 = alloca i8, align 1
  %117 = alloca ptr, align 8
  %118 = alloca %"class.MIR::RValue", align 8
  %119 = alloca %"class.MIR::Constant", align 8
  %120 = alloca %"class.std::unique_ptr.157", align 8
  %121 = alloca i8, align 1
  %122 = alloca ptr, align 8
  %123 = alloca %"class.MIR::Constant", align 8
  %124 = alloca %"class.MIR::Constant", align 8
  %125 = alloca ptr, align 8
  %126 = alloca ptr, align 8
  %127 = alloca %"class.MIR::Constant", align 8
  %128 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %129 = alloca %class.U128, align 8
  %130 = alloca ptr, align 8
  %131 = alloca %"class.MIR::Constant", align 8
  %132 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %133 = alloca %class.U128, align 8
  %134 = alloca ptr, align 8
  %135 = alloca %"class.MIR::Constant", align 8
  %136 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %137 = alloca ptr, align 8
  %138 = alloca %"class.MIR::Constant", align 8
  %139 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %140 = alloca %class.U128, align 8
  %141 = alloca ptr, align 8
  %142 = alloca %"class.MIR::Constant", align 8
  %143 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %144 = alloca %class.S128, align 8
  %145 = alloca %class.U128, align 8
  %146 = alloca ptr, align 8
  %147 = alloca %"class.MIR::Constant", align 8
  %148 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %149 = alloca %class.S128, align 8
  %150 = alloca ptr, align 8
  %151 = alloca %"class.MIR::Constant", align 8
  %152 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %153 = alloca ptr, align 8
  %154 = alloca %"class.std::function", align 8
  %155 = alloca %class.anon.460, align 8
  %156 = alloca i32, align 4
  %157 = alloca %"class.std::function", align 8
  %158 = alloca %class.anon.461, align 8
  %159 = alloca %"class.HIR::TypeRef", align 8
  %160 = alloca ptr, align 8
  %161 = alloca ptr, align 8
  %162 = alloca %"class.std::function", align 8
  %163 = alloca %class.anon.478, align 1
  %164 = alloca i32, align 4
  %165 = alloca i32, align 4
  %166 = alloca %"class.MIR::Constant", align 8
  %167 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %168 = alloca %"class.MIR::Constant", align 8
  %169 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %170 = alloca %class.U128, align 8
  %171 = alloca ptr, align 8
  %172 = alloca %"class.std::function", align 8
  %173 = alloca %class.anon.480, align 8
  %174 = alloca %"class.MIR::Constant", align 8
  %175 = alloca %"class.MIR::RValue", align 8
  %176 = alloca %"class.MIR::Constant", align 8
  %177 = alloca i8, align 1
  %178 = alloca ptr, align 8
  %179 = alloca ptr, align 8
  %180 = alloca ptr, align 8
  %181 = alloca %"class.MIR::Constant", align 8
  %182 = alloca %"class.MIR::Constant", align 8
  %183 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %184 = alloca %"class.MIR::Constant", align 8
  %185 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %186 = alloca %"class.MIR::Constant", align 8
  %187 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %188 = alloca %"class.MIR::Constant", align 8
  %189 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %190 = alloca %"class.MIR::Constant", align 8
  %191 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %192 = alloca %"class.MIR::Constant", align 8
  %193 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %194 = alloca %"class.std::function", align 8
  %195 = alloca %class.anon.481, align 8
  %196 = alloca i8, align 1
  %197 = alloca ptr, align 8
  %198 = alloca ptr, align 8
  %199 = alloca i8, align 1
  %200 = alloca ptr, align 8
  %201 = alloca ptr, align 8
  %202 = alloca %"class.std::function", align 8
  %203 = alloca %class.anon.482, align 8
  %204 = alloca %"class.MIR::Constant", align 8
  %205 = alloca %"struct.MIR::Constant::Data_Float", align 8
  %206 = alloca i8, align 1
  %207 = alloca ptr, align 8
  %208 = alloca ptr, align 8
  %209 = alloca %"class.std::function", align 8
  %210 = alloca %class.anon.483, align 8
  %211 = alloca %"class.MIR::Constant", align 8
  %212 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %213 = alloca %class.S128, align 8
  %214 = alloca %class.S128, align 8
  %215 = alloca i8, align 1
  %216 = alloca ptr, align 8
  %217 = alloca ptr, align 8
  %218 = alloca %"class.std::function", align 8
  %219 = alloca %class.anon.484, align 8
  %220 = alloca %"class.MIR::Constant", align 8
  %221 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %222 = alloca %class.U128, align 8
  %223 = alloca %class.U128, align 8
  %224 = alloca %"class.std::function", align 8
  %225 = alloca %class.anon.485, align 8
  %226 = alloca i8, align 1
  %227 = alloca ptr, align 8
  %228 = alloca ptr, align 8
  %229 = alloca i8, align 1
  %230 = alloca ptr, align 8
  %231 = alloca ptr, align 8
  %232 = alloca %"class.std::function", align 8
  %233 = alloca %class.anon.486, align 8
  %234 = alloca %"class.MIR::Constant", align 8
  %235 = alloca %"struct.MIR::Constant::Data_Float", align 8
  %236 = alloca i8, align 1
  %237 = alloca ptr, align 8
  %238 = alloca ptr, align 8
  %239 = alloca %"class.std::function", align 8
  %240 = alloca %class.anon.487, align 8
  %241 = alloca %"class.MIR::Constant", align 8
  %242 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %243 = alloca %class.S128, align 8
  %244 = alloca %class.S128, align 8
  %245 = alloca i8, align 1
  %246 = alloca ptr, align 8
  %247 = alloca ptr, align 8
  %248 = alloca %"class.std::function", align 8
  %249 = alloca %class.anon.488, align 8
  %250 = alloca %"class.MIR::Constant", align 8
  %251 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %252 = alloca %class.U128, align 8
  %253 = alloca %class.U128, align 8
  %254 = alloca %"class.std::function", align 8
  %255 = alloca %class.anon.489, align 8
  %256 = alloca i8, align 1
  %257 = alloca ptr, align 8
  %258 = alloca ptr, align 8
  %259 = alloca i8, align 1
  %260 = alloca ptr, align 8
  %261 = alloca ptr, align 8
  %262 = alloca %"class.std::function", align 8
  %263 = alloca %class.anon.490, align 8
  %264 = alloca %"class.MIR::Constant", align 8
  %265 = alloca %"struct.MIR::Constant::Data_Float", align 8
  %266 = alloca i8, align 1
  %267 = alloca ptr, align 8
  %268 = alloca ptr, align 8
  %269 = alloca %"class.std::function", align 8
  %270 = alloca %class.anon.491, align 8
  %271 = alloca %"class.MIR::Constant", align 8
  %272 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %273 = alloca %class.S128, align 8
  %274 = alloca %class.S128, align 8
  %275 = alloca i8, align 1
  %276 = alloca ptr, align 8
  %277 = alloca ptr, align 8
  %278 = alloca %"class.std::function", align 8
  %279 = alloca %class.anon.492, align 8
  %280 = alloca %"class.MIR::Constant", align 8
  %281 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %282 = alloca %class.U128, align 8
  %283 = alloca %class.U128, align 8
  %284 = alloca %"class.std::function", align 8
  %285 = alloca %class.anon.493, align 8
  %286 = alloca i8, align 1
  %287 = alloca ptr, align 8
  %288 = alloca ptr, align 8
  %289 = alloca i8, align 1
  %290 = alloca ptr, align 8
  %291 = alloca ptr, align 8
  %292 = alloca %"class.std::function", align 8
  %293 = alloca %class.anon.494, align 8
  %294 = alloca %"class.MIR::Constant", align 8
  %295 = alloca %"struct.MIR::Constant::Data_Float", align 8
  %296 = alloca i8, align 1
  %297 = alloca ptr, align 8
  %298 = alloca ptr, align 8
  %299 = alloca %"class.std::function", align 8
  %300 = alloca %class.anon.495, align 8
  %301 = alloca %"class.MIR::Constant", align 8
  %302 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %303 = alloca %class.S128, align 8
  %304 = alloca %class.S128, align 8
  %305 = alloca i8, align 1
  %306 = alloca ptr, align 8
  %307 = alloca ptr, align 8
  %308 = alloca %"class.std::function", align 8
  %309 = alloca %class.anon.496, align 8
  %310 = alloca %"class.MIR::Constant", align 8
  %311 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %312 = alloca %class.U128, align 8
  %313 = alloca %class.U128, align 8
  %314 = alloca %"class.std::function", align 8
  %315 = alloca %class.anon.497, align 8
  %316 = alloca i8, align 1
  %317 = alloca ptr, align 8
  %318 = alloca ptr, align 8
  %319 = alloca i8, align 1
  %320 = alloca ptr, align 8
  %321 = alloca ptr, align 8
  %322 = alloca %"class.std::function", align 8
  %323 = alloca %class.anon.498, align 8
  %324 = alloca %"class.std::function", align 8
  %325 = alloca %class.anon.499, align 1
  %326 = alloca %"class.MIR::Constant", align 8
  %327 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %328 = alloca %class.S128, align 8
  %329 = alloca %class.S128, align 8
  %330 = alloca i8, align 1
  %331 = alloca ptr, align 8
  %332 = alloca ptr, align 8
  %333 = alloca %"class.std::function", align 8
  %334 = alloca %class.anon.501, align 8
  %335 = alloca %"class.std::function", align 8
  %336 = alloca %class.anon.502, align 1
  %337 = alloca %"class.MIR::Constant", align 8
  %338 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %339 = alloca %class.U128, align 8
  %340 = alloca %class.U128, align 8
  %341 = alloca %"class.std::function", align 8
  %342 = alloca %class.anon.504, align 8
  %343 = alloca i8, align 1
  %344 = alloca ptr, align 8
  %345 = alloca ptr, align 8
  %346 = alloca i8, align 1
  %347 = alloca ptr, align 8
  %348 = alloca ptr, align 8
  %349 = alloca %"class.MIR::Constant", align 8
  %350 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %351 = alloca i8, align 1
  %352 = alloca ptr, align 8
  %353 = alloca ptr, align 8
  %354 = alloca %"class.std::function", align 8
  %355 = alloca %class.anon.505, align 8
  %356 = alloca %"class.MIR::Constant", align 8
  %357 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %358 = alloca %class.S128, align 8
  %359 = alloca %class.S128, align 8
  %360 = alloca i8, align 1
  %361 = alloca ptr, align 8
  %362 = alloca ptr, align 8
  %363 = alloca %"class.std::function", align 8
  %364 = alloca %class.anon.506, align 8
  %365 = alloca %"class.MIR::Constant", align 8
  %366 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %367 = alloca %class.U128, align 8
  %368 = alloca %class.U128, align 8
  %369 = alloca %"class.std::function", align 8
  %370 = alloca %class.anon.507, align 8
  %371 = alloca i8, align 1
  %372 = alloca ptr, align 8
  %373 = alloca ptr, align 8
  %374 = alloca i8, align 1
  %375 = alloca ptr, align 8
  %376 = alloca ptr, align 8
  %377 = alloca %"class.MIR::Constant", align 8
  %378 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %379 = alloca i8, align 1
  %380 = alloca ptr, align 8
  %381 = alloca ptr, align 8
  %382 = alloca %"class.std::function", align 8
  %383 = alloca %class.anon.508, align 8
  %384 = alloca %"class.MIR::Constant", align 8
  %385 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %386 = alloca %class.S128, align 8
  %387 = alloca %class.S128, align 8
  %388 = alloca i8, align 1
  %389 = alloca ptr, align 8
  %390 = alloca ptr, align 8
  %391 = alloca %"class.std::function", align 8
  %392 = alloca %class.anon.509, align 8
  %393 = alloca %"class.MIR::Constant", align 8
  %394 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %395 = alloca %class.U128, align 8
  %396 = alloca %class.U128, align 8
  %397 = alloca %"class.std::function", align 8
  %398 = alloca %class.anon.510, align 8
  %399 = alloca i8, align 1
  %400 = alloca ptr, align 8
  %401 = alloca ptr, align 8
  %402 = alloca i8, align 1
  %403 = alloca ptr, align 8
  %404 = alloca ptr, align 8
  %405 = alloca %"class.MIR::Constant", align 8
  %406 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %407 = alloca i8, align 1
  %408 = alloca ptr, align 8
  %409 = alloca ptr, align 8
  %410 = alloca %"class.std::function", align 8
  %411 = alloca %class.anon.511, align 8
  %412 = alloca %"class.MIR::Constant", align 8
  %413 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %414 = alloca %class.S128, align 8
  %415 = alloca %class.S128, align 8
  %416 = alloca i8, align 1
  %417 = alloca ptr, align 8
  %418 = alloca ptr, align 8
  %419 = alloca %"class.std::function", align 8
  %420 = alloca %class.anon.512, align 8
  %421 = alloca %"class.MIR::Constant", align 8
  %422 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %423 = alloca %class.U128, align 8
  %424 = alloca %class.U128, align 8
  %425 = alloca %class.U128, align 8
  %426 = alloca i8, align 1
  %427 = alloca ptr, align 8
  %428 = alloca ptr, align 8
  %429 = alloca %"class.std::function", align 8
  %430 = alloca %class.anon.513, align 8
  %431 = alloca i8, align 1
  %432 = alloca ptr, align 8
  %433 = alloca %class.U128, align 8
  %434 = alloca i8, align 1
  %435 = alloca ptr, align 8
  %436 = alloca %"class.std::function", align 8
  %437 = alloca %class.anon.514, align 8
  %438 = alloca i64, align 8
  %439 = alloca i8, align 1
  %440 = alloca ptr, align 8
  %441 = alloca i8, align 1
  %442 = alloca ptr, align 8
  %443 = alloca %"class.MIR::Constant", align 8
  %444 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %445 = alloca %class.S128, align 8
  %446 = alloca i8, align 1
  %447 = alloca ptr, align 8
  %448 = alloca %"class.MIR::Constant", align 8
  %449 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %450 = alloca %class.U128, align 8
  %451 = alloca %class.U128, align 8
  %452 = alloca i8, align 1
  %453 = alloca ptr, align 8
  %454 = alloca ptr, align 8
  %455 = alloca %"class.std::function", align 8
  %456 = alloca %class.anon.515, align 8
  %457 = alloca i8, align 1
  %458 = alloca ptr, align 8
  %459 = alloca %class.U128, align 8
  %460 = alloca i8, align 1
  %461 = alloca ptr, align 8
  %462 = alloca %"class.std::function", align 8
  %463 = alloca %class.anon.516, align 8
  %464 = alloca i64, align 8
  %465 = alloca i8, align 1
  %466 = alloca ptr, align 8
  %467 = alloca i8, align 1
  %468 = alloca ptr, align 8
  %469 = alloca %"class.MIR::Constant", align 8
  %470 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %471 = alloca %class.S128, align 8
  %472 = alloca i8, align 1
  %473 = alloca ptr, align 8
  %474 = alloca %"class.MIR::Constant", align 8
  %475 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %476 = alloca %class.U128, align 8
  %477 = alloca %"class.MIR::Constant", align 8
  %478 = alloca %"class.MIR::RValue", align 8
  %479 = alloca %"class.MIR::Constant", align 8
  %480 = alloca %"class.MIR::Param", align 8
  %481 = alloca %"class.MIR::Param", align 8
  %482 = alloca %"class.MIR::Constant", align 8
  %483 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %484 = alloca ptr, align 8
  %485 = alloca %"class.MIR::Param", align 8
  %486 = alloca %"class.MIR::Constant", align 8
  %487 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %488 = alloca ptr, align 8
  %489 = alloca %"class.MIR::Param", align 8
  %490 = alloca %"class.MIR::Constant", align 8
  %491 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %492 = alloca %"class.MIR::Param", align 8
  %493 = alloca i8, align 1
  %494 = alloca ptr, align 8
  %495 = alloca i8, align 1
  %496 = alloca ptr, align 8
  %497 = alloca %"class.MIR::RValue", align 8
  %498 = alloca %"struct.MIR::LValue", align 8
  %499 = alloca i8, align 1
  %500 = alloca ptr, align 8
  %501 = alloca i8, align 1
  %502 = alloca ptr, align 8
  %503 = alloca %"class.MIR::RValue", align 8
  %504 = alloca %"class.MIR::Constant", align 8
  %505 = alloca i8, align 1
  %506 = alloca ptr, align 8
  %507 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %508 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %509 = alloca ptr, align 8
  %510 = alloca %"class.MIR::Constant", align 8
  %511 = alloca i8, align 1
  %512 = alloca i8, align 1
  %513 = alloca ptr, align 8
  %514 = alloca i8, align 1
  %515 = alloca ptr, align 8
  %516 = alloca %class.U128, align 8
  %517 = alloca %class.U128, align 8
  %518 = alloca %class.U128, align 8
  %519 = alloca ptr, align 8
  %520 = alloca %"class.std::function", align 8
  %521 = alloca %class.anon.520, align 8
  %522 = alloca %"class.MIR::Constant", align 8
  %523 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %524 = alloca i8, align 1
  %525 = alloca ptr, align 8
  %526 = alloca %class.S128, align 8
  %527 = alloca %class.S128, align 8
  %528 = alloca %class.S128, align 8
  %529 = alloca %class.S128, align 8
  %530 = alloca %class.S128, align 8
  %531 = alloca ptr, align 8
  %532 = alloca %"class.std::function", align 8
  %533 = alloca %class.anon.521, align 8
  %534 = alloca %"class.MIR::Constant", align 8
  %535 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %536 = alloca i8, align 1
  %537 = alloca ptr, align 8
  %538 = alloca i8, align 1
  %539 = alloca ptr, align 8
  %540 = alloca %"class.MIR::Constant", align 8
  %541 = alloca %"struct.MIR::Constant::Data_Bool", align 1
  %542 = alloca i8, align 1
  %543 = alloca ptr, align 8
  %544 = alloca i8, align 1
  %545 = alloca ptr, align 8
  %546 = alloca i8, align 1
  %547 = alloca ptr, align 8
  %548 = alloca i8, align 1
  %549 = alloca ptr, align 8
  %550 = alloca i8, align 1
  %551 = alloca ptr, align 8
  %552 = alloca i8, align 1
  %553 = alloca ptr, align 8
  %554 = alloca ptr, align 8
  %555 = alloca ptr, align 8
  %556 = alloca %"class.MIR::Constant", align 8
  %557 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %558 = alloca ptr, align 8
  %559 = alloca %"class.MIR::Constant", align 8
  %560 = alloca %"struct.MIR::Constant::Data_Float", align 8
  %561 = alloca ptr, align 8
  %562 = alloca ptr, align 8
  %563 = alloca ptr, align 8
  %564 = alloca ptr, align 8
  %565 = alloca ptr, align 8
  %566 = alloca ptr, align 8
  %567 = alloca ptr, align 8
  %568 = alloca %"class.MIR::RValue", align 8
  %569 = alloca %"class.MIR::Constant", align 8
  %570 = alloca i8, align 1
  %571 = alloca ptr, align 8
  %572 = alloca i8, align 1
  %573 = alloca ptr, align 8
  %574 = alloca i8, align 1
  %575 = alloca ptr, align 8
  %576 = alloca i8, align 1
  %577 = alloca ptr, align 8
  %578 = alloca ptr, align 8
  %579 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %580 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %581 = alloca ptr, align 8
  %582 = alloca i8, align 1
  %583 = alloca ptr, align 8
  %584 = alloca ptr, align 8
  %585 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %586 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %587 = alloca ptr, align 8
  %588 = alloca i8, align 1
  %589 = alloca ptr, align 8
  %590 = alloca i8, align 1
  %591 = alloca ptr, align 8
  %592 = alloca ptr, align 8
  %593 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %594 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %595 = alloca ptr, align 8
  %596 = alloca i8, align 1
  %597 = alloca ptr, align 8
  %598 = alloca ptr, align 8
  %599 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %600 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %601 = alloca ptr, align 8
  %602 = alloca ptr, align 8
  %603 = alloca %"struct.std::pair.526", align 4
  %604 = alloca %"struct.std::pair.522", align 8
  %605 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %606 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %607 = alloca %"struct.std::pair.526", align 4
  %608 = alloca i8, align 1
  %609 = alloca %"struct.std::pair.522", align 8
  %610 = alloca ptr, align 8
  %611 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %612 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %613 = alloca %"class.MIR::Statement", align 8
  %614 = alloca %"struct.MIR::Statement::Data_ScopeEnd", align 8
  %615 = alloca %"class.std::function.226", align 8
  %616 = alloca %class.anon.532, align 8
  %617 = alloca ptr, align 8
  %618 = alloca ptr, align 8
  %619 = alloca %"struct.std::pair.536", align 8
  %620 = alloca %"struct.MIR::LValue", align 8
  %621 = alloca %"class.MIR::Constant", align 8
  %622 = alloca %"struct.std::pair.533", align 8
  %623 = alloca ptr, align 8
  %624 = alloca %"struct.std::pair.542", align 8
  %625 = alloca %"struct.MIR::LValue", align 8
  %626 = alloca %"struct.std::pair.538", align 8
  %627 = alloca ptr, align 8
  %628 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %629 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %630 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %631 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %632 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %633 = alloca %"struct.std::pair.536", align 8
  %634 = alloca %"struct.MIR::LValue", align 8
  %635 = alloca %"class.MIR::Constant", align 8
  %636 = alloca %"struct.std::pair.533", align 8
  %637 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %638 = alloca %"struct.std::pair.542", align 8
  %639 = alloca %"struct.MIR::LValue", align 8
  %640 = alloca %"struct.std::pair.538", align 8
  %641 = alloca %"class.std::function.267", align 8
  %642 = alloca i8, align 1
  %643 = alloca ptr, align 8
  %644 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %645 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %646 = alloca %"class.std::function", align 8
  %647 = alloca %class.anon.548, align 8
  %648 = alloca i32, align 4
  %649 = alloca %"class.MIR::Terminator", align 8
  %650 = alloca i8, align 1
  %651 = alloca ptr, align 8
  %652 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %653 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %654 = alloca %"class.std::function", align 8
  %655 = alloca %class.anon.549, align 8
  %656 = alloca i32, align 4
  %657 = alloca %"class.MIR::Terminator", align 8
  %658 = alloca i8, align 1
  %659 = alloca ptr, align 8
  %660 = alloca ptr, align 8
  %661 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %662 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %663 = alloca ptr, align 8
  %664 = alloca ptr, align 8
  %665 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %666 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %667 = alloca ptr, align 8
  %668 = alloca i64, align 8
  %669 = alloca ptr, align 8
  %670 = alloca %class.anon.550, align 8
  %671 = alloca i8, align 1
  %672 = alloca i8, align 1
  %673 = alloca i32, align 4
  %674 = alloca ptr, align 8
  %675 = alloca %"class.std::function.226", align 8
  %676 = alloca %"class.std::function.226", align 8
  %677 = alloca %"class.MIR::Terminator", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  %678 = call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %678, label %679, label %681

679:                                              ; preds = %2
  %680 = load ptr, ptr %4, align 8, !tbaa !5
  call void @_Z12MIR_Dump_FcnRSoRKN3MIR8FunctionEj(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(96) %680, i32 noundef 0)
  br label %681

681:                                              ; preds = %679, %2
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #10
  store i8 0, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 40, ptr %6) #10
  %682 = call noundef zeroext i1 @_Z13debug_enabledv()
  %683 = zext i1 %682 to i64
  %684 = select i1 %682, ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(1) %8) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #10
  %685 = getelementptr inbounds %class.anon.432, ptr %10, i32 0, i32 0
  store ptr %5, ptr %685, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef %684, ptr noundef %7, ptr noundef %9)
          to label %686 unwind label %698

686:                                              ; preds = %681
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #10
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #10
  %687 = load ptr, ptr %4, align 8, !tbaa !5
  %688 = getelementptr inbounds %"class.MIR::Function", ptr %687, i32 0, i32 2
  store ptr %688, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #10
  %689 = load ptr, ptr %13, align 8, !tbaa !5
  %690 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %689) #10
  %691 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %14, i32 0, i32 0
  store ptr %690, ptr %691, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #10
  %692 = load ptr, ptr %13, align 8, !tbaa !5
  %693 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %692) #10
  %694 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %15, i32 0, i32 0
  store ptr %693, ptr %694, align 8
  br label %695

695:                                              ; preds = %1577, %686
  %696 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(8) %15) #10
  br i1 %696, label %702, label %697

697:                                              ; preds = %695
  store i32 2, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  br label %1582

698:                                              ; preds = %681
  %699 = landingpad { ptr, i32 }
          cleanup
  %700 = extractvalue { ptr, i32 } %699, 0
  store ptr %700, ptr %11, align 8
  %701 = extractvalue { ptr, i32 } %699, 1
  store i32 %701, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #10
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #10
  br label %8453

702:                                              ; preds = %695
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #10
  %703 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  store ptr %703, ptr %17, align 8, !tbaa !5
  %704 = load ptr, ptr %3, align 8, !tbaa !5
  %705 = load ptr, ptr %17, align 8, !tbaa !5
  invoke void @_ZN3MIR11TypeResolve17set_cur_stmt_termERKNS_10BasicBlockE(ptr noundef nonnull align 8 dereferenceable(120) %704, ptr noundef nonnull align 8 dereferenceable(192) %705)
          to label %706 unwind label %728

706:                                              ; preds = %702
  br label %707

707:                                              ; preds = %706
  br label %708

708:                                              ; preds = %707
  %709 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %710 unwind label %728

710:                                              ; preds = %708
  br i1 %709, label %711, label %741

711:                                              ; preds = %710
  %712 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %713 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %712, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %714 unwind label %728

714:                                              ; preds = %711
  call void @llvm.lifetime.start.p0(i64 32, ptr %18) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #10
  %715 = getelementptr inbounds %class.anon.433, ptr %20, i32 0, i32 0
  %716 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %716, ptr %715, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #10
  invoke void @_ZN9FmtLambdaC2ESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef %19)
          to label %717 unwind label %732

717:                                              ; preds = %714
  %718 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK9FmtLambda(ptr noundef nonnull align 8 dereferenceable(8) %713, ptr noundef nonnull align 8 dereferenceable(32) %18)
          to label %719 unwind label %736

719:                                              ; preds = %717
  %720 = load ptr, ptr %17, align 8, !tbaa !5
  %721 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %720, i32 0, i32 1
  %722 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %718, ptr noundef nonnull align 8 dereferenceable(168) %721)
          to label %723 unwind label %736

723:                                              ; preds = %719
  %724 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %722, ptr noundef @_ZSt3decRSt8ios_base)
          to label %725 unwind label %736

725:                                              ; preds = %723
  %726 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %724, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %727 unwind label %736

727:                                              ; preds = %725
  call void @_ZN9FmtLambdaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #10
  br label %741

728:                                              ; preds = %745, %711, %708, %702
  %729 = landingpad { ptr, i32 }
          cleanup
  %730 = extractvalue { ptr, i32 } %729, 0
  store ptr %730, ptr %11, align 8
  %731 = extractvalue { ptr, i32 } %729, 1
  store i32 %731, ptr %12, align 4
  br label %1581

732:                                              ; preds = %714
  %733 = landingpad { ptr, i32 }
          cleanup
  %734 = extractvalue { ptr, i32 } %733, 0
  store ptr %734, ptr %11, align 8
  %735 = extractvalue { ptr, i32 } %733, 1
  store i32 %735, ptr %12, align 4
  br label %740

736:                                              ; preds = %725, %723, %719, %717
  %737 = landingpad { ptr, i32 }
          cleanup
  %738 = extractvalue { ptr, i32 } %737, 0
  store ptr %738, ptr %11, align 8
  %739 = extractvalue { ptr, i32 } %737, 1
  store i32 %739, ptr %12, align 4
  call void @_ZN9FmtLambdaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  br label %740

740:                                              ; preds = %736, %732
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %19) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %18) #10
  br label %1581

741:                                              ; preds = %727, %710
  br label %742

742:                                              ; preds = %741
  br label %743

743:                                              ; preds = %742
  br label %744

744:                                              ; preds = %743
  br label %745

745:                                              ; preds = %744
  %746 = load ptr, ptr %17, align 8, !tbaa !5
  %747 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %746, i32 0, i32 1
  %748 = invoke noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %747)
          to label %749 unwind label %728

749:                                              ; preds = %745
  br i1 %748, label %751, label %750

750:                                              ; preds = %749
  store i32 3, ptr %16, align 4
  br label %1574

751:                                              ; preds = %749
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #10
  %752 = load ptr, ptr %17, align 8, !tbaa !5
  %753 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %752, i32 0, i32 1
  %754 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %753)
          to label %755 unwind label %761

755:                                              ; preds = %751
  store ptr %754, ptr %21, align 8, !tbaa !5
  %756 = load ptr, ptr %21, align 8, !tbaa !5
  %757 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %756, i32 0, i32 3
  %758 = invoke noundef zeroext i1 @_ZNK3MIR10CallTarget12is_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96) %757)
          to label %759 unwind label %761

759:                                              ; preds = %755
  br i1 %758, label %765, label %760

760:                                              ; preds = %759
  store i32 3, ptr %16, align 4
  br label %1571

761:                                              ; preds = %755, %751
  %762 = landingpad { ptr, i32 }
          cleanup
  %763 = extractvalue { ptr, i32 } %762, 0
  store ptr %763, ptr %11, align 8
  %764 = extractvalue { ptr, i32 } %762, 1
  store i32 %764, ptr %12, align 4
  br label %1580

765:                                              ; preds = %759
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #10
  %766 = load ptr, ptr %21, align 8, !tbaa !5
  %767 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %766, i32 0, i32 3
  %768 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR10CallTarget12as_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96) %767)
          to label %769 unwind label %805

769:                                              ; preds = %765
  store ptr %768, ptr %22, align 8, !tbaa !5
  %770 = load ptr, ptr %22, align 8, !tbaa !5
  %771 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %770, i32 0, i32 0
  %772 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %771, ptr noundef @.str.77)
          to label %773 unwind label %805

773:                                              ; preds = %769
  br i1 %772, label %774, label %878

774:                                              ; preds = %773
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #10
  store i64 0, ptr %23, align 8, !tbaa !13
  %775 = load ptr, ptr %3, align 8, !tbaa !5
  %776 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %775, i32 0, i32 1
  %777 = load ptr, ptr %776, align 8, !tbaa !15
  %778 = load ptr, ptr %3, align 8, !tbaa !5
  %779 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %778, i32 0, i32 2
  %780 = load ptr, ptr %779, align 8, !tbaa !20
  %781 = load ptr, ptr %22, align 8, !tbaa !5
  %782 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %781, i32 0, i32 1
  %783 = getelementptr inbounds %"struct.HIR::PathParams", ptr %782, i32 0, i32 1
  %784 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %783, i64 noundef 0)
          to label %785 unwind label %809

785:                                              ; preds = %774
  %786 = invoke noundef zeroext i1 @_Z16Target_GetSizeOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8) %777, ptr noundef nonnull align 8 dereferenceable(424) %780, ptr noundef nonnull align 8 dereferenceable(8) %784, ptr noundef nonnull align 8 dereferenceable(8) %23)
          to label %787 unwind label %809

787:                                              ; preds = %785
  br i1 %786, label %788, label %876

788:                                              ; preds = %787
  br label %789

789:                                              ; preds = %788
  %790 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %791 unwind label %809

791:                                              ; preds = %789
  br i1 %790, label %792, label %813

792:                                              ; preds = %791
  %793 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %794 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %793, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %795 unwind label %809

795:                                              ; preds = %792
  %796 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %794, ptr noundef @.str.78)
          to label %797 unwind label %809

797:                                              ; preds = %795
  %798 = load i64, ptr %23, align 8, !tbaa !13
  %799 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %796, i64 noundef %798)
          to label %800 unwind label %809

800:                                              ; preds = %797
  %801 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %799, ptr noundef @_ZSt3decRSt8ios_base)
          to label %802 unwind label %809

802:                                              ; preds = %800
  %803 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %801, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %804 unwind label %809

804:                                              ; preds = %802
  br label %813

805:                                              ; preds = %1461, %1380, %1376, %1370, %1240, %1238, %1236, %1233, %1230, %1209, %1204, %1096, %991, %986, %878, %769, %765
  %806 = landingpad { ptr, i32 }
          cleanup
  %807 = extractvalue { ptr, i32 } %806, 0
  store ptr %807, ptr %11, align 8
  %808 = extractvalue { ptr, i32 } %806, 1
  store i32 %808, ptr %12, align 4
  br label %1579

809:                                              ; preds = %802, %800, %797, %795, %792, %789, %785, %774
  %810 = landingpad { ptr, i32 }
          cleanup
  %811 = extractvalue { ptr, i32 } %810, 0
  store ptr %811, ptr %11, align 8
  %812 = extractvalue { ptr, i32 } %810, 1
  store i32 %812, ptr %12, align 4
  br label %877

813:                                              ; preds = %804, %791
  br label %814

814:                                              ; preds = %813
  br label %815

815:                                              ; preds = %814
  call void @llvm.lifetime.start.p0(i64 40, ptr %24) #10
  %816 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %25, i32 0, i32 0
  %817 = load i64, ptr %23, align 8, !tbaa !13
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %816, i64 noundef %817, i64 noundef 0)
          to label %818 unwind label %839

818:                                              ; preds = %815
  %819 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %25, i32 0, i32 1
  store i32 0, ptr %819, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %24, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %25)
          to label %820 unwind label %839

820:                                              ; preds = %818
  %821 = load ptr, ptr %17, align 8, !tbaa !5
  %822 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %821, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %26) #10
  %823 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %27, i32 0, i32 0
  %824 = load ptr, ptr %21, align 8, !tbaa !5
  %825 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %824, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %823, ptr noundef nonnull align 8 dereferenceable(32) %825)
          to label %826 unwind label %843

826:                                              ; preds = %820
  store i1 true, ptr %29, align 1
  %827 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %27, i32 0, i32 1
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %28, ptr noundef nonnull align 8 dereferenceable(40) %24) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %827, ptr noundef %28)
          to label %828 unwind label %847

828:                                              ; preds = %826
  store i1 false, ptr %29, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %26, ptr noundef %27)
          to label %829 unwind label %851

829:                                              ; preds = %828
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %822, ptr noundef nonnull align 8 dereferenceable(152) %26)
          to label %830 unwind label %855

830:                                              ; preds = %829
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %26) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %27) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %28) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %26) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %30) #10
  %831 = load ptr, ptr %21, align 8, !tbaa !5
  %832 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %831, i32 0, i32 0
  %833 = load i32, ptr %832, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %30, i32 noundef %833)
          to label %834 unwind label %865

834:                                              ; preds = %830
  %835 = load ptr, ptr %17, align 8, !tbaa !5
  %836 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %835, i32 0, i32 1
  %837 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %836, ptr noundef nonnull align 8 dereferenceable(168) %30)
          to label %838 unwind label %869

838:                                              ; preds = %834
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %30) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %30) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %24) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #10
  br label %876

839:                                              ; preds = %818, %815
  %840 = landingpad { ptr, i32 }
          cleanup
  %841 = extractvalue { ptr, i32 } %840, 0
  store ptr %841, ptr %11, align 8
  %842 = extractvalue { ptr, i32 } %840, 1
  store i32 %842, ptr %12, align 4
  br label %875

843:                                              ; preds = %820
  %844 = landingpad { ptr, i32 }
          cleanup
  %845 = extractvalue { ptr, i32 } %844, 0
  store ptr %845, ptr %11, align 8
  %846 = extractvalue { ptr, i32 } %844, 1
  store i32 %846, ptr %12, align 4
  br label %864

847:                                              ; preds = %826
  %848 = landingpad { ptr, i32 }
          cleanup
  %849 = extractvalue { ptr, i32 } %848, 0
  store ptr %849, ptr %11, align 8
  %850 = extractvalue { ptr, i32 } %848, 1
  store i32 %850, ptr %12, align 4
  br label %860

851:                                              ; preds = %828
  %852 = landingpad { ptr, i32 }
          cleanup
  %853 = extractvalue { ptr, i32 } %852, 0
  store ptr %853, ptr %11, align 8
  %854 = extractvalue { ptr, i32 } %852, 1
  store i32 %854, ptr %12, align 4
  br label %859

855:                                              ; preds = %829
  %856 = landingpad { ptr, i32 }
          cleanup
  %857 = extractvalue { ptr, i32 } %856, 0
  store ptr %857, ptr %11, align 8
  %858 = extractvalue { ptr, i32 } %856, 1
  store i32 %858, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %26) #10
  br label %859

859:                                              ; preds = %855, %851
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %27) #10
  br label %860

860:                                              ; preds = %859, %847
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %28) #10
  %861 = load i1, ptr %29, align 1
  br i1 %861, label %862, label %863

862:                                              ; preds = %860
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %823) #10
  br label %863

863:                                              ; preds = %862, %860
  br label %864

864:                                              ; preds = %863, %843
  call void @llvm.lifetime.end.p0(i64 152, ptr %26) #10
  br label %874

865:                                              ; preds = %830
  %866 = landingpad { ptr, i32 }
          cleanup
  %867 = extractvalue { ptr, i32 } %866, 0
  store ptr %867, ptr %11, align 8
  %868 = extractvalue { ptr, i32 } %866, 1
  store i32 %868, ptr %12, align 4
  br label %873

869:                                              ; preds = %834
  %870 = landingpad { ptr, i32 }
          cleanup
  %871 = extractvalue { ptr, i32 } %870, 0
  store ptr %871, ptr %11, align 8
  %872 = extractvalue { ptr, i32 } %870, 1
  store i32 %872, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %30) #10
  br label %873

873:                                              ; preds = %869, %865
  call void @llvm.lifetime.end.p0(i64 168, ptr %30) #10
  br label %874

874:                                              ; preds = %873, %864
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %24) #10
  br label %875

875:                                              ; preds = %874, %839
  call void @llvm.lifetime.end.p0(i64 40, ptr %24) #10
  br label %877

876:                                              ; preds = %838, %787
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %1570

877:                                              ; preds = %875, %809
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #10
  br label %1579

878:                                              ; preds = %773
  %879 = load ptr, ptr %22, align 8, !tbaa !5
  %880 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %879, i32 0, i32 0
  %881 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %880, ptr noundef @.str.79)
          to label %882 unwind label %805

882:                                              ; preds = %878
  br i1 %881, label %883, label %986

883:                                              ; preds = %882
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #10
  store i64 0, ptr %31, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #10
  %884 = load ptr, ptr %3, align 8, !tbaa !5
  %885 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %884, i32 0, i32 1
  %886 = load ptr, ptr %885, align 8, !tbaa !15
  %887 = load ptr, ptr %3, align 8, !tbaa !5
  %888 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %887, i32 0, i32 2
  %889 = load ptr, ptr %888, align 8, !tbaa !20
  %890 = load ptr, ptr %22, align 8, !tbaa !5
  %891 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %890, i32 0, i32 1
  %892 = getelementptr inbounds %"struct.HIR::PathParams", ptr %891, i32 0, i32 1
  %893 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %892, i64 noundef 0)
          to label %894 unwind label %917

894:                                              ; preds = %883
  %895 = invoke noundef zeroext i1 @_Z24Target_GetSizeAndAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERmS9_(ptr noundef nonnull align 8 dereferenceable(8) %886, ptr noundef nonnull align 8 dereferenceable(424) %889, ptr noundef nonnull align 8 dereferenceable(8) %893, ptr noundef nonnull align 8 dereferenceable(8) %31, ptr noundef nonnull align 8 dereferenceable(8) %32)
          to label %896 unwind label %917

896:                                              ; preds = %894
  br i1 %895, label %897, label %984

897:                                              ; preds = %896
  %898 = load i64, ptr %31, align 8, !tbaa !13
  %899 = icmp ne i64 %898, -1
  br i1 %899, label %900, label %984

900:                                              ; preds = %897
  br label %901

901:                                              ; preds = %900
  %902 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %903 unwind label %917

903:                                              ; preds = %901
  br i1 %902, label %904, label %921

904:                                              ; preds = %903
  %905 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %906 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %905, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %907 unwind label %917

907:                                              ; preds = %904
  %908 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %906, ptr noundef @.str.80)
          to label %909 unwind label %917

909:                                              ; preds = %907
  %910 = load i64, ptr %31, align 8, !tbaa !13
  %911 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %908, i64 noundef %910)
          to label %912 unwind label %917

912:                                              ; preds = %909
  %913 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %911, ptr noundef @_ZSt3decRSt8ios_base)
          to label %914 unwind label %917

914:                                              ; preds = %912
  %915 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %913, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %916 unwind label %917

916:                                              ; preds = %914
  br label %921

917:                                              ; preds = %914, %912, %909, %907, %904, %901, %894, %883
  %918 = landingpad { ptr, i32 }
          cleanup
  %919 = extractvalue { ptr, i32 } %918, 0
  store ptr %919, ptr %11, align 8
  %920 = extractvalue { ptr, i32 } %918, 1
  store i32 %920, ptr %12, align 4
  br label %985

921:                                              ; preds = %916, %903
  br label %922

922:                                              ; preds = %921
  br label %923

923:                                              ; preds = %922
  call void @llvm.lifetime.start.p0(i64 40, ptr %33) #10
  %924 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %34, i32 0, i32 0
  %925 = load i64, ptr %31, align 8, !tbaa !13
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %924, i64 noundef %925, i64 noundef 0)
          to label %926 unwind label %947

926:                                              ; preds = %923
  %927 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %34, i32 0, i32 1
  store i32 0, ptr %927, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %33, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %34)
          to label %928 unwind label %947

928:                                              ; preds = %926
  %929 = load ptr, ptr %17, align 8, !tbaa !5
  %930 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %929, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %35) #10
  %931 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %36, i32 0, i32 0
  %932 = load ptr, ptr %21, align 8, !tbaa !5
  %933 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %932, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %931, ptr noundef nonnull align 8 dereferenceable(32) %933)
          to label %934 unwind label %951

934:                                              ; preds = %928
  store i1 true, ptr %38, align 1
  %935 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %36, i32 0, i32 1
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %37, ptr noundef nonnull align 8 dereferenceable(40) %33) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %935, ptr noundef %37)
          to label %936 unwind label %955

936:                                              ; preds = %934
  store i1 false, ptr %38, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %35, ptr noundef %36)
          to label %937 unwind label %959

937:                                              ; preds = %936
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %930, ptr noundef nonnull align 8 dereferenceable(152) %35)
          to label %938 unwind label %963

938:                                              ; preds = %937
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %35) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %36) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %35) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %39) #10
  %939 = load ptr, ptr %21, align 8, !tbaa !5
  %940 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %939, i32 0, i32 0
  %941 = load i32, ptr %940, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %39, i32 noundef %941)
          to label %942 unwind label %973

942:                                              ; preds = %938
  %943 = load ptr, ptr %17, align 8, !tbaa !5
  %944 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %943, i32 0, i32 1
  %945 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %944, ptr noundef nonnull align 8 dereferenceable(168) %39)
          to label %946 unwind label %977

946:                                              ; preds = %942
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %39) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %39) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %33) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #10
  br label %984

947:                                              ; preds = %926, %923
  %948 = landingpad { ptr, i32 }
          cleanup
  %949 = extractvalue { ptr, i32 } %948, 0
  store ptr %949, ptr %11, align 8
  %950 = extractvalue { ptr, i32 } %948, 1
  store i32 %950, ptr %12, align 4
  br label %983

951:                                              ; preds = %928
  %952 = landingpad { ptr, i32 }
          cleanup
  %953 = extractvalue { ptr, i32 } %952, 0
  store ptr %953, ptr %11, align 8
  %954 = extractvalue { ptr, i32 } %952, 1
  store i32 %954, ptr %12, align 4
  br label %972

955:                                              ; preds = %934
  %956 = landingpad { ptr, i32 }
          cleanup
  %957 = extractvalue { ptr, i32 } %956, 0
  store ptr %957, ptr %11, align 8
  %958 = extractvalue { ptr, i32 } %956, 1
  store i32 %958, ptr %12, align 4
  br label %968

959:                                              ; preds = %936
  %960 = landingpad { ptr, i32 }
          cleanup
  %961 = extractvalue { ptr, i32 } %960, 0
  store ptr %961, ptr %11, align 8
  %962 = extractvalue { ptr, i32 } %960, 1
  store i32 %962, ptr %12, align 4
  br label %967

963:                                              ; preds = %937
  %964 = landingpad { ptr, i32 }
          cleanup
  %965 = extractvalue { ptr, i32 } %964, 0
  store ptr %965, ptr %11, align 8
  %966 = extractvalue { ptr, i32 } %964, 1
  store i32 %966, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %35) #10
  br label %967

967:                                              ; preds = %963, %959
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %36) #10
  br label %968

968:                                              ; preds = %967, %955
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %37) #10
  %969 = load i1, ptr %38, align 1
  br i1 %969, label %970, label %971

970:                                              ; preds = %968
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %931) #10
  br label %971

971:                                              ; preds = %970, %968
  br label %972

972:                                              ; preds = %971, %951
  call void @llvm.lifetime.end.p0(i64 152, ptr %35) #10
  br label %982

973:                                              ; preds = %938
  %974 = landingpad { ptr, i32 }
          cleanup
  %975 = extractvalue { ptr, i32 } %974, 0
  store ptr %975, ptr %11, align 8
  %976 = extractvalue { ptr, i32 } %974, 1
  store i32 %976, ptr %12, align 4
  br label %981

977:                                              ; preds = %942
  %978 = landingpad { ptr, i32 }
          cleanup
  %979 = extractvalue { ptr, i32 } %978, 0
  store ptr %979, ptr %11, align 8
  %980 = extractvalue { ptr, i32 } %978, 1
  store i32 %980, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %39) #10
  br label %981

981:                                              ; preds = %977, %973
  call void @llvm.lifetime.end.p0(i64 168, ptr %39) #10
  br label %982

982:                                              ; preds = %981, %972
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %33) #10
  br label %983

983:                                              ; preds = %982, %947
  call void @llvm.lifetime.end.p0(i64 40, ptr %33) #10
  br label %985

984:                                              ; preds = %946, %897, %896
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %1569

985:                                              ; preds = %983, %917
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #10
  br label %1579

986:                                              ; preds = %882
  %987 = load ptr, ptr %22, align 8, !tbaa !5
  %988 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %987, i32 0, i32 0
  %989 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %988, ptr noundef @.str.81)
          to label %990 unwind label %805

990:                                              ; preds = %986
  br i1 %989, label %996, label %991

991:                                              ; preds = %990
  %992 = load ptr, ptr %22, align 8, !tbaa !5
  %993 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %992, i32 0, i32 0
  %994 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %993, ptr noundef @.str.82)
          to label %995 unwind label %805

995:                                              ; preds = %991
  br i1 %994, label %996, label %1096

996:                                              ; preds = %995, %990
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #10
  store i64 0, ptr %40, align 8, !tbaa !13
  %997 = load ptr, ptr %3, align 8, !tbaa !5
  %998 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %997, i32 0, i32 1
  %999 = load ptr, ptr %998, align 8, !tbaa !15
  %1000 = load ptr, ptr %3, align 8, !tbaa !5
  %1001 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %1000, i32 0, i32 2
  %1002 = load ptr, ptr %1001, align 8, !tbaa !20
  %1003 = load ptr, ptr %22, align 8, !tbaa !5
  %1004 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1003, i32 0, i32 1
  %1005 = getelementptr inbounds %"struct.HIR::PathParams", ptr %1004, i32 0, i32 1
  %1006 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %1005, i64 noundef 0)
          to label %1007 unwind label %1027

1007:                                             ; preds = %996
  %1008 = invoke noundef zeroext i1 @_Z17Target_GetAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8) %999, ptr noundef nonnull align 8 dereferenceable(424) %1002, ptr noundef nonnull align 8 dereferenceable(8) %1006, ptr noundef nonnull align 8 dereferenceable(8) %40)
          to label %1009 unwind label %1027

1009:                                             ; preds = %1007
  br i1 %1008, label %1010, label %1094

1010:                                             ; preds = %1009
  br label %1011

1011:                                             ; preds = %1010
  %1012 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1013 unwind label %1027

1013:                                             ; preds = %1011
  br i1 %1012, label %1014, label %1031

1014:                                             ; preds = %1013
  %1015 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %1016 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1015, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1017 unwind label %1027

1017:                                             ; preds = %1014
  %1018 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1016, ptr noundef @.str.83)
          to label %1019 unwind label %1027

1019:                                             ; preds = %1017
  %1020 = load i64, ptr %40, align 8, !tbaa !13
  %1021 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1018, i64 noundef %1020)
          to label %1022 unwind label %1027

1022:                                             ; preds = %1019
  %1023 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1021, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1024 unwind label %1027

1024:                                             ; preds = %1022
  %1025 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1023, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1026 unwind label %1027

1026:                                             ; preds = %1024
  br label %1031

1027:                                             ; preds = %1024, %1022, %1019, %1017, %1014, %1011, %1007, %996
  %1028 = landingpad { ptr, i32 }
          cleanup
  %1029 = extractvalue { ptr, i32 } %1028, 0
  store ptr %1029, ptr %11, align 8
  %1030 = extractvalue { ptr, i32 } %1028, 1
  store i32 %1030, ptr %12, align 4
  br label %1095

1031:                                             ; preds = %1026, %1013
  br label %1032

1032:                                             ; preds = %1031
  br label %1033

1033:                                             ; preds = %1032
  call void @llvm.lifetime.start.p0(i64 40, ptr %41) #10
  %1034 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %42, i32 0, i32 0
  %1035 = load i64, ptr %40, align 8, !tbaa !13
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %1034, i64 noundef %1035, i64 noundef 0)
          to label %1036 unwind label %1057

1036:                                             ; preds = %1033
  %1037 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %42, i32 0, i32 1
  store i32 0, ptr %1037, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %41, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %42)
          to label %1038 unwind label %1057

1038:                                             ; preds = %1036
  %1039 = load ptr, ptr %17, align 8, !tbaa !5
  %1040 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1039, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %43) #10
  %1041 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %44, i32 0, i32 0
  %1042 = load ptr, ptr %21, align 8, !tbaa !5
  %1043 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1042, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1041, ptr noundef nonnull align 8 dereferenceable(32) %1043)
          to label %1044 unwind label %1061

1044:                                             ; preds = %1038
  store i1 true, ptr %46, align 1
  %1045 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %44, i32 0, i32 1
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %45, ptr noundef nonnull align 8 dereferenceable(40) %41) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %1045, ptr noundef %45)
          to label %1046 unwind label %1065

1046:                                             ; preds = %1044
  store i1 false, ptr %46, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %43, ptr noundef %44)
          to label %1047 unwind label %1069

1047:                                             ; preds = %1046
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1040, ptr noundef nonnull align 8 dereferenceable(152) %43)
          to label %1048 unwind label %1073

1048:                                             ; preds = %1047
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %43) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %44) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %45) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %43) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %47) #10
  %1049 = load ptr, ptr %21, align 8, !tbaa !5
  %1050 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1049, i32 0, i32 0
  %1051 = load i32, ptr %1050, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %47, i32 noundef %1051)
          to label %1052 unwind label %1083

1052:                                             ; preds = %1048
  %1053 = load ptr, ptr %17, align 8, !tbaa !5
  %1054 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1053, i32 0, i32 1
  %1055 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %1054, ptr noundef nonnull align 8 dereferenceable(168) %47)
          to label %1056 unwind label %1087

1056:                                             ; preds = %1052
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %47) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %47) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %41) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %41) #10
  br label %1094

1057:                                             ; preds = %1036, %1033
  %1058 = landingpad { ptr, i32 }
          cleanup
  %1059 = extractvalue { ptr, i32 } %1058, 0
  store ptr %1059, ptr %11, align 8
  %1060 = extractvalue { ptr, i32 } %1058, 1
  store i32 %1060, ptr %12, align 4
  br label %1093

1061:                                             ; preds = %1038
  %1062 = landingpad { ptr, i32 }
          cleanup
  %1063 = extractvalue { ptr, i32 } %1062, 0
  store ptr %1063, ptr %11, align 8
  %1064 = extractvalue { ptr, i32 } %1062, 1
  store i32 %1064, ptr %12, align 4
  br label %1082

1065:                                             ; preds = %1044
  %1066 = landingpad { ptr, i32 }
          cleanup
  %1067 = extractvalue { ptr, i32 } %1066, 0
  store ptr %1067, ptr %11, align 8
  %1068 = extractvalue { ptr, i32 } %1066, 1
  store i32 %1068, ptr %12, align 4
  br label %1078

1069:                                             ; preds = %1046
  %1070 = landingpad { ptr, i32 }
          cleanup
  %1071 = extractvalue { ptr, i32 } %1070, 0
  store ptr %1071, ptr %11, align 8
  %1072 = extractvalue { ptr, i32 } %1070, 1
  store i32 %1072, ptr %12, align 4
  br label %1077

1073:                                             ; preds = %1047
  %1074 = landingpad { ptr, i32 }
          cleanup
  %1075 = extractvalue { ptr, i32 } %1074, 0
  store ptr %1075, ptr %11, align 8
  %1076 = extractvalue { ptr, i32 } %1074, 1
  store i32 %1076, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %43) #10
  br label %1077

1077:                                             ; preds = %1073, %1069
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %44) #10
  br label %1078

1078:                                             ; preds = %1077, %1065
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %45) #10
  %1079 = load i1, ptr %46, align 1
  br i1 %1079, label %1080, label %1081

1080:                                             ; preds = %1078
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1041) #10
  br label %1081

1081:                                             ; preds = %1080, %1078
  br label %1082

1082:                                             ; preds = %1081, %1061
  call void @llvm.lifetime.end.p0(i64 152, ptr %43) #10
  br label %1092

1083:                                             ; preds = %1048
  %1084 = landingpad { ptr, i32 }
          cleanup
  %1085 = extractvalue { ptr, i32 } %1084, 0
  store ptr %1085, ptr %11, align 8
  %1086 = extractvalue { ptr, i32 } %1084, 1
  store i32 %1086, ptr %12, align 4
  br label %1091

1087:                                             ; preds = %1052
  %1088 = landingpad { ptr, i32 }
          cleanup
  %1089 = extractvalue { ptr, i32 } %1088, 0
  store ptr %1089, ptr %11, align 8
  %1090 = extractvalue { ptr, i32 } %1088, 1
  store i32 %1090, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %47) #10
  br label %1091

1091:                                             ; preds = %1087, %1083
  call void @llvm.lifetime.end.p0(i64 168, ptr %47) #10
  br label %1092

1092:                                             ; preds = %1091, %1082
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %41) #10
  br label %1093

1093:                                             ; preds = %1092, %1057
  call void @llvm.lifetime.end.p0(i64 40, ptr %41) #10
  br label %1095

1094:                                             ; preds = %1056, %1009
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %1568

1095:                                             ; preds = %1093, %1027
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #10
  br label %1579

1096:                                             ; preds = %995
  %1097 = load ptr, ptr %22, align 8, !tbaa !5
  %1098 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1097, i32 0, i32 0
  %1099 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %1098, ptr noundef @.str.84)
          to label %1100 unwind label %805

1100:                                             ; preds = %1096
  br i1 %1099, label %1101, label %1204

1101:                                             ; preds = %1100
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #10
  store i64 0, ptr %48, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #10
  store i64 0, ptr %49, align 8, !tbaa !13
  %1102 = load ptr, ptr %3, align 8, !tbaa !5
  %1103 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %1102, i32 0, i32 1
  %1104 = load ptr, ptr %1103, align 8, !tbaa !15
  %1105 = load ptr, ptr %3, align 8, !tbaa !5
  %1106 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %1105, i32 0, i32 2
  %1107 = load ptr, ptr %1106, align 8, !tbaa !20
  %1108 = load ptr, ptr %22, align 8, !tbaa !5
  %1109 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1108, i32 0, i32 1
  %1110 = getelementptr inbounds %"struct.HIR::PathParams", ptr %1109, i32 0, i32 1
  %1111 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %1110, i64 noundef 0)
          to label %1112 unwind label %1135

1112:                                             ; preds = %1101
  %1113 = invoke noundef zeroext i1 @_Z24Target_GetSizeAndAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERmS9_(ptr noundef nonnull align 8 dereferenceable(8) %1104, ptr noundef nonnull align 8 dereferenceable(424) %1107, ptr noundef nonnull align 8 dereferenceable(8) %1111, ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef nonnull align 8 dereferenceable(8) %48)
          to label %1114 unwind label %1135

1114:                                             ; preds = %1112
  br i1 %1113, label %1115, label %1202

1115:                                             ; preds = %1114
  %1116 = load i64, ptr %48, align 8, !tbaa !13
  %1117 = icmp ugt i64 %1116, 0
  br i1 %1117, label %1118, label %1202

1118:                                             ; preds = %1115
  br label %1119

1119:                                             ; preds = %1118
  %1120 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1121 unwind label %1135

1121:                                             ; preds = %1119
  br i1 %1120, label %1122, label %1139

1122:                                             ; preds = %1121
  %1123 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %1124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1123, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1125 unwind label %1135

1125:                                             ; preds = %1122
  %1126 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1124, ptr noundef @.str.85)
          to label %1127 unwind label %1135

1127:                                             ; preds = %1125
  %1128 = load i64, ptr %48, align 8, !tbaa !13
  %1129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %1126, i64 noundef %1128)
          to label %1130 unwind label %1135

1130:                                             ; preds = %1127
  %1131 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1129, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1132 unwind label %1135

1132:                                             ; preds = %1130
  %1133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1131, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1134 unwind label %1135

1134:                                             ; preds = %1132
  br label %1139

1135:                                             ; preds = %1132, %1130, %1127, %1125, %1122, %1119, %1112, %1101
  %1136 = landingpad { ptr, i32 }
          cleanup
  %1137 = extractvalue { ptr, i32 } %1136, 0
  store ptr %1137, ptr %11, align 8
  %1138 = extractvalue { ptr, i32 } %1136, 1
  store i32 %1138, ptr %12, align 4
  br label %1203

1139:                                             ; preds = %1134, %1121
  br label %1140

1140:                                             ; preds = %1139
  br label %1141

1141:                                             ; preds = %1140
  call void @llvm.lifetime.start.p0(i64 40, ptr %50) #10
  %1142 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %51, i32 0, i32 0
  %1143 = load i64, ptr %48, align 8, !tbaa !13
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %1142, i64 noundef %1143, i64 noundef 0)
          to label %1144 unwind label %1165

1144:                                             ; preds = %1141
  %1145 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %51, i32 0, i32 1
  store i32 0, ptr %1145, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %50, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %51)
          to label %1146 unwind label %1165

1146:                                             ; preds = %1144
  %1147 = load ptr, ptr %17, align 8, !tbaa !5
  %1148 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1147, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %52) #10
  %1149 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %53, i32 0, i32 0
  %1150 = load ptr, ptr %21, align 8, !tbaa !5
  %1151 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1150, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1149, ptr noundef nonnull align 8 dereferenceable(32) %1151)
          to label %1152 unwind label %1169

1152:                                             ; preds = %1146
  store i1 true, ptr %55, align 1
  %1153 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %53, i32 0, i32 1
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %54, ptr noundef nonnull align 8 dereferenceable(40) %50) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %1153, ptr noundef %54)
          to label %1154 unwind label %1173

1154:                                             ; preds = %1152
  store i1 false, ptr %55, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %52, ptr noundef %53)
          to label %1155 unwind label %1177

1155:                                             ; preds = %1154
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1148, ptr noundef nonnull align 8 dereferenceable(152) %52)
          to label %1156 unwind label %1181

1156:                                             ; preds = %1155
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %52) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %53) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %54) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %52) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %56) #10
  %1157 = load ptr, ptr %21, align 8, !tbaa !5
  %1158 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1157, i32 0, i32 0
  %1159 = load i32, ptr %1158, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %56, i32 noundef %1159)
          to label %1160 unwind label %1191

1160:                                             ; preds = %1156
  %1161 = load ptr, ptr %17, align 8, !tbaa !5
  %1162 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1161, i32 0, i32 1
  %1163 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %1162, ptr noundef nonnull align 8 dereferenceable(168) %56)
          to label %1164 unwind label %1195

1164:                                             ; preds = %1160
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %56) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %56) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %50) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #10
  br label %1202

1165:                                             ; preds = %1144, %1141
  %1166 = landingpad { ptr, i32 }
          cleanup
  %1167 = extractvalue { ptr, i32 } %1166, 0
  store ptr %1167, ptr %11, align 8
  %1168 = extractvalue { ptr, i32 } %1166, 1
  store i32 %1168, ptr %12, align 4
  br label %1201

1169:                                             ; preds = %1146
  %1170 = landingpad { ptr, i32 }
          cleanup
  %1171 = extractvalue { ptr, i32 } %1170, 0
  store ptr %1171, ptr %11, align 8
  %1172 = extractvalue { ptr, i32 } %1170, 1
  store i32 %1172, ptr %12, align 4
  br label %1190

1173:                                             ; preds = %1152
  %1174 = landingpad { ptr, i32 }
          cleanup
  %1175 = extractvalue { ptr, i32 } %1174, 0
  store ptr %1175, ptr %11, align 8
  %1176 = extractvalue { ptr, i32 } %1174, 1
  store i32 %1176, ptr %12, align 4
  br label %1186

1177:                                             ; preds = %1154
  %1178 = landingpad { ptr, i32 }
          cleanup
  %1179 = extractvalue { ptr, i32 } %1178, 0
  store ptr %1179, ptr %11, align 8
  %1180 = extractvalue { ptr, i32 } %1178, 1
  store i32 %1180, ptr %12, align 4
  br label %1185

1181:                                             ; preds = %1155
  %1182 = landingpad { ptr, i32 }
          cleanup
  %1183 = extractvalue { ptr, i32 } %1182, 0
  store ptr %1183, ptr %11, align 8
  %1184 = extractvalue { ptr, i32 } %1182, 1
  store i32 %1184, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %52) #10
  br label %1185

1185:                                             ; preds = %1181, %1177
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %53) #10
  br label %1186

1186:                                             ; preds = %1185, %1173
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %54) #10
  %1187 = load i1, ptr %55, align 1
  br i1 %1187, label %1188, label %1189

1188:                                             ; preds = %1186
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1149) #10
  br label %1189

1189:                                             ; preds = %1188, %1186
  br label %1190

1190:                                             ; preds = %1189, %1169
  call void @llvm.lifetime.end.p0(i64 152, ptr %52) #10
  br label %1200

1191:                                             ; preds = %1156
  %1192 = landingpad { ptr, i32 }
          cleanup
  %1193 = extractvalue { ptr, i32 } %1192, 0
  store ptr %1193, ptr %11, align 8
  %1194 = extractvalue { ptr, i32 } %1192, 1
  store i32 %1194, ptr %12, align 4
  br label %1199

1195:                                             ; preds = %1160
  %1196 = landingpad { ptr, i32 }
          cleanup
  %1197 = extractvalue { ptr, i32 } %1196, 0
  store ptr %1197, ptr %11, align 8
  %1198 = extractvalue { ptr, i32 } %1196, 1
  store i32 %1198, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %56) #10
  br label %1199

1199:                                             ; preds = %1195, %1191
  call void @llvm.lifetime.end.p0(i64 168, ptr %56) #10
  br label %1200

1200:                                             ; preds = %1199, %1190
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %50) #10
  br label %1201

1201:                                             ; preds = %1200, %1165
  call void @llvm.lifetime.end.p0(i64 40, ptr %50) #10
  br label %1203

1202:                                             ; preds = %1164, %1115, %1114
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  br label %1567

1203:                                             ; preds = %1201, %1135
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #10
  br label %1579

1204:                                             ; preds = %1100
  %1205 = load ptr, ptr %22, align 8, !tbaa !5
  %1206 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1205, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %58) #10
  %1207 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %1206, ptr noundef @.str.86)
          to label %1208 unwind label %805

1208:                                             ; preds = %1204
  br i1 %1207, label %1209, label %1227

1209:                                             ; preds = %1208
  %1210 = load ptr, ptr %22, align 8, !tbaa !5
  %1211 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1210, i32 0, i32 1
  %1212 = getelementptr inbounds %"struct.HIR::PathParams", ptr %1211, i32 0, i32 1
  %1213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %1212, i64 noundef 0)
          to label %1214 unwind label %805

1214:                                             ; preds = %1209
  store i32 2, ptr %57, align 4, !tbaa !39
  %1215 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKNS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %1213, ptr noundef nonnull align 4 dereferenceable(4) %57)
          to label %1216 unwind label %1243

1216:                                             ; preds = %1214
  br i1 %1215, label %1225, label %1217

1217:                                             ; preds = %1216
  %1218 = load ptr, ptr %22, align 8, !tbaa !5
  %1219 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1218, i32 0, i32 1
  %1220 = getelementptr inbounds %"struct.HIR::PathParams", ptr %1219, i32 0, i32 1
  %1221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %1220, i64 noundef 0)
          to label %1222 unwind label %1243

1222:                                             ; preds = %1217
  store i32 3, ptr %58, align 4, !tbaa !39
  %1223 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKNS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %1221, ptr noundef nonnull align 4 dereferenceable(4) %58)
          to label %1224 unwind label %1247

1224:                                             ; preds = %1222
  br label %1225

1225:                                             ; preds = %1224, %1216
  %1226 = phi i1 [ true, %1216 ], [ %1223, %1224 ]
  br label %1227

1227:                                             ; preds = %1225, %1208
  %1228 = phi i1 [ false, %1208 ], [ %1226, %1225 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  br i1 %1228, label %1229, label %1370

1229:                                             ; preds = %1227
  br label %1230

1230:                                             ; preds = %1229
  %1231 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1232 unwind label %805

1232:                                             ; preds = %1230
  br i1 %1231, label %1233, label %1252

1233:                                             ; preds = %1232
  %1234 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %1235 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1234, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1236 unwind label %805

1236:                                             ; preds = %1233
  %1237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1235, ptr noundef @.str.87)
          to label %1238 unwind label %805

1238:                                             ; preds = %1236
  %1239 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1237, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1240 unwind label %805

1240:                                             ; preds = %1238
  %1241 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1239, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1242 unwind label %805

1242:                                             ; preds = %1240
  br label %1252

1243:                                             ; preds = %1217, %1214
  %1244 = landingpad { ptr, i32 }
          cleanup
  %1245 = extractvalue { ptr, i32 } %1244, 0
  store ptr %1245, ptr %11, align 8
  %1246 = extractvalue { ptr, i32 } %1244, 1
  store i32 %1246, ptr %12, align 4
  br label %1251

1247:                                             ; preds = %1222
  %1248 = landingpad { ptr, i32 }
          cleanup
  %1249 = extractvalue { ptr, i32 } %1248, 0
  store ptr %1249, ptr %11, align 8
  %1250 = extractvalue { ptr, i32 } %1248, 1
  store i32 %1250, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %58) #10
  br label %1251

1251:                                             ; preds = %1247, %1243
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #10
  br label %1579

1252:                                             ; preds = %1242, %1232
  br label %1253

1253:                                             ; preds = %1252
  br label %1254

1254:                                             ; preds = %1253
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #10
  %1255 = load ptr, ptr %21, align 8, !tbaa !5
  %1256 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1255, i32 0, i32 4
  %1257 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %1256, i64 noundef 0)
          to label %1258 unwind label %1276

1258:                                             ; preds = %1254
  %1259 = invoke noundef ptr @_ZN3MIR5Param10opt_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %1257)
          to label %1260 unwind label %1276

1260:                                             ; preds = %1258
  store ptr %1259, ptr %59, align 8, !tbaa !5
  %1261 = load ptr, ptr %59, align 8, !tbaa !5
  %1262 = icmp ne ptr %1261, null
  br i1 %1262, label %1263, label %1307

1263:                                             ; preds = %1260
  %1264 = load ptr, ptr %17, align 8, !tbaa !5
  %1265 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1264, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %60) #10
  %1266 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %61, i32 0, i32 0
  %1267 = load ptr, ptr %21, align 8, !tbaa !5
  %1268 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1267, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1266, ptr noundef nonnull align 8 dereferenceable(32) %1268)
          to label %1269 unwind label %1280

1269:                                             ; preds = %1263
  store i1 true, ptr %63, align 1
  %1270 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %61, i32 0, i32 1
  %1271 = load ptr, ptr %59, align 8, !tbaa !5
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %1271)
          to label %1272 unwind label %1284

1272:                                             ; preds = %1269
  invoke void @_ZN3MIR6RValueC2ENS_6LValueE(ptr noundef nonnull align 8 dereferenceable(112) %1270, ptr noundef %62)
          to label %1273 unwind label %1288

1273:                                             ; preds = %1272
  store i1 false, ptr %63, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %60, ptr noundef %61)
          to label %1274 unwind label %1292

1274:                                             ; preds = %1273
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1265, ptr noundef nonnull align 8 dereferenceable(152) %60)
          to label %1275 unwind label %1296

1275:                                             ; preds = %1274
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %60) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %61) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %60) #10
  br label %1351

1276:                                             ; preds = %1258, %1254
  %1277 = landingpad { ptr, i32 }
          cleanup
  %1278 = extractvalue { ptr, i32 } %1277, 0
  store ptr %1278, ptr %11, align 8
  %1279 = extractvalue { ptr, i32 } %1277, 1
  store i32 %1279, ptr %12, align 4
  br label %1360

1280:                                             ; preds = %1263
  %1281 = landingpad { ptr, i32 }
          cleanup
  %1282 = extractvalue { ptr, i32 } %1281, 0
  store ptr %1282, ptr %11, align 8
  %1283 = extractvalue { ptr, i32 } %1281, 1
  store i32 %1283, ptr %12, align 4
  br label %1306

1284:                                             ; preds = %1269
  %1285 = landingpad { ptr, i32 }
          cleanup
  %1286 = extractvalue { ptr, i32 } %1285, 0
  store ptr %1286, ptr %11, align 8
  %1287 = extractvalue { ptr, i32 } %1285, 1
  store i32 %1287, ptr %12, align 4
  br label %1302

1288:                                             ; preds = %1272
  %1289 = landingpad { ptr, i32 }
          cleanup
  %1290 = extractvalue { ptr, i32 } %1289, 0
  store ptr %1290, ptr %11, align 8
  %1291 = extractvalue { ptr, i32 } %1289, 1
  store i32 %1291, ptr %12, align 4
  br label %1301

1292:                                             ; preds = %1273
  %1293 = landingpad { ptr, i32 }
          cleanup
  %1294 = extractvalue { ptr, i32 } %1293, 0
  store ptr %1294, ptr %11, align 8
  %1295 = extractvalue { ptr, i32 } %1293, 1
  store i32 %1295, ptr %12, align 4
  br label %1300

1296:                                             ; preds = %1274
  %1297 = landingpad { ptr, i32 }
          cleanup
  %1298 = extractvalue { ptr, i32 } %1297, 0
  store ptr %1298, ptr %11, align 8
  %1299 = extractvalue { ptr, i32 } %1297, 1
  store i32 %1299, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %60) #10
  br label %1300

1300:                                             ; preds = %1296, %1292
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %61) #10
  br label %1301

1301:                                             ; preds = %1300, %1288
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  br label %1302

1302:                                             ; preds = %1301, %1284
  %1303 = load i1, ptr %63, align 1
  br i1 %1303, label %1304, label %1305

1304:                                             ; preds = %1302
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1266) #10
  br label %1305

1305:                                             ; preds = %1304, %1302
  br label %1306

1306:                                             ; preds = %1305, %1280
  call void @llvm.lifetime.end.p0(i64 152, ptr %60) #10
  br label %1360

1307:                                             ; preds = %1260
  %1308 = load ptr, ptr %17, align 8, !tbaa !5
  %1309 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1308, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %64) #10
  %1310 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %65, i32 0, i32 0
  %1311 = load ptr, ptr %21, align 8, !tbaa !5
  %1312 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1311, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1310, ptr noundef nonnull align 8 dereferenceable(32) %1312)
          to label %1313 unwind label %1324

1313:                                             ; preds = %1307
  store i1 true, ptr %67, align 1
  %1314 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %65, i32 0, i32 1
  %1315 = load ptr, ptr %21, align 8, !tbaa !5
  %1316 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1315, i32 0, i32 4
  %1317 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %1316, i64 noundef 0)
          to label %1318 unwind label %1328

1318:                                             ; preds = %1313
  %1319 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1317)
          to label %1320 unwind label %1328

1320:                                             ; preds = %1318
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %66, ptr noundef nonnull align 8 dereferenceable(40) %1319) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %1314, ptr noundef %66)
          to label %1321 unwind label %1332

1321:                                             ; preds = %1320
  store i1 false, ptr %67, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %64, ptr noundef %65)
          to label %1322 unwind label %1336

1322:                                             ; preds = %1321
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1309, ptr noundef nonnull align 8 dereferenceable(152) %64)
          to label %1323 unwind label %1340

1323:                                             ; preds = %1322
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %64) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %65) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %66) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %64) #10
  br label %1351

1324:                                             ; preds = %1307
  %1325 = landingpad { ptr, i32 }
          cleanup
  %1326 = extractvalue { ptr, i32 } %1325, 0
  store ptr %1326, ptr %11, align 8
  %1327 = extractvalue { ptr, i32 } %1325, 1
  store i32 %1327, ptr %12, align 4
  br label %1350

1328:                                             ; preds = %1318, %1313
  %1329 = landingpad { ptr, i32 }
          cleanup
  %1330 = extractvalue { ptr, i32 } %1329, 0
  store ptr %1330, ptr %11, align 8
  %1331 = extractvalue { ptr, i32 } %1329, 1
  store i32 %1331, ptr %12, align 4
  br label %1346

1332:                                             ; preds = %1320
  %1333 = landingpad { ptr, i32 }
          cleanup
  %1334 = extractvalue { ptr, i32 } %1333, 0
  store ptr %1334, ptr %11, align 8
  %1335 = extractvalue { ptr, i32 } %1333, 1
  store i32 %1335, ptr %12, align 4
  br label %1345

1336:                                             ; preds = %1321
  %1337 = landingpad { ptr, i32 }
          cleanup
  %1338 = extractvalue { ptr, i32 } %1337, 0
  store ptr %1338, ptr %11, align 8
  %1339 = extractvalue { ptr, i32 } %1337, 1
  store i32 %1339, ptr %12, align 4
  br label %1344

1340:                                             ; preds = %1322
  %1341 = landingpad { ptr, i32 }
          cleanup
  %1342 = extractvalue { ptr, i32 } %1341, 0
  store ptr %1342, ptr %11, align 8
  %1343 = extractvalue { ptr, i32 } %1341, 1
  store i32 %1343, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %64) #10
  br label %1344

1344:                                             ; preds = %1340, %1336
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %65) #10
  br label %1345

1345:                                             ; preds = %1344, %1332
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %66) #10
  br label %1346

1346:                                             ; preds = %1345, %1328
  %1347 = load i1, ptr %67, align 1
  br i1 %1347, label %1348, label %1349

1348:                                             ; preds = %1346
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1310) #10
  br label %1349

1349:                                             ; preds = %1348, %1346
  br label %1350

1350:                                             ; preds = %1349, %1324
  call void @llvm.lifetime.end.p0(i64 152, ptr %64) #10
  br label %1360

1351:                                             ; preds = %1323, %1275
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %68) #10
  %1352 = load ptr, ptr %21, align 8, !tbaa !5
  %1353 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1352, i32 0, i32 0
  %1354 = load i32, ptr %1353, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %68, i32 noundef %1354)
          to label %1355 unwind label %1361

1355:                                             ; preds = %1351
  %1356 = load ptr, ptr %17, align 8, !tbaa !5
  %1357 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1356, i32 0, i32 1
  %1358 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %1357, ptr noundef nonnull align 8 dereferenceable(168) %68)
          to label %1359 unwind label %1365

1359:                                             ; preds = %1355
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %68) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %68) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %1566

1360:                                             ; preds = %1350, %1306, %1276
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #10
  br label %1579

1361:                                             ; preds = %1351
  %1362 = landingpad { ptr, i32 }
          cleanup
  %1363 = extractvalue { ptr, i32 } %1362, 0
  store ptr %1363, ptr %11, align 8
  %1364 = extractvalue { ptr, i32 } %1362, 1
  store i32 %1364, ptr %12, align 4
  br label %1369

1365:                                             ; preds = %1355
  %1366 = landingpad { ptr, i32 }
          cleanup
  %1367 = extractvalue { ptr, i32 } %1366, 0
  store ptr %1367, ptr %11, align 8
  %1368 = extractvalue { ptr, i32 } %1366, 1
  store i32 %1368, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %68) #10
  br label %1369

1369:                                             ; preds = %1365, %1361
  call void @llvm.lifetime.end.p0(i64 168, ptr %68) #10
  br label %1579

1370:                                             ; preds = %1227
  %1371 = load ptr, ptr %22, align 8, !tbaa !5
  %1372 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1371, i32 0, i32 0
  %1373 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %1372, ptr noundef @.str.88)
          to label %1374 unwind label %805

1374:                                             ; preds = %1370
  br i1 %1373, label %1375, label %1461

1375:                                             ; preds = %1374
  br label %1376

1376:                                             ; preds = %1375
  %1377 = load ptr, ptr %21, align 8, !tbaa !5
  %1378 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1377, i32 0, i32 4
  %1379 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %1378, i64 noundef 0)
          to label %1380 unwind label %805

1380:                                             ; preds = %1376
  %1381 = invoke noundef zeroext i1 @_ZNK3MIR5Param9is_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %1379)
          to label %1382 unwind label %805

1382:                                             ; preds = %1380
  br i1 %1381, label %1390, label %1383

1383:                                             ; preds = %1382
  %1384 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %70) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %69, ptr noundef nonnull align 1 dereferenceable(1) %70) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1384, ptr noundef %69)
          to label %1385 unwind label %1386

1385:                                             ; preds = %1383
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #10
  br label %1390

1386:                                             ; preds = %1383
  %1387 = landingpad { ptr, i32 }
          cleanup
  %1388 = extractvalue { ptr, i32 } %1387, 0
  store ptr %1388, ptr %11, align 8
  %1389 = extractvalue { ptr, i32 } %1387, 1
  store i32 %1389, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %69) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %70) #10
  br label %1579

1390:                                             ; preds = %1385, %1382
  br label %1391

1391:                                             ; preds = %1390
  br label %1392

1392:                                             ; preds = %1391
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #10
  %1393 = load ptr, ptr %21, align 8, !tbaa !5
  %1394 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1393, i32 0, i32 4
  %1395 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %1394, i64 noundef 0)
          to label %1396 unwind label %1420

1396:                                             ; preds = %1392
  %1397 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR5Param9as_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %1395)
          to label %1398 unwind label %1420

1398:                                             ; preds = %1396
  store ptr %1397, ptr %71, align 8, !tbaa !5
  %1399 = load ptr, ptr %17, align 8, !tbaa !5
  %1400 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1399, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %72) #10
  %1401 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %73, i32 0, i32 0
  %1402 = load ptr, ptr %21, align 8, !tbaa !5
  %1403 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1402, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1401, ptr noundef nonnull align 8 dereferenceable(32) %1403)
          to label %1404 unwind label %1424

1404:                                             ; preds = %1398
  store i1 true, ptr %75, align 1
  %1405 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %73, i32 0, i32 1
  %1406 = getelementptr inbounds %"struct.MIR::RValue::Data_DstMeta", ptr %74, i32 0, i32 0
  %1407 = load ptr, ptr %71, align 8, !tbaa !5
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1406, ptr noundef nonnull align 8 dereferenceable(32) %1407)
          to label %1408 unwind label %1428

1408:                                             ; preds = %1404
  invoke void @_ZN3MIR6RValue12make_DstMetaENS0_12Data_DstMetaE(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8 %1405, ptr noundef %74)
          to label %1409 unwind label %1432

1409:                                             ; preds = %1408
  store i1 false, ptr %75, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %72, ptr noundef %73)
          to label %1410 unwind label %1436

1410:                                             ; preds = %1409
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1400, ptr noundef nonnull align 8 dereferenceable(152) %72)
          to label %1411 unwind label %1440

1411:                                             ; preds = %1410
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %72) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %73) #10
  call void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %72) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %76) #10
  %1412 = load ptr, ptr %21, align 8, !tbaa !5
  %1413 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1412, i32 0, i32 0
  %1414 = load i32, ptr %1413, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %76, i32 noundef %1414)
          to label %1415 unwind label %1451

1415:                                             ; preds = %1411
  %1416 = load ptr, ptr %17, align 8, !tbaa !5
  %1417 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1416, i32 0, i32 1
  %1418 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %1417, ptr noundef nonnull align 8 dereferenceable(168) %76)
          to label %1419 unwind label %1455

1419:                                             ; preds = %1415
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %76) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %76) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  br label %1565

1420:                                             ; preds = %1396, %1392
  %1421 = landingpad { ptr, i32 }
          cleanup
  %1422 = extractvalue { ptr, i32 } %1421, 0
  store ptr %1422, ptr %11, align 8
  %1423 = extractvalue { ptr, i32 } %1421, 1
  store i32 %1423, ptr %12, align 4
  br label %1460

1424:                                             ; preds = %1398
  %1425 = landingpad { ptr, i32 }
          cleanup
  %1426 = extractvalue { ptr, i32 } %1425, 0
  store ptr %1426, ptr %11, align 8
  %1427 = extractvalue { ptr, i32 } %1425, 1
  store i32 %1427, ptr %12, align 4
  br label %1450

1428:                                             ; preds = %1404
  %1429 = landingpad { ptr, i32 }
          cleanup
  %1430 = extractvalue { ptr, i32 } %1429, 0
  store ptr %1430, ptr %11, align 8
  %1431 = extractvalue { ptr, i32 } %1429, 1
  store i32 %1431, ptr %12, align 4
  br label %1446

1432:                                             ; preds = %1408
  %1433 = landingpad { ptr, i32 }
          cleanup
  %1434 = extractvalue { ptr, i32 } %1433, 0
  store ptr %1434, ptr %11, align 8
  %1435 = extractvalue { ptr, i32 } %1433, 1
  store i32 %1435, ptr %12, align 4
  br label %1445

1436:                                             ; preds = %1409
  %1437 = landingpad { ptr, i32 }
          cleanup
  %1438 = extractvalue { ptr, i32 } %1437, 0
  store ptr %1438, ptr %11, align 8
  %1439 = extractvalue { ptr, i32 } %1437, 1
  store i32 %1439, ptr %12, align 4
  br label %1444

1440:                                             ; preds = %1410
  %1441 = landingpad { ptr, i32 }
          cleanup
  %1442 = extractvalue { ptr, i32 } %1441, 0
  store ptr %1442, ptr %11, align 8
  %1443 = extractvalue { ptr, i32 } %1441, 1
  store i32 %1443, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %72) #10
  br label %1444

1444:                                             ; preds = %1440, %1436
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %73) #10
  br label %1445

1445:                                             ; preds = %1444, %1432
  call void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #10
  br label %1446

1446:                                             ; preds = %1445, %1428
  %1447 = load i1, ptr %75, align 1
  br i1 %1447, label %1448, label %1449

1448:                                             ; preds = %1446
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1401) #10
  br label %1449

1449:                                             ; preds = %1448, %1446
  br label %1450

1450:                                             ; preds = %1449, %1424
  call void @llvm.lifetime.end.p0(i64 152, ptr %72) #10
  br label %1460

1451:                                             ; preds = %1411
  %1452 = landingpad { ptr, i32 }
          cleanup
  %1453 = extractvalue { ptr, i32 } %1452, 0
  store ptr %1453, ptr %11, align 8
  %1454 = extractvalue { ptr, i32 } %1452, 1
  store i32 %1454, ptr %12, align 4
  br label %1459

1455:                                             ; preds = %1415
  %1456 = landingpad { ptr, i32 }
          cleanup
  %1457 = extractvalue { ptr, i32 } %1456, 0
  store ptr %1457, ptr %11, align 8
  %1458 = extractvalue { ptr, i32 } %1456, 1
  store i32 %1458, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %76) #10
  br label %1459

1459:                                             ; preds = %1455, %1451
  call void @llvm.lifetime.end.p0(i64 168, ptr %76) #10
  br label %1460

1460:                                             ; preds = %1459, %1450, %1420
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #10
  br label %1579

1461:                                             ; preds = %1374
  %1462 = load ptr, ptr %22, align 8, !tbaa !5
  %1463 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1462, i32 0, i32 0
  %1464 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %1463, ptr noundef @.str.89)
          to label %1465 unwind label %805

1465:                                             ; preds = %1461
  br i1 %1464, label %1466, label %1563

1466:                                             ; preds = %1465
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #10
  %1467 = load ptr, ptr %22, align 8, !tbaa !5
  %1468 = getelementptr inbounds %"struct.MIR::CallTarget::Data_Intrinsic", ptr %1467, i32 0, i32 1
  %1469 = getelementptr inbounds %"struct.HIR::PathParams", ptr %1468, i32 0, i32 1
  %1470 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %1469, i64 noundef 0)
          to label %1471 unwind label %1512

1471:                                             ; preds = %1466
  store ptr %1470, ptr %77, align 8, !tbaa !5
  %1472 = load ptr, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %79) #10
  call void @"_ZNSt8functionIFbRKN3HIR7TypeRefEEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS7_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %78, ptr noundef nonnull align 1 dereferenceable(1) %79) #10
  %1473 = invoke noundef zeroext i1 @_Z13visit_ty_withRKN3HIR7TypeRefESt8functionIFbS2_EE(ptr noundef nonnull align 8 dereferenceable(8) %1472, ptr noundef %78)
          to label %1474 unwind label %1516

1474:                                             ; preds = %1471
  %1475 = xor i1 %1473, true
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #10
  br i1 %1475, label %1476, label %1561

1476:                                             ; preds = %1474
  call void @llvm.lifetime.start.p0(i64 1, ptr %80) #10
  %1477 = load ptr, ptr %3, align 8, !tbaa !5
  %1478 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %1477, i32 0, i32 2
  %1479 = load ptr, ptr %1478, align 8, !tbaa !20
  %1480 = load ptr, ptr %3, align 8, !tbaa !5
  %1481 = getelementptr inbounds %"class.MIR::TypeResolve", ptr %1480, i32 0, i32 1
  %1482 = load ptr, ptr %1481, align 8, !tbaa !15
  %1483 = load ptr, ptr %77, align 8, !tbaa !5
  %1484 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %1479, ptr noundef nonnull align 8 dereferenceable(8) %1482, ptr noundef nonnull align 8 dereferenceable(8) %1483)
          to label %1485 unwind label %1520

1485:                                             ; preds = %1476
  %1486 = zext i1 %1484 to i8
  store i8 %1486, ptr %80, align 1, !tbaa !9
  %1487 = load ptr, ptr %17, align 8, !tbaa !5
  %1488 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1487, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 152, ptr %81) #10
  %1489 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %82, i32 0, i32 0
  %1490 = load ptr, ptr %21, align 8, !tbaa !5
  %1491 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1490, i32 0, i32 2
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1489, ptr noundef nonnull align 8 dereferenceable(32) %1491)
          to label %1492 unwind label %1524

1492:                                             ; preds = %1485
  store i1 true, ptr %85, align 1
  %1493 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %82, i32 0, i32 1
  %1494 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %84, i32 0, i32 0
  %1495 = load i8, ptr %80, align 1, !tbaa !9, !range !40, !noundef !41
  %1496 = trunc i8 %1495 to i1
  %1497 = zext i1 %1496 to i8
  store i8 %1497, ptr %1494, align 1, !tbaa !42
  %1498 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %84, i32 0, i32 0
  %1499 = load i8, ptr %1498, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %83, i8 %1499)
          to label %1500 unwind label %1528

1500:                                             ; preds = %1492
  invoke void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8 %1493, ptr noundef %83)
          to label %1501 unwind label %1532

1501:                                             ; preds = %1500
  store i1 false, ptr %85, align 1
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %81, ptr noundef %82)
          to label %1502 unwind label %1536

1502:                                             ; preds = %1501
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %1488, ptr noundef nonnull align 8 dereferenceable(152) %81)
          to label %1503 unwind label %1540

1503:                                             ; preds = %1502
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %81) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %82) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %83) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %81) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr %86) #10
  %1504 = load ptr, ptr %21, align 8, !tbaa !5
  %1505 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1504, i32 0, i32 0
  %1506 = load i32, ptr %1505, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %86, i32 noundef %1506)
          to label %1507 unwind label %1551

1507:                                             ; preds = %1503
  %1508 = load ptr, ptr %17, align 8, !tbaa !5
  %1509 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1508, i32 0, i32 1
  %1510 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %1509, ptr noundef nonnull align 8 dereferenceable(168) %86)
          to label %1511 unwind label %1555

1511:                                             ; preds = %1507
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %86) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %86) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #10
  br label %1561

1512:                                             ; preds = %1466
  %1513 = landingpad { ptr, i32 }
          cleanup
  %1514 = extractvalue { ptr, i32 } %1513, 0
  store ptr %1514, ptr %11, align 8
  %1515 = extractvalue { ptr, i32 } %1513, 1
  store i32 %1515, ptr %12, align 4
  br label %1562

1516:                                             ; preds = %1471
  %1517 = landingpad { ptr, i32 }
          cleanup
  %1518 = extractvalue { ptr, i32 } %1517, 0
  store ptr %1518, ptr %11, align 8
  %1519 = extractvalue { ptr, i32 } %1517, 1
  store i32 %1519, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %78) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %79) #10
  br label %1562

1520:                                             ; preds = %1476
  %1521 = landingpad { ptr, i32 }
          cleanup
  %1522 = extractvalue { ptr, i32 } %1521, 0
  store ptr %1522, ptr %11, align 8
  %1523 = extractvalue { ptr, i32 } %1521, 1
  store i32 %1523, ptr %12, align 4
  br label %1560

1524:                                             ; preds = %1485
  %1525 = landingpad { ptr, i32 }
          cleanup
  %1526 = extractvalue { ptr, i32 } %1525, 0
  store ptr %1526, ptr %11, align 8
  %1527 = extractvalue { ptr, i32 } %1525, 1
  store i32 %1527, ptr %12, align 4
  br label %1550

1528:                                             ; preds = %1492
  %1529 = landingpad { ptr, i32 }
          cleanup
  %1530 = extractvalue { ptr, i32 } %1529, 0
  store ptr %1530, ptr %11, align 8
  %1531 = extractvalue { ptr, i32 } %1529, 1
  store i32 %1531, ptr %12, align 4
  br label %1546

1532:                                             ; preds = %1500
  %1533 = landingpad { ptr, i32 }
          cleanup
  %1534 = extractvalue { ptr, i32 } %1533, 0
  store ptr %1534, ptr %11, align 8
  %1535 = extractvalue { ptr, i32 } %1533, 1
  store i32 %1535, ptr %12, align 4
  br label %1545

1536:                                             ; preds = %1501
  %1537 = landingpad { ptr, i32 }
          cleanup
  %1538 = extractvalue { ptr, i32 } %1537, 0
  store ptr %1538, ptr %11, align 8
  %1539 = extractvalue { ptr, i32 } %1537, 1
  store i32 %1539, ptr %12, align 4
  br label %1544

1540:                                             ; preds = %1502
  %1541 = landingpad { ptr, i32 }
          cleanup
  %1542 = extractvalue { ptr, i32 } %1541, 0
  store ptr %1542, ptr %11, align 8
  %1543 = extractvalue { ptr, i32 } %1541, 1
  store i32 %1543, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %81) #10
  br label %1544

1544:                                             ; preds = %1540, %1536
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %82) #10
  br label %1545

1545:                                             ; preds = %1544, %1532
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %83) #10
  br label %1546

1546:                                             ; preds = %1545, %1528
  %1547 = load i1, ptr %85, align 1
  br i1 %1547, label %1548, label %1549

1548:                                             ; preds = %1546
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %1489) #10
  br label %1549

1549:                                             ; preds = %1548, %1546
  br label %1550

1550:                                             ; preds = %1549, %1524
  call void @llvm.lifetime.end.p0(i64 152, ptr %81) #10
  br label %1560

1551:                                             ; preds = %1503
  %1552 = landingpad { ptr, i32 }
          cleanup
  %1553 = extractvalue { ptr, i32 } %1552, 0
  store ptr %1553, ptr %11, align 8
  %1554 = extractvalue { ptr, i32 } %1552, 1
  store i32 %1554, ptr %12, align 4
  br label %1559

1555:                                             ; preds = %1507
  %1556 = landingpad { ptr, i32 }
          cleanup
  %1557 = extractvalue { ptr, i32 } %1556, 0
  store ptr %1557, ptr %11, align 8
  %1558 = extractvalue { ptr, i32 } %1556, 1
  store i32 %1558, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %86) #10
  br label %1559

1559:                                             ; preds = %1555, %1551
  call void @llvm.lifetime.end.p0(i64 168, ptr %86) #10
  br label %1560

1560:                                             ; preds = %1559, %1550, %1520
  call void @llvm.lifetime.end.p0(i64 1, ptr %80) #10
  br label %1562

1561:                                             ; preds = %1511, %1474
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #10
  br label %1564

1562:                                             ; preds = %1560, %1516, %1512
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #10
  br label %1579

1563:                                             ; preds = %1465
  br label %1564

1564:                                             ; preds = %1563, %1561
  br label %1565

1565:                                             ; preds = %1564, %1419
  br label %1566

1566:                                             ; preds = %1565, %1359
  br label %1567

1567:                                             ; preds = %1566, %1202
  br label %1568

1568:                                             ; preds = %1567, %1094
  br label %1569

1569:                                             ; preds = %1568, %984
  br label %1570

1570:                                             ; preds = %1569, %876
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  store i32 0, ptr %16, align 4
  br label %1571

1571:                                             ; preds = %1570, %760
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  %1572 = load i32, ptr %16, align 4
  switch i32 %1572, label %1574 [
    i32 0, label %1573
  ]

1573:                                             ; preds = %1571
  store i32 0, ptr %16, align 4
  br label %1574

1574:                                             ; preds = %1573, %1571, %750
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  %1575 = load i32, ptr %16, align 4
  switch i32 %1575, label %8459 [
    i32 0, label %1576
    i32 3, label %1577
  ]

1576:                                             ; preds = %1574
  br label %1577

1577:                                             ; preds = %1576, %1574
  %1578 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #10
  br label %695

1579:                                             ; preds = %1562, %1460, %1386, %1369, %1360, %1251, %1203, %1095, %985, %877, %805
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #10
  br label %1580

1580:                                             ; preds = %1579, %761
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #10
  br label %1581

1581:                                             ; preds = %1580, %740, %728
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #10
  br label %8452

1582:                                             ; preds = %697
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #10
  %1583 = load ptr, ptr %4, align 8, !tbaa !5
  %1584 = getelementptr inbounds %"class.MIR::Function", ptr %1583, i32 0, i32 2
  store ptr %1584, ptr %87, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #10
  %1585 = load ptr, ptr %87, align 8, !tbaa !5
  %1586 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1585) #10
  %1587 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %88, i32 0, i32 0
  store ptr %1586, ptr %1587, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %89) #10
  %1588 = load ptr, ptr %87, align 8, !tbaa !5
  %1589 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1588) #10
  %1590 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %89, i32 0, i32 0
  store ptr %1589, ptr %1590, align 8
  br label %1591

1591:                                             ; preds = %8230, %1582
  %1592 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull align 8 dereferenceable(8) %89) #10
  br i1 %1592, label %1594, label %1593

1593:                                             ; preds = %1591
  store i32 20, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #10
  br label %8233

1594:                                             ; preds = %1591
  call void @llvm.lifetime.start.p0(i64 8, ptr %90) #10
  %1595 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %88) #10
  store ptr %1595, ptr %90, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %91) #10
  %1596 = load ptr, ptr %90, align 8, !tbaa !5
  %1597 = load ptr, ptr %4, align 8, !tbaa !5
  %1598 = getelementptr inbounds %"class.MIR::Function", ptr %1597, i32 0, i32 2
  %1599 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1598) #10
  %1600 = ptrtoint ptr %1596 to i64
  %1601 = ptrtoint ptr %1599 to i64
  %1602 = sub i64 %1600, %1601
  %1603 = sdiv exact i64 %1602, 192
  store i64 %1603, ptr %91, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 48, ptr %92) #10
  call void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr %93) #10
  call void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %93) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr %94) #10
  call void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr %95) #10
  %1604 = getelementptr inbounds %class.anon.457, ptr %95, i32 0, i32 0
  store ptr %92, ptr %1604, align 8, !tbaa !5
  %1605 = getelementptr inbounds %class.anon.457, ptr %95, i32 0, i32 1
  %1606 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %1606, ptr %1605, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %96) #10
  %1607 = getelementptr inbounds %class.anon.458, ptr %96, i32 0, i32 0
  store ptr %95, ptr %1607, align 8, !tbaa !5
  %1608 = getelementptr inbounds %class.anon.458, ptr %96, i32 0, i32 1
  store ptr %5, ptr %1608, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %97) #10
  %1609 = getelementptr inbounds %class.anon.459, ptr %97, i32 0, i32 0
  store ptr %92, ptr %1609, align 8, !tbaa !5
  %1610 = getelementptr inbounds %class.anon.459, ptr %97, i32 0, i32 1
  %1611 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %1611, ptr %1610, align 8, !tbaa !5
  %1612 = getelementptr inbounds %class.anon.459, ptr %97, i32 0, i32 2
  store ptr %5, ptr %1612, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #10
  %1613 = load ptr, ptr %90, align 8, !tbaa !5
  %1614 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1613, i32 0, i32 0
  store ptr %1614, ptr %98, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #10
  %1615 = load ptr, ptr %98, align 8, !tbaa !5
  %1616 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1615) #10
  %1617 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %99, i32 0, i32 0
  store ptr %1616, ptr %1617, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #10
  %1618 = load ptr, ptr %98, align 8, !tbaa !5
  %1619 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1618) #10
  %1620 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %100, i32 0, i32 0
  store ptr %1619, ptr %1620, align 8
  br label %1621

1621:                                             ; preds = %7888, %1594
  %1622 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %99, ptr noundef nonnull align 8 dereferenceable(8) %100) #10
  br i1 %1622, label %1624, label %1623

1623:                                             ; preds = %1621
  store i32 22, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #10
  br label %7892

1624:                                             ; preds = %1621
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #10
  %1625 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %99) #10
  store ptr %1625, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #10
  %1626 = load ptr, ptr %101, align 8, !tbaa !5
  %1627 = load ptr, ptr %90, align 8, !tbaa !5
  %1628 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1627, i32 0, i32 0
  %1629 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1628) #10
  %1630 = ptrtoint ptr %1626 to i64
  %1631 = ptrtoint ptr %1629 to i64
  %1632 = sub i64 %1630, %1631
  %1633 = sdiv exact i64 %1632, 152
  store i64 %1633, ptr %102, align 8, !tbaa !13
  %1634 = load ptr, ptr %3, align 8, !tbaa !5
  %1635 = load i64, ptr %91, align 8, !tbaa !13
  %1636 = trunc i64 %1635 to i32
  %1637 = load i64, ptr %102, align 8, !tbaa !13
  %1638 = trunc i64 %1637 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %1634, i32 noundef %1636, i32 noundef %1638)
          to label %1639 unwind label %1654

1639:                                             ; preds = %1624
  %1640 = load ptr, ptr %101, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %1641 unwind label %1654

1641:                                             ; preds = %1639
  %1642 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %1640, ptr noundef %103)
          to label %1643 unwind label %1658

1643:                                             ; preds = %1641
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #10
  %1644 = load ptr, ptr %101, align 8, !tbaa !5
  %1645 = invoke noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1644)
          to label %1646 unwind label %1662

1646:                                             ; preds = %1643
  store ptr %1645, ptr %104, align 8, !tbaa !5
  %1647 = load ptr, ptr %104, align 8, !tbaa !5
  %1648 = icmp ne ptr %1647, null
  br i1 %1648, label %1649, label %7438

1649:                                             ; preds = %1646
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #10
  store i8 1, ptr %105, align 1, !tbaa !9
  br label %1650

1650:                                             ; preds = %7436, %1649
  %1651 = load i8, ptr %105, align 1, !tbaa !9, !range !40, !noundef !41
  %1652 = trunc i8 %1651 to i1
  br i1 %1652, label %1666, label %1653

1653:                                             ; preds = %1650
  store i32 24, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #10
  br label %7437

1654:                                             ; preds = %1639, %1624
  %1655 = landingpad { ptr, i32 }
          cleanup
  %1656 = extractvalue { ptr, i32 } %1655, 0
  store ptr %1656, ptr %11, align 8
  %1657 = extractvalue { ptr, i32 } %1655, 1
  store i32 %1657, ptr %12, align 4
  br label %7891

1658:                                             ; preds = %1641
  %1659 = landingpad { ptr, i32 }
          cleanup
  %1660 = extractvalue { ptr, i32 } %1659, 0
  store ptr %1660, ptr %11, align 8
  %1661 = extractvalue { ptr, i32 } %1659, 1
  store i32 %1661, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #10
  br label %7891

1662:                                             ; preds = %1643
  %1663 = landingpad { ptr, i32 }
          cleanup
  %1664 = extractvalue { ptr, i32 } %1663, 0
  store ptr %1664, ptr %11, align 8
  %1665 = extractvalue { ptr, i32 } %1663, 1
  store i32 %1665, ptr %12, align 4
  br label %7627

1666:                                             ; preds = %1650
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #10
  %1667 = load ptr, ptr %104, align 8, !tbaa !5
  %1668 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1667, i32 0, i32 1
  store ptr %1668, ptr %106, align 8, !tbaa !5
  br label %1669

1669:                                             ; preds = %7433, %1666
  %1670 = load i8, ptr %105, align 1, !tbaa !9, !range !40, !noundef !41
  %1671 = trunc i8 %1670 to i1
  br i1 %1671, label %1673, label %1672

1672:                                             ; preds = %1669
  store i32 27, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #10
  br label %7435

1673:                                             ; preds = %1669
  %1674 = load ptr, ptr %106, align 8, !tbaa !5
  %1675 = invoke noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %1674)
          to label %1676 unwind label %1677

1676:                                             ; preds = %1673
  switch i32 %1675, label %7432 [
    i32 0, label %1681
    i32 1, label %1682
    i32 3, label %1741
    i32 4, label %1764
    i32 2, label %1790
    i32 5, label %1877
    i32 6, label %2494
    i32 7, label %6426
    i32 8, label %7124
    i32 9, label %7147
    i32 10, label %7170
    i32 11, label %7222
    i32 12, label %7268
    i32 13, label %7314
    i32 14, label %7340
    i32 15, label %7386
  ]

1677:                                             ; preds = %1673
  %1678 = landingpad { ptr, i32 }
          cleanup
  %1679 = extractvalue { ptr, i32 } %1678, 0
  store ptr %1679, ptr %11, align 8
  %1680 = extractvalue { ptr, i32 } %1678, 1
  store i32 %1680, ptr %12, align 4
  br label %7434

1681:                                             ; preds = %1676
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 3793, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1682:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %107) #10
  store i8 1, ptr %107, align 1, !tbaa !9
  br label %1683

1683:                                             ; preds = %1739, %1682
  %1684 = load i8, ptr %107, align 1, !tbaa !9, !range !40, !noundef !41
  %1685 = trunc i8 %1684 to i1
  br i1 %1685, label %1687, label %1686

1686:                                             ; preds = %1683
  store i32 31, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %107) #10
  br label %1740

1687:                                             ; preds = %1683
  call void @llvm.lifetime.start.p0(i64 8, ptr %108) #10
  %1688 = load ptr, ptr %106, align 8, !tbaa !5
  %1689 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1688)
          to label %1690 unwind label %1696

1690:                                             ; preds = %1687
  store ptr %1689, ptr %108, align 8, !tbaa !5
  br label %1691

1691:                                             ; preds = %1734, %1690
  %1692 = load ptr, ptr %108, align 8, !tbaa !5
  %1693 = load i8, ptr %107, align 1, !tbaa !9, !range !40, !noundef !41
  %1694 = trunc i8 %1693 to i1
  br i1 %1694, label %1700, label %1695

1695:                                             ; preds = %1691
  store i32 34, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #10
  br label %1738

1696:                                             ; preds = %1687
  %1697 = landingpad { ptr, i32 }
          cleanup
  %1698 = extractvalue { ptr, i32 } %1697, 0
  store ptr %1698, ptr %11, align 8
  %1699 = extractvalue { ptr, i32 } %1697, 1
  store i32 %1699, ptr %12, align 4
  br label %1737

1700:                                             ; preds = %1691
  call void @llvm.lifetime.start.p0(i64 40, ptr %109) #10
  %1701 = load ptr, ptr %108, align 8, !tbaa !5
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK3$_5clERKNS_6LValueE"(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %109, ptr noundef nonnull align 8 dereferenceable(16) %95, ptr noundef nonnull align 8 dereferenceable(32) %1701)
          to label %1702 unwind label %1710

1702:                                             ; preds = %1700
  %1703 = invoke noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %109)
          to label %1704 unwind label %1714

1704:                                             ; preds = %1702
  br i1 %1703, label %1705, label %1718

1705:                                             ; preds = %1704
  %1706 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %109)
          to label %1707 unwind label %1714

1707:                                             ; preds = %1705
  %1708 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %1706) #10
  br i1 %1708, label %1718, label %1709

1709:                                             ; preds = %1707
  br label %1733

1710:                                             ; preds = %1700
  %1711 = landingpad { ptr, i32 }
          cleanup
  %1712 = extractvalue { ptr, i32 } %1711, 0
  store ptr %1712, ptr %11, align 8
  %1713 = extractvalue { ptr, i32 } %1711, 1
  store i32 %1713, ptr %12, align 4
  br label %1736

1714:                                             ; preds = %1705, %1702
  %1715 = landingpad { ptr, i32 }
          cleanup
  %1716 = extractvalue { ptr, i32 } %1715, 0
  store ptr %1716, ptr %11, align 8
  %1717 = extractvalue { ptr, i32 } %1715, 1
  store i32 %1717, ptr %12, align 4
  br label %1735

1718:                                             ; preds = %1707, %1704
  call void @llvm.lifetime.start.p0(i64 112, ptr %110) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %111, ptr noundef nonnull align 8 dereferenceable(40) %109) #10
  invoke void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8 %110, ptr noundef %111)
          to label %1719 unwind label %1724

1719:                                             ; preds = %1718
  %1720 = load ptr, ptr %104, align 8, !tbaa !5
  %1721 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1720, i32 0, i32 1
  %1722 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %1721, ptr noundef nonnull align 8 dereferenceable(112) %110)
          to label %1723 unwind label %1728

1723:                                             ; preds = %1719
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %110) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %111) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %110) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %1733

1724:                                             ; preds = %1718
  %1725 = landingpad { ptr, i32 }
          cleanup
  %1726 = extractvalue { ptr, i32 } %1725, 0
  store ptr %1726, ptr %11, align 8
  %1727 = extractvalue { ptr, i32 } %1725, 1
  store i32 %1727, ptr %12, align 4
  br label %1732

1728:                                             ; preds = %1719
  %1729 = landingpad { ptr, i32 }
          cleanup
  %1730 = extractvalue { ptr, i32 } %1729, 0
  store ptr %1730, ptr %11, align 8
  %1731 = extractvalue { ptr, i32 } %1729, 1
  store i32 %1731, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %110) #10
  br label %1732

1732:                                             ; preds = %1728, %1724
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %111) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %110) #10
  br label %1735

1733:                                             ; preds = %1723, %1709
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %109) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %109) #10
  br label %1734

1734:                                             ; preds = %1733
  store i8 0, ptr %107, align 1, !tbaa !9
  br label %1691, !llvm.loop !44

1735:                                             ; preds = %1732, %1714
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %109) #10
  br label %1736

1736:                                             ; preds = %1735, %1710
  call void @llvm.lifetime.end.p0(i64 40, ptr %109) #10
  br label %1737

1737:                                             ; preds = %1736, %1696
  call void @llvm.lifetime.end.p0(i64 8, ptr %108) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %107) #10
  br label %7434

1738:                                             ; preds = %1695
  br label %1739

1739:                                             ; preds = %1738
  store i8 0, ptr %107, align 1, !tbaa !9
  br label %1683, !llvm.loop !46

1740:                                             ; preds = %1686
  br label %7432

1741:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %112) #10
  store i8 1, ptr %112, align 1, !tbaa !9
  br label %1742

1742:                                             ; preds = %1762, %1741
  %1743 = load i8, ptr %112, align 1, !tbaa !9, !range !40, !noundef !41
  %1744 = trunc i8 %1743 to i1
  br i1 %1744, label %1746, label %1745

1745:                                             ; preds = %1742
  store i32 37, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #10
  br label %1763

1746:                                             ; preds = %1742
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #10
  %1747 = load ptr, ptr %106, align 8, !tbaa !5
  %1748 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %1747)
          to label %1749 unwind label %1755

1749:                                             ; preds = %1746
  store ptr %1748, ptr %113, align 8, !tbaa !5
  br label %1750

1750:                                             ; preds = %1760, %1749
  %1751 = load ptr, ptr %113, align 8, !tbaa !5
  %1752 = load i8, ptr %112, align 1, !tbaa !9, !range !40, !noundef !41
  %1753 = trunc i8 %1752 to i1
  br i1 %1753, label %1759, label %1754

1754:                                             ; preds = %1750
  store i32 40, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #10
  br label %1761

1755:                                             ; preds = %1746
  %1756 = landingpad { ptr, i32 }
          cleanup
  %1757 = extractvalue { ptr, i32 } %1756, 0
  store ptr %1757, ptr %11, align 8
  %1758 = extractvalue { ptr, i32 } %1756, 1
  store i32 %1758, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %112) #10
  br label %7434

1759:                                             ; preds = %1750
  br label %1760

1760:                                             ; preds = %1759
  store i8 0, ptr %112, align 1, !tbaa !9
  br label %1750, !llvm.loop !47

1761:                                             ; preds = %1754
  br label %1762

1762:                                             ; preds = %1761
  store i8 0, ptr %112, align 1, !tbaa !9
  br label %1742, !llvm.loop !48

1763:                                             ; preds = %1745
  br label %7432

1764:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %114) #10
  store i8 1, ptr %114, align 1, !tbaa !9
  br label %1765

1765:                                             ; preds = %1788, %1764
  %1766 = load i8, ptr %114, align 1, !tbaa !9, !range !40, !noundef !41
  %1767 = trunc i8 %1766 to i1
  br i1 %1767, label %1769, label %1768

1768:                                             ; preds = %1765
  store i32 43, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #10
  br label %1789

1769:                                             ; preds = %1765
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #10
  %1770 = load ptr, ptr %106, align 8, !tbaa !5
  %1771 = invoke noundef nonnull align 8 dereferenceable(80) ptr @_ZN3MIR6RValue13as_SizedArrayEv(ptr noundef nonnull align 8 dereferenceable(112) %1770)
          to label %1772 unwind label %1778

1772:                                             ; preds = %1769
  store ptr %1771, ptr %115, align 8, !tbaa !5
  br label %1773

1773:                                             ; preds = %1786, %1772
  %1774 = load ptr, ptr %115, align 8, !tbaa !5
  %1775 = load i8, ptr %114, align 1, !tbaa !9, !range !40, !noundef !41
  %1776 = trunc i8 %1775 to i1
  br i1 %1776, label %1782, label %1777

1777:                                             ; preds = %1773
  store i32 46, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #10
  br label %1787

1778:                                             ; preds = %1782, %1769
  %1779 = landingpad { ptr, i32 }
          cleanup
  %1780 = extractvalue { ptr, i32 } %1779, 0
  store ptr %1780, ptr %11, align 8
  %1781 = extractvalue { ptr, i32 } %1779, 1
  store i32 %1781, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %114) #10
  br label %7434

1782:                                             ; preds = %1773
  %1783 = load ptr, ptr %115, align 8, !tbaa !5
  %1784 = getelementptr inbounds %"struct.MIR::RValue::Data_SizedArray", ptr %1783, i32 0, i32 0
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %1784)
          to label %1785 unwind label %1778

1785:                                             ; preds = %1782
  br label %1786

1786:                                             ; preds = %1785
  store i8 0, ptr %114, align 1, !tbaa !9
  br label %1773, !llvm.loop !49

1787:                                             ; preds = %1777
  br label %1788

1788:                                             ; preds = %1787
  store i8 0, ptr %114, align 1, !tbaa !9
  br label %1765, !llvm.loop !50

1789:                                             ; preds = %1768
  br label %7432

1790:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %116) #10
  store i8 1, ptr %116, align 1, !tbaa !9
  br label %1791

1791:                                             ; preds = %1875, %1790
  %1792 = load i8, ptr %116, align 1, !tbaa !9, !range !40, !noundef !41
  %1793 = trunc i8 %1792 to i1
  br i1 %1793, label %1795, label %1794

1794:                                             ; preds = %1791
  store i32 49, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %116) #10
  br label %1876

1795:                                             ; preds = %1791
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #10
  %1796 = load ptr, ptr %106, align 8, !tbaa !5
  %1797 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(112) %1796)
          to label %1798 unwind label %1804

1798:                                             ; preds = %1795
  store ptr %1797, ptr %117, align 8, !tbaa !5
  br label %1799

1799:                                             ; preds = %1872, %1798
  %1800 = load ptr, ptr %117, align 8, !tbaa !5
  %1801 = load i8, ptr %116, align 1, !tbaa !9, !range !40, !noundef !41
  %1802 = trunc i8 %1801 to i1
  br i1 %1802, label %1808, label %1803

1803:                                             ; preds = %1799
  store i32 52, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #10
  br label %1874

1804:                                             ; preds = %1865, %1861, %1818, %1795
  %1805 = landingpad { ptr, i32 }
          cleanup
  %1806 = extractvalue { ptr, i32 } %1805, 0
  store ptr %1806, ptr %11, align 8
  %1807 = extractvalue { ptr, i32 } %1805, 1
  store i32 %1807, ptr %12, align 4
  br label %1873

1808:                                             ; preds = %1799
  %1809 = load ptr, ptr %117, align 8, !tbaa !5
  %1810 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1809, i32 0, i32 0
  %1811 = load i32, ptr %1810, align 8, !tbaa !51
  %1812 = icmp eq i32 %1811, 0
  br i1 %1812, label %1813, label %1856

1813:                                             ; preds = %1808
  %1814 = load ptr, ptr %117, align 8, !tbaa !5
  %1815 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1814, i32 0, i32 1
  %1816 = getelementptr inbounds %"struct.MIR::LValue", ptr %1815, i32 0, i32 1
  %1817 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1816) #10
  br i1 %1817, label %1818, label %1856

1818:                                             ; preds = %1813
  %1819 = load ptr, ptr %117, align 8, !tbaa !5
  %1820 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1819, i32 0, i32 1
  %1821 = getelementptr inbounds %"struct.MIR::LValue", ptr %1820, i32 0, i32 0
  %1822 = invoke noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8) %1821)
          to label %1823 unwind label %1804

1823:                                             ; preds = %1818
  br i1 %1822, label %1824, label %1856

1824:                                             ; preds = %1823
  call void @llvm.lifetime.start.p0(i64 112, ptr %118) #10
  %1825 = load ptr, ptr %117, align 8, !tbaa !5
  %1826 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1825, i32 0, i32 1
  %1827 = getelementptr inbounds %"struct.MIR::LValue", ptr %1826, i32 0, i32 0
  %1828 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6LValue7Storage9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(8) %1827)
          to label %1829 unwind label %1837

1829:                                             ; preds = %1824
  invoke void @_Z15make_unique_ptrIN3HIR4PathEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind writable sret(%"class.std::unique_ptr.157") align 8 %120, ptr noundef nonnull align 8 dereferenceable(88) %1828)
          to label %1830 unwind label %1837

1830:                                             ; preds = %1829
  invoke void @_ZN3MIR8Constant13make_ItemAddrESt10unique_ptrIN3HIR4PathESt14default_deleteIS3_EE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %119, ptr noundef %120)
          to label %1831 unwind label %1841

1831:                                             ; preds = %1830
  invoke void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8 %118, ptr noundef %119)
          to label %1832 unwind label %1845

1832:                                             ; preds = %1831
  %1833 = load ptr, ptr %104, align 8, !tbaa !5
  %1834 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1833, i32 0, i32 1
  %1835 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %1834, ptr noundef nonnull align 8 dereferenceable(112) %118)
          to label %1836 unwind label %1849

1836:                                             ; preds = %1832
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %118) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %119) #10
  call void @_ZNSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %118) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %1871

1837:                                             ; preds = %1829, %1824
  %1838 = landingpad { ptr, i32 }
          cleanup
  %1839 = extractvalue { ptr, i32 } %1838, 0
  store ptr %1839, ptr %11, align 8
  %1840 = extractvalue { ptr, i32 } %1838, 1
  store i32 %1840, ptr %12, align 4
  br label %1855

1841:                                             ; preds = %1830
  %1842 = landingpad { ptr, i32 }
          cleanup
  %1843 = extractvalue { ptr, i32 } %1842, 0
  store ptr %1843, ptr %11, align 8
  %1844 = extractvalue { ptr, i32 } %1842, 1
  store i32 %1844, ptr %12, align 4
  br label %1854

1845:                                             ; preds = %1831
  %1846 = landingpad { ptr, i32 }
          cleanup
  %1847 = extractvalue { ptr, i32 } %1846, 0
  store ptr %1847, ptr %11, align 8
  %1848 = extractvalue { ptr, i32 } %1846, 1
  store i32 %1848, ptr %12, align 4
  br label %1853

1849:                                             ; preds = %1832
  %1850 = landingpad { ptr, i32 }
          cleanup
  %1851 = extractvalue { ptr, i32 } %1850, 0
  store ptr %1851, ptr %11, align 8
  %1852 = extractvalue { ptr, i32 } %1850, 1
  store i32 %1852, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %118) #10
  br label %1853

1853:                                             ; preds = %1849, %1845
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %119) #10
  br label %1854

1854:                                             ; preds = %1853, %1841
  call void @_ZNSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %120) #10
  br label %1855

1855:                                             ; preds = %1854, %1837
  call void @llvm.lifetime.end.p0(i64 112, ptr %118) #10
  br label %1873

1856:                                             ; preds = %1823, %1813, %1808
  %1857 = load ptr, ptr %117, align 8, !tbaa !5
  %1858 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1857, i32 0, i32 0
  %1859 = load i32, ptr %1858, align 8, !tbaa !51
  %1860 = icmp eq i32 %1859, 1
  br i1 %1860, label %1861, label %1870

1861:                                             ; preds = %1856
  %1862 = load ptr, ptr %117, align 8, !tbaa !5
  %1863 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1862, i32 0, i32 1
  %1864 = invoke noundef i64 @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE5eraseERS6_(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 8 dereferenceable(32) %1863)
          to label %1865 unwind label %1804

1865:                                             ; preds = %1861
  %1866 = load ptr, ptr %117, align 8, !tbaa !5
  %1867 = getelementptr inbounds %"struct.MIR::RValue::Data_Borrow", ptr %1866, i32 0, i32 1
  %1868 = invoke noundef i64 @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5eraseERS5_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(32) %1867)
          to label %1869 unwind label %1804

1869:                                             ; preds = %1865
  br label %1870

1870:                                             ; preds = %1869, %1856
  br label %1871

1871:                                             ; preds = %1870, %1836
  br label %1872

1872:                                             ; preds = %1871
  store i8 0, ptr %116, align 1, !tbaa !9
  br label %1799, !llvm.loop !54

1873:                                             ; preds = %1855, %1804
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %116) #10
  br label %7434

1874:                                             ; preds = %1803
  br label %1875

1875:                                             ; preds = %1874
  store i8 0, ptr %116, align 1, !tbaa !9
  br label %1791, !llvm.loop !55

1876:                                             ; preds = %1794
  br label %7432

1877:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %121) #10
  store i8 1, ptr %121, align 1, !tbaa !9
  br label %1878

1878:                                             ; preds = %2492, %1877
  %1879 = load i8, ptr %121, align 1, !tbaa !9, !range !40, !noundef !41
  %1880 = trunc i8 %1879 to i1
  br i1 %1880, label %1882, label %1881

1881:                                             ; preds = %1878
  store i32 55, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #10
  br label %2493

1882:                                             ; preds = %1878
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #10
  %1883 = load ptr, ptr %106, align 8, !tbaa !5
  %1884 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue7as_CastEv(ptr noundef nonnull align 8 dereferenceable(112) %1883)
          to label %1885 unwind label %1891

1885:                                             ; preds = %1882
  store ptr %1884, ptr %122, align 8, !tbaa !5
  br label %1886

1886:                                             ; preds = %2486, %1885
  %1887 = load ptr, ptr %122, align 8, !tbaa !5
  %1888 = load i8, ptr %121, align 1, !tbaa !9, !range !40, !noundef !41
  %1889 = trunc i8 %1888 to i1
  br i1 %1889, label %1895, label %1890

1890:                                             ; preds = %1886
  store i32 58, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #10
  br label %2491

1891:                                             ; preds = %1882
  %1892 = landingpad { ptr, i32 }
          cleanup
  %1893 = extractvalue { ptr, i32 } %1892, 0
  store ptr %1893, ptr %11, align 8
  %1894 = extractvalue { ptr, i32 } %1892, 1
  store i32 %1894, ptr %12, align 4
  br label %2490

1895:                                             ; preds = %1886
  call void @llvm.lifetime.start.p0(i64 40, ptr %123) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123)
          to label %1896 unwind label %1914

1896:                                             ; preds = %1895
  call void @llvm.lifetime.start.p0(i64 40, ptr %124) #10
  %1897 = load ptr, ptr %122, align 8, !tbaa !5
  %1898 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %1897, i32 0, i32 0
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK3$_5clERKNS_6LValueE"(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %124, ptr noundef nonnull align 8 dereferenceable(16) %95, ptr noundef nonnull align 8 dereferenceable(32) %1898)
          to label %1899 unwind label %1918

1899:                                             ; preds = %1896
  %1900 = invoke noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %1901 unwind label %1922

1901:                                             ; preds = %1899
  br i1 %1900, label %2263, label %1902

1902:                                             ; preds = %1901
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #10
  %1903 = load ptr, ptr %122, align 8, !tbaa !5
  %1904 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %1903, i32 0, i32 1
  %1905 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1904)
          to label %1906 unwind label %1926

1906:                                             ; preds = %1902
  %1907 = invoke noundef ptr @_ZNK3HIR8TypeData13opt_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %1905)
          to label %1908 unwind label %1926

1908:                                             ; preds = %1906
  store ptr %1907, ptr %125, align 8, !tbaa !5
  %1909 = load ptr, ptr %125, align 8, !tbaa !5
  %1910 = icmp ne ptr %1909, null
  br i1 %1910, label %1911, label %2261

1911:                                             ; preds = %1908
  %1912 = load ptr, ptr %125, align 8, !tbaa !5
  %1913 = load i32, ptr %1912, align 4, !tbaa !39
  switch i32 %1913, label %2260 [
    i32 2, label %1930
    i32 4, label %1930
    i32 6, label %1930
    i32 8, label %1930
    i32 10, label %1930
    i32 0, label %1930
    i32 3, label %2114
    i32 5, label %2114
    i32 7, label %2114
    i32 9, label %2114
    i32 11, label %2114
    i32 1, label %2114
    i32 12, label %2242
    i32 13, label %2242
    i32 15, label %2260
    i32 14, label %2260
    i32 16, label %2243
  ]

1914:                                             ; preds = %1895
  %1915 = landingpad { ptr, i32 }
          cleanup
  %1916 = extractvalue { ptr, i32 } %1915, 0
  store ptr %1916, ptr %11, align 8
  %1917 = extractvalue { ptr, i32 } %1915, 1
  store i32 %1917, ptr %12, align 4
  br label %2489

1918:                                             ; preds = %1896
  %1919 = landingpad { ptr, i32 }
          cleanup
  %1920 = extractvalue { ptr, i32 } %1919, 0
  store ptr %1920, ptr %11, align 8
  %1921 = extractvalue { ptr, i32 } %1919, 1
  store i32 %1921, ptr %12, align 4
  br label %2488

1922:                                             ; preds = %2456, %2454, %2452, %2450, %2446, %2444, %2441, %2438, %2435, %2263, %1899
  %1923 = landingpad { ptr, i32 }
          cleanup
  %1924 = extractvalue { ptr, i32 } %1923, 0
  store ptr %1924, ptr %11, align 8
  %1925 = extractvalue { ptr, i32 } %1923, 1
  store i32 %1925, ptr %12, align 4
  br label %2487

1926:                                             ; preds = %1906, %1902
  %1927 = landingpad { ptr, i32 }
          cleanup
  %1928 = extractvalue { ptr, i32 } %1927, 0
  store ptr %1928, ptr %11, align 8
  %1929 = extractvalue { ptr, i32 } %1927, 1
  store i32 %1929, ptr %12, align 4
  br label %2262

1930:                                             ; preds = %1911, %1911, %1911, %1911, %1911, %1911
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #10
  %1931 = invoke noundef ptr @_ZN3MIR8Constant8opt_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %1932 unwind label %1957

1932:                                             ; preds = %1930
  store ptr %1931, ptr %126, align 8, !tbaa !5
  %1933 = load ptr, ptr %126, align 8, !tbaa !5
  %1934 = icmp ne ptr %1933, null
  br i1 %1934, label %1935, label %1970

1935:                                             ; preds = %1932
  call void @llvm.lifetime.start.p0(i64 40, ptr %127) #10
  %1936 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %128, i32 0, i32 0
  %1937 = load ptr, ptr %125, align 8, !tbaa !5
  %1938 = load i32, ptr %1937, align 4, !tbaa !39
  %1939 = load ptr, ptr %126, align 8, !tbaa !5
  %1940 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %1939, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %129, ptr align 8 %1940, i64 16, i1 false), !tbaa.struct !56
  %1941 = getelementptr inbounds { i64, i64 }, ptr %129, i32 0, i32 0
  %1942 = load i64, ptr %1941, align 8
  %1943 = getelementptr inbounds { i64, i64 }, ptr %129, i32 0, i32 1
  %1944 = load i64, ptr %1943, align 8
  %1945 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1938, i64 %1942, i64 %1944)
          to label %1946 unwind label %1961

1946:                                             ; preds = %1935
  %1947 = getelementptr inbounds { i64, i64 }, ptr %1936, i32 0, i32 0
  %1948 = extractvalue { i64, i64 } %1945, 0
  store i64 %1948, ptr %1947, align 8
  %1949 = getelementptr inbounds { i64, i64 }, ptr %1936, i32 0, i32 1
  %1950 = extractvalue { i64, i64 } %1945, 1
  store i64 %1950, ptr %1949, align 8
  %1951 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %128, i32 0, i32 1
  %1952 = load ptr, ptr %125, align 8, !tbaa !5
  %1953 = load i32, ptr %1952, align 4, !tbaa !39
  store i32 %1953, ptr %1951, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %127, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %128)
          to label %1954 unwind label %1961

1954:                                             ; preds = %1946
  %1955 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %127)
          to label %1956 unwind label %1965

1956:                                             ; preds = %1954
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %127) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %127) #10
  br label %2112

1957:                                             ; preds = %1930
  %1958 = landingpad { ptr, i32 }
          cleanup
  %1959 = extractvalue { ptr, i32 } %1958, 0
  store ptr %1959, ptr %11, align 8
  %1960 = extractvalue { ptr, i32 } %1958, 1
  store i32 %1960, ptr %12, align 4
  br label %2113

1961:                                             ; preds = %1946, %1935
  %1962 = landingpad { ptr, i32 }
          cleanup
  %1963 = extractvalue { ptr, i32 } %1962, 0
  store ptr %1963, ptr %11, align 8
  %1964 = extractvalue { ptr, i32 } %1962, 1
  store i32 %1964, ptr %12, align 4
  br label %1969

1965:                                             ; preds = %1954
  %1966 = landingpad { ptr, i32 }
          cleanup
  %1967 = extractvalue { ptr, i32 } %1966, 0
  store ptr %1967, ptr %11, align 8
  %1968 = extractvalue { ptr, i32 } %1966, 1
  store i32 %1968, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %127) #10
  br label %1969

1969:                                             ; preds = %1965, %1961
  call void @llvm.lifetime.end.p0(i64 40, ptr %127) #10
  br label %2113

1970:                                             ; preds = %1932
  call void @llvm.lifetime.start.p0(i64 8, ptr %130) #10
  %1971 = invoke noundef ptr @_ZN3MIR8Constant7opt_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %1972 unwind label %2003

1972:                                             ; preds = %1970
  store ptr %1971, ptr %130, align 8, !tbaa !5
  %1973 = load ptr, ptr %130, align 8, !tbaa !5
  %1974 = icmp ne ptr %1973, null
  br i1 %1974, label %1975, label %2016

1975:                                             ; preds = %1972
  call void @llvm.lifetime.start.p0(i64 40, ptr %131) #10
  %1976 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %132, i32 0, i32 0
  %1977 = load ptr, ptr %125, align 8, !tbaa !5
  %1978 = load i32, ptr %1977, align 4, !tbaa !39
  %1979 = load ptr, ptr %130, align 8, !tbaa !5
  %1980 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %1979, i32 0, i32 0
  %1981 = invoke { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16) %1980)
          to label %1982 unwind label %2007

1982:                                             ; preds = %1975
  %1983 = getelementptr inbounds { i64, i64 }, ptr %133, i32 0, i32 0
  %1984 = extractvalue { i64, i64 } %1981, 0
  store i64 %1984, ptr %1983, align 8
  %1985 = getelementptr inbounds { i64, i64 }, ptr %133, i32 0, i32 1
  %1986 = extractvalue { i64, i64 } %1981, 1
  store i64 %1986, ptr %1985, align 8
  %1987 = getelementptr inbounds { i64, i64 }, ptr %133, i32 0, i32 0
  %1988 = load i64, ptr %1987, align 8
  %1989 = getelementptr inbounds { i64, i64 }, ptr %133, i32 0, i32 1
  %1990 = load i64, ptr %1989, align 8
  %1991 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1978, i64 %1988, i64 %1990)
          to label %1992 unwind label %2007

1992:                                             ; preds = %1982
  %1993 = getelementptr inbounds { i64, i64 }, ptr %1976, i32 0, i32 0
  %1994 = extractvalue { i64, i64 } %1991, 0
  store i64 %1994, ptr %1993, align 8
  %1995 = getelementptr inbounds { i64, i64 }, ptr %1976, i32 0, i32 1
  %1996 = extractvalue { i64, i64 } %1991, 1
  store i64 %1996, ptr %1995, align 8
  %1997 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %132, i32 0, i32 1
  %1998 = load ptr, ptr %125, align 8, !tbaa !5
  %1999 = load i32, ptr %1998, align 4, !tbaa !39
  store i32 %1999, ptr %1997, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %131, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %132)
          to label %2000 unwind label %2007

2000:                                             ; preds = %1992
  %2001 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %131)
          to label %2002 unwind label %2011

2002:                                             ; preds = %2000
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %131) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %131) #10
  br label %2110

2003:                                             ; preds = %1970
  %2004 = landingpad { ptr, i32 }
          cleanup
  %2005 = extractvalue { ptr, i32 } %2004, 0
  store ptr %2005, ptr %11, align 8
  %2006 = extractvalue { ptr, i32 } %2004, 1
  store i32 %2006, ptr %12, align 4
  br label %2111

2007:                                             ; preds = %1992, %1982, %1975
  %2008 = landingpad { ptr, i32 }
          cleanup
  %2009 = extractvalue { ptr, i32 } %2008, 0
  store ptr %2009, ptr %11, align 8
  %2010 = extractvalue { ptr, i32 } %2008, 1
  store i32 %2010, ptr %12, align 4
  br label %2015

2011:                                             ; preds = %2000
  %2012 = landingpad { ptr, i32 }
          cleanup
  %2013 = extractvalue { ptr, i32 } %2012, 0
  store ptr %2013, ptr %11, align 8
  %2014 = extractvalue { ptr, i32 } %2012, 1
  store i32 %2014, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %131) #10
  br label %2015

2015:                                             ; preds = %2011, %2007
  call void @llvm.lifetime.end.p0(i64 40, ptr %131) #10
  br label %2111

2016:                                             ; preds = %1972
  call void @llvm.lifetime.start.p0(i64 8, ptr %134) #10
  %2017 = invoke noundef ptr @_ZN3MIR8Constant8opt_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %2018 unwind label %2037

2018:                                             ; preds = %2016
  store ptr %2017, ptr %134, align 8, !tbaa !5
  %2019 = load ptr, ptr %134, align 8, !tbaa !5
  %2020 = icmp ne ptr %2019, null
  br i1 %2020, label %2021, label %2050

2021:                                             ; preds = %2018
  call void @llvm.lifetime.start.p0(i64 40, ptr %135) #10
  %2022 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %136, i32 0, i32 0
  %2023 = load ptr, ptr %134, align 8, !tbaa !5
  %2024 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %2023, i32 0, i32 0
  %2025 = load i8, ptr %2024, align 1, !tbaa !42, !range !40, !noundef !41
  %2026 = trunc i8 %2025 to i1
  %2027 = zext i1 %2026 to i64
  %2028 = select i1 %2026, i32 1, i32 0
  %2029 = zext i32 %2028 to i64
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %2022, i64 noundef %2029, i64 noundef 0)
          to label %2030 unwind label %2041

2030:                                             ; preds = %2021
  %2031 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %136, i32 0, i32 1
  %2032 = load ptr, ptr %125, align 8, !tbaa !5
  %2033 = load i32, ptr %2032, align 4, !tbaa !39
  store i32 %2033, ptr %2031, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %135, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %136)
          to label %2034 unwind label %2041

2034:                                             ; preds = %2030
  %2035 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %135)
          to label %2036 unwind label %2045

2036:                                             ; preds = %2034
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %135) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %135) #10
  br label %2108

2037:                                             ; preds = %2016
  %2038 = landingpad { ptr, i32 }
          cleanup
  %2039 = extractvalue { ptr, i32 } %2038, 0
  store ptr %2039, ptr %11, align 8
  %2040 = extractvalue { ptr, i32 } %2038, 1
  store i32 %2040, ptr %12, align 4
  br label %2109

2041:                                             ; preds = %2030, %2021
  %2042 = landingpad { ptr, i32 }
          cleanup
  %2043 = extractvalue { ptr, i32 } %2042, 0
  store ptr %2043, ptr %11, align 8
  %2044 = extractvalue { ptr, i32 } %2042, 1
  store i32 %2044, ptr %12, align 4
  br label %2049

2045:                                             ; preds = %2034
  %2046 = landingpad { ptr, i32 }
          cleanup
  %2047 = extractvalue { ptr, i32 } %2046, 0
  store ptr %2047, ptr %11, align 8
  %2048 = extractvalue { ptr, i32 } %2046, 1
  store i32 %2048, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %135) #10
  br label %2049

2049:                                             ; preds = %2045, %2041
  call void @llvm.lifetime.end.p0(i64 40, ptr %135) #10
  br label %2109

2050:                                             ; preds = %2018
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #10
  %2051 = invoke noundef ptr @_ZN3MIR8Constant9opt_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %2052 unwind label %2090

2052:                                             ; preds = %2050
  store ptr %2051, ptr %137, align 8, !tbaa !5
  %2053 = load ptr, ptr %137, align 8, !tbaa !5
  %2054 = icmp ne ptr %2053, null
  br i1 %2054, label %2055, label %2105

2055:                                             ; preds = %2052
  %2056 = load ptr, ptr %137, align 8, !tbaa !5
  %2057 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2056, i32 0, i32 0
  %2058 = load double, ptr %2057, align 8, !tbaa !57
  %2059 = fcmp ole double 0.000000e+00, %2058
  br i1 %2059, label %2060, label %2103

2060:                                             ; preds = %2055
  %2061 = load ptr, ptr %137, align 8, !tbaa !5
  %2062 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2061, i32 0, i32 0
  %2063 = load double, ptr %2062, align 8, !tbaa !57
  %2064 = fcmp ole double %2063, 0x43F0000000000000
  br i1 %2064, label %2065, label %2103

2065:                                             ; preds = %2060
  call void @llvm.lifetime.start.p0(i64 40, ptr %138) #10
  %2066 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %139, i32 0, i32 0
  %2067 = load ptr, ptr %125, align 8, !tbaa !5
  %2068 = load i32, ptr %2067, align 4, !tbaa !39
  %2069 = load ptr, ptr %137, align 8, !tbaa !5
  %2070 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2069, i32 0, i32 0
  %2071 = load double, ptr %2070, align 8, !tbaa !57
  %2072 = fptoui double %2071 to i64
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %140, i64 noundef %2072, i64 noundef 0)
          to label %2073 unwind label %2094

2073:                                             ; preds = %2065
  %2074 = getelementptr inbounds { i64, i64 }, ptr %140, i32 0, i32 0
  %2075 = load i64, ptr %2074, align 8
  %2076 = getelementptr inbounds { i64, i64 }, ptr %140, i32 0, i32 1
  %2077 = load i64, ptr %2076, align 8
  %2078 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %2068, i64 %2075, i64 %2077)
          to label %2079 unwind label %2094

2079:                                             ; preds = %2073
  %2080 = getelementptr inbounds { i64, i64 }, ptr %2066, i32 0, i32 0
  %2081 = extractvalue { i64, i64 } %2078, 0
  store i64 %2081, ptr %2080, align 8
  %2082 = getelementptr inbounds { i64, i64 }, ptr %2066, i32 0, i32 1
  %2083 = extractvalue { i64, i64 } %2078, 1
  store i64 %2083, ptr %2082, align 8
  %2084 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %139, i32 0, i32 1
  %2085 = load ptr, ptr %125, align 8, !tbaa !5
  %2086 = load i32, ptr %2085, align 4, !tbaa !39
  store i32 %2086, ptr %2084, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %138, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %139)
          to label %2087 unwind label %2094

2087:                                             ; preds = %2079
  %2088 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %138)
          to label %2089 unwind label %2098

2089:                                             ; preds = %2087
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %138) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %138) #10
  br label %2104

2090:                                             ; preds = %2050
  %2091 = landingpad { ptr, i32 }
          cleanup
  %2092 = extractvalue { ptr, i32 } %2091, 0
  store ptr %2092, ptr %11, align 8
  %2093 = extractvalue { ptr, i32 } %2091, 1
  store i32 %2093, ptr %12, align 4
  br label %2107

2094:                                             ; preds = %2079, %2073, %2065
  %2095 = landingpad { ptr, i32 }
          cleanup
  %2096 = extractvalue { ptr, i32 } %2095, 0
  store ptr %2096, ptr %11, align 8
  %2097 = extractvalue { ptr, i32 } %2095, 1
  store i32 %2097, ptr %12, align 4
  br label %2102

2098:                                             ; preds = %2087
  %2099 = landingpad { ptr, i32 }
          cleanup
  %2100 = extractvalue { ptr, i32 } %2099, 0
  store ptr %2100, ptr %11, align 8
  %2101 = extractvalue { ptr, i32 } %2099, 1
  store i32 %2101, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %138) #10
  br label %2102

2102:                                             ; preds = %2098, %2094
  call void @llvm.lifetime.end.p0(i64 40, ptr %138) #10
  br label %2107

2103:                                             ; preds = %2060, %2055
  br label %2104

2104:                                             ; preds = %2103, %2089
  br label %2106

2105:                                             ; preds = %2052
  br label %2106

2106:                                             ; preds = %2105, %2104
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #10
  br label %2108

2107:                                             ; preds = %2102, %2090
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #10
  br label %2109

2108:                                             ; preds = %2106, %2036
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #10
  br label %2110

2109:                                             ; preds = %2107, %2049, %2037
  call void @llvm.lifetime.end.p0(i64 8, ptr %134) #10
  br label %2111

2110:                                             ; preds = %2108, %2002
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #10
  br label %2112

2111:                                             ; preds = %2109, %2015, %2003
  call void @llvm.lifetime.end.p0(i64 8, ptr %130) #10
  br label %2113

2112:                                             ; preds = %2110, %1956
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #10
  br label %2260

2113:                                             ; preds = %2111, %1969, %1957
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #10
  br label %2262

2114:                                             ; preds = %1911, %1911, %1911, %1911, %1911, %1911
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #10
  %2115 = invoke noundef ptr @_ZN3MIR8Constant8opt_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %2116 unwind label %2147

2116:                                             ; preds = %2114
  store ptr %2115, ptr %141, align 8, !tbaa !5
  %2117 = load ptr, ptr %141, align 8, !tbaa !5
  %2118 = icmp ne ptr %2117, null
  br i1 %2118, label %2119, label %2160

2119:                                             ; preds = %2116
  call void @llvm.lifetime.start.p0(i64 40, ptr %142) #10
  %2120 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %143, i32 0, i32 0
  %2121 = load ptr, ptr %125, align 8, !tbaa !5
  %2122 = load i32, ptr %2121, align 4, !tbaa !39
  %2123 = load ptr, ptr %141, align 8, !tbaa !5
  %2124 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %2123, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %145, ptr align 8 %2124, i64 16, i1 false), !tbaa.struct !56
  %2125 = getelementptr inbounds { i64, i64 }, ptr %145, i32 0, i32 0
  %2126 = load i64, ptr %2125, align 8
  %2127 = getelementptr inbounds { i64, i64 }, ptr %145, i32 0, i32 1
  %2128 = load i64, ptr %2127, align 8
  invoke void @_ZN4S128C2E4U128(ptr noundef nonnull align 8 dereferenceable(16) %144, i64 %2126, i64 %2128)
          to label %2129 unwind label %2151

2129:                                             ; preds = %2119
  %2130 = getelementptr inbounds { i64, i64 }, ptr %144, i32 0, i32 0
  %2131 = load i64, ptr %2130, align 8
  %2132 = getelementptr inbounds { i64, i64 }, ptr %144, i32 0, i32 1
  %2133 = load i64, ptr %2132, align 8
  %2134 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2122, i64 %2131, i64 %2133)
          to label %2135 unwind label %2151

2135:                                             ; preds = %2129
  %2136 = getelementptr inbounds %class.S128, ptr %2120, i32 0, i32 0
  %2137 = getelementptr inbounds { i64, i64 }, ptr %2136, i32 0, i32 0
  %2138 = extractvalue { i64, i64 } %2134, 0
  store i64 %2138, ptr %2137, align 8
  %2139 = getelementptr inbounds { i64, i64 }, ptr %2136, i32 0, i32 1
  %2140 = extractvalue { i64, i64 } %2134, 1
  store i64 %2140, ptr %2139, align 8
  %2141 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %143, i32 0, i32 1
  %2142 = load ptr, ptr %125, align 8, !tbaa !5
  %2143 = load i32, ptr %2142, align 4, !tbaa !39
  store i32 %2143, ptr %2141, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %142, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %143)
          to label %2144 unwind label %2151

2144:                                             ; preds = %2135
  %2145 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %142)
          to label %2146 unwind label %2155

2146:                                             ; preds = %2144
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %142) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %142) #10
  br label %2240

2147:                                             ; preds = %2114
  %2148 = landingpad { ptr, i32 }
          cleanup
  %2149 = extractvalue { ptr, i32 } %2148, 0
  store ptr %2149, ptr %11, align 8
  %2150 = extractvalue { ptr, i32 } %2148, 1
  store i32 %2150, ptr %12, align 4
  br label %2241

2151:                                             ; preds = %2135, %2129, %2119
  %2152 = landingpad { ptr, i32 }
          cleanup
  %2153 = extractvalue { ptr, i32 } %2152, 0
  store ptr %2153, ptr %11, align 8
  %2154 = extractvalue { ptr, i32 } %2152, 1
  store i32 %2154, ptr %12, align 4
  br label %2159

2155:                                             ; preds = %2144
  %2156 = landingpad { ptr, i32 }
          cleanup
  %2157 = extractvalue { ptr, i32 } %2156, 0
  store ptr %2157, ptr %11, align 8
  %2158 = extractvalue { ptr, i32 } %2156, 1
  store i32 %2158, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %142) #10
  br label %2159

2159:                                             ; preds = %2155, %2151
  call void @llvm.lifetime.end.p0(i64 40, ptr %142) #10
  br label %2241

2160:                                             ; preds = %2116
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #10
  %2161 = invoke noundef ptr @_ZN3MIR8Constant7opt_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %2162 unwind label %2188

2162:                                             ; preds = %2160
  store ptr %2161, ptr %146, align 8, !tbaa !5
  %2163 = load ptr, ptr %146, align 8, !tbaa !5
  %2164 = icmp ne ptr %2163, null
  br i1 %2164, label %2165, label %2201

2165:                                             ; preds = %2162
  call void @llvm.lifetime.start.p0(i64 40, ptr %147) #10
  %2166 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %148, i32 0, i32 0
  %2167 = load ptr, ptr %125, align 8, !tbaa !5
  %2168 = load i32, ptr %2167, align 4, !tbaa !39
  %2169 = load ptr, ptr %146, align 8, !tbaa !5
  %2170 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2169, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %149, ptr align 8 %2170, i64 16, i1 false), !tbaa.struct !56
  %2171 = getelementptr inbounds { i64, i64 }, ptr %149, i32 0, i32 0
  %2172 = load i64, ptr %2171, align 8
  %2173 = getelementptr inbounds { i64, i64 }, ptr %149, i32 0, i32 1
  %2174 = load i64, ptr %2173, align 8
  %2175 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2168, i64 %2172, i64 %2174)
          to label %2176 unwind label %2192

2176:                                             ; preds = %2165
  %2177 = getelementptr inbounds %class.S128, ptr %2166, i32 0, i32 0
  %2178 = getelementptr inbounds { i64, i64 }, ptr %2177, i32 0, i32 0
  %2179 = extractvalue { i64, i64 } %2175, 0
  store i64 %2179, ptr %2178, align 8
  %2180 = getelementptr inbounds { i64, i64 }, ptr %2177, i32 0, i32 1
  %2181 = extractvalue { i64, i64 } %2175, 1
  store i64 %2181, ptr %2180, align 8
  %2182 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %148, i32 0, i32 1
  %2183 = load ptr, ptr %125, align 8, !tbaa !5
  %2184 = load i32, ptr %2183, align 4, !tbaa !39
  store i32 %2184, ptr %2182, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %147, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %148)
          to label %2185 unwind label %2192

2185:                                             ; preds = %2176
  %2186 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %147)
          to label %2187 unwind label %2196

2187:                                             ; preds = %2185
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %147) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %147) #10
  br label %2238

2188:                                             ; preds = %2160
  %2189 = landingpad { ptr, i32 }
          cleanup
  %2190 = extractvalue { ptr, i32 } %2189, 0
  store ptr %2190, ptr %11, align 8
  %2191 = extractvalue { ptr, i32 } %2189, 1
  store i32 %2191, ptr %12, align 4
  br label %2239

2192:                                             ; preds = %2176, %2165
  %2193 = landingpad { ptr, i32 }
          cleanup
  %2194 = extractvalue { ptr, i32 } %2193, 0
  store ptr %2194, ptr %11, align 8
  %2195 = extractvalue { ptr, i32 } %2193, 1
  store i32 %2195, ptr %12, align 4
  br label %2200

2196:                                             ; preds = %2185
  %2197 = landingpad { ptr, i32 }
          cleanup
  %2198 = extractvalue { ptr, i32 } %2197, 0
  store ptr %2198, ptr %11, align 8
  %2199 = extractvalue { ptr, i32 } %2197, 1
  store i32 %2199, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %147) #10
  br label %2200

2200:                                             ; preds = %2196, %2192
  call void @llvm.lifetime.end.p0(i64 40, ptr %147) #10
  br label %2239

2201:                                             ; preds = %2162
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #10
  %2202 = invoke noundef ptr @_ZN3MIR8Constant8opt_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %2203 unwind label %2222

2203:                                             ; preds = %2201
  store ptr %2202, ptr %150, align 8, !tbaa !5
  %2204 = load ptr, ptr %150, align 8, !tbaa !5
  %2205 = icmp ne ptr %2204, null
  br i1 %2205, label %2206, label %2235

2206:                                             ; preds = %2203
  call void @llvm.lifetime.start.p0(i64 40, ptr %151) #10
  %2207 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %152, i32 0, i32 0
  %2208 = load ptr, ptr %150, align 8, !tbaa !5
  %2209 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %2208, i32 0, i32 0
  %2210 = load i8, ptr %2209, align 1, !tbaa !42, !range !40, !noundef !41
  %2211 = trunc i8 %2210 to i1
  %2212 = zext i1 %2211 to i64
  %2213 = select i1 %2211, i32 1, i32 0
  %2214 = sext i32 %2213 to i64
  invoke void @_ZN4S128C2El(ptr noundef nonnull align 8 dereferenceable(16) %2207, i64 noundef %2214)
          to label %2215 unwind label %2226

2215:                                             ; preds = %2206
  %2216 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %152, i32 0, i32 1
  %2217 = load ptr, ptr %125, align 8, !tbaa !5
  %2218 = load i32, ptr %2217, align 4, !tbaa !39
  store i32 %2218, ptr %2216, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %151, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %152)
          to label %2219 unwind label %2226

2219:                                             ; preds = %2215
  %2220 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %151)
          to label %2221 unwind label %2230

2221:                                             ; preds = %2219
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %151) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %151) #10
  br label %2236

2222:                                             ; preds = %2201
  %2223 = landingpad { ptr, i32 }
          cleanup
  %2224 = extractvalue { ptr, i32 } %2223, 0
  store ptr %2224, ptr %11, align 8
  %2225 = extractvalue { ptr, i32 } %2223, 1
  store i32 %2225, ptr %12, align 4
  br label %2237

2226:                                             ; preds = %2215, %2206
  %2227 = landingpad { ptr, i32 }
          cleanup
  %2228 = extractvalue { ptr, i32 } %2227, 0
  store ptr %2228, ptr %11, align 8
  %2229 = extractvalue { ptr, i32 } %2227, 1
  store i32 %2229, ptr %12, align 4
  br label %2234

2230:                                             ; preds = %2219
  %2231 = landingpad { ptr, i32 }
          cleanup
  %2232 = extractvalue { ptr, i32 } %2231, 0
  store ptr %2232, ptr %11, align 8
  %2233 = extractvalue { ptr, i32 } %2231, 1
  store i32 %2233, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %151) #10
  br label %2234

2234:                                             ; preds = %2230, %2226
  call void @llvm.lifetime.end.p0(i64 40, ptr %151) #10
  br label %2237

2235:                                             ; preds = %2203
  br label %2236

2236:                                             ; preds = %2235, %2221
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #10
  br label %2238

2237:                                             ; preds = %2234, %2222
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #10
  br label %2239

2238:                                             ; preds = %2236, %2187
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #10
  br label %2240

2239:                                             ; preds = %2237, %2200, %2188
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #10
  br label %2241

2240:                                             ; preds = %2238, %2146
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #10
  br label %2260

2241:                                             ; preds = %2239, %2159, %2147
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #10
  br label %2262

2242:                                             ; preds = %1911, %1911
  br label %2260

2243:                                             ; preds = %1911
  br label %2244

2244:                                             ; preds = %2243
  call void @llvm.lifetime.start.p0(i64 8, ptr %153) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %153, align 8, !tbaa !5
  %2245 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %155) #10
  %2246 = getelementptr inbounds %class.anon.460, ptr %155, i32 0, i32 0
  store ptr %153, ptr %2246, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %154, ptr noundef nonnull align 8 dereferenceable(8) %155) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2245, ptr noundef %154)
          to label %2247 unwind label %2249

2247:                                             ; preds = %2244
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #10
  %2248 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2248, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %2248, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %2253

2249:                                             ; preds = %2244
  %2250 = landingpad { ptr, i32 }
          cleanup
  %2251 = extractvalue { ptr, i32 } %2250, 0
  store ptr %2251, ptr %11, align 8
  %2252 = extractvalue { ptr, i32 } %2250, 1
  store i32 %2252, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %155) #10
  br label %2257

2253:                                             ; preds = %2247
  %2254 = landingpad { ptr, i32 }
          cleanup
  %2255 = extractvalue { ptr, i32 } %2254, 0
  store ptr %2255, ptr %11, align 8
  %2256 = extractvalue { ptr, i32 } %2254, 1
  store i32 %2256, ptr %12, align 4
  br label %2257

2257:                                             ; preds = %2253, %2249
  call void @llvm.lifetime.end.p0(i64 8, ptr %153) #10
  br label %2262

2258:                                             ; No predecessors!
  br label %2259

2259:                                             ; preds = %2258
  br label %2260

2260:                                             ; preds = %2259, %2242, %2240, %2112, %1911, %1911, %1911
  br label %2261

2261:                                             ; preds = %2260, %1908
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #10
  br label %2430

2262:                                             ; preds = %2257, %2241, %2113, %1926
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #10
  br label %2487

2263:                                             ; preds = %1901
  %2264 = load ptr, ptr %122, align 8, !tbaa !5
  %2265 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %2264, i32 0, i32 0
  %2266 = invoke noundef i64 @_ZNKSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5countERS5_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(32) %2265)
          to label %2267 unwind label %1922

2267:                                             ; preds = %2263
  %2268 = icmp ne i64 %2266, 0
  br i1 %2268, label %2269, label %2428

2269:                                             ; preds = %2267
  call void @llvm.lifetime.start.p0(i64 4, ptr %156) #10
  %2270 = load ptr, ptr %122, align 8, !tbaa !5
  %2271 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %2270, i32 0, i32 0
  %2272 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE2atERS5_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(32) %2271)
          to label %2273 unwind label %2287

2273:                                             ; preds = %2269
  %2274 = load i32, ptr %2272, align 4, !tbaa !11
  store i32 %2274, ptr %156, align 4, !tbaa !11
  br label %2275

2275:                                             ; preds = %2273
  %2276 = load ptr, ptr %122, align 8, !tbaa !5
  %2277 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %2276, i32 0, i32 1
  %2278 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %2277)
          to label %2279 unwind label %2287

2279:                                             ; preds = %2275
  %2280 = invoke noundef zeroext i1 @_ZNK3HIR8TypeData12is_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %2278)
          to label %2281 unwind label %2287

2281:                                             ; preds = %2279
  br i1 %2280, label %2295, label %2282

2282:                                             ; preds = %2281
  %2283 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %158) #10
  %2284 = getelementptr inbounds %class.anon.461, ptr %158, i32 0, i32 0
  %2285 = load ptr, ptr %122, align 8, !tbaa !5
  store ptr %2285, ptr %2284, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef nonnull align 8 dereferenceable(8) %158) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2283, ptr noundef %157)
          to label %2286 unwind label %2291

2286:                                             ; preds = %2282
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #10
  br label %2295

2287:                                             ; preds = %2279, %2275, %2269
  %2288 = landingpad { ptr, i32 }
          cleanup
  %2289 = extractvalue { ptr, i32 } %2288, 0
  store ptr %2289, ptr %11, align 8
  %2290 = extractvalue { ptr, i32 } %2288, 1
  store i32 %2290, ptr %12, align 4
  br label %2427

2291:                                             ; preds = %2282
  %2292 = landingpad { ptr, i32 }
          cleanup
  %2293 = extractvalue { ptr, i32 } %2292, 0
  store ptr %2293, ptr %11, align 8
  %2294 = extractvalue { ptr, i32 } %2292, 1
  store i32 %2294, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %158) #10
  br label %2427

2295:                                             ; preds = %2286, %2281
  br label %2296

2296:                                             ; preds = %2295
  br label %2297

2297:                                             ; preds = %2296
  call void @llvm.lifetime.start.p0(i64 8, ptr %159) #10
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %159)
          to label %2298 unwind label %2320

2298:                                             ; preds = %2297
  call void @llvm.lifetime.start.p0(i64 8, ptr %160) #10
  %2299 = load ptr, ptr %3, align 8, !tbaa !5
  %2300 = load ptr, ptr %122, align 8, !tbaa !5
  %2301 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %2300, i32 0, i32 0
  %2302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR11TypeResolve15get_lvalue_typeERN3HIR7TypeRefERKNS_6LValueEj(ptr noundef nonnull align 8 dereferenceable(120) %2299, ptr noundef nonnull align 8 dereferenceable(8) %159, ptr noundef nonnull align 8 dereferenceable(32) %2301, i32 noundef 0)
          to label %2303 unwind label %2324

2303:                                             ; preds = %2298
  store ptr %2302, ptr %160, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %161) #10
  %2304 = load ptr, ptr %160, align 8, !tbaa !5
  %2305 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %2304)
          to label %2306 unwind label %2328

2306:                                             ; preds = %2303
  %2307 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %2305)
          to label %2308 unwind label %2328

2308:                                             ; preds = %2306
  %2309 = getelementptr inbounds %"struct.HIR::TypeData_Path", ptr %2307, i32 0, i32 1
  %2310 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %2309)
          to label %2311 unwind label %2328

2311:                                             ; preds = %2308
  %2312 = load ptr, ptr %2310, align 8, !tbaa !5
  store ptr %2312, ptr %161, align 8, !tbaa !5
  br label %2313

2313:                                             ; preds = %2311
  %2314 = load ptr, ptr %161, align 8, !tbaa !5
  %2315 = invoke noundef zeroext i1 @_ZNK3HIR4Enum8is_valueEv(ptr noundef nonnull align 8 dereferenceable(200) %2314)
          to label %2316 unwind label %2328

2316:                                             ; preds = %2313
  br i1 %2315, label %2336, label %2317

2317:                                             ; preds = %2316
  %2318 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %163) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %162, ptr noundef nonnull align 1 dereferenceable(1) %163) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2318, ptr noundef %162)
          to label %2319 unwind label %2332

2319:                                             ; preds = %2317
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %163) #10
  br label %2336

2320:                                             ; preds = %2297
  %2321 = landingpad { ptr, i32 }
          cleanup
  %2322 = extractvalue { ptr, i32 } %2321, 0
  store ptr %2322, ptr %11, align 8
  %2323 = extractvalue { ptr, i32 } %2321, 1
  store i32 %2323, ptr %12, align 4
  br label %2426

2324:                                             ; preds = %2298
  %2325 = landingpad { ptr, i32 }
          cleanup
  %2326 = extractvalue { ptr, i32 } %2325, 0
  store ptr %2326, ptr %11, align 8
  %2327 = extractvalue { ptr, i32 } %2325, 1
  store i32 %2327, ptr %12, align 4
  br label %2425

2328:                                             ; preds = %2313, %2308, %2306, %2303
  %2329 = landingpad { ptr, i32 }
          cleanup
  %2330 = extractvalue { ptr, i32 } %2329, 0
  store ptr %2330, ptr %11, align 8
  %2331 = extractvalue { ptr, i32 } %2329, 1
  store i32 %2331, ptr %12, align 4
  br label %2424

2332:                                             ; preds = %2317
  %2333 = landingpad { ptr, i32 }
          cleanup
  %2334 = extractvalue { ptr, i32 } %2333, 0
  store ptr %2334, ptr %11, align 8
  %2335 = extractvalue { ptr, i32 } %2333, 1
  store i32 %2335, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %162) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %163) #10
  br label %2424

2336:                                             ; preds = %2319, %2316
  br label %2337

2337:                                             ; preds = %2336
  br label %2338

2338:                                             ; preds = %2337
  call void @llvm.lifetime.start.p0(i64 4, ptr %164) #10
  %2339 = load ptr, ptr %161, align 8, !tbaa !5
  %2340 = load i32, ptr %156, align 4, !tbaa !11
  %2341 = zext i32 %2340 to i64
  %2342 = invoke noundef i32 @_ZNK3HIR4Enum9get_valueEm(ptr noundef nonnull align 8 dereferenceable(200) %2339, i64 noundef %2341)
          to label %2343 unwind label %2352

2343:                                             ; preds = %2338
  store i32 %2342, ptr %164, align 4, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 4, ptr %165) #10
  %2344 = load ptr, ptr %122, align 8, !tbaa !5
  %2345 = getelementptr inbounds %"struct.MIR::RValue::Data_Cast", ptr %2344, i32 0, i32 1
  %2346 = invoke noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %2345)
          to label %2347 unwind label %2356

2347:                                             ; preds = %2343
  %2348 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %2346)
          to label %2349 unwind label %2356

2349:                                             ; preds = %2347
  %2350 = load i32, ptr %2348, align 4, !tbaa !39
  store i32 %2350, ptr %165, align 4, !tbaa !39
  %2351 = load i32, ptr %165, align 4, !tbaa !39
  switch i32 %2351, label %2421 [
    i32 2, label %2360
    i32 4, label %2360
    i32 6, label %2360
    i32 8, label %2360
    i32 10, label %2360
    i32 0, label %2360
    i32 3, label %2379
    i32 5, label %2379
    i32 7, label %2379
    i32 9, label %2379
    i32 11, label %2379
    i32 1, label %2379
    i32 12, label %2403
    i32 13, label %2403
    i32 15, label %2421
    i32 14, label %2421
    i32 16, label %2404
  ]

2352:                                             ; preds = %2338
  %2353 = landingpad { ptr, i32 }
          cleanup
  %2354 = extractvalue { ptr, i32 } %2353, 0
  store ptr %2354, ptr %11, align 8
  %2355 = extractvalue { ptr, i32 } %2353, 1
  store i32 %2355, ptr %12, align 4
  br label %2423

2356:                                             ; preds = %2347, %2343
  %2357 = landingpad { ptr, i32 }
          cleanup
  %2358 = extractvalue { ptr, i32 } %2357, 0
  store ptr %2358, ptr %11, align 8
  %2359 = extractvalue { ptr, i32 } %2357, 1
  store i32 %2359, ptr %12, align 4
  br label %2422

2360:                                             ; preds = %2349, %2349, %2349, %2349, %2349, %2349
  call void @llvm.lifetime.start.p0(i64 40, ptr %166) #10
  %2361 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %167, i32 0, i32 0
  %2362 = load i32, ptr %164, align 4, !tbaa !11
  %2363 = zext i32 %2362 to i64
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %2361, i64 noundef %2363, i64 noundef 0)
          to label %2364 unwind label %2370

2364:                                             ; preds = %2360
  %2365 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %167, i32 0, i32 1
  %2366 = load i32, ptr %165, align 4, !tbaa !39
  store i32 %2366, ptr %2365, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %166, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %167)
          to label %2367 unwind label %2370

2367:                                             ; preds = %2364
  %2368 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %166)
          to label %2369 unwind label %2374

2369:                                             ; preds = %2367
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %166) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %166) #10
  br label %2421

2370:                                             ; preds = %2364, %2360
  %2371 = landingpad { ptr, i32 }
          cleanup
  %2372 = extractvalue { ptr, i32 } %2371, 0
  store ptr %2372, ptr %11, align 8
  %2373 = extractvalue { ptr, i32 } %2371, 1
  store i32 %2373, ptr %12, align 4
  br label %2378

2374:                                             ; preds = %2367
  %2375 = landingpad { ptr, i32 }
          cleanup
  %2376 = extractvalue { ptr, i32 } %2375, 0
  store ptr %2376, ptr %11, align 8
  %2377 = extractvalue { ptr, i32 } %2375, 1
  store i32 %2377, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %166) #10
  br label %2378

2378:                                             ; preds = %2374, %2370
  call void @llvm.lifetime.end.p0(i64 40, ptr %166) #10
  br label %2422

2379:                                             ; preds = %2349, %2349, %2349, %2349, %2349, %2349
  call void @llvm.lifetime.start.p0(i64 40, ptr %168) #10
  %2380 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %169, i32 0, i32 0
  %2381 = load i32, ptr %164, align 4, !tbaa !11
  %2382 = zext i32 %2381 to i64
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %170, i64 noundef %2382, i64 noundef 0)
          to label %2383 unwind label %2394

2383:                                             ; preds = %2379
  %2384 = getelementptr inbounds { i64, i64 }, ptr %170, i32 0, i32 0
  %2385 = load i64, ptr %2384, align 8
  %2386 = getelementptr inbounds { i64, i64 }, ptr %170, i32 0, i32 1
  %2387 = load i64, ptr %2386, align 8
  invoke void @_ZN4S128C2E4U128(ptr noundef nonnull align 8 dereferenceable(16) %2380, i64 %2385, i64 %2387)
          to label %2388 unwind label %2394

2388:                                             ; preds = %2383
  %2389 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %169, i32 0, i32 1
  %2390 = load i32, ptr %165, align 4, !tbaa !39
  store i32 %2390, ptr %2389, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %168, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %169)
          to label %2391 unwind label %2394

2391:                                             ; preds = %2388
  %2392 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %168)
          to label %2393 unwind label %2398

2393:                                             ; preds = %2391
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %168) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %168) #10
  br label %2421

2394:                                             ; preds = %2388, %2383, %2379
  %2395 = landingpad { ptr, i32 }
          cleanup
  %2396 = extractvalue { ptr, i32 } %2395, 0
  store ptr %2396, ptr %11, align 8
  %2397 = extractvalue { ptr, i32 } %2395, 1
  store i32 %2397, ptr %12, align 4
  br label %2402

2398:                                             ; preds = %2391
  %2399 = landingpad { ptr, i32 }
          cleanup
  %2400 = extractvalue { ptr, i32 } %2399, 0
  store ptr %2400, ptr %11, align 8
  %2401 = extractvalue { ptr, i32 } %2399, 1
  store i32 %2401, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %168) #10
  br label %2402

2402:                                             ; preds = %2398, %2394
  call void @llvm.lifetime.end.p0(i64 40, ptr %168) #10
  br label %2422

2403:                                             ; preds = %2349, %2349
  br label %2421

2404:                                             ; preds = %2349
  br label %2405

2405:                                             ; preds = %2404
  call void @llvm.lifetime.start.p0(i64 8, ptr %171) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %171, align 8, !tbaa !5
  %2406 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %173) #10
  %2407 = getelementptr inbounds %class.anon.480, ptr %173, i32 0, i32 0
  store ptr %171, ptr %2407, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %172, ptr noundef nonnull align 8 dereferenceable(8) %173) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2406, ptr noundef %172)
          to label %2408 unwind label %2410

2408:                                             ; preds = %2405
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #10
  %2409 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2409, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %2409, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %2414

2410:                                             ; preds = %2405
  %2411 = landingpad { ptr, i32 }
          cleanup
  %2412 = extractvalue { ptr, i32 } %2411, 0
  store ptr %2412, ptr %11, align 8
  %2413 = extractvalue { ptr, i32 } %2411, 1
  store i32 %2413, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %172) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %173) #10
  br label %2418

2414:                                             ; preds = %2408
  %2415 = landingpad { ptr, i32 }
          cleanup
  %2416 = extractvalue { ptr, i32 } %2415, 0
  store ptr %2416, ptr %11, align 8
  %2417 = extractvalue { ptr, i32 } %2415, 1
  store i32 %2417, ptr %12, align 4
  br label %2418

2418:                                             ; preds = %2414, %2410
  call void @llvm.lifetime.end.p0(i64 8, ptr %171) #10
  br label %2422

2419:                                             ; No predecessors!
  br label %2420

2420:                                             ; preds = %2419
  br label %2421

2421:                                             ; preds = %2420, %2403, %2393, %2369, %2349, %2349, %2349
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %159) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #10
  br label %2429

2422:                                             ; preds = %2418, %2402, %2378, %2356
  call void @llvm.lifetime.end.p0(i64 4, ptr %165) #10
  br label %2423

2423:                                             ; preds = %2422, %2352
  call void @llvm.lifetime.end.p0(i64 4, ptr %164) #10
  br label %2424

2424:                                             ; preds = %2423, %2332, %2328
  call void @llvm.lifetime.end.p0(i64 8, ptr %161) #10
  br label %2425

2425:                                             ; preds = %2424, %2324
  call void @llvm.lifetime.end.p0(i64 8, ptr %160) #10
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %159) #10
  br label %2426

2426:                                             ; preds = %2425, %2320
  call void @llvm.lifetime.end.p0(i64 8, ptr %159) #10
  br label %2427

2427:                                             ; preds = %2426, %2291, %2287
  call void @llvm.lifetime.end.p0(i64 4, ptr %156) #10
  br label %2487

2428:                                             ; preds = %2267
  br label %2429

2429:                                             ; preds = %2428, %2421
  br label %2430

2430:                                             ; preds = %2429, %2261
  call void @llvm.lifetime.start.p0(i64 40, ptr %174) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %174)
          to label %2431 unwind label %2459

2431:                                             ; preds = %2430
  %2432 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %123, ptr noundef nonnull align 8 dereferenceable(40) %174)
          to label %2433 unwind label %2463

2433:                                             ; preds = %2431
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %174) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %174) #10
  br i1 %2432, label %2434, label %2485

2434:                                             ; preds = %2433
  br label %2435

2435:                                             ; preds = %2434
  %2436 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2437 unwind label %1922

2437:                                             ; preds = %2435
  br i1 %2436, label %2438, label %2468

2438:                                             ; preds = %2437
  %2439 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2440 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2439, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2441 unwind label %1922

2441:                                             ; preds = %2438
  %2442 = load ptr, ptr %3, align 8, !tbaa !5
  %2443 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2440, ptr noundef nonnull align 8 dereferenceable(120) %2442)
          to label %2444 unwind label %1922

2444:                                             ; preds = %2441
  %2445 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2443, ptr noundef @.str.38)
          to label %2446 unwind label %1922

2446:                                             ; preds = %2444
  %2447 = load ptr, ptr %104, align 8, !tbaa !5
  %2448 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %2447, i32 0, i32 1
  %2449 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %2445, ptr noundef nonnull align 8 dereferenceable(112) %2448)
          to label %2450 unwind label %1922

2450:                                             ; preds = %2446
  %2451 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2449, ptr noundef @.str.60)
          to label %2452 unwind label %1922

2452:                                             ; preds = %2450
  %2453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %2451, ptr noundef nonnull align 8 dereferenceable(40) %123)
          to label %2454 unwind label %1922

2454:                                             ; preds = %2452
  %2455 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2453, ptr noundef @_ZSt3decRSt8ios_base)
          to label %2456 unwind label %1922

2456:                                             ; preds = %2454
  %2457 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2455, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2458 unwind label %1922

2458:                                             ; preds = %2456
  br label %2468

2459:                                             ; preds = %2430
  %2460 = landingpad { ptr, i32 }
          cleanup
  %2461 = extractvalue { ptr, i32 } %2460, 0
  store ptr %2461, ptr %11, align 8
  %2462 = extractvalue { ptr, i32 } %2460, 1
  store i32 %2462, ptr %12, align 4
  br label %2467

2463:                                             ; preds = %2431
  %2464 = landingpad { ptr, i32 }
          cleanup
  %2465 = extractvalue { ptr, i32 } %2464, 0
  store ptr %2465, ptr %11, align 8
  %2466 = extractvalue { ptr, i32 } %2464, 1
  store i32 %2466, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %174) #10
  br label %2467

2467:                                             ; preds = %2463, %2459
  call void @llvm.lifetime.end.p0(i64 40, ptr %174) #10
  br label %2487

2468:                                             ; preds = %2458, %2437
  br label %2469

2469:                                             ; preds = %2468
  br label %2470

2470:                                             ; preds = %2469
  call void @llvm.lifetime.start.p0(i64 112, ptr %175) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %176, ptr noundef nonnull align 8 dereferenceable(40) %123) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %175, ptr noundef %176)
          to label %2471 unwind label %2476

2471:                                             ; preds = %2470
  %2472 = load ptr, ptr %104, align 8, !tbaa !5
  %2473 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %2472, i32 0, i32 1
  %2474 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %2473, ptr noundef nonnull align 8 dereferenceable(112) %175)
          to label %2475 unwind label %2480

2475:                                             ; preds = %2471
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %175) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %176) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %175) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %2485

2476:                                             ; preds = %2470
  %2477 = landingpad { ptr, i32 }
          cleanup
  %2478 = extractvalue { ptr, i32 } %2477, 0
  store ptr %2478, ptr %11, align 8
  %2479 = extractvalue { ptr, i32 } %2477, 1
  store i32 %2479, ptr %12, align 4
  br label %2484

2480:                                             ; preds = %2471
  %2481 = landingpad { ptr, i32 }
          cleanup
  %2482 = extractvalue { ptr, i32 } %2481, 0
  store ptr %2482, ptr %11, align 8
  %2483 = extractvalue { ptr, i32 } %2481, 1
  store i32 %2483, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %175) #10
  br label %2484

2484:                                             ; preds = %2480, %2476
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %176) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %175) #10
  br label %2487

2485:                                             ; preds = %2475, %2433
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %124) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %124) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %123) #10
  br label %2486

2486:                                             ; preds = %2485
  store i8 0, ptr %121, align 1, !tbaa !9
  br label %1886, !llvm.loop !63

2487:                                             ; preds = %2484, %2467, %2427, %2262, %1922
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %124) #10
  br label %2488

2488:                                             ; preds = %2487, %1918
  call void @llvm.lifetime.end.p0(i64 40, ptr %124) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123) #10
  br label %2489

2489:                                             ; preds = %2488, %1914
  call void @llvm.lifetime.end.p0(i64 40, ptr %123) #10
  br label %2490

2490:                                             ; preds = %2489, %1891
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %121) #10
  br label %7434

2491:                                             ; preds = %1890
  br label %2492

2492:                                             ; preds = %2491
  store i8 0, ptr %121, align 1, !tbaa !9
  br label %1878, !llvm.loop !64

2493:                                             ; preds = %1881
  br label %7432

2494:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %177) #10
  store i8 1, ptr %177, align 1, !tbaa !9
  br label %2495

2495:                                             ; preds = %6424, %2494
  %2496 = load i8, ptr %177, align 1, !tbaa !9, !range !40, !noundef !41
  %2497 = trunc i8 %2496 to i1
  br i1 %2497, label %2499, label %2498

2498:                                             ; preds = %2495
  store i32 73, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %177) #10
  br label %6425

2499:                                             ; preds = %2495
  call void @llvm.lifetime.start.p0(i64 8, ptr %178) #10
  %2500 = load ptr, ptr %106, align 8, !tbaa !5
  %2501 = invoke noundef nonnull align 8 dereferenceable(104) ptr @_ZN3MIR6RValue8as_BinOpEv(ptr noundef nonnull align 8 dereferenceable(112) %2500)
          to label %2502 unwind label %2508

2502:                                             ; preds = %2499
  store ptr %2501, ptr %178, align 8, !tbaa !5
  br label %2503

2503:                                             ; preds = %6421, %2502
  %2504 = load ptr, ptr %178, align 8, !tbaa !5
  %2505 = load i8, ptr %177, align 1, !tbaa !9, !range !40, !noundef !41
  %2506 = trunc i8 %2505 to i1
  br i1 %2506, label %2512, label %2507

2507:                                             ; preds = %2503
  store i32 76, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #10
  br label %6423

2508:                                             ; preds = %2523, %2518, %2515, %2512, %2499
  %2509 = landingpad { ptr, i32 }
          cleanup
  %2510 = extractvalue { ptr, i32 } %2509, 0
  store ptr %2510, ptr %11, align 8
  %2511 = extractvalue { ptr, i32 } %2509, 1
  store i32 %2511, ptr %12, align 4
  br label %6422

2512:                                             ; preds = %2503
  %2513 = load ptr, ptr %178, align 8, !tbaa !5
  %2514 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2513, i32 0, i32 0
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %2514)
          to label %2515 unwind label %2508

2515:                                             ; preds = %2512
  %2516 = load ptr, ptr %178, align 8, !tbaa !5
  %2517 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2516, i32 0, i32 2
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %2517)
          to label %2518 unwind label %2508

2518:                                             ; preds = %2515
  %2519 = load ptr, ptr %178, align 8, !tbaa !5
  %2520 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2519, i32 0, i32 0
  %2521 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %2520)
          to label %2522 unwind label %2508

2522:                                             ; preds = %2518
  br i1 %2521, label %2523, label %5988

2523:                                             ; preds = %2522
  %2524 = load ptr, ptr %178, align 8, !tbaa !5
  %2525 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2524, i32 0, i32 2
  %2526 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %2525)
          to label %2527 unwind label %2508

2527:                                             ; preds = %2523
  br i1 %2526, label %2528, label %5988

2528:                                             ; preds = %2527
  call void @llvm.lifetime.start.p0(i64 8, ptr %179) #10
  %2529 = load ptr, ptr %178, align 8, !tbaa !5
  %2530 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2529, i32 0, i32 0
  %2531 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %2530)
          to label %2532 unwind label %2545

2532:                                             ; preds = %2528
  store ptr %2531, ptr %179, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %180) #10
  %2533 = load ptr, ptr %178, align 8, !tbaa !5
  %2534 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2533, i32 0, i32 2
  %2535 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %2534)
          to label %2536 unwind label %2549

2536:                                             ; preds = %2532
  store ptr %2535, ptr %180, align 8, !tbaa !5
  %2537 = load ptr, ptr %179, align 8, !tbaa !5
  %2538 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %2537)
          to label %2539 unwind label %2549

2539:                                             ; preds = %2536
  br i1 %2538, label %2544, label %2540

2540:                                             ; preds = %2539
  %2541 = load ptr, ptr %180, align 8, !tbaa !5
  %2542 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %2541)
          to label %2543 unwind label %2549

2543:                                             ; preds = %2540
  br i1 %2542, label %2544, label %2553

2544:                                             ; preds = %2543, %2539
  br label %5985

2545:                                             ; preds = %2528
  %2546 = landingpad { ptr, i32 }
          cleanup
  %2547 = extractvalue { ptr, i32 } %2546, 0
  store ptr %2547, ptr %11, align 8
  %2548 = extractvalue { ptr, i32 } %2546, 1
  store i32 %2548, ptr %12, align 4
  br label %5987

2549:                                             ; preds = %2557, %2553, %2540, %2536, %2532
  %2550 = landingpad { ptr, i32 }
          cleanup
  %2551 = extractvalue { ptr, i32 } %2550, 0
  store ptr %2551, ptr %11, align 8
  %2552 = extractvalue { ptr, i32 } %2550, 1
  store i32 %2552, ptr %12, align 4
  br label %5986

2553:                                             ; preds = %2543
  %2554 = load ptr, ptr %179, align 8, !tbaa !5
  %2555 = invoke noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %2554)
          to label %2556 unwind label %2549

2556:                                             ; preds = %2553
  br i1 %2555, label %2561, label %2557

2557:                                             ; preds = %2556
  %2558 = load ptr, ptr %180, align 8, !tbaa !5
  %2559 = invoke noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %2558)
          to label %2560 unwind label %2549

2560:                                             ; preds = %2557
  br i1 %2559, label %2561, label %2562

2561:                                             ; preds = %2560, %2556
  br label %5984

2562:                                             ; preds = %2560
  call void @llvm.lifetime.start.p0(i64 40, ptr %181) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %181)
          to label %2563 unwind label %2567

2563:                                             ; preds = %2562
  %2564 = load ptr, ptr %178, align 8, !tbaa !5
  %2565 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %2564, i32 0, i32 1
  %2566 = load i32, ptr %2565, align 8, !tbaa !65
  switch i32 %2566, label %5925 [
    i32 14, label %2571
    i32 15, label %2601
    i32 18, label %2627
    i32 19, label %2653
    i32 16, label %2679
    i32 17, label %2705
    i32 0, label %2731
    i32 2, label %3064
    i32 4, label %3397
    i32 6, label %3730
    i32 8, label %4115
    i32 10, label %4395
    i32 9, label %4705
    i32 11, label %5015
    i32 13, label %5325
    i32 12, label %5625
  ]

2567:                                             ; preds = %2562
  %2568 = landingpad { ptr, i32 }
          cleanup
  %2569 = extractvalue { ptr, i32 } %2568, 0
  store ptr %2569, ptr %11, align 8
  %2570 = extractvalue { ptr, i32 } %2568, 1
  store i32 %2570, ptr %12, align 4
  br label %5983

2571:                                             ; preds = %2563
  %2572 = load ptr, ptr %179, align 8, !tbaa !5
  %2573 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2572)
          to label %2574 unwind label %2587

2574:                                             ; preds = %2571
  br i1 %2573, label %2600, label %2575

2575:                                             ; preds = %2574
  call void @llvm.lifetime.start.p0(i64 40, ptr %182) #10
  %2576 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %183, i32 0, i32 0
  %2577 = load ptr, ptr %179, align 8, !tbaa !5
  %2578 = load ptr, ptr %180, align 8, !tbaa !5
  %2579 = invoke noundef zeroext i1 @_ZNK3MIR8ConstanteqERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %2577, ptr noundef nonnull align 8 dereferenceable(40) %2578)
          to label %2580 unwind label %2591

2580:                                             ; preds = %2575
  %2581 = zext i1 %2579 to i8
  store i8 %2581, ptr %2576, align 1, !tbaa !42
  %2582 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %183, i32 0, i32 0
  %2583 = load i8, ptr %2582, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %182, i8 %2583)
          to label %2584 unwind label %2591

2584:                                             ; preds = %2580
  %2585 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %182)
          to label %2586 unwind label %2595

2586:                                             ; preds = %2584
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %182) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %182) #10
  br label %2600

2587:                                             ; preds = %5952, %5950, %5948, %5946, %5942, %5940, %5937, %5934, %5931, %5019, %5016, %4709, %4706, %4399, %4396, %4119, %4116, %3734, %3731, %3401, %3398, %3068, %3065, %2735, %2732, %2705, %2679, %2653, %2627, %2601, %2571
  %2588 = landingpad { ptr, i32 }
          cleanup
  %2589 = extractvalue { ptr, i32 } %2588, 0
  store ptr %2589, ptr %11, align 8
  %2590 = extractvalue { ptr, i32 } %2588, 1
  store i32 %2590, ptr %12, align 4
  br label %5982

2591:                                             ; preds = %2580, %2575
  %2592 = landingpad { ptr, i32 }
          cleanup
  %2593 = extractvalue { ptr, i32 } %2592, 0
  store ptr %2593, ptr %11, align 8
  %2594 = extractvalue { ptr, i32 } %2592, 1
  store i32 %2594, ptr %12, align 4
  br label %2599

2595:                                             ; preds = %2584
  %2596 = landingpad { ptr, i32 }
          cleanup
  %2597 = extractvalue { ptr, i32 } %2596, 0
  store ptr %2597, ptr %11, align 8
  %2598 = extractvalue { ptr, i32 } %2596, 1
  store i32 %2598, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %182) #10
  br label %2599

2599:                                             ; preds = %2595, %2591
  call void @llvm.lifetime.end.p0(i64 40, ptr %182) #10
  br label %5982

2600:                                             ; preds = %2586, %2574
  br label %5926

2601:                                             ; preds = %2563
  %2602 = load ptr, ptr %179, align 8, !tbaa !5
  %2603 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2602)
          to label %2604 unwind label %2587

2604:                                             ; preds = %2601
  br i1 %2603, label %2626, label %2605

2605:                                             ; preds = %2604
  call void @llvm.lifetime.start.p0(i64 40, ptr %184) #10
  %2606 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %185, i32 0, i32 0
  %2607 = load ptr, ptr %179, align 8, !tbaa !5
  %2608 = load ptr, ptr %180, align 8, !tbaa !5
  %2609 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %2607, ptr noundef nonnull align 8 dereferenceable(40) %2608)
          to label %2610 unwind label %2617

2610:                                             ; preds = %2605
  %2611 = zext i1 %2609 to i8
  store i8 %2611, ptr %2606, align 1, !tbaa !42
  %2612 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %185, i32 0, i32 0
  %2613 = load i8, ptr %2612, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %184, i8 %2613)
          to label %2614 unwind label %2617

2614:                                             ; preds = %2610
  %2615 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %184)
          to label %2616 unwind label %2621

2616:                                             ; preds = %2614
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %184) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %184) #10
  br label %2626

2617:                                             ; preds = %2610, %2605
  %2618 = landingpad { ptr, i32 }
          cleanup
  %2619 = extractvalue { ptr, i32 } %2618, 0
  store ptr %2619, ptr %11, align 8
  %2620 = extractvalue { ptr, i32 } %2618, 1
  store i32 %2620, ptr %12, align 4
  br label %2625

2621:                                             ; preds = %2614
  %2622 = landingpad { ptr, i32 }
          cleanup
  %2623 = extractvalue { ptr, i32 } %2622, 0
  store ptr %2623, ptr %11, align 8
  %2624 = extractvalue { ptr, i32 } %2622, 1
  store i32 %2624, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %184) #10
  br label %2625

2625:                                             ; preds = %2621, %2617
  call void @llvm.lifetime.end.p0(i64 40, ptr %184) #10
  br label %5982

2626:                                             ; preds = %2616, %2604
  br label %5926

2627:                                             ; preds = %2563
  %2628 = load ptr, ptr %179, align 8, !tbaa !5
  %2629 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2628)
          to label %2630 unwind label %2587

2630:                                             ; preds = %2627
  br i1 %2629, label %2652, label %2631

2631:                                             ; preds = %2630
  call void @llvm.lifetime.start.p0(i64 40, ptr %186) #10
  %2632 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %187, i32 0, i32 0
  %2633 = load ptr, ptr %179, align 8, !tbaa !5
  %2634 = load ptr, ptr %180, align 8, !tbaa !5
  %2635 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantltERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %2633, ptr noundef nonnull align 8 dereferenceable(40) %2634)
          to label %2636 unwind label %2643

2636:                                             ; preds = %2631
  %2637 = zext i1 %2635 to i8
  store i8 %2637, ptr %2632, align 1, !tbaa !42
  %2638 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %187, i32 0, i32 0
  %2639 = load i8, ptr %2638, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %186, i8 %2639)
          to label %2640 unwind label %2643

2640:                                             ; preds = %2636
  %2641 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %186)
          to label %2642 unwind label %2647

2642:                                             ; preds = %2640
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %186) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %186) #10
  br label %2652

2643:                                             ; preds = %2636, %2631
  %2644 = landingpad { ptr, i32 }
          cleanup
  %2645 = extractvalue { ptr, i32 } %2644, 0
  store ptr %2645, ptr %11, align 8
  %2646 = extractvalue { ptr, i32 } %2644, 1
  store i32 %2646, ptr %12, align 4
  br label %2651

2647:                                             ; preds = %2640
  %2648 = landingpad { ptr, i32 }
          cleanup
  %2649 = extractvalue { ptr, i32 } %2648, 0
  store ptr %2649, ptr %11, align 8
  %2650 = extractvalue { ptr, i32 } %2648, 1
  store i32 %2650, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %186) #10
  br label %2651

2651:                                             ; preds = %2647, %2643
  call void @llvm.lifetime.end.p0(i64 40, ptr %186) #10
  br label %5982

2652:                                             ; preds = %2642, %2630
  br label %5926

2653:                                             ; preds = %2563
  %2654 = load ptr, ptr %179, align 8, !tbaa !5
  %2655 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2654)
          to label %2656 unwind label %2587

2656:                                             ; preds = %2653
  br i1 %2655, label %2678, label %2657

2657:                                             ; preds = %2656
  call void @llvm.lifetime.start.p0(i64 40, ptr %188) #10
  %2658 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %189, i32 0, i32 0
  %2659 = load ptr, ptr %179, align 8, !tbaa !5
  %2660 = load ptr, ptr %180, align 8, !tbaa !5
  %2661 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantleERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %2659, ptr noundef nonnull align 8 dereferenceable(40) %2660)
          to label %2662 unwind label %2669

2662:                                             ; preds = %2657
  %2663 = zext i1 %2661 to i8
  store i8 %2663, ptr %2658, align 1, !tbaa !42
  %2664 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %189, i32 0, i32 0
  %2665 = load i8, ptr %2664, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %188, i8 %2665)
          to label %2666 unwind label %2669

2666:                                             ; preds = %2662
  %2667 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %188)
          to label %2668 unwind label %2673

2668:                                             ; preds = %2666
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %188) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %188) #10
  br label %2678

2669:                                             ; preds = %2662, %2657
  %2670 = landingpad { ptr, i32 }
          cleanup
  %2671 = extractvalue { ptr, i32 } %2670, 0
  store ptr %2671, ptr %11, align 8
  %2672 = extractvalue { ptr, i32 } %2670, 1
  store i32 %2672, ptr %12, align 4
  br label %2677

2673:                                             ; preds = %2666
  %2674 = landingpad { ptr, i32 }
          cleanup
  %2675 = extractvalue { ptr, i32 } %2674, 0
  store ptr %2675, ptr %11, align 8
  %2676 = extractvalue { ptr, i32 } %2674, 1
  store i32 %2676, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %188) #10
  br label %2677

2677:                                             ; preds = %2673, %2669
  call void @llvm.lifetime.end.p0(i64 40, ptr %188) #10
  br label %5982

2678:                                             ; preds = %2668, %2656
  br label %5926

2679:                                             ; preds = %2563
  %2680 = load ptr, ptr %179, align 8, !tbaa !5
  %2681 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2680)
          to label %2682 unwind label %2587

2682:                                             ; preds = %2679
  br i1 %2681, label %2704, label %2683

2683:                                             ; preds = %2682
  call void @llvm.lifetime.start.p0(i64 40, ptr %190) #10
  %2684 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %191, i32 0, i32 0
  %2685 = load ptr, ptr %179, align 8, !tbaa !5
  %2686 = load ptr, ptr %180, align 8, !tbaa !5
  %2687 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantgtERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %2685, ptr noundef nonnull align 8 dereferenceable(40) %2686)
          to label %2688 unwind label %2695

2688:                                             ; preds = %2683
  %2689 = zext i1 %2687 to i8
  store i8 %2689, ptr %2684, align 1, !tbaa !42
  %2690 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %191, i32 0, i32 0
  %2691 = load i8, ptr %2690, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %190, i8 %2691)
          to label %2692 unwind label %2695

2692:                                             ; preds = %2688
  %2693 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %190)
          to label %2694 unwind label %2699

2694:                                             ; preds = %2692
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %190) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %190) #10
  br label %2704

2695:                                             ; preds = %2688, %2683
  %2696 = landingpad { ptr, i32 }
          cleanup
  %2697 = extractvalue { ptr, i32 } %2696, 0
  store ptr %2697, ptr %11, align 8
  %2698 = extractvalue { ptr, i32 } %2696, 1
  store i32 %2698, ptr %12, align 4
  br label %2703

2699:                                             ; preds = %2692
  %2700 = landingpad { ptr, i32 }
          cleanup
  %2701 = extractvalue { ptr, i32 } %2700, 0
  store ptr %2701, ptr %11, align 8
  %2702 = extractvalue { ptr, i32 } %2700, 1
  store i32 %2702, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %190) #10
  br label %2703

2703:                                             ; preds = %2699, %2695
  call void @llvm.lifetime.end.p0(i64 40, ptr %190) #10
  br label %5982

2704:                                             ; preds = %2694, %2682
  br label %5926

2705:                                             ; preds = %2563
  %2706 = load ptr, ptr %179, align 8, !tbaa !5
  %2707 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2706)
          to label %2708 unwind label %2587

2708:                                             ; preds = %2705
  br i1 %2707, label %2730, label %2709

2709:                                             ; preds = %2708
  call void @llvm.lifetime.start.p0(i64 40, ptr %192) #10
  %2710 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %193, i32 0, i32 0
  %2711 = load ptr, ptr %179, align 8, !tbaa !5
  %2712 = load ptr, ptr %180, align 8, !tbaa !5
  %2713 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantgeERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %2711, ptr noundef nonnull align 8 dereferenceable(40) %2712)
          to label %2714 unwind label %2721

2714:                                             ; preds = %2709
  %2715 = zext i1 %2713 to i8
  store i8 %2715, ptr %2710, align 1, !tbaa !42
  %2716 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %193, i32 0, i32 0
  %2717 = load i8, ptr %2716, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %192, i8 %2717)
          to label %2718 unwind label %2721

2718:                                             ; preds = %2714
  %2719 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %192)
          to label %2720 unwind label %2725

2720:                                             ; preds = %2718
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %192) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %192) #10
  br label %2730

2721:                                             ; preds = %2714, %2709
  %2722 = landingpad { ptr, i32 }
          cleanup
  %2723 = extractvalue { ptr, i32 } %2722, 0
  store ptr %2723, ptr %11, align 8
  %2724 = extractvalue { ptr, i32 } %2722, 1
  store i32 %2724, ptr %12, align 4
  br label %2729

2725:                                             ; preds = %2718
  %2726 = landingpad { ptr, i32 }
          cleanup
  %2727 = extractvalue { ptr, i32 } %2726, 0
  store ptr %2727, ptr %11, align 8
  %2728 = extractvalue { ptr, i32 } %2726, 1
  store i32 %2728, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %192) #10
  br label %2729

2729:                                             ; preds = %2725, %2721
  call void @llvm.lifetime.end.p0(i64 40, ptr %192) #10
  br label %5982

2730:                                             ; preds = %2720, %2708
  br label %5926

2731:                                             ; preds = %2563
  br label %2732

2732:                                             ; preds = %2731
  %2733 = load ptr, ptr %179, align 8, !tbaa !5
  %2734 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %2733)
          to label %2735 unwind label %2587

2735:                                             ; preds = %2732
  %2736 = load ptr, ptr %180, align 8, !tbaa !5
  %2737 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %2736)
          to label %2738 unwind label %2587

2738:                                             ; preds = %2735
  %2739 = icmp eq i32 %2734, %2737
  br i1 %2739, label %2751, label %2740

2740:                                             ; preds = %2738
  %2741 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %195) #10
  %2742 = getelementptr inbounds %class.anon.481, ptr %195, i32 0, i32 0
  %2743 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %2743, ptr %2742, align 8, !tbaa !5
  %2744 = getelementptr inbounds %class.anon.481, ptr %195, i32 0, i32 1
  %2745 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %2745, ptr %2744, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %194, ptr noundef nonnull align 8 dereferenceable(16) %195) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2741, ptr noundef %194)
          to label %2746 unwind label %2747

2746:                                             ; preds = %2740
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %195) #10
  br label %2751

2747:                                             ; preds = %2740
  %2748 = landingpad { ptr, i32 }
          cleanup
  %2749 = extractvalue { ptr, i32 } %2748, 0
  store ptr %2749, ptr %11, align 8
  %2750 = extractvalue { ptr, i32 } %2748, 1
  store i32 %2750, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %194) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %195) #10
  br label %5982

2751:                                             ; preds = %2746, %2738
  br label %2752

2752:                                             ; preds = %2751
  br label %2753

2753:                                             ; preds = %2752
  call void @llvm.lifetime.start.p0(i64 1, ptr %196) #10
  store i8 1, ptr %196, align 1, !tbaa !9
  br label %2754

2754:                                             ; preds = %3062, %2753
  %2755 = load i8, ptr %196, align 1, !tbaa !9, !range !40, !noundef !41
  %2756 = trunc i8 %2755 to i1
  br i1 %2756, label %2758, label %2757

2757:                                             ; preds = %2754
  store i32 82, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %196) #10
  br label %3063

2758:                                             ; preds = %2754
  call void @llvm.lifetime.start.p0(i64 8, ptr %197) #10
  %2759 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %2759, ptr %197, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %198) #10
  %2760 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %2760, ptr %198, align 8, !tbaa !5
  br label %2761

2761:                                             ; preds = %3059, %2758
  %2762 = load i8, ptr %196, align 1, !tbaa !9, !range !40, !noundef !41
  %2763 = trunc i8 %2762 to i1
  br i1 %2763, label %2765, label %2764

2764:                                             ; preds = %2761
  store i32 85, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %198) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #10
  br label %3061

2765:                                             ; preds = %2761
  %2766 = load ptr, ptr %197, align 8, !tbaa !5
  %2767 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %2766)
          to label %2768 unwind label %2769

2768:                                             ; preds = %2765
  switch i32 %2767, label %2774 [
    i32 0, label %2773
    i32 3, label %2775
    i32 1, label %2858
    i32 2, label %2959
  ]

2769:                                             ; preds = %2765
  %2770 = landingpad { ptr, i32 }
          cleanup
  %2771 = extractvalue { ptr, i32 } %2770, 0
  store ptr %2771, ptr %11, align 8
  %2772 = extractvalue { ptr, i32 } %2770, 1
  store i32 %2772, ptr %12, align 4
  br label %3060

2773:                                             ; preds = %2768
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4011, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2774:                                             ; preds = %2768
  br label %3058

2775:                                             ; preds = %2768
  call void @llvm.lifetime.start.p0(i64 1, ptr %199) #10
  store i8 1, ptr %199, align 1, !tbaa !9
  br label %2776

2776:                                             ; preds = %2856, %2775
  %2777 = load i8, ptr %199, align 1, !tbaa !9, !range !40, !noundef !41
  %2778 = trunc i8 %2777 to i1
  br i1 %2778, label %2780, label %2779

2779:                                             ; preds = %2776
  store i32 89, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %199) #10
  br label %2857

2780:                                             ; preds = %2776
  call void @llvm.lifetime.start.p0(i64 8, ptr %200) #10
  %2781 = load ptr, ptr %197, align 8, !tbaa !5
  %2782 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2781)
          to label %2783 unwind label %2793

2783:                                             ; preds = %2780
  store ptr %2782, ptr %200, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %201) #10
  %2784 = load ptr, ptr %198, align 8, !tbaa !5
  %2785 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2784)
          to label %2786 unwind label %2797

2786:                                             ; preds = %2783
  store ptr %2785, ptr %201, align 8, !tbaa !5
  br label %2787

2787:                                             ; preds = %2843, %2786
  %2788 = load ptr, ptr %200, align 8, !tbaa !5
  %2789 = load ptr, ptr %201, align 8, !tbaa !5
  %2790 = load i8, ptr %199, align 1, !tbaa !9, !range !40, !noundef !41
  %2791 = trunc i8 %2790 to i1
  br i1 %2791, label %2801, label %2792

2792:                                             ; preds = %2787
  store i32 92, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #10
  br label %2855

2793:                                             ; preds = %2780
  %2794 = landingpad { ptr, i32 }
          cleanup
  %2795 = extractvalue { ptr, i32 } %2794, 0
  store ptr %2795, ptr %11, align 8
  %2796 = extractvalue { ptr, i32 } %2794, 1
  store i32 %2796, ptr %12, align 4
  br label %2854

2797:                                             ; preds = %2783
  %2798 = landingpad { ptr, i32 }
          cleanup
  %2799 = extractvalue { ptr, i32 } %2798, 0
  store ptr %2799, ptr %11, align 8
  %2800 = extractvalue { ptr, i32 } %2798, 1
  store i32 %2800, ptr %12, align 4
  br label %2853

2801:                                             ; preds = %2787
  br label %2802

2802:                                             ; preds = %2801
  %2803 = load ptr, ptr %200, align 8, !tbaa !5
  %2804 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2803, i32 0, i32 1
  %2805 = load i32, ptr %2804, align 8, !tbaa !70
  %2806 = load ptr, ptr %201, align 8, !tbaa !5
  %2807 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2806, i32 0, i32 1
  %2808 = load i32, ptr %2807, align 8, !tbaa !70
  %2809 = icmp eq i32 %2805, %2808
  br i1 %2809, label %2821, label %2810

2810:                                             ; preds = %2802
  %2811 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %203) #10
  %2812 = getelementptr inbounds %class.anon.482, ptr %203, i32 0, i32 0
  %2813 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %2813, ptr %2812, align 8, !tbaa !5
  %2814 = getelementptr inbounds %class.anon.482, ptr %203, i32 0, i32 1
  %2815 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %2815, ptr %2814, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %202, ptr noundef nonnull align 8 dereferenceable(16) %203) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2811, ptr noundef %202)
          to label %2816 unwind label %2817

2816:                                             ; preds = %2810
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %203) #10
  br label %2821

2817:                                             ; preds = %2810
  %2818 = landingpad { ptr, i32 }
          cleanup
  %2819 = extractvalue { ptr, i32 } %2818, 0
  store ptr %2819, ptr %11, align 8
  %2820 = extractvalue { ptr, i32 } %2818, 1
  store i32 %2820, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %202) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %203) #10
  br label %2853

2821:                                             ; preds = %2816, %2802
  br label %2822

2822:                                             ; preds = %2821
  br label %2823

2823:                                             ; preds = %2822
  call void @llvm.lifetime.start.p0(i64 40, ptr %204) #10
  %2824 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %205, i32 0, i32 0
  %2825 = load ptr, ptr %200, align 8, !tbaa !5
  %2826 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2825, i32 0, i32 0
  %2827 = load double, ptr %2826, align 8, !tbaa !57
  %2828 = load ptr, ptr %201, align 8, !tbaa !5
  %2829 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2828, i32 0, i32 0
  %2830 = load double, ptr %2829, align 8, !tbaa !57
  %2831 = fadd double %2827, %2830
  store double %2831, ptr %2824, align 8, !tbaa !57
  %2832 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %205, i32 0, i32 1
  %2833 = load ptr, ptr %200, align 8, !tbaa !5
  %2834 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %2833, i32 0, i32 1
  %2835 = load i32, ptr %2834, align 8, !tbaa !70
  store i32 %2835, ptr %2832, align 8, !tbaa !70
  %2836 = getelementptr inbounds { double, i32 }, ptr %205, i32 0, i32 0
  %2837 = load double, ptr %2836, align 8
  %2838 = getelementptr inbounds { double, i32 }, ptr %205, i32 0, i32 1
  %2839 = load i32, ptr %2838, align 8
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %204, double %2837, i32 %2839)
          to label %2840 unwind label %2844

2840:                                             ; preds = %2823
  %2841 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %204)
          to label %2842 unwind label %2848

2842:                                             ; preds = %2840
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %204) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %204) #10
  br label %2843

2843:                                             ; preds = %2842
  store i8 0, ptr %199, align 1, !tbaa !9
  br label %2787, !llvm.loop !71

2844:                                             ; preds = %2823
  %2845 = landingpad { ptr, i32 }
          cleanup
  %2846 = extractvalue { ptr, i32 } %2845, 0
  store ptr %2846, ptr %11, align 8
  %2847 = extractvalue { ptr, i32 } %2845, 1
  store i32 %2847, ptr %12, align 4
  br label %2852

2848:                                             ; preds = %2840
  %2849 = landingpad { ptr, i32 }
          cleanup
  %2850 = extractvalue { ptr, i32 } %2849, 0
  store ptr %2850, ptr %11, align 8
  %2851 = extractvalue { ptr, i32 } %2849, 1
  store i32 %2851, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %204) #10
  br label %2852

2852:                                             ; preds = %2848, %2844
  call void @llvm.lifetime.end.p0(i64 40, ptr %204) #10
  br label %2853

2853:                                             ; preds = %2852, %2817, %2797
  call void @llvm.lifetime.end.p0(i64 8, ptr %201) #10
  br label %2854

2854:                                             ; preds = %2853, %2793
  call void @llvm.lifetime.end.p0(i64 8, ptr %200) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %199) #10
  br label %3060

2855:                                             ; preds = %2792
  br label %2856

2856:                                             ; preds = %2855
  store i8 0, ptr %199, align 1, !tbaa !9
  br label %2776, !llvm.loop !72

2857:                                             ; preds = %2779
  br label %3058

2858:                                             ; preds = %2768
  call void @llvm.lifetime.start.p0(i64 1, ptr %206) #10
  store i8 1, ptr %206, align 1, !tbaa !9
  br label %2859

2859:                                             ; preds = %2957, %2858
  %2860 = load i8, ptr %206, align 1, !tbaa !9, !range !40, !noundef !41
  %2861 = trunc i8 %2860 to i1
  br i1 %2861, label %2863, label %2862

2862:                                             ; preds = %2859
  store i32 97, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %206) #10
  br label %2958

2863:                                             ; preds = %2859
  call void @llvm.lifetime.start.p0(i64 8, ptr %207) #10
  %2864 = load ptr, ptr %197, align 8, !tbaa !5
  %2865 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %2864)
          to label %2866 unwind label %2876

2866:                                             ; preds = %2863
  store ptr %2865, ptr %207, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %208) #10
  %2867 = load ptr, ptr %198, align 8, !tbaa !5
  %2868 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %2867)
          to label %2869 unwind label %2880

2869:                                             ; preds = %2866
  store ptr %2868, ptr %208, align 8, !tbaa !5
  br label %2870

2870:                                             ; preds = %2944, %2869
  %2871 = load ptr, ptr %207, align 8, !tbaa !5
  %2872 = load ptr, ptr %208, align 8, !tbaa !5
  %2873 = load i8, ptr %206, align 1, !tbaa !9, !range !40, !noundef !41
  %2874 = trunc i8 %2873 to i1
  br i1 %2874, label %2884, label %2875

2875:                                             ; preds = %2870
  store i32 100, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #10
  br label %2956

2876:                                             ; preds = %2863
  %2877 = landingpad { ptr, i32 }
          cleanup
  %2878 = extractvalue { ptr, i32 } %2877, 0
  store ptr %2878, ptr %11, align 8
  %2879 = extractvalue { ptr, i32 } %2877, 1
  store i32 %2879, ptr %12, align 4
  br label %2955

2880:                                             ; preds = %2866
  %2881 = landingpad { ptr, i32 }
          cleanup
  %2882 = extractvalue { ptr, i32 } %2881, 0
  store ptr %2882, ptr %11, align 8
  %2883 = extractvalue { ptr, i32 } %2881, 1
  store i32 %2883, ptr %12, align 4
  br label %2954

2884:                                             ; preds = %2870
  br label %2885

2885:                                             ; preds = %2884
  %2886 = load ptr, ptr %207, align 8, !tbaa !5
  %2887 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2886, i32 0, i32 1
  %2888 = load i32, ptr %2887, align 8, !tbaa !60
  %2889 = load ptr, ptr %208, align 8, !tbaa !5
  %2890 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2889, i32 0, i32 1
  %2891 = load i32, ptr %2890, align 8, !tbaa !60
  %2892 = icmp eq i32 %2888, %2891
  br i1 %2892, label %2904, label %2893

2893:                                             ; preds = %2885
  %2894 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %210) #10
  %2895 = getelementptr inbounds %class.anon.483, ptr %210, i32 0, i32 0
  %2896 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %2896, ptr %2895, align 8, !tbaa !5
  %2897 = getelementptr inbounds %class.anon.483, ptr %210, i32 0, i32 1
  %2898 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %2898, ptr %2897, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %209, ptr noundef nonnull align 8 dereferenceable(16) %210) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2894, ptr noundef %209)
          to label %2899 unwind label %2900

2899:                                             ; preds = %2893
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %210) #10
  br label %2904

2900:                                             ; preds = %2893
  %2901 = landingpad { ptr, i32 }
          cleanup
  %2902 = extractvalue { ptr, i32 } %2901, 0
  store ptr %2902, ptr %11, align 8
  %2903 = extractvalue { ptr, i32 } %2901, 1
  store i32 %2903, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %209) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %210) #10
  br label %2954

2904:                                             ; preds = %2899, %2885
  br label %2905

2905:                                             ; preds = %2904
  br label %2906

2906:                                             ; preds = %2905
  call void @llvm.lifetime.start.p0(i64 40, ptr %211) #10
  %2907 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %212, i32 0, i32 0
  %2908 = load ptr, ptr %207, align 8, !tbaa !5
  %2909 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2908, i32 0, i32 1
  %2910 = load i32, ptr %2909, align 8, !tbaa !60
  %2911 = load ptr, ptr %207, align 8, !tbaa !5
  %2912 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2911, i32 0, i32 0
  %2913 = load ptr, ptr %208, align 8, !tbaa !5
  %2914 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2913, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %214, ptr align 8 %2914, i64 16, i1 false), !tbaa.struct !56
  %2915 = getelementptr inbounds { i64, i64 }, ptr %214, i32 0, i32 0
  %2916 = load i64, ptr %2915, align 8
  %2917 = getelementptr inbounds { i64, i64 }, ptr %214, i32 0, i32 1
  %2918 = load i64, ptr %2917, align 8
  %2919 = invoke { i64, i64 } @_ZNK4S128plES_(ptr noundef nonnull align 8 dereferenceable(16) %2912, i64 %2916, i64 %2918)
          to label %2920 unwind label %2945

2920:                                             ; preds = %2906
  %2921 = getelementptr inbounds %class.S128, ptr %213, i32 0, i32 0
  %2922 = getelementptr inbounds { i64, i64 }, ptr %2921, i32 0, i32 0
  %2923 = extractvalue { i64, i64 } %2919, 0
  store i64 %2923, ptr %2922, align 8
  %2924 = getelementptr inbounds { i64, i64 }, ptr %2921, i32 0, i32 1
  %2925 = extractvalue { i64, i64 } %2919, 1
  store i64 %2925, ptr %2924, align 8
  %2926 = getelementptr inbounds { i64, i64 }, ptr %213, i32 0, i32 0
  %2927 = load i64, ptr %2926, align 8
  %2928 = getelementptr inbounds { i64, i64 }, ptr %213, i32 0, i32 1
  %2929 = load i64, ptr %2928, align 8
  %2930 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2910, i64 %2927, i64 %2929)
          to label %2931 unwind label %2945

2931:                                             ; preds = %2920
  %2932 = getelementptr inbounds %class.S128, ptr %2907, i32 0, i32 0
  %2933 = getelementptr inbounds { i64, i64 }, ptr %2932, i32 0, i32 0
  %2934 = extractvalue { i64, i64 } %2930, 0
  store i64 %2934, ptr %2933, align 8
  %2935 = getelementptr inbounds { i64, i64 }, ptr %2932, i32 0, i32 1
  %2936 = extractvalue { i64, i64 } %2930, 1
  store i64 %2936, ptr %2935, align 8
  %2937 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %212, i32 0, i32 1
  %2938 = load ptr, ptr %207, align 8, !tbaa !5
  %2939 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %2938, i32 0, i32 1
  %2940 = load i32, ptr %2939, align 8, !tbaa !60
  store i32 %2940, ptr %2937, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %211, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %212)
          to label %2941 unwind label %2945

2941:                                             ; preds = %2931
  %2942 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %211)
          to label %2943 unwind label %2949

2943:                                             ; preds = %2941
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %211) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %211) #10
  br label %2944

2944:                                             ; preds = %2943
  store i8 0, ptr %206, align 1, !tbaa !9
  br label %2870, !llvm.loop !73

2945:                                             ; preds = %2931, %2920, %2906
  %2946 = landingpad { ptr, i32 }
          cleanup
  %2947 = extractvalue { ptr, i32 } %2946, 0
  store ptr %2947, ptr %11, align 8
  %2948 = extractvalue { ptr, i32 } %2946, 1
  store i32 %2948, ptr %12, align 4
  br label %2953

2949:                                             ; preds = %2941
  %2950 = landingpad { ptr, i32 }
          cleanup
  %2951 = extractvalue { ptr, i32 } %2950, 0
  store ptr %2951, ptr %11, align 8
  %2952 = extractvalue { ptr, i32 } %2950, 1
  store i32 %2952, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %211) #10
  br label %2953

2953:                                             ; preds = %2949, %2945
  call void @llvm.lifetime.end.p0(i64 40, ptr %211) #10
  br label %2954

2954:                                             ; preds = %2953, %2900, %2880
  call void @llvm.lifetime.end.p0(i64 8, ptr %208) #10
  br label %2955

2955:                                             ; preds = %2954, %2876
  call void @llvm.lifetime.end.p0(i64 8, ptr %207) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %206) #10
  br label %3060

2956:                                             ; preds = %2875
  br label %2957

2957:                                             ; preds = %2956
  store i8 0, ptr %206, align 1, !tbaa !9
  br label %2859, !llvm.loop !74

2958:                                             ; preds = %2862
  br label %3058

2959:                                             ; preds = %2768
  call void @llvm.lifetime.start.p0(i64 1, ptr %215) #10
  store i8 1, ptr %215, align 1, !tbaa !9
  br label %2960

2960:                                             ; preds = %3056, %2959
  %2961 = load i8, ptr %215, align 1, !tbaa !9, !range !40, !noundef !41
  %2962 = trunc i8 %2961 to i1
  br i1 %2962, label %2964, label %2963

2963:                                             ; preds = %2960
  store i32 105, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %215) #10
  br label %3057

2964:                                             ; preds = %2960
  call void @llvm.lifetime.start.p0(i64 8, ptr %216) #10
  %2965 = load ptr, ptr %197, align 8, !tbaa !5
  %2966 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2965)
          to label %2967 unwind label %2977

2967:                                             ; preds = %2964
  store ptr %2966, ptr %216, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %217) #10
  %2968 = load ptr, ptr %198, align 8, !tbaa !5
  %2969 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2968)
          to label %2970 unwind label %2981

2970:                                             ; preds = %2967
  store ptr %2969, ptr %217, align 8, !tbaa !5
  br label %2971

2971:                                             ; preds = %3043, %2970
  %2972 = load ptr, ptr %216, align 8, !tbaa !5
  %2973 = load ptr, ptr %217, align 8, !tbaa !5
  %2974 = load i8, ptr %215, align 1, !tbaa !9, !range !40, !noundef !41
  %2975 = trunc i8 %2974 to i1
  br i1 %2975, label %2985, label %2976

2976:                                             ; preds = %2971
  store i32 108, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %217) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #10
  br label %3055

2977:                                             ; preds = %2964
  %2978 = landingpad { ptr, i32 }
          cleanup
  %2979 = extractvalue { ptr, i32 } %2978, 0
  store ptr %2979, ptr %11, align 8
  %2980 = extractvalue { ptr, i32 } %2978, 1
  store i32 %2980, ptr %12, align 4
  br label %3054

2981:                                             ; preds = %2967
  %2982 = landingpad { ptr, i32 }
          cleanup
  %2983 = extractvalue { ptr, i32 } %2982, 0
  store ptr %2983, ptr %11, align 8
  %2984 = extractvalue { ptr, i32 } %2982, 1
  store i32 %2984, ptr %12, align 4
  br label %3053

2985:                                             ; preds = %2971
  br label %2986

2986:                                             ; preds = %2985
  %2987 = load ptr, ptr %216, align 8, !tbaa !5
  %2988 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %2987, i32 0, i32 1
  %2989 = load i32, ptr %2988, align 8, !tbaa !21
  %2990 = load ptr, ptr %217, align 8, !tbaa !5
  %2991 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %2990, i32 0, i32 1
  %2992 = load i32, ptr %2991, align 8, !tbaa !21
  %2993 = icmp eq i32 %2989, %2992
  br i1 %2993, label %3005, label %2994

2994:                                             ; preds = %2986
  %2995 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %219) #10
  %2996 = getelementptr inbounds %class.anon.484, ptr %219, i32 0, i32 0
  %2997 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %2997, ptr %2996, align 8, !tbaa !5
  %2998 = getelementptr inbounds %class.anon.484, ptr %219, i32 0, i32 1
  %2999 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %2999, ptr %2998, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %218, ptr noundef nonnull align 8 dereferenceable(16) %219) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %2995, ptr noundef %218)
          to label %3000 unwind label %3001

3000:                                             ; preds = %2994
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %219) #10
  br label %3005

3001:                                             ; preds = %2994
  %3002 = landingpad { ptr, i32 }
          cleanup
  %3003 = extractvalue { ptr, i32 } %3002, 0
  store ptr %3003, ptr %11, align 8
  %3004 = extractvalue { ptr, i32 } %3002, 1
  store i32 %3004, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %218) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %219) #10
  br label %3053

3005:                                             ; preds = %3000, %2986
  br label %3006

3006:                                             ; preds = %3005
  br label %3007

3007:                                             ; preds = %3006
  call void @llvm.lifetime.start.p0(i64 40, ptr %220) #10
  %3008 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %221, i32 0, i32 0
  %3009 = load ptr, ptr %216, align 8, !tbaa !5
  %3010 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3009, i32 0, i32 1
  %3011 = load i32, ptr %3010, align 8, !tbaa !21
  %3012 = load ptr, ptr %216, align 8, !tbaa !5
  %3013 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3012, i32 0, i32 0
  %3014 = load ptr, ptr %217, align 8, !tbaa !5
  %3015 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3014, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %223, ptr align 8 %3015, i64 16, i1 false), !tbaa.struct !56
  %3016 = getelementptr inbounds { i64, i64 }, ptr %223, i32 0, i32 0
  %3017 = load i64, ptr %3016, align 8
  %3018 = getelementptr inbounds { i64, i64 }, ptr %223, i32 0, i32 1
  %3019 = load i64, ptr %3018, align 8
  %3020 = invoke { i64, i64 } @_ZNK4U128plES_(ptr noundef nonnull align 8 dereferenceable(16) %3013, i64 %3017, i64 %3019)
          to label %3021 unwind label %3044

3021:                                             ; preds = %3007
  %3022 = getelementptr inbounds { i64, i64 }, ptr %222, i32 0, i32 0
  %3023 = extractvalue { i64, i64 } %3020, 0
  store i64 %3023, ptr %3022, align 8
  %3024 = getelementptr inbounds { i64, i64 }, ptr %222, i32 0, i32 1
  %3025 = extractvalue { i64, i64 } %3020, 1
  store i64 %3025, ptr %3024, align 8
  %3026 = getelementptr inbounds { i64, i64 }, ptr %222, i32 0, i32 0
  %3027 = load i64, ptr %3026, align 8
  %3028 = getelementptr inbounds { i64, i64 }, ptr %222, i32 0, i32 1
  %3029 = load i64, ptr %3028, align 8
  %3030 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %3011, i64 %3027, i64 %3029)
          to label %3031 unwind label %3044

3031:                                             ; preds = %3021
  %3032 = getelementptr inbounds { i64, i64 }, ptr %3008, i32 0, i32 0
  %3033 = extractvalue { i64, i64 } %3030, 0
  store i64 %3033, ptr %3032, align 8
  %3034 = getelementptr inbounds { i64, i64 }, ptr %3008, i32 0, i32 1
  %3035 = extractvalue { i64, i64 } %3030, 1
  store i64 %3035, ptr %3034, align 8
  %3036 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %221, i32 0, i32 1
  %3037 = load ptr, ptr %216, align 8, !tbaa !5
  %3038 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3037, i32 0, i32 1
  %3039 = load i32, ptr %3038, align 8, !tbaa !21
  store i32 %3039, ptr %3036, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %220, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %221)
          to label %3040 unwind label %3044

3040:                                             ; preds = %3031
  %3041 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %220)
          to label %3042 unwind label %3048

3042:                                             ; preds = %3040
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %220) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %220) #10
  br label %3043

3043:                                             ; preds = %3042
  store i8 0, ptr %215, align 1, !tbaa !9
  br label %2971, !llvm.loop !75

3044:                                             ; preds = %3031, %3021, %3007
  %3045 = landingpad { ptr, i32 }
          cleanup
  %3046 = extractvalue { ptr, i32 } %3045, 0
  store ptr %3046, ptr %11, align 8
  %3047 = extractvalue { ptr, i32 } %3045, 1
  store i32 %3047, ptr %12, align 4
  br label %3052

3048:                                             ; preds = %3040
  %3049 = landingpad { ptr, i32 }
          cleanup
  %3050 = extractvalue { ptr, i32 } %3049, 0
  store ptr %3050, ptr %11, align 8
  %3051 = extractvalue { ptr, i32 } %3049, 1
  store i32 %3051, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %220) #10
  br label %3052

3052:                                             ; preds = %3048, %3044
  call void @llvm.lifetime.end.p0(i64 40, ptr %220) #10
  br label %3053

3053:                                             ; preds = %3052, %3001, %2981
  call void @llvm.lifetime.end.p0(i64 8, ptr %217) #10
  br label %3054

3054:                                             ; preds = %3053, %2977
  call void @llvm.lifetime.end.p0(i64 8, ptr %216) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %215) #10
  br label %3060

3055:                                             ; preds = %2976
  br label %3056

3056:                                             ; preds = %3055
  store i8 0, ptr %215, align 1, !tbaa !9
  br label %2960, !llvm.loop !76

3057:                                             ; preds = %2963
  br label %3058

3058:                                             ; preds = %3057, %2958, %2857, %2774
  br label %3059

3059:                                             ; preds = %3058
  store i8 0, ptr %196, align 1, !tbaa !9
  br label %2761, !llvm.loop !77

3060:                                             ; preds = %3054, %2955, %2854, %2769
  call void @llvm.lifetime.end.p0(i64 8, ptr %198) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %197) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %196) #10
  br label %5982

3061:                                             ; preds = %2764
  br label %3062

3062:                                             ; preds = %3061
  store i8 0, ptr %196, align 1, !tbaa !9
  br label %2754, !llvm.loop !78

3063:                                             ; preds = %2757
  br label %5926

3064:                                             ; preds = %2563
  br label %3065

3065:                                             ; preds = %3064
  %3066 = load ptr, ptr %179, align 8, !tbaa !5
  %3067 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3066)
          to label %3068 unwind label %2587

3068:                                             ; preds = %3065
  %3069 = load ptr, ptr %180, align 8, !tbaa !5
  %3070 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3069)
          to label %3071 unwind label %2587

3071:                                             ; preds = %3068
  %3072 = icmp eq i32 %3067, %3070
  br i1 %3072, label %3084, label %3073

3073:                                             ; preds = %3071
  %3074 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %225) #10
  %3075 = getelementptr inbounds %class.anon.485, ptr %225, i32 0, i32 0
  %3076 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3076, ptr %3075, align 8, !tbaa !5
  %3077 = getelementptr inbounds %class.anon.485, ptr %225, i32 0, i32 1
  %3078 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3078, ptr %3077, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %224, ptr noundef nonnull align 8 dereferenceable(16) %225) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3074, ptr noundef %224)
          to label %3079 unwind label %3080

3079:                                             ; preds = %3073
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %225) #10
  br label %3084

3080:                                             ; preds = %3073
  %3081 = landingpad { ptr, i32 }
          cleanup
  %3082 = extractvalue { ptr, i32 } %3081, 0
  store ptr %3082, ptr %11, align 8
  %3083 = extractvalue { ptr, i32 } %3081, 1
  store i32 %3083, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %224) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %225) #10
  br label %5982

3084:                                             ; preds = %3079, %3071
  br label %3085

3085:                                             ; preds = %3084
  br label %3086

3086:                                             ; preds = %3085
  call void @llvm.lifetime.start.p0(i64 1, ptr %226) #10
  store i8 1, ptr %226, align 1, !tbaa !9
  br label %3087

3087:                                             ; preds = %3395, %3086
  %3088 = load i8, ptr %226, align 1, !tbaa !9, !range !40, !noundef !41
  %3089 = trunc i8 %3088 to i1
  br i1 %3089, label %3091, label %3090

3090:                                             ; preds = %3087
  store i32 115, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %226) #10
  br label %3396

3091:                                             ; preds = %3087
  call void @llvm.lifetime.start.p0(i64 8, ptr %227) #10
  %3092 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3092, ptr %227, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %228) #10
  %3093 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3093, ptr %228, align 8, !tbaa !5
  br label %3094

3094:                                             ; preds = %3392, %3091
  %3095 = load i8, ptr %226, align 1, !tbaa !9, !range !40, !noundef !41
  %3096 = trunc i8 %3095 to i1
  br i1 %3096, label %3098, label %3097

3097:                                             ; preds = %3094
  store i32 118, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #10
  br label %3394

3098:                                             ; preds = %3094
  %3099 = load ptr, ptr %227, align 8, !tbaa !5
  %3100 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3099)
          to label %3101 unwind label %3102

3101:                                             ; preds = %3098
  switch i32 %3100, label %3107 [
    i32 0, label %3106
    i32 3, label %3108
    i32 1, label %3191
    i32 2, label %3292
  ]

3102:                                             ; preds = %3098
  %3103 = landingpad { ptr, i32 }
          cleanup
  %3104 = extractvalue { ptr, i32 } %3103, 0
  store ptr %3104, ptr %11, align 8
  %3105 = extractvalue { ptr, i32 } %3103, 1
  store i32 %3105, ptr %12, align 4
  br label %3393

3106:                                             ; preds = %3101
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4030, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

3107:                                             ; preds = %3101
  br label %3391

3108:                                             ; preds = %3101
  call void @llvm.lifetime.start.p0(i64 1, ptr %229) #10
  store i8 1, ptr %229, align 1, !tbaa !9
  br label %3109

3109:                                             ; preds = %3189, %3108
  %3110 = load i8, ptr %229, align 1, !tbaa !9, !range !40, !noundef !41
  %3111 = trunc i8 %3110 to i1
  br i1 %3111, label %3113, label %3112

3112:                                             ; preds = %3109
  store i32 122, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %229) #10
  br label %3190

3113:                                             ; preds = %3109
  call void @llvm.lifetime.start.p0(i64 8, ptr %230) #10
  %3114 = load ptr, ptr %227, align 8, !tbaa !5
  %3115 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %3114)
          to label %3116 unwind label %3126

3116:                                             ; preds = %3113
  store ptr %3115, ptr %230, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %231) #10
  %3117 = load ptr, ptr %228, align 8, !tbaa !5
  %3118 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %3117)
          to label %3119 unwind label %3130

3119:                                             ; preds = %3116
  store ptr %3118, ptr %231, align 8, !tbaa !5
  br label %3120

3120:                                             ; preds = %3176, %3119
  %3121 = load ptr, ptr %230, align 8, !tbaa !5
  %3122 = load ptr, ptr %231, align 8, !tbaa !5
  %3123 = load i8, ptr %229, align 1, !tbaa !9, !range !40, !noundef !41
  %3124 = trunc i8 %3123 to i1
  br i1 %3124, label %3134, label %3125

3125:                                             ; preds = %3120
  store i32 125, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %231) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #10
  br label %3188

3126:                                             ; preds = %3113
  %3127 = landingpad { ptr, i32 }
          cleanup
  %3128 = extractvalue { ptr, i32 } %3127, 0
  store ptr %3128, ptr %11, align 8
  %3129 = extractvalue { ptr, i32 } %3127, 1
  store i32 %3129, ptr %12, align 4
  br label %3187

3130:                                             ; preds = %3116
  %3131 = landingpad { ptr, i32 }
          cleanup
  %3132 = extractvalue { ptr, i32 } %3131, 0
  store ptr %3132, ptr %11, align 8
  %3133 = extractvalue { ptr, i32 } %3131, 1
  store i32 %3133, ptr %12, align 4
  br label %3186

3134:                                             ; preds = %3120
  br label %3135

3135:                                             ; preds = %3134
  %3136 = load ptr, ptr %230, align 8, !tbaa !5
  %3137 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3136, i32 0, i32 1
  %3138 = load i32, ptr %3137, align 8, !tbaa !70
  %3139 = load ptr, ptr %231, align 8, !tbaa !5
  %3140 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3139, i32 0, i32 1
  %3141 = load i32, ptr %3140, align 8, !tbaa !70
  %3142 = icmp eq i32 %3138, %3141
  br i1 %3142, label %3154, label %3143

3143:                                             ; preds = %3135
  %3144 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %233) #10
  %3145 = getelementptr inbounds %class.anon.486, ptr %233, i32 0, i32 0
  %3146 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3146, ptr %3145, align 8, !tbaa !5
  %3147 = getelementptr inbounds %class.anon.486, ptr %233, i32 0, i32 1
  %3148 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3148, ptr %3147, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %232, ptr noundef nonnull align 8 dereferenceable(16) %233) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3144, ptr noundef %232)
          to label %3149 unwind label %3150

3149:                                             ; preds = %3143
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %232) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %233) #10
  br label %3154

3150:                                             ; preds = %3143
  %3151 = landingpad { ptr, i32 }
          cleanup
  %3152 = extractvalue { ptr, i32 } %3151, 0
  store ptr %3152, ptr %11, align 8
  %3153 = extractvalue { ptr, i32 } %3151, 1
  store i32 %3153, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %232) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %233) #10
  br label %3186

3154:                                             ; preds = %3149, %3135
  br label %3155

3155:                                             ; preds = %3154
  br label %3156

3156:                                             ; preds = %3155
  call void @llvm.lifetime.start.p0(i64 40, ptr %234) #10
  %3157 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %235, i32 0, i32 0
  %3158 = load ptr, ptr %230, align 8, !tbaa !5
  %3159 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3158, i32 0, i32 0
  %3160 = load double, ptr %3159, align 8, !tbaa !57
  %3161 = load ptr, ptr %231, align 8, !tbaa !5
  %3162 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3161, i32 0, i32 0
  %3163 = load double, ptr %3162, align 8, !tbaa !57
  %3164 = fsub double %3160, %3163
  store double %3164, ptr %3157, align 8, !tbaa !57
  %3165 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %235, i32 0, i32 1
  %3166 = load ptr, ptr %230, align 8, !tbaa !5
  %3167 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3166, i32 0, i32 1
  %3168 = load i32, ptr %3167, align 8, !tbaa !70
  store i32 %3168, ptr %3165, align 8, !tbaa !70
  %3169 = getelementptr inbounds { double, i32 }, ptr %235, i32 0, i32 0
  %3170 = load double, ptr %3169, align 8
  %3171 = getelementptr inbounds { double, i32 }, ptr %235, i32 0, i32 1
  %3172 = load i32, ptr %3171, align 8
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %234, double %3170, i32 %3172)
          to label %3173 unwind label %3177

3173:                                             ; preds = %3156
  %3174 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %234)
          to label %3175 unwind label %3181

3175:                                             ; preds = %3173
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %234) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %234) #10
  br label %3176

3176:                                             ; preds = %3175
  store i8 0, ptr %229, align 1, !tbaa !9
  br label %3120, !llvm.loop !79

3177:                                             ; preds = %3156
  %3178 = landingpad { ptr, i32 }
          cleanup
  %3179 = extractvalue { ptr, i32 } %3178, 0
  store ptr %3179, ptr %11, align 8
  %3180 = extractvalue { ptr, i32 } %3178, 1
  store i32 %3180, ptr %12, align 4
  br label %3185

3181:                                             ; preds = %3173
  %3182 = landingpad { ptr, i32 }
          cleanup
  %3183 = extractvalue { ptr, i32 } %3182, 0
  store ptr %3183, ptr %11, align 8
  %3184 = extractvalue { ptr, i32 } %3182, 1
  store i32 %3184, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %234) #10
  br label %3185

3185:                                             ; preds = %3181, %3177
  call void @llvm.lifetime.end.p0(i64 40, ptr %234) #10
  br label %3186

3186:                                             ; preds = %3185, %3150, %3130
  call void @llvm.lifetime.end.p0(i64 8, ptr %231) #10
  br label %3187

3187:                                             ; preds = %3186, %3126
  call void @llvm.lifetime.end.p0(i64 8, ptr %230) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %229) #10
  br label %3393

3188:                                             ; preds = %3125
  br label %3189

3189:                                             ; preds = %3188
  store i8 0, ptr %229, align 1, !tbaa !9
  br label %3109, !llvm.loop !80

3190:                                             ; preds = %3112
  br label %3391

3191:                                             ; preds = %3101
  call void @llvm.lifetime.start.p0(i64 1, ptr %236) #10
  store i8 1, ptr %236, align 1, !tbaa !9
  br label %3192

3192:                                             ; preds = %3290, %3191
  %3193 = load i8, ptr %236, align 1, !tbaa !9, !range !40, !noundef !41
  %3194 = trunc i8 %3193 to i1
  br i1 %3194, label %3196, label %3195

3195:                                             ; preds = %3192
  store i32 130, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %236) #10
  br label %3291

3196:                                             ; preds = %3192
  call void @llvm.lifetime.start.p0(i64 8, ptr %237) #10
  %3197 = load ptr, ptr %227, align 8, !tbaa !5
  %3198 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %3197)
          to label %3199 unwind label %3209

3199:                                             ; preds = %3196
  store ptr %3198, ptr %237, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %238) #10
  %3200 = load ptr, ptr %228, align 8, !tbaa !5
  %3201 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %3200)
          to label %3202 unwind label %3213

3202:                                             ; preds = %3199
  store ptr %3201, ptr %238, align 8, !tbaa !5
  br label %3203

3203:                                             ; preds = %3277, %3202
  %3204 = load ptr, ptr %237, align 8, !tbaa !5
  %3205 = load ptr, ptr %238, align 8, !tbaa !5
  %3206 = load i8, ptr %236, align 1, !tbaa !9, !range !40, !noundef !41
  %3207 = trunc i8 %3206 to i1
  br i1 %3207, label %3217, label %3208

3208:                                             ; preds = %3203
  store i32 133, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %238) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #10
  br label %3289

3209:                                             ; preds = %3196
  %3210 = landingpad { ptr, i32 }
          cleanup
  %3211 = extractvalue { ptr, i32 } %3210, 0
  store ptr %3211, ptr %11, align 8
  %3212 = extractvalue { ptr, i32 } %3210, 1
  store i32 %3212, ptr %12, align 4
  br label %3288

3213:                                             ; preds = %3199
  %3214 = landingpad { ptr, i32 }
          cleanup
  %3215 = extractvalue { ptr, i32 } %3214, 0
  store ptr %3215, ptr %11, align 8
  %3216 = extractvalue { ptr, i32 } %3214, 1
  store i32 %3216, ptr %12, align 4
  br label %3287

3217:                                             ; preds = %3203
  br label %3218

3218:                                             ; preds = %3217
  %3219 = load ptr, ptr %237, align 8, !tbaa !5
  %3220 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3219, i32 0, i32 1
  %3221 = load i32, ptr %3220, align 8, !tbaa !60
  %3222 = load ptr, ptr %238, align 8, !tbaa !5
  %3223 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3222, i32 0, i32 1
  %3224 = load i32, ptr %3223, align 8, !tbaa !60
  %3225 = icmp eq i32 %3221, %3224
  br i1 %3225, label %3237, label %3226

3226:                                             ; preds = %3218
  %3227 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %240) #10
  %3228 = getelementptr inbounds %class.anon.487, ptr %240, i32 0, i32 0
  %3229 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3229, ptr %3228, align 8, !tbaa !5
  %3230 = getelementptr inbounds %class.anon.487, ptr %240, i32 0, i32 1
  %3231 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3231, ptr %3230, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %239, ptr noundef nonnull align 8 dereferenceable(16) %240) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3227, ptr noundef %239)
          to label %3232 unwind label %3233

3232:                                             ; preds = %3226
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %240) #10
  br label %3237

3233:                                             ; preds = %3226
  %3234 = landingpad { ptr, i32 }
          cleanup
  %3235 = extractvalue { ptr, i32 } %3234, 0
  store ptr %3235, ptr %11, align 8
  %3236 = extractvalue { ptr, i32 } %3234, 1
  store i32 %3236, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %240) #10
  br label %3287

3237:                                             ; preds = %3232, %3218
  br label %3238

3238:                                             ; preds = %3237
  br label %3239

3239:                                             ; preds = %3238
  call void @llvm.lifetime.start.p0(i64 40, ptr %241) #10
  %3240 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %242, i32 0, i32 0
  %3241 = load ptr, ptr %237, align 8, !tbaa !5
  %3242 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3241, i32 0, i32 1
  %3243 = load i32, ptr %3242, align 8, !tbaa !60
  %3244 = load ptr, ptr %237, align 8, !tbaa !5
  %3245 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3244, i32 0, i32 0
  %3246 = load ptr, ptr %238, align 8, !tbaa !5
  %3247 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3246, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %244, ptr align 8 %3247, i64 16, i1 false), !tbaa.struct !56
  %3248 = getelementptr inbounds { i64, i64 }, ptr %244, i32 0, i32 0
  %3249 = load i64, ptr %3248, align 8
  %3250 = getelementptr inbounds { i64, i64 }, ptr %244, i32 0, i32 1
  %3251 = load i64, ptr %3250, align 8
  %3252 = invoke { i64, i64 } @_ZNK4S128miES_(ptr noundef nonnull align 8 dereferenceable(16) %3245, i64 %3249, i64 %3251)
          to label %3253 unwind label %3278

3253:                                             ; preds = %3239
  %3254 = getelementptr inbounds %class.S128, ptr %243, i32 0, i32 0
  %3255 = getelementptr inbounds { i64, i64 }, ptr %3254, i32 0, i32 0
  %3256 = extractvalue { i64, i64 } %3252, 0
  store i64 %3256, ptr %3255, align 8
  %3257 = getelementptr inbounds { i64, i64 }, ptr %3254, i32 0, i32 1
  %3258 = extractvalue { i64, i64 } %3252, 1
  store i64 %3258, ptr %3257, align 8
  %3259 = getelementptr inbounds { i64, i64 }, ptr %243, i32 0, i32 0
  %3260 = load i64, ptr %3259, align 8
  %3261 = getelementptr inbounds { i64, i64 }, ptr %243, i32 0, i32 1
  %3262 = load i64, ptr %3261, align 8
  %3263 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %3243, i64 %3260, i64 %3262)
          to label %3264 unwind label %3278

3264:                                             ; preds = %3253
  %3265 = getelementptr inbounds %class.S128, ptr %3240, i32 0, i32 0
  %3266 = getelementptr inbounds { i64, i64 }, ptr %3265, i32 0, i32 0
  %3267 = extractvalue { i64, i64 } %3263, 0
  store i64 %3267, ptr %3266, align 8
  %3268 = getelementptr inbounds { i64, i64 }, ptr %3265, i32 0, i32 1
  %3269 = extractvalue { i64, i64 } %3263, 1
  store i64 %3269, ptr %3268, align 8
  %3270 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %242, i32 0, i32 1
  %3271 = load ptr, ptr %237, align 8, !tbaa !5
  %3272 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3271, i32 0, i32 1
  %3273 = load i32, ptr %3272, align 8, !tbaa !60
  store i32 %3273, ptr %3270, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %241, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %242)
          to label %3274 unwind label %3278

3274:                                             ; preds = %3264
  %3275 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %241)
          to label %3276 unwind label %3282

3276:                                             ; preds = %3274
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %241) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %241) #10
  br label %3277

3277:                                             ; preds = %3276
  store i8 0, ptr %236, align 1, !tbaa !9
  br label %3203, !llvm.loop !81

3278:                                             ; preds = %3264, %3253, %3239
  %3279 = landingpad { ptr, i32 }
          cleanup
  %3280 = extractvalue { ptr, i32 } %3279, 0
  store ptr %3280, ptr %11, align 8
  %3281 = extractvalue { ptr, i32 } %3279, 1
  store i32 %3281, ptr %12, align 4
  br label %3286

3282:                                             ; preds = %3274
  %3283 = landingpad { ptr, i32 }
          cleanup
  %3284 = extractvalue { ptr, i32 } %3283, 0
  store ptr %3284, ptr %11, align 8
  %3285 = extractvalue { ptr, i32 } %3283, 1
  store i32 %3285, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %241) #10
  br label %3286

3286:                                             ; preds = %3282, %3278
  call void @llvm.lifetime.end.p0(i64 40, ptr %241) #10
  br label %3287

3287:                                             ; preds = %3286, %3233, %3213
  call void @llvm.lifetime.end.p0(i64 8, ptr %238) #10
  br label %3288

3288:                                             ; preds = %3287, %3209
  call void @llvm.lifetime.end.p0(i64 8, ptr %237) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %236) #10
  br label %3393

3289:                                             ; preds = %3208
  br label %3290

3290:                                             ; preds = %3289
  store i8 0, ptr %236, align 1, !tbaa !9
  br label %3192, !llvm.loop !82

3291:                                             ; preds = %3195
  br label %3391

3292:                                             ; preds = %3101
  call void @llvm.lifetime.start.p0(i64 1, ptr %245) #10
  store i8 1, ptr %245, align 1, !tbaa !9
  br label %3293

3293:                                             ; preds = %3389, %3292
  %3294 = load i8, ptr %245, align 1, !tbaa !9, !range !40, !noundef !41
  %3295 = trunc i8 %3294 to i1
  br i1 %3295, label %3297, label %3296

3296:                                             ; preds = %3293
  store i32 138, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %245) #10
  br label %3390

3297:                                             ; preds = %3293
  call void @llvm.lifetime.start.p0(i64 8, ptr %246) #10
  %3298 = load ptr, ptr %227, align 8, !tbaa !5
  %3299 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %3298)
          to label %3300 unwind label %3310

3300:                                             ; preds = %3297
  store ptr %3299, ptr %246, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %247) #10
  %3301 = load ptr, ptr %228, align 8, !tbaa !5
  %3302 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %3301)
          to label %3303 unwind label %3314

3303:                                             ; preds = %3300
  store ptr %3302, ptr %247, align 8, !tbaa !5
  br label %3304

3304:                                             ; preds = %3376, %3303
  %3305 = load ptr, ptr %246, align 8, !tbaa !5
  %3306 = load ptr, ptr %247, align 8, !tbaa !5
  %3307 = load i8, ptr %245, align 1, !tbaa !9, !range !40, !noundef !41
  %3308 = trunc i8 %3307 to i1
  br i1 %3308, label %3318, label %3309

3309:                                             ; preds = %3304
  store i32 141, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #10
  br label %3388

3310:                                             ; preds = %3297
  %3311 = landingpad { ptr, i32 }
          cleanup
  %3312 = extractvalue { ptr, i32 } %3311, 0
  store ptr %3312, ptr %11, align 8
  %3313 = extractvalue { ptr, i32 } %3311, 1
  store i32 %3313, ptr %12, align 4
  br label %3387

3314:                                             ; preds = %3300
  %3315 = landingpad { ptr, i32 }
          cleanup
  %3316 = extractvalue { ptr, i32 } %3315, 0
  store ptr %3316, ptr %11, align 8
  %3317 = extractvalue { ptr, i32 } %3315, 1
  store i32 %3317, ptr %12, align 4
  br label %3386

3318:                                             ; preds = %3304
  br label %3319

3319:                                             ; preds = %3318
  %3320 = load ptr, ptr %246, align 8, !tbaa !5
  %3321 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3320, i32 0, i32 1
  %3322 = load i32, ptr %3321, align 8, !tbaa !21
  %3323 = load ptr, ptr %247, align 8, !tbaa !5
  %3324 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3323, i32 0, i32 1
  %3325 = load i32, ptr %3324, align 8, !tbaa !21
  %3326 = icmp eq i32 %3322, %3325
  br i1 %3326, label %3338, label %3327

3327:                                             ; preds = %3319
  %3328 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %249) #10
  %3329 = getelementptr inbounds %class.anon.488, ptr %249, i32 0, i32 0
  %3330 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3330, ptr %3329, align 8, !tbaa !5
  %3331 = getelementptr inbounds %class.anon.488, ptr %249, i32 0, i32 1
  %3332 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3332, ptr %3331, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %248, ptr noundef nonnull align 8 dereferenceable(16) %249) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3328, ptr noundef %248)
          to label %3333 unwind label %3334

3333:                                             ; preds = %3327
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %249) #10
  br label %3338

3334:                                             ; preds = %3327
  %3335 = landingpad { ptr, i32 }
          cleanup
  %3336 = extractvalue { ptr, i32 } %3335, 0
  store ptr %3336, ptr %11, align 8
  %3337 = extractvalue { ptr, i32 } %3335, 1
  store i32 %3337, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %248) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %249) #10
  br label %3386

3338:                                             ; preds = %3333, %3319
  br label %3339

3339:                                             ; preds = %3338
  br label %3340

3340:                                             ; preds = %3339
  call void @llvm.lifetime.start.p0(i64 40, ptr %250) #10
  %3341 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %251, i32 0, i32 0
  %3342 = load ptr, ptr %246, align 8, !tbaa !5
  %3343 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3342, i32 0, i32 1
  %3344 = load i32, ptr %3343, align 8, !tbaa !21
  %3345 = load ptr, ptr %246, align 8, !tbaa !5
  %3346 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3345, i32 0, i32 0
  %3347 = load ptr, ptr %247, align 8, !tbaa !5
  %3348 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3347, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %253, ptr align 8 %3348, i64 16, i1 false), !tbaa.struct !56
  %3349 = getelementptr inbounds { i64, i64 }, ptr %253, i32 0, i32 0
  %3350 = load i64, ptr %3349, align 8
  %3351 = getelementptr inbounds { i64, i64 }, ptr %253, i32 0, i32 1
  %3352 = load i64, ptr %3351, align 8
  %3353 = invoke { i64, i64 } @_ZNK4U128miES_(ptr noundef nonnull align 8 dereferenceable(16) %3346, i64 %3350, i64 %3352)
          to label %3354 unwind label %3377

3354:                                             ; preds = %3340
  %3355 = getelementptr inbounds { i64, i64 }, ptr %252, i32 0, i32 0
  %3356 = extractvalue { i64, i64 } %3353, 0
  store i64 %3356, ptr %3355, align 8
  %3357 = getelementptr inbounds { i64, i64 }, ptr %252, i32 0, i32 1
  %3358 = extractvalue { i64, i64 } %3353, 1
  store i64 %3358, ptr %3357, align 8
  %3359 = getelementptr inbounds { i64, i64 }, ptr %252, i32 0, i32 0
  %3360 = load i64, ptr %3359, align 8
  %3361 = getelementptr inbounds { i64, i64 }, ptr %252, i32 0, i32 1
  %3362 = load i64, ptr %3361, align 8
  %3363 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %3344, i64 %3360, i64 %3362)
          to label %3364 unwind label %3377

3364:                                             ; preds = %3354
  %3365 = getelementptr inbounds { i64, i64 }, ptr %3341, i32 0, i32 0
  %3366 = extractvalue { i64, i64 } %3363, 0
  store i64 %3366, ptr %3365, align 8
  %3367 = getelementptr inbounds { i64, i64 }, ptr %3341, i32 0, i32 1
  %3368 = extractvalue { i64, i64 } %3363, 1
  store i64 %3368, ptr %3367, align 8
  %3369 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %251, i32 0, i32 1
  %3370 = load ptr, ptr %246, align 8, !tbaa !5
  %3371 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3370, i32 0, i32 1
  %3372 = load i32, ptr %3371, align 8, !tbaa !21
  store i32 %3372, ptr %3369, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %250, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %251)
          to label %3373 unwind label %3377

3373:                                             ; preds = %3364
  %3374 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %250)
          to label %3375 unwind label %3381

3375:                                             ; preds = %3373
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %250) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %250) #10
  br label %3376

3376:                                             ; preds = %3375
  store i8 0, ptr %245, align 1, !tbaa !9
  br label %3304, !llvm.loop !83

3377:                                             ; preds = %3364, %3354, %3340
  %3378 = landingpad { ptr, i32 }
          cleanup
  %3379 = extractvalue { ptr, i32 } %3378, 0
  store ptr %3379, ptr %11, align 8
  %3380 = extractvalue { ptr, i32 } %3378, 1
  store i32 %3380, ptr %12, align 4
  br label %3385

3381:                                             ; preds = %3373
  %3382 = landingpad { ptr, i32 }
          cleanup
  %3383 = extractvalue { ptr, i32 } %3382, 0
  store ptr %3383, ptr %11, align 8
  %3384 = extractvalue { ptr, i32 } %3382, 1
  store i32 %3384, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %250) #10
  br label %3385

3385:                                             ; preds = %3381, %3377
  call void @llvm.lifetime.end.p0(i64 40, ptr %250) #10
  br label %3386

3386:                                             ; preds = %3385, %3334, %3314
  call void @llvm.lifetime.end.p0(i64 8, ptr %247) #10
  br label %3387

3387:                                             ; preds = %3386, %3310
  call void @llvm.lifetime.end.p0(i64 8, ptr %246) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %245) #10
  br label %3393

3388:                                             ; preds = %3309
  br label %3389

3389:                                             ; preds = %3388
  store i8 0, ptr %245, align 1, !tbaa !9
  br label %3293, !llvm.loop !84

3390:                                             ; preds = %3296
  br label %3391

3391:                                             ; preds = %3390, %3291, %3190, %3107
  br label %3392

3392:                                             ; preds = %3391
  store i8 0, ptr %226, align 1, !tbaa !9
  br label %3094, !llvm.loop !85

3393:                                             ; preds = %3387, %3288, %3187, %3102
  call void @llvm.lifetime.end.p0(i64 8, ptr %228) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %227) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %226) #10
  br label %5982

3394:                                             ; preds = %3097
  br label %3395

3395:                                             ; preds = %3394
  store i8 0, ptr %226, align 1, !tbaa !9
  br label %3087, !llvm.loop !86

3396:                                             ; preds = %3090
  br label %5926

3397:                                             ; preds = %2563
  br label %3398

3398:                                             ; preds = %3397
  %3399 = load ptr, ptr %179, align 8, !tbaa !5
  %3400 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3399)
          to label %3401 unwind label %2587

3401:                                             ; preds = %3398
  %3402 = load ptr, ptr %180, align 8, !tbaa !5
  %3403 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3402)
          to label %3404 unwind label %2587

3404:                                             ; preds = %3401
  %3405 = icmp eq i32 %3400, %3403
  br i1 %3405, label %3417, label %3406

3406:                                             ; preds = %3404
  %3407 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %255) #10
  %3408 = getelementptr inbounds %class.anon.489, ptr %255, i32 0, i32 0
  %3409 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3409, ptr %3408, align 8, !tbaa !5
  %3410 = getelementptr inbounds %class.anon.489, ptr %255, i32 0, i32 1
  %3411 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3411, ptr %3410, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_19vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %254, ptr noundef nonnull align 8 dereferenceable(16) %255) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3407, ptr noundef %254)
          to label %3412 unwind label %3413

3412:                                             ; preds = %3406
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %255) #10
  br label %3417

3413:                                             ; preds = %3406
  %3414 = landingpad { ptr, i32 }
          cleanup
  %3415 = extractvalue { ptr, i32 } %3414, 0
  store ptr %3415, ptr %11, align 8
  %3416 = extractvalue { ptr, i32 } %3414, 1
  store i32 %3416, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %254) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %255) #10
  br label %5982

3417:                                             ; preds = %3412, %3404
  br label %3418

3418:                                             ; preds = %3417
  br label %3419

3419:                                             ; preds = %3418
  call void @llvm.lifetime.start.p0(i64 1, ptr %256) #10
  store i8 1, ptr %256, align 1, !tbaa !9
  br label %3420

3420:                                             ; preds = %3728, %3419
  %3421 = load i8, ptr %256, align 1, !tbaa !9, !range !40, !noundef !41
  %3422 = trunc i8 %3421 to i1
  br i1 %3422, label %3424, label %3423

3423:                                             ; preds = %3420
  store i32 148, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %256) #10
  br label %3729

3424:                                             ; preds = %3420
  call void @llvm.lifetime.start.p0(i64 8, ptr %257) #10
  %3425 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3425, ptr %257, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %258) #10
  %3426 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3426, ptr %258, align 8, !tbaa !5
  br label %3427

3427:                                             ; preds = %3725, %3424
  %3428 = load i8, ptr %256, align 1, !tbaa !9, !range !40, !noundef !41
  %3429 = trunc i8 %3428 to i1
  br i1 %3429, label %3431, label %3430

3430:                                             ; preds = %3427
  store i32 151, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %258) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %257) #10
  br label %3727

3431:                                             ; preds = %3427
  %3432 = load ptr, ptr %257, align 8, !tbaa !5
  %3433 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3432)
          to label %3434 unwind label %3435

3434:                                             ; preds = %3431
  switch i32 %3433, label %3440 [
    i32 0, label %3439
    i32 3, label %3441
    i32 1, label %3524
    i32 2, label %3625
  ]

3435:                                             ; preds = %3431
  %3436 = landingpad { ptr, i32 }
          cleanup
  %3437 = extractvalue { ptr, i32 } %3436, 0
  store ptr %3437, ptr %11, align 8
  %3438 = extractvalue { ptr, i32 } %3436, 1
  store i32 %3438, ptr %12, align 4
  br label %3726

3439:                                             ; preds = %3434
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4049, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

3440:                                             ; preds = %3434
  br label %3724

3441:                                             ; preds = %3434
  call void @llvm.lifetime.start.p0(i64 1, ptr %259) #10
  store i8 1, ptr %259, align 1, !tbaa !9
  br label %3442

3442:                                             ; preds = %3522, %3441
  %3443 = load i8, ptr %259, align 1, !tbaa !9, !range !40, !noundef !41
  %3444 = trunc i8 %3443 to i1
  br i1 %3444, label %3446, label %3445

3445:                                             ; preds = %3442
  store i32 155, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %259) #10
  br label %3523

3446:                                             ; preds = %3442
  call void @llvm.lifetime.start.p0(i64 8, ptr %260) #10
  %3447 = load ptr, ptr %257, align 8, !tbaa !5
  %3448 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %3447)
          to label %3449 unwind label %3459

3449:                                             ; preds = %3446
  store ptr %3448, ptr %260, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %261) #10
  %3450 = load ptr, ptr %258, align 8, !tbaa !5
  %3451 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %3450)
          to label %3452 unwind label %3463

3452:                                             ; preds = %3449
  store ptr %3451, ptr %261, align 8, !tbaa !5
  br label %3453

3453:                                             ; preds = %3509, %3452
  %3454 = load ptr, ptr %260, align 8, !tbaa !5
  %3455 = load ptr, ptr %261, align 8, !tbaa !5
  %3456 = load i8, ptr %259, align 1, !tbaa !9, !range !40, !noundef !41
  %3457 = trunc i8 %3456 to i1
  br i1 %3457, label %3467, label %3458

3458:                                             ; preds = %3453
  store i32 158, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %261) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #10
  br label %3521

3459:                                             ; preds = %3446
  %3460 = landingpad { ptr, i32 }
          cleanup
  %3461 = extractvalue { ptr, i32 } %3460, 0
  store ptr %3461, ptr %11, align 8
  %3462 = extractvalue { ptr, i32 } %3460, 1
  store i32 %3462, ptr %12, align 4
  br label %3520

3463:                                             ; preds = %3449
  %3464 = landingpad { ptr, i32 }
          cleanup
  %3465 = extractvalue { ptr, i32 } %3464, 0
  store ptr %3465, ptr %11, align 8
  %3466 = extractvalue { ptr, i32 } %3464, 1
  store i32 %3466, ptr %12, align 4
  br label %3519

3467:                                             ; preds = %3453
  br label %3468

3468:                                             ; preds = %3467
  %3469 = load ptr, ptr %260, align 8, !tbaa !5
  %3470 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3469, i32 0, i32 1
  %3471 = load i32, ptr %3470, align 8, !tbaa !70
  %3472 = load ptr, ptr %261, align 8, !tbaa !5
  %3473 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3472, i32 0, i32 1
  %3474 = load i32, ptr %3473, align 8, !tbaa !70
  %3475 = icmp eq i32 %3471, %3474
  br i1 %3475, label %3487, label %3476

3476:                                             ; preds = %3468
  %3477 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %263) #10
  %3478 = getelementptr inbounds %class.anon.490, ptr %263, i32 0, i32 0
  %3479 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3479, ptr %3478, align 8, !tbaa !5
  %3480 = getelementptr inbounds %class.anon.490, ptr %263, i32 0, i32 1
  %3481 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3481, ptr %3480, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_20vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %262, ptr noundef nonnull align 8 dereferenceable(16) %263) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3477, ptr noundef %262)
          to label %3482 unwind label %3483

3482:                                             ; preds = %3476
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %263) #10
  br label %3487

3483:                                             ; preds = %3476
  %3484 = landingpad { ptr, i32 }
          cleanup
  %3485 = extractvalue { ptr, i32 } %3484, 0
  store ptr %3485, ptr %11, align 8
  %3486 = extractvalue { ptr, i32 } %3484, 1
  store i32 %3486, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %262) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %263) #10
  br label %3519

3487:                                             ; preds = %3482, %3468
  br label %3488

3488:                                             ; preds = %3487
  br label %3489

3489:                                             ; preds = %3488
  call void @llvm.lifetime.start.p0(i64 40, ptr %264) #10
  %3490 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %265, i32 0, i32 0
  %3491 = load ptr, ptr %260, align 8, !tbaa !5
  %3492 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3491, i32 0, i32 0
  %3493 = load double, ptr %3492, align 8, !tbaa !57
  %3494 = load ptr, ptr %261, align 8, !tbaa !5
  %3495 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3494, i32 0, i32 0
  %3496 = load double, ptr %3495, align 8, !tbaa !57
  %3497 = fmul double %3493, %3496
  store double %3497, ptr %3490, align 8, !tbaa !57
  %3498 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %265, i32 0, i32 1
  %3499 = load ptr, ptr %260, align 8, !tbaa !5
  %3500 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3499, i32 0, i32 1
  %3501 = load i32, ptr %3500, align 8, !tbaa !70
  store i32 %3501, ptr %3498, align 8, !tbaa !70
  %3502 = getelementptr inbounds { double, i32 }, ptr %265, i32 0, i32 0
  %3503 = load double, ptr %3502, align 8
  %3504 = getelementptr inbounds { double, i32 }, ptr %265, i32 0, i32 1
  %3505 = load i32, ptr %3504, align 8
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %264, double %3503, i32 %3505)
          to label %3506 unwind label %3510

3506:                                             ; preds = %3489
  %3507 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %264)
          to label %3508 unwind label %3514

3508:                                             ; preds = %3506
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %264) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %264) #10
  br label %3509

3509:                                             ; preds = %3508
  store i8 0, ptr %259, align 1, !tbaa !9
  br label %3453, !llvm.loop !87

3510:                                             ; preds = %3489
  %3511 = landingpad { ptr, i32 }
          cleanup
  %3512 = extractvalue { ptr, i32 } %3511, 0
  store ptr %3512, ptr %11, align 8
  %3513 = extractvalue { ptr, i32 } %3511, 1
  store i32 %3513, ptr %12, align 4
  br label %3518

3514:                                             ; preds = %3506
  %3515 = landingpad { ptr, i32 }
          cleanup
  %3516 = extractvalue { ptr, i32 } %3515, 0
  store ptr %3516, ptr %11, align 8
  %3517 = extractvalue { ptr, i32 } %3515, 1
  store i32 %3517, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %264) #10
  br label %3518

3518:                                             ; preds = %3514, %3510
  call void @llvm.lifetime.end.p0(i64 40, ptr %264) #10
  br label %3519

3519:                                             ; preds = %3518, %3483, %3463
  call void @llvm.lifetime.end.p0(i64 8, ptr %261) #10
  br label %3520

3520:                                             ; preds = %3519, %3459
  call void @llvm.lifetime.end.p0(i64 8, ptr %260) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %259) #10
  br label %3726

3521:                                             ; preds = %3458
  br label %3522

3522:                                             ; preds = %3521
  store i8 0, ptr %259, align 1, !tbaa !9
  br label %3442, !llvm.loop !88

3523:                                             ; preds = %3445
  br label %3724

3524:                                             ; preds = %3434
  call void @llvm.lifetime.start.p0(i64 1, ptr %266) #10
  store i8 1, ptr %266, align 1, !tbaa !9
  br label %3525

3525:                                             ; preds = %3623, %3524
  %3526 = load i8, ptr %266, align 1, !tbaa !9, !range !40, !noundef !41
  %3527 = trunc i8 %3526 to i1
  br i1 %3527, label %3529, label %3528

3528:                                             ; preds = %3525
  store i32 163, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %266) #10
  br label %3624

3529:                                             ; preds = %3525
  call void @llvm.lifetime.start.p0(i64 8, ptr %267) #10
  %3530 = load ptr, ptr %257, align 8, !tbaa !5
  %3531 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %3530)
          to label %3532 unwind label %3542

3532:                                             ; preds = %3529
  store ptr %3531, ptr %267, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %268) #10
  %3533 = load ptr, ptr %258, align 8, !tbaa !5
  %3534 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %3533)
          to label %3535 unwind label %3546

3535:                                             ; preds = %3532
  store ptr %3534, ptr %268, align 8, !tbaa !5
  br label %3536

3536:                                             ; preds = %3610, %3535
  %3537 = load ptr, ptr %267, align 8, !tbaa !5
  %3538 = load ptr, ptr %268, align 8, !tbaa !5
  %3539 = load i8, ptr %266, align 1, !tbaa !9, !range !40, !noundef !41
  %3540 = trunc i8 %3539 to i1
  br i1 %3540, label %3550, label %3541

3541:                                             ; preds = %3536
  store i32 166, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %268) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %267) #10
  br label %3622

3542:                                             ; preds = %3529
  %3543 = landingpad { ptr, i32 }
          cleanup
  %3544 = extractvalue { ptr, i32 } %3543, 0
  store ptr %3544, ptr %11, align 8
  %3545 = extractvalue { ptr, i32 } %3543, 1
  store i32 %3545, ptr %12, align 4
  br label %3621

3546:                                             ; preds = %3532
  %3547 = landingpad { ptr, i32 }
          cleanup
  %3548 = extractvalue { ptr, i32 } %3547, 0
  store ptr %3548, ptr %11, align 8
  %3549 = extractvalue { ptr, i32 } %3547, 1
  store i32 %3549, ptr %12, align 4
  br label %3620

3550:                                             ; preds = %3536
  br label %3551

3551:                                             ; preds = %3550
  %3552 = load ptr, ptr %267, align 8, !tbaa !5
  %3553 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3552, i32 0, i32 1
  %3554 = load i32, ptr %3553, align 8, !tbaa !60
  %3555 = load ptr, ptr %268, align 8, !tbaa !5
  %3556 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3555, i32 0, i32 1
  %3557 = load i32, ptr %3556, align 8, !tbaa !60
  %3558 = icmp eq i32 %3554, %3557
  br i1 %3558, label %3570, label %3559

3559:                                             ; preds = %3551
  %3560 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %270) #10
  %3561 = getelementptr inbounds %class.anon.491, ptr %270, i32 0, i32 0
  %3562 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3562, ptr %3561, align 8, !tbaa !5
  %3563 = getelementptr inbounds %class.anon.491, ptr %270, i32 0, i32 1
  %3564 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3564, ptr %3563, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_21vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %269, ptr noundef nonnull align 8 dereferenceable(16) %270) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3560, ptr noundef %269)
          to label %3565 unwind label %3566

3565:                                             ; preds = %3559
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %269) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %270) #10
  br label %3570

3566:                                             ; preds = %3559
  %3567 = landingpad { ptr, i32 }
          cleanup
  %3568 = extractvalue { ptr, i32 } %3567, 0
  store ptr %3568, ptr %11, align 8
  %3569 = extractvalue { ptr, i32 } %3567, 1
  store i32 %3569, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %269) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %270) #10
  br label %3620

3570:                                             ; preds = %3565, %3551
  br label %3571

3571:                                             ; preds = %3570
  br label %3572

3572:                                             ; preds = %3571
  call void @llvm.lifetime.start.p0(i64 40, ptr %271) #10
  %3573 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %272, i32 0, i32 0
  %3574 = load ptr, ptr %267, align 8, !tbaa !5
  %3575 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3574, i32 0, i32 1
  %3576 = load i32, ptr %3575, align 8, !tbaa !60
  %3577 = load ptr, ptr %267, align 8, !tbaa !5
  %3578 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3577, i32 0, i32 0
  %3579 = load ptr, ptr %268, align 8, !tbaa !5
  %3580 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3579, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %274, ptr align 8 %3580, i64 16, i1 false), !tbaa.struct !56
  %3581 = getelementptr inbounds { i64, i64 }, ptr %274, i32 0, i32 0
  %3582 = load i64, ptr %3581, align 8
  %3583 = getelementptr inbounds { i64, i64 }, ptr %274, i32 0, i32 1
  %3584 = load i64, ptr %3583, align 8
  %3585 = invoke { i64, i64 } @_ZNK4S128mlES_(ptr noundef nonnull align 8 dereferenceable(16) %3578, i64 %3582, i64 %3584)
          to label %3586 unwind label %3611

3586:                                             ; preds = %3572
  %3587 = getelementptr inbounds %class.S128, ptr %273, i32 0, i32 0
  %3588 = getelementptr inbounds { i64, i64 }, ptr %3587, i32 0, i32 0
  %3589 = extractvalue { i64, i64 } %3585, 0
  store i64 %3589, ptr %3588, align 8
  %3590 = getelementptr inbounds { i64, i64 }, ptr %3587, i32 0, i32 1
  %3591 = extractvalue { i64, i64 } %3585, 1
  store i64 %3591, ptr %3590, align 8
  %3592 = getelementptr inbounds { i64, i64 }, ptr %273, i32 0, i32 0
  %3593 = load i64, ptr %3592, align 8
  %3594 = getelementptr inbounds { i64, i64 }, ptr %273, i32 0, i32 1
  %3595 = load i64, ptr %3594, align 8
  %3596 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %3576, i64 %3593, i64 %3595)
          to label %3597 unwind label %3611

3597:                                             ; preds = %3586
  %3598 = getelementptr inbounds %class.S128, ptr %3573, i32 0, i32 0
  %3599 = getelementptr inbounds { i64, i64 }, ptr %3598, i32 0, i32 0
  %3600 = extractvalue { i64, i64 } %3596, 0
  store i64 %3600, ptr %3599, align 8
  %3601 = getelementptr inbounds { i64, i64 }, ptr %3598, i32 0, i32 1
  %3602 = extractvalue { i64, i64 } %3596, 1
  store i64 %3602, ptr %3601, align 8
  %3603 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %272, i32 0, i32 1
  %3604 = load ptr, ptr %267, align 8, !tbaa !5
  %3605 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3604, i32 0, i32 1
  %3606 = load i32, ptr %3605, align 8, !tbaa !60
  store i32 %3606, ptr %3603, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %271, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %272)
          to label %3607 unwind label %3611

3607:                                             ; preds = %3597
  %3608 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %271)
          to label %3609 unwind label %3615

3609:                                             ; preds = %3607
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %271) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %271) #10
  br label %3610

3610:                                             ; preds = %3609
  store i8 0, ptr %266, align 1, !tbaa !9
  br label %3536, !llvm.loop !89

3611:                                             ; preds = %3597, %3586, %3572
  %3612 = landingpad { ptr, i32 }
          cleanup
  %3613 = extractvalue { ptr, i32 } %3612, 0
  store ptr %3613, ptr %11, align 8
  %3614 = extractvalue { ptr, i32 } %3612, 1
  store i32 %3614, ptr %12, align 4
  br label %3619

3615:                                             ; preds = %3607
  %3616 = landingpad { ptr, i32 }
          cleanup
  %3617 = extractvalue { ptr, i32 } %3616, 0
  store ptr %3617, ptr %11, align 8
  %3618 = extractvalue { ptr, i32 } %3616, 1
  store i32 %3618, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %271) #10
  br label %3619

3619:                                             ; preds = %3615, %3611
  call void @llvm.lifetime.end.p0(i64 40, ptr %271) #10
  br label %3620

3620:                                             ; preds = %3619, %3566, %3546
  call void @llvm.lifetime.end.p0(i64 8, ptr %268) #10
  br label %3621

3621:                                             ; preds = %3620, %3542
  call void @llvm.lifetime.end.p0(i64 8, ptr %267) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %266) #10
  br label %3726

3622:                                             ; preds = %3541
  br label %3623

3623:                                             ; preds = %3622
  store i8 0, ptr %266, align 1, !tbaa !9
  br label %3525, !llvm.loop !90

3624:                                             ; preds = %3528
  br label %3724

3625:                                             ; preds = %3434
  call void @llvm.lifetime.start.p0(i64 1, ptr %275) #10
  store i8 1, ptr %275, align 1, !tbaa !9
  br label %3626

3626:                                             ; preds = %3722, %3625
  %3627 = load i8, ptr %275, align 1, !tbaa !9, !range !40, !noundef !41
  %3628 = trunc i8 %3627 to i1
  br i1 %3628, label %3630, label %3629

3629:                                             ; preds = %3626
  store i32 171, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %275) #10
  br label %3723

3630:                                             ; preds = %3626
  call void @llvm.lifetime.start.p0(i64 8, ptr %276) #10
  %3631 = load ptr, ptr %257, align 8, !tbaa !5
  %3632 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %3631)
          to label %3633 unwind label %3643

3633:                                             ; preds = %3630
  store ptr %3632, ptr %276, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %277) #10
  %3634 = load ptr, ptr %258, align 8, !tbaa !5
  %3635 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %3634)
          to label %3636 unwind label %3647

3636:                                             ; preds = %3633
  store ptr %3635, ptr %277, align 8, !tbaa !5
  br label %3637

3637:                                             ; preds = %3709, %3636
  %3638 = load ptr, ptr %276, align 8, !tbaa !5
  %3639 = load ptr, ptr %277, align 8, !tbaa !5
  %3640 = load i8, ptr %275, align 1, !tbaa !9, !range !40, !noundef !41
  %3641 = trunc i8 %3640 to i1
  br i1 %3641, label %3651, label %3642

3642:                                             ; preds = %3637
  store i32 174, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %277) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #10
  br label %3721

3643:                                             ; preds = %3630
  %3644 = landingpad { ptr, i32 }
          cleanup
  %3645 = extractvalue { ptr, i32 } %3644, 0
  store ptr %3645, ptr %11, align 8
  %3646 = extractvalue { ptr, i32 } %3644, 1
  store i32 %3646, ptr %12, align 4
  br label %3720

3647:                                             ; preds = %3633
  %3648 = landingpad { ptr, i32 }
          cleanup
  %3649 = extractvalue { ptr, i32 } %3648, 0
  store ptr %3649, ptr %11, align 8
  %3650 = extractvalue { ptr, i32 } %3648, 1
  store i32 %3650, ptr %12, align 4
  br label %3719

3651:                                             ; preds = %3637
  br label %3652

3652:                                             ; preds = %3651
  %3653 = load ptr, ptr %276, align 8, !tbaa !5
  %3654 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3653, i32 0, i32 1
  %3655 = load i32, ptr %3654, align 8, !tbaa !21
  %3656 = load ptr, ptr %277, align 8, !tbaa !5
  %3657 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3656, i32 0, i32 1
  %3658 = load i32, ptr %3657, align 8, !tbaa !21
  %3659 = icmp eq i32 %3655, %3658
  br i1 %3659, label %3671, label %3660

3660:                                             ; preds = %3652
  %3661 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %279) #10
  %3662 = getelementptr inbounds %class.anon.492, ptr %279, i32 0, i32 0
  %3663 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3663, ptr %3662, align 8, !tbaa !5
  %3664 = getelementptr inbounds %class.anon.492, ptr %279, i32 0, i32 1
  %3665 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3665, ptr %3664, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_22vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %278, ptr noundef nonnull align 8 dereferenceable(16) %279) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3661, ptr noundef %278)
          to label %3666 unwind label %3667

3666:                                             ; preds = %3660
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %278) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %279) #10
  br label %3671

3667:                                             ; preds = %3660
  %3668 = landingpad { ptr, i32 }
          cleanup
  %3669 = extractvalue { ptr, i32 } %3668, 0
  store ptr %3669, ptr %11, align 8
  %3670 = extractvalue { ptr, i32 } %3668, 1
  store i32 %3670, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %278) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %279) #10
  br label %3719

3671:                                             ; preds = %3666, %3652
  br label %3672

3672:                                             ; preds = %3671
  br label %3673

3673:                                             ; preds = %3672
  call void @llvm.lifetime.start.p0(i64 40, ptr %280) #10
  %3674 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %281, i32 0, i32 0
  %3675 = load ptr, ptr %276, align 8, !tbaa !5
  %3676 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3675, i32 0, i32 1
  %3677 = load i32, ptr %3676, align 8, !tbaa !21
  %3678 = load ptr, ptr %276, align 8, !tbaa !5
  %3679 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3678, i32 0, i32 0
  %3680 = load ptr, ptr %277, align 8, !tbaa !5
  %3681 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3680, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %283, ptr align 8 %3681, i64 16, i1 false), !tbaa.struct !56
  %3682 = getelementptr inbounds { i64, i64 }, ptr %283, i32 0, i32 0
  %3683 = load i64, ptr %3682, align 8
  %3684 = getelementptr inbounds { i64, i64 }, ptr %283, i32 0, i32 1
  %3685 = load i64, ptr %3684, align 8
  %3686 = invoke { i64, i64 } @_ZNK4U128mlES_(ptr noundef nonnull align 8 dereferenceable(16) %3679, i64 %3683, i64 %3685)
          to label %3687 unwind label %3710

3687:                                             ; preds = %3673
  %3688 = getelementptr inbounds { i64, i64 }, ptr %282, i32 0, i32 0
  %3689 = extractvalue { i64, i64 } %3686, 0
  store i64 %3689, ptr %3688, align 8
  %3690 = getelementptr inbounds { i64, i64 }, ptr %282, i32 0, i32 1
  %3691 = extractvalue { i64, i64 } %3686, 1
  store i64 %3691, ptr %3690, align 8
  %3692 = getelementptr inbounds { i64, i64 }, ptr %282, i32 0, i32 0
  %3693 = load i64, ptr %3692, align 8
  %3694 = getelementptr inbounds { i64, i64 }, ptr %282, i32 0, i32 1
  %3695 = load i64, ptr %3694, align 8
  %3696 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %3677, i64 %3693, i64 %3695)
          to label %3697 unwind label %3710

3697:                                             ; preds = %3687
  %3698 = getelementptr inbounds { i64, i64 }, ptr %3674, i32 0, i32 0
  %3699 = extractvalue { i64, i64 } %3696, 0
  store i64 %3699, ptr %3698, align 8
  %3700 = getelementptr inbounds { i64, i64 }, ptr %3674, i32 0, i32 1
  %3701 = extractvalue { i64, i64 } %3696, 1
  store i64 %3701, ptr %3700, align 8
  %3702 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %281, i32 0, i32 1
  %3703 = load ptr, ptr %276, align 8, !tbaa !5
  %3704 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %3703, i32 0, i32 1
  %3705 = load i32, ptr %3704, align 8, !tbaa !21
  store i32 %3705, ptr %3702, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %280, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %281)
          to label %3706 unwind label %3710

3706:                                             ; preds = %3697
  %3707 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %280)
          to label %3708 unwind label %3714

3708:                                             ; preds = %3706
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %280) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %280) #10
  br label %3709

3709:                                             ; preds = %3708
  store i8 0, ptr %275, align 1, !tbaa !9
  br label %3637, !llvm.loop !91

3710:                                             ; preds = %3697, %3687, %3673
  %3711 = landingpad { ptr, i32 }
          cleanup
  %3712 = extractvalue { ptr, i32 } %3711, 0
  store ptr %3712, ptr %11, align 8
  %3713 = extractvalue { ptr, i32 } %3711, 1
  store i32 %3713, ptr %12, align 4
  br label %3718

3714:                                             ; preds = %3706
  %3715 = landingpad { ptr, i32 }
          cleanup
  %3716 = extractvalue { ptr, i32 } %3715, 0
  store ptr %3716, ptr %11, align 8
  %3717 = extractvalue { ptr, i32 } %3715, 1
  store i32 %3717, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %280) #10
  br label %3718

3718:                                             ; preds = %3714, %3710
  call void @llvm.lifetime.end.p0(i64 40, ptr %280) #10
  br label %3719

3719:                                             ; preds = %3718, %3667, %3647
  call void @llvm.lifetime.end.p0(i64 8, ptr %277) #10
  br label %3720

3720:                                             ; preds = %3719, %3643
  call void @llvm.lifetime.end.p0(i64 8, ptr %276) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %275) #10
  br label %3726

3721:                                             ; preds = %3642
  br label %3722

3722:                                             ; preds = %3721
  store i8 0, ptr %275, align 1, !tbaa !9
  br label %3626, !llvm.loop !92

3723:                                             ; preds = %3629
  br label %3724

3724:                                             ; preds = %3723, %3624, %3523, %3440
  br label %3725

3725:                                             ; preds = %3724
  store i8 0, ptr %256, align 1, !tbaa !9
  br label %3427, !llvm.loop !93

3726:                                             ; preds = %3720, %3621, %3520, %3435
  call void @llvm.lifetime.end.p0(i64 8, ptr %258) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %257) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %256) #10
  br label %5982

3727:                                             ; preds = %3430
  br label %3728

3728:                                             ; preds = %3727
  store i8 0, ptr %256, align 1, !tbaa !9
  br label %3420, !llvm.loop !94

3729:                                             ; preds = %3423
  br label %5926

3730:                                             ; preds = %2563
  br label %3731

3731:                                             ; preds = %3730
  %3732 = load ptr, ptr %179, align 8, !tbaa !5
  %3733 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3732)
          to label %3734 unwind label %2587

3734:                                             ; preds = %3731
  %3735 = load ptr, ptr %180, align 8, !tbaa !5
  %3736 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3735)
          to label %3737 unwind label %2587

3737:                                             ; preds = %3734
  %3738 = icmp eq i32 %3733, %3736
  br i1 %3738, label %3750, label %3739

3739:                                             ; preds = %3737
  %3740 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %285) #10
  %3741 = getelementptr inbounds %class.anon.493, ptr %285, i32 0, i32 0
  %3742 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3742, ptr %3741, align 8, !tbaa !5
  %3743 = getelementptr inbounds %class.anon.493, ptr %285, i32 0, i32 1
  %3744 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3744, ptr %3743, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_23vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %284, ptr noundef nonnull align 8 dereferenceable(16) %285) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3740, ptr noundef %284)
          to label %3745 unwind label %3746

3745:                                             ; preds = %3739
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %285) #10
  br label %3750

3746:                                             ; preds = %3739
  %3747 = landingpad { ptr, i32 }
          cleanup
  %3748 = extractvalue { ptr, i32 } %3747, 0
  store ptr %3748, ptr %11, align 8
  %3749 = extractvalue { ptr, i32 } %3747, 1
  store i32 %3749, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %284) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %285) #10
  br label %5982

3750:                                             ; preds = %3745, %3737
  br label %3751

3751:                                             ; preds = %3750
  br label %3752

3752:                                             ; preds = %3751
  call void @llvm.lifetime.start.p0(i64 1, ptr %286) #10
  store i8 1, ptr %286, align 1, !tbaa !9
  br label %3753

3753:                                             ; preds = %4113, %3752
  %3754 = load i8, ptr %286, align 1, !tbaa !9, !range !40, !noundef !41
  %3755 = trunc i8 %3754 to i1
  br i1 %3755, label %3757, label %3756

3756:                                             ; preds = %3753
  store i32 181, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %286) #10
  br label %4114

3757:                                             ; preds = %3753
  call void @llvm.lifetime.start.p0(i64 8, ptr %287) #10
  %3758 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3758, ptr %287, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %288) #10
  %3759 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3759, ptr %288, align 8, !tbaa !5
  br label %3760

3760:                                             ; preds = %4110, %3757
  %3761 = load i8, ptr %286, align 1, !tbaa !9, !range !40, !noundef !41
  %3762 = trunc i8 %3761 to i1
  br i1 %3762, label %3764, label %3763

3763:                                             ; preds = %3760
  store i32 184, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %288) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %287) #10
  br label %4112

3764:                                             ; preds = %3760
  %3765 = load ptr, ptr %287, align 8, !tbaa !5
  %3766 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %3765)
          to label %3767 unwind label %3768

3767:                                             ; preds = %3764
  switch i32 %3766, label %3773 [
    i32 0, label %3772
    i32 3, label %3774
    i32 1, label %3857
    i32 2, label %3984
  ]

3768:                                             ; preds = %3764
  %3769 = landingpad { ptr, i32 }
          cleanup
  %3770 = extractvalue { ptr, i32 } %3769, 0
  store ptr %3770, ptr %11, align 8
  %3771 = extractvalue { ptr, i32 } %3769, 1
  store i32 %3771, ptr %12, align 4
  br label %4111

3772:                                             ; preds = %3767
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4068, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

3773:                                             ; preds = %3767
  br label %4109

3774:                                             ; preds = %3767
  call void @llvm.lifetime.start.p0(i64 1, ptr %289) #10
  store i8 1, ptr %289, align 1, !tbaa !9
  br label %3775

3775:                                             ; preds = %3855, %3774
  %3776 = load i8, ptr %289, align 1, !tbaa !9, !range !40, !noundef !41
  %3777 = trunc i8 %3776 to i1
  br i1 %3777, label %3779, label %3778

3778:                                             ; preds = %3775
  store i32 188, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %289) #10
  br label %3856

3779:                                             ; preds = %3775
  call void @llvm.lifetime.start.p0(i64 8, ptr %290) #10
  %3780 = load ptr, ptr %287, align 8, !tbaa !5
  %3781 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %3780)
          to label %3782 unwind label %3792

3782:                                             ; preds = %3779
  store ptr %3781, ptr %290, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %291) #10
  %3783 = load ptr, ptr %288, align 8, !tbaa !5
  %3784 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %3783)
          to label %3785 unwind label %3796

3785:                                             ; preds = %3782
  store ptr %3784, ptr %291, align 8, !tbaa !5
  br label %3786

3786:                                             ; preds = %3842, %3785
  %3787 = load ptr, ptr %290, align 8, !tbaa !5
  %3788 = load ptr, ptr %291, align 8, !tbaa !5
  %3789 = load i8, ptr %289, align 1, !tbaa !9, !range !40, !noundef !41
  %3790 = trunc i8 %3789 to i1
  br i1 %3790, label %3800, label %3791

3791:                                             ; preds = %3786
  store i32 191, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %291) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %290) #10
  br label %3854

3792:                                             ; preds = %3779
  %3793 = landingpad { ptr, i32 }
          cleanup
  %3794 = extractvalue { ptr, i32 } %3793, 0
  store ptr %3794, ptr %11, align 8
  %3795 = extractvalue { ptr, i32 } %3793, 1
  store i32 %3795, ptr %12, align 4
  br label %3853

3796:                                             ; preds = %3782
  %3797 = landingpad { ptr, i32 }
          cleanup
  %3798 = extractvalue { ptr, i32 } %3797, 0
  store ptr %3798, ptr %11, align 8
  %3799 = extractvalue { ptr, i32 } %3797, 1
  store i32 %3799, ptr %12, align 4
  br label %3852

3800:                                             ; preds = %3786
  br label %3801

3801:                                             ; preds = %3800
  %3802 = load ptr, ptr %290, align 8, !tbaa !5
  %3803 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3802, i32 0, i32 1
  %3804 = load i32, ptr %3803, align 8, !tbaa !70
  %3805 = load ptr, ptr %291, align 8, !tbaa !5
  %3806 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3805, i32 0, i32 1
  %3807 = load i32, ptr %3806, align 8, !tbaa !70
  %3808 = icmp eq i32 %3804, %3807
  br i1 %3808, label %3820, label %3809

3809:                                             ; preds = %3801
  %3810 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %293) #10
  %3811 = getelementptr inbounds %class.anon.494, ptr %293, i32 0, i32 0
  %3812 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3812, ptr %3811, align 8, !tbaa !5
  %3813 = getelementptr inbounds %class.anon.494, ptr %293, i32 0, i32 1
  %3814 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3814, ptr %3813, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_24vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %292, ptr noundef nonnull align 8 dereferenceable(16) %293) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3810, ptr noundef %292)
          to label %3815 unwind label %3816

3815:                                             ; preds = %3809
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %292) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %293) #10
  br label %3820

3816:                                             ; preds = %3809
  %3817 = landingpad { ptr, i32 }
          cleanup
  %3818 = extractvalue { ptr, i32 } %3817, 0
  store ptr %3818, ptr %11, align 8
  %3819 = extractvalue { ptr, i32 } %3817, 1
  store i32 %3819, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %292) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %293) #10
  br label %3852

3820:                                             ; preds = %3815, %3801
  br label %3821

3821:                                             ; preds = %3820
  br label %3822

3822:                                             ; preds = %3821
  call void @llvm.lifetime.start.p0(i64 40, ptr %294) #10
  %3823 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %295, i32 0, i32 0
  %3824 = load ptr, ptr %290, align 8, !tbaa !5
  %3825 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3824, i32 0, i32 0
  %3826 = load double, ptr %3825, align 8, !tbaa !57
  %3827 = load ptr, ptr %291, align 8, !tbaa !5
  %3828 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3827, i32 0, i32 0
  %3829 = load double, ptr %3828, align 8, !tbaa !57
  %3830 = fdiv double %3826, %3829
  store double %3830, ptr %3823, align 8, !tbaa !57
  %3831 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %295, i32 0, i32 1
  %3832 = load ptr, ptr %290, align 8, !tbaa !5
  %3833 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %3832, i32 0, i32 1
  %3834 = load i32, ptr %3833, align 8, !tbaa !70
  store i32 %3834, ptr %3831, align 8, !tbaa !70
  %3835 = getelementptr inbounds { double, i32 }, ptr %295, i32 0, i32 0
  %3836 = load double, ptr %3835, align 8
  %3837 = getelementptr inbounds { double, i32 }, ptr %295, i32 0, i32 1
  %3838 = load i32, ptr %3837, align 8
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %294, double %3836, i32 %3838)
          to label %3839 unwind label %3843

3839:                                             ; preds = %3822
  %3840 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %294)
          to label %3841 unwind label %3847

3841:                                             ; preds = %3839
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %294) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %294) #10
  br label %3842

3842:                                             ; preds = %3841
  store i8 0, ptr %289, align 1, !tbaa !9
  br label %3786, !llvm.loop !95

3843:                                             ; preds = %3822
  %3844 = landingpad { ptr, i32 }
          cleanup
  %3845 = extractvalue { ptr, i32 } %3844, 0
  store ptr %3845, ptr %11, align 8
  %3846 = extractvalue { ptr, i32 } %3844, 1
  store i32 %3846, ptr %12, align 4
  br label %3851

3847:                                             ; preds = %3839
  %3848 = landingpad { ptr, i32 }
          cleanup
  %3849 = extractvalue { ptr, i32 } %3848, 0
  store ptr %3849, ptr %11, align 8
  %3850 = extractvalue { ptr, i32 } %3848, 1
  store i32 %3850, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %294) #10
  br label %3851

3851:                                             ; preds = %3847, %3843
  call void @llvm.lifetime.end.p0(i64 40, ptr %294) #10
  br label %3852

3852:                                             ; preds = %3851, %3816, %3796
  call void @llvm.lifetime.end.p0(i64 8, ptr %291) #10
  br label %3853

3853:                                             ; preds = %3852, %3792
  call void @llvm.lifetime.end.p0(i64 8, ptr %290) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %289) #10
  br label %4111

3854:                                             ; preds = %3791
  br label %3855

3855:                                             ; preds = %3854
  store i8 0, ptr %289, align 1, !tbaa !9
  br label %3775, !llvm.loop !96

3856:                                             ; preds = %3778
  br label %4109

3857:                                             ; preds = %3767
  call void @llvm.lifetime.start.p0(i64 1, ptr %296) #10
  store i8 1, ptr %296, align 1, !tbaa !9
  br label %3858

3858:                                             ; preds = %3982, %3857
  %3859 = load i8, ptr %296, align 1, !tbaa !9, !range !40, !noundef !41
  %3860 = trunc i8 %3859 to i1
  br i1 %3860, label %3862, label %3861

3861:                                             ; preds = %3858
  store i32 196, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %296) #10
  br label %3983

3862:                                             ; preds = %3858
  call void @llvm.lifetime.start.p0(i64 8, ptr %297) #10
  %3863 = load ptr, ptr %287, align 8, !tbaa !5
  %3864 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %3863)
          to label %3865 unwind label %3875

3865:                                             ; preds = %3862
  store ptr %3864, ptr %297, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %298) #10
  %3866 = load ptr, ptr %288, align 8, !tbaa !5
  %3867 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %3866)
          to label %3868 unwind label %3879

3868:                                             ; preds = %3865
  store ptr %3867, ptr %298, align 8, !tbaa !5
  br label %3869

3869:                                             ; preds = %3978, %3868
  %3870 = load ptr, ptr %297, align 8, !tbaa !5
  %3871 = load ptr, ptr %298, align 8, !tbaa !5
  %3872 = load i8, ptr %296, align 1, !tbaa !9, !range !40, !noundef !41
  %3873 = trunc i8 %3872 to i1
  br i1 %3873, label %3883, label %3874

3874:                                             ; preds = %3869
  store i32 199, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %298) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %297) #10
  br label %3981

3875:                                             ; preds = %3862
  %3876 = landingpad { ptr, i32 }
          cleanup
  %3877 = extractvalue { ptr, i32 } %3876, 0
  store ptr %3877, ptr %11, align 8
  %3878 = extractvalue { ptr, i32 } %3876, 1
  store i32 %3878, ptr %12, align 4
  br label %3980

3879:                                             ; preds = %3924, %3922, %3920, %3917, %3914, %3911, %3905, %3865
  %3880 = landingpad { ptr, i32 }
          cleanup
  %3881 = extractvalue { ptr, i32 } %3880, 0
  store ptr %3881, ptr %11, align 8
  %3882 = extractvalue { ptr, i32 } %3880, 1
  store i32 %3882, ptr %12, align 4
  br label %3979

3883:                                             ; preds = %3869
  br label %3884

3884:                                             ; preds = %3883
  %3885 = load ptr, ptr %297, align 8, !tbaa !5
  %3886 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3885, i32 0, i32 1
  %3887 = load i32, ptr %3886, align 8, !tbaa !60
  %3888 = load ptr, ptr %298, align 8, !tbaa !5
  %3889 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3888, i32 0, i32 1
  %3890 = load i32, ptr %3889, align 8, !tbaa !60
  %3891 = icmp eq i32 %3887, %3890
  br i1 %3891, label %3903, label %3892

3892:                                             ; preds = %3884
  %3893 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %300) #10
  %3894 = getelementptr inbounds %class.anon.495, ptr %300, i32 0, i32 0
  %3895 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %3895, ptr %3894, align 8, !tbaa !5
  %3896 = getelementptr inbounds %class.anon.495, ptr %300, i32 0, i32 1
  %3897 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %3897, ptr %3896, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_25vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %299, ptr noundef nonnull align 8 dereferenceable(16) %300) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %3893, ptr noundef %299)
          to label %3898 unwind label %3899

3898:                                             ; preds = %3892
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %299) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %300) #10
  br label %3903

3899:                                             ; preds = %3892
  %3900 = landingpad { ptr, i32 }
          cleanup
  %3901 = extractvalue { ptr, i32 } %3900, 0
  store ptr %3901, ptr %11, align 8
  %3902 = extractvalue { ptr, i32 } %3900, 1
  store i32 %3902, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %299) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %300) #10
  br label %3979

3903:                                             ; preds = %3898, %3884
  br label %3904

3904:                                             ; preds = %3903
  br label %3905

3905:                                             ; preds = %3904
  %3906 = load ptr, ptr %298, align 8, !tbaa !5
  %3907 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3906, i32 0, i32 0
  %3908 = invoke noundef zeroext i1 @_ZNK4S128eqEi(ptr noundef nonnull align 8 dereferenceable(16) %3907, i32 noundef 0)
          to label %3909 unwind label %3879

3909:                                             ; preds = %3905
  br i1 %3908, label %3910, label %3930

3910:                                             ; preds = %3909
  br label %3911

3911:                                             ; preds = %3910
  %3912 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %3913 unwind label %3879

3913:                                             ; preds = %3911
  br i1 %3912, label %3914, label %3927

3914:                                             ; preds = %3913
  %3915 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %3916 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %3915, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %3917 unwind label %3879

3917:                                             ; preds = %3914
  %3918 = load ptr, ptr %3, align 8, !tbaa !5
  %3919 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %3916, ptr noundef nonnull align 8 dereferenceable(120) %3918)
          to label %3920 unwind label %3879

3920:                                             ; preds = %3917
  %3921 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %3919, ptr noundef @.str.90)
          to label %3922 unwind label %3879

3922:                                             ; preds = %3920
  %3923 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %3921, ptr noundef @_ZSt3decRSt8ios_base)
          to label %3924 unwind label %3879

3924:                                             ; preds = %3922
  %3925 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %3923, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %3926 unwind label %3879

3926:                                             ; preds = %3924
  br label %3927

3927:                                             ; preds = %3926, %3913
  br label %3928

3928:                                             ; preds = %3927
  br label %3929

3929:                                             ; preds = %3928
  br label %3977

3930:                                             ; preds = %3909
  call void @llvm.lifetime.start.p0(i64 40, ptr %301) #10
  %3931 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %302, i32 0, i32 0
  %3932 = load ptr, ptr %297, align 8, !tbaa !5
  %3933 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3932, i32 0, i32 1
  %3934 = load i32, ptr %3933, align 8, !tbaa !60
  %3935 = load ptr, ptr %297, align 8, !tbaa !5
  %3936 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3935, i32 0, i32 0
  %3937 = load ptr, ptr %298, align 8, !tbaa !5
  %3938 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3937, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %304, ptr align 8 %3938, i64 16, i1 false), !tbaa.struct !56
  %3939 = getelementptr inbounds { i64, i64 }, ptr %304, i32 0, i32 0
  %3940 = load i64, ptr %3939, align 8
  %3941 = getelementptr inbounds { i64, i64 }, ptr %304, i32 0, i32 1
  %3942 = load i64, ptr %3941, align 8
  %3943 = invoke { i64, i64 } @_ZNK4S128dvES_(ptr noundef nonnull align 8 dereferenceable(16) %3936, i64 %3940, i64 %3942)
          to label %3944 unwind label %3968

3944:                                             ; preds = %3930
  %3945 = getelementptr inbounds %class.S128, ptr %303, i32 0, i32 0
  %3946 = getelementptr inbounds { i64, i64 }, ptr %3945, i32 0, i32 0
  %3947 = extractvalue { i64, i64 } %3943, 0
  store i64 %3947, ptr %3946, align 8
  %3948 = getelementptr inbounds { i64, i64 }, ptr %3945, i32 0, i32 1
  %3949 = extractvalue { i64, i64 } %3943, 1
  store i64 %3949, ptr %3948, align 8
  %3950 = getelementptr inbounds { i64, i64 }, ptr %303, i32 0, i32 0
  %3951 = load i64, ptr %3950, align 8
  %3952 = getelementptr inbounds { i64, i64 }, ptr %303, i32 0, i32 1
  %3953 = load i64, ptr %3952, align 8
  %3954 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %3934, i64 %3951, i64 %3953)
          to label %3955 unwind label %3968

3955:                                             ; preds = %3944
  %3956 = getelementptr inbounds %class.S128, ptr %3931, i32 0, i32 0
  %3957 = getelementptr inbounds { i64, i64 }, ptr %3956, i32 0, i32 0
  %3958 = extractvalue { i64, i64 } %3954, 0
  store i64 %3958, ptr %3957, align 8
  %3959 = getelementptr inbounds { i64, i64 }, ptr %3956, i32 0, i32 1
  %3960 = extractvalue { i64, i64 } %3954, 1
  store i64 %3960, ptr %3959, align 8
  %3961 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %302, i32 0, i32 1
  %3962 = load ptr, ptr %297, align 8, !tbaa !5
  %3963 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %3962, i32 0, i32 1
  %3964 = load i32, ptr %3963, align 8, !tbaa !60
  store i32 %3964, ptr %3961, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %301, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %302)
          to label %3965 unwind label %3968

3965:                                             ; preds = %3955
  %3966 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %301)
          to label %3967 unwind label %3972

3967:                                             ; preds = %3965
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %301) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %301) #10
  br label %3977

3968:                                             ; preds = %3955, %3944, %3930
  %3969 = landingpad { ptr, i32 }
          cleanup
  %3970 = extractvalue { ptr, i32 } %3969, 0
  store ptr %3970, ptr %11, align 8
  %3971 = extractvalue { ptr, i32 } %3969, 1
  store i32 %3971, ptr %12, align 4
  br label %3976

3972:                                             ; preds = %3965
  %3973 = landingpad { ptr, i32 }
          cleanup
  %3974 = extractvalue { ptr, i32 } %3973, 0
  store ptr %3974, ptr %11, align 8
  %3975 = extractvalue { ptr, i32 } %3973, 1
  store i32 %3975, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %301) #10
  br label %3976

3976:                                             ; preds = %3972, %3968
  call void @llvm.lifetime.end.p0(i64 40, ptr %301) #10
  br label %3979

3977:                                             ; preds = %3967, %3929
  br label %3978

3978:                                             ; preds = %3977
  store i8 0, ptr %296, align 1, !tbaa !9
  br label %3869, !llvm.loop !97

3979:                                             ; preds = %3976, %3899, %3879
  call void @llvm.lifetime.end.p0(i64 8, ptr %298) #10
  br label %3980

3980:                                             ; preds = %3979, %3875
  call void @llvm.lifetime.end.p0(i64 8, ptr %297) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %296) #10
  br label %4111

3981:                                             ; preds = %3874
  br label %3982

3982:                                             ; preds = %3981
  store i8 0, ptr %296, align 1, !tbaa !9
  br label %3858, !llvm.loop !98

3983:                                             ; preds = %3861
  br label %4109

3984:                                             ; preds = %3767
  call void @llvm.lifetime.start.p0(i64 1, ptr %305) #10
  store i8 1, ptr %305, align 1, !tbaa !9
  br label %3985

3985:                                             ; preds = %4107, %3984
  %3986 = load i8, ptr %305, align 1, !tbaa !9, !range !40, !noundef !41
  %3987 = trunc i8 %3986 to i1
  br i1 %3987, label %3989, label %3988

3988:                                             ; preds = %3985
  store i32 206, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %305) #10
  br label %4108

3989:                                             ; preds = %3985
  call void @llvm.lifetime.start.p0(i64 8, ptr %306) #10
  %3990 = load ptr, ptr %287, align 8, !tbaa !5
  %3991 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %3990)
          to label %3992 unwind label %4002

3992:                                             ; preds = %3989
  store ptr %3991, ptr %306, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %307) #10
  %3993 = load ptr, ptr %288, align 8, !tbaa !5
  %3994 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %3993)
          to label %3995 unwind label %4006

3995:                                             ; preds = %3992
  store ptr %3994, ptr %307, align 8, !tbaa !5
  br label %3996

3996:                                             ; preds = %4103, %3995
  %3997 = load ptr, ptr %306, align 8, !tbaa !5
  %3998 = load ptr, ptr %307, align 8, !tbaa !5
  %3999 = load i8, ptr %305, align 1, !tbaa !9, !range !40, !noundef !41
  %4000 = trunc i8 %3999 to i1
  br i1 %4000, label %4010, label %4001

4001:                                             ; preds = %3996
  store i32 209, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %307) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %306) #10
  br label %4106

4002:                                             ; preds = %3989
  %4003 = landingpad { ptr, i32 }
          cleanup
  %4004 = extractvalue { ptr, i32 } %4003, 0
  store ptr %4004, ptr %11, align 8
  %4005 = extractvalue { ptr, i32 } %4003, 1
  store i32 %4005, ptr %12, align 4
  br label %4105

4006:                                             ; preds = %4051, %4049, %4047, %4044, %4041, %4038, %4032, %3992
  %4007 = landingpad { ptr, i32 }
          cleanup
  %4008 = extractvalue { ptr, i32 } %4007, 0
  store ptr %4008, ptr %11, align 8
  %4009 = extractvalue { ptr, i32 } %4007, 1
  store i32 %4009, ptr %12, align 4
  br label %4104

4010:                                             ; preds = %3996
  br label %4011

4011:                                             ; preds = %4010
  %4012 = load ptr, ptr %306, align 8, !tbaa !5
  %4013 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4012, i32 0, i32 1
  %4014 = load i32, ptr %4013, align 8, !tbaa !21
  %4015 = load ptr, ptr %307, align 8, !tbaa !5
  %4016 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4015, i32 0, i32 1
  %4017 = load i32, ptr %4016, align 8, !tbaa !21
  %4018 = icmp eq i32 %4014, %4017
  br i1 %4018, label %4030, label %4019

4019:                                             ; preds = %4011
  %4020 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %309) #10
  %4021 = getelementptr inbounds %class.anon.496, ptr %309, i32 0, i32 0
  %4022 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4022, ptr %4021, align 8, !tbaa !5
  %4023 = getelementptr inbounds %class.anon.496, ptr %309, i32 0, i32 1
  %4024 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4024, ptr %4023, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_26vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %308, ptr noundef nonnull align 8 dereferenceable(16) %309) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4020, ptr noundef %308)
          to label %4025 unwind label %4026

4025:                                             ; preds = %4019
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %308) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %309) #10
  br label %4030

4026:                                             ; preds = %4019
  %4027 = landingpad { ptr, i32 }
          cleanup
  %4028 = extractvalue { ptr, i32 } %4027, 0
  store ptr %4028, ptr %11, align 8
  %4029 = extractvalue { ptr, i32 } %4027, 1
  store i32 %4029, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %308) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %309) #10
  br label %4104

4030:                                             ; preds = %4025, %4011
  br label %4031

4031:                                             ; preds = %4030
  br label %4032

4032:                                             ; preds = %4031
  %4033 = load ptr, ptr %307, align 8, !tbaa !5
  %4034 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4033, i32 0, i32 0
  %4035 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %4034, i32 noundef 0)
          to label %4036 unwind label %4006

4036:                                             ; preds = %4032
  br i1 %4035, label %4037, label %4057

4037:                                             ; preds = %4036
  br label %4038

4038:                                             ; preds = %4037
  %4039 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %4040 unwind label %4006

4040:                                             ; preds = %4038
  br i1 %4039, label %4041, label %4054

4041:                                             ; preds = %4040
  %4042 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %4043 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %4042, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %4044 unwind label %4006

4044:                                             ; preds = %4041
  %4045 = load ptr, ptr %3, align 8, !tbaa !5
  %4046 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %4043, ptr noundef nonnull align 8 dereferenceable(120) %4045)
          to label %4047 unwind label %4006

4047:                                             ; preds = %4044
  %4048 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %4046, ptr noundef @.str.90)
          to label %4049 unwind label %4006

4049:                                             ; preds = %4047
  %4050 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %4048, ptr noundef @_ZSt3decRSt8ios_base)
          to label %4051 unwind label %4006

4051:                                             ; preds = %4049
  %4052 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %4050, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %4053 unwind label %4006

4053:                                             ; preds = %4051
  br label %4054

4054:                                             ; preds = %4053, %4040
  br label %4055

4055:                                             ; preds = %4054
  br label %4056

4056:                                             ; preds = %4055
  br label %4102

4057:                                             ; preds = %4036
  call void @llvm.lifetime.start.p0(i64 40, ptr %310) #10
  %4058 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %311, i32 0, i32 0
  %4059 = load ptr, ptr %306, align 8, !tbaa !5
  %4060 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4059, i32 0, i32 1
  %4061 = load i32, ptr %4060, align 8, !tbaa !21
  %4062 = load ptr, ptr %306, align 8, !tbaa !5
  %4063 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4062, i32 0, i32 0
  %4064 = load ptr, ptr %307, align 8, !tbaa !5
  %4065 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4064, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %313, ptr align 8 %4065, i64 16, i1 false), !tbaa.struct !56
  %4066 = getelementptr inbounds { i64, i64 }, ptr %313, i32 0, i32 0
  %4067 = load i64, ptr %4066, align 8
  %4068 = getelementptr inbounds { i64, i64 }, ptr %313, i32 0, i32 1
  %4069 = load i64, ptr %4068, align 8
  %4070 = invoke { i64, i64 } @_ZNK4U128dvES_(ptr noundef nonnull align 8 dereferenceable(16) %4063, i64 %4067, i64 %4069)
          to label %4071 unwind label %4093

4071:                                             ; preds = %4057
  %4072 = getelementptr inbounds { i64, i64 }, ptr %312, i32 0, i32 0
  %4073 = extractvalue { i64, i64 } %4070, 0
  store i64 %4073, ptr %4072, align 8
  %4074 = getelementptr inbounds { i64, i64 }, ptr %312, i32 0, i32 1
  %4075 = extractvalue { i64, i64 } %4070, 1
  store i64 %4075, ptr %4074, align 8
  %4076 = getelementptr inbounds { i64, i64 }, ptr %312, i32 0, i32 0
  %4077 = load i64, ptr %4076, align 8
  %4078 = getelementptr inbounds { i64, i64 }, ptr %312, i32 0, i32 1
  %4079 = load i64, ptr %4078, align 8
  %4080 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %4061, i64 %4077, i64 %4079)
          to label %4081 unwind label %4093

4081:                                             ; preds = %4071
  %4082 = getelementptr inbounds { i64, i64 }, ptr %4058, i32 0, i32 0
  %4083 = extractvalue { i64, i64 } %4080, 0
  store i64 %4083, ptr %4082, align 8
  %4084 = getelementptr inbounds { i64, i64 }, ptr %4058, i32 0, i32 1
  %4085 = extractvalue { i64, i64 } %4080, 1
  store i64 %4085, ptr %4084, align 8
  %4086 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %311, i32 0, i32 1
  %4087 = load ptr, ptr %306, align 8, !tbaa !5
  %4088 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4087, i32 0, i32 1
  %4089 = load i32, ptr %4088, align 8, !tbaa !21
  store i32 %4089, ptr %4086, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %310, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %311)
          to label %4090 unwind label %4093

4090:                                             ; preds = %4081
  %4091 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %310)
          to label %4092 unwind label %4097

4092:                                             ; preds = %4090
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %310) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %310) #10
  br label %4102

4093:                                             ; preds = %4081, %4071, %4057
  %4094 = landingpad { ptr, i32 }
          cleanup
  %4095 = extractvalue { ptr, i32 } %4094, 0
  store ptr %4095, ptr %11, align 8
  %4096 = extractvalue { ptr, i32 } %4094, 1
  store i32 %4096, ptr %12, align 4
  br label %4101

4097:                                             ; preds = %4090
  %4098 = landingpad { ptr, i32 }
          cleanup
  %4099 = extractvalue { ptr, i32 } %4098, 0
  store ptr %4099, ptr %11, align 8
  %4100 = extractvalue { ptr, i32 } %4098, 1
  store i32 %4100, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %310) #10
  br label %4101

4101:                                             ; preds = %4097, %4093
  call void @llvm.lifetime.end.p0(i64 40, ptr %310) #10
  br label %4104

4102:                                             ; preds = %4092, %4056
  br label %4103

4103:                                             ; preds = %4102
  store i8 0, ptr %305, align 1, !tbaa !9
  br label %3996, !llvm.loop !99

4104:                                             ; preds = %4101, %4026, %4006
  call void @llvm.lifetime.end.p0(i64 8, ptr %307) #10
  br label %4105

4105:                                             ; preds = %4104, %4002
  call void @llvm.lifetime.end.p0(i64 8, ptr %306) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %305) #10
  br label %4111

4106:                                             ; preds = %4001
  br label %4107

4107:                                             ; preds = %4106
  store i8 0, ptr %305, align 1, !tbaa !9
  br label %3985, !llvm.loop !100

4108:                                             ; preds = %3988
  br label %4109

4109:                                             ; preds = %4108, %3983, %3856, %3773
  br label %4110

4110:                                             ; preds = %4109
  store i8 0, ptr %286, align 1, !tbaa !9
  br label %3760, !llvm.loop !101

4111:                                             ; preds = %4105, %3980, %3853, %3768
  call void @llvm.lifetime.end.p0(i64 8, ptr %288) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %287) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %286) #10
  br label %5982

4112:                                             ; preds = %3763
  br label %4113

4113:                                             ; preds = %4112
  store i8 0, ptr %286, align 1, !tbaa !9
  br label %3753, !llvm.loop !102

4114:                                             ; preds = %3756
  br label %5926

4115:                                             ; preds = %2563
  br label %4116

4116:                                             ; preds = %4115
  %4117 = load ptr, ptr %179, align 8, !tbaa !5
  %4118 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4117)
          to label %4119 unwind label %2587

4119:                                             ; preds = %4116
  %4120 = load ptr, ptr %180, align 8, !tbaa !5
  %4121 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4120)
          to label %4122 unwind label %2587

4122:                                             ; preds = %4119
  %4123 = icmp eq i32 %4118, %4121
  br i1 %4123, label %4135, label %4124

4124:                                             ; preds = %4122
  %4125 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %315) #10
  %4126 = getelementptr inbounds %class.anon.497, ptr %315, i32 0, i32 0
  %4127 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4127, ptr %4126, align 8, !tbaa !5
  %4128 = getelementptr inbounds %class.anon.497, ptr %315, i32 0, i32 1
  %4129 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4129, ptr %4128, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_27vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %314, ptr noundef nonnull align 8 dereferenceable(16) %315) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4125, ptr noundef %314)
          to label %4130 unwind label %4131

4130:                                             ; preds = %4124
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %315) #10
  br label %4135

4131:                                             ; preds = %4124
  %4132 = landingpad { ptr, i32 }
          cleanup
  %4133 = extractvalue { ptr, i32 } %4132, 0
  store ptr %4133, ptr %11, align 8
  %4134 = extractvalue { ptr, i32 } %4132, 1
  store i32 %4134, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %315) #10
  br label %5982

4135:                                             ; preds = %4130, %4122
  br label %4136

4136:                                             ; preds = %4135
  br label %4137

4137:                                             ; preds = %4136
  call void @llvm.lifetime.start.p0(i64 1, ptr %316) #10
  store i8 1, ptr %316, align 1, !tbaa !9
  br label %4138

4138:                                             ; preds = %4393, %4137
  %4139 = load i8, ptr %316, align 1, !tbaa !9, !range !40, !noundef !41
  %4140 = trunc i8 %4139 to i1
  br i1 %4140, label %4142, label %4141

4141:                                             ; preds = %4138
  store i32 218, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %316) #10
  br label %4394

4142:                                             ; preds = %4138
  call void @llvm.lifetime.start.p0(i64 8, ptr %317) #10
  %4143 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4143, ptr %317, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %318) #10
  %4144 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4144, ptr %318, align 8, !tbaa !5
  br label %4145

4145:                                             ; preds = %4390, %4142
  %4146 = load i8, ptr %316, align 1, !tbaa !9, !range !40, !noundef !41
  %4147 = trunc i8 %4146 to i1
  br i1 %4147, label %4149, label %4148

4148:                                             ; preds = %4145
  store i32 221, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %318) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %317) #10
  br label %4392

4149:                                             ; preds = %4145
  %4150 = load ptr, ptr %317, align 8, !tbaa !5
  %4151 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4150)
          to label %4152 unwind label %4153

4152:                                             ; preds = %4149
  switch i32 %4151, label %4158 [
    i32 0, label %4157
    i32 1, label %4159
    i32 2, label %4275
  ]

4153:                                             ; preds = %4149
  %4154 = landingpad { ptr, i32 }
          cleanup
  %4155 = extractvalue { ptr, i32 } %4154, 0
  store ptr %4155, ptr %11, align 8
  %4156 = extractvalue { ptr, i32 } %4154, 1
  store i32 %4156, ptr %12, align 4
  br label %4391

4157:                                             ; preds = %4152
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4097, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

4158:                                             ; preds = %4152
  br label %4389

4159:                                             ; preds = %4152
  call void @llvm.lifetime.start.p0(i64 1, ptr %319) #10
  store i8 1, ptr %319, align 1, !tbaa !9
  br label %4160

4160:                                             ; preds = %4273, %4159
  %4161 = load i8, ptr %319, align 1, !tbaa !9, !range !40, !noundef !41
  %4162 = trunc i8 %4161 to i1
  br i1 %4162, label %4164, label %4163

4163:                                             ; preds = %4160
  store i32 225, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %319) #10
  br label %4274

4164:                                             ; preds = %4160
  call void @llvm.lifetime.start.p0(i64 8, ptr %320) #10
  %4165 = load ptr, ptr %317, align 8, !tbaa !5
  %4166 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %4165)
          to label %4167 unwind label %4177

4167:                                             ; preds = %4164
  store ptr %4166, ptr %320, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %321) #10
  %4168 = load ptr, ptr %318, align 8, !tbaa !5
  %4169 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %4168)
          to label %4170 unwind label %4181

4170:                                             ; preds = %4167
  store ptr %4169, ptr %321, align 8, !tbaa !5
  br label %4171

4171:                                             ; preds = %4260, %4170
  %4172 = load ptr, ptr %320, align 8, !tbaa !5
  %4173 = load ptr, ptr %321, align 8, !tbaa !5
  %4174 = load i8, ptr %319, align 1, !tbaa !9, !range !40, !noundef !41
  %4175 = trunc i8 %4174 to i1
  br i1 %4175, label %4185, label %4176

4176:                                             ; preds = %4171
  store i32 228, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %321) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %320) #10
  br label %4272

4177:                                             ; preds = %4164
  %4178 = landingpad { ptr, i32 }
          cleanup
  %4179 = extractvalue { ptr, i32 } %4178, 0
  store ptr %4179, ptr %11, align 8
  %4180 = extractvalue { ptr, i32 } %4178, 1
  store i32 %4180, ptr %12, align 4
  br label %4271

4181:                                             ; preds = %4208, %4167
  %4182 = landingpad { ptr, i32 }
          cleanup
  %4183 = extractvalue { ptr, i32 } %4182, 0
  store ptr %4183, ptr %11, align 8
  %4184 = extractvalue { ptr, i32 } %4182, 1
  store i32 %4184, ptr %12, align 4
  br label %4270

4185:                                             ; preds = %4171
  br label %4186

4186:                                             ; preds = %4185
  %4187 = load ptr, ptr %320, align 8, !tbaa !5
  %4188 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4187, i32 0, i32 1
  %4189 = load i32, ptr %4188, align 8, !tbaa !60
  %4190 = load ptr, ptr %321, align 8, !tbaa !5
  %4191 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4190, i32 0, i32 1
  %4192 = load i32, ptr %4191, align 8, !tbaa !60
  %4193 = icmp eq i32 %4189, %4192
  br i1 %4193, label %4205, label %4194

4194:                                             ; preds = %4186
  %4195 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %323) #10
  %4196 = getelementptr inbounds %class.anon.498, ptr %323, i32 0, i32 0
  %4197 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4197, ptr %4196, align 8, !tbaa !5
  %4198 = getelementptr inbounds %class.anon.498, ptr %323, i32 0, i32 1
  %4199 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4199, ptr %4198, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_28vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %322, ptr noundef nonnull align 8 dereferenceable(16) %323) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4195, ptr noundef %322)
          to label %4200 unwind label %4201

4200:                                             ; preds = %4194
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %323) #10
  br label %4205

4201:                                             ; preds = %4194
  %4202 = landingpad { ptr, i32 }
          cleanup
  %4203 = extractvalue { ptr, i32 } %4202, 0
  store ptr %4203, ptr %11, align 8
  %4204 = extractvalue { ptr, i32 } %4202, 1
  store i32 %4204, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %323) #10
  br label %4270

4205:                                             ; preds = %4200, %4186
  br label %4206

4206:                                             ; preds = %4205
  br label %4207

4207:                                             ; preds = %4206
  br label %4208

4208:                                             ; preds = %4207
  %4209 = load ptr, ptr %321, align 8, !tbaa !5
  %4210 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4209, i32 0, i32 0
  %4211 = invoke noundef zeroext i1 @_ZNK4S128neEi(ptr noundef nonnull align 8 dereferenceable(16) %4210, i32 noundef 0)
          to label %4212 unwind label %4181

4212:                                             ; preds = %4208
  br i1 %4211, label %4220, label %4213

4213:                                             ; preds = %4212
  %4214 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %325) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_29vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %324, ptr noundef nonnull align 1 dereferenceable(1) %325) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4214, ptr noundef %324)
          to label %4215 unwind label %4216

4215:                                             ; preds = %4213
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %324) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %325) #10
  br label %4220

4216:                                             ; preds = %4213
  %4217 = landingpad { ptr, i32 }
          cleanup
  %4218 = extractvalue { ptr, i32 } %4217, 0
  store ptr %4218, ptr %11, align 8
  %4219 = extractvalue { ptr, i32 } %4217, 1
  store i32 %4219, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %324) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %325) #10
  br label %4270

4220:                                             ; preds = %4215, %4212
  br label %4221

4221:                                             ; preds = %4220
  br label %4222

4222:                                             ; preds = %4221
  call void @llvm.lifetime.start.p0(i64 40, ptr %326) #10
  %4223 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %327, i32 0, i32 0
  %4224 = load ptr, ptr %320, align 8, !tbaa !5
  %4225 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4224, i32 0, i32 1
  %4226 = load i32, ptr %4225, align 8, !tbaa !60
  %4227 = load ptr, ptr %320, align 8, !tbaa !5
  %4228 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4227, i32 0, i32 0
  %4229 = load ptr, ptr %321, align 8, !tbaa !5
  %4230 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4229, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %329, ptr align 8 %4230, i64 16, i1 false), !tbaa.struct !56
  %4231 = getelementptr inbounds { i64, i64 }, ptr %329, i32 0, i32 0
  %4232 = load i64, ptr %4231, align 8
  %4233 = getelementptr inbounds { i64, i64 }, ptr %329, i32 0, i32 1
  %4234 = load i64, ptr %4233, align 8
  %4235 = invoke { i64, i64 } @_ZNK4S128rmES_(ptr noundef nonnull align 8 dereferenceable(16) %4228, i64 %4232, i64 %4234)
          to label %4236 unwind label %4261

4236:                                             ; preds = %4222
  %4237 = getelementptr inbounds %class.S128, ptr %328, i32 0, i32 0
  %4238 = getelementptr inbounds { i64, i64 }, ptr %4237, i32 0, i32 0
  %4239 = extractvalue { i64, i64 } %4235, 0
  store i64 %4239, ptr %4238, align 8
  %4240 = getelementptr inbounds { i64, i64 }, ptr %4237, i32 0, i32 1
  %4241 = extractvalue { i64, i64 } %4235, 1
  store i64 %4241, ptr %4240, align 8
  %4242 = getelementptr inbounds { i64, i64 }, ptr %328, i32 0, i32 0
  %4243 = load i64, ptr %4242, align 8
  %4244 = getelementptr inbounds { i64, i64 }, ptr %328, i32 0, i32 1
  %4245 = load i64, ptr %4244, align 8
  %4246 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %4226, i64 %4243, i64 %4245)
          to label %4247 unwind label %4261

4247:                                             ; preds = %4236
  %4248 = getelementptr inbounds %class.S128, ptr %4223, i32 0, i32 0
  %4249 = getelementptr inbounds { i64, i64 }, ptr %4248, i32 0, i32 0
  %4250 = extractvalue { i64, i64 } %4246, 0
  store i64 %4250, ptr %4249, align 8
  %4251 = getelementptr inbounds { i64, i64 }, ptr %4248, i32 0, i32 1
  %4252 = extractvalue { i64, i64 } %4246, 1
  store i64 %4252, ptr %4251, align 8
  %4253 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %327, i32 0, i32 1
  %4254 = load ptr, ptr %320, align 8, !tbaa !5
  %4255 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4254, i32 0, i32 1
  %4256 = load i32, ptr %4255, align 8, !tbaa !60
  store i32 %4256, ptr %4253, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %326, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %327)
          to label %4257 unwind label %4261

4257:                                             ; preds = %4247
  %4258 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %326)
          to label %4259 unwind label %4265

4259:                                             ; preds = %4257
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %326) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %326) #10
  br label %4260

4260:                                             ; preds = %4259
  store i8 0, ptr %319, align 1, !tbaa !9
  br label %4171, !llvm.loop !103

4261:                                             ; preds = %4247, %4236, %4222
  %4262 = landingpad { ptr, i32 }
          cleanup
  %4263 = extractvalue { ptr, i32 } %4262, 0
  store ptr %4263, ptr %11, align 8
  %4264 = extractvalue { ptr, i32 } %4262, 1
  store i32 %4264, ptr %12, align 4
  br label %4269

4265:                                             ; preds = %4257
  %4266 = landingpad { ptr, i32 }
          cleanup
  %4267 = extractvalue { ptr, i32 } %4266, 0
  store ptr %4267, ptr %11, align 8
  %4268 = extractvalue { ptr, i32 } %4266, 1
  store i32 %4268, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %326) #10
  br label %4269

4269:                                             ; preds = %4265, %4261
  call void @llvm.lifetime.end.p0(i64 40, ptr %326) #10
  br label %4270

4270:                                             ; preds = %4269, %4216, %4201, %4181
  call void @llvm.lifetime.end.p0(i64 8, ptr %321) #10
  br label %4271

4271:                                             ; preds = %4270, %4177
  call void @llvm.lifetime.end.p0(i64 8, ptr %320) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %319) #10
  br label %4391

4272:                                             ; preds = %4176
  br label %4273

4273:                                             ; preds = %4272
  store i8 0, ptr %319, align 1, !tbaa !9
  br label %4160, !llvm.loop !104

4274:                                             ; preds = %4163
  br label %4389

4275:                                             ; preds = %4152
  call void @llvm.lifetime.start.p0(i64 1, ptr %330) #10
  store i8 1, ptr %330, align 1, !tbaa !9
  br label %4276

4276:                                             ; preds = %4387, %4275
  %4277 = load i8, ptr %330, align 1, !tbaa !9, !range !40, !noundef !41
  %4278 = trunc i8 %4277 to i1
  br i1 %4278, label %4280, label %4279

4279:                                             ; preds = %4276
  store i32 235, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %330) #10
  br label %4388

4280:                                             ; preds = %4276
  call void @llvm.lifetime.start.p0(i64 8, ptr %331) #10
  %4281 = load ptr, ptr %317, align 8, !tbaa !5
  %4282 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %4281)
          to label %4283 unwind label %4293

4283:                                             ; preds = %4280
  store ptr %4282, ptr %331, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %332) #10
  %4284 = load ptr, ptr %318, align 8, !tbaa !5
  %4285 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %4284)
          to label %4286 unwind label %4297

4286:                                             ; preds = %4283
  store ptr %4285, ptr %332, align 8, !tbaa !5
  br label %4287

4287:                                             ; preds = %4374, %4286
  %4288 = load ptr, ptr %331, align 8, !tbaa !5
  %4289 = load ptr, ptr %332, align 8, !tbaa !5
  %4290 = load i8, ptr %330, align 1, !tbaa !9, !range !40, !noundef !41
  %4291 = trunc i8 %4290 to i1
  br i1 %4291, label %4301, label %4292

4292:                                             ; preds = %4287
  store i32 238, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %332) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %331) #10
  br label %4386

4293:                                             ; preds = %4280
  %4294 = landingpad { ptr, i32 }
          cleanup
  %4295 = extractvalue { ptr, i32 } %4294, 0
  store ptr %4295, ptr %11, align 8
  %4296 = extractvalue { ptr, i32 } %4294, 1
  store i32 %4296, ptr %12, align 4
  br label %4385

4297:                                             ; preds = %4324, %4283
  %4298 = landingpad { ptr, i32 }
          cleanup
  %4299 = extractvalue { ptr, i32 } %4298, 0
  store ptr %4299, ptr %11, align 8
  %4300 = extractvalue { ptr, i32 } %4298, 1
  store i32 %4300, ptr %12, align 4
  br label %4384

4301:                                             ; preds = %4287
  br label %4302

4302:                                             ; preds = %4301
  %4303 = load ptr, ptr %331, align 8, !tbaa !5
  %4304 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4303, i32 0, i32 1
  %4305 = load i32, ptr %4304, align 8, !tbaa !21
  %4306 = load ptr, ptr %332, align 8, !tbaa !5
  %4307 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4306, i32 0, i32 1
  %4308 = load i32, ptr %4307, align 8, !tbaa !21
  %4309 = icmp eq i32 %4305, %4308
  br i1 %4309, label %4321, label %4310

4310:                                             ; preds = %4302
  %4311 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %334) #10
  %4312 = getelementptr inbounds %class.anon.501, ptr %334, i32 0, i32 0
  %4313 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4313, ptr %4312, align 8, !tbaa !5
  %4314 = getelementptr inbounds %class.anon.501, ptr %334, i32 0, i32 1
  %4315 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4315, ptr %4314, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_30vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %333, ptr noundef nonnull align 8 dereferenceable(16) %334) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4311, ptr noundef %333)
          to label %4316 unwind label %4317

4316:                                             ; preds = %4310
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %333) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %334) #10
  br label %4321

4317:                                             ; preds = %4310
  %4318 = landingpad { ptr, i32 }
          cleanup
  %4319 = extractvalue { ptr, i32 } %4318, 0
  store ptr %4319, ptr %11, align 8
  %4320 = extractvalue { ptr, i32 } %4318, 1
  store i32 %4320, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %333) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %334) #10
  br label %4384

4321:                                             ; preds = %4316, %4302
  br label %4322

4322:                                             ; preds = %4321
  br label %4323

4323:                                             ; preds = %4322
  br label %4324

4324:                                             ; preds = %4323
  %4325 = load ptr, ptr %332, align 8, !tbaa !5
  %4326 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4325, i32 0, i32 0
  %4327 = invoke noundef zeroext i1 @_ZNK4U128neEj(ptr noundef nonnull align 8 dereferenceable(16) %4326, i32 noundef 0)
          to label %4328 unwind label %4297

4328:                                             ; preds = %4324
  br i1 %4327, label %4336, label %4329

4329:                                             ; preds = %4328
  %4330 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %336) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_31vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 1 dereferenceable(1) %336) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4330, ptr noundef %335)
          to label %4331 unwind label %4332

4331:                                             ; preds = %4329
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %336) #10
  br label %4336

4332:                                             ; preds = %4329
  %4333 = landingpad { ptr, i32 }
          cleanup
  %4334 = extractvalue { ptr, i32 } %4333, 0
  store ptr %4334, ptr %11, align 8
  %4335 = extractvalue { ptr, i32 } %4333, 1
  store i32 %4335, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %336) #10
  br label %4384

4336:                                             ; preds = %4331, %4328
  br label %4337

4337:                                             ; preds = %4336
  br label %4338

4338:                                             ; preds = %4337
  call void @llvm.lifetime.start.p0(i64 40, ptr %337) #10
  %4339 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %338, i32 0, i32 0
  %4340 = load ptr, ptr %331, align 8, !tbaa !5
  %4341 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4340, i32 0, i32 1
  %4342 = load i32, ptr %4341, align 8, !tbaa !21
  %4343 = load ptr, ptr %331, align 8, !tbaa !5
  %4344 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4343, i32 0, i32 0
  %4345 = load ptr, ptr %332, align 8, !tbaa !5
  %4346 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4345, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %340, ptr align 8 %4346, i64 16, i1 false), !tbaa.struct !56
  %4347 = getelementptr inbounds { i64, i64 }, ptr %340, i32 0, i32 0
  %4348 = load i64, ptr %4347, align 8
  %4349 = getelementptr inbounds { i64, i64 }, ptr %340, i32 0, i32 1
  %4350 = load i64, ptr %4349, align 8
  %4351 = invoke { i64, i64 } @_ZNK4U128rmES_(ptr noundef nonnull align 8 dereferenceable(16) %4344, i64 %4348, i64 %4350)
          to label %4352 unwind label %4375

4352:                                             ; preds = %4338
  %4353 = getelementptr inbounds { i64, i64 }, ptr %339, i32 0, i32 0
  %4354 = extractvalue { i64, i64 } %4351, 0
  store i64 %4354, ptr %4353, align 8
  %4355 = getelementptr inbounds { i64, i64 }, ptr %339, i32 0, i32 1
  %4356 = extractvalue { i64, i64 } %4351, 1
  store i64 %4356, ptr %4355, align 8
  %4357 = getelementptr inbounds { i64, i64 }, ptr %339, i32 0, i32 0
  %4358 = load i64, ptr %4357, align 8
  %4359 = getelementptr inbounds { i64, i64 }, ptr %339, i32 0, i32 1
  %4360 = load i64, ptr %4359, align 8
  %4361 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %4342, i64 %4358, i64 %4360)
          to label %4362 unwind label %4375

4362:                                             ; preds = %4352
  %4363 = getelementptr inbounds { i64, i64 }, ptr %4339, i32 0, i32 0
  %4364 = extractvalue { i64, i64 } %4361, 0
  store i64 %4364, ptr %4363, align 8
  %4365 = getelementptr inbounds { i64, i64 }, ptr %4339, i32 0, i32 1
  %4366 = extractvalue { i64, i64 } %4361, 1
  store i64 %4366, ptr %4365, align 8
  %4367 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %338, i32 0, i32 1
  %4368 = load ptr, ptr %331, align 8, !tbaa !5
  %4369 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4368, i32 0, i32 1
  %4370 = load i32, ptr %4369, align 8, !tbaa !21
  store i32 %4370, ptr %4367, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %337, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %338)
          to label %4371 unwind label %4375

4371:                                             ; preds = %4362
  %4372 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %337)
          to label %4373 unwind label %4379

4373:                                             ; preds = %4371
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %337) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %337) #10
  br label %4374

4374:                                             ; preds = %4373
  store i8 0, ptr %330, align 1, !tbaa !9
  br label %4287, !llvm.loop !105

4375:                                             ; preds = %4362, %4352, %4338
  %4376 = landingpad { ptr, i32 }
          cleanup
  %4377 = extractvalue { ptr, i32 } %4376, 0
  store ptr %4377, ptr %11, align 8
  %4378 = extractvalue { ptr, i32 } %4376, 1
  store i32 %4378, ptr %12, align 4
  br label %4383

4379:                                             ; preds = %4371
  %4380 = landingpad { ptr, i32 }
          cleanup
  %4381 = extractvalue { ptr, i32 } %4380, 0
  store ptr %4381, ptr %11, align 8
  %4382 = extractvalue { ptr, i32 } %4380, 1
  store i32 %4382, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %337) #10
  br label %4383

4383:                                             ; preds = %4379, %4375
  call void @llvm.lifetime.end.p0(i64 40, ptr %337) #10
  br label %4384

4384:                                             ; preds = %4383, %4332, %4317, %4297
  call void @llvm.lifetime.end.p0(i64 8, ptr %332) #10
  br label %4385

4385:                                             ; preds = %4384, %4293
  call void @llvm.lifetime.end.p0(i64 8, ptr %331) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %330) #10
  br label %4391

4386:                                             ; preds = %4292
  br label %4387

4387:                                             ; preds = %4386
  store i8 0, ptr %330, align 1, !tbaa !9
  br label %4276, !llvm.loop !106

4388:                                             ; preds = %4279
  br label %4389

4389:                                             ; preds = %4388, %4274, %4158
  br label %4390

4390:                                             ; preds = %4389
  store i8 0, ptr %316, align 1, !tbaa !9
  br label %4145, !llvm.loop !107

4391:                                             ; preds = %4385, %4271, %4153
  call void @llvm.lifetime.end.p0(i64 8, ptr %318) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %317) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %316) #10
  br label %5982

4392:                                             ; preds = %4148
  br label %4393

4393:                                             ; preds = %4392
  store i8 0, ptr %316, align 1, !tbaa !9
  br label %4138, !llvm.loop !108

4394:                                             ; preds = %4141
  br label %5926

4395:                                             ; preds = %2563
  br label %4396

4396:                                             ; preds = %4395
  %4397 = load ptr, ptr %179, align 8, !tbaa !5
  %4398 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4397)
          to label %4399 unwind label %2587

4399:                                             ; preds = %4396
  %4400 = load ptr, ptr %180, align 8, !tbaa !5
  %4401 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4400)
          to label %4402 unwind label %2587

4402:                                             ; preds = %4399
  %4403 = icmp eq i32 %4398, %4401
  br i1 %4403, label %4415, label %4404

4404:                                             ; preds = %4402
  %4405 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %342) #10
  %4406 = getelementptr inbounds %class.anon.504, ptr %342, i32 0, i32 0
  %4407 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4407, ptr %4406, align 8, !tbaa !5
  %4408 = getelementptr inbounds %class.anon.504, ptr %342, i32 0, i32 1
  %4409 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4409, ptr %4408, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_32vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %341, ptr noundef nonnull align 8 dereferenceable(16) %342) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4405, ptr noundef %341)
          to label %4410 unwind label %4411

4410:                                             ; preds = %4404
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %341) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %342) #10
  br label %4415

4411:                                             ; preds = %4404
  %4412 = landingpad { ptr, i32 }
          cleanup
  %4413 = extractvalue { ptr, i32 } %4412, 0
  store ptr %4413, ptr %11, align 8
  %4414 = extractvalue { ptr, i32 } %4412, 1
  store i32 %4414, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %341) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %342) #10
  br label %5982

4415:                                             ; preds = %4410, %4402
  br label %4416

4416:                                             ; preds = %4415
  br label %4417

4417:                                             ; preds = %4416
  call void @llvm.lifetime.start.p0(i64 1, ptr %343) #10
  store i8 1, ptr %343, align 1, !tbaa !9
  br label %4418

4418:                                             ; preds = %4703, %4417
  %4419 = load i8, ptr %343, align 1, !tbaa !9, !range !40, !noundef !41
  %4420 = trunc i8 %4419 to i1
  br i1 %4420, label %4422, label %4421

4421:                                             ; preds = %4418
  store i32 247, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %343) #10
  br label %4704

4422:                                             ; preds = %4418
  call void @llvm.lifetime.start.p0(i64 8, ptr %344) #10
  %4423 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4423, ptr %344, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %345) #10
  %4424 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4424, ptr %345, align 8, !tbaa !5
  br label %4425

4425:                                             ; preds = %4700, %4422
  %4426 = load i8, ptr %343, align 1, !tbaa !9, !range !40, !noundef !41
  %4427 = trunc i8 %4426 to i1
  br i1 %4427, label %4429, label %4428

4428:                                             ; preds = %4425
  store i32 250, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %345) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %344) #10
  br label %4702

4429:                                             ; preds = %4425
  %4430 = load ptr, ptr %344, align 8, !tbaa !5
  %4431 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4430)
          to label %4432 unwind label %4433

4432:                                             ; preds = %4429
  switch i32 %4431, label %4438 [
    i32 0, label %4437
    i32 4, label %4439
    i32 1, label %4499
    i32 2, label %4600
  ]

4433:                                             ; preds = %4429
  %4434 = landingpad { ptr, i32 }
          cleanup
  %4435 = extractvalue { ptr, i32 } %4434, 0
  store ptr %4435, ptr %11, align 8
  %4436 = extractvalue { ptr, i32 } %4434, 1
  store i32 %4436, ptr %12, align 4
  br label %4701

4437:                                             ; preds = %4432
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4115, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

4438:                                             ; preds = %4432
  br label %4699

4439:                                             ; preds = %4432
  call void @llvm.lifetime.start.p0(i64 1, ptr %346) #10
  store i8 1, ptr %346, align 1, !tbaa !9
  br label %4440

4440:                                             ; preds = %4497, %4439
  %4441 = load i8, ptr %346, align 1, !tbaa !9, !range !40, !noundef !41
  %4442 = trunc i8 %4441 to i1
  br i1 %4442, label %4444, label %4443

4443:                                             ; preds = %4440
  store i32 254, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %346) #10
  br label %4498

4444:                                             ; preds = %4440
  call void @llvm.lifetime.start.p0(i64 8, ptr %347) #10
  %4445 = load ptr, ptr %344, align 8, !tbaa !5
  %4446 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %4445)
          to label %4447 unwind label %4457

4447:                                             ; preds = %4444
  store ptr %4446, ptr %347, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %348) #10
  %4448 = load ptr, ptr %345, align 8, !tbaa !5
  %4449 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %4448)
          to label %4450 unwind label %4461

4450:                                             ; preds = %4447
  store ptr %4449, ptr %348, align 8, !tbaa !5
  br label %4451

4451:                                             ; preds = %4484, %4450
  %4452 = load ptr, ptr %347, align 8, !tbaa !5
  %4453 = load ptr, ptr %348, align 8, !tbaa !5
  %4454 = load i8, ptr %346, align 1, !tbaa !9, !range !40, !noundef !41
  %4455 = trunc i8 %4454 to i1
  br i1 %4455, label %4465, label %4456

4456:                                             ; preds = %4451
  store i32 257, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %348) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %347) #10
  br label %4496

4457:                                             ; preds = %4444
  %4458 = landingpad { ptr, i32 }
          cleanup
  %4459 = extractvalue { ptr, i32 } %4458, 0
  store ptr %4459, ptr %11, align 8
  %4460 = extractvalue { ptr, i32 } %4458, 1
  store i32 %4460, ptr %12, align 4
  br label %4495

4461:                                             ; preds = %4447
  %4462 = landingpad { ptr, i32 }
          cleanup
  %4463 = extractvalue { ptr, i32 } %4462, 0
  store ptr %4463, ptr %11, align 8
  %4464 = extractvalue { ptr, i32 } %4462, 1
  store i32 %4464, ptr %12, align 4
  br label %4494

4465:                                             ; preds = %4451
  call void @llvm.lifetime.start.p0(i64 40, ptr %349) #10
  %4466 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %350, i32 0, i32 0
  %4467 = load ptr, ptr %347, align 8, !tbaa !5
  %4468 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %4467, i32 0, i32 0
  %4469 = load i8, ptr %4468, align 1, !tbaa !42, !range !40, !noundef !41
  %4470 = trunc i8 %4469 to i1
  br i1 %4470, label %4471, label %4476

4471:                                             ; preds = %4465
  %4472 = load ptr, ptr %348, align 8, !tbaa !5
  %4473 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %4472, i32 0, i32 0
  %4474 = load i8, ptr %4473, align 1, !tbaa !42, !range !40, !noundef !41
  %4475 = trunc i8 %4474 to i1
  br label %4476

4476:                                             ; preds = %4471, %4465
  %4477 = phi i1 [ false, %4465 ], [ %4475, %4471 ]
  %4478 = zext i1 %4477 to i8
  store i8 %4478, ptr %4466, align 1, !tbaa !42
  %4479 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %350, i32 0, i32 0
  %4480 = load i8, ptr %4479, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %349, i8 %4480)
          to label %4481 unwind label %4485

4481:                                             ; preds = %4476
  %4482 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %349)
          to label %4483 unwind label %4489

4483:                                             ; preds = %4481
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %349) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %349) #10
  br label %4484

4484:                                             ; preds = %4483
  store i8 0, ptr %346, align 1, !tbaa !9
  br label %4451, !llvm.loop !109

4485:                                             ; preds = %4476
  %4486 = landingpad { ptr, i32 }
          cleanup
  %4487 = extractvalue { ptr, i32 } %4486, 0
  store ptr %4487, ptr %11, align 8
  %4488 = extractvalue { ptr, i32 } %4486, 1
  store i32 %4488, ptr %12, align 4
  br label %4493

4489:                                             ; preds = %4481
  %4490 = landingpad { ptr, i32 }
          cleanup
  %4491 = extractvalue { ptr, i32 } %4490, 0
  store ptr %4491, ptr %11, align 8
  %4492 = extractvalue { ptr, i32 } %4490, 1
  store i32 %4492, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %349) #10
  br label %4493

4493:                                             ; preds = %4489, %4485
  call void @llvm.lifetime.end.p0(i64 40, ptr %349) #10
  br label %4494

4494:                                             ; preds = %4493, %4461
  call void @llvm.lifetime.end.p0(i64 8, ptr %348) #10
  br label %4495

4495:                                             ; preds = %4494, %4457
  call void @llvm.lifetime.end.p0(i64 8, ptr %347) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %346) #10
  br label %4701

4496:                                             ; preds = %4456
  br label %4497

4497:                                             ; preds = %4496
  store i8 0, ptr %346, align 1, !tbaa !9
  br label %4440, !llvm.loop !110

4498:                                             ; preds = %4443
  br label %4699

4499:                                             ; preds = %4432
  call void @llvm.lifetime.start.p0(i64 1, ptr %351) #10
  store i8 1, ptr %351, align 1, !tbaa !9
  br label %4500

4500:                                             ; preds = %4598, %4499
  %4501 = load i8, ptr %351, align 1, !tbaa !9, !range !40, !noundef !41
  %4502 = trunc i8 %4501 to i1
  br i1 %4502, label %4504, label %4503

4503:                                             ; preds = %4500
  store i32 260, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %351) #10
  br label %4599

4504:                                             ; preds = %4500
  call void @llvm.lifetime.start.p0(i64 8, ptr %352) #10
  %4505 = load ptr, ptr %344, align 8, !tbaa !5
  %4506 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %4505)
          to label %4507 unwind label %4517

4507:                                             ; preds = %4504
  store ptr %4506, ptr %352, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %353) #10
  %4508 = load ptr, ptr %345, align 8, !tbaa !5
  %4509 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %4508)
          to label %4510 unwind label %4521

4510:                                             ; preds = %4507
  store ptr %4509, ptr %353, align 8, !tbaa !5
  br label %4511

4511:                                             ; preds = %4585, %4510
  %4512 = load ptr, ptr %352, align 8, !tbaa !5
  %4513 = load ptr, ptr %353, align 8, !tbaa !5
  %4514 = load i8, ptr %351, align 1, !tbaa !9, !range !40, !noundef !41
  %4515 = trunc i8 %4514 to i1
  br i1 %4515, label %4525, label %4516

4516:                                             ; preds = %4511
  store i32 263, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %353) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %352) #10
  br label %4597

4517:                                             ; preds = %4504
  %4518 = landingpad { ptr, i32 }
          cleanup
  %4519 = extractvalue { ptr, i32 } %4518, 0
  store ptr %4519, ptr %11, align 8
  %4520 = extractvalue { ptr, i32 } %4518, 1
  store i32 %4520, ptr %12, align 4
  br label %4596

4521:                                             ; preds = %4507
  %4522 = landingpad { ptr, i32 }
          cleanup
  %4523 = extractvalue { ptr, i32 } %4522, 0
  store ptr %4523, ptr %11, align 8
  %4524 = extractvalue { ptr, i32 } %4522, 1
  store i32 %4524, ptr %12, align 4
  br label %4595

4525:                                             ; preds = %4511
  br label %4526

4526:                                             ; preds = %4525
  %4527 = load ptr, ptr %352, align 8, !tbaa !5
  %4528 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4527, i32 0, i32 1
  %4529 = load i32, ptr %4528, align 8, !tbaa !60
  %4530 = load ptr, ptr %353, align 8, !tbaa !5
  %4531 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4530, i32 0, i32 1
  %4532 = load i32, ptr %4531, align 8, !tbaa !60
  %4533 = icmp eq i32 %4529, %4532
  br i1 %4533, label %4545, label %4534

4534:                                             ; preds = %4526
  %4535 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %355) #10
  %4536 = getelementptr inbounds %class.anon.505, ptr %355, i32 0, i32 0
  %4537 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4537, ptr %4536, align 8, !tbaa !5
  %4538 = getelementptr inbounds %class.anon.505, ptr %355, i32 0, i32 1
  %4539 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4539, ptr %4538, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_33vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %354, ptr noundef nonnull align 8 dereferenceable(16) %355) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4535, ptr noundef %354)
          to label %4540 unwind label %4541

4540:                                             ; preds = %4534
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %354) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %355) #10
  br label %4545

4541:                                             ; preds = %4534
  %4542 = landingpad { ptr, i32 }
          cleanup
  %4543 = extractvalue { ptr, i32 } %4542, 0
  store ptr %4543, ptr %11, align 8
  %4544 = extractvalue { ptr, i32 } %4542, 1
  store i32 %4544, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %354) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %355) #10
  br label %4595

4545:                                             ; preds = %4540, %4526
  br label %4546

4546:                                             ; preds = %4545
  br label %4547

4547:                                             ; preds = %4546
  call void @llvm.lifetime.start.p0(i64 40, ptr %356) #10
  %4548 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %357, i32 0, i32 0
  %4549 = load ptr, ptr %352, align 8, !tbaa !5
  %4550 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4549, i32 0, i32 1
  %4551 = load i32, ptr %4550, align 8, !tbaa !60
  %4552 = load ptr, ptr %352, align 8, !tbaa !5
  %4553 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4552, i32 0, i32 0
  %4554 = load ptr, ptr %353, align 8, !tbaa !5
  %4555 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4554, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %359, ptr align 8 %4555, i64 16, i1 false), !tbaa.struct !56
  %4556 = getelementptr inbounds { i64, i64 }, ptr %359, i32 0, i32 0
  %4557 = load i64, ptr %4556, align 8
  %4558 = getelementptr inbounds { i64, i64 }, ptr %359, i32 0, i32 1
  %4559 = load i64, ptr %4558, align 8
  %4560 = invoke { i64, i64 } @_ZNK4S128anES_(ptr noundef nonnull align 8 dereferenceable(16) %4553, i64 %4557, i64 %4559)
          to label %4561 unwind label %4586

4561:                                             ; preds = %4547
  %4562 = getelementptr inbounds %class.S128, ptr %358, i32 0, i32 0
  %4563 = getelementptr inbounds { i64, i64 }, ptr %4562, i32 0, i32 0
  %4564 = extractvalue { i64, i64 } %4560, 0
  store i64 %4564, ptr %4563, align 8
  %4565 = getelementptr inbounds { i64, i64 }, ptr %4562, i32 0, i32 1
  %4566 = extractvalue { i64, i64 } %4560, 1
  store i64 %4566, ptr %4565, align 8
  %4567 = getelementptr inbounds { i64, i64 }, ptr %358, i32 0, i32 0
  %4568 = load i64, ptr %4567, align 8
  %4569 = getelementptr inbounds { i64, i64 }, ptr %358, i32 0, i32 1
  %4570 = load i64, ptr %4569, align 8
  %4571 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %4551, i64 %4568, i64 %4570)
          to label %4572 unwind label %4586

4572:                                             ; preds = %4561
  %4573 = getelementptr inbounds %class.S128, ptr %4548, i32 0, i32 0
  %4574 = getelementptr inbounds { i64, i64 }, ptr %4573, i32 0, i32 0
  %4575 = extractvalue { i64, i64 } %4571, 0
  store i64 %4575, ptr %4574, align 8
  %4576 = getelementptr inbounds { i64, i64 }, ptr %4573, i32 0, i32 1
  %4577 = extractvalue { i64, i64 } %4571, 1
  store i64 %4577, ptr %4576, align 8
  %4578 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %357, i32 0, i32 1
  %4579 = load ptr, ptr %352, align 8, !tbaa !5
  %4580 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4579, i32 0, i32 1
  %4581 = load i32, ptr %4580, align 8, !tbaa !60
  store i32 %4581, ptr %4578, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %356, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %357)
          to label %4582 unwind label %4586

4582:                                             ; preds = %4572
  %4583 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %356)
          to label %4584 unwind label %4590

4584:                                             ; preds = %4582
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %356) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %356) #10
  br label %4585

4585:                                             ; preds = %4584
  store i8 0, ptr %351, align 1, !tbaa !9
  br label %4511, !llvm.loop !111

4586:                                             ; preds = %4572, %4561, %4547
  %4587 = landingpad { ptr, i32 }
          cleanup
  %4588 = extractvalue { ptr, i32 } %4587, 0
  store ptr %4588, ptr %11, align 8
  %4589 = extractvalue { ptr, i32 } %4587, 1
  store i32 %4589, ptr %12, align 4
  br label %4594

4590:                                             ; preds = %4582
  %4591 = landingpad { ptr, i32 }
          cleanup
  %4592 = extractvalue { ptr, i32 } %4591, 0
  store ptr %4592, ptr %11, align 8
  %4593 = extractvalue { ptr, i32 } %4591, 1
  store i32 %4593, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %356) #10
  br label %4594

4594:                                             ; preds = %4590, %4586
  call void @llvm.lifetime.end.p0(i64 40, ptr %356) #10
  br label %4595

4595:                                             ; preds = %4594, %4541, %4521
  call void @llvm.lifetime.end.p0(i64 8, ptr %353) #10
  br label %4596

4596:                                             ; preds = %4595, %4517
  call void @llvm.lifetime.end.p0(i64 8, ptr %352) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %351) #10
  br label %4701

4597:                                             ; preds = %4516
  br label %4598

4598:                                             ; preds = %4597
  store i8 0, ptr %351, align 1, !tbaa !9
  br label %4500, !llvm.loop !112

4599:                                             ; preds = %4503
  br label %4699

4600:                                             ; preds = %4432
  call void @llvm.lifetime.start.p0(i64 1, ptr %360) #10
  store i8 1, ptr %360, align 1, !tbaa !9
  br label %4601

4601:                                             ; preds = %4697, %4600
  %4602 = load i8, ptr %360, align 1, !tbaa !9, !range !40, !noundef !41
  %4603 = trunc i8 %4602 to i1
  br i1 %4603, label %4605, label %4604

4604:                                             ; preds = %4601
  store i32 268, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %360) #10
  br label %4698

4605:                                             ; preds = %4601
  call void @llvm.lifetime.start.p0(i64 8, ptr %361) #10
  %4606 = load ptr, ptr %344, align 8, !tbaa !5
  %4607 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %4606)
          to label %4608 unwind label %4618

4608:                                             ; preds = %4605
  store ptr %4607, ptr %361, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %362) #10
  %4609 = load ptr, ptr %345, align 8, !tbaa !5
  %4610 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %4609)
          to label %4611 unwind label %4622

4611:                                             ; preds = %4608
  store ptr %4610, ptr %362, align 8, !tbaa !5
  br label %4612

4612:                                             ; preds = %4684, %4611
  %4613 = load ptr, ptr %361, align 8, !tbaa !5
  %4614 = load ptr, ptr %362, align 8, !tbaa !5
  %4615 = load i8, ptr %360, align 1, !tbaa !9, !range !40, !noundef !41
  %4616 = trunc i8 %4615 to i1
  br i1 %4616, label %4626, label %4617

4617:                                             ; preds = %4612
  store i32 271, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %362) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %361) #10
  br label %4696

4618:                                             ; preds = %4605
  %4619 = landingpad { ptr, i32 }
          cleanup
  %4620 = extractvalue { ptr, i32 } %4619, 0
  store ptr %4620, ptr %11, align 8
  %4621 = extractvalue { ptr, i32 } %4619, 1
  store i32 %4621, ptr %12, align 4
  br label %4695

4622:                                             ; preds = %4608
  %4623 = landingpad { ptr, i32 }
          cleanup
  %4624 = extractvalue { ptr, i32 } %4623, 0
  store ptr %4624, ptr %11, align 8
  %4625 = extractvalue { ptr, i32 } %4623, 1
  store i32 %4625, ptr %12, align 4
  br label %4694

4626:                                             ; preds = %4612
  br label %4627

4627:                                             ; preds = %4626
  %4628 = load ptr, ptr %361, align 8, !tbaa !5
  %4629 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4628, i32 0, i32 1
  %4630 = load i32, ptr %4629, align 8, !tbaa !21
  %4631 = load ptr, ptr %362, align 8, !tbaa !5
  %4632 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4631, i32 0, i32 1
  %4633 = load i32, ptr %4632, align 8, !tbaa !21
  %4634 = icmp eq i32 %4630, %4633
  br i1 %4634, label %4646, label %4635

4635:                                             ; preds = %4627
  %4636 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %364) #10
  %4637 = getelementptr inbounds %class.anon.506, ptr %364, i32 0, i32 0
  %4638 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4638, ptr %4637, align 8, !tbaa !5
  %4639 = getelementptr inbounds %class.anon.506, ptr %364, i32 0, i32 1
  %4640 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4640, ptr %4639, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_34vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %363, ptr noundef nonnull align 8 dereferenceable(16) %364) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4636, ptr noundef %363)
          to label %4641 unwind label %4642

4641:                                             ; preds = %4635
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %364) #10
  br label %4646

4642:                                             ; preds = %4635
  %4643 = landingpad { ptr, i32 }
          cleanup
  %4644 = extractvalue { ptr, i32 } %4643, 0
  store ptr %4644, ptr %11, align 8
  %4645 = extractvalue { ptr, i32 } %4643, 1
  store i32 %4645, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %363) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %364) #10
  br label %4694

4646:                                             ; preds = %4641, %4627
  br label %4647

4647:                                             ; preds = %4646
  br label %4648

4648:                                             ; preds = %4647
  call void @llvm.lifetime.start.p0(i64 40, ptr %365) #10
  %4649 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %366, i32 0, i32 0
  %4650 = load ptr, ptr %361, align 8, !tbaa !5
  %4651 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4650, i32 0, i32 1
  %4652 = load i32, ptr %4651, align 8, !tbaa !21
  %4653 = load ptr, ptr %361, align 8, !tbaa !5
  %4654 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4653, i32 0, i32 0
  %4655 = load ptr, ptr %362, align 8, !tbaa !5
  %4656 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4655, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %368, ptr align 8 %4656, i64 16, i1 false), !tbaa.struct !56
  %4657 = getelementptr inbounds { i64, i64 }, ptr %368, i32 0, i32 0
  %4658 = load i64, ptr %4657, align 8
  %4659 = getelementptr inbounds { i64, i64 }, ptr %368, i32 0, i32 1
  %4660 = load i64, ptr %4659, align 8
  %4661 = invoke { i64, i64 } @_ZNK4U128anES_(ptr noundef nonnull align 8 dereferenceable(16) %4654, i64 %4658, i64 %4660)
          to label %4662 unwind label %4685

4662:                                             ; preds = %4648
  %4663 = getelementptr inbounds { i64, i64 }, ptr %367, i32 0, i32 0
  %4664 = extractvalue { i64, i64 } %4661, 0
  store i64 %4664, ptr %4663, align 8
  %4665 = getelementptr inbounds { i64, i64 }, ptr %367, i32 0, i32 1
  %4666 = extractvalue { i64, i64 } %4661, 1
  store i64 %4666, ptr %4665, align 8
  %4667 = getelementptr inbounds { i64, i64 }, ptr %367, i32 0, i32 0
  %4668 = load i64, ptr %4667, align 8
  %4669 = getelementptr inbounds { i64, i64 }, ptr %367, i32 0, i32 1
  %4670 = load i64, ptr %4669, align 8
  %4671 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %4652, i64 %4668, i64 %4670)
          to label %4672 unwind label %4685

4672:                                             ; preds = %4662
  %4673 = getelementptr inbounds { i64, i64 }, ptr %4649, i32 0, i32 0
  %4674 = extractvalue { i64, i64 } %4671, 0
  store i64 %4674, ptr %4673, align 8
  %4675 = getelementptr inbounds { i64, i64 }, ptr %4649, i32 0, i32 1
  %4676 = extractvalue { i64, i64 } %4671, 1
  store i64 %4676, ptr %4675, align 8
  %4677 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %366, i32 0, i32 1
  %4678 = load ptr, ptr %361, align 8, !tbaa !5
  %4679 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4678, i32 0, i32 1
  %4680 = load i32, ptr %4679, align 8, !tbaa !21
  store i32 %4680, ptr %4677, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %365, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %366)
          to label %4681 unwind label %4685

4681:                                             ; preds = %4672
  %4682 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %365)
          to label %4683 unwind label %4689

4683:                                             ; preds = %4681
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %365) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %365) #10
  br label %4684

4684:                                             ; preds = %4683
  store i8 0, ptr %360, align 1, !tbaa !9
  br label %4612, !llvm.loop !113

4685:                                             ; preds = %4672, %4662, %4648
  %4686 = landingpad { ptr, i32 }
          cleanup
  %4687 = extractvalue { ptr, i32 } %4686, 0
  store ptr %4687, ptr %11, align 8
  %4688 = extractvalue { ptr, i32 } %4686, 1
  store i32 %4688, ptr %12, align 4
  br label %4693

4689:                                             ; preds = %4681
  %4690 = landingpad { ptr, i32 }
          cleanup
  %4691 = extractvalue { ptr, i32 } %4690, 0
  store ptr %4691, ptr %11, align 8
  %4692 = extractvalue { ptr, i32 } %4690, 1
  store i32 %4692, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %365) #10
  br label %4693

4693:                                             ; preds = %4689, %4685
  call void @llvm.lifetime.end.p0(i64 40, ptr %365) #10
  br label %4694

4694:                                             ; preds = %4693, %4642, %4622
  call void @llvm.lifetime.end.p0(i64 8, ptr %362) #10
  br label %4695

4695:                                             ; preds = %4694, %4618
  call void @llvm.lifetime.end.p0(i64 8, ptr %361) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %360) #10
  br label %4701

4696:                                             ; preds = %4617
  br label %4697

4697:                                             ; preds = %4696
  store i8 0, ptr %360, align 1, !tbaa !9
  br label %4601, !llvm.loop !114

4698:                                             ; preds = %4604
  br label %4699

4699:                                             ; preds = %4698, %4599, %4498, %4438
  br label %4700

4700:                                             ; preds = %4699
  store i8 0, ptr %343, align 1, !tbaa !9
  br label %4425, !llvm.loop !115

4701:                                             ; preds = %4695, %4596, %4495, %4433
  call void @llvm.lifetime.end.p0(i64 8, ptr %345) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %344) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %343) #10
  br label %5982

4702:                                             ; preds = %4428
  br label %4703

4703:                                             ; preds = %4702
  store i8 0, ptr %343, align 1, !tbaa !9
  br label %4418, !llvm.loop !116

4704:                                             ; preds = %4421
  br label %5926

4705:                                             ; preds = %2563
  br label %4706

4706:                                             ; preds = %4705
  %4707 = load ptr, ptr %179, align 8, !tbaa !5
  %4708 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4707)
          to label %4709 unwind label %2587

4709:                                             ; preds = %4706
  %4710 = load ptr, ptr %180, align 8, !tbaa !5
  %4711 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4710)
          to label %4712 unwind label %2587

4712:                                             ; preds = %4709
  %4713 = icmp eq i32 %4708, %4711
  br i1 %4713, label %4725, label %4714

4714:                                             ; preds = %4712
  %4715 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %370) #10
  %4716 = getelementptr inbounds %class.anon.507, ptr %370, i32 0, i32 0
  %4717 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4717, ptr %4716, align 8, !tbaa !5
  %4718 = getelementptr inbounds %class.anon.507, ptr %370, i32 0, i32 1
  %4719 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4719, ptr %4718, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_35vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %369, ptr noundef nonnull align 8 dereferenceable(16) %370) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4715, ptr noundef %369)
          to label %4720 unwind label %4721

4720:                                             ; preds = %4714
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %370) #10
  br label %4725

4721:                                             ; preds = %4714
  %4722 = landingpad { ptr, i32 }
          cleanup
  %4723 = extractvalue { ptr, i32 } %4722, 0
  store ptr %4723, ptr %11, align 8
  %4724 = extractvalue { ptr, i32 } %4722, 1
  store i32 %4724, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %369) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %370) #10
  br label %5982

4725:                                             ; preds = %4720, %4712
  br label %4726

4726:                                             ; preds = %4725
  br label %4727

4727:                                             ; preds = %4726
  call void @llvm.lifetime.start.p0(i64 1, ptr %371) #10
  store i8 1, ptr %371, align 1, !tbaa !9
  br label %4728

4728:                                             ; preds = %5013, %4727
  %4729 = load i8, ptr %371, align 1, !tbaa !9, !range !40, !noundef !41
  %4730 = trunc i8 %4729 to i1
  br i1 %4730, label %4732, label %4731

4731:                                             ; preds = %4728
  store i32 278, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %371) #10
  br label %5014

4732:                                             ; preds = %4728
  call void @llvm.lifetime.start.p0(i64 8, ptr %372) #10
  %4733 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4733, ptr %372, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %373) #10
  %4734 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4734, ptr %373, align 8, !tbaa !5
  br label %4735

4735:                                             ; preds = %5010, %4732
  %4736 = load i8, ptr %371, align 1, !tbaa !9, !range !40, !noundef !41
  %4737 = trunc i8 %4736 to i1
  br i1 %4737, label %4739, label %4738

4738:                                             ; preds = %4735
  store i32 281, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %373) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %372) #10
  br label %5012

4739:                                             ; preds = %4735
  %4740 = load ptr, ptr %372, align 8, !tbaa !5
  %4741 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %4740)
          to label %4742 unwind label %4743

4742:                                             ; preds = %4739
  switch i32 %4741, label %4748 [
    i32 0, label %4747
    i32 4, label %4749
    i32 1, label %4809
    i32 2, label %4910
  ]

4743:                                             ; preds = %4739
  %4744 = landingpad { ptr, i32 }
          cleanup
  %4745 = extractvalue { ptr, i32 } %4744, 0
  store ptr %4745, ptr %11, align 8
  %4746 = extractvalue { ptr, i32 } %4744, 1
  store i32 %4746, ptr %12, align 4
  br label %5011

4747:                                             ; preds = %4742
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4133, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

4748:                                             ; preds = %4742
  br label %5009

4749:                                             ; preds = %4742
  call void @llvm.lifetime.start.p0(i64 1, ptr %374) #10
  store i8 1, ptr %374, align 1, !tbaa !9
  br label %4750

4750:                                             ; preds = %4807, %4749
  %4751 = load i8, ptr %374, align 1, !tbaa !9, !range !40, !noundef !41
  %4752 = trunc i8 %4751 to i1
  br i1 %4752, label %4754, label %4753

4753:                                             ; preds = %4750
  store i32 285, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %374) #10
  br label %4808

4754:                                             ; preds = %4750
  call void @llvm.lifetime.start.p0(i64 8, ptr %375) #10
  %4755 = load ptr, ptr %372, align 8, !tbaa !5
  %4756 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %4755)
          to label %4757 unwind label %4767

4757:                                             ; preds = %4754
  store ptr %4756, ptr %375, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %376) #10
  %4758 = load ptr, ptr %373, align 8, !tbaa !5
  %4759 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %4758)
          to label %4760 unwind label %4771

4760:                                             ; preds = %4757
  store ptr %4759, ptr %376, align 8, !tbaa !5
  br label %4761

4761:                                             ; preds = %4794, %4760
  %4762 = load ptr, ptr %375, align 8, !tbaa !5
  %4763 = load ptr, ptr %376, align 8, !tbaa !5
  %4764 = load i8, ptr %374, align 1, !tbaa !9, !range !40, !noundef !41
  %4765 = trunc i8 %4764 to i1
  br i1 %4765, label %4775, label %4766

4766:                                             ; preds = %4761
  store i32 288, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %376) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %375) #10
  br label %4806

4767:                                             ; preds = %4754
  %4768 = landingpad { ptr, i32 }
          cleanup
  %4769 = extractvalue { ptr, i32 } %4768, 0
  store ptr %4769, ptr %11, align 8
  %4770 = extractvalue { ptr, i32 } %4768, 1
  store i32 %4770, ptr %12, align 4
  br label %4805

4771:                                             ; preds = %4757
  %4772 = landingpad { ptr, i32 }
          cleanup
  %4773 = extractvalue { ptr, i32 } %4772, 0
  store ptr %4773, ptr %11, align 8
  %4774 = extractvalue { ptr, i32 } %4772, 1
  store i32 %4774, ptr %12, align 4
  br label %4804

4775:                                             ; preds = %4761
  call void @llvm.lifetime.start.p0(i64 40, ptr %377) #10
  %4776 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %378, i32 0, i32 0
  %4777 = load ptr, ptr %375, align 8, !tbaa !5
  %4778 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %4777, i32 0, i32 0
  %4779 = load i8, ptr %4778, align 1, !tbaa !42, !range !40, !noundef !41
  %4780 = trunc i8 %4779 to i1
  br i1 %4780, label %4786, label %4781

4781:                                             ; preds = %4775
  %4782 = load ptr, ptr %376, align 8, !tbaa !5
  %4783 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %4782, i32 0, i32 0
  %4784 = load i8, ptr %4783, align 1, !tbaa !42, !range !40, !noundef !41
  %4785 = trunc i8 %4784 to i1
  br label %4786

4786:                                             ; preds = %4781, %4775
  %4787 = phi i1 [ true, %4775 ], [ %4785, %4781 ]
  %4788 = zext i1 %4787 to i8
  store i8 %4788, ptr %4776, align 1, !tbaa !42
  %4789 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %378, i32 0, i32 0
  %4790 = load i8, ptr %4789, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %377, i8 %4790)
          to label %4791 unwind label %4795

4791:                                             ; preds = %4786
  %4792 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %377)
          to label %4793 unwind label %4799

4793:                                             ; preds = %4791
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %377) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %377) #10
  br label %4794

4794:                                             ; preds = %4793
  store i8 0, ptr %374, align 1, !tbaa !9
  br label %4761, !llvm.loop !117

4795:                                             ; preds = %4786
  %4796 = landingpad { ptr, i32 }
          cleanup
  %4797 = extractvalue { ptr, i32 } %4796, 0
  store ptr %4797, ptr %11, align 8
  %4798 = extractvalue { ptr, i32 } %4796, 1
  store i32 %4798, ptr %12, align 4
  br label %4803

4799:                                             ; preds = %4791
  %4800 = landingpad { ptr, i32 }
          cleanup
  %4801 = extractvalue { ptr, i32 } %4800, 0
  store ptr %4801, ptr %11, align 8
  %4802 = extractvalue { ptr, i32 } %4800, 1
  store i32 %4802, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %377) #10
  br label %4803

4803:                                             ; preds = %4799, %4795
  call void @llvm.lifetime.end.p0(i64 40, ptr %377) #10
  br label %4804

4804:                                             ; preds = %4803, %4771
  call void @llvm.lifetime.end.p0(i64 8, ptr %376) #10
  br label %4805

4805:                                             ; preds = %4804, %4767
  call void @llvm.lifetime.end.p0(i64 8, ptr %375) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %374) #10
  br label %5011

4806:                                             ; preds = %4766
  br label %4807

4807:                                             ; preds = %4806
  store i8 0, ptr %374, align 1, !tbaa !9
  br label %4750, !llvm.loop !118

4808:                                             ; preds = %4753
  br label %5009

4809:                                             ; preds = %4742
  call void @llvm.lifetime.start.p0(i64 1, ptr %379) #10
  store i8 1, ptr %379, align 1, !tbaa !9
  br label %4810

4810:                                             ; preds = %4908, %4809
  %4811 = load i8, ptr %379, align 1, !tbaa !9, !range !40, !noundef !41
  %4812 = trunc i8 %4811 to i1
  br i1 %4812, label %4814, label %4813

4813:                                             ; preds = %4810
  store i32 291, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %379) #10
  br label %4909

4814:                                             ; preds = %4810
  call void @llvm.lifetime.start.p0(i64 8, ptr %380) #10
  %4815 = load ptr, ptr %372, align 8, !tbaa !5
  %4816 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %4815)
          to label %4817 unwind label %4827

4817:                                             ; preds = %4814
  store ptr %4816, ptr %380, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %381) #10
  %4818 = load ptr, ptr %373, align 8, !tbaa !5
  %4819 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %4818)
          to label %4820 unwind label %4831

4820:                                             ; preds = %4817
  store ptr %4819, ptr %381, align 8, !tbaa !5
  br label %4821

4821:                                             ; preds = %4895, %4820
  %4822 = load ptr, ptr %380, align 8, !tbaa !5
  %4823 = load ptr, ptr %381, align 8, !tbaa !5
  %4824 = load i8, ptr %379, align 1, !tbaa !9, !range !40, !noundef !41
  %4825 = trunc i8 %4824 to i1
  br i1 %4825, label %4835, label %4826

4826:                                             ; preds = %4821
  store i32 294, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %381) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %380) #10
  br label %4907

4827:                                             ; preds = %4814
  %4828 = landingpad { ptr, i32 }
          cleanup
  %4829 = extractvalue { ptr, i32 } %4828, 0
  store ptr %4829, ptr %11, align 8
  %4830 = extractvalue { ptr, i32 } %4828, 1
  store i32 %4830, ptr %12, align 4
  br label %4906

4831:                                             ; preds = %4817
  %4832 = landingpad { ptr, i32 }
          cleanup
  %4833 = extractvalue { ptr, i32 } %4832, 0
  store ptr %4833, ptr %11, align 8
  %4834 = extractvalue { ptr, i32 } %4832, 1
  store i32 %4834, ptr %12, align 4
  br label %4905

4835:                                             ; preds = %4821
  br label %4836

4836:                                             ; preds = %4835
  %4837 = load ptr, ptr %380, align 8, !tbaa !5
  %4838 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4837, i32 0, i32 1
  %4839 = load i32, ptr %4838, align 8, !tbaa !60
  %4840 = load ptr, ptr %381, align 8, !tbaa !5
  %4841 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4840, i32 0, i32 1
  %4842 = load i32, ptr %4841, align 8, !tbaa !60
  %4843 = icmp eq i32 %4839, %4842
  br i1 %4843, label %4855, label %4844

4844:                                             ; preds = %4836
  %4845 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %383) #10
  %4846 = getelementptr inbounds %class.anon.508, ptr %383, i32 0, i32 0
  %4847 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4847, ptr %4846, align 8, !tbaa !5
  %4848 = getelementptr inbounds %class.anon.508, ptr %383, i32 0, i32 1
  %4849 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4849, ptr %4848, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_36vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %382, ptr noundef nonnull align 8 dereferenceable(16) %383) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4845, ptr noundef %382)
          to label %4850 unwind label %4851

4850:                                             ; preds = %4844
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %383) #10
  br label %4855

4851:                                             ; preds = %4844
  %4852 = landingpad { ptr, i32 }
          cleanup
  %4853 = extractvalue { ptr, i32 } %4852, 0
  store ptr %4853, ptr %11, align 8
  %4854 = extractvalue { ptr, i32 } %4852, 1
  store i32 %4854, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %382) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %383) #10
  br label %4905

4855:                                             ; preds = %4850, %4836
  br label %4856

4856:                                             ; preds = %4855
  br label %4857

4857:                                             ; preds = %4856
  call void @llvm.lifetime.start.p0(i64 40, ptr %384) #10
  %4858 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %385, i32 0, i32 0
  %4859 = load ptr, ptr %380, align 8, !tbaa !5
  %4860 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4859, i32 0, i32 1
  %4861 = load i32, ptr %4860, align 8, !tbaa !60
  %4862 = load ptr, ptr %380, align 8, !tbaa !5
  %4863 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4862, i32 0, i32 0
  %4864 = load ptr, ptr %381, align 8, !tbaa !5
  %4865 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4864, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %387, ptr align 8 %4865, i64 16, i1 false), !tbaa.struct !56
  %4866 = getelementptr inbounds { i64, i64 }, ptr %387, i32 0, i32 0
  %4867 = load i64, ptr %4866, align 8
  %4868 = getelementptr inbounds { i64, i64 }, ptr %387, i32 0, i32 1
  %4869 = load i64, ptr %4868, align 8
  %4870 = invoke { i64, i64 } @_ZNK4S128orES_(ptr noundef nonnull align 8 dereferenceable(16) %4863, i64 %4867, i64 %4869)
          to label %4871 unwind label %4896

4871:                                             ; preds = %4857
  %4872 = getelementptr inbounds %class.S128, ptr %386, i32 0, i32 0
  %4873 = getelementptr inbounds { i64, i64 }, ptr %4872, i32 0, i32 0
  %4874 = extractvalue { i64, i64 } %4870, 0
  store i64 %4874, ptr %4873, align 8
  %4875 = getelementptr inbounds { i64, i64 }, ptr %4872, i32 0, i32 1
  %4876 = extractvalue { i64, i64 } %4870, 1
  store i64 %4876, ptr %4875, align 8
  %4877 = getelementptr inbounds { i64, i64 }, ptr %386, i32 0, i32 0
  %4878 = load i64, ptr %4877, align 8
  %4879 = getelementptr inbounds { i64, i64 }, ptr %386, i32 0, i32 1
  %4880 = load i64, ptr %4879, align 8
  %4881 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %4861, i64 %4878, i64 %4880)
          to label %4882 unwind label %4896

4882:                                             ; preds = %4871
  %4883 = getelementptr inbounds %class.S128, ptr %4858, i32 0, i32 0
  %4884 = getelementptr inbounds { i64, i64 }, ptr %4883, i32 0, i32 0
  %4885 = extractvalue { i64, i64 } %4881, 0
  store i64 %4885, ptr %4884, align 8
  %4886 = getelementptr inbounds { i64, i64 }, ptr %4883, i32 0, i32 1
  %4887 = extractvalue { i64, i64 } %4881, 1
  store i64 %4887, ptr %4886, align 8
  %4888 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %385, i32 0, i32 1
  %4889 = load ptr, ptr %380, align 8, !tbaa !5
  %4890 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %4889, i32 0, i32 1
  %4891 = load i32, ptr %4890, align 8, !tbaa !60
  store i32 %4891, ptr %4888, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %384, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %385)
          to label %4892 unwind label %4896

4892:                                             ; preds = %4882
  %4893 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %384)
          to label %4894 unwind label %4900

4894:                                             ; preds = %4892
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %384) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %384) #10
  br label %4895

4895:                                             ; preds = %4894
  store i8 0, ptr %379, align 1, !tbaa !9
  br label %4821, !llvm.loop !119

4896:                                             ; preds = %4882, %4871, %4857
  %4897 = landingpad { ptr, i32 }
          cleanup
  %4898 = extractvalue { ptr, i32 } %4897, 0
  store ptr %4898, ptr %11, align 8
  %4899 = extractvalue { ptr, i32 } %4897, 1
  store i32 %4899, ptr %12, align 4
  br label %4904

4900:                                             ; preds = %4892
  %4901 = landingpad { ptr, i32 }
          cleanup
  %4902 = extractvalue { ptr, i32 } %4901, 0
  store ptr %4902, ptr %11, align 8
  %4903 = extractvalue { ptr, i32 } %4901, 1
  store i32 %4903, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %384) #10
  br label %4904

4904:                                             ; preds = %4900, %4896
  call void @llvm.lifetime.end.p0(i64 40, ptr %384) #10
  br label %4905

4905:                                             ; preds = %4904, %4851, %4831
  call void @llvm.lifetime.end.p0(i64 8, ptr %381) #10
  br label %4906

4906:                                             ; preds = %4905, %4827
  call void @llvm.lifetime.end.p0(i64 8, ptr %380) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %379) #10
  br label %5011

4907:                                             ; preds = %4826
  br label %4908

4908:                                             ; preds = %4907
  store i8 0, ptr %379, align 1, !tbaa !9
  br label %4810, !llvm.loop !120

4909:                                             ; preds = %4813
  br label %5009

4910:                                             ; preds = %4742
  call void @llvm.lifetime.start.p0(i64 1, ptr %388) #10
  store i8 1, ptr %388, align 1, !tbaa !9
  br label %4911

4911:                                             ; preds = %5007, %4910
  %4912 = load i8, ptr %388, align 1, !tbaa !9, !range !40, !noundef !41
  %4913 = trunc i8 %4912 to i1
  br i1 %4913, label %4915, label %4914

4914:                                             ; preds = %4911
  store i32 299, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %388) #10
  br label %5008

4915:                                             ; preds = %4911
  call void @llvm.lifetime.start.p0(i64 8, ptr %389) #10
  %4916 = load ptr, ptr %372, align 8, !tbaa !5
  %4917 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %4916)
          to label %4918 unwind label %4928

4918:                                             ; preds = %4915
  store ptr %4917, ptr %389, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %390) #10
  %4919 = load ptr, ptr %373, align 8, !tbaa !5
  %4920 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %4919)
          to label %4921 unwind label %4932

4921:                                             ; preds = %4918
  store ptr %4920, ptr %390, align 8, !tbaa !5
  br label %4922

4922:                                             ; preds = %4994, %4921
  %4923 = load ptr, ptr %389, align 8, !tbaa !5
  %4924 = load ptr, ptr %390, align 8, !tbaa !5
  %4925 = load i8, ptr %388, align 1, !tbaa !9, !range !40, !noundef !41
  %4926 = trunc i8 %4925 to i1
  br i1 %4926, label %4936, label %4927

4927:                                             ; preds = %4922
  store i32 302, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %390) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %389) #10
  br label %5006

4928:                                             ; preds = %4915
  %4929 = landingpad { ptr, i32 }
          cleanup
  %4930 = extractvalue { ptr, i32 } %4929, 0
  store ptr %4930, ptr %11, align 8
  %4931 = extractvalue { ptr, i32 } %4929, 1
  store i32 %4931, ptr %12, align 4
  br label %5005

4932:                                             ; preds = %4918
  %4933 = landingpad { ptr, i32 }
          cleanup
  %4934 = extractvalue { ptr, i32 } %4933, 0
  store ptr %4934, ptr %11, align 8
  %4935 = extractvalue { ptr, i32 } %4933, 1
  store i32 %4935, ptr %12, align 4
  br label %5004

4936:                                             ; preds = %4922
  br label %4937

4937:                                             ; preds = %4936
  %4938 = load ptr, ptr %389, align 8, !tbaa !5
  %4939 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4938, i32 0, i32 1
  %4940 = load i32, ptr %4939, align 8, !tbaa !21
  %4941 = load ptr, ptr %390, align 8, !tbaa !5
  %4942 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4941, i32 0, i32 1
  %4943 = load i32, ptr %4942, align 8, !tbaa !21
  %4944 = icmp eq i32 %4940, %4943
  br i1 %4944, label %4956, label %4945

4945:                                             ; preds = %4937
  %4946 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %392) #10
  %4947 = getelementptr inbounds %class.anon.509, ptr %392, i32 0, i32 0
  %4948 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %4948, ptr %4947, align 8, !tbaa !5
  %4949 = getelementptr inbounds %class.anon.509, ptr %392, i32 0, i32 1
  %4950 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %4950, ptr %4949, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_37vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %391, ptr noundef nonnull align 8 dereferenceable(16) %392) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %4946, ptr noundef %391)
          to label %4951 unwind label %4952

4951:                                             ; preds = %4945
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %392) #10
  br label %4956

4952:                                             ; preds = %4945
  %4953 = landingpad { ptr, i32 }
          cleanup
  %4954 = extractvalue { ptr, i32 } %4953, 0
  store ptr %4954, ptr %11, align 8
  %4955 = extractvalue { ptr, i32 } %4953, 1
  store i32 %4955, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %391) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %392) #10
  br label %5004

4956:                                             ; preds = %4951, %4937
  br label %4957

4957:                                             ; preds = %4956
  br label %4958

4958:                                             ; preds = %4957
  call void @llvm.lifetime.start.p0(i64 40, ptr %393) #10
  %4959 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %394, i32 0, i32 0
  %4960 = load ptr, ptr %389, align 8, !tbaa !5
  %4961 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4960, i32 0, i32 1
  %4962 = load i32, ptr %4961, align 8, !tbaa !21
  %4963 = load ptr, ptr %389, align 8, !tbaa !5
  %4964 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4963, i32 0, i32 0
  %4965 = load ptr, ptr %390, align 8, !tbaa !5
  %4966 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4965, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %396, ptr align 8 %4966, i64 16, i1 false), !tbaa.struct !56
  %4967 = getelementptr inbounds { i64, i64 }, ptr %396, i32 0, i32 0
  %4968 = load i64, ptr %4967, align 8
  %4969 = getelementptr inbounds { i64, i64 }, ptr %396, i32 0, i32 1
  %4970 = load i64, ptr %4969, align 8
  %4971 = invoke { i64, i64 } @_ZNK4U128orES_(ptr noundef nonnull align 8 dereferenceable(16) %4964, i64 %4968, i64 %4970)
          to label %4972 unwind label %4995

4972:                                             ; preds = %4958
  %4973 = getelementptr inbounds { i64, i64 }, ptr %395, i32 0, i32 0
  %4974 = extractvalue { i64, i64 } %4971, 0
  store i64 %4974, ptr %4973, align 8
  %4975 = getelementptr inbounds { i64, i64 }, ptr %395, i32 0, i32 1
  %4976 = extractvalue { i64, i64 } %4971, 1
  store i64 %4976, ptr %4975, align 8
  %4977 = getelementptr inbounds { i64, i64 }, ptr %395, i32 0, i32 0
  %4978 = load i64, ptr %4977, align 8
  %4979 = getelementptr inbounds { i64, i64 }, ptr %395, i32 0, i32 1
  %4980 = load i64, ptr %4979, align 8
  %4981 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %4962, i64 %4978, i64 %4980)
          to label %4982 unwind label %4995

4982:                                             ; preds = %4972
  %4983 = getelementptr inbounds { i64, i64 }, ptr %4959, i32 0, i32 0
  %4984 = extractvalue { i64, i64 } %4981, 0
  store i64 %4984, ptr %4983, align 8
  %4985 = getelementptr inbounds { i64, i64 }, ptr %4959, i32 0, i32 1
  %4986 = extractvalue { i64, i64 } %4981, 1
  store i64 %4986, ptr %4985, align 8
  %4987 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %394, i32 0, i32 1
  %4988 = load ptr, ptr %389, align 8, !tbaa !5
  %4989 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %4988, i32 0, i32 1
  %4990 = load i32, ptr %4989, align 8, !tbaa !21
  store i32 %4990, ptr %4987, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %393, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %394)
          to label %4991 unwind label %4995

4991:                                             ; preds = %4982
  %4992 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %393)
          to label %4993 unwind label %4999

4993:                                             ; preds = %4991
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %393) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %393) #10
  br label %4994

4994:                                             ; preds = %4993
  store i8 0, ptr %388, align 1, !tbaa !9
  br label %4922, !llvm.loop !121

4995:                                             ; preds = %4982, %4972, %4958
  %4996 = landingpad { ptr, i32 }
          cleanup
  %4997 = extractvalue { ptr, i32 } %4996, 0
  store ptr %4997, ptr %11, align 8
  %4998 = extractvalue { ptr, i32 } %4996, 1
  store i32 %4998, ptr %12, align 4
  br label %5003

4999:                                             ; preds = %4991
  %5000 = landingpad { ptr, i32 }
          cleanup
  %5001 = extractvalue { ptr, i32 } %5000, 0
  store ptr %5001, ptr %11, align 8
  %5002 = extractvalue { ptr, i32 } %5000, 1
  store i32 %5002, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %393) #10
  br label %5003

5003:                                             ; preds = %4999, %4995
  call void @llvm.lifetime.end.p0(i64 40, ptr %393) #10
  br label %5004

5004:                                             ; preds = %5003, %4952, %4932
  call void @llvm.lifetime.end.p0(i64 8, ptr %390) #10
  br label %5005

5005:                                             ; preds = %5004, %4928
  call void @llvm.lifetime.end.p0(i64 8, ptr %389) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %388) #10
  br label %5011

5006:                                             ; preds = %4927
  br label %5007

5007:                                             ; preds = %5006
  store i8 0, ptr %388, align 1, !tbaa !9
  br label %4911, !llvm.loop !122

5008:                                             ; preds = %4914
  br label %5009

5009:                                             ; preds = %5008, %4909, %4808, %4748
  br label %5010

5010:                                             ; preds = %5009
  store i8 0, ptr %371, align 1, !tbaa !9
  br label %4735, !llvm.loop !123

5011:                                             ; preds = %5005, %4906, %4805, %4743
  call void @llvm.lifetime.end.p0(i64 8, ptr %373) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %372) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %371) #10
  br label %5982

5012:                                             ; preds = %4738
  br label %5013

5013:                                             ; preds = %5012
  store i8 0, ptr %371, align 1, !tbaa !9
  br label %4728, !llvm.loop !124

5014:                                             ; preds = %4731
  br label %5926

5015:                                             ; preds = %2563
  br label %5016

5016:                                             ; preds = %5015
  %5017 = load ptr, ptr %179, align 8, !tbaa !5
  %5018 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5017)
          to label %5019 unwind label %2587

5019:                                             ; preds = %5016
  %5020 = load ptr, ptr %180, align 8, !tbaa !5
  %5021 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5020)
          to label %5022 unwind label %2587

5022:                                             ; preds = %5019
  %5023 = icmp eq i32 %5018, %5021
  br i1 %5023, label %5035, label %5024

5024:                                             ; preds = %5022
  %5025 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %398) #10
  %5026 = getelementptr inbounds %class.anon.510, ptr %398, i32 0, i32 0
  %5027 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5027, ptr %5026, align 8, !tbaa !5
  %5028 = getelementptr inbounds %class.anon.510, ptr %398, i32 0, i32 1
  %5029 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5029, ptr %5028, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_38vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %397, ptr noundef nonnull align 8 dereferenceable(16) %398) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5025, ptr noundef %397)
          to label %5030 unwind label %5031

5030:                                             ; preds = %5024
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %397) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %398) #10
  br label %5035

5031:                                             ; preds = %5024
  %5032 = landingpad { ptr, i32 }
          cleanup
  %5033 = extractvalue { ptr, i32 } %5032, 0
  store ptr %5033, ptr %11, align 8
  %5034 = extractvalue { ptr, i32 } %5032, 1
  store i32 %5034, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %397) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %398) #10
  br label %5982

5035:                                             ; preds = %5030, %5022
  br label %5036

5036:                                             ; preds = %5035
  br label %5037

5037:                                             ; preds = %5036
  call void @llvm.lifetime.start.p0(i64 1, ptr %399) #10
  store i8 1, ptr %399, align 1, !tbaa !9
  br label %5038

5038:                                             ; preds = %5323, %5037
  %5039 = load i8, ptr %399, align 1, !tbaa !9, !range !40, !noundef !41
  %5040 = trunc i8 %5039 to i1
  br i1 %5040, label %5042, label %5041

5041:                                             ; preds = %5038
  store i32 309, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %399) #10
  br label %5324

5042:                                             ; preds = %5038
  call void @llvm.lifetime.start.p0(i64 8, ptr %400) #10
  %5043 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5043, ptr %400, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %401) #10
  %5044 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5044, ptr %401, align 8, !tbaa !5
  br label %5045

5045:                                             ; preds = %5320, %5042
  %5046 = load i8, ptr %399, align 1, !tbaa !9, !range !40, !noundef !41
  %5047 = trunc i8 %5046 to i1
  br i1 %5047, label %5049, label %5048

5048:                                             ; preds = %5045
  store i32 312, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %401) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %400) #10
  br label %5322

5049:                                             ; preds = %5045
  %5050 = load ptr, ptr %400, align 8, !tbaa !5
  %5051 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5050)
          to label %5052 unwind label %5053

5052:                                             ; preds = %5049
  switch i32 %5051, label %5058 [
    i32 0, label %5057
    i32 4, label %5059
    i32 1, label %5119
    i32 2, label %5220
  ]

5053:                                             ; preds = %5049
  %5054 = landingpad { ptr, i32 }
          cleanup
  %5055 = extractvalue { ptr, i32 } %5054, 0
  store ptr %5055, ptr %11, align 8
  %5056 = extractvalue { ptr, i32 } %5054, 1
  store i32 %5056, ptr %12, align 4
  br label %5321

5057:                                             ; preds = %5052
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4151, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

5058:                                             ; preds = %5052
  br label %5319

5059:                                             ; preds = %5052
  call void @llvm.lifetime.start.p0(i64 1, ptr %402) #10
  store i8 1, ptr %402, align 1, !tbaa !9
  br label %5060

5060:                                             ; preds = %5117, %5059
  %5061 = load i8, ptr %402, align 1, !tbaa !9, !range !40, !noundef !41
  %5062 = trunc i8 %5061 to i1
  br i1 %5062, label %5064, label %5063

5063:                                             ; preds = %5060
  store i32 316, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %402) #10
  br label %5118

5064:                                             ; preds = %5060
  call void @llvm.lifetime.start.p0(i64 8, ptr %403) #10
  %5065 = load ptr, ptr %400, align 8, !tbaa !5
  %5066 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %5065)
          to label %5067 unwind label %5077

5067:                                             ; preds = %5064
  store ptr %5066, ptr %403, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %404) #10
  %5068 = load ptr, ptr %401, align 8, !tbaa !5
  %5069 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %5068)
          to label %5070 unwind label %5081

5070:                                             ; preds = %5067
  store ptr %5069, ptr %404, align 8, !tbaa !5
  br label %5071

5071:                                             ; preds = %5104, %5070
  %5072 = load ptr, ptr %403, align 8, !tbaa !5
  %5073 = load ptr, ptr %404, align 8, !tbaa !5
  %5074 = load i8, ptr %402, align 1, !tbaa !9, !range !40, !noundef !41
  %5075 = trunc i8 %5074 to i1
  br i1 %5075, label %5085, label %5076

5076:                                             ; preds = %5071
  store i32 319, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %404) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %403) #10
  br label %5116

5077:                                             ; preds = %5064
  %5078 = landingpad { ptr, i32 }
          cleanup
  %5079 = extractvalue { ptr, i32 } %5078, 0
  store ptr %5079, ptr %11, align 8
  %5080 = extractvalue { ptr, i32 } %5078, 1
  store i32 %5080, ptr %12, align 4
  br label %5115

5081:                                             ; preds = %5067
  %5082 = landingpad { ptr, i32 }
          cleanup
  %5083 = extractvalue { ptr, i32 } %5082, 0
  store ptr %5083, ptr %11, align 8
  %5084 = extractvalue { ptr, i32 } %5082, 1
  store i32 %5084, ptr %12, align 4
  br label %5114

5085:                                             ; preds = %5071
  call void @llvm.lifetime.start.p0(i64 40, ptr %405) #10
  %5086 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %406, i32 0, i32 0
  %5087 = load ptr, ptr %403, align 8, !tbaa !5
  %5088 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %5087, i32 0, i32 0
  %5089 = load i8, ptr %5088, align 1, !tbaa !42, !range !40, !noundef !41
  %5090 = trunc i8 %5089 to i1
  %5091 = zext i1 %5090 to i32
  %5092 = load ptr, ptr %404, align 8, !tbaa !5
  %5093 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %5092, i32 0, i32 0
  %5094 = load i8, ptr %5093, align 1, !tbaa !42, !range !40, !noundef !41
  %5095 = trunc i8 %5094 to i1
  %5096 = zext i1 %5095 to i32
  %5097 = icmp ne i32 %5091, %5096
  %5098 = zext i1 %5097 to i8
  store i8 %5098, ptr %5086, align 1, !tbaa !42
  %5099 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %406, i32 0, i32 0
  %5100 = load i8, ptr %5099, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %405, i8 %5100)
          to label %5101 unwind label %5105

5101:                                             ; preds = %5085
  %5102 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %405)
          to label %5103 unwind label %5109

5103:                                             ; preds = %5101
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %405) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %405) #10
  br label %5104

5104:                                             ; preds = %5103
  store i8 0, ptr %402, align 1, !tbaa !9
  br label %5071, !llvm.loop !125

5105:                                             ; preds = %5085
  %5106 = landingpad { ptr, i32 }
          cleanup
  %5107 = extractvalue { ptr, i32 } %5106, 0
  store ptr %5107, ptr %11, align 8
  %5108 = extractvalue { ptr, i32 } %5106, 1
  store i32 %5108, ptr %12, align 4
  br label %5113

5109:                                             ; preds = %5101
  %5110 = landingpad { ptr, i32 }
          cleanup
  %5111 = extractvalue { ptr, i32 } %5110, 0
  store ptr %5111, ptr %11, align 8
  %5112 = extractvalue { ptr, i32 } %5110, 1
  store i32 %5112, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %405) #10
  br label %5113

5113:                                             ; preds = %5109, %5105
  call void @llvm.lifetime.end.p0(i64 40, ptr %405) #10
  br label %5114

5114:                                             ; preds = %5113, %5081
  call void @llvm.lifetime.end.p0(i64 8, ptr %404) #10
  br label %5115

5115:                                             ; preds = %5114, %5077
  call void @llvm.lifetime.end.p0(i64 8, ptr %403) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %402) #10
  br label %5321

5116:                                             ; preds = %5076
  br label %5117

5117:                                             ; preds = %5116
  store i8 0, ptr %402, align 1, !tbaa !9
  br label %5060, !llvm.loop !126

5118:                                             ; preds = %5063
  br label %5319

5119:                                             ; preds = %5052
  call void @llvm.lifetime.start.p0(i64 1, ptr %407) #10
  store i8 1, ptr %407, align 1, !tbaa !9
  br label %5120

5120:                                             ; preds = %5218, %5119
  %5121 = load i8, ptr %407, align 1, !tbaa !9, !range !40, !noundef !41
  %5122 = trunc i8 %5121 to i1
  br i1 %5122, label %5124, label %5123

5123:                                             ; preds = %5120
  store i32 322, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %407) #10
  br label %5219

5124:                                             ; preds = %5120
  call void @llvm.lifetime.start.p0(i64 8, ptr %408) #10
  %5125 = load ptr, ptr %400, align 8, !tbaa !5
  %5126 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %5125)
          to label %5127 unwind label %5137

5127:                                             ; preds = %5124
  store ptr %5126, ptr %408, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %409) #10
  %5128 = load ptr, ptr %401, align 8, !tbaa !5
  %5129 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %5128)
          to label %5130 unwind label %5141

5130:                                             ; preds = %5127
  store ptr %5129, ptr %409, align 8, !tbaa !5
  br label %5131

5131:                                             ; preds = %5205, %5130
  %5132 = load ptr, ptr %408, align 8, !tbaa !5
  %5133 = load ptr, ptr %409, align 8, !tbaa !5
  %5134 = load i8, ptr %407, align 1, !tbaa !9, !range !40, !noundef !41
  %5135 = trunc i8 %5134 to i1
  br i1 %5135, label %5145, label %5136

5136:                                             ; preds = %5131
  store i32 325, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %409) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %408) #10
  br label %5217

5137:                                             ; preds = %5124
  %5138 = landingpad { ptr, i32 }
          cleanup
  %5139 = extractvalue { ptr, i32 } %5138, 0
  store ptr %5139, ptr %11, align 8
  %5140 = extractvalue { ptr, i32 } %5138, 1
  store i32 %5140, ptr %12, align 4
  br label %5216

5141:                                             ; preds = %5127
  %5142 = landingpad { ptr, i32 }
          cleanup
  %5143 = extractvalue { ptr, i32 } %5142, 0
  store ptr %5143, ptr %11, align 8
  %5144 = extractvalue { ptr, i32 } %5142, 1
  store i32 %5144, ptr %12, align 4
  br label %5215

5145:                                             ; preds = %5131
  br label %5146

5146:                                             ; preds = %5145
  %5147 = load ptr, ptr %408, align 8, !tbaa !5
  %5148 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5147, i32 0, i32 1
  %5149 = load i32, ptr %5148, align 8, !tbaa !60
  %5150 = load ptr, ptr %409, align 8, !tbaa !5
  %5151 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5150, i32 0, i32 1
  %5152 = load i32, ptr %5151, align 8, !tbaa !60
  %5153 = icmp eq i32 %5149, %5152
  br i1 %5153, label %5165, label %5154

5154:                                             ; preds = %5146
  %5155 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %411) #10
  %5156 = getelementptr inbounds %class.anon.511, ptr %411, i32 0, i32 0
  %5157 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5157, ptr %5156, align 8, !tbaa !5
  %5158 = getelementptr inbounds %class.anon.511, ptr %411, i32 0, i32 1
  %5159 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5159, ptr %5158, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_39vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %410, ptr noundef nonnull align 8 dereferenceable(16) %411) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5155, ptr noundef %410)
          to label %5160 unwind label %5161

5160:                                             ; preds = %5154
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %411) #10
  br label %5165

5161:                                             ; preds = %5154
  %5162 = landingpad { ptr, i32 }
          cleanup
  %5163 = extractvalue { ptr, i32 } %5162, 0
  store ptr %5163, ptr %11, align 8
  %5164 = extractvalue { ptr, i32 } %5162, 1
  store i32 %5164, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %410) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %411) #10
  br label %5215

5165:                                             ; preds = %5160, %5146
  br label %5166

5166:                                             ; preds = %5165
  br label %5167

5167:                                             ; preds = %5166
  call void @llvm.lifetime.start.p0(i64 40, ptr %412) #10
  %5168 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %413, i32 0, i32 0
  %5169 = load ptr, ptr %408, align 8, !tbaa !5
  %5170 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5169, i32 0, i32 1
  %5171 = load i32, ptr %5170, align 8, !tbaa !60
  %5172 = load ptr, ptr %408, align 8, !tbaa !5
  %5173 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5172, i32 0, i32 0
  %5174 = load ptr, ptr %409, align 8, !tbaa !5
  %5175 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5174, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %415, ptr align 8 %5175, i64 16, i1 false), !tbaa.struct !56
  %5176 = getelementptr inbounds { i64, i64 }, ptr %415, i32 0, i32 0
  %5177 = load i64, ptr %5176, align 8
  %5178 = getelementptr inbounds { i64, i64 }, ptr %415, i32 0, i32 1
  %5179 = load i64, ptr %5178, align 8
  %5180 = invoke { i64, i64 } @_ZNK4S128eoES_(ptr noundef nonnull align 8 dereferenceable(16) %5173, i64 %5177, i64 %5179)
          to label %5181 unwind label %5206

5181:                                             ; preds = %5167
  %5182 = getelementptr inbounds %class.S128, ptr %414, i32 0, i32 0
  %5183 = getelementptr inbounds { i64, i64 }, ptr %5182, i32 0, i32 0
  %5184 = extractvalue { i64, i64 } %5180, 0
  store i64 %5184, ptr %5183, align 8
  %5185 = getelementptr inbounds { i64, i64 }, ptr %5182, i32 0, i32 1
  %5186 = extractvalue { i64, i64 } %5180, 1
  store i64 %5186, ptr %5185, align 8
  %5187 = getelementptr inbounds { i64, i64 }, ptr %414, i32 0, i32 0
  %5188 = load i64, ptr %5187, align 8
  %5189 = getelementptr inbounds { i64, i64 }, ptr %414, i32 0, i32 1
  %5190 = load i64, ptr %5189, align 8
  %5191 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %5171, i64 %5188, i64 %5190)
          to label %5192 unwind label %5206

5192:                                             ; preds = %5181
  %5193 = getelementptr inbounds %class.S128, ptr %5168, i32 0, i32 0
  %5194 = getelementptr inbounds { i64, i64 }, ptr %5193, i32 0, i32 0
  %5195 = extractvalue { i64, i64 } %5191, 0
  store i64 %5195, ptr %5194, align 8
  %5196 = getelementptr inbounds { i64, i64 }, ptr %5193, i32 0, i32 1
  %5197 = extractvalue { i64, i64 } %5191, 1
  store i64 %5197, ptr %5196, align 8
  %5198 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %413, i32 0, i32 1
  %5199 = load ptr, ptr %408, align 8, !tbaa !5
  %5200 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5199, i32 0, i32 1
  %5201 = load i32, ptr %5200, align 8, !tbaa !60
  store i32 %5201, ptr %5198, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %412, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %413)
          to label %5202 unwind label %5206

5202:                                             ; preds = %5192
  %5203 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %412)
          to label %5204 unwind label %5210

5204:                                             ; preds = %5202
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %412) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %412) #10
  br label %5205

5205:                                             ; preds = %5204
  store i8 0, ptr %407, align 1, !tbaa !9
  br label %5131, !llvm.loop !127

5206:                                             ; preds = %5192, %5181, %5167
  %5207 = landingpad { ptr, i32 }
          cleanup
  %5208 = extractvalue { ptr, i32 } %5207, 0
  store ptr %5208, ptr %11, align 8
  %5209 = extractvalue { ptr, i32 } %5207, 1
  store i32 %5209, ptr %12, align 4
  br label %5214

5210:                                             ; preds = %5202
  %5211 = landingpad { ptr, i32 }
          cleanup
  %5212 = extractvalue { ptr, i32 } %5211, 0
  store ptr %5212, ptr %11, align 8
  %5213 = extractvalue { ptr, i32 } %5211, 1
  store i32 %5213, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %412) #10
  br label %5214

5214:                                             ; preds = %5210, %5206
  call void @llvm.lifetime.end.p0(i64 40, ptr %412) #10
  br label %5215

5215:                                             ; preds = %5214, %5161, %5141
  call void @llvm.lifetime.end.p0(i64 8, ptr %409) #10
  br label %5216

5216:                                             ; preds = %5215, %5137
  call void @llvm.lifetime.end.p0(i64 8, ptr %408) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %407) #10
  br label %5321

5217:                                             ; preds = %5136
  br label %5218

5218:                                             ; preds = %5217
  store i8 0, ptr %407, align 1, !tbaa !9
  br label %5120, !llvm.loop !128

5219:                                             ; preds = %5123
  br label %5319

5220:                                             ; preds = %5052
  call void @llvm.lifetime.start.p0(i64 1, ptr %416) #10
  store i8 1, ptr %416, align 1, !tbaa !9
  br label %5221

5221:                                             ; preds = %5317, %5220
  %5222 = load i8, ptr %416, align 1, !tbaa !9, !range !40, !noundef !41
  %5223 = trunc i8 %5222 to i1
  br i1 %5223, label %5225, label %5224

5224:                                             ; preds = %5221
  store i32 330, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %416) #10
  br label %5318

5225:                                             ; preds = %5221
  call void @llvm.lifetime.start.p0(i64 8, ptr %417) #10
  %5226 = load ptr, ptr %400, align 8, !tbaa !5
  %5227 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %5226)
          to label %5228 unwind label %5238

5228:                                             ; preds = %5225
  store ptr %5227, ptr %417, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %418) #10
  %5229 = load ptr, ptr %401, align 8, !tbaa !5
  %5230 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %5229)
          to label %5231 unwind label %5242

5231:                                             ; preds = %5228
  store ptr %5230, ptr %418, align 8, !tbaa !5
  br label %5232

5232:                                             ; preds = %5304, %5231
  %5233 = load ptr, ptr %417, align 8, !tbaa !5
  %5234 = load ptr, ptr %418, align 8, !tbaa !5
  %5235 = load i8, ptr %416, align 1, !tbaa !9, !range !40, !noundef !41
  %5236 = trunc i8 %5235 to i1
  br i1 %5236, label %5246, label %5237

5237:                                             ; preds = %5232
  store i32 333, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %418) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %417) #10
  br label %5316

5238:                                             ; preds = %5225
  %5239 = landingpad { ptr, i32 }
          cleanup
  %5240 = extractvalue { ptr, i32 } %5239, 0
  store ptr %5240, ptr %11, align 8
  %5241 = extractvalue { ptr, i32 } %5239, 1
  store i32 %5241, ptr %12, align 4
  br label %5315

5242:                                             ; preds = %5228
  %5243 = landingpad { ptr, i32 }
          cleanup
  %5244 = extractvalue { ptr, i32 } %5243, 0
  store ptr %5244, ptr %11, align 8
  %5245 = extractvalue { ptr, i32 } %5243, 1
  store i32 %5245, ptr %12, align 4
  br label %5314

5246:                                             ; preds = %5232
  br label %5247

5247:                                             ; preds = %5246
  %5248 = load ptr, ptr %417, align 8, !tbaa !5
  %5249 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5248, i32 0, i32 1
  %5250 = load i32, ptr %5249, align 8, !tbaa !21
  %5251 = load ptr, ptr %418, align 8, !tbaa !5
  %5252 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5251, i32 0, i32 1
  %5253 = load i32, ptr %5252, align 8, !tbaa !21
  %5254 = icmp eq i32 %5250, %5253
  br i1 %5254, label %5266, label %5255

5255:                                             ; preds = %5247
  %5256 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %420) #10
  %5257 = getelementptr inbounds %class.anon.512, ptr %420, i32 0, i32 0
  %5258 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5258, ptr %5257, align 8, !tbaa !5
  %5259 = getelementptr inbounds %class.anon.512, ptr %420, i32 0, i32 1
  %5260 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5260, ptr %5259, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_40vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %419, ptr noundef nonnull align 8 dereferenceable(16) %420) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5256, ptr noundef %419)
          to label %5261 unwind label %5262

5261:                                             ; preds = %5255
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %419) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %420) #10
  br label %5266

5262:                                             ; preds = %5255
  %5263 = landingpad { ptr, i32 }
          cleanup
  %5264 = extractvalue { ptr, i32 } %5263, 0
  store ptr %5264, ptr %11, align 8
  %5265 = extractvalue { ptr, i32 } %5263, 1
  store i32 %5265, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %419) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %420) #10
  br label %5314

5266:                                             ; preds = %5261, %5247
  br label %5267

5267:                                             ; preds = %5266
  br label %5268

5268:                                             ; preds = %5267
  call void @llvm.lifetime.start.p0(i64 40, ptr %421) #10
  %5269 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %422, i32 0, i32 0
  %5270 = load ptr, ptr %417, align 8, !tbaa !5
  %5271 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5270, i32 0, i32 1
  %5272 = load i32, ptr %5271, align 8, !tbaa !21
  %5273 = load ptr, ptr %417, align 8, !tbaa !5
  %5274 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5273, i32 0, i32 0
  %5275 = load ptr, ptr %418, align 8, !tbaa !5
  %5276 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5275, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %424, ptr align 8 %5276, i64 16, i1 false), !tbaa.struct !56
  %5277 = getelementptr inbounds { i64, i64 }, ptr %424, i32 0, i32 0
  %5278 = load i64, ptr %5277, align 8
  %5279 = getelementptr inbounds { i64, i64 }, ptr %424, i32 0, i32 1
  %5280 = load i64, ptr %5279, align 8
  %5281 = invoke { i64, i64 } @_ZNK4U128eoES_(ptr noundef nonnull align 8 dereferenceable(16) %5274, i64 %5278, i64 %5280)
          to label %5282 unwind label %5305

5282:                                             ; preds = %5268
  %5283 = getelementptr inbounds { i64, i64 }, ptr %423, i32 0, i32 0
  %5284 = extractvalue { i64, i64 } %5281, 0
  store i64 %5284, ptr %5283, align 8
  %5285 = getelementptr inbounds { i64, i64 }, ptr %423, i32 0, i32 1
  %5286 = extractvalue { i64, i64 } %5281, 1
  store i64 %5286, ptr %5285, align 8
  %5287 = getelementptr inbounds { i64, i64 }, ptr %423, i32 0, i32 0
  %5288 = load i64, ptr %5287, align 8
  %5289 = getelementptr inbounds { i64, i64 }, ptr %423, i32 0, i32 1
  %5290 = load i64, ptr %5289, align 8
  %5291 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %5272, i64 %5288, i64 %5290)
          to label %5292 unwind label %5305

5292:                                             ; preds = %5282
  %5293 = getelementptr inbounds { i64, i64 }, ptr %5269, i32 0, i32 0
  %5294 = extractvalue { i64, i64 } %5291, 0
  store i64 %5294, ptr %5293, align 8
  %5295 = getelementptr inbounds { i64, i64 }, ptr %5269, i32 0, i32 1
  %5296 = extractvalue { i64, i64 } %5291, 1
  store i64 %5296, ptr %5295, align 8
  %5297 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %422, i32 0, i32 1
  %5298 = load ptr, ptr %417, align 8, !tbaa !5
  %5299 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5298, i32 0, i32 1
  %5300 = load i32, ptr %5299, align 8, !tbaa !21
  store i32 %5300, ptr %5297, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %421, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %422)
          to label %5301 unwind label %5305

5301:                                             ; preds = %5292
  %5302 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %421)
          to label %5303 unwind label %5309

5303:                                             ; preds = %5301
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %421) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %421) #10
  br label %5304

5304:                                             ; preds = %5303
  store i8 0, ptr %416, align 1, !tbaa !9
  br label %5232, !llvm.loop !129

5305:                                             ; preds = %5292, %5282, %5268
  %5306 = landingpad { ptr, i32 }
          cleanup
  %5307 = extractvalue { ptr, i32 } %5306, 0
  store ptr %5307, ptr %11, align 8
  %5308 = extractvalue { ptr, i32 } %5306, 1
  store i32 %5308, ptr %12, align 4
  br label %5313

5309:                                             ; preds = %5301
  %5310 = landingpad { ptr, i32 }
          cleanup
  %5311 = extractvalue { ptr, i32 } %5310, 0
  store ptr %5311, ptr %11, align 8
  %5312 = extractvalue { ptr, i32 } %5310, 1
  store i32 %5312, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %421) #10
  br label %5313

5313:                                             ; preds = %5309, %5305
  call void @llvm.lifetime.end.p0(i64 40, ptr %421) #10
  br label %5314

5314:                                             ; preds = %5313, %5262, %5242
  call void @llvm.lifetime.end.p0(i64 8, ptr %418) #10
  br label %5315

5315:                                             ; preds = %5314, %5238
  call void @llvm.lifetime.end.p0(i64 8, ptr %417) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %416) #10
  br label %5321

5316:                                             ; preds = %5237
  br label %5317

5317:                                             ; preds = %5316
  store i8 0, ptr %416, align 1, !tbaa !9
  br label %5221, !llvm.loop !130

5318:                                             ; preds = %5224
  br label %5319

5319:                                             ; preds = %5318, %5219, %5118, %5058
  br label %5320

5320:                                             ; preds = %5319
  store i8 0, ptr %399, align 1, !tbaa !9
  br label %5045, !llvm.loop !131

5321:                                             ; preds = %5315, %5216, %5115, %5053
  call void @llvm.lifetime.end.p0(i64 8, ptr %401) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %400) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %399) #10
  br label %5982

5322:                                             ; preds = %5048
  br label %5323

5323:                                             ; preds = %5322
  store i8 0, ptr %399, align 1, !tbaa !9
  br label %5038, !llvm.loop !132

5324:                                             ; preds = %5041
  br label %5926

5325:                                             ; preds = %2563
  call void @llvm.lifetime.start.p0(i64 16, ptr %425) #10
  invoke void @_ZN4U128C2Ev(ptr noundef nonnull align 8 dereferenceable(16) %425)
          to label %5326 unwind label %5331

5326:                                             ; preds = %5325
  call void @llvm.lifetime.start.p0(i64 1, ptr %426) #10
  store i8 1, ptr %426, align 1, !tbaa !9
  br label %5327

5327:                                             ; preds = %5442, %5326
  %5328 = load i8, ptr %426, align 1, !tbaa !9, !range !40, !noundef !41
  %5329 = trunc i8 %5328 to i1
  br i1 %5329, label %5335, label %5330

5330:                                             ; preds = %5327
  store i32 338, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %426) #10
  br label %5443

5331:                                             ; preds = %5444, %5325
  %5332 = landingpad { ptr, i32 }
          cleanup
  %5333 = extractvalue { ptr, i32 } %5332, 0
  store ptr %5333, ptr %11, align 8
  %5334 = extractvalue { ptr, i32 } %5332, 1
  store i32 %5334, ptr %12, align 4
  br label %5624

5335:                                             ; preds = %5327
  call void @llvm.lifetime.start.p0(i64 8, ptr %427) #10
  %5336 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5336, ptr %427, align 8, !tbaa !5
  br label %5337

5337:                                             ; preds = %5439, %5335
  %5338 = load i8, ptr %426, align 1, !tbaa !9, !range !40, !noundef !41
  %5339 = trunc i8 %5338 to i1
  br i1 %5339, label %5341, label %5340

5340:                                             ; preds = %5337
  store i32 341, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %427) #10
  br label %5441

5341:                                             ; preds = %5337
  %5342 = load ptr, ptr %427, align 8, !tbaa !5
  %5343 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5342)
          to label %5344 unwind label %5345

5344:                                             ; preds = %5341
  switch i32 %5343, label %5350 [
    i32 0, label %5349
    i32 1, label %5377
    i32 2, label %5413
  ]

5345:                                             ; preds = %5341
  %5346 = landingpad { ptr, i32 }
          cleanup
  %5347 = extractvalue { ptr, i32 } %5346, 0
  store ptr %5347, ptr %11, align 8
  %5348 = extractvalue { ptr, i32 } %5346, 1
  store i32 %5348, ptr %12, align 4
  br label %5440

5349:                                             ; preds = %5344
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4171, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

5350:                                             ; preds = %5344
  br label %5351

5351:                                             ; preds = %5350
  call void @llvm.lifetime.start.p0(i64 8, ptr %428) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %428, align 8, !tbaa !5
  %5352 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %430) #10
  %5353 = getelementptr inbounds %class.anon.513, ptr %430, i32 0, i32 0
  store ptr %428, ptr %5353, align 8, !tbaa !5
  %5354 = getelementptr inbounds %class.anon.513, ptr %430, i32 0, i32 1
  %5355 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5355, ptr %5354, align 8, !tbaa !5
  %5356 = getelementptr inbounds %class.anon.513, ptr %430, i32 0, i32 2
  %5357 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5357, ptr %5356, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_41vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %429, ptr noundef nonnull align 8 dereferenceable(24) %430)
          to label %5358 unwind label %5361

5358:                                             ; preds = %5351
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5352, ptr noundef %429)
          to label %5359 unwind label %5365

5359:                                             ; preds = %5358
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %429) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %430) #10
  %5360 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %5360, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %5360, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %5370

5361:                                             ; preds = %5351
  %5362 = landingpad { ptr, i32 }
          cleanup
  %5363 = extractvalue { ptr, i32 } %5362, 0
  store ptr %5363, ptr %11, align 8
  %5364 = extractvalue { ptr, i32 } %5362, 1
  store i32 %5364, ptr %12, align 4
  br label %5369

5365:                                             ; preds = %5358
  %5366 = landingpad { ptr, i32 }
          cleanup
  %5367 = extractvalue { ptr, i32 } %5366, 0
  store ptr %5367, ptr %11, align 8
  %5368 = extractvalue { ptr, i32 } %5366, 1
  store i32 %5368, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %429) #10
  br label %5369

5369:                                             ; preds = %5365, %5361
  call void @llvm.lifetime.end.p0(i64 24, ptr %430) #10
  br label %5374

5370:                                             ; preds = %5359
  %5371 = landingpad { ptr, i32 }
          cleanup
  %5372 = extractvalue { ptr, i32 } %5371, 0
  store ptr %5372, ptr %11, align 8
  %5373 = extractvalue { ptr, i32 } %5371, 1
  store i32 %5373, ptr %12, align 4
  br label %5374

5374:                                             ; preds = %5370, %5369
  call void @llvm.lifetime.end.p0(i64 8, ptr %428) #10
  br label %5440

5375:                                             ; No predecessors!
  br label %5376

5376:                                             ; preds = %5375
  br label %5438

5377:                                             ; preds = %5344
  call void @llvm.lifetime.start.p0(i64 1, ptr %431) #10
  store i8 1, ptr %431, align 1, !tbaa !9
  br label %5378

5378:                                             ; preds = %5411, %5377
  %5379 = load i8, ptr %431, align 1, !tbaa !9, !range !40, !noundef !41
  %5380 = trunc i8 %5379 to i1
  br i1 %5380, label %5382, label %5381

5381:                                             ; preds = %5378
  store i32 347, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %431) #10
  br label %5412

5382:                                             ; preds = %5378
  call void @llvm.lifetime.start.p0(i64 8, ptr %432) #10
  %5383 = load ptr, ptr %427, align 8, !tbaa !5
  %5384 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %5383)
          to label %5385 unwind label %5391

5385:                                             ; preds = %5382
  store ptr %5384, ptr %432, align 8, !tbaa !5
  br label %5386

5386:                                             ; preds = %5404, %5385
  %5387 = load ptr, ptr %432, align 8, !tbaa !5
  %5388 = load i8, ptr %431, align 1, !tbaa !9, !range !40, !noundef !41
  %5389 = trunc i8 %5388 to i1
  br i1 %5389, label %5395, label %5390

5390:                                             ; preds = %5386
  store i32 350, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %432) #10
  br label %5410

5391:                                             ; preds = %5382
  %5392 = landingpad { ptr, i32 }
          cleanup
  %5393 = extractvalue { ptr, i32 } %5392, 0
  store ptr %5393, ptr %11, align 8
  %5394 = extractvalue { ptr, i32 } %5392, 1
  store i32 %5394, ptr %12, align 4
  br label %5409

5395:                                             ; preds = %5386
  call void @llvm.lifetime.start.p0(i64 16, ptr %433) #10
  %5396 = load ptr, ptr %432, align 8, !tbaa !5
  %5397 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5396, i32 0, i32 0
  %5398 = invoke { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16) %5397)
          to label %5399 unwind label %5405

5399:                                             ; preds = %5395
  %5400 = getelementptr inbounds { i64, i64 }, ptr %433, i32 0, i32 0
  %5401 = extractvalue { i64, i64 } %5398, 0
  store i64 %5401, ptr %5400, align 8
  %5402 = getelementptr inbounds { i64, i64 }, ptr %433, i32 0, i32 1
  %5403 = extractvalue { i64, i64 } %5398, 1
  store i64 %5403, ptr %5402, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %425, ptr align 8 %433, i64 16, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 16, ptr %433) #10
  br label %5404

5404:                                             ; preds = %5399
  store i8 0, ptr %431, align 1, !tbaa !9
  br label %5386, !llvm.loop !133

5405:                                             ; preds = %5395
  %5406 = landingpad { ptr, i32 }
          cleanup
  %5407 = extractvalue { ptr, i32 } %5406, 0
  store ptr %5407, ptr %11, align 8
  %5408 = extractvalue { ptr, i32 } %5406, 1
  store i32 %5408, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %433) #10
  br label %5409

5409:                                             ; preds = %5405, %5391
  call void @llvm.lifetime.end.p0(i64 8, ptr %432) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %431) #10
  br label %5440

5410:                                             ; preds = %5390
  br label %5411

5411:                                             ; preds = %5410
  store i8 0, ptr %431, align 1, !tbaa !9
  br label %5378, !llvm.loop !134

5412:                                             ; preds = %5381
  br label %5438

5413:                                             ; preds = %5344
  call void @llvm.lifetime.start.p0(i64 1, ptr %434) #10
  store i8 1, ptr %434, align 1, !tbaa !9
  br label %5414

5414:                                             ; preds = %5436, %5413
  %5415 = load i8, ptr %434, align 1, !tbaa !9, !range !40, !noundef !41
  %5416 = trunc i8 %5415 to i1
  br i1 %5416, label %5418, label %5417

5417:                                             ; preds = %5414
  store i32 353, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %434) #10
  br label %5437

5418:                                             ; preds = %5414
  call void @llvm.lifetime.start.p0(i64 8, ptr %435) #10
  %5419 = load ptr, ptr %427, align 8, !tbaa !5
  %5420 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %5419)
          to label %5421 unwind label %5427

5421:                                             ; preds = %5418
  store ptr %5420, ptr %435, align 8, !tbaa !5
  br label %5422

5422:                                             ; preds = %5434, %5421
  %5423 = load ptr, ptr %435, align 8, !tbaa !5
  %5424 = load i8, ptr %434, align 1, !tbaa !9, !range !40, !noundef !41
  %5425 = trunc i8 %5424 to i1
  br i1 %5425, label %5431, label %5426

5426:                                             ; preds = %5422
  store i32 356, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %435) #10
  br label %5435

5427:                                             ; preds = %5418
  %5428 = landingpad { ptr, i32 }
          cleanup
  %5429 = extractvalue { ptr, i32 } %5428, 0
  store ptr %5429, ptr %11, align 8
  %5430 = extractvalue { ptr, i32 } %5428, 1
  store i32 %5430, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %435) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %434) #10
  br label %5440

5431:                                             ; preds = %5422
  %5432 = load ptr, ptr %435, align 8, !tbaa !5
  %5433 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5432, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %425, ptr align 8 %5433, i64 16, i1 false), !tbaa.struct !56
  br label %5434

5434:                                             ; preds = %5431
  store i8 0, ptr %434, align 1, !tbaa !9
  br label %5422, !llvm.loop !135

5435:                                             ; preds = %5426
  br label %5436

5436:                                             ; preds = %5435
  store i8 0, ptr %434, align 1, !tbaa !9
  br label %5414, !llvm.loop !136

5437:                                             ; preds = %5417
  br label %5438

5438:                                             ; preds = %5437, %5412, %5376
  br label %5439

5439:                                             ; preds = %5438
  store i8 0, ptr %426, align 1, !tbaa !9
  br label %5337, !llvm.loop !137

5440:                                             ; preds = %5427, %5409, %5374, %5345
  call void @llvm.lifetime.end.p0(i64 8, ptr %427) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %426) #10
  br label %5624

5441:                                             ; preds = %5340
  br label %5442

5442:                                             ; preds = %5441
  store i8 0, ptr %426, align 1, !tbaa !9
  br label %5327, !llvm.loop !138

5443:                                             ; preds = %5330
  br label %5444

5444:                                             ; preds = %5443
  %5445 = invoke noundef zeroext i1 @_ZNK4U128leEj(ptr noundef nonnull align 8 dereferenceable(16) %425, i32 noundef 128)
          to label %5446 unwind label %5331

5446:                                             ; preds = %5444
  br i1 %5445, label %5458, label %5447

5447:                                             ; preds = %5446
  %5448 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %437) #10
  %5449 = getelementptr inbounds %class.anon.514, ptr %437, i32 0, i32 0
  %5450 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5450, ptr %5449, align 8, !tbaa !5
  %5451 = getelementptr inbounds %class.anon.514, ptr %437, i32 0, i32 1
  %5452 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5452, ptr %5451, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_42vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %436, ptr noundef nonnull align 8 dereferenceable(16) %437) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5448, ptr noundef %436)
          to label %5453 unwind label %5454

5453:                                             ; preds = %5447
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %436) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %437) #10
  br label %5458

5454:                                             ; preds = %5447
  %5455 = landingpad { ptr, i32 }
          cleanup
  %5456 = extractvalue { ptr, i32 } %5455, 0
  store ptr %5456, ptr %11, align 8
  %5457 = extractvalue { ptr, i32 } %5455, 1
  store i32 %5457, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %436) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %437) #10
  br label %5624

5458:                                             ; preds = %5453, %5446
  br label %5459

5459:                                             ; preds = %5458
  br label %5460

5460:                                             ; preds = %5459
  call void @llvm.lifetime.start.p0(i64 8, ptr %438) #10
  %5461 = invoke noundef i64 @_ZNK4U12812truncate_u64Ev(ptr noundef nonnull align 8 dereferenceable(16) %425)
          to label %5462 unwind label %5467

5462:                                             ; preds = %5460
  store i64 %5461, ptr %438, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %439) #10
  store i8 1, ptr %439, align 1, !tbaa !9
  br label %5463

5463:                                             ; preds = %5621, %5462
  %5464 = load i8, ptr %439, align 1, !tbaa !9, !range !40, !noundef !41
  %5465 = trunc i8 %5464 to i1
  br i1 %5465, label %5471, label %5466

5466:                                             ; preds = %5463
  store i32 361, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %439) #10
  br label %5622

5467:                                             ; preds = %5460
  %5468 = landingpad { ptr, i32 }
          cleanup
  %5469 = extractvalue { ptr, i32 } %5468, 0
  store ptr %5469, ptr %11, align 8
  %5470 = extractvalue { ptr, i32 } %5468, 1
  store i32 %5470, ptr %12, align 4
  br label %5623

5471:                                             ; preds = %5463
  call void @llvm.lifetime.start.p0(i64 8, ptr %440) #10
  %5472 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5472, ptr %440, align 8, !tbaa !5
  br label %5473

5473:                                             ; preds = %5618, %5471
  %5474 = load i8, ptr %439, align 1, !tbaa !9, !range !40, !noundef !41
  %5475 = trunc i8 %5474 to i1
  br i1 %5475, label %5477, label %5476

5476:                                             ; preds = %5473
  store i32 364, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %440) #10
  br label %5620

5477:                                             ; preds = %5473
  %5478 = load ptr, ptr %440, align 8, !tbaa !5
  %5479 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5478)
          to label %5480 unwind label %5481

5480:                                             ; preds = %5477
  switch i32 %5479, label %5486 [
    i32 0, label %5485
    i32 1, label %5487
    i32 2, label %5553
  ]

5481:                                             ; preds = %5477
  %5482 = landingpad { ptr, i32 }
          cleanup
  %5483 = extractvalue { ptr, i32 } %5482, 0
  store ptr %5483, ptr %11, align 8
  %5484 = extractvalue { ptr, i32 } %5482, 1
  store i32 %5484, ptr %12, align 4
  br label %5619

5485:                                             ; preds = %5480
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4184, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

5486:                                             ; preds = %5480
  br label %5617

5487:                                             ; preds = %5480
  call void @llvm.lifetime.start.p0(i64 1, ptr %441) #10
  store i8 1, ptr %441, align 1, !tbaa !9
  br label %5488

5488:                                             ; preds = %5551, %5487
  %5489 = load i8, ptr %441, align 1, !tbaa !9, !range !40, !noundef !41
  %5490 = trunc i8 %5489 to i1
  br i1 %5490, label %5492, label %5491

5491:                                             ; preds = %5488
  store i32 368, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %441) #10
  br label %5552

5492:                                             ; preds = %5488
  call void @llvm.lifetime.start.p0(i64 8, ptr %442) #10
  %5493 = load ptr, ptr %440, align 8, !tbaa !5
  %5494 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %5493)
          to label %5495 unwind label %5501

5495:                                             ; preds = %5492
  store ptr %5494, ptr %442, align 8, !tbaa !5
  br label %5496

5496:                                             ; preds = %5539, %5495
  %5497 = load ptr, ptr %442, align 8, !tbaa !5
  %5498 = load i8, ptr %441, align 1, !tbaa !9, !range !40, !noundef !41
  %5499 = trunc i8 %5498 to i1
  br i1 %5499, label %5505, label %5500

5500:                                             ; preds = %5496
  store i32 371, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %442) #10
  br label %5550

5501:                                             ; preds = %5492
  %5502 = landingpad { ptr, i32 }
          cleanup
  %5503 = extractvalue { ptr, i32 } %5502, 0
  store ptr %5503, ptr %11, align 8
  %5504 = extractvalue { ptr, i32 } %5502, 1
  store i32 %5504, ptr %12, align 4
  br label %5549

5505:                                             ; preds = %5496
  call void @llvm.lifetime.start.p0(i64 40, ptr %443) #10
  %5506 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %444, i32 0, i32 0
  %5507 = load ptr, ptr %442, align 8, !tbaa !5
  %5508 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5507, i32 0, i32 1
  %5509 = load i32, ptr %5508, align 8, !tbaa !60
  %5510 = load ptr, ptr %442, align 8, !tbaa !5
  %5511 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5510, i32 0, i32 0
  %5512 = load i64, ptr %438, align 8, !tbaa !13
  %5513 = trunc i64 %5512 to i32
  %5514 = invoke { i64, i64 } @_ZNK4S128lsEj(ptr noundef nonnull align 8 dereferenceable(16) %5511, i32 noundef %5513)
          to label %5515 unwind label %5540

5515:                                             ; preds = %5505
  %5516 = getelementptr inbounds %class.S128, ptr %445, i32 0, i32 0
  %5517 = getelementptr inbounds { i64, i64 }, ptr %5516, i32 0, i32 0
  %5518 = extractvalue { i64, i64 } %5514, 0
  store i64 %5518, ptr %5517, align 8
  %5519 = getelementptr inbounds { i64, i64 }, ptr %5516, i32 0, i32 1
  %5520 = extractvalue { i64, i64 } %5514, 1
  store i64 %5520, ptr %5519, align 8
  %5521 = getelementptr inbounds { i64, i64 }, ptr %445, i32 0, i32 0
  %5522 = load i64, ptr %5521, align 8
  %5523 = getelementptr inbounds { i64, i64 }, ptr %445, i32 0, i32 1
  %5524 = load i64, ptr %5523, align 8
  %5525 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %5509, i64 %5522, i64 %5524)
          to label %5526 unwind label %5540

5526:                                             ; preds = %5515
  %5527 = getelementptr inbounds %class.S128, ptr %5506, i32 0, i32 0
  %5528 = getelementptr inbounds { i64, i64 }, ptr %5527, i32 0, i32 0
  %5529 = extractvalue { i64, i64 } %5525, 0
  store i64 %5529, ptr %5528, align 8
  %5530 = getelementptr inbounds { i64, i64 }, ptr %5527, i32 0, i32 1
  %5531 = extractvalue { i64, i64 } %5525, 1
  store i64 %5531, ptr %5530, align 8
  %5532 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %444, i32 0, i32 1
  %5533 = load ptr, ptr %442, align 8, !tbaa !5
  %5534 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5533, i32 0, i32 1
  %5535 = load i32, ptr %5534, align 8, !tbaa !60
  store i32 %5535, ptr %5532, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %443, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %444)
          to label %5536 unwind label %5540

5536:                                             ; preds = %5526
  %5537 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %443)
          to label %5538 unwind label %5544

5538:                                             ; preds = %5536
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %443) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %443) #10
  br label %5539

5539:                                             ; preds = %5538
  store i8 0, ptr %441, align 1, !tbaa !9
  br label %5496, !llvm.loop !139

5540:                                             ; preds = %5526, %5515, %5505
  %5541 = landingpad { ptr, i32 }
          cleanup
  %5542 = extractvalue { ptr, i32 } %5541, 0
  store ptr %5542, ptr %11, align 8
  %5543 = extractvalue { ptr, i32 } %5541, 1
  store i32 %5543, ptr %12, align 4
  br label %5548

5544:                                             ; preds = %5536
  %5545 = landingpad { ptr, i32 }
          cleanup
  %5546 = extractvalue { ptr, i32 } %5545, 0
  store ptr %5546, ptr %11, align 8
  %5547 = extractvalue { ptr, i32 } %5545, 1
  store i32 %5547, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %443) #10
  br label %5548

5548:                                             ; preds = %5544, %5540
  call void @llvm.lifetime.end.p0(i64 40, ptr %443) #10
  br label %5549

5549:                                             ; preds = %5548, %5501
  call void @llvm.lifetime.end.p0(i64 8, ptr %442) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %441) #10
  br label %5619

5550:                                             ; preds = %5500
  br label %5551

5551:                                             ; preds = %5550
  store i8 0, ptr %441, align 1, !tbaa !9
  br label %5488, !llvm.loop !140

5552:                                             ; preds = %5491
  br label %5617

5553:                                             ; preds = %5480
  call void @llvm.lifetime.start.p0(i64 1, ptr %446) #10
  store i8 1, ptr %446, align 1, !tbaa !9
  br label %5554

5554:                                             ; preds = %5615, %5553
  %5555 = load i8, ptr %446, align 1, !tbaa !9, !range !40, !noundef !41
  %5556 = trunc i8 %5555 to i1
  br i1 %5556, label %5558, label %5557

5557:                                             ; preds = %5554
  store i32 374, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %446) #10
  br label %5616

5558:                                             ; preds = %5554
  call void @llvm.lifetime.start.p0(i64 8, ptr %447) #10
  %5559 = load ptr, ptr %440, align 8, !tbaa !5
  %5560 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %5559)
          to label %5561 unwind label %5567

5561:                                             ; preds = %5558
  store ptr %5560, ptr %447, align 8, !tbaa !5
  br label %5562

5562:                                             ; preds = %5603, %5561
  %5563 = load ptr, ptr %447, align 8, !tbaa !5
  %5564 = load i8, ptr %446, align 1, !tbaa !9, !range !40, !noundef !41
  %5565 = trunc i8 %5564 to i1
  br i1 %5565, label %5571, label %5566

5566:                                             ; preds = %5562
  store i32 377, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %447) #10
  br label %5614

5567:                                             ; preds = %5558
  %5568 = landingpad { ptr, i32 }
          cleanup
  %5569 = extractvalue { ptr, i32 } %5568, 0
  store ptr %5569, ptr %11, align 8
  %5570 = extractvalue { ptr, i32 } %5568, 1
  store i32 %5570, ptr %12, align 4
  br label %5613

5571:                                             ; preds = %5562
  call void @llvm.lifetime.start.p0(i64 40, ptr %448) #10
  %5572 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %449, i32 0, i32 0
  %5573 = load ptr, ptr %447, align 8, !tbaa !5
  %5574 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5573, i32 0, i32 1
  %5575 = load i32, ptr %5574, align 8, !tbaa !21
  %5576 = load ptr, ptr %447, align 8, !tbaa !5
  %5577 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5576, i32 0, i32 0
  %5578 = load i64, ptr %438, align 8, !tbaa !13
  %5579 = trunc i64 %5578 to i32
  %5580 = invoke { i64, i64 } @_ZNK4U128lsEj(ptr noundef nonnull align 8 dereferenceable(16) %5577, i32 noundef %5579)
          to label %5581 unwind label %5604

5581:                                             ; preds = %5571
  %5582 = getelementptr inbounds { i64, i64 }, ptr %450, i32 0, i32 0
  %5583 = extractvalue { i64, i64 } %5580, 0
  store i64 %5583, ptr %5582, align 8
  %5584 = getelementptr inbounds { i64, i64 }, ptr %450, i32 0, i32 1
  %5585 = extractvalue { i64, i64 } %5580, 1
  store i64 %5585, ptr %5584, align 8
  %5586 = getelementptr inbounds { i64, i64 }, ptr %450, i32 0, i32 0
  %5587 = load i64, ptr %5586, align 8
  %5588 = getelementptr inbounds { i64, i64 }, ptr %450, i32 0, i32 1
  %5589 = load i64, ptr %5588, align 8
  %5590 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %5575, i64 %5587, i64 %5589)
          to label %5591 unwind label %5604

5591:                                             ; preds = %5581
  %5592 = getelementptr inbounds { i64, i64 }, ptr %5572, i32 0, i32 0
  %5593 = extractvalue { i64, i64 } %5590, 0
  store i64 %5593, ptr %5592, align 8
  %5594 = getelementptr inbounds { i64, i64 }, ptr %5572, i32 0, i32 1
  %5595 = extractvalue { i64, i64 } %5590, 1
  store i64 %5595, ptr %5594, align 8
  %5596 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %449, i32 0, i32 1
  %5597 = load ptr, ptr %447, align 8, !tbaa !5
  %5598 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5597, i32 0, i32 1
  %5599 = load i32, ptr %5598, align 8, !tbaa !21
  store i32 %5599, ptr %5596, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %448, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %449)
          to label %5600 unwind label %5604

5600:                                             ; preds = %5591
  %5601 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %448)
          to label %5602 unwind label %5608

5602:                                             ; preds = %5600
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %448) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %448) #10
  br label %5603

5603:                                             ; preds = %5602
  store i8 0, ptr %446, align 1, !tbaa !9
  br label %5562, !llvm.loop !141

5604:                                             ; preds = %5591, %5581, %5571
  %5605 = landingpad { ptr, i32 }
          cleanup
  %5606 = extractvalue { ptr, i32 } %5605, 0
  store ptr %5606, ptr %11, align 8
  %5607 = extractvalue { ptr, i32 } %5605, 1
  store i32 %5607, ptr %12, align 4
  br label %5612

5608:                                             ; preds = %5600
  %5609 = landingpad { ptr, i32 }
          cleanup
  %5610 = extractvalue { ptr, i32 } %5609, 0
  store ptr %5610, ptr %11, align 8
  %5611 = extractvalue { ptr, i32 } %5609, 1
  store i32 %5611, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %448) #10
  br label %5612

5612:                                             ; preds = %5608, %5604
  call void @llvm.lifetime.end.p0(i64 40, ptr %448) #10
  br label %5613

5613:                                             ; preds = %5612, %5567
  call void @llvm.lifetime.end.p0(i64 8, ptr %447) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %446) #10
  br label %5619

5614:                                             ; preds = %5566
  br label %5615

5615:                                             ; preds = %5614
  store i8 0, ptr %446, align 1, !tbaa !9
  br label %5554, !llvm.loop !142

5616:                                             ; preds = %5557
  br label %5617

5617:                                             ; preds = %5616, %5552, %5486
  br label %5618

5618:                                             ; preds = %5617
  store i8 0, ptr %439, align 1, !tbaa !9
  br label %5473, !llvm.loop !143

5619:                                             ; preds = %5613, %5549, %5481
  call void @llvm.lifetime.end.p0(i64 8, ptr %440) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %439) #10
  br label %5623

5620:                                             ; preds = %5476
  br label %5621

5621:                                             ; preds = %5620
  store i8 0, ptr %439, align 1, !tbaa !9
  br label %5463, !llvm.loop !144

5622:                                             ; preds = %5466
  call void @llvm.lifetime.end.p0(i64 8, ptr %438) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %425) #10
  br label %5926

5623:                                             ; preds = %5619, %5467
  call void @llvm.lifetime.end.p0(i64 8, ptr %438) #10
  br label %5624

5624:                                             ; preds = %5623, %5454, %5440, %5331
  call void @llvm.lifetime.end.p0(i64 16, ptr %425) #10
  br label %5982

5625:                                             ; preds = %2563
  call void @llvm.lifetime.start.p0(i64 16, ptr %451) #10
  invoke void @_ZN4U128C2Ev(ptr noundef nonnull align 8 dereferenceable(16) %451)
          to label %5626 unwind label %5631

5626:                                             ; preds = %5625
  call void @llvm.lifetime.start.p0(i64 1, ptr %452) #10
  store i8 1, ptr %452, align 1, !tbaa !9
  br label %5627

5627:                                             ; preds = %5742, %5626
  %5628 = load i8, ptr %452, align 1, !tbaa !9, !range !40, !noundef !41
  %5629 = trunc i8 %5628 to i1
  br i1 %5629, label %5635, label %5630

5630:                                             ; preds = %5627
  store i32 380, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %452) #10
  br label %5743

5631:                                             ; preds = %5744, %5625
  %5632 = landingpad { ptr, i32 }
          cleanup
  %5633 = extractvalue { ptr, i32 } %5632, 0
  store ptr %5633, ptr %11, align 8
  %5634 = extractvalue { ptr, i32 } %5632, 1
  store i32 %5634, ptr %12, align 4
  br label %5924

5635:                                             ; preds = %5627
  call void @llvm.lifetime.start.p0(i64 8, ptr %453) #10
  %5636 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5636, ptr %453, align 8, !tbaa !5
  br label %5637

5637:                                             ; preds = %5739, %5635
  %5638 = load i8, ptr %452, align 1, !tbaa !9, !range !40, !noundef !41
  %5639 = trunc i8 %5638 to i1
  br i1 %5639, label %5641, label %5640

5640:                                             ; preds = %5637
  store i32 383, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %453) #10
  br label %5741

5641:                                             ; preds = %5637
  %5642 = load ptr, ptr %453, align 8, !tbaa !5
  %5643 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5642)
          to label %5644 unwind label %5645

5644:                                             ; preds = %5641
  switch i32 %5643, label %5650 [
    i32 0, label %5649
    i32 1, label %5677
    i32 2, label %5713
  ]

5645:                                             ; preds = %5641
  %5646 = landingpad { ptr, i32 }
          cleanup
  %5647 = extractvalue { ptr, i32 } %5646, 0
  store ptr %5647, ptr %11, align 8
  %5648 = extractvalue { ptr, i32 } %5646, 1
  store i32 %5648, ptr %12, align 4
  br label %5740

5649:                                             ; preds = %5644
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4197, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

5650:                                             ; preds = %5644
  br label %5651

5651:                                             ; preds = %5650
  call void @llvm.lifetime.start.p0(i64 8, ptr %454) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %454, align 8, !tbaa !5
  %5652 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %456) #10
  %5653 = getelementptr inbounds %class.anon.515, ptr %456, i32 0, i32 0
  store ptr %454, ptr %5653, align 8, !tbaa !5
  %5654 = getelementptr inbounds %class.anon.515, ptr %456, i32 0, i32 1
  %5655 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5655, ptr %5654, align 8, !tbaa !5
  %5656 = getelementptr inbounds %class.anon.515, ptr %456, i32 0, i32 2
  %5657 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5657, ptr %5656, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_43vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %455, ptr noundef nonnull align 8 dereferenceable(24) %456)
          to label %5658 unwind label %5661

5658:                                             ; preds = %5651
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5652, ptr noundef %455)
          to label %5659 unwind label %5665

5659:                                             ; preds = %5658
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %455) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr %456) #10
  %5660 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %5660, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %5660, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %5670

5661:                                             ; preds = %5651
  %5662 = landingpad { ptr, i32 }
          cleanup
  %5663 = extractvalue { ptr, i32 } %5662, 0
  store ptr %5663, ptr %11, align 8
  %5664 = extractvalue { ptr, i32 } %5662, 1
  store i32 %5664, ptr %12, align 4
  br label %5669

5665:                                             ; preds = %5658
  %5666 = landingpad { ptr, i32 }
          cleanup
  %5667 = extractvalue { ptr, i32 } %5666, 0
  store ptr %5667, ptr %11, align 8
  %5668 = extractvalue { ptr, i32 } %5666, 1
  store i32 %5668, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %455) #10
  br label %5669

5669:                                             ; preds = %5665, %5661
  call void @llvm.lifetime.end.p0(i64 24, ptr %456) #10
  br label %5674

5670:                                             ; preds = %5659
  %5671 = landingpad { ptr, i32 }
          cleanup
  %5672 = extractvalue { ptr, i32 } %5671, 0
  store ptr %5672, ptr %11, align 8
  %5673 = extractvalue { ptr, i32 } %5671, 1
  store i32 %5673, ptr %12, align 4
  br label %5674

5674:                                             ; preds = %5670, %5669
  call void @llvm.lifetime.end.p0(i64 8, ptr %454) #10
  br label %5740

5675:                                             ; No predecessors!
  br label %5676

5676:                                             ; preds = %5675
  br label %5738

5677:                                             ; preds = %5644
  call void @llvm.lifetime.start.p0(i64 1, ptr %457) #10
  store i8 1, ptr %457, align 1, !tbaa !9
  br label %5678

5678:                                             ; preds = %5711, %5677
  %5679 = load i8, ptr %457, align 1, !tbaa !9, !range !40, !noundef !41
  %5680 = trunc i8 %5679 to i1
  br i1 %5680, label %5682, label %5681

5681:                                             ; preds = %5678
  store i32 389, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %457) #10
  br label %5712

5682:                                             ; preds = %5678
  call void @llvm.lifetime.start.p0(i64 8, ptr %458) #10
  %5683 = load ptr, ptr %453, align 8, !tbaa !5
  %5684 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %5683)
          to label %5685 unwind label %5691

5685:                                             ; preds = %5682
  store ptr %5684, ptr %458, align 8, !tbaa !5
  br label %5686

5686:                                             ; preds = %5704, %5685
  %5687 = load ptr, ptr %458, align 8, !tbaa !5
  %5688 = load i8, ptr %457, align 1, !tbaa !9, !range !40, !noundef !41
  %5689 = trunc i8 %5688 to i1
  br i1 %5689, label %5695, label %5690

5690:                                             ; preds = %5686
  store i32 392, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %458) #10
  br label %5710

5691:                                             ; preds = %5682
  %5692 = landingpad { ptr, i32 }
          cleanup
  %5693 = extractvalue { ptr, i32 } %5692, 0
  store ptr %5693, ptr %11, align 8
  %5694 = extractvalue { ptr, i32 } %5692, 1
  store i32 %5694, ptr %12, align 4
  br label %5709

5695:                                             ; preds = %5686
  call void @llvm.lifetime.start.p0(i64 16, ptr %459) #10
  %5696 = load ptr, ptr %458, align 8, !tbaa !5
  %5697 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5696, i32 0, i32 0
  %5698 = invoke { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16) %5697)
          to label %5699 unwind label %5705

5699:                                             ; preds = %5695
  %5700 = getelementptr inbounds { i64, i64 }, ptr %459, i32 0, i32 0
  %5701 = extractvalue { i64, i64 } %5698, 0
  store i64 %5701, ptr %5700, align 8
  %5702 = getelementptr inbounds { i64, i64 }, ptr %459, i32 0, i32 1
  %5703 = extractvalue { i64, i64 } %5698, 1
  store i64 %5703, ptr %5702, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %451, ptr align 8 %459, i64 16, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 16, ptr %459) #10
  br label %5704

5704:                                             ; preds = %5699
  store i8 0, ptr %457, align 1, !tbaa !9
  br label %5686, !llvm.loop !145

5705:                                             ; preds = %5695
  %5706 = landingpad { ptr, i32 }
          cleanup
  %5707 = extractvalue { ptr, i32 } %5706, 0
  store ptr %5707, ptr %11, align 8
  %5708 = extractvalue { ptr, i32 } %5706, 1
  store i32 %5708, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %459) #10
  br label %5709

5709:                                             ; preds = %5705, %5691
  call void @llvm.lifetime.end.p0(i64 8, ptr %458) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %457) #10
  br label %5740

5710:                                             ; preds = %5690
  br label %5711

5711:                                             ; preds = %5710
  store i8 0, ptr %457, align 1, !tbaa !9
  br label %5678, !llvm.loop !146

5712:                                             ; preds = %5681
  br label %5738

5713:                                             ; preds = %5644
  call void @llvm.lifetime.start.p0(i64 1, ptr %460) #10
  store i8 1, ptr %460, align 1, !tbaa !9
  br label %5714

5714:                                             ; preds = %5736, %5713
  %5715 = load i8, ptr %460, align 1, !tbaa !9, !range !40, !noundef !41
  %5716 = trunc i8 %5715 to i1
  br i1 %5716, label %5718, label %5717

5717:                                             ; preds = %5714
  store i32 395, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %460) #10
  br label %5737

5718:                                             ; preds = %5714
  call void @llvm.lifetime.start.p0(i64 8, ptr %461) #10
  %5719 = load ptr, ptr %453, align 8, !tbaa !5
  %5720 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %5719)
          to label %5721 unwind label %5727

5721:                                             ; preds = %5718
  store ptr %5720, ptr %461, align 8, !tbaa !5
  br label %5722

5722:                                             ; preds = %5734, %5721
  %5723 = load ptr, ptr %461, align 8, !tbaa !5
  %5724 = load i8, ptr %460, align 1, !tbaa !9, !range !40, !noundef !41
  %5725 = trunc i8 %5724 to i1
  br i1 %5725, label %5731, label %5726

5726:                                             ; preds = %5722
  store i32 398, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %461) #10
  br label %5735

5727:                                             ; preds = %5718
  %5728 = landingpad { ptr, i32 }
          cleanup
  %5729 = extractvalue { ptr, i32 } %5728, 0
  store ptr %5729, ptr %11, align 8
  %5730 = extractvalue { ptr, i32 } %5728, 1
  store i32 %5730, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %461) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %460) #10
  br label %5740

5731:                                             ; preds = %5722
  %5732 = load ptr, ptr %461, align 8, !tbaa !5
  %5733 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5732, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %451, ptr align 8 %5733, i64 16, i1 false), !tbaa.struct !56
  br label %5734

5734:                                             ; preds = %5731
  store i8 0, ptr %460, align 1, !tbaa !9
  br label %5722, !llvm.loop !147

5735:                                             ; preds = %5726
  br label %5736

5736:                                             ; preds = %5735
  store i8 0, ptr %460, align 1, !tbaa !9
  br label %5714, !llvm.loop !148

5737:                                             ; preds = %5717
  br label %5738

5738:                                             ; preds = %5737, %5712, %5676
  br label %5739

5739:                                             ; preds = %5738
  store i8 0, ptr %452, align 1, !tbaa !9
  br label %5637, !llvm.loop !149

5740:                                             ; preds = %5727, %5709, %5674, %5645
  call void @llvm.lifetime.end.p0(i64 8, ptr %453) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %452) #10
  br label %5924

5741:                                             ; preds = %5640
  br label %5742

5742:                                             ; preds = %5741
  store i8 0, ptr %452, align 1, !tbaa !9
  br label %5627, !llvm.loop !150

5743:                                             ; preds = %5630
  br label %5744

5744:                                             ; preds = %5743
  %5745 = invoke noundef zeroext i1 @_ZNK4U128leEj(ptr noundef nonnull align 8 dereferenceable(16) %451, i32 noundef 128)
          to label %5746 unwind label %5631

5746:                                             ; preds = %5744
  br i1 %5745, label %5758, label %5747

5747:                                             ; preds = %5746
  %5748 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %463) #10
  %5749 = getelementptr inbounds %class.anon.516, ptr %463, i32 0, i32 0
  %5750 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5750, ptr %5749, align 8, !tbaa !5
  %5751 = getelementptr inbounds %class.anon.516, ptr %463, i32 0, i32 1
  %5752 = load ptr, ptr %180, align 8, !tbaa !5
  store ptr %5752, ptr %5751, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_44vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %462, ptr noundef nonnull align 8 dereferenceable(16) %463) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %5748, ptr noundef %462)
          to label %5753 unwind label %5754

5753:                                             ; preds = %5747
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %462) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %463) #10
  br label %5758

5754:                                             ; preds = %5747
  %5755 = landingpad { ptr, i32 }
          cleanup
  %5756 = extractvalue { ptr, i32 } %5755, 0
  store ptr %5756, ptr %11, align 8
  %5757 = extractvalue { ptr, i32 } %5755, 1
  store i32 %5757, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %462) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %463) #10
  br label %5924

5758:                                             ; preds = %5753, %5746
  br label %5759

5759:                                             ; preds = %5758
  br label %5760

5760:                                             ; preds = %5759
  call void @llvm.lifetime.start.p0(i64 8, ptr %464) #10
  %5761 = invoke noundef i64 @_ZNK4U12812truncate_u64Ev(ptr noundef nonnull align 8 dereferenceable(16) %451)
          to label %5762 unwind label %5767

5762:                                             ; preds = %5760
  store i64 %5761, ptr %464, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %465) #10
  store i8 1, ptr %465, align 1, !tbaa !9
  br label %5763

5763:                                             ; preds = %5921, %5762
  %5764 = load i8, ptr %465, align 1, !tbaa !9, !range !40, !noundef !41
  %5765 = trunc i8 %5764 to i1
  br i1 %5765, label %5771, label %5766

5766:                                             ; preds = %5763
  store i32 403, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %465) #10
  br label %5922

5767:                                             ; preds = %5760
  %5768 = landingpad { ptr, i32 }
          cleanup
  %5769 = extractvalue { ptr, i32 } %5768, 0
  store ptr %5769, ptr %11, align 8
  %5770 = extractvalue { ptr, i32 } %5768, 1
  store i32 %5770, ptr %12, align 4
  br label %5923

5771:                                             ; preds = %5763
  call void @llvm.lifetime.start.p0(i64 8, ptr %466) #10
  %5772 = load ptr, ptr %179, align 8, !tbaa !5
  store ptr %5772, ptr %466, align 8, !tbaa !5
  br label %5773

5773:                                             ; preds = %5918, %5771
  %5774 = load i8, ptr %465, align 1, !tbaa !9, !range !40, !noundef !41
  %5775 = trunc i8 %5774 to i1
  br i1 %5775, label %5777, label %5776

5776:                                             ; preds = %5773
  store i32 406, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %466) #10
  br label %5920

5777:                                             ; preds = %5773
  %5778 = load ptr, ptr %466, align 8, !tbaa !5
  %5779 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %5778)
          to label %5780 unwind label %5781

5780:                                             ; preds = %5777
  switch i32 %5779, label %5786 [
    i32 0, label %5785
    i32 1, label %5787
    i32 2, label %5853
  ]

5781:                                             ; preds = %5777
  %5782 = landingpad { ptr, i32 }
          cleanup
  %5783 = extractvalue { ptr, i32 } %5782, 0
  store ptr %5783, ptr %11, align 8
  %5784 = extractvalue { ptr, i32 } %5782, 1
  store i32 %5784, ptr %12, align 4
  br label %5919

5785:                                             ; preds = %5780
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4210, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

5786:                                             ; preds = %5780
  br label %5917

5787:                                             ; preds = %5780
  call void @llvm.lifetime.start.p0(i64 1, ptr %467) #10
  store i8 1, ptr %467, align 1, !tbaa !9
  br label %5788

5788:                                             ; preds = %5851, %5787
  %5789 = load i8, ptr %467, align 1, !tbaa !9, !range !40, !noundef !41
  %5790 = trunc i8 %5789 to i1
  br i1 %5790, label %5792, label %5791

5791:                                             ; preds = %5788
  store i32 410, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %467) #10
  br label %5852

5792:                                             ; preds = %5788
  call void @llvm.lifetime.start.p0(i64 8, ptr %468) #10
  %5793 = load ptr, ptr %466, align 8, !tbaa !5
  %5794 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %5793)
          to label %5795 unwind label %5801

5795:                                             ; preds = %5792
  store ptr %5794, ptr %468, align 8, !tbaa !5
  br label %5796

5796:                                             ; preds = %5839, %5795
  %5797 = load ptr, ptr %468, align 8, !tbaa !5
  %5798 = load i8, ptr %467, align 1, !tbaa !9, !range !40, !noundef !41
  %5799 = trunc i8 %5798 to i1
  br i1 %5799, label %5805, label %5800

5800:                                             ; preds = %5796
  store i32 413, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %468) #10
  br label %5850

5801:                                             ; preds = %5792
  %5802 = landingpad { ptr, i32 }
          cleanup
  %5803 = extractvalue { ptr, i32 } %5802, 0
  store ptr %5803, ptr %11, align 8
  %5804 = extractvalue { ptr, i32 } %5802, 1
  store i32 %5804, ptr %12, align 4
  br label %5849

5805:                                             ; preds = %5796
  call void @llvm.lifetime.start.p0(i64 40, ptr %469) #10
  %5806 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %470, i32 0, i32 0
  %5807 = load ptr, ptr %468, align 8, !tbaa !5
  %5808 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5807, i32 0, i32 1
  %5809 = load i32, ptr %5808, align 8, !tbaa !60
  %5810 = load ptr, ptr %468, align 8, !tbaa !5
  %5811 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5810, i32 0, i32 0
  %5812 = load i64, ptr %464, align 8, !tbaa !13
  %5813 = trunc i64 %5812 to i32
  %5814 = invoke { i64, i64 } @_ZNK4S128rsEj(ptr noundef nonnull align 8 dereferenceable(16) %5811, i32 noundef %5813)
          to label %5815 unwind label %5840

5815:                                             ; preds = %5805
  %5816 = getelementptr inbounds %class.S128, ptr %471, i32 0, i32 0
  %5817 = getelementptr inbounds { i64, i64 }, ptr %5816, i32 0, i32 0
  %5818 = extractvalue { i64, i64 } %5814, 0
  store i64 %5818, ptr %5817, align 8
  %5819 = getelementptr inbounds { i64, i64 }, ptr %5816, i32 0, i32 1
  %5820 = extractvalue { i64, i64 } %5814, 1
  store i64 %5820, ptr %5819, align 8
  %5821 = getelementptr inbounds { i64, i64 }, ptr %471, i32 0, i32 0
  %5822 = load i64, ptr %5821, align 8
  %5823 = getelementptr inbounds { i64, i64 }, ptr %471, i32 0, i32 1
  %5824 = load i64, ptr %5823, align 8
  %5825 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %5809, i64 %5822, i64 %5824)
          to label %5826 unwind label %5840

5826:                                             ; preds = %5815
  %5827 = getelementptr inbounds %class.S128, ptr %5806, i32 0, i32 0
  %5828 = getelementptr inbounds { i64, i64 }, ptr %5827, i32 0, i32 0
  %5829 = extractvalue { i64, i64 } %5825, 0
  store i64 %5829, ptr %5828, align 8
  %5830 = getelementptr inbounds { i64, i64 }, ptr %5827, i32 0, i32 1
  %5831 = extractvalue { i64, i64 } %5825, 1
  store i64 %5831, ptr %5830, align 8
  %5832 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %470, i32 0, i32 1
  %5833 = load ptr, ptr %468, align 8, !tbaa !5
  %5834 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %5833, i32 0, i32 1
  %5835 = load i32, ptr %5834, align 8, !tbaa !60
  store i32 %5835, ptr %5832, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %469, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %470)
          to label %5836 unwind label %5840

5836:                                             ; preds = %5826
  %5837 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %469)
          to label %5838 unwind label %5844

5838:                                             ; preds = %5836
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %469) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %469) #10
  br label %5839

5839:                                             ; preds = %5838
  store i8 0, ptr %467, align 1, !tbaa !9
  br label %5796, !llvm.loop !151

5840:                                             ; preds = %5826, %5815, %5805
  %5841 = landingpad { ptr, i32 }
          cleanup
  %5842 = extractvalue { ptr, i32 } %5841, 0
  store ptr %5842, ptr %11, align 8
  %5843 = extractvalue { ptr, i32 } %5841, 1
  store i32 %5843, ptr %12, align 4
  br label %5848

5844:                                             ; preds = %5836
  %5845 = landingpad { ptr, i32 }
          cleanup
  %5846 = extractvalue { ptr, i32 } %5845, 0
  store ptr %5846, ptr %11, align 8
  %5847 = extractvalue { ptr, i32 } %5845, 1
  store i32 %5847, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %469) #10
  br label %5848

5848:                                             ; preds = %5844, %5840
  call void @llvm.lifetime.end.p0(i64 40, ptr %469) #10
  br label %5849

5849:                                             ; preds = %5848, %5801
  call void @llvm.lifetime.end.p0(i64 8, ptr %468) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %467) #10
  br label %5919

5850:                                             ; preds = %5800
  br label %5851

5851:                                             ; preds = %5850
  store i8 0, ptr %467, align 1, !tbaa !9
  br label %5788, !llvm.loop !152

5852:                                             ; preds = %5791
  br label %5917

5853:                                             ; preds = %5780
  call void @llvm.lifetime.start.p0(i64 1, ptr %472) #10
  store i8 1, ptr %472, align 1, !tbaa !9
  br label %5854

5854:                                             ; preds = %5915, %5853
  %5855 = load i8, ptr %472, align 1, !tbaa !9, !range !40, !noundef !41
  %5856 = trunc i8 %5855 to i1
  br i1 %5856, label %5858, label %5857

5857:                                             ; preds = %5854
  store i32 416, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %472) #10
  br label %5916

5858:                                             ; preds = %5854
  call void @llvm.lifetime.start.p0(i64 8, ptr %473) #10
  %5859 = load ptr, ptr %466, align 8, !tbaa !5
  %5860 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %5859)
          to label %5861 unwind label %5867

5861:                                             ; preds = %5858
  store ptr %5860, ptr %473, align 8, !tbaa !5
  br label %5862

5862:                                             ; preds = %5903, %5861
  %5863 = load ptr, ptr %473, align 8, !tbaa !5
  %5864 = load i8, ptr %472, align 1, !tbaa !9, !range !40, !noundef !41
  %5865 = trunc i8 %5864 to i1
  br i1 %5865, label %5871, label %5866

5866:                                             ; preds = %5862
  store i32 419, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %473) #10
  br label %5914

5867:                                             ; preds = %5858
  %5868 = landingpad { ptr, i32 }
          cleanup
  %5869 = extractvalue { ptr, i32 } %5868, 0
  store ptr %5869, ptr %11, align 8
  %5870 = extractvalue { ptr, i32 } %5868, 1
  store i32 %5870, ptr %12, align 4
  br label %5913

5871:                                             ; preds = %5862
  call void @llvm.lifetime.start.p0(i64 40, ptr %474) #10
  %5872 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %475, i32 0, i32 0
  %5873 = load ptr, ptr %473, align 8, !tbaa !5
  %5874 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5873, i32 0, i32 1
  %5875 = load i32, ptr %5874, align 8, !tbaa !21
  %5876 = load ptr, ptr %473, align 8, !tbaa !5
  %5877 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5876, i32 0, i32 0
  %5878 = load i64, ptr %464, align 8, !tbaa !13
  %5879 = trunc i64 %5878 to i32
  %5880 = invoke { i64, i64 } @_ZNK4U128rsEj(ptr noundef nonnull align 8 dereferenceable(16) %5877, i32 noundef %5879)
          to label %5881 unwind label %5904

5881:                                             ; preds = %5871
  %5882 = getelementptr inbounds { i64, i64 }, ptr %476, i32 0, i32 0
  %5883 = extractvalue { i64, i64 } %5880, 0
  store i64 %5883, ptr %5882, align 8
  %5884 = getelementptr inbounds { i64, i64 }, ptr %476, i32 0, i32 1
  %5885 = extractvalue { i64, i64 } %5880, 1
  store i64 %5885, ptr %5884, align 8
  %5886 = getelementptr inbounds { i64, i64 }, ptr %476, i32 0, i32 0
  %5887 = load i64, ptr %5886, align 8
  %5888 = getelementptr inbounds { i64, i64 }, ptr %476, i32 0, i32 1
  %5889 = load i64, ptr %5888, align 8
  %5890 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %5875, i64 %5887, i64 %5889)
          to label %5891 unwind label %5904

5891:                                             ; preds = %5881
  %5892 = getelementptr inbounds { i64, i64 }, ptr %5872, i32 0, i32 0
  %5893 = extractvalue { i64, i64 } %5890, 0
  store i64 %5893, ptr %5892, align 8
  %5894 = getelementptr inbounds { i64, i64 }, ptr %5872, i32 0, i32 1
  %5895 = extractvalue { i64, i64 } %5890, 1
  store i64 %5895, ptr %5894, align 8
  %5896 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %475, i32 0, i32 1
  %5897 = load ptr, ptr %473, align 8, !tbaa !5
  %5898 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %5897, i32 0, i32 1
  %5899 = load i32, ptr %5898, align 8, !tbaa !21
  store i32 %5899, ptr %5896, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %474, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %475)
          to label %5900 unwind label %5904

5900:                                             ; preds = %5891
  %5901 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %474)
          to label %5902 unwind label %5908

5902:                                             ; preds = %5900
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %474) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %474) #10
  br label %5903

5903:                                             ; preds = %5902
  store i8 0, ptr %472, align 1, !tbaa !9
  br label %5862, !llvm.loop !153

5904:                                             ; preds = %5891, %5881, %5871
  %5905 = landingpad { ptr, i32 }
          cleanup
  %5906 = extractvalue { ptr, i32 } %5905, 0
  store ptr %5906, ptr %11, align 8
  %5907 = extractvalue { ptr, i32 } %5905, 1
  store i32 %5907, ptr %12, align 4
  br label %5912

5908:                                             ; preds = %5900
  %5909 = landingpad { ptr, i32 }
          cleanup
  %5910 = extractvalue { ptr, i32 } %5909, 0
  store ptr %5910, ptr %11, align 8
  %5911 = extractvalue { ptr, i32 } %5909, 1
  store i32 %5911, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %474) #10
  br label %5912

5912:                                             ; preds = %5908, %5904
  call void @llvm.lifetime.end.p0(i64 40, ptr %474) #10
  br label %5913

5913:                                             ; preds = %5912, %5867
  call void @llvm.lifetime.end.p0(i64 8, ptr %473) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %472) #10
  br label %5919

5914:                                             ; preds = %5866
  br label %5915

5915:                                             ; preds = %5914
  store i8 0, ptr %472, align 1, !tbaa !9
  br label %5854, !llvm.loop !154

5916:                                             ; preds = %5857
  br label %5917

5917:                                             ; preds = %5916, %5852, %5786
  br label %5918

5918:                                             ; preds = %5917
  store i8 0, ptr %465, align 1, !tbaa !9
  br label %5773, !llvm.loop !155

5919:                                             ; preds = %5913, %5849, %5781
  call void @llvm.lifetime.end.p0(i64 8, ptr %466) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %465) #10
  br label %5923

5920:                                             ; preds = %5776
  br label %5921

5921:                                             ; preds = %5920
  store i8 0, ptr %465, align 1, !tbaa !9
  br label %5763, !llvm.loop !156

5922:                                             ; preds = %5766
  call void @llvm.lifetime.end.p0(i64 8, ptr %464) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %451) #10
  br label %5926

5923:                                             ; preds = %5919, %5767
  call void @llvm.lifetime.end.p0(i64 8, ptr %464) #10
  br label %5924

5924:                                             ; preds = %5923, %5754, %5740, %5631
  call void @llvm.lifetime.end.p0(i64 16, ptr %451) #10
  br label %5982

5925:                                             ; preds = %2563
  br label %5926

5926:                                             ; preds = %5925, %5922, %5622, %5324, %5014, %4704, %4394, %4114, %3729, %3396, %3063, %2730, %2704, %2678, %2652, %2626, %2600
  call void @llvm.lifetime.start.p0(i64 40, ptr %477) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %477)
          to label %5927 unwind label %5955

5927:                                             ; preds = %5926
  %5928 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %181, ptr noundef nonnull align 8 dereferenceable(40) %477)
          to label %5929 unwind label %5959

5929:                                             ; preds = %5927
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %477) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %477) #10
  br i1 %5928, label %5930, label %5981

5930:                                             ; preds = %5929
  br label %5931

5931:                                             ; preds = %5930
  %5932 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %5933 unwind label %2587

5933:                                             ; preds = %5931
  br i1 %5932, label %5934, label %5964

5934:                                             ; preds = %5933
  %5935 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %5936 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %5935, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %5937 unwind label %2587

5937:                                             ; preds = %5934
  %5938 = load ptr, ptr %3, align 8, !tbaa !5
  %5939 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %5936, ptr noundef nonnull align 8 dereferenceable(120) %5938)
          to label %5940 unwind label %2587

5940:                                             ; preds = %5937
  %5941 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5939, ptr noundef @.str.38)
          to label %5942 unwind label %2587

5942:                                             ; preds = %5940
  %5943 = load ptr, ptr %104, align 8, !tbaa !5
  %5944 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %5943, i32 0, i32 1
  %5945 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %5941, ptr noundef nonnull align 8 dereferenceable(112) %5944)
          to label %5946 unwind label %2587

5946:                                             ; preds = %5942
  %5947 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %5945, ptr noundef @.str.60)
          to label %5948 unwind label %2587

5948:                                             ; preds = %5946
  %5949 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %5947, ptr noundef nonnull align 8 dereferenceable(40) %181)
          to label %5950 unwind label %2587

5950:                                             ; preds = %5948
  %5951 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %5949, ptr noundef @_ZSt3decRSt8ios_base)
          to label %5952 unwind label %2587

5952:                                             ; preds = %5950
  %5953 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %5951, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %5954 unwind label %2587

5954:                                             ; preds = %5952
  br label %5964

5955:                                             ; preds = %5926
  %5956 = landingpad { ptr, i32 }
          cleanup
  %5957 = extractvalue { ptr, i32 } %5956, 0
  store ptr %5957, ptr %11, align 8
  %5958 = extractvalue { ptr, i32 } %5956, 1
  store i32 %5958, ptr %12, align 4
  br label %5963

5959:                                             ; preds = %5927
  %5960 = landingpad { ptr, i32 }
          cleanup
  %5961 = extractvalue { ptr, i32 } %5960, 0
  store ptr %5961, ptr %11, align 8
  %5962 = extractvalue { ptr, i32 } %5960, 1
  store i32 %5962, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %477) #10
  br label %5963

5963:                                             ; preds = %5959, %5955
  call void @llvm.lifetime.end.p0(i64 40, ptr %477) #10
  br label %5982

5964:                                             ; preds = %5954, %5933
  br label %5965

5965:                                             ; preds = %5964
  br label %5966

5966:                                             ; preds = %5965
  call void @llvm.lifetime.start.p0(i64 112, ptr %478) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %479, ptr noundef nonnull align 8 dereferenceable(40) %181) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %478, ptr noundef %479)
          to label %5967 unwind label %5972

5967:                                             ; preds = %5966
  %5968 = load ptr, ptr %104, align 8, !tbaa !5
  %5969 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %5968, i32 0, i32 1
  %5970 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %5969, ptr noundef nonnull align 8 dereferenceable(112) %478)
          to label %5971 unwind label %5976

5971:                                             ; preds = %5967
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %478) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %479) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %478) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %5981

5972:                                             ; preds = %5966
  %5973 = landingpad { ptr, i32 }
          cleanup
  %5974 = extractvalue { ptr, i32 } %5973, 0
  store ptr %5974, ptr %11, align 8
  %5975 = extractvalue { ptr, i32 } %5973, 1
  store i32 %5975, ptr %12, align 4
  br label %5980

5976:                                             ; preds = %5967
  %5977 = landingpad { ptr, i32 }
          cleanup
  %5978 = extractvalue { ptr, i32 } %5977, 0
  store ptr %5978, ptr %11, align 8
  %5979 = extractvalue { ptr, i32 } %5977, 1
  store i32 %5979, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %478) #10
  br label %5980

5980:                                             ; preds = %5976, %5972
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %479) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %478) #10
  br label %5982

5981:                                             ; preds = %5971, %5929
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %181) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %181) #10
  br label %5984

5982:                                             ; preds = %5980, %5963, %5924, %5624, %5321, %5031, %5011, %4721, %4701, %4411, %4391, %4131, %4111, %3746, %3726, %3413, %3393, %3080, %3060, %2747, %2729, %2703, %2677, %2651, %2625, %2599, %2587
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %181) #10
  br label %5983

5983:                                             ; preds = %5982, %2567
  call void @llvm.lifetime.end.p0(i64 40, ptr %181) #10
  br label %5986

5984:                                             ; preds = %5981, %2561
  br label %5985

5985:                                             ; preds = %5984, %2544
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #10
  br label %6420

5986:                                             ; preds = %5983, %2549
  call void @llvm.lifetime.end.p0(i64 8, ptr %180) #10
  br label %5987

5987:                                             ; preds = %5986, %2545
  call void @llvm.lifetime.end.p0(i64 8, ptr %179) #10
  br label %6422

5988:                                             ; preds = %2527, %2522
  call void @llvm.lifetime.start.p0(i64 48, ptr %480) #10
  invoke void @_ZN3MIR5ParamC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %480)
          to label %5989 unwind label %5993

5989:                                             ; preds = %5988
  %5990 = load ptr, ptr %178, align 8, !tbaa !5
  %5991 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %5990, i32 0, i32 1
  %5992 = load i32, ptr %5991, align 8, !tbaa !65
  switch i32 %5992, label %6243 [
    i32 0, label %5997
    i32 2, label %5997
    i32 8, label %6029
    i32 6, label %6082
    i32 4, label %6110
  ]

5993:                                             ; preds = %5988
  %5994 = landingpad { ptr, i32 }
          cleanup
  %5995 = extractvalue { ptr, i32 } %5994, 0
  store ptr %5995, ptr %11, align 8
  %5996 = extractvalue { ptr, i32 } %5994, 1
  store i32 %5996, ptr %12, align 4
  br label %6419

5997:                                             ; preds = %5989, %5989
  %5998 = load ptr, ptr %178, align 8, !tbaa !5
  %5999 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %5998, i32 0, i32 2
  %6000 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %5999)
          to label %6001 unwind label %6024

6001:                                             ; preds = %5997
  br i1 %6000, label %6002, label %6028

6002:                                             ; preds = %6001
  %6003 = load ptr, ptr %178, align 8, !tbaa !5
  %6004 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6003, i32 0, i32 2
  %6005 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6004)
          to label %6006 unwind label %6024

6006:                                             ; preds = %6002
  %6007 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6005)
          to label %6008 unwind label %6024

6008:                                             ; preds = %6006
  br i1 %6007, label %6009, label %6028

6009:                                             ; preds = %6008
  %6010 = load ptr, ptr %178, align 8, !tbaa !5
  %6011 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6010, i32 0, i32 2
  %6012 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6011)
          to label %6013 unwind label %6024

6013:                                             ; preds = %6009
  %6014 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6012)
          to label %6015 unwind label %6024

6015:                                             ; preds = %6013
  %6016 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6014, i32 0, i32 0
  %6017 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6016, i32 noundef 0)
          to label %6018 unwind label %6024

6018:                                             ; preds = %6015
  br i1 %6017, label %6019, label %6028

6019:                                             ; preds = %6018
  %6020 = load ptr, ptr %178, align 8, !tbaa !5
  %6021 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6020, i32 0, i32 0
  %6022 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %6021)
          to label %6023 unwind label %6024

6023:                                             ; preds = %6019
  br label %6028

6024:                                             ; preds = %6270, %6268, %6266, %6264, %6260, %6258, %6255, %6252, %6249, %6185, %6181, %6176, %6119, %6115, %6110, %6104, %6100, %6098, %6094, %6091, %6087, %6082, %6047, %6045, %6041, %6038, %6034, %6029, %6019, %6015, %6013, %6009, %6006, %6002, %5997
  %6025 = landingpad { ptr, i32 }
          cleanup
  %6026 = extractvalue { ptr, i32 } %6025, 0
  store ptr %6026, ptr %11, align 8
  %6027 = extractvalue { ptr, i32 } %6025, 1
  store i32 %6027, ptr %12, align 4
  br label %6418

6028:                                             ; preds = %6023, %6018, %6008, %6001
  br label %6244

6029:                                             ; preds = %5989
  %6030 = load ptr, ptr %178, align 8, !tbaa !5
  %6031 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6030, i32 0, i32 2
  %6032 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6031)
          to label %6033 unwind label %6024

6033:                                             ; preds = %6029
  br i1 %6032, label %6034, label %6081

6034:                                             ; preds = %6033
  %6035 = load ptr, ptr %178, align 8, !tbaa !5
  %6036 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6035, i32 0, i32 2
  %6037 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6036)
          to label %6038 unwind label %6024

6038:                                             ; preds = %6034
  %6039 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6037)
          to label %6040 unwind label %6024

6040:                                             ; preds = %6038
  br i1 %6039, label %6041, label %6081

6041:                                             ; preds = %6040
  %6042 = load ptr, ptr %178, align 8, !tbaa !5
  %6043 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6042, i32 0, i32 2
  %6044 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6043)
          to label %6045 unwind label %6024

6045:                                             ; preds = %6041
  %6046 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6044)
          to label %6047 unwind label %6024

6047:                                             ; preds = %6045
  %6048 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6046, i32 0, i32 0
  %6049 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6048, i32 noundef 1)
          to label %6050 unwind label %6024

6050:                                             ; preds = %6047
  br i1 %6049, label %6051, label %6081

6051:                                             ; preds = %6050
  call void @llvm.lifetime.start.p0(i64 48, ptr %481) #10
  %6052 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %483, i32 0, i32 0
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %6052, i64 noundef 0, i64 noundef 0)
          to label %6053 unwind label %6067

6053:                                             ; preds = %6051
  %6054 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %483, i32 0, i32 1
  %6055 = load ptr, ptr %178, align 8, !tbaa !5
  %6056 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6055, i32 0, i32 2
  %6057 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6056)
          to label %6058 unwind label %6067

6058:                                             ; preds = %6053
  %6059 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6057)
          to label %6060 unwind label %6067

6060:                                             ; preds = %6058
  %6061 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6059, i32 0, i32 1
  %6062 = load i32, ptr %6061, align 8, !tbaa !21
  store i32 %6062, ptr %6054, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %482, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %483)
          to label %6063 unwind label %6067

6063:                                             ; preds = %6060
  invoke void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48) %481, ptr noundef %482)
          to label %6064 unwind label %6071

6064:                                             ; preds = %6063
  %6065 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %481)
          to label %6066 unwind label %6075

6066:                                             ; preds = %6064
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %481) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %482) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %481) #10
  br label %6081

6067:                                             ; preds = %6060, %6058, %6053, %6051
  %6068 = landingpad { ptr, i32 }
          cleanup
  %6069 = extractvalue { ptr, i32 } %6068, 0
  store ptr %6069, ptr %11, align 8
  %6070 = extractvalue { ptr, i32 } %6068, 1
  store i32 %6070, ptr %12, align 4
  br label %6080

6071:                                             ; preds = %6063
  %6072 = landingpad { ptr, i32 }
          cleanup
  %6073 = extractvalue { ptr, i32 } %6072, 0
  store ptr %6073, ptr %11, align 8
  %6074 = extractvalue { ptr, i32 } %6072, 1
  store i32 %6074, ptr %12, align 4
  br label %6079

6075:                                             ; preds = %6064
  %6076 = landingpad { ptr, i32 }
          cleanup
  %6077 = extractvalue { ptr, i32 } %6076, 0
  store ptr %6077, ptr %11, align 8
  %6078 = extractvalue { ptr, i32 } %6076, 1
  store i32 %6078, ptr %12, align 4
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %481) #10
  br label %6079

6079:                                             ; preds = %6075, %6071
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %482) #10
  br label %6080

6080:                                             ; preds = %6079, %6067
  call void @llvm.lifetime.end.p0(i64 48, ptr %481) #10
  br label %6418

6081:                                             ; preds = %6066, %6050, %6040, %6033
  br label %6244

6082:                                             ; preds = %5989
  %6083 = load ptr, ptr %178, align 8, !tbaa !5
  %6084 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6083, i32 0, i32 2
  %6085 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6084)
          to label %6086 unwind label %6024

6086:                                             ; preds = %6082
  br i1 %6085, label %6087, label %6109

6087:                                             ; preds = %6086
  %6088 = load ptr, ptr %178, align 8, !tbaa !5
  %6089 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6088, i32 0, i32 2
  %6090 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6089)
          to label %6091 unwind label %6024

6091:                                             ; preds = %6087
  %6092 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6090)
          to label %6093 unwind label %6024

6093:                                             ; preds = %6091
  br i1 %6092, label %6094, label %6109

6094:                                             ; preds = %6093
  %6095 = load ptr, ptr %178, align 8, !tbaa !5
  %6096 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6095, i32 0, i32 2
  %6097 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6096)
          to label %6098 unwind label %6024

6098:                                             ; preds = %6094
  %6099 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6097)
          to label %6100 unwind label %6024

6100:                                             ; preds = %6098
  %6101 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6099, i32 0, i32 0
  %6102 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6101, i32 noundef 1)
          to label %6103 unwind label %6024

6103:                                             ; preds = %6100
  br i1 %6102, label %6104, label %6109

6104:                                             ; preds = %6103
  %6105 = load ptr, ptr %178, align 8, !tbaa !5
  %6106 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6105, i32 0, i32 0
  %6107 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %6106)
          to label %6108 unwind label %6024

6108:                                             ; preds = %6104
  br label %6109

6109:                                             ; preds = %6108, %6103, %6093, %6086
  br label %6244

6110:                                             ; preds = %5989
  %6111 = load ptr, ptr %178, align 8, !tbaa !5
  %6112 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6111, i32 0, i32 2
  %6113 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6112)
          to label %6114 unwind label %6024

6114:                                             ; preds = %6110
  br i1 %6113, label %6115, label %6176

6115:                                             ; preds = %6114
  %6116 = load ptr, ptr %178, align 8, !tbaa !5
  %6117 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6116, i32 0, i32 2
  %6118 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6117)
          to label %6119 unwind label %6024

6119:                                             ; preds = %6115
  %6120 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6118)
          to label %6121 unwind label %6024

6121:                                             ; preds = %6119
  br i1 %6120, label %6122, label %6176

6122:                                             ; preds = %6121
  call void @llvm.lifetime.start.p0(i64 8, ptr %484) #10
  %6123 = load ptr, ptr %178, align 8, !tbaa !5
  %6124 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6123, i32 0, i32 2
  %6125 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6124)
          to label %6126 unwind label %6144

6126:                                             ; preds = %6122
  %6127 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6125)
          to label %6128 unwind label %6144

6128:                                             ; preds = %6126
  store ptr %6127, ptr %484, align 8, !tbaa !5
  %6129 = load ptr, ptr %484, align 8, !tbaa !5
  %6130 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6129, i32 0, i32 0
  %6131 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6130, i32 noundef 0)
          to label %6132 unwind label %6144

6132:                                             ; preds = %6128
  br i1 %6131, label %6133, label %6162

6133:                                             ; preds = %6132
  call void @llvm.lifetime.start.p0(i64 48, ptr %485) #10
  %6134 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %487, i32 0, i32 0
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %6134, i64 noundef 0, i64 noundef 0)
          to label %6135 unwind label %6148

6135:                                             ; preds = %6133
  %6136 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %487, i32 0, i32 1
  %6137 = load ptr, ptr %484, align 8, !tbaa !5
  %6138 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6137, i32 0, i32 1
  %6139 = load i32, ptr %6138, align 8, !tbaa !21
  store i32 %6139, ptr %6136, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %486, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %487)
          to label %6140 unwind label %6148

6140:                                             ; preds = %6135
  invoke void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48) %485, ptr noundef %486)
          to label %6141 unwind label %6152

6141:                                             ; preds = %6140
  %6142 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %485)
          to label %6143 unwind label %6156

6143:                                             ; preds = %6141
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %485) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %486) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %485) #10
  br label %6174

6144:                                             ; preds = %6167, %6162, %6128, %6126, %6122
  %6145 = landingpad { ptr, i32 }
          cleanup
  %6146 = extractvalue { ptr, i32 } %6145, 0
  store ptr %6146, ptr %11, align 8
  %6147 = extractvalue { ptr, i32 } %6145, 1
  store i32 %6147, ptr %12, align 4
  br label %6175

6148:                                             ; preds = %6135, %6133
  %6149 = landingpad { ptr, i32 }
          cleanup
  %6150 = extractvalue { ptr, i32 } %6149, 0
  store ptr %6150, ptr %11, align 8
  %6151 = extractvalue { ptr, i32 } %6149, 1
  store i32 %6151, ptr %12, align 4
  br label %6161

6152:                                             ; preds = %6140
  %6153 = landingpad { ptr, i32 }
          cleanup
  %6154 = extractvalue { ptr, i32 } %6153, 0
  store ptr %6154, ptr %11, align 8
  %6155 = extractvalue { ptr, i32 } %6153, 1
  store i32 %6155, ptr %12, align 4
  br label %6160

6156:                                             ; preds = %6141
  %6157 = landingpad { ptr, i32 }
          cleanup
  %6158 = extractvalue { ptr, i32 } %6157, 0
  store ptr %6158, ptr %11, align 8
  %6159 = extractvalue { ptr, i32 } %6157, 1
  store i32 %6159, ptr %12, align 4
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %485) #10
  br label %6160

6160:                                             ; preds = %6156, %6152
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %486) #10
  br label %6161

6161:                                             ; preds = %6160, %6148
  call void @llvm.lifetime.end.p0(i64 48, ptr %485) #10
  br label %6175

6162:                                             ; preds = %6132
  %6163 = load ptr, ptr %484, align 8, !tbaa !5
  %6164 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6163, i32 0, i32 0
  %6165 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6164, i32 noundef 1)
          to label %6166 unwind label %6144

6166:                                             ; preds = %6162
  br i1 %6165, label %6167, label %6172

6167:                                             ; preds = %6166
  %6168 = load ptr, ptr %178, align 8, !tbaa !5
  %6169 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6168, i32 0, i32 0
  %6170 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %6169)
          to label %6171 unwind label %6144

6171:                                             ; preds = %6167
  br label %6173

6172:                                             ; preds = %6166
  br label %6173

6173:                                             ; preds = %6172, %6171
  br label %6174

6174:                                             ; preds = %6173, %6143
  call void @llvm.lifetime.end.p0(i64 8, ptr %484) #10
  br label %6176

6175:                                             ; preds = %6161, %6144
  call void @llvm.lifetime.end.p0(i64 8, ptr %484) #10
  br label %6418

6176:                                             ; preds = %6174, %6121, %6114
  %6177 = load ptr, ptr %178, align 8, !tbaa !5
  %6178 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6177, i32 0, i32 0
  %6179 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6178)
          to label %6180 unwind label %6024

6180:                                             ; preds = %6176
  br i1 %6179, label %6181, label %6242

6181:                                             ; preds = %6180
  %6182 = load ptr, ptr %178, align 8, !tbaa !5
  %6183 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6182, i32 0, i32 0
  %6184 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6183)
          to label %6185 unwind label %6024

6185:                                             ; preds = %6181
  %6186 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6184)
          to label %6187 unwind label %6024

6187:                                             ; preds = %6185
  br i1 %6186, label %6188, label %6242

6188:                                             ; preds = %6187
  call void @llvm.lifetime.start.p0(i64 8, ptr %488) #10
  %6189 = load ptr, ptr %178, align 8, !tbaa !5
  %6190 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6189, i32 0, i32 0
  %6191 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6190)
          to label %6192 unwind label %6210

6192:                                             ; preds = %6188
  %6193 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6191)
          to label %6194 unwind label %6210

6194:                                             ; preds = %6192
  store ptr %6193, ptr %488, align 8, !tbaa !5
  %6195 = load ptr, ptr %488, align 8, !tbaa !5
  %6196 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6195, i32 0, i32 0
  %6197 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6196, i32 noundef 0)
          to label %6198 unwind label %6210

6198:                                             ; preds = %6194
  br i1 %6197, label %6199, label %6228

6199:                                             ; preds = %6198
  call void @llvm.lifetime.start.p0(i64 48, ptr %489) #10
  %6200 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %491, i32 0, i32 0
  invoke void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %6200, i64 noundef 0, i64 noundef 0)
          to label %6201 unwind label %6214

6201:                                             ; preds = %6199
  %6202 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %491, i32 0, i32 1
  %6203 = load ptr, ptr %488, align 8, !tbaa !5
  %6204 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6203, i32 0, i32 1
  %6205 = load i32, ptr %6204, align 8, !tbaa !21
  store i32 %6205, ptr %6202, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %490, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %491)
          to label %6206 unwind label %6214

6206:                                             ; preds = %6201
  invoke void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48) %489, ptr noundef %490)
          to label %6207 unwind label %6218

6207:                                             ; preds = %6206
  %6208 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %489)
          to label %6209 unwind label %6222

6209:                                             ; preds = %6207
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %489) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %490) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %489) #10
  br label %6240

6210:                                             ; preds = %6233, %6228, %6194, %6192, %6188
  %6211 = landingpad { ptr, i32 }
          cleanup
  %6212 = extractvalue { ptr, i32 } %6211, 0
  store ptr %6212, ptr %11, align 8
  %6213 = extractvalue { ptr, i32 } %6211, 1
  store i32 %6213, ptr %12, align 4
  br label %6241

6214:                                             ; preds = %6201, %6199
  %6215 = landingpad { ptr, i32 }
          cleanup
  %6216 = extractvalue { ptr, i32 } %6215, 0
  store ptr %6216, ptr %11, align 8
  %6217 = extractvalue { ptr, i32 } %6215, 1
  store i32 %6217, ptr %12, align 4
  br label %6227

6218:                                             ; preds = %6206
  %6219 = landingpad { ptr, i32 }
          cleanup
  %6220 = extractvalue { ptr, i32 } %6219, 0
  store ptr %6220, ptr %11, align 8
  %6221 = extractvalue { ptr, i32 } %6219, 1
  store i32 %6221, ptr %12, align 4
  br label %6226

6222:                                             ; preds = %6207
  %6223 = landingpad { ptr, i32 }
          cleanup
  %6224 = extractvalue { ptr, i32 } %6223, 0
  store ptr %6224, ptr %11, align 8
  %6225 = extractvalue { ptr, i32 } %6223, 1
  store i32 %6225, ptr %12, align 4
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %489) #10
  br label %6226

6226:                                             ; preds = %6222, %6218
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %490) #10
  br label %6227

6227:                                             ; preds = %6226, %6214
  call void @llvm.lifetime.end.p0(i64 48, ptr %489) #10
  br label %6241

6228:                                             ; preds = %6198
  %6229 = load ptr, ptr %488, align 8, !tbaa !5
  %6230 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6229, i32 0, i32 0
  %6231 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %6230, i32 noundef 1)
          to label %6232 unwind label %6210

6232:                                             ; preds = %6228
  br i1 %6231, label %6233, label %6238

6233:                                             ; preds = %6232
  %6234 = load ptr, ptr %178, align 8, !tbaa !5
  %6235 = getelementptr inbounds %"struct.MIR::RValue::Data_BinOp", ptr %6234, i32 0, i32 2
  %6236 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %6235)
          to label %6237 unwind label %6210

6237:                                             ; preds = %6233
  br label %6239

6238:                                             ; preds = %6232
  br label %6239

6239:                                             ; preds = %6238, %6237
  br label %6240

6240:                                             ; preds = %6239, %6209
  call void @llvm.lifetime.end.p0(i64 8, ptr %488) #10
  br label %6242

6241:                                             ; preds = %6227, %6210
  call void @llvm.lifetime.end.p0(i64 8, ptr %488) #10
  br label %6418

6242:                                             ; preds = %6240, %6187, %6180
  br label %6244

6243:                                             ; preds = %5989
  br label %6244

6244:                                             ; preds = %6243, %6242, %6109, %6081, %6028
  call void @llvm.lifetime.start.p0(i64 48, ptr %492) #10
  invoke void @_ZN3MIR5ParamC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %492)
          to label %6245 unwind label %6273

6245:                                             ; preds = %6244
  %6246 = invoke noundef zeroext i1 @_ZNK3MIR5ParamneERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %480, ptr noundef nonnull align 8 dereferenceable(48) %492)
          to label %6247 unwind label %6277

6247:                                             ; preds = %6245
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %492) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %492) #10
  br i1 %6246, label %6248, label %6417

6248:                                             ; preds = %6247
  br label %6249

6249:                                             ; preds = %6248
  %6250 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %6251 unwind label %6024

6251:                                             ; preds = %6249
  br i1 %6250, label %6252, label %6282

6252:                                             ; preds = %6251
  %6253 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %6254 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %6253, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %6255 unwind label %6024

6255:                                             ; preds = %6252
  %6256 = load ptr, ptr %3, align 8, !tbaa !5
  %6257 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %6254, ptr noundef nonnull align 8 dereferenceable(120) %6256)
          to label %6258 unwind label %6024

6258:                                             ; preds = %6255
  %6259 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %6257, ptr noundef @.str.38)
          to label %6260 unwind label %6024

6260:                                             ; preds = %6258
  %6261 = load ptr, ptr %104, align 8, !tbaa !5
  %6262 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %6261, i32 0, i32 1
  %6263 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %6259, ptr noundef nonnull align 8 dereferenceable(112) %6262)
          to label %6264 unwind label %6024

6264:                                             ; preds = %6260
  %6265 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %6263, ptr noundef @.str.60)
          to label %6266 unwind label %6024

6266:                                             ; preds = %6264
  %6267 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_5ParamE(ptr noundef nonnull align 8 dereferenceable(8) %6265, ptr noundef nonnull align 8 dereferenceable(48) %480)
          to label %6268 unwind label %6024

6268:                                             ; preds = %6266
  %6269 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %6267, ptr noundef @_ZSt3decRSt8ios_base)
          to label %6270 unwind label %6024

6270:                                             ; preds = %6268
  %6271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %6269, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %6272 unwind label %6024

6272:                                             ; preds = %6270
  br label %6282

6273:                                             ; preds = %6244
  %6274 = landingpad { ptr, i32 }
          cleanup
  %6275 = extractvalue { ptr, i32 } %6274, 0
  store ptr %6275, ptr %11, align 8
  %6276 = extractvalue { ptr, i32 } %6274, 1
  store i32 %6276, ptr %12, align 4
  br label %6281

6277:                                             ; preds = %6245
  %6278 = landingpad { ptr, i32 }
          cleanup
  %6279 = extractvalue { ptr, i32 } %6278, 0
  store ptr %6279, ptr %11, align 8
  %6280 = extractvalue { ptr, i32 } %6278, 1
  store i32 %6280, ptr %12, align 4
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %492) #10
  br label %6281

6281:                                             ; preds = %6277, %6273
  call void @llvm.lifetime.end.p0(i64 48, ptr %492) #10
  br label %6418

6282:                                             ; preds = %6272, %6251
  br label %6283

6283:                                             ; preds = %6282
  br label %6284

6284:                                             ; preds = %6283
  call void @llvm.lifetime.start.p0(i64 1, ptr %493) #10
  store i8 1, ptr %493, align 1, !tbaa !9
  br label %6285

6285:                                             ; preds = %6415, %6284
  %6286 = load i8, ptr %493, align 1, !tbaa !9, !range !40, !noundef !41
  %6287 = trunc i8 %6286 to i1
  br i1 %6287, label %6289, label %6288

6288:                                             ; preds = %6285
  store i32 427, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %493) #10
  br label %6416

6289:                                             ; preds = %6285
  call void @llvm.lifetime.start.p0(i64 8, ptr %494) #10
  store ptr %480, ptr %494, align 8, !tbaa !5
  br label %6290

6290:                                             ; preds = %6412, %6289
  %6291 = load i8, ptr %493, align 1, !tbaa !9, !range !40, !noundef !41
  %6292 = trunc i8 %6291 to i1
  br i1 %6292, label %6294, label %6293

6293:                                             ; preds = %6290
  store i32 430, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %494) #10
  br label %6414

6294:                                             ; preds = %6290
  %6295 = load ptr, ptr %494, align 8, !tbaa !5
  %6296 = invoke noundef i32 @_ZNK3MIR5Param3tagEv(ptr noundef nonnull align 8 dereferenceable(48) %6295)
          to label %6297 unwind label %6298

6297:                                             ; preds = %6294
  switch i32 %6296, label %6411 [
    i32 0, label %6302
    i32 1, label %6303
    i32 2, label %6348
    i32 3, label %6372
  ]

6298:                                             ; preds = %6294
  %6299 = landingpad { ptr, i32 }
          cleanup
  %6300 = extractvalue { ptr, i32 } %6299, 0
  store ptr %6300, ptr %11, align 8
  %6301 = extractvalue { ptr, i32 } %6299, 1
  store i32 %6301, ptr %12, align 4
  br label %6413

6302:                                             ; preds = %6297
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4295, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

6303:                                             ; preds = %6297
  call void @llvm.lifetime.start.p0(i64 1, ptr %495) #10
  store i8 1, ptr %495, align 1, !tbaa !9
  br label %6304

6304:                                             ; preds = %6346, %6303
  %6305 = load i8, ptr %495, align 1, !tbaa !9, !range !40, !noundef !41
  %6306 = trunc i8 %6305 to i1
  br i1 %6306, label %6308, label %6307

6307:                                             ; preds = %6304
  store i32 434, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %495) #10
  br label %6347

6308:                                             ; preds = %6304
  call void @llvm.lifetime.start.p0(i64 8, ptr %496) #10
  %6309 = load ptr, ptr %494, align 8, !tbaa !5
  %6310 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR5Param9as_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %6309)
          to label %6311 unwind label %6317

6311:                                             ; preds = %6308
  store ptr %6310, ptr %496, align 8, !tbaa !5
  br label %6312

6312:                                             ; preds = %6329, %6311
  %6313 = load ptr, ptr %496, align 8, !tbaa !5
  %6314 = load i8, ptr %495, align 1, !tbaa !9, !range !40, !noundef !41
  %6315 = trunc i8 %6314 to i1
  br i1 %6315, label %6321, label %6316

6316:                                             ; preds = %6312
  store i32 437, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %496) #10
  br label %6345

6317:                                             ; preds = %6308
  %6318 = landingpad { ptr, i32 }
          cleanup
  %6319 = extractvalue { ptr, i32 } %6318, 0
  store ptr %6319, ptr %11, align 8
  %6320 = extractvalue { ptr, i32 } %6318, 1
  store i32 %6320, ptr %12, align 4
  br label %6344

6321:                                             ; preds = %6312
  call void @llvm.lifetime.start.p0(i64 112, ptr %497) #10
  %6322 = load ptr, ptr %496, align 8, !tbaa !5
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %498, ptr noundef nonnull align 8 dereferenceable(32) %6322)
          to label %6323 unwind label %6330

6323:                                             ; preds = %6321
  invoke void @_ZN3MIR6RValueC2ENS_6LValueE(ptr noundef nonnull align 8 dereferenceable(112) %497, ptr noundef %498)
          to label %6324 unwind label %6334

6324:                                             ; preds = %6323
  %6325 = load ptr, ptr %104, align 8, !tbaa !5
  %6326 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %6325, i32 0, i32 1
  %6327 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %6326, ptr noundef nonnull align 8 dereferenceable(112) %497)
          to label %6328 unwind label %6338

6328:                                             ; preds = %6324
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %497) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %498) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %497) #10
  br label %6329

6329:                                             ; preds = %6328
  store i8 0, ptr %495, align 1, !tbaa !9
  br label %6312, !llvm.loop !157

6330:                                             ; preds = %6321
  %6331 = landingpad { ptr, i32 }
          cleanup
  %6332 = extractvalue { ptr, i32 } %6331, 0
  store ptr %6332, ptr %11, align 8
  %6333 = extractvalue { ptr, i32 } %6331, 1
  store i32 %6333, ptr %12, align 4
  br label %6343

6334:                                             ; preds = %6323
  %6335 = landingpad { ptr, i32 }
          cleanup
  %6336 = extractvalue { ptr, i32 } %6335, 0
  store ptr %6336, ptr %11, align 8
  %6337 = extractvalue { ptr, i32 } %6335, 1
  store i32 %6337, ptr %12, align 4
  br label %6342

6338:                                             ; preds = %6324
  %6339 = landingpad { ptr, i32 }
          cleanup
  %6340 = extractvalue { ptr, i32 } %6339, 0
  store ptr %6340, ptr %11, align 8
  %6341 = extractvalue { ptr, i32 } %6339, 1
  store i32 %6341, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %497) #10
  br label %6342

6342:                                             ; preds = %6338, %6334
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %498) #10
  br label %6343

6343:                                             ; preds = %6342, %6330
  call void @llvm.lifetime.end.p0(i64 112, ptr %497) #10
  br label %6344

6344:                                             ; preds = %6343, %6317
  call void @llvm.lifetime.end.p0(i64 8, ptr %496) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %495) #10
  br label %6413

6345:                                             ; preds = %6316
  br label %6346

6346:                                             ; preds = %6345
  store i8 0, ptr %495, align 1, !tbaa !9
  br label %6304, !llvm.loop !158

6347:                                             ; preds = %6307
  br label %6411

6348:                                             ; preds = %6297
  call void @llvm.lifetime.start.p0(i64 1, ptr %499) #10
  store i8 1, ptr %499, align 1, !tbaa !9
  br label %6349

6349:                                             ; preds = %6370, %6348
  %6350 = load i8, ptr %499, align 1, !tbaa !9, !range !40, !noundef !41
  %6351 = trunc i8 %6350 to i1
  br i1 %6351, label %6353, label %6352

6352:                                             ; preds = %6349
  store i32 440, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %499) #10
  br label %6371

6353:                                             ; preds = %6349
  call void @llvm.lifetime.start.p0(i64 8, ptr %500) #10
  %6354 = load ptr, ptr %494, align 8, !tbaa !5
  %6355 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(48) %6354)
          to label %6356 unwind label %6362

6356:                                             ; preds = %6353
  store ptr %6355, ptr %500, align 8, !tbaa !5
  br label %6357

6357:                                             ; preds = %6368, %6356
  %6358 = load ptr, ptr %500, align 8, !tbaa !5
  %6359 = load i8, ptr %499, align 1, !tbaa !9, !range !40, !noundef !41
  %6360 = trunc i8 %6359 to i1
  br i1 %6360, label %6366, label %6361

6361:                                             ; preds = %6357
  store i32 443, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %500) #10
  br label %6369

6362:                                             ; preds = %6366, %6353
  %6363 = landingpad { ptr, i32 }
          cleanup
  %6364 = extractvalue { ptr, i32 } %6363, 0
  store ptr %6364, ptr %11, align 8
  %6365 = extractvalue { ptr, i32 } %6363, 1
  store i32 %6365, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %500) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %499) #10
  br label %6413

6366:                                             ; preds = %6357
  %6367 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %6367, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %6367, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %6362

6368:                                             ; No predecessors!
  store i8 0, ptr %499, align 1, !tbaa !9
  br label %6357, !llvm.loop !159

6369:                                             ; preds = %6361
  br label %6370

6370:                                             ; preds = %6369
  store i8 0, ptr %499, align 1, !tbaa !9
  br label %6349, !llvm.loop !160

6371:                                             ; preds = %6352
  br label %6411

6372:                                             ; preds = %6297
  call void @llvm.lifetime.start.p0(i64 1, ptr %501) #10
  store i8 1, ptr %501, align 1, !tbaa !9
  br label %6373

6373:                                             ; preds = %6409, %6372
  %6374 = load i8, ptr %501, align 1, !tbaa !9, !range !40, !noundef !41
  %6375 = trunc i8 %6374 to i1
  br i1 %6375, label %6377, label %6376

6376:                                             ; preds = %6373
  store i32 446, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %501) #10
  br label %6410

6377:                                             ; preds = %6373
  call void @llvm.lifetime.start.p0(i64 8, ptr %502) #10
  %6378 = load ptr, ptr %494, align 8, !tbaa !5
  %6379 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %6378)
          to label %6380 unwind label %6386

6380:                                             ; preds = %6377
  store ptr %6379, ptr %502, align 8, !tbaa !5
  br label %6381

6381:                                             ; preds = %6397, %6380
  %6382 = load ptr, ptr %502, align 8, !tbaa !5
  %6383 = load i8, ptr %501, align 1, !tbaa !9, !range !40, !noundef !41
  %6384 = trunc i8 %6383 to i1
  br i1 %6384, label %6390, label %6385

6385:                                             ; preds = %6381
  store i32 449, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %502) #10
  br label %6408

6386:                                             ; preds = %6377
  %6387 = landingpad { ptr, i32 }
          cleanup
  %6388 = extractvalue { ptr, i32 } %6387, 0
  store ptr %6388, ptr %11, align 8
  %6389 = extractvalue { ptr, i32 } %6387, 1
  store i32 %6389, ptr %12, align 4
  br label %6407

6390:                                             ; preds = %6381
  call void @llvm.lifetime.start.p0(i64 112, ptr %503) #10
  %6391 = load ptr, ptr %502, align 8, !tbaa !5
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %504, ptr noundef nonnull align 8 dereferenceable(40) %6391) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %503, ptr noundef %504)
          to label %6392 unwind label %6398

6392:                                             ; preds = %6390
  %6393 = load ptr, ptr %104, align 8, !tbaa !5
  %6394 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %6393, i32 0, i32 1
  %6395 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %6394, ptr noundef nonnull align 8 dereferenceable(112) %503)
          to label %6396 unwind label %6402

6396:                                             ; preds = %6392
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %503) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %504) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %503) #10
  br label %6397

6397:                                             ; preds = %6396
  store i8 0, ptr %501, align 1, !tbaa !9
  br label %6381, !llvm.loop !161

6398:                                             ; preds = %6390
  %6399 = landingpad { ptr, i32 }
          cleanup
  %6400 = extractvalue { ptr, i32 } %6399, 0
  store ptr %6400, ptr %11, align 8
  %6401 = extractvalue { ptr, i32 } %6399, 1
  store i32 %6401, ptr %12, align 4
  br label %6406

6402:                                             ; preds = %6392
  %6403 = landingpad { ptr, i32 }
          cleanup
  %6404 = extractvalue { ptr, i32 } %6403, 0
  store ptr %6404, ptr %11, align 8
  %6405 = extractvalue { ptr, i32 } %6403, 1
  store i32 %6405, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %503) #10
  br label %6406

6406:                                             ; preds = %6402, %6398
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %504) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %503) #10
  br label %6407

6407:                                             ; preds = %6406, %6386
  call void @llvm.lifetime.end.p0(i64 8, ptr %502) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %501) #10
  br label %6413

6408:                                             ; preds = %6385
  br label %6409

6409:                                             ; preds = %6408
  store i8 0, ptr %501, align 1, !tbaa !9
  br label %6373, !llvm.loop !162

6410:                                             ; preds = %6376
  br label %6411

6411:                                             ; preds = %6410, %6371, %6347, %6297
  br label %6412

6412:                                             ; preds = %6411
  store i8 0, ptr %493, align 1, !tbaa !9
  br label %6290, !llvm.loop !163

6413:                                             ; preds = %6407, %6362, %6344, %6298
  call void @llvm.lifetime.end.p0(i64 8, ptr %494) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %493) #10
  br label %6418

6414:                                             ; preds = %6293
  br label %6415

6415:                                             ; preds = %6414
  store i8 0, ptr %493, align 1, !tbaa !9
  br label %6285, !llvm.loop !164

6416:                                             ; preds = %6288
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %6417

6417:                                             ; preds = %6416, %6247
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %480) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %480) #10
  br label %6420

6418:                                             ; preds = %6413, %6281, %6241, %6175, %6080, %6024
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %480) #10
  br label %6419

6419:                                             ; preds = %6418, %5993
  call void @llvm.lifetime.end.p0(i64 48, ptr %480) #10
  br label %6422

6420:                                             ; preds = %6417, %5985
  br label %6421

6421:                                             ; preds = %6420
  store i8 0, ptr %177, align 1, !tbaa !9
  br label %2503, !llvm.loop !165

6422:                                             ; preds = %6419, %5987, %2508
  call void @llvm.lifetime.end.p0(i64 8, ptr %178) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %177) #10
  br label %7434

6423:                                             ; preds = %2507
  br label %6424

6424:                                             ; preds = %6423
  store i8 0, ptr %177, align 1, !tbaa !9
  br label %2495, !llvm.loop !166

6425:                                             ; preds = %2498
  br label %7432

6426:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %505) #10
  store i8 1, ptr %505, align 1, !tbaa !9
  br label %6427

6427:                                             ; preds = %7122, %6426
  %6428 = load i8, ptr %505, align 1, !tbaa !9, !range !40, !noundef !41
  %6429 = trunc i8 %6428 to i1
  br i1 %6429, label %6431, label %6430

6430:                                             ; preds = %6427
  store i32 452, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %505) #10
  br label %7123

6431:                                             ; preds = %6427
  call void @llvm.lifetime.start.p0(i64 8, ptr %506) #10
  %6432 = load ptr, ptr %106, align 8, !tbaa !5
  %6433 = invoke noundef nonnull align 8 dereferenceable(36) ptr @_ZN3MIR6RValue8as_UniOpEv(ptr noundef nonnull align 8 dereferenceable(112) %6432)
          to label %6434 unwind label %6440

6434:                                             ; preds = %6431
  store ptr %6433, ptr %506, align 8, !tbaa !5
  br label %6435

6435:                                             ; preds = %7118, %6434
  %6436 = load ptr, ptr %506, align 8, !tbaa !5
  %6437 = load i8, ptr %505, align 1, !tbaa !9, !range !40, !noundef !41
  %6438 = trunc i8 %6437 to i1
  br i1 %6438, label %6444, label %6439

6439:                                             ; preds = %6435
  store i32 455, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %506) #10
  br label %7121

6440:                                             ; preds = %6431
  %6441 = landingpad { ptr, i32 }
          cleanup
  %6442 = extractvalue { ptr, i32 } %6441, 0
  store ptr %6442, ptr %11, align 8
  %6443 = extractvalue { ptr, i32 } %6441, 1
  store i32 %6443, ptr %12, align 4
  br label %7120

6444:                                             ; preds = %6435
  call void @llvm.lifetime.start.p0(i64 8, ptr %507) #10
  %6445 = load ptr, ptr %506, align 8, !tbaa !5
  %6446 = getelementptr inbounds %"struct.MIR::RValue::Data_UniOp", ptr %6445, i32 0, i32 0
  %6447 = invoke ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 8 dereferenceable(32) %6446)
          to label %6448 unwind label %6460

6448:                                             ; preds = %6444
  %6449 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %507, i32 0, i32 0
  store ptr %6447, ptr %6449, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %508) #10
  %6450 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  %6451 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %508, i32 0, i32 0
  store ptr %6450, ptr %6451, align 8
  %6452 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %507, ptr noundef nonnull align 8 dereferenceable(8) %508) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %508) #10
  br i1 %6452, label %6453, label %7117

6453:                                             ; preds = %6448
  call void @llvm.lifetime.start.p0(i64 8, ptr %509) #10
  %6454 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %507) #10
  %6455 = getelementptr inbounds %"struct.std::pair.518", ptr %6454, i32 0, i32 1
  store ptr %6455, ptr %509, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %510) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %510)
          to label %6456 unwind label %6464

6456:                                             ; preds = %6453
  call void @llvm.lifetime.start.p0(i64 1, ptr %511) #10
  store i8 0, ptr %511, align 1, !tbaa !9
  %6457 = load ptr, ptr %506, align 8, !tbaa !5
  %6458 = getelementptr inbounds %"struct.MIR::RValue::Data_UniOp", ptr %6457, i32 0, i32 1
  %6459 = load i32, ptr %6458, align 8, !tbaa !167
  switch i32 %6459, label %7069 [
    i32 0, label %6468
    i32 1, label %6909
  ]

6460:                                             ; preds = %6444
  %6461 = landingpad { ptr, i32 }
          cleanup
  %6462 = extractvalue { ptr, i32 } %6461, 0
  store ptr %6462, ptr %11, align 8
  %6463 = extractvalue { ptr, i32 } %6461, 1
  store i32 %6463, ptr %12, align 4
  br label %7119

6464:                                             ; preds = %6453
  %6465 = landingpad { ptr, i32 }
          cleanup
  %6466 = extractvalue { ptr, i32 } %6465, 0
  store ptr %6466, ptr %11, align 8
  %6467 = extractvalue { ptr, i32 } %6465, 1
  store i32 %6467, ptr %12, align 4
  br label %7116

6468:                                             ; preds = %6456
  call void @llvm.lifetime.start.p0(i64 1, ptr %512) #10
  store i8 1, ptr %512, align 1, !tbaa !9
  br label %6469

6469:                                             ; preds = %6907, %6468
  %6470 = load i8, ptr %512, align 1, !tbaa !9, !range !40, !noundef !41
  %6471 = trunc i8 %6470 to i1
  br i1 %6471, label %6473, label %6472

6472:                                             ; preds = %6469
  store i32 459, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %512) #10
  br label %6908

6473:                                             ; preds = %6469
  call void @llvm.lifetime.start.p0(i64 8, ptr %513) #10
  %6474 = load ptr, ptr %509, align 8, !tbaa !5
  store ptr %6474, ptr %513, align 8, !tbaa !5
  br label %6475

6475:                                             ; preds = %6904, %6473
  %6476 = load i8, ptr %512, align 1, !tbaa !9, !range !40, !noundef !41
  %6477 = trunc i8 %6476 to i1
  br i1 %6477, label %6479, label %6478

6478:                                             ; preds = %6475
  store i32 462, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %513) #10
  br label %6906

6479:                                             ; preds = %6475
  %6480 = load ptr, ptr %513, align 8, !tbaa !5
  %6481 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %6480)
          to label %6482 unwind label %6483

6482:                                             ; preds = %6479
  switch i32 %6481, label %6903 [
    i32 0, label %6487
    i32 2, label %6488
    i32 1, label %6579
    i32 3, label %6697
    i32 4, label %6720
    i32 5, label %6765
    i32 6, label %6788
    i32 7, label %6811
    i32 8, label %6834
    i32 9, label %6857
    i32 10, label %6880
  ]

6483:                                             ; preds = %6479
  %6484 = landingpad { ptr, i32 }
          cleanup
  %6485 = extractvalue { ptr, i32 } %6484, 0
  store ptr %6485, ptr %11, align 8
  %6486 = extractvalue { ptr, i32 } %6484, 1
  store i32 %6486, ptr %12, align 4
  br label %6905

6487:                                             ; preds = %6482
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4314, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

6488:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %514) #10
  store i8 1, ptr %514, align 1, !tbaa !9
  br label %6489

6489:                                             ; preds = %6577, %6488
  %6490 = load i8, ptr %514, align 1, !tbaa !9, !range !40, !noundef !41
  %6491 = trunc i8 %6490 to i1
  br i1 %6491, label %6493, label %6492

6492:                                             ; preds = %6489
  store i32 466, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %514) #10
  br label %6578

6493:                                             ; preds = %6489
  call void @llvm.lifetime.start.p0(i64 8, ptr %515) #10
  %6494 = load ptr, ptr %513, align 8, !tbaa !5
  %6495 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6494)
          to label %6496 unwind label %6502

6496:                                             ; preds = %6493
  store ptr %6495, ptr %515, align 8, !tbaa !5
  br label %6497

6497:                                             ; preds = %6564, %6496
  %6498 = load ptr, ptr %515, align 8, !tbaa !5
  %6499 = load i8, ptr %514, align 1, !tbaa !9, !range !40, !noundef !41
  %6500 = trunc i8 %6499 to i1
  br i1 %6500, label %6506, label %6501

6501:                                             ; preds = %6497
  store i32 469, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %515) #10
  br label %6576

6502:                                             ; preds = %6493
  %6503 = landingpad { ptr, i32 }
          cleanup
  %6504 = extractvalue { ptr, i32 } %6503, 0
  store ptr %6504, ptr %11, align 8
  %6505 = extractvalue { ptr, i32 } %6503, 1
  store i32 %6505, ptr %12, align 4
  br label %6575

6506:                                             ; preds = %6497
  call void @llvm.lifetime.start.p0(i64 16, ptr %516) #10
  %6507 = load ptr, ptr %515, align 8, !tbaa !5
  %6508 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6507, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %516, ptr align 8 %6508, i64 16, i1 false), !tbaa.struct !56
  store i8 1, ptr %511, align 1, !tbaa !9
  %6509 = load ptr, ptr %515, align 8, !tbaa !5
  %6510 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6509, i32 0, i32 1
  %6511 = load i32, ptr %6510, align 8, !tbaa !21
  switch i32 %6511, label %6554 [
    i32 2, label %6512
    i32 4, label %6512
    i32 6, label %6512
    i32 0, label %6512
    i32 8, label %6512
    i32 10, label %6536
    i32 15, label %6537
  ]

6512:                                             ; preds = %6506, %6506, %6506, %6506, %6506
  call void @llvm.lifetime.start.p0(i64 16, ptr %517) #10
  %6513 = load ptr, ptr %515, align 8, !tbaa !5
  %6514 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6513, i32 0, i32 1
  %6515 = load i32, ptr %6514, align 8, !tbaa !21
  %6516 = invoke { i64, i64 } @_ZNK4U128coEv(ptr noundef nonnull align 8 dereferenceable(16) %516)
          to label %6517 unwind label %6532

6517:                                             ; preds = %6512
  %6518 = getelementptr inbounds { i64, i64 }, ptr %518, i32 0, i32 0
  %6519 = extractvalue { i64, i64 } %6516, 0
  store i64 %6519, ptr %6518, align 8
  %6520 = getelementptr inbounds { i64, i64 }, ptr %518, i32 0, i32 1
  %6521 = extractvalue { i64, i64 } %6516, 1
  store i64 %6521, ptr %6520, align 8
  %6522 = getelementptr inbounds { i64, i64 }, ptr %518, i32 0, i32 0
  %6523 = load i64, ptr %6522, align 8
  %6524 = getelementptr inbounds { i64, i64 }, ptr %518, i32 0, i32 1
  %6525 = load i64, ptr %6524, align 8
  %6526 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %6515, i64 %6523, i64 %6525)
          to label %6527 unwind label %6532

6527:                                             ; preds = %6517
  %6528 = getelementptr inbounds { i64, i64 }, ptr %517, i32 0, i32 0
  %6529 = extractvalue { i64, i64 } %6526, 0
  store i64 %6529, ptr %6528, align 8
  %6530 = getelementptr inbounds { i64, i64 }, ptr %517, i32 0, i32 1
  %6531 = extractvalue { i64, i64 } %6526, 1
  store i64 %6531, ptr %6530, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %516, ptr align 8 %517, i64 16, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 16, ptr %517) #10
  br label %6555

6532:                                             ; preds = %6517, %6512
  %6533 = landingpad { ptr, i32 }
          cleanup
  %6534 = extractvalue { ptr, i32 } %6533, 0
  store ptr %6534, ptr %11, align 8
  %6535 = extractvalue { ptr, i32 } %6533, 1
  store i32 %6535, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %517) #10
  br label %6574

6536:                                             ; preds = %6506
  store i8 0, ptr %511, align 1, !tbaa !9
  br label %6555

6537:                                             ; preds = %6506
  br label %6538

6538:                                             ; preds = %6537
  call void @llvm.lifetime.start.p0(i64 8, ptr %519) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %519, align 8, !tbaa !5
  %6539 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %521) #10
  %6540 = getelementptr inbounds %class.anon.520, ptr %521, i32 0, i32 0
  store ptr %519, ptr %6540, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_45vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %520, ptr noundef nonnull align 8 dereferenceable(8) %521) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %6539, ptr noundef %520)
          to label %6541 unwind label %6543

6541:                                             ; preds = %6538
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %521) #10
  %6542 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %6542, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %6542, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %6547

6543:                                             ; preds = %6538
  %6544 = landingpad { ptr, i32 }
          cleanup
  %6545 = extractvalue { ptr, i32 } %6544, 0
  store ptr %6545, ptr %11, align 8
  %6546 = extractvalue { ptr, i32 } %6544, 1
  store i32 %6546, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %520) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %521) #10
  br label %6551

6547:                                             ; preds = %6541
  %6548 = landingpad { ptr, i32 }
          cleanup
  %6549 = extractvalue { ptr, i32 } %6548, 0
  store ptr %6549, ptr %11, align 8
  %6550 = extractvalue { ptr, i32 } %6548, 1
  store i32 %6550, ptr %12, align 4
  br label %6551

6551:                                             ; preds = %6547, %6543
  call void @llvm.lifetime.end.p0(i64 8, ptr %519) #10
  br label %6574

6552:                                             ; No predecessors!
  br label %6553

6553:                                             ; preds = %6552
  br label %6555

6554:                                             ; preds = %6506
  store i8 0, ptr %511, align 1, !tbaa !9
  br label %6555

6555:                                             ; preds = %6554, %6553, %6536, %6527
  call void @llvm.lifetime.start.p0(i64 40, ptr %522) #10
  %6556 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %523, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6556, ptr align 8 %516, i64 16, i1 false), !tbaa.struct !56
  %6557 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %523, i32 0, i32 1
  %6558 = load ptr, ptr %515, align 8, !tbaa !5
  %6559 = getelementptr inbounds %"struct.MIR::Constant::Data_Uint", ptr %6558, i32 0, i32 1
  %6560 = load i32, ptr %6559, align 8, !tbaa !21
  store i32 %6560, ptr %6557, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %522, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8 %523)
          to label %6561 unwind label %6565

6561:                                             ; preds = %6555
  %6562 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %510, ptr noundef nonnull align 8 dereferenceable(40) %522)
          to label %6563 unwind label %6569

6563:                                             ; preds = %6561
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %522) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %522) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %516) #10
  br label %6564

6564:                                             ; preds = %6563
  store i8 0, ptr %514, align 1, !tbaa !9
  br label %6497, !llvm.loop !170

6565:                                             ; preds = %6555
  %6566 = landingpad { ptr, i32 }
          cleanup
  %6567 = extractvalue { ptr, i32 } %6566, 0
  store ptr %6567, ptr %11, align 8
  %6568 = extractvalue { ptr, i32 } %6566, 1
  store i32 %6568, ptr %12, align 4
  br label %6573

6569:                                             ; preds = %6561
  %6570 = landingpad { ptr, i32 }
          cleanup
  %6571 = extractvalue { ptr, i32 } %6570, 0
  store ptr %6571, ptr %11, align 8
  %6572 = extractvalue { ptr, i32 } %6570, 1
  store i32 %6572, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %522) #10
  br label %6573

6573:                                             ; preds = %6569, %6565
  call void @llvm.lifetime.end.p0(i64 40, ptr %522) #10
  br label %6574

6574:                                             ; preds = %6573, %6551, %6532
  call void @llvm.lifetime.end.p0(i64 16, ptr %516) #10
  br label %6575

6575:                                             ; preds = %6574, %6502
  call void @llvm.lifetime.end.p0(i64 8, ptr %515) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %514) #10
  br label %6905

6576:                                             ; preds = %6501
  br label %6577

6577:                                             ; preds = %6576
  store i8 0, ptr %514, align 1, !tbaa !9
  br label %6489, !llvm.loop !171

6578:                                             ; preds = %6492
  br label %6903

6579:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %524) #10
  store i8 1, ptr %524, align 1, !tbaa !9
  br label %6580

6580:                                             ; preds = %6695, %6579
  %6581 = load i8, ptr %524, align 1, !tbaa !9, !range !40, !noundef !41
  %6582 = trunc i8 %6581 to i1
  br i1 %6582, label %6584, label %6583

6583:                                             ; preds = %6580
  store i32 475, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %524) #10
  br label %6696

6584:                                             ; preds = %6580
  call void @llvm.lifetime.start.p0(i64 8, ptr %525) #10
  %6585 = load ptr, ptr %513, align 8, !tbaa !5
  %6586 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %6585)
          to label %6587 unwind label %6593

6587:                                             ; preds = %6584
  store ptr %6586, ptr %525, align 8, !tbaa !5
  br label %6588

6588:                                             ; preds = %6682, %6587
  %6589 = load ptr, ptr %525, align 8, !tbaa !5
  %6590 = load i8, ptr %524, align 1, !tbaa !9, !range !40, !noundef !41
  %6591 = trunc i8 %6590 to i1
  br i1 %6591, label %6597, label %6592

6592:                                             ; preds = %6588
  store i32 478, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %525) #10
  br label %6694

6593:                                             ; preds = %6584
  %6594 = landingpad { ptr, i32 }
          cleanup
  %6595 = extractvalue { ptr, i32 } %6594, 0
  store ptr %6595, ptr %11, align 8
  %6596 = extractvalue { ptr, i32 } %6594, 1
  store i32 %6596, ptr %12, align 4
  br label %6693

6597:                                             ; preds = %6588
  call void @llvm.lifetime.start.p0(i64 16, ptr %526) #10
  %6598 = load ptr, ptr %525, align 8, !tbaa !5
  %6599 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6598, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %526, ptr align 8 %6599, i64 16, i1 false), !tbaa.struct !56
  %6600 = load ptr, ptr %525, align 8, !tbaa !5
  %6601 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6600, i32 0, i32 1
  %6602 = load i32, ptr %6601, align 8, !tbaa !60
  switch i32 %6602, label %6672 [
    i32 3, label %6603
    i32 5, label %6603
    i32 7, label %6603
    i32 1, label %6603
    i32 9, label %6603
    i32 11, label %6629
    i32 15, label %6655
  ]

6603:                                             ; preds = %6597, %6597, %6597, %6597, %6597
  call void @llvm.lifetime.start.p0(i64 16, ptr %527) #10
  %6604 = load ptr, ptr %525, align 8, !tbaa !5
  %6605 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6604, i32 0, i32 1
  %6606 = load i32, ptr %6605, align 8, !tbaa !60
  %6607 = invoke { i64, i64 } @_ZNK4S128coEv(ptr noundef nonnull align 8 dereferenceable(16) %526)
          to label %6608 unwind label %6625

6608:                                             ; preds = %6603
  %6609 = getelementptr inbounds %class.S128, ptr %528, i32 0, i32 0
  %6610 = getelementptr inbounds { i64, i64 }, ptr %6609, i32 0, i32 0
  %6611 = extractvalue { i64, i64 } %6607, 0
  store i64 %6611, ptr %6610, align 8
  %6612 = getelementptr inbounds { i64, i64 }, ptr %6609, i32 0, i32 1
  %6613 = extractvalue { i64, i64 } %6607, 1
  store i64 %6613, ptr %6612, align 8
  %6614 = getelementptr inbounds { i64, i64 }, ptr %528, i32 0, i32 0
  %6615 = load i64, ptr %6614, align 8
  %6616 = getelementptr inbounds { i64, i64 }, ptr %528, i32 0, i32 1
  %6617 = load i64, ptr %6616, align 8
  %6618 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %6606, i64 %6615, i64 %6617)
          to label %6619 unwind label %6625

6619:                                             ; preds = %6608
  %6620 = getelementptr inbounds %class.S128, ptr %527, i32 0, i32 0
  %6621 = getelementptr inbounds { i64, i64 }, ptr %6620, i32 0, i32 0
  %6622 = extractvalue { i64, i64 } %6618, 0
  store i64 %6622, ptr %6621, align 8
  %6623 = getelementptr inbounds { i64, i64 }, ptr %6620, i32 0, i32 1
  %6624 = extractvalue { i64, i64 } %6618, 1
  store i64 %6624, ptr %6623, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %526, ptr align 8 %527, i64 16, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 16, ptr %527) #10
  store i8 1, ptr %511, align 1, !tbaa !9
  br label %6673

6625:                                             ; preds = %6608, %6603
  %6626 = landingpad { ptr, i32 }
          cleanup
  %6627 = extractvalue { ptr, i32 } %6626, 0
  store ptr %6627, ptr %11, align 8
  %6628 = extractvalue { ptr, i32 } %6626, 1
  store i32 %6628, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %527) #10
  br label %6692

6629:                                             ; preds = %6597
  call void @llvm.lifetime.start.p0(i64 16, ptr %529) #10
  %6630 = load ptr, ptr %525, align 8, !tbaa !5
  %6631 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6630, i32 0, i32 1
  %6632 = load i32, ptr %6631, align 8, !tbaa !60
  %6633 = invoke { i64, i64 } @_ZNK4S128coEv(ptr noundef nonnull align 8 dereferenceable(16) %526)
          to label %6634 unwind label %6651

6634:                                             ; preds = %6629
  %6635 = getelementptr inbounds %class.S128, ptr %530, i32 0, i32 0
  %6636 = getelementptr inbounds { i64, i64 }, ptr %6635, i32 0, i32 0
  %6637 = extractvalue { i64, i64 } %6633, 0
  store i64 %6637, ptr %6636, align 8
  %6638 = getelementptr inbounds { i64, i64 }, ptr %6635, i32 0, i32 1
  %6639 = extractvalue { i64, i64 } %6633, 1
  store i64 %6639, ptr %6638, align 8
  %6640 = getelementptr inbounds { i64, i64 }, ptr %530, i32 0, i32 0
  %6641 = load i64, ptr %6640, align 8
  %6642 = getelementptr inbounds { i64, i64 }, ptr %530, i32 0, i32 1
  %6643 = load i64, ptr %6642, align 8
  %6644 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %6632, i64 %6641, i64 %6643)
          to label %6645 unwind label %6651

6645:                                             ; preds = %6634
  %6646 = getelementptr inbounds %class.S128, ptr %529, i32 0, i32 0
  %6647 = getelementptr inbounds { i64, i64 }, ptr %6646, i32 0, i32 0
  %6648 = extractvalue { i64, i64 } %6644, 0
  store i64 %6648, ptr %6647, align 8
  %6649 = getelementptr inbounds { i64, i64 }, ptr %6646, i32 0, i32 1
  %6650 = extractvalue { i64, i64 } %6644, 1
  store i64 %6650, ptr %6649, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %526, ptr align 8 %529, i64 16, i1 false), !tbaa.struct !56
  call void @llvm.lifetime.end.p0(i64 16, ptr %529) #10
  store i8 1, ptr %511, align 1, !tbaa !9
  br label %6673

6651:                                             ; preds = %6634, %6629
  %6652 = landingpad { ptr, i32 }
          cleanup
  %6653 = extractvalue { ptr, i32 } %6652, 0
  store ptr %6653, ptr %11, align 8
  %6654 = extractvalue { ptr, i32 } %6652, 1
  store i32 %6654, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %529) #10
  br label %6692

6655:                                             ; preds = %6597
  br label %6656

6656:                                             ; preds = %6655
  call void @llvm.lifetime.start.p0(i64 8, ptr %531) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %531, align 8, !tbaa !5
  %6657 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %533) #10
  %6658 = getelementptr inbounds %class.anon.521, ptr %533, i32 0, i32 0
  store ptr %531, ptr %6658, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_46vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %532, ptr noundef nonnull align 8 dereferenceable(8) %533) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %6657, ptr noundef %532)
          to label %6659 unwind label %6661

6659:                                             ; preds = %6656
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %532) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %533) #10
  %6660 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %6660, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %6660, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %6665

6661:                                             ; preds = %6656
  %6662 = landingpad { ptr, i32 }
          cleanup
  %6663 = extractvalue { ptr, i32 } %6662, 0
  store ptr %6663, ptr %11, align 8
  %6664 = extractvalue { ptr, i32 } %6662, 1
  store i32 %6664, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %532) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %533) #10
  br label %6669

6665:                                             ; preds = %6659
  %6666 = landingpad { ptr, i32 }
          cleanup
  %6667 = extractvalue { ptr, i32 } %6666, 0
  store ptr %6667, ptr %11, align 8
  %6668 = extractvalue { ptr, i32 } %6666, 1
  store i32 %6668, ptr %12, align 4
  br label %6669

6669:                                             ; preds = %6665, %6661
  call void @llvm.lifetime.end.p0(i64 8, ptr %531) #10
  br label %6692

6670:                                             ; No predecessors!
  br label %6671

6671:                                             ; preds = %6670
  br label %6673

6672:                                             ; preds = %6597
  store i8 0, ptr %511, align 1, !tbaa !9
  br label %6673

6673:                                             ; preds = %6672, %6671, %6645, %6619
  call void @llvm.lifetime.start.p0(i64 40, ptr %534) #10
  %6674 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %535, i32 0, i32 0
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %6674, ptr align 8 %526, i64 16, i1 false), !tbaa.struct !56
  %6675 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %535, i32 0, i32 1
  %6676 = load ptr, ptr %525, align 8, !tbaa !5
  %6677 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6676, i32 0, i32 1
  %6678 = load i32, ptr %6677, align 8, !tbaa !60
  store i32 %6678, ptr %6675, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %534, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %535)
          to label %6679 unwind label %6683

6679:                                             ; preds = %6673
  %6680 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %510, ptr noundef nonnull align 8 dereferenceable(40) %534)
          to label %6681 unwind label %6687

6681:                                             ; preds = %6679
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %534) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %534) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %526) #10
  br label %6682

6682:                                             ; preds = %6681
  store i8 0, ptr %524, align 1, !tbaa !9
  br label %6588, !llvm.loop !172

6683:                                             ; preds = %6673
  %6684 = landingpad { ptr, i32 }
          cleanup
  %6685 = extractvalue { ptr, i32 } %6684, 0
  store ptr %6685, ptr %11, align 8
  %6686 = extractvalue { ptr, i32 } %6684, 1
  store i32 %6686, ptr %12, align 4
  br label %6691

6687:                                             ; preds = %6679
  %6688 = landingpad { ptr, i32 }
          cleanup
  %6689 = extractvalue { ptr, i32 } %6688, 0
  store ptr %6689, ptr %11, align 8
  %6690 = extractvalue { ptr, i32 } %6688, 1
  store i32 %6690, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %534) #10
  br label %6691

6691:                                             ; preds = %6687, %6683
  call void @llvm.lifetime.end.p0(i64 40, ptr %534) #10
  br label %6692

6692:                                             ; preds = %6691, %6669, %6651, %6625
  call void @llvm.lifetime.end.p0(i64 16, ptr %526) #10
  br label %6693

6693:                                             ; preds = %6692, %6593
  call void @llvm.lifetime.end.p0(i64 8, ptr %525) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %524) #10
  br label %6905

6694:                                             ; preds = %6592
  br label %6695

6695:                                             ; preds = %6694
  store i8 0, ptr %524, align 1, !tbaa !9
  br label %6580, !llvm.loop !173

6696:                                             ; preds = %6583
  br label %6903

6697:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %536) #10
  store i8 1, ptr %536, align 1, !tbaa !9
  br label %6698

6698:                                             ; preds = %6718, %6697
  %6699 = load i8, ptr %536, align 1, !tbaa !9, !range !40, !noundef !41
  %6700 = trunc i8 %6699 to i1
  br i1 %6700, label %6702, label %6701

6701:                                             ; preds = %6698
  store i32 484, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %536) #10
  br label %6719

6702:                                             ; preds = %6698
  call void @llvm.lifetime.start.p0(i64 8, ptr %537) #10
  %6703 = load ptr, ptr %513, align 8, !tbaa !5
  %6704 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %6703)
          to label %6705 unwind label %6711

6705:                                             ; preds = %6702
  store ptr %6704, ptr %537, align 8, !tbaa !5
  br label %6706

6706:                                             ; preds = %6716, %6705
  %6707 = load ptr, ptr %537, align 8, !tbaa !5
  %6708 = load i8, ptr %536, align 1, !tbaa !9, !range !40, !noundef !41
  %6709 = trunc i8 %6708 to i1
  br i1 %6709, label %6715, label %6710

6710:                                             ; preds = %6706
  store i32 487, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %537) #10
  br label %6717

6711:                                             ; preds = %6702
  %6712 = landingpad { ptr, i32 }
          cleanup
  %6713 = extractvalue { ptr, i32 } %6712, 0
  store ptr %6713, ptr %11, align 8
  %6714 = extractvalue { ptr, i32 } %6712, 1
  store i32 %6714, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %537) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %536) #10
  br label %6905

6715:                                             ; preds = %6706
  br label %6716

6716:                                             ; preds = %6715
  store i8 0, ptr %536, align 1, !tbaa !9
  br label %6706, !llvm.loop !174

6717:                                             ; preds = %6710
  br label %6718

6718:                                             ; preds = %6717
  store i8 0, ptr %536, align 1, !tbaa !9
  br label %6698, !llvm.loop !175

6719:                                             ; preds = %6701
  br label %6903

6720:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %538) #10
  store i8 1, ptr %538, align 1, !tbaa !9
  br label %6721

6721:                                             ; preds = %6763, %6720
  %6722 = load i8, ptr %538, align 1, !tbaa !9, !range !40, !noundef !41
  %6723 = trunc i8 %6722 to i1
  br i1 %6723, label %6725, label %6724

6724:                                             ; preds = %6721
  store i32 490, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %538) #10
  br label %6764

6725:                                             ; preds = %6721
  call void @llvm.lifetime.start.p0(i64 8, ptr %539) #10
  %6726 = load ptr, ptr %513, align 8, !tbaa !5
  %6727 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %6726)
          to label %6728 unwind label %6734

6728:                                             ; preds = %6725
  store ptr %6727, ptr %539, align 8, !tbaa !5
  br label %6729

6729:                                             ; preds = %6751, %6728
  %6730 = load ptr, ptr %539, align 8, !tbaa !5
  %6731 = load i8, ptr %538, align 1, !tbaa !9, !range !40, !noundef !41
  %6732 = trunc i8 %6731 to i1
  br i1 %6732, label %6738, label %6733

6733:                                             ; preds = %6729
  store i32 493, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %539) #10
  br label %6762

6734:                                             ; preds = %6725
  %6735 = landingpad { ptr, i32 }
          cleanup
  %6736 = extractvalue { ptr, i32 } %6735, 0
  store ptr %6736, ptr %11, align 8
  %6737 = extractvalue { ptr, i32 } %6735, 1
  store i32 %6737, ptr %12, align 4
  br label %6761

6738:                                             ; preds = %6729
  call void @llvm.lifetime.start.p0(i64 40, ptr %540) #10
  %6739 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %541, i32 0, i32 0
  %6740 = load ptr, ptr %539, align 8, !tbaa !5
  %6741 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %6740, i32 0, i32 0
  %6742 = load i8, ptr %6741, align 1, !tbaa !42, !range !40, !noundef !41
  %6743 = trunc i8 %6742 to i1
  %6744 = xor i1 %6743, true
  %6745 = zext i1 %6744 to i8
  store i8 %6745, ptr %6739, align 1, !tbaa !42
  %6746 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %541, i32 0, i32 0
  %6747 = load i8, ptr %6746, align 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %540, i8 %6747)
          to label %6748 unwind label %6752

6748:                                             ; preds = %6738
  %6749 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %510, ptr noundef nonnull align 8 dereferenceable(40) %540)
          to label %6750 unwind label %6756

6750:                                             ; preds = %6748
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %540) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %540) #10
  store i8 1, ptr %511, align 1, !tbaa !9
  br label %6751

6751:                                             ; preds = %6750
  store i8 0, ptr %538, align 1, !tbaa !9
  br label %6729, !llvm.loop !176

6752:                                             ; preds = %6738
  %6753 = landingpad { ptr, i32 }
          cleanup
  %6754 = extractvalue { ptr, i32 } %6753, 0
  store ptr %6754, ptr %11, align 8
  %6755 = extractvalue { ptr, i32 } %6753, 1
  store i32 %6755, ptr %12, align 4
  br label %6760

6756:                                             ; preds = %6748
  %6757 = landingpad { ptr, i32 }
          cleanup
  %6758 = extractvalue { ptr, i32 } %6757, 0
  store ptr %6758, ptr %11, align 8
  %6759 = extractvalue { ptr, i32 } %6757, 1
  store i32 %6759, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %540) #10
  br label %6760

6760:                                             ; preds = %6756, %6752
  call void @llvm.lifetime.end.p0(i64 40, ptr %540) #10
  br label %6761

6761:                                             ; preds = %6760, %6734
  call void @llvm.lifetime.end.p0(i64 8, ptr %539) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %538) #10
  br label %6905

6762:                                             ; preds = %6733
  br label %6763

6763:                                             ; preds = %6762
  store i8 0, ptr %538, align 1, !tbaa !9
  br label %6721, !llvm.loop !177

6764:                                             ; preds = %6724
  br label %6903

6765:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %542) #10
  store i8 1, ptr %542, align 1, !tbaa !9
  br label %6766

6766:                                             ; preds = %6786, %6765
  %6767 = load i8, ptr %542, align 1, !tbaa !9, !range !40, !noundef !41
  %6768 = trunc i8 %6767 to i1
  br i1 %6768, label %6770, label %6769

6769:                                             ; preds = %6766
  store i32 496, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %542) #10
  br label %6787

6770:                                             ; preds = %6766
  call void @llvm.lifetime.start.p0(i64 8, ptr %543) #10
  %6771 = load ptr, ptr %513, align 8, !tbaa !5
  %6772 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40) %6771)
          to label %6773 unwind label %6779

6773:                                             ; preds = %6770
  store ptr %6772, ptr %543, align 8, !tbaa !5
  br label %6774

6774:                                             ; preds = %6784, %6773
  %6775 = load ptr, ptr %543, align 8, !tbaa !5
  %6776 = load i8, ptr %542, align 1, !tbaa !9, !range !40, !noundef !41
  %6777 = trunc i8 %6776 to i1
  br i1 %6777, label %6783, label %6778

6778:                                             ; preds = %6774
  store i32 499, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %543) #10
  br label %6785

6779:                                             ; preds = %6770
  %6780 = landingpad { ptr, i32 }
          cleanup
  %6781 = extractvalue { ptr, i32 } %6780, 0
  store ptr %6781, ptr %11, align 8
  %6782 = extractvalue { ptr, i32 } %6780, 1
  store i32 %6782, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %543) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %542) #10
  br label %6905

6783:                                             ; preds = %6774
  br label %6784

6784:                                             ; preds = %6783
  store i8 0, ptr %542, align 1, !tbaa !9
  br label %6774, !llvm.loop !178

6785:                                             ; preds = %6778
  br label %6786

6786:                                             ; preds = %6785
  store i8 0, ptr %542, align 1, !tbaa !9
  br label %6766, !llvm.loop !179

6787:                                             ; preds = %6769
  br label %6903

6788:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %544) #10
  store i8 1, ptr %544, align 1, !tbaa !9
  br label %6789

6789:                                             ; preds = %6809, %6788
  %6790 = load i8, ptr %544, align 1, !tbaa !9, !range !40, !noundef !41
  %6791 = trunc i8 %6790 to i1
  br i1 %6791, label %6793, label %6792

6792:                                             ; preds = %6789
  store i32 502, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %544) #10
  br label %6810

6793:                                             ; preds = %6789
  call void @llvm.lifetime.start.p0(i64 8, ptr %545) #10
  %6794 = load ptr, ptr %513, align 8, !tbaa !5
  %6795 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40) %6794)
          to label %6796 unwind label %6802

6796:                                             ; preds = %6793
  store ptr %6795, ptr %545, align 8, !tbaa !5
  br label %6797

6797:                                             ; preds = %6807, %6796
  %6798 = load ptr, ptr %545, align 8, !tbaa !5
  %6799 = load i8, ptr %544, align 1, !tbaa !9, !range !40, !noundef !41
  %6800 = trunc i8 %6799 to i1
  br i1 %6800, label %6806, label %6801

6801:                                             ; preds = %6797
  store i32 505, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %545) #10
  br label %6808

6802:                                             ; preds = %6793
  %6803 = landingpad { ptr, i32 }
          cleanup
  %6804 = extractvalue { ptr, i32 } %6803, 0
  store ptr %6804, ptr %11, align 8
  %6805 = extractvalue { ptr, i32 } %6803, 1
  store i32 %6805, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %545) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %544) #10
  br label %6905

6806:                                             ; preds = %6797
  br label %6807

6807:                                             ; preds = %6806
  store i8 0, ptr %544, align 1, !tbaa !9
  br label %6797, !llvm.loop !180

6808:                                             ; preds = %6801
  br label %6809

6809:                                             ; preds = %6808
  store i8 0, ptr %544, align 1, !tbaa !9
  br label %6789, !llvm.loop !181

6810:                                             ; preds = %6792
  br label %6903

6811:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %546) #10
  store i8 1, ptr %546, align 1, !tbaa !9
  br label %6812

6812:                                             ; preds = %6832, %6811
  %6813 = load i8, ptr %546, align 1, !tbaa !9, !range !40, !noundef !41
  %6814 = trunc i8 %6813 to i1
  br i1 %6814, label %6816, label %6815

6815:                                             ; preds = %6812
  store i32 508, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %546) #10
  br label %6833

6816:                                             ; preds = %6812
  call void @llvm.lifetime.start.p0(i64 8, ptr %547) #10
  %6817 = load ptr, ptr %513, align 8, !tbaa !5
  %6818 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %6817)
          to label %6819 unwind label %6825

6819:                                             ; preds = %6816
  store ptr %6818, ptr %547, align 8, !tbaa !5
  br label %6820

6820:                                             ; preds = %6830, %6819
  %6821 = load ptr, ptr %547, align 8, !tbaa !5
  %6822 = load i8, ptr %546, align 1, !tbaa !9, !range !40, !noundef !41
  %6823 = trunc i8 %6822 to i1
  br i1 %6823, label %6829, label %6824

6824:                                             ; preds = %6820
  store i32 511, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %547) #10
  br label %6831

6825:                                             ; preds = %6816
  %6826 = landingpad { ptr, i32 }
          cleanup
  %6827 = extractvalue { ptr, i32 } %6826, 0
  store ptr %6827, ptr %11, align 8
  %6828 = extractvalue { ptr, i32 } %6826, 1
  store i32 %6828, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %547) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %546) #10
  br label %6905

6829:                                             ; preds = %6820
  br label %6830

6830:                                             ; preds = %6829
  store i8 0, ptr %546, align 1, !tbaa !9
  br label %6820, !llvm.loop !182

6831:                                             ; preds = %6824
  br label %6832

6832:                                             ; preds = %6831
  store i8 0, ptr %546, align 1, !tbaa !9
  br label %6812, !llvm.loop !183

6833:                                             ; preds = %6815
  br label %6903

6834:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %548) #10
  store i8 1, ptr %548, align 1, !tbaa !9
  br label %6835

6835:                                             ; preds = %6855, %6834
  %6836 = load i8, ptr %548, align 1, !tbaa !9, !range !40, !noundef !41
  %6837 = trunc i8 %6836 to i1
  br i1 %6837, label %6839, label %6838

6838:                                             ; preds = %6835
  store i32 514, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %548) #10
  br label %6856

6839:                                             ; preds = %6835
  call void @llvm.lifetime.start.p0(i64 8, ptr %549) #10
  %6840 = load ptr, ptr %513, align 8, !tbaa !5
  %6841 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %6840)
          to label %6842 unwind label %6848

6842:                                             ; preds = %6839
  store ptr %6841, ptr %549, align 8, !tbaa !5
  br label %6843

6843:                                             ; preds = %6853, %6842
  %6844 = load ptr, ptr %549, align 8, !tbaa !5
  %6845 = load i8, ptr %548, align 1, !tbaa !9, !range !40, !noundef !41
  %6846 = trunc i8 %6845 to i1
  br i1 %6846, label %6852, label %6847

6847:                                             ; preds = %6843
  store i32 517, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %549) #10
  br label %6854

6848:                                             ; preds = %6839
  %6849 = landingpad { ptr, i32 }
          cleanup
  %6850 = extractvalue { ptr, i32 } %6849, 0
  store ptr %6850, ptr %11, align 8
  %6851 = extractvalue { ptr, i32 } %6849, 1
  store i32 %6851, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %549) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %548) #10
  br label %6905

6852:                                             ; preds = %6843
  br label %6853

6853:                                             ; preds = %6852
  store i8 0, ptr %548, align 1, !tbaa !9
  br label %6843, !llvm.loop !184

6854:                                             ; preds = %6847
  br label %6855

6855:                                             ; preds = %6854
  store i8 0, ptr %548, align 1, !tbaa !9
  br label %6835, !llvm.loop !185

6856:                                             ; preds = %6838
  br label %6903

6857:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %550) #10
  store i8 1, ptr %550, align 1, !tbaa !9
  br label %6858

6858:                                             ; preds = %6878, %6857
  %6859 = load i8, ptr %550, align 1, !tbaa !9, !range !40, !noundef !41
  %6860 = trunc i8 %6859 to i1
  br i1 %6860, label %6862, label %6861

6861:                                             ; preds = %6858
  store i32 520, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %550) #10
  br label %6879

6862:                                             ; preds = %6858
  call void @llvm.lifetime.start.p0(i64 8, ptr %551) #10
  %6863 = load ptr, ptr %513, align 8, !tbaa !5
  %6864 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40) %6863)
          to label %6865 unwind label %6871

6865:                                             ; preds = %6862
  store ptr %6864, ptr %551, align 8, !tbaa !5
  br label %6866

6866:                                             ; preds = %6876, %6865
  %6867 = load ptr, ptr %551, align 8, !tbaa !5
  %6868 = load i8, ptr %550, align 1, !tbaa !9, !range !40, !noundef !41
  %6869 = trunc i8 %6868 to i1
  br i1 %6869, label %6875, label %6870

6870:                                             ; preds = %6866
  store i32 523, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %551) #10
  br label %6877

6871:                                             ; preds = %6862
  %6872 = landingpad { ptr, i32 }
          cleanup
  %6873 = extractvalue { ptr, i32 } %6872, 0
  store ptr %6873, ptr %11, align 8
  %6874 = extractvalue { ptr, i32 } %6872, 1
  store i32 %6874, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %551) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %550) #10
  br label %6905

6875:                                             ; preds = %6866
  br label %6876

6876:                                             ; preds = %6875
  store i8 0, ptr %550, align 1, !tbaa !9
  br label %6866, !llvm.loop !186

6877:                                             ; preds = %6870
  br label %6878

6878:                                             ; preds = %6877
  store i8 0, ptr %550, align 1, !tbaa !9
  br label %6858, !llvm.loop !187

6879:                                             ; preds = %6861
  br label %6903

6880:                                             ; preds = %6482
  call void @llvm.lifetime.start.p0(i64 1, ptr %552) #10
  store i8 1, ptr %552, align 1, !tbaa !9
  br label %6881

6881:                                             ; preds = %6901, %6880
  %6882 = load i8, ptr %552, align 1, !tbaa !9, !range !40, !noundef !41
  %6883 = trunc i8 %6882 to i1
  br i1 %6883, label %6885, label %6884

6884:                                             ; preds = %6881
  store i32 526, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %552) #10
  br label %6902

6885:                                             ; preds = %6881
  call void @llvm.lifetime.start.p0(i64 8, ptr %553) #10
  %6886 = load ptr, ptr %513, align 8, !tbaa !5
  %6887 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %6886)
          to label %6888 unwind label %6894

6888:                                             ; preds = %6885
  store ptr %6887, ptr %553, align 8, !tbaa !5
  br label %6889

6889:                                             ; preds = %6899, %6888
  %6890 = load ptr, ptr %553, align 8, !tbaa !5
  %6891 = load i8, ptr %552, align 1, !tbaa !9, !range !40, !noundef !41
  %6892 = trunc i8 %6891 to i1
  br i1 %6892, label %6898, label %6893

6893:                                             ; preds = %6889
  store i32 529, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %553) #10
  br label %6900

6894:                                             ; preds = %6885
  %6895 = landingpad { ptr, i32 }
          cleanup
  %6896 = extractvalue { ptr, i32 } %6895, 0
  store ptr %6896, ptr %11, align 8
  %6897 = extractvalue { ptr, i32 } %6895, 1
  store i32 %6897, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %553) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %552) #10
  br label %6905

6898:                                             ; preds = %6889
  br label %6899

6899:                                             ; preds = %6898
  store i8 0, ptr %552, align 1, !tbaa !9
  br label %6889, !llvm.loop !188

6900:                                             ; preds = %6893
  br label %6901

6901:                                             ; preds = %6900
  store i8 0, ptr %552, align 1, !tbaa !9
  br label %6881, !llvm.loop !189

6902:                                             ; preds = %6884
  br label %6903

6903:                                             ; preds = %6902, %6879, %6856, %6833, %6810, %6787, %6764, %6719, %6696, %6578, %6482
  br label %6904

6904:                                             ; preds = %6903
  store i8 0, ptr %512, align 1, !tbaa !9
  br label %6475, !llvm.loop !190

6905:                                             ; preds = %6894, %6871, %6848, %6825, %6802, %6779, %6761, %6711, %6693, %6575, %6483
  call void @llvm.lifetime.end.p0(i64 8, ptr %513) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %512) #10
  br label %7115

6906:                                             ; preds = %6478
  br label %6907

6907:                                             ; preds = %6906
  store i8 0, ptr %512, align 1, !tbaa !9
  br label %6469, !llvm.loop !191

6908:                                             ; preds = %6472
  br label %7069

6909:                                             ; preds = %6456
  %6910 = load ptr, ptr %509, align 8, !tbaa !5
  %6911 = invoke noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %6910)
          to label %6912 unwind label %6913

6912:                                             ; preds = %6909
  switch i32 %6911, label %7068 [
    i32 0, label %6917
    i32 2, label %6918
    i32 1, label %6927
    i32 3, label %6963
    i32 4, label %7005
    i32 5, label %7014
    i32 6, label %7023
    i32 7, label %7032
    i32 8, label %7041
    i32 9, label %7050
    i32 10, label %7059
  ]

6913:                                             ; preds = %7094, %7092, %7090, %7088, %7084, %7082, %7079, %7076, %7073, %6909
  %6914 = landingpad { ptr, i32 }
          cleanup
  %6915 = extractvalue { ptr, i32 } %6914, 0
  store ptr %6915, ptr %11, align 8
  %6916 = extractvalue { ptr, i32 } %6914, 1
  store i32 %6916, ptr %12, align 4
  br label %7115

6917:                                             ; preds = %6912
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 4414, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

6918:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %554) #10
  %6919 = load ptr, ptr %509, align 8, !tbaa !5
  %6920 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %6919)
          to label %6921 unwind label %6923

6921:                                             ; preds = %6918
  store ptr %6920, ptr %554, align 8, !tbaa !5
  %6922 = load ptr, ptr %554, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %554) #10
  br label %7068

6923:                                             ; preds = %6918
  %6924 = landingpad { ptr, i32 }
          cleanup
  %6925 = extractvalue { ptr, i32 } %6924, 0
  store ptr %6925, ptr %11, align 8
  %6926 = extractvalue { ptr, i32 } %6924, 1
  store i32 %6926, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %554) #10
  br label %7115

6927:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %555) #10
  %6928 = load ptr, ptr %509, align 8, !tbaa !5
  %6929 = invoke noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %6928)
          to label %6930 unwind label %6949

6930:                                             ; preds = %6927
  store ptr %6929, ptr %555, align 8, !tbaa !5
  %6931 = load ptr, ptr %555, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr %556) #10
  %6932 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %557, i32 0, i32 0
  %6933 = load ptr, ptr %555, align 8, !tbaa !5
  %6934 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6933, i32 0, i32 0
  %6935 = invoke { i64, i64 } @_ZNK4S128ngEv(ptr noundef nonnull align 8 dereferenceable(16) %6934)
          to label %6936 unwind label %6953

6936:                                             ; preds = %6930
  %6937 = getelementptr inbounds %class.S128, ptr %6932, i32 0, i32 0
  %6938 = getelementptr inbounds { i64, i64 }, ptr %6937, i32 0, i32 0
  %6939 = extractvalue { i64, i64 } %6935, 0
  store i64 %6939, ptr %6938, align 8
  %6940 = getelementptr inbounds { i64, i64 }, ptr %6937, i32 0, i32 1
  %6941 = extractvalue { i64, i64 } %6935, 1
  store i64 %6941, ptr %6940, align 8
  %6942 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %557, i32 0, i32 1
  %6943 = load ptr, ptr %555, align 8, !tbaa !5
  %6944 = getelementptr inbounds %"struct.MIR::Constant::Data_Int", ptr %6943, i32 0, i32 1
  %6945 = load i32, ptr %6944, align 8, !tbaa !60
  store i32 %6945, ptr %6942, align 8, !tbaa !60
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %556, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8 %557)
          to label %6946 unwind label %6953

6946:                                             ; preds = %6936
  %6947 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %510, ptr noundef nonnull align 8 dereferenceable(40) %556)
          to label %6948 unwind label %6957

6948:                                             ; preds = %6946
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %556) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %556) #10
  store i8 1, ptr %511, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 8, ptr %555) #10
  br label %7068

6949:                                             ; preds = %6927
  %6950 = landingpad { ptr, i32 }
          cleanup
  %6951 = extractvalue { ptr, i32 } %6950, 0
  store ptr %6951, ptr %11, align 8
  %6952 = extractvalue { ptr, i32 } %6950, 1
  store i32 %6952, ptr %12, align 4
  br label %6962

6953:                                             ; preds = %6936, %6930
  %6954 = landingpad { ptr, i32 }
          cleanup
  %6955 = extractvalue { ptr, i32 } %6954, 0
  store ptr %6955, ptr %11, align 8
  %6956 = extractvalue { ptr, i32 } %6954, 1
  store i32 %6956, ptr %12, align 4
  br label %6961

6957:                                             ; preds = %6946
  %6958 = landingpad { ptr, i32 }
          cleanup
  %6959 = extractvalue { ptr, i32 } %6958, 0
  store ptr %6959, ptr %11, align 8
  %6960 = extractvalue { ptr, i32 } %6958, 1
  store i32 %6960, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %556) #10
  br label %6961

6961:                                             ; preds = %6957, %6953
  call void @llvm.lifetime.end.p0(i64 40, ptr %556) #10
  br label %6962

6962:                                             ; preds = %6961, %6949
  call void @llvm.lifetime.end.p0(i64 8, ptr %555) #10
  br label %7115

6963:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %558) #10
  %6964 = load ptr, ptr %509, align 8, !tbaa !5
  %6965 = invoke noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %6964)
          to label %6966 unwind label %6990

6966:                                             ; preds = %6963
  store ptr %6965, ptr %558, align 8, !tbaa !5
  %6967 = load ptr, ptr %558, align 8, !tbaa !5
  %6968 = load ptr, ptr %558, align 8, !tbaa !5
  %6969 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %6968, i32 0, i32 0
  %6970 = load double, ptr %6969, align 8, !tbaa !57
  %6971 = invoke noundef zeroext i1 @_ZSt5isnand(double noundef %6970)
          to label %6972 unwind label %6990

6972:                                             ; preds = %6966
  br i1 %6971, label %7003, label %6973

6973:                                             ; preds = %6972
  call void @llvm.lifetime.start.p0(i64 40, ptr %559) #10
  %6974 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %560, i32 0, i32 0
  %6975 = load ptr, ptr %558, align 8, !tbaa !5
  %6976 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %6975, i32 0, i32 0
  %6977 = load double, ptr %6976, align 8, !tbaa !57
  %6978 = fneg double %6977
  store double %6978, ptr %6974, align 8, !tbaa !57
  %6979 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %560, i32 0, i32 1
  %6980 = load ptr, ptr %558, align 8, !tbaa !5
  %6981 = getelementptr inbounds %"struct.MIR::Constant::Data_Float", ptr %6980, i32 0, i32 1
  %6982 = load i32, ptr %6981, align 8, !tbaa !70
  store i32 %6982, ptr %6979, align 8, !tbaa !70
  %6983 = getelementptr inbounds { double, i32 }, ptr %560, i32 0, i32 0
  %6984 = load double, ptr %6983, align 8
  %6985 = getelementptr inbounds { double, i32 }, ptr %560, i32 0, i32 1
  %6986 = load i32, ptr %6985, align 8
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %559, double %6984, i32 %6986)
          to label %6987 unwind label %6994

6987:                                             ; preds = %6973
  %6988 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %510, ptr noundef nonnull align 8 dereferenceable(40) %559)
          to label %6989 unwind label %6998

6989:                                             ; preds = %6987
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %559) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %559) #10
  store i8 1, ptr %511, align 1, !tbaa !9
  br label %7003

6990:                                             ; preds = %6966, %6963
  %6991 = landingpad { ptr, i32 }
          cleanup
  %6992 = extractvalue { ptr, i32 } %6991, 0
  store ptr %6992, ptr %11, align 8
  %6993 = extractvalue { ptr, i32 } %6991, 1
  store i32 %6993, ptr %12, align 4
  br label %7004

6994:                                             ; preds = %6973
  %6995 = landingpad { ptr, i32 }
          cleanup
  %6996 = extractvalue { ptr, i32 } %6995, 0
  store ptr %6996, ptr %11, align 8
  %6997 = extractvalue { ptr, i32 } %6995, 1
  store i32 %6997, ptr %12, align 4
  br label %7002

6998:                                             ; preds = %6987
  %6999 = landingpad { ptr, i32 }
          cleanup
  %7000 = extractvalue { ptr, i32 } %6999, 0
  store ptr %7000, ptr %11, align 8
  %7001 = extractvalue { ptr, i32 } %6999, 1
  store i32 %7001, ptr %12, align 4
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %559) #10
  br label %7002

7002:                                             ; preds = %6998, %6994
  call void @llvm.lifetime.end.p0(i64 40, ptr %559) #10
  br label %7004

7003:                                             ; preds = %6989, %6972
  call void @llvm.lifetime.end.p0(i64 8, ptr %558) #10
  br label %7068

7004:                                             ; preds = %7002, %6990
  call void @llvm.lifetime.end.p0(i64 8, ptr %558) #10
  br label %7115

7005:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %561) #10
  %7006 = load ptr, ptr %509, align 8, !tbaa !5
  %7007 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %7006)
          to label %7008 unwind label %7010

7008:                                             ; preds = %7005
  store ptr %7007, ptr %561, align 8, !tbaa !5
  %7009 = load ptr, ptr %561, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %561) #10
  br label %7068

7010:                                             ; preds = %7005
  %7011 = landingpad { ptr, i32 }
          cleanup
  %7012 = extractvalue { ptr, i32 } %7011, 0
  store ptr %7012, ptr %11, align 8
  %7013 = extractvalue { ptr, i32 } %7011, 1
  store i32 %7013, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %561) #10
  br label %7115

7014:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %562) #10
  %7015 = load ptr, ptr %509, align 8, !tbaa !5
  %7016 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40) %7015)
          to label %7017 unwind label %7019

7017:                                             ; preds = %7014
  store ptr %7016, ptr %562, align 8, !tbaa !5
  %7018 = load ptr, ptr %562, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %562) #10
  br label %7068

7019:                                             ; preds = %7014
  %7020 = landingpad { ptr, i32 }
          cleanup
  %7021 = extractvalue { ptr, i32 } %7020, 0
  store ptr %7021, ptr %11, align 8
  %7022 = extractvalue { ptr, i32 } %7020, 1
  store i32 %7022, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %562) #10
  br label %7115

7023:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %563) #10
  %7024 = load ptr, ptr %509, align 8, !tbaa !5
  %7025 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40) %7024)
          to label %7026 unwind label %7028

7026:                                             ; preds = %7023
  store ptr %7025, ptr %563, align 8, !tbaa !5
  %7027 = load ptr, ptr %563, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %563) #10
  br label %7068

7028:                                             ; preds = %7023
  %7029 = landingpad { ptr, i32 }
          cleanup
  %7030 = extractvalue { ptr, i32 } %7029, 0
  store ptr %7030, ptr %11, align 8
  %7031 = extractvalue { ptr, i32 } %7029, 1
  store i32 %7031, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %563) #10
  br label %7115

7032:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %564) #10
  %7033 = load ptr, ptr %509, align 8, !tbaa !5
  %7034 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %7033)
          to label %7035 unwind label %7037

7035:                                             ; preds = %7032
  store ptr %7034, ptr %564, align 8, !tbaa !5
  %7036 = load ptr, ptr %564, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %564) #10
  br label %7068

7037:                                             ; preds = %7032
  %7038 = landingpad { ptr, i32 }
          cleanup
  %7039 = extractvalue { ptr, i32 } %7038, 0
  store ptr %7039, ptr %11, align 8
  %7040 = extractvalue { ptr, i32 } %7038, 1
  store i32 %7040, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %564) #10
  br label %7115

7041:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %565) #10
  %7042 = load ptr, ptr %509, align 8, !tbaa !5
  %7043 = invoke noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %7042)
          to label %7044 unwind label %7046

7044:                                             ; preds = %7041
  store ptr %7043, ptr %565, align 8, !tbaa !5
  %7045 = load ptr, ptr %565, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %565) #10
  br label %7068

7046:                                             ; preds = %7041
  %7047 = landingpad { ptr, i32 }
          cleanup
  %7048 = extractvalue { ptr, i32 } %7047, 0
  store ptr %7048, ptr %11, align 8
  %7049 = extractvalue { ptr, i32 } %7047, 1
  store i32 %7049, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %565) #10
  br label %7115

7050:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %566) #10
  %7051 = load ptr, ptr %509, align 8, !tbaa !5
  %7052 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40) %7051)
          to label %7053 unwind label %7055

7053:                                             ; preds = %7050
  store ptr %7052, ptr %566, align 8, !tbaa !5
  %7054 = load ptr, ptr %566, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %566) #10
  br label %7068

7055:                                             ; preds = %7050
  %7056 = landingpad { ptr, i32 }
          cleanup
  %7057 = extractvalue { ptr, i32 } %7056, 0
  store ptr %7057, ptr %11, align 8
  %7058 = extractvalue { ptr, i32 } %7056, 1
  store i32 %7058, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %566) #10
  br label %7115

7059:                                             ; preds = %6912
  call void @llvm.lifetime.start.p0(i64 8, ptr %567) #10
  %7060 = load ptr, ptr %509, align 8, !tbaa !5
  %7061 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %7060)
          to label %7062 unwind label %7064

7062:                                             ; preds = %7059
  store ptr %7061, ptr %567, align 8, !tbaa !5
  %7063 = load ptr, ptr %567, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %567) #10
  br label %7068

7064:                                             ; preds = %7059
  %7065 = landingpad { ptr, i32 }
          cleanup
  %7066 = extractvalue { ptr, i32 } %7065, 0
  store ptr %7066, ptr %11, align 8
  %7067 = extractvalue { ptr, i32 } %7065, 1
  store i32 %7067, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %567) #10
  br label %7115

7068:                                             ; preds = %7062, %7053, %7044, %7035, %7026, %7017, %7008, %7003, %6948, %6921, %6912
  br label %7069

7069:                                             ; preds = %7068, %6908, %6456
  %7070 = load i8, ptr %511, align 1, !tbaa !9, !range !40, !noundef !41
  %7071 = trunc i8 %7070 to i1
  br i1 %7071, label %7072, label %7114

7072:                                             ; preds = %7069
  br label %7073

7073:                                             ; preds = %7072
  %7074 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %7075 unwind label %6913

7075:                                             ; preds = %7073
  br i1 %7074, label %7076, label %7097

7076:                                             ; preds = %7075
  %7077 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %7078 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %7077, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %7079 unwind label %6913

7079:                                             ; preds = %7076
  %7080 = load ptr, ptr %3, align 8, !tbaa !5
  %7081 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %7078, ptr noundef nonnull align 8 dereferenceable(120) %7080)
          to label %7082 unwind label %6913

7082:                                             ; preds = %7079
  %7083 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %7081, ptr noundef @.str.38)
          to label %7084 unwind label %6913

7084:                                             ; preds = %7082
  %7085 = load ptr, ptr %104, align 8, !tbaa !5
  %7086 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7085, i32 0, i32 1
  %7087 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %7083, ptr noundef nonnull align 8 dereferenceable(112) %7086)
          to label %7088 unwind label %6913

7088:                                             ; preds = %7084
  %7089 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %7087, ptr noundef @.str.60)
          to label %7090 unwind label %6913

7090:                                             ; preds = %7088
  %7091 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %7089, ptr noundef nonnull align 8 dereferenceable(40) %510)
          to label %7092 unwind label %6913

7092:                                             ; preds = %7090
  %7093 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %7091, ptr noundef @_ZSt3decRSt8ios_base)
          to label %7094 unwind label %6913

7094:                                             ; preds = %7092
  %7095 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %7093, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %7096 unwind label %6913

7096:                                             ; preds = %7094
  br label %7097

7097:                                             ; preds = %7096, %7075
  br label %7098

7098:                                             ; preds = %7097
  br label %7099

7099:                                             ; preds = %7098
  call void @llvm.lifetime.start.p0(i64 112, ptr %568) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %569, ptr noundef nonnull align 8 dereferenceable(40) %510) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %568, ptr noundef %569)
          to label %7100 unwind label %7105

7100:                                             ; preds = %7099
  %7101 = load ptr, ptr %104, align 8, !tbaa !5
  %7102 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7101, i32 0, i32 1
  %7103 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %7102, ptr noundef nonnull align 8 dereferenceable(112) %568)
          to label %7104 unwind label %7109

7104:                                             ; preds = %7100
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %568) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %569) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %568) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %7114

7105:                                             ; preds = %7099
  %7106 = landingpad { ptr, i32 }
          cleanup
  %7107 = extractvalue { ptr, i32 } %7106, 0
  store ptr %7107, ptr %11, align 8
  %7108 = extractvalue { ptr, i32 } %7106, 1
  store i32 %7108, ptr %12, align 4
  br label %7113

7109:                                             ; preds = %7100
  %7110 = landingpad { ptr, i32 }
          cleanup
  %7111 = extractvalue { ptr, i32 } %7110, 0
  store ptr %7111, ptr %11, align 8
  %7112 = extractvalue { ptr, i32 } %7110, 1
  store i32 %7112, ptr %12, align 4
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %568) #10
  br label %7113

7113:                                             ; preds = %7109, %7105
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %569) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr %568) #10
  br label %7115

7114:                                             ; preds = %7104, %7069
  call void @llvm.lifetime.end.p0(i64 1, ptr %511) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %510) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %510) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %509) #10
  br label %7117

7115:                                             ; preds = %7113, %7064, %7055, %7046, %7037, %7028, %7019, %7010, %7004, %6962, %6923, %6913, %6905
  call void @llvm.lifetime.end.p0(i64 1, ptr %511) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %510) #10
  br label %7116

7116:                                             ; preds = %7115, %6464
  call void @llvm.lifetime.end.p0(i64 40, ptr %510) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %509) #10
  br label %7119

7117:                                             ; preds = %7114, %6448
  call void @llvm.lifetime.end.p0(i64 8, ptr %507) #10
  br label %7118

7118:                                             ; preds = %7117
  store i8 0, ptr %505, align 1, !tbaa !9
  br label %6435, !llvm.loop !192

7119:                                             ; preds = %7116, %6460
  call void @llvm.lifetime.end.p0(i64 8, ptr %507) #10
  br label %7120

7120:                                             ; preds = %7119, %6440
  call void @llvm.lifetime.end.p0(i64 8, ptr %506) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %505) #10
  br label %7434

7121:                                             ; preds = %6439
  br label %7122

7122:                                             ; preds = %7121
  store i8 0, ptr %505, align 1, !tbaa !9
  br label %6427, !llvm.loop !193

7123:                                             ; preds = %6430
  br label %7432

7124:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %570) #10
  store i8 1, ptr %570, align 1, !tbaa !9
  br label %7125

7125:                                             ; preds = %7145, %7124
  %7126 = load i8, ptr %570, align 1, !tbaa !9, !range !40, !noundef !41
  %7127 = trunc i8 %7126 to i1
  br i1 %7127, label %7129, label %7128

7128:                                             ; preds = %7125
  store i32 535, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %570) #10
  br label %7146

7129:                                             ; preds = %7125
  call void @llvm.lifetime.start.p0(i64 8, ptr %571) #10
  %7130 = load ptr, ptr %106, align 8, !tbaa !5
  %7131 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue10as_DstMetaEv(ptr noundef nonnull align 8 dereferenceable(112) %7130)
          to label %7132 unwind label %7138

7132:                                             ; preds = %7129
  store ptr %7131, ptr %571, align 8, !tbaa !5
  br label %7133

7133:                                             ; preds = %7143, %7132
  %7134 = load ptr, ptr %571, align 8, !tbaa !5
  %7135 = load i8, ptr %570, align 1, !tbaa !9, !range !40, !noundef !41
  %7136 = trunc i8 %7135 to i1
  br i1 %7136, label %7142, label %7137

7137:                                             ; preds = %7133
  store i32 538, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %571) #10
  br label %7144

7138:                                             ; preds = %7129
  %7139 = landingpad { ptr, i32 }
          cleanup
  %7140 = extractvalue { ptr, i32 } %7139, 0
  store ptr %7140, ptr %11, align 8
  %7141 = extractvalue { ptr, i32 } %7139, 1
  store i32 %7141, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %571) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %570) #10
  br label %7434

7142:                                             ; preds = %7133
  br label %7143

7143:                                             ; preds = %7142
  store i8 0, ptr %570, align 1, !tbaa !9
  br label %7133, !llvm.loop !194

7144:                                             ; preds = %7137
  br label %7145

7145:                                             ; preds = %7144
  store i8 0, ptr %570, align 1, !tbaa !9
  br label %7125, !llvm.loop !195

7146:                                             ; preds = %7128
  br label %7432

7147:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %572) #10
  store i8 1, ptr %572, align 1, !tbaa !9
  br label %7148

7148:                                             ; preds = %7168, %7147
  %7149 = load i8, ptr %572, align 1, !tbaa !9, !range !40, !noundef !41
  %7150 = trunc i8 %7149 to i1
  br i1 %7150, label %7152, label %7151

7151:                                             ; preds = %7148
  store i32 541, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %572) #10
  br label %7169

7152:                                             ; preds = %7148
  call void @llvm.lifetime.start.p0(i64 8, ptr %573) #10
  %7153 = load ptr, ptr %106, align 8, !tbaa !5
  %7154 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue9as_DstPtrEv(ptr noundef nonnull align 8 dereferenceable(112) %7153)
          to label %7155 unwind label %7161

7155:                                             ; preds = %7152
  store ptr %7154, ptr %573, align 8, !tbaa !5
  br label %7156

7156:                                             ; preds = %7166, %7155
  %7157 = load ptr, ptr %573, align 8, !tbaa !5
  %7158 = load i8, ptr %572, align 1, !tbaa !9, !range !40, !noundef !41
  %7159 = trunc i8 %7158 to i1
  br i1 %7159, label %7165, label %7160

7160:                                             ; preds = %7156
  store i32 544, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %573) #10
  br label %7167

7161:                                             ; preds = %7152
  %7162 = landingpad { ptr, i32 }
          cleanup
  %7163 = extractvalue { ptr, i32 } %7162, 0
  store ptr %7163, ptr %11, align 8
  %7164 = extractvalue { ptr, i32 } %7162, 1
  store i32 %7164, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %573) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %572) #10
  br label %7434

7165:                                             ; preds = %7156
  br label %7166

7166:                                             ; preds = %7165
  store i8 0, ptr %572, align 1, !tbaa !9
  br label %7156, !llvm.loop !196

7167:                                             ; preds = %7160
  br label %7168

7168:                                             ; preds = %7167
  store i8 0, ptr %572, align 1, !tbaa !9
  br label %7148, !llvm.loop !197

7169:                                             ; preds = %7151
  br label %7432

7170:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %574) #10
  store i8 1, ptr %574, align 1, !tbaa !9
  br label %7171

7171:                                             ; preds = %7220, %7170
  %7172 = load i8, ptr %574, align 1, !tbaa !9, !range !40, !noundef !41
  %7173 = trunc i8 %7172 to i1
  br i1 %7173, label %7175, label %7174

7174:                                             ; preds = %7171
  store i32 547, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %574) #10
  br label %7221

7175:                                             ; preds = %7171
  call void @llvm.lifetime.start.p0(i64 8, ptr %575) #10
  %7176 = load ptr, ptr %106, align 8, !tbaa !5
  %7177 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZN3MIR6RValue10as_MakeDstEv(ptr noundef nonnull align 8 dereferenceable(112) %7176)
          to label %7178 unwind label %7184

7178:                                             ; preds = %7175
  store ptr %7177, ptr %575, align 8, !tbaa !5
  br label %7179

7179:                                             ; preds = %7218, %7178
  %7180 = load ptr, ptr %575, align 8, !tbaa !5
  %7181 = load i8, ptr %574, align 1, !tbaa !9, !range !40, !noundef !41
  %7182 = trunc i8 %7181 to i1
  br i1 %7182, label %7188, label %7183

7183:                                             ; preds = %7179
  store i32 550, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %575) #10
  br label %7219

7184:                                             ; preds = %7213, %7210, %7204, %7200, %7197, %7193, %7188, %7175
  %7185 = landingpad { ptr, i32 }
          cleanup
  %7186 = extractvalue { ptr, i32 } %7185, 0
  store ptr %7186, ptr %11, align 8
  %7187 = extractvalue { ptr, i32 } %7185, 1
  store i32 %7187, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %575) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %574) #10
  br label %7434

7188:                                             ; preds = %7179
  %7189 = load ptr, ptr %575, align 8, !tbaa !5
  %7190 = getelementptr inbounds %"struct.MIR::RValue::Data_MakeDst", ptr %7189, i32 0, i32 1
  %7191 = invoke noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %7190)
          to label %7192 unwind label %7184

7192:                                             ; preds = %7188
  br i1 %7191, label %7193, label %7210

7193:                                             ; preds = %7192
  %7194 = load ptr, ptr %575, align 8, !tbaa !5
  %7195 = getelementptr inbounds %"struct.MIR::RValue::Data_MakeDst", ptr %7194, i32 0, i32 1
  %7196 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %7195)
          to label %7197 unwind label %7184

7197:                                             ; preds = %7193
  %7198 = invoke noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %7196)
          to label %7199 unwind label %7184

7199:                                             ; preds = %7197
  br i1 %7198, label %7200, label %7210

7200:                                             ; preds = %7199
  %7201 = load ptr, ptr %575, align 8, !tbaa !5
  %7202 = getelementptr inbounds %"struct.MIR::RValue::Data_MakeDst", ptr %7201, i32 0, i32 1
  %7203 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %7202)
          to label %7204 unwind label %7184

7204:                                             ; preds = %7200
  %7205 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %7203)
          to label %7206 unwind label %7184

7206:                                             ; preds = %7204
  %7207 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %7205) #10
  %7208 = icmp eq ptr %7207, null
  br i1 %7208, label %7209, label %7210

7209:                                             ; preds = %7206
  br label %7217

7210:                                             ; preds = %7206, %7199, %7192
  %7211 = load ptr, ptr %575, align 8, !tbaa !5
  %7212 = getelementptr inbounds %"struct.MIR::RValue::Data_MakeDst", ptr %7211, i32 0, i32 0
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7212)
          to label %7213 unwind label %7184

7213:                                             ; preds = %7210
  %7214 = load ptr, ptr %575, align 8, !tbaa !5
  %7215 = getelementptr inbounds %"struct.MIR::RValue::Data_MakeDst", ptr %7214, i32 0, i32 1
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7215)
          to label %7216 unwind label %7184

7216:                                             ; preds = %7213
  br label %7217

7217:                                             ; preds = %7216, %7209
  br label %7218

7218:                                             ; preds = %7217
  store i8 0, ptr %574, align 1, !tbaa !9
  br label %7179, !llvm.loop !198

7219:                                             ; preds = %7183
  br label %7220

7220:                                             ; preds = %7219
  store i8 0, ptr %574, align 1, !tbaa !9
  br label %7171, !llvm.loop !199

7221:                                             ; preds = %7174
  br label %7432

7222:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %576) #10
  store i8 1, ptr %576, align 1, !tbaa !9
  br label %7223

7223:                                             ; preds = %7266, %7222
  %7224 = load i8, ptr %576, align 1, !tbaa !9, !range !40, !noundef !41
  %7225 = trunc i8 %7224 to i1
  br i1 %7225, label %7227, label %7226

7226:                                             ; preds = %7223
  store i32 553, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %576) #10
  br label %7267

7227:                                             ; preds = %7223
  call void @llvm.lifetime.start.p0(i64 8, ptr %577) #10
  %7228 = load ptr, ptr %106, align 8, !tbaa !5
  %7229 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(112) %7228)
          to label %7230 unwind label %7236

7230:                                             ; preds = %7227
  store ptr %7229, ptr %577, align 8, !tbaa !5
  br label %7231

7231:                                             ; preds = %7263, %7230
  %7232 = load ptr, ptr %577, align 8, !tbaa !5
  %7233 = load i8, ptr %576, align 1, !tbaa !9, !range !40, !noundef !41
  %7234 = trunc i8 %7233 to i1
  br i1 %7234, label %7240, label %7235

7235:                                             ; preds = %7231
  store i32 556, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %577) #10
  br label %7265

7236:                                             ; preds = %7227
  %7237 = landingpad { ptr, i32 }
          cleanup
  %7238 = extractvalue { ptr, i32 } %7237, 0
  store ptr %7238, ptr %11, align 8
  %7239 = extractvalue { ptr, i32 } %7237, 1
  store i32 %7239, ptr %12, align 4
  br label %7264

7240:                                             ; preds = %7231
  call void @llvm.lifetime.start.p0(i64 8, ptr %578) #10
  %7241 = load ptr, ptr %577, align 8, !tbaa !5
  %7242 = getelementptr inbounds %"struct.MIR::RValue::Data_Tuple", ptr %7241, i32 0, i32 0
  store ptr %7242, ptr %578, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %579) #10
  %7243 = load ptr, ptr %578, align 8, !tbaa !5
  %7244 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7243) #10
  %7245 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %579, i32 0, i32 0
  store ptr %7244, ptr %7245, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %580) #10
  %7246 = load ptr, ptr %578, align 8, !tbaa !5
  %7247 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7246) #10
  %7248 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %580, i32 0, i32 0
  store ptr %7247, ptr %7248, align 8
  br label %7249

7249:                                             ; preds = %7256, %7240
  %7250 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %579, ptr noundef nonnull align 8 dereferenceable(8) %580) #10
  br i1 %7250, label %7252, label %7251

7251:                                             ; preds = %7249
  store i32 559, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %580) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %579) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %578) #10
  br label %7262

7252:                                             ; preds = %7249
  call void @llvm.lifetime.start.p0(i64 8, ptr %581) #10
  %7253 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %579) #10
  store ptr %7253, ptr %581, align 8, !tbaa !5
  %7254 = load ptr, ptr %581, align 8, !tbaa !5
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7254)
          to label %7255 unwind label %7258

7255:                                             ; preds = %7252
  call void @llvm.lifetime.end.p0(i64 8, ptr %581) #10
  br label %7256

7256:                                             ; preds = %7255
  %7257 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %579) #10
  br label %7249

7258:                                             ; preds = %7252
  %7259 = landingpad { ptr, i32 }
          cleanup
  %7260 = extractvalue { ptr, i32 } %7259, 0
  store ptr %7260, ptr %11, align 8
  %7261 = extractvalue { ptr, i32 } %7259, 1
  store i32 %7261, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %581) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %580) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %579) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %578) #10
  br label %7264

7262:                                             ; preds = %7251
  br label %7263

7263:                                             ; preds = %7262
  store i8 0, ptr %576, align 1, !tbaa !9
  br label %7231, !llvm.loop !200

7264:                                             ; preds = %7258, %7236
  call void @llvm.lifetime.end.p0(i64 8, ptr %577) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %576) #10
  br label %7434

7265:                                             ; preds = %7235
  br label %7266

7266:                                             ; preds = %7265
  store i8 0, ptr %576, align 1, !tbaa !9
  br label %7223, !llvm.loop !201

7267:                                             ; preds = %7226
  br label %7432

7268:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %582) #10
  store i8 1, ptr %582, align 1, !tbaa !9
  br label %7269

7269:                                             ; preds = %7312, %7268
  %7270 = load i8, ptr %582, align 1, !tbaa !9, !range !40, !noundef !41
  %7271 = trunc i8 %7270 to i1
  br i1 %7271, label %7273, label %7272

7272:                                             ; preds = %7269
  store i32 561, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %582) #10
  br label %7313

7273:                                             ; preds = %7269
  call void @llvm.lifetime.start.p0(i64 8, ptr %583) #10
  %7274 = load ptr, ptr %106, align 8, !tbaa !5
  %7275 = invoke noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(112) %7274)
          to label %7276 unwind label %7282

7276:                                             ; preds = %7273
  store ptr %7275, ptr %583, align 8, !tbaa !5
  br label %7277

7277:                                             ; preds = %7309, %7276
  %7278 = load ptr, ptr %583, align 8, !tbaa !5
  %7279 = load i8, ptr %582, align 1, !tbaa !9, !range !40, !noundef !41
  %7280 = trunc i8 %7279 to i1
  br i1 %7280, label %7286, label %7281

7281:                                             ; preds = %7277
  store i32 564, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %583) #10
  br label %7311

7282:                                             ; preds = %7273
  %7283 = landingpad { ptr, i32 }
          cleanup
  %7284 = extractvalue { ptr, i32 } %7283, 0
  store ptr %7284, ptr %11, align 8
  %7285 = extractvalue { ptr, i32 } %7283, 1
  store i32 %7285, ptr %12, align 4
  br label %7310

7286:                                             ; preds = %7277
  call void @llvm.lifetime.start.p0(i64 8, ptr %584) #10
  %7287 = load ptr, ptr %583, align 8, !tbaa !5
  %7288 = getelementptr inbounds %"struct.MIR::RValue::Data_Array", ptr %7287, i32 0, i32 0
  store ptr %7288, ptr %584, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %585) #10
  %7289 = load ptr, ptr %584, align 8, !tbaa !5
  %7290 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7289) #10
  %7291 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %585, i32 0, i32 0
  store ptr %7290, ptr %7291, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %586) #10
  %7292 = load ptr, ptr %584, align 8, !tbaa !5
  %7293 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7292) #10
  %7294 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %586, i32 0, i32 0
  store ptr %7293, ptr %7294, align 8
  br label %7295

7295:                                             ; preds = %7302, %7286
  %7296 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %585, ptr noundef nonnull align 8 dereferenceable(8) %586) #10
  br i1 %7296, label %7298, label %7297

7297:                                             ; preds = %7295
  store i32 567, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %586) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %585) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %584) #10
  br label %7308

7298:                                             ; preds = %7295
  call void @llvm.lifetime.start.p0(i64 8, ptr %587) #10
  %7299 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %585) #10
  store ptr %7299, ptr %587, align 8, !tbaa !5
  %7300 = load ptr, ptr %587, align 8, !tbaa !5
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7300)
          to label %7301 unwind label %7304

7301:                                             ; preds = %7298
  call void @llvm.lifetime.end.p0(i64 8, ptr %587) #10
  br label %7302

7302:                                             ; preds = %7301
  %7303 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %585) #10
  br label %7295

7304:                                             ; preds = %7298
  %7305 = landingpad { ptr, i32 }
          cleanup
  %7306 = extractvalue { ptr, i32 } %7305, 0
  store ptr %7306, ptr %11, align 8
  %7307 = extractvalue { ptr, i32 } %7305, 1
  store i32 %7307, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %587) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %586) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %585) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %584) #10
  br label %7310

7308:                                             ; preds = %7297
  br label %7309

7309:                                             ; preds = %7308
  store i8 0, ptr %582, align 1, !tbaa !9
  br label %7277, !llvm.loop !202

7310:                                             ; preds = %7304, %7282
  call void @llvm.lifetime.end.p0(i64 8, ptr %583) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %582) #10
  br label %7434

7311:                                             ; preds = %7281
  br label %7312

7312:                                             ; preds = %7311
  store i8 0, ptr %582, align 1, !tbaa !9
  br label %7269, !llvm.loop !203

7313:                                             ; preds = %7272
  br label %7432

7314:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %588) #10
  store i8 1, ptr %588, align 1, !tbaa !9
  br label %7315

7315:                                             ; preds = %7338, %7314
  %7316 = load i8, ptr %588, align 1, !tbaa !9, !range !40, !noundef !41
  %7317 = trunc i8 %7316 to i1
  br i1 %7317, label %7319, label %7318

7318:                                             ; preds = %7315
  store i32 569, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %588) #10
  br label %7339

7319:                                             ; preds = %7315
  call void @llvm.lifetime.start.p0(i64 8, ptr %589) #10
  %7320 = load ptr, ptr %106, align 8, !tbaa !5
  %7321 = invoke noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6RValue15as_UnionVariantEv(ptr noundef nonnull align 8 dereferenceable(112) %7320)
          to label %7322 unwind label %7328

7322:                                             ; preds = %7319
  store ptr %7321, ptr %589, align 8, !tbaa !5
  br label %7323

7323:                                             ; preds = %7336, %7322
  %7324 = load ptr, ptr %589, align 8, !tbaa !5
  %7325 = load i8, ptr %588, align 1, !tbaa !9, !range !40, !noundef !41
  %7326 = trunc i8 %7325 to i1
  br i1 %7326, label %7332, label %7327

7327:                                             ; preds = %7323
  store i32 572, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #10
  br label %7337

7328:                                             ; preds = %7332, %7319
  %7329 = landingpad { ptr, i32 }
          cleanup
  %7330 = extractvalue { ptr, i32 } %7329, 0
  store ptr %7330, ptr %11, align 8
  %7331 = extractvalue { ptr, i32 } %7329, 1
  store i32 %7331, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %589) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %588) #10
  br label %7434

7332:                                             ; preds = %7323
  %7333 = load ptr, ptr %589, align 8, !tbaa !5
  %7334 = getelementptr inbounds %"struct.MIR::RValue::Data_UnionVariant", ptr %7333, i32 0, i32 2
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7334)
          to label %7335 unwind label %7328

7335:                                             ; preds = %7332
  br label %7336

7336:                                             ; preds = %7335
  store i8 0, ptr %588, align 1, !tbaa !9
  br label %7323, !llvm.loop !204

7337:                                             ; preds = %7327
  br label %7338

7338:                                             ; preds = %7337
  store i8 0, ptr %588, align 1, !tbaa !9
  br label %7315, !llvm.loop !205

7339:                                             ; preds = %7318
  br label %7432

7340:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %590) #10
  store i8 1, ptr %590, align 1, !tbaa !9
  br label %7341

7341:                                             ; preds = %7384, %7340
  %7342 = load i8, ptr %590, align 1, !tbaa !9, !range !40, !noundef !41
  %7343 = trunc i8 %7342 to i1
  br i1 %7343, label %7345, label %7344

7344:                                             ; preds = %7341
  store i32 575, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %590) #10
  br label %7385

7345:                                             ; preds = %7341
  call void @llvm.lifetime.start.p0(i64 8, ptr %591) #10
  %7346 = load ptr, ptr %106, align 8, !tbaa !5
  %7347 = invoke noundef nonnull align 8 dereferenceable(64) ptr @_ZN3MIR6RValue14as_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112) %7346)
          to label %7348 unwind label %7354

7348:                                             ; preds = %7345
  store ptr %7347, ptr %591, align 8, !tbaa !5
  br label %7349

7349:                                             ; preds = %7381, %7348
  %7350 = load ptr, ptr %591, align 8, !tbaa !5
  %7351 = load i8, ptr %590, align 1, !tbaa !9, !range !40, !noundef !41
  %7352 = trunc i8 %7351 to i1
  br i1 %7352, label %7358, label %7353

7353:                                             ; preds = %7349
  store i32 578, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %591) #10
  br label %7383

7354:                                             ; preds = %7345
  %7355 = landingpad { ptr, i32 }
          cleanup
  %7356 = extractvalue { ptr, i32 } %7355, 0
  store ptr %7356, ptr %11, align 8
  %7357 = extractvalue { ptr, i32 } %7355, 1
  store i32 %7357, ptr %12, align 4
  br label %7382

7358:                                             ; preds = %7349
  call void @llvm.lifetime.start.p0(i64 8, ptr %592) #10
  %7359 = load ptr, ptr %591, align 8, !tbaa !5
  %7360 = getelementptr inbounds %"struct.MIR::RValue::Data_EnumVariant", ptr %7359, i32 0, i32 2
  store ptr %7360, ptr %592, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %593) #10
  %7361 = load ptr, ptr %592, align 8, !tbaa !5
  %7362 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7361) #10
  %7363 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %593, i32 0, i32 0
  store ptr %7362, ptr %7363, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %594) #10
  %7364 = load ptr, ptr %592, align 8, !tbaa !5
  %7365 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7364) #10
  %7366 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %594, i32 0, i32 0
  store ptr %7365, ptr %7366, align 8
  br label %7367

7367:                                             ; preds = %7374, %7358
  %7368 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %593, ptr noundef nonnull align 8 dereferenceable(8) %594) #10
  br i1 %7368, label %7370, label %7369

7369:                                             ; preds = %7367
  store i32 581, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %594) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %593) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %592) #10
  br label %7380

7370:                                             ; preds = %7367
  call void @llvm.lifetime.start.p0(i64 8, ptr %595) #10
  %7371 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %593) #10
  store ptr %7371, ptr %595, align 8, !tbaa !5
  %7372 = load ptr, ptr %595, align 8, !tbaa !5
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7372)
          to label %7373 unwind label %7376

7373:                                             ; preds = %7370
  call void @llvm.lifetime.end.p0(i64 8, ptr %595) #10
  br label %7374

7374:                                             ; preds = %7373
  %7375 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %593) #10
  br label %7367

7376:                                             ; preds = %7370
  %7377 = landingpad { ptr, i32 }
          cleanup
  %7378 = extractvalue { ptr, i32 } %7377, 0
  store ptr %7378, ptr %11, align 8
  %7379 = extractvalue { ptr, i32 } %7377, 1
  store i32 %7379, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %595) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %594) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %593) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %592) #10
  br label %7382

7380:                                             ; preds = %7369
  br label %7381

7381:                                             ; preds = %7380
  store i8 0, ptr %590, align 1, !tbaa !9
  br label %7349, !llvm.loop !206

7382:                                             ; preds = %7376, %7354
  call void @llvm.lifetime.end.p0(i64 8, ptr %591) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %590) #10
  br label %7434

7383:                                             ; preds = %7353
  br label %7384

7384:                                             ; preds = %7383
  store i8 0, ptr %590, align 1, !tbaa !9
  br label %7341, !llvm.loop !207

7385:                                             ; preds = %7344
  br label %7432

7386:                                             ; preds = %1676
  call void @llvm.lifetime.start.p0(i64 1, ptr %596) #10
  store i8 1, ptr %596, align 1, !tbaa !9
  br label %7387

7387:                                             ; preds = %7430, %7386
  %7388 = load i8, ptr %596, align 1, !tbaa !9, !range !40, !noundef !41
  %7389 = trunc i8 %7388 to i1
  br i1 %7389, label %7391, label %7390

7390:                                             ; preds = %7387
  store i32 583, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %596) #10
  br label %7431

7391:                                             ; preds = %7387
  call void @llvm.lifetime.start.p0(i64 8, ptr %597) #10
  %7392 = load ptr, ptr %106, align 8, !tbaa !5
  %7393 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR6RValue9as_StructEv(ptr noundef nonnull align 8 dereferenceable(112) %7392)
          to label %7394 unwind label %7400

7394:                                             ; preds = %7391
  store ptr %7393, ptr %597, align 8, !tbaa !5
  br label %7395

7395:                                             ; preds = %7427, %7394
  %7396 = load ptr, ptr %597, align 8, !tbaa !5
  %7397 = load i8, ptr %596, align 1, !tbaa !9, !range !40, !noundef !41
  %7398 = trunc i8 %7397 to i1
  br i1 %7398, label %7404, label %7399

7399:                                             ; preds = %7395
  store i32 586, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %597) #10
  br label %7429

7400:                                             ; preds = %7391
  %7401 = landingpad { ptr, i32 }
          cleanup
  %7402 = extractvalue { ptr, i32 } %7401, 0
  store ptr %7402, ptr %11, align 8
  %7403 = extractvalue { ptr, i32 } %7401, 1
  store i32 %7403, ptr %12, align 4
  br label %7428

7404:                                             ; preds = %7395
  call void @llvm.lifetime.start.p0(i64 8, ptr %598) #10
  %7405 = load ptr, ptr %597, align 8, !tbaa !5
  %7406 = getelementptr inbounds %"struct.MIR::RValue::Data_Struct", ptr %7405, i32 0, i32 1
  store ptr %7406, ptr %598, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %599) #10
  %7407 = load ptr, ptr %598, align 8, !tbaa !5
  %7408 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %7407) #10
  %7409 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %599, i32 0, i32 0
  store ptr %7408, ptr %7409, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %600) #10
  %7410 = load ptr, ptr %598, align 8, !tbaa !5
  %7411 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %7410) #10
  %7412 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %600, i32 0, i32 0
  store ptr %7411, ptr %7412, align 8
  br label %7413

7413:                                             ; preds = %7420, %7404
  %7414 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %599, ptr noundef nonnull align 8 dereferenceable(8) %600) #10
  br i1 %7414, label %7416, label %7415

7415:                                             ; preds = %7413
  store i32 589, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %600) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %599) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %598) #10
  br label %7426

7416:                                             ; preds = %7413
  call void @llvm.lifetime.start.p0(i64 8, ptr %601) #10
  %7417 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %599) #10
  store ptr %7417, ptr %601, align 8, !tbaa !5
  %7418 = load ptr, ptr %601, align 8, !tbaa !5
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %7418)
          to label %7419 unwind label %7422

7419:                                             ; preds = %7416
  call void @llvm.lifetime.end.p0(i64 8, ptr %601) #10
  br label %7420

7420:                                             ; preds = %7419
  %7421 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %599) #10
  br label %7413

7422:                                             ; preds = %7416
  %7423 = landingpad { ptr, i32 }
          cleanup
  %7424 = extractvalue { ptr, i32 } %7423, 0
  store ptr %7424, ptr %11, align 8
  %7425 = extractvalue { ptr, i32 } %7423, 1
  store i32 %7425, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %601) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %600) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %599) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %598) #10
  br label %7428

7426:                                             ; preds = %7415
  br label %7427

7427:                                             ; preds = %7426
  store i8 0, ptr %596, align 1, !tbaa !9
  br label %7395, !llvm.loop !208

7428:                                             ; preds = %7422, %7400
  call void @llvm.lifetime.end.p0(i64 8, ptr %597) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %596) #10
  br label %7434

7429:                                             ; preds = %7399
  br label %7430

7430:                                             ; preds = %7429
  store i8 0, ptr %596, align 1, !tbaa !9
  br label %7387, !llvm.loop !209

7431:                                             ; preds = %7390
  br label %7432

7432:                                             ; preds = %7431, %7385, %7339, %7313, %7267, %7221, %7169, %7146, %7123, %6425, %2493, %1876, %1789, %1763, %1740, %1676
  br label %7433

7433:                                             ; preds = %7432
  store i8 0, ptr %105, align 1, !tbaa !9
  br label %1669, !llvm.loop !210

7434:                                             ; preds = %7428, %7382, %7328, %7310, %7264, %7184, %7161, %7138, %7120, %6422, %2490, %1873, %1778, %1755, %1737, %1677
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #10
  br label %7627

7435:                                             ; preds = %1672
  br label %7436

7436:                                             ; preds = %7435
  store i8 0, ptr %105, align 1, !tbaa !9
  br label %1650, !llvm.loop !211

7437:                                             ; preds = %1653
  br label %7574

7438:                                             ; preds = %1646
  call void @llvm.lifetime.start.p0(i64 8, ptr %602) #10
  %7439 = load ptr, ptr %101, align 8, !tbaa !5
  %7440 = invoke noundef ptr @_ZN3MIR9Statement15opt_SetDropFlagEv(ptr noundef nonnull align 8 dereferenceable(152) %7439)
          to label %7441 unwind label %7463

7441:                                             ; preds = %7438
  store ptr %7440, ptr %602, align 8, !tbaa !5
  %7442 = load ptr, ptr %602, align 8, !tbaa !5
  %7443 = icmp ne ptr %7442, null
  br i1 %7443, label %7444, label %7515

7444:                                             ; preds = %7441
  %7445 = load ptr, ptr %602, align 8, !tbaa !5
  %7446 = getelementptr inbounds %"struct.MIR::Statement::Data_SetDropFlag", ptr %7445, i32 0, i32 2
  %7447 = load i32, ptr %7446, align 4, !tbaa !212
  %7448 = icmp eq i32 %7447, -1
  br i1 %7448, label %7449, label %7471

7449:                                             ; preds = %7444
  call void @llvm.lifetime.start.p0(i64 8, ptr %603) #10
  %7450 = load ptr, ptr %602, align 8, !tbaa !5
  %7451 = getelementptr inbounds %"struct.MIR::Statement::Data_SetDropFlag", ptr %7450, i32 0, i32 0
  %7452 = load ptr, ptr %602, align 8, !tbaa !5
  %7453 = getelementptr inbounds %"struct.MIR::Statement::Data_SetDropFlag", ptr %7452, i32 0, i32 1
  %7454 = invoke i64 @_ZSt9make_pairIRKjRKbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr noundef nonnull align 4 dereferenceable(4) %7451, ptr noundef nonnull align 1 dereferenceable(1) %7453)
          to label %7455 unwind label %7467

7455:                                             ; preds = %7449
  %7456 = trunc i64 %7454 to i40
  store i40 %7456, ptr %603, align 4
  %7457 = invoke { ptr, i8 } @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE6insertIS2_IjbEEENSt9enable_ifIXsr16is_constructibleIS4_T_EE5valueES2_ISt17_Rb_tree_iteratorIS4_EbEE4typeEOSA_(ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef nonnull align 4 dereferenceable(5) %603)
          to label %7458 unwind label %7467

7458:                                             ; preds = %7455
  %7459 = getelementptr inbounds { ptr, i8 }, ptr %604, i32 0, i32 0
  %7460 = extractvalue { ptr, i8 } %7457, 0
  store ptr %7460, ptr %7459, align 8
  %7461 = getelementptr inbounds { ptr, i8 }, ptr %604, i32 0, i32 1
  %7462 = extractvalue { ptr, i8 } %7457, 1
  store i8 %7462, ptr %7461, align 8
  call void @llvm.lifetime.end.p0(i64 8, ptr %603) #10
  br label %7514

7463:                                             ; preds = %7438
  %7464 = landingpad { ptr, i32 }
          cleanup
  %7465 = extractvalue { ptr, i32 } %7464, 0
  store ptr %7465, ptr %11, align 8
  %7466 = extractvalue { ptr, i32 } %7464, 1
  store i32 %7466, ptr %12, align 4
  br label %7573

7467:                                             ; preds = %7455, %7449
  %7468 = landingpad { ptr, i32 }
          cleanup
  %7469 = extractvalue { ptr, i32 } %7468, 0
  store ptr %7469, ptr %11, align 8
  %7470 = extractvalue { ptr, i32 } %7468, 1
  store i32 %7470, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %603) #10
  br label %7573

7471:                                             ; preds = %7444
  call void @llvm.lifetime.start.p0(i64 8, ptr %605) #10
  %7472 = load ptr, ptr %602, align 8, !tbaa !5
  %7473 = getelementptr inbounds %"struct.MIR::Statement::Data_SetDropFlag", ptr %7472, i32 0, i32 2
  %7474 = invoke ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE4findERS3_(ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef nonnull align 4 dereferenceable(4) %7473)
          to label %7475 unwind label %7504

7475:                                             ; preds = %7471
  %7476 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.524", ptr %605, i32 0, i32 0
  store ptr %7474, ptr %7476, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %606) #10
  %7477 = call ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  %7478 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.524", ptr %606, i32 0, i32 0
  store ptr %7477, ptr %7478, align 8
  %7479 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKjbEES5_(ptr noundef nonnull align 8 dereferenceable(8) %605, ptr noundef nonnull align 8 dereferenceable(8) %606) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %606) #10
  br i1 %7479, label %7480, label %7512

7480:                                             ; preds = %7475
  call void @llvm.lifetime.start.p0(i64 8, ptr %607) #10
  %7481 = load ptr, ptr %602, align 8, !tbaa !5
  %7482 = getelementptr inbounds %"struct.MIR::Statement::Data_SetDropFlag", ptr %7481, i32 0, i32 0
  call void @llvm.lifetime.start.p0(i64 1, ptr %608) #10
  %7483 = load ptr, ptr %602, align 8, !tbaa !5
  %7484 = getelementptr inbounds %"struct.MIR::Statement::Data_SetDropFlag", ptr %7483, i32 0, i32 1
  %7485 = load i8, ptr %7484, align 4, !tbaa !214, !range !40, !noundef !41
  %7486 = trunc i8 %7485 to i1
  %7487 = zext i1 %7486 to i32
  %7488 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKjbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %605) #10
  %7489 = getelementptr inbounds %"struct.std::pair.529", ptr %7488, i32 0, i32 1
  %7490 = load i8, ptr %7489, align 4, !tbaa !215, !range !40, !noundef !41
  %7491 = trunc i8 %7490 to i1
  %7492 = zext i1 %7491 to i32
  %7493 = icmp ne i32 %7487, %7492
  %7494 = zext i1 %7493 to i8
  store i8 %7494, ptr %608, align 1, !tbaa !9
  %7495 = invoke i64 @_ZSt9make_pairIRKjbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr noundef nonnull align 4 dereferenceable(4) %7482, ptr noundef nonnull align 1 dereferenceable(1) %608)
          to label %7496 unwind label %7508

7496:                                             ; preds = %7480
  %7497 = trunc i64 %7495 to i40
  store i40 %7497, ptr %607, align 4
  %7498 = invoke { ptr, i8 } @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE6insertIS2_IjbEEENSt9enable_ifIXsr16is_constructibleIS4_T_EE5valueES2_ISt17_Rb_tree_iteratorIS4_EbEE4typeEOSA_(ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef nonnull align 4 dereferenceable(5) %607)
          to label %7499 unwind label %7508

7499:                                             ; preds = %7496
  %7500 = getelementptr inbounds { ptr, i8 }, ptr %609, i32 0, i32 0
  %7501 = extractvalue { ptr, i8 } %7498, 0
  store ptr %7501, ptr %7500, align 8
  %7502 = getelementptr inbounds { ptr, i8 }, ptr %609, i32 0, i32 1
  %7503 = extractvalue { ptr, i8 } %7498, 1
  store i8 %7503, ptr %7502, align 8
  call void @llvm.lifetime.end.p0(i64 1, ptr %608) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #10
  br label %7512

7504:                                             ; preds = %7471
  %7505 = landingpad { ptr, i32 }
          cleanup
  %7506 = extractvalue { ptr, i32 } %7505, 0
  store ptr %7506, ptr %11, align 8
  %7507 = extractvalue { ptr, i32 } %7505, 1
  store i32 %7507, ptr %12, align 4
  br label %7513

7508:                                             ; preds = %7496, %7480
  %7509 = landingpad { ptr, i32 }
          cleanup
  %7510 = extractvalue { ptr, i32 } %7509, 0
  store ptr %7510, ptr %11, align 8
  %7511 = extractvalue { ptr, i32 } %7509, 1
  store i32 %7511, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %608) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %607) #10
  br label %7513

7512:                                             ; preds = %7499, %7475
  call void @llvm.lifetime.end.p0(i64 8, ptr %605) #10
  br label %7514

7513:                                             ; preds = %7508, %7504
  call void @llvm.lifetime.end.p0(i64 8, ptr %605) #10
  br label %7573

7514:                                             ; preds = %7512, %7458
  br label %7572

7515:                                             ; preds = %7441
  call void @llvm.lifetime.start.p0(i64 8, ptr %610) #10
  %7516 = load ptr, ptr %101, align 8, !tbaa !5
  %7517 = invoke noundef ptr @_ZN3MIR9Statement8opt_DropEv(ptr noundef nonnull align 8 dereferenceable(152) %7516)
          to label %7518 unwind label %7543

7518:                                             ; preds = %7515
  store ptr %7517, ptr %610, align 8, !tbaa !5
  %7519 = load ptr, ptr %610, align 8, !tbaa !5
  %7520 = icmp ne ptr %7519, null
  br i1 %7520, label %7521, label %7570

7521:                                             ; preds = %7518
  %7522 = load ptr, ptr %610, align 8, !tbaa !5
  %7523 = getelementptr inbounds %"struct.MIR::Statement::Data_Drop", ptr %7522, i32 0, i32 3
  %7524 = load i32, ptr %7523, align 8, !tbaa !217
  %7525 = icmp ne i32 %7524, -1
  br i1 %7525, label %7526, label %7569

7526:                                             ; preds = %7521
  call void @llvm.lifetime.start.p0(i64 8, ptr %611) #10
  %7527 = load ptr, ptr %610, align 8, !tbaa !5
  %7528 = getelementptr inbounds %"struct.MIR::Statement::Data_Drop", ptr %7527, i32 0, i32 3
  %7529 = invoke ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE4findERS3_(ptr noundef nonnull align 8 dereferenceable(48) %94, ptr noundef nonnull align 4 dereferenceable(4) %7528)
          to label %7530 unwind label %7547

7530:                                             ; preds = %7526
  %7531 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.524", ptr %611, i32 0, i32 0
  store ptr %7529, ptr %7531, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %612) #10
  %7532 = call ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  %7533 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.524", ptr %612, i32 0, i32 0
  store ptr %7532, ptr %7533, align 8
  %7534 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKjbEES5_(ptr noundef nonnull align 8 dereferenceable(8) %611, ptr noundef nonnull align 8 dereferenceable(8) %612) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %612) #10
  br i1 %7534, label %7535, label %7567

7535:                                             ; preds = %7530
  %7536 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKjbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %611) #10
  %7537 = getelementptr inbounds %"struct.std::pair.529", ptr %7536, i32 0, i32 1
  %7538 = load i8, ptr %7537, align 4, !tbaa !215, !range !40, !noundef !41
  %7539 = trunc i8 %7538 to i1
  br i1 %7539, label %7540, label %7551

7540:                                             ; preds = %7535
  %7541 = load ptr, ptr %610, align 8, !tbaa !5
  %7542 = getelementptr inbounds %"struct.MIR::Statement::Data_Drop", ptr %7541, i32 0, i32 3
  store i32 -1, ptr %7542, align 8, !tbaa !217
  br label %7566

7543:                                             ; preds = %7515
  %7544 = landingpad { ptr, i32 }
          cleanup
  %7545 = extractvalue { ptr, i32 } %7544, 0
  store ptr %7545, ptr %11, align 8
  %7546 = extractvalue { ptr, i32 } %7544, 1
  store i32 %7546, ptr %12, align 4
  br label %7571

7547:                                             ; preds = %7526
  %7548 = landingpad { ptr, i32 }
          cleanup
  %7549 = extractvalue { ptr, i32 } %7548, 0
  store ptr %7549, ptr %11, align 8
  %7550 = extractvalue { ptr, i32 } %7548, 1
  store i32 %7550, ptr %12, align 4
  br label %7568

7551:                                             ; preds = %7535
  call void @llvm.lifetime.start.p0(i64 152, ptr %613) #10
  %7552 = getelementptr inbounds %"struct.MIR::Statement::Data_ScopeEnd", ptr %614, i32 0, i32 0
  call void @llvm.memset.p0.i64(ptr align 8 %7552, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %7552) #10
  invoke void @_ZN3MIR9Statement13make_ScopeEndENS0_13Data_ScopeEndE(ptr dead_on_unwind writable sret(%"class.MIR::Statement") align 8 %613, ptr noundef %614)
          to label %7553 unwind label %7557

7553:                                             ; preds = %7551
  %7554 = load ptr, ptr %101, align 8, !tbaa !5
  %7555 = invoke noundef nonnull align 8 dereferenceable(152) ptr @_ZN3MIR9StatementaSEOS0_(ptr noundef nonnull align 8 dereferenceable(152) %7554, ptr noundef nonnull align 8 dereferenceable(152) %613)
          to label %7556 unwind label %7561

7556:                                             ; preds = %7553
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %613) #10
  call void @_ZN3MIR9Statement13Data_ScopeEndD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %614) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %613) #10
  br label %7566

7557:                                             ; preds = %7551
  %7558 = landingpad { ptr, i32 }
          cleanup
  %7559 = extractvalue { ptr, i32 } %7558, 0
  store ptr %7559, ptr %11, align 8
  %7560 = extractvalue { ptr, i32 } %7558, 1
  store i32 %7560, ptr %12, align 4
  br label %7565

7561:                                             ; preds = %7553
  %7562 = landingpad { ptr, i32 }
          cleanup
  %7563 = extractvalue { ptr, i32 } %7562, 0
  store ptr %7563, ptr %11, align 8
  %7564 = extractvalue { ptr, i32 } %7562, 1
  store i32 %7564, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %613) #10
  br label %7565

7565:                                             ; preds = %7561, %7557
  call void @_ZN3MIR9Statement13Data_ScopeEndD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %614) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr %613) #10
  br label %7568

7566:                                             ; preds = %7556, %7540
  br label %7567

7567:                                             ; preds = %7566, %7530
  call void @llvm.lifetime.end.p0(i64 8, ptr %611) #10
  br label %7569

7568:                                             ; preds = %7565, %7547
  call void @llvm.lifetime.end.p0(i64 8, ptr %611) #10
  br label %7571

7569:                                             ; preds = %7567, %7521
  br label %7570

7570:                                             ; preds = %7569, %7518
  call void @llvm.lifetime.end.p0(i64 8, ptr %610) #10
  br label %7572

7571:                                             ; preds = %7568, %7543
  call void @llvm.lifetime.end.p0(i64 8, ptr %610) #10
  br label %7573

7572:                                             ; preds = %7570, %7514
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #10
  br label %7574

7573:                                             ; preds = %7571, %7513, %7467, %7463
  call void @llvm.lifetime.end.p0(i64 8, ptr %602) #10
  br label %7627

7574:                                             ; preds = %7572, %7437
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #10
  %7575 = load ptr, ptr %101, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %616) #10
  %7576 = getelementptr inbounds %class.anon.532, ptr %616, i32 0, i32 0
  store ptr %92, ptr %7576, align 8, !tbaa !5
  %7577 = getelementptr inbounds %class.anon.532, ptr %616, i32 0, i32 1
  store ptr %93, ptr %7577, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_47vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %615, ptr noundef nonnull align 8 dereferenceable(16) %616) #10
  %7578 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %7575, ptr noundef %615)
          to label %7579 unwind label %7628

7579:                                             ; preds = %7574
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %615) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %616) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %617) #10
  %7580 = load ptr, ptr %101, align 8, !tbaa !5
  %7581 = invoke noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %7580)
          to label %7582 unwind label %7632

7582:                                             ; preds = %7579
  store ptr %7581, ptr %617, align 8, !tbaa !5
  %7583 = load ptr, ptr %617, align 8, !tbaa !5
  %7584 = icmp ne ptr %7583, null
  br i1 %7584, label %7585, label %7887

7585:                                             ; preds = %7582
  %7586 = load ptr, ptr %617, align 8, !tbaa !5
  %7587 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7586, i32 0, i32 0
  %7588 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %7587)
          to label %7589 unwind label %7632

7589:                                             ; preds = %7585
  br i1 %7588, label %7590, label %7886

7590:                                             ; preds = %7589
  call void @llvm.lifetime.start.p0(i64 8, ptr %618) #10
  %7591 = load ptr, ptr %617, align 8, !tbaa !5
  %7592 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7591, i32 0, i32 1
  %7593 = invoke noundef ptr @_ZNK3MIR6RValue12opt_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %7592)
          to label %7594 unwind label %7636

7594:                                             ; preds = %7590
  store ptr %7593, ptr %618, align 8, !tbaa !5
  %7595 = load ptr, ptr %618, align 8, !tbaa !5
  %7596 = icmp ne ptr %7595, null
  br i1 %7596, label %7597, label %7662

7597:                                             ; preds = %7594
  call void @llvm.lifetime.start.p0(i64 72, ptr %619) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %620) #10
  %7598 = load ptr, ptr %617, align 8, !tbaa !5
  %7599 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7598, i32 0, i32 0
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %620, ptr noundef nonnull align 8 dereferenceable(32) %7599)
          to label %7600 unwind label %7640

7600:                                             ; preds = %7597
  call void @llvm.lifetime.start.p0(i64 40, ptr %621) #10
  %7601 = load ptr, ptr %618, align 8, !tbaa !5
  invoke void @_ZNK3MIR8Constant5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %621, ptr noundef nonnull align 8 dereferenceable(40) %7601)
          to label %7602 unwind label %7644

7602:                                             ; preds = %7600
  invoke void @_ZSt9make_pairIN3MIR6LValueENS0_8ConstantEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.536") align 8 %619, ptr noundef nonnull align 8 dereferenceable(32) %620, ptr noundef nonnull align 8 dereferenceable(40) %621)
          to label %7603 unwind label %7648

7603:                                             ; preds = %7602
  %7604 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE6insertIS5_IS1_S2_EEENSt9enable_ifIXsr16is_constructibleIS7_T_EE5valueES5_ISt17_Rb_tree_iteratorIS7_EbEE4typeEOSD_(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 8 dereferenceable(72) %619)
          to label %7605 unwind label %7652

7605:                                             ; preds = %7603
  %7606 = getelementptr inbounds { ptr, i8 }, ptr %622, i32 0, i32 0
  %7607 = extractvalue { ptr, i8 } %7604, 0
  store ptr %7607, ptr %7606, align 8
  %7608 = getelementptr inbounds { ptr, i8 }, ptr %622, i32 0, i32 1
  %7609 = extractvalue { ptr, i8 } %7604, 1
  store i8 %7609, ptr %7608, align 8
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %619) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %621) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %621) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %620) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %620) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %619) #10
  br label %7610

7610:                                             ; preds = %7605
  %7611 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %7612 unwind label %7636

7612:                                             ; preds = %7610
  br i1 %7611, label %7613, label %7659

7613:                                             ; preds = %7612
  %7614 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %7615 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %7614, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %7616 unwind label %7636

7616:                                             ; preds = %7613
  %7617 = load ptr, ptr %3, align 8, !tbaa !5
  %7618 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %7615, ptr noundef nonnull align 8 dereferenceable(120) %7617)
          to label %7619 unwind label %7636

7619:                                             ; preds = %7616
  %7620 = load ptr, ptr %101, align 8, !tbaa !5
  %7621 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %7618, ptr noundef nonnull align 8 dereferenceable(152) %7620)
          to label %7622 unwind label %7636

7622:                                             ; preds = %7619
  %7623 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %7621, ptr noundef @_ZSt3decRSt8ios_base)
          to label %7624 unwind label %7636

7624:                                             ; preds = %7622
  %7625 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %7623, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %7626 unwind label %7636

7626:                                             ; preds = %7624
  br label %7659

7627:                                             ; preds = %7573, %7434, %1662
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #10
  br label %7891

7628:                                             ; preds = %7574
  %7629 = landingpad { ptr, i32 }
          cleanup
  %7630 = extractvalue { ptr, i32 } %7629, 0
  store ptr %7630, ptr %11, align 8
  %7631 = extractvalue { ptr, i32 } %7629, 1
  store i32 %7631, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %615) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %616) #10
  br label %7891

7632:                                             ; preds = %7585, %7579
  %7633 = landingpad { ptr, i32 }
          cleanup
  %7634 = extractvalue { ptr, i32 } %7633, 0
  store ptr %7634, ptr %11, align 8
  %7635 = extractvalue { ptr, i32 } %7633, 1
  store i32 %7635, ptr %12, align 4
  br label %7890

7636:                                             ; preds = %7624, %7622, %7619, %7616, %7613, %7610, %7590
  %7637 = landingpad { ptr, i32 }
          cleanup
  %7638 = extractvalue { ptr, i32 } %7637, 0
  store ptr %7638, ptr %11, align 8
  %7639 = extractvalue { ptr, i32 } %7637, 1
  store i32 %7639, ptr %12, align 4
  br label %7885

7640:                                             ; preds = %7597
  %7641 = landingpad { ptr, i32 }
          cleanup
  %7642 = extractvalue { ptr, i32 } %7641, 0
  store ptr %7642, ptr %11, align 8
  %7643 = extractvalue { ptr, i32 } %7641, 1
  store i32 %7643, ptr %12, align 4
  br label %7658

7644:                                             ; preds = %7600
  %7645 = landingpad { ptr, i32 }
          cleanup
  %7646 = extractvalue { ptr, i32 } %7645, 0
  store ptr %7646, ptr %11, align 8
  %7647 = extractvalue { ptr, i32 } %7645, 1
  store i32 %7647, ptr %12, align 4
  br label %7657

7648:                                             ; preds = %7602
  %7649 = landingpad { ptr, i32 }
          cleanup
  %7650 = extractvalue { ptr, i32 } %7649, 0
  store ptr %7650, ptr %11, align 8
  %7651 = extractvalue { ptr, i32 } %7649, 1
  store i32 %7651, ptr %12, align 4
  br label %7656

7652:                                             ; preds = %7603
  %7653 = landingpad { ptr, i32 }
          cleanup
  %7654 = extractvalue { ptr, i32 } %7653, 0
  store ptr %7654, ptr %11, align 8
  %7655 = extractvalue { ptr, i32 } %7653, 1
  store i32 %7655, ptr %12, align 4
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %619) #10
  br label %7656

7656:                                             ; preds = %7652, %7648
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %621) #10
  br label %7657

7657:                                             ; preds = %7656, %7644
  call void @llvm.lifetime.end.p0(i64 40, ptr %621) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %620) #10
  br label %7658

7658:                                             ; preds = %7657, %7640
  call void @llvm.lifetime.end.p0(i64 32, ptr %620) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %619) #10
  br label %7885

7659:                                             ; preds = %7626, %7612
  br label %7660

7660:                                             ; preds = %7659
  br label %7661

7661:                                             ; preds = %7660
  br label %7884

7662:                                             ; preds = %7594
  call void @llvm.lifetime.start.p0(i64 8, ptr %623) #10
  %7663 = load ptr, ptr %617, align 8, !tbaa !5
  %7664 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7663, i32 0, i32 1
  %7665 = invoke noundef ptr @_ZNK3MIR6RValue15opt_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112) %7664)
          to label %7666 unwind label %7699

7666:                                             ; preds = %7662
  store ptr %7665, ptr %623, align 8, !tbaa !5
  %7667 = load ptr, ptr %623, align 8, !tbaa !5
  %7668 = icmp ne ptr %7667, null
  br i1 %7668, label %7669, label %7720

7669:                                             ; preds = %7666
  call void @llvm.lifetime.start.p0(i64 40, ptr %624) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %625) #10
  %7670 = load ptr, ptr %617, align 8, !tbaa !5
  %7671 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7670, i32 0, i32 0
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %625, ptr noundef nonnull align 8 dereferenceable(32) %7671)
          to label %7672 unwind label %7703

7672:                                             ; preds = %7669
  %7673 = load ptr, ptr %623, align 8, !tbaa !5
  %7674 = getelementptr inbounds %"struct.MIR::RValue::Data_EnumVariant", ptr %7673, i32 0, i32 1
  invoke void @_ZSt9make_pairIN3MIR6LValueERKjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind writable sret(%"struct.std::pair.542") align 8 %624, ptr noundef nonnull align 8 dereferenceable(32) %625, ptr noundef nonnull align 4 dereferenceable(4) %7674)
          to label %7675 unwind label %7707

7675:                                             ; preds = %7672
  %7676 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE6insertIS4_IS1_jEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(36) %624)
          to label %7677 unwind label %7711

7677:                                             ; preds = %7675
  %7678 = getelementptr inbounds { ptr, i8 }, ptr %626, i32 0, i32 0
  %7679 = extractvalue { ptr, i8 } %7676, 0
  store ptr %7679, ptr %7678, align 8
  %7680 = getelementptr inbounds { ptr, i8 }, ptr %626, i32 0, i32 1
  %7681 = extractvalue { ptr, i8 } %7676, 1
  store i8 %7681, ptr %7680, align 8
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %624) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %625) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %625) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %624) #10
  br label %7682

7682:                                             ; preds = %7677
  %7683 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %7684 unwind label %7699

7684:                                             ; preds = %7682
  br i1 %7683, label %7685, label %7717

7685:                                             ; preds = %7684
  %7686 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %7687 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %7686, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %7688 unwind label %7699

7688:                                             ; preds = %7685
  %7689 = load ptr, ptr %3, align 8, !tbaa !5
  %7690 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %7687, ptr noundef nonnull align 8 dereferenceable(120) %7689)
          to label %7691 unwind label %7699

7691:                                             ; preds = %7688
  %7692 = load ptr, ptr %101, align 8, !tbaa !5
  %7693 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %7690, ptr noundef nonnull align 8 dereferenceable(152) %7692)
          to label %7694 unwind label %7699

7694:                                             ; preds = %7691
  %7695 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %7693, ptr noundef @_ZSt3decRSt8ios_base)
          to label %7696 unwind label %7699

7696:                                             ; preds = %7694
  %7697 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %7695, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %7698 unwind label %7699

7698:                                             ; preds = %7696
  br label %7717

7699:                                             ; preds = %7696, %7694, %7691, %7688, %7685, %7682, %7662
  %7700 = landingpad { ptr, i32 }
          cleanup
  %7701 = extractvalue { ptr, i32 } %7700, 0
  store ptr %7701, ptr %11, align 8
  %7702 = extractvalue { ptr, i32 } %7700, 1
  store i32 %7702, ptr %12, align 4
  br label %7883

7703:                                             ; preds = %7669
  %7704 = landingpad { ptr, i32 }
          cleanup
  %7705 = extractvalue { ptr, i32 } %7704, 0
  store ptr %7705, ptr %11, align 8
  %7706 = extractvalue { ptr, i32 } %7704, 1
  store i32 %7706, ptr %12, align 4
  br label %7716

7707:                                             ; preds = %7672
  %7708 = landingpad { ptr, i32 }
          cleanup
  %7709 = extractvalue { ptr, i32 } %7708, 0
  store ptr %7709, ptr %11, align 8
  %7710 = extractvalue { ptr, i32 } %7708, 1
  store i32 %7710, ptr %12, align 4
  br label %7715

7711:                                             ; preds = %7675
  %7712 = landingpad { ptr, i32 }
          cleanup
  %7713 = extractvalue { ptr, i32 } %7712, 0
  store ptr %7713, ptr %11, align 8
  %7714 = extractvalue { ptr, i32 } %7712, 1
  store i32 %7714, ptr %12, align 4
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %624) #10
  br label %7715

7715:                                             ; preds = %7711, %7707
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %625) #10
  br label %7716

7716:                                             ; preds = %7715, %7703
  call void @llvm.lifetime.end.p0(i64 32, ptr %625) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %624) #10
  br label %7883

7717:                                             ; preds = %7698, %7684
  br label %7718

7718:                                             ; preds = %7717
  br label %7719

7719:                                             ; preds = %7718
  br label %7882

7720:                                             ; preds = %7666
  call void @llvm.lifetime.start.p0(i64 8, ptr %627) #10
  %7721 = load ptr, ptr %617, align 8, !tbaa !5
  %7722 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7721, i32 0, i32 1
  %7723 = invoke noundef ptr @_ZNK3MIR6RValue7opt_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %7722)
          to label %7724 unwind label %7752

7724:                                             ; preds = %7720
  store ptr %7723, ptr %627, align 8, !tbaa !5
  %7725 = load ptr, ptr %627, align 8, !tbaa !5
  %7726 = icmp ne ptr %7725, null
  br i1 %7726, label %7727, label %7879

7727:                                             ; preds = %7724
  %7728 = load ptr, ptr %627, align 8, !tbaa !5
  %7729 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %7728)
          to label %7730 unwind label %7752

7730:                                             ; preds = %7727
  br i1 %7729, label %7731, label %7878

7731:                                             ; preds = %7730
  call void @llvm.lifetime.start.p0(i64 8, ptr %628) #10
  %7732 = load ptr, ptr %627, align 8, !tbaa !5
  %7733 = invoke ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 8 dereferenceable(32) %7732)
          to label %7734 unwind label %7756

7734:                                             ; preds = %7731
  %7735 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %628, i32 0, i32 0
  store ptr %7733, ptr %7735, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %629) #10
  %7736 = load ptr, ptr %627, align 8, !tbaa !5
  %7737 = invoke ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(32) %7736)
          to label %7738 unwind label %7760

7738:                                             ; preds = %7734
  %7739 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.540", ptr %629, i32 0, i32 0
  store ptr %7737, ptr %7739, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %630) #10
  %7740 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  %7741 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %630, i32 0, i32 0
  store ptr %7740, ptr %7741, align 8
  %7742 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %628, ptr noundef nonnull align 8 dereferenceable(8) %630) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %631) #10
  br i1 %7742, label %7743, label %7747

7743:                                             ; preds = %7738
  %7744 = call ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %93) #10
  %7745 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.540", ptr %631, i32 0, i32 0
  store ptr %7744, ptr %7745, align 8
  %7746 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8) %629, ptr noundef nonnull align 8 dereferenceable(8) %631) #10
  br label %7747

7747:                                             ; preds = %7743, %7738
  %7748 = phi i1 [ false, %7738 ], [ %7746, %7743 ]
  %7749 = xor i1 %7748, true
  br i1 %7749, label %7750, label %7751

7750:                                             ; preds = %7747
  br label %7765

7751:                                             ; preds = %7747
  call void @__assert_fail(ptr noundef @.str.91, ptr noundef @.str.8, i32 noundef 4524, ptr noundef @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

7752:                                             ; preds = %7727, %7720
  %7753 = landingpad { ptr, i32 }
          cleanup
  %7754 = extractvalue { ptr, i32 } %7753, 0
  store ptr %7754, ptr %11, align 8
  %7755 = extractvalue { ptr, i32 } %7753, 1
  store i32 %7755, ptr %12, align 4
  br label %7881

7756:                                             ; preds = %7731
  %7757 = landingpad { ptr, i32 }
          cleanup
  %7758 = extractvalue { ptr, i32 } %7757, 0
  store ptr %7758, ptr %11, align 8
  %7759 = extractvalue { ptr, i32 } %7757, 1
  store i32 %7759, ptr %12, align 4
  br label %7877

7760:                                             ; preds = %7853, %7851, %7848, %7845, %7842, %7839, %7797, %7795, %7792, %7789, %7786, %7783, %7734
  %7761 = landingpad { ptr, i32 }
          cleanup
  %7762 = extractvalue { ptr, i32 } %7761, 0
  store ptr %7762, ptr %11, align 8
  %7763 = extractvalue { ptr, i32 } %7761, 1
  store i32 %7763, ptr %12, align 4
  br label %7876

7764:                                             ; No predecessors!
  br label %7765

7765:                                             ; preds = %7764, %7750
  call void @llvm.lifetime.end.p0(i64 8, ptr %631) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %630) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr %632) #10
  %7766 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  %7767 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %632, i32 0, i32 0
  store ptr %7766, ptr %7767, align 8
  %7768 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %628, ptr noundef nonnull align 8 dereferenceable(8) %632) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %632) #10
  br i1 %7768, label %7769, label %7822

7769:                                             ; preds = %7765
  call void @llvm.lifetime.start.p0(i64 72, ptr %633) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %634) #10
  %7770 = load ptr, ptr %617, align 8, !tbaa !5
  %7771 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7770, i32 0, i32 0
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %634, ptr noundef nonnull align 8 dereferenceable(32) %7771)
          to label %7772 unwind label %7800

7772:                                             ; preds = %7769
  call void @llvm.lifetime.start.p0(i64 40, ptr %635) #10
  %7773 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %628) #10
  %7774 = getelementptr inbounds %"struct.std::pair.518", ptr %7773, i32 0, i32 1
  invoke void @_ZNK3MIR8Constant5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8 %635, ptr noundef nonnull align 8 dereferenceable(40) %7774)
          to label %7775 unwind label %7804

7775:                                             ; preds = %7772
  invoke void @_ZSt9make_pairIN3MIR6LValueENS0_8ConstantEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.536") align 8 %633, ptr noundef nonnull align 8 dereferenceable(32) %634, ptr noundef nonnull align 8 dereferenceable(40) %635)
          to label %7776 unwind label %7808

7776:                                             ; preds = %7775
  %7777 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE6insertIS5_IS1_S2_EEENSt9enable_ifIXsr16is_constructibleIS7_T_EE5valueES5_ISt17_Rb_tree_iteratorIS7_EbEE4typeEOSD_(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 8 dereferenceable(72) %633)
          to label %7778 unwind label %7812

7778:                                             ; preds = %7776
  %7779 = getelementptr inbounds { ptr, i8 }, ptr %636, i32 0, i32 0
  %7780 = extractvalue { ptr, i8 } %7777, 0
  store ptr %7780, ptr %7779, align 8
  %7781 = getelementptr inbounds { ptr, i8 }, ptr %636, i32 0, i32 1
  %7782 = extractvalue { ptr, i8 } %7777, 1
  store i8 %7782, ptr %7781, align 8
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %633) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %635) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %635) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %634) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %634) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %633) #10
  br label %7783

7783:                                             ; preds = %7778
  %7784 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %7785 unwind label %7760

7785:                                             ; preds = %7783
  br i1 %7784, label %7786, label %7819

7786:                                             ; preds = %7785
  %7787 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %7788 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %7787, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %7789 unwind label %7760

7789:                                             ; preds = %7786
  %7790 = load ptr, ptr %3, align 8, !tbaa !5
  %7791 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %7788, ptr noundef nonnull align 8 dereferenceable(120) %7790)
          to label %7792 unwind label %7760

7792:                                             ; preds = %7789
  %7793 = load ptr, ptr %101, align 8, !tbaa !5
  %7794 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %7791, ptr noundef nonnull align 8 dereferenceable(152) %7793)
          to label %7795 unwind label %7760

7795:                                             ; preds = %7792
  %7796 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %7794, ptr noundef @_ZSt3decRSt8ios_base)
          to label %7797 unwind label %7760

7797:                                             ; preds = %7795
  %7798 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %7796, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %7799 unwind label %7760

7799:                                             ; preds = %7797
  br label %7819

7800:                                             ; preds = %7769
  %7801 = landingpad { ptr, i32 }
          cleanup
  %7802 = extractvalue { ptr, i32 } %7801, 0
  store ptr %7802, ptr %11, align 8
  %7803 = extractvalue { ptr, i32 } %7801, 1
  store i32 %7803, ptr %12, align 4
  br label %7818

7804:                                             ; preds = %7772
  %7805 = landingpad { ptr, i32 }
          cleanup
  %7806 = extractvalue { ptr, i32 } %7805, 0
  store ptr %7806, ptr %11, align 8
  %7807 = extractvalue { ptr, i32 } %7805, 1
  store i32 %7807, ptr %12, align 4
  br label %7817

7808:                                             ; preds = %7775
  %7809 = landingpad { ptr, i32 }
          cleanup
  %7810 = extractvalue { ptr, i32 } %7809, 0
  store ptr %7810, ptr %11, align 8
  %7811 = extractvalue { ptr, i32 } %7809, 1
  store i32 %7811, ptr %12, align 4
  br label %7816

7812:                                             ; preds = %7776
  %7813 = landingpad { ptr, i32 }
          cleanup
  %7814 = extractvalue { ptr, i32 } %7813, 0
  store ptr %7814, ptr %11, align 8
  %7815 = extractvalue { ptr, i32 } %7813, 1
  store i32 %7815, ptr %12, align 4
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %633) #10
  br label %7816

7816:                                             ; preds = %7812, %7808
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %635) #10
  br label %7817

7817:                                             ; preds = %7816, %7804
  call void @llvm.lifetime.end.p0(i64 40, ptr %635) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %634) #10
  br label %7818

7818:                                             ; preds = %7817, %7800
  call void @llvm.lifetime.end.p0(i64 32, ptr %634) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr %633) #10
  br label %7876

7819:                                             ; preds = %7799, %7785
  br label %7820

7820:                                             ; preds = %7819
  br label %7821

7821:                                             ; preds = %7820
  br label %7875

7822:                                             ; preds = %7765
  call void @llvm.lifetime.start.p0(i64 8, ptr %637) #10
  %7823 = call ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %93) #10
  %7824 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.540", ptr %637, i32 0, i32 0
  store ptr %7823, ptr %7824, align 8
  %7825 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8) %629, ptr noundef nonnull align 8 dereferenceable(8) %637) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %637) #10
  br i1 %7825, label %7826, label %7873

7826:                                             ; preds = %7822
  call void @llvm.lifetime.start.p0(i64 40, ptr %638) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr %639) #10
  %7827 = load ptr, ptr %617, align 8, !tbaa !5
  %7828 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %7827, i32 0, i32 0
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %639, ptr noundef nonnull align 8 dereferenceable(32) %7828)
          to label %7829 unwind label %7856

7829:                                             ; preds = %7826
  %7830 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %629) #10
  %7831 = getelementptr inbounds %"struct.std::pair.545", ptr %7830, i32 0, i32 1
  invoke void @_ZSt9make_pairIN3MIR6LValueERjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.542") align 8 %638, ptr noundef nonnull align 8 dereferenceable(32) %639, ptr noundef nonnull align 4 dereferenceable(4) %7831)
          to label %7832 unwind label %7860

7832:                                             ; preds = %7829
  %7833 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE6insertIS4_IS1_jEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(36) %638)
          to label %7834 unwind label %7864

7834:                                             ; preds = %7832
  %7835 = getelementptr inbounds { ptr, i8 }, ptr %640, i32 0, i32 0
  %7836 = extractvalue { ptr, i8 } %7833, 0
  store ptr %7836, ptr %7835, align 8
  %7837 = getelementptr inbounds { ptr, i8 }, ptr %640, i32 0, i32 1
  %7838 = extractvalue { ptr, i8 } %7833, 1
  store i8 %7838, ptr %7837, align 8
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %638) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %639) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr %639) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %638) #10
  br label %7839

7839:                                             ; preds = %7834
  %7840 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %7841 unwind label %7760

7841:                                             ; preds = %7839
  br i1 %7840, label %7842, label %7870

7842:                                             ; preds = %7841
  %7843 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %7844 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %7843, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %7845 unwind label %7760

7845:                                             ; preds = %7842
  %7846 = load ptr, ptr %3, align 8, !tbaa !5
  %7847 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %7844, ptr noundef nonnull align 8 dereferenceable(120) %7846)
          to label %7848 unwind label %7760

7848:                                             ; preds = %7845
  %7849 = load ptr, ptr %101, align 8, !tbaa !5
  %7850 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %7847, ptr noundef nonnull align 8 dereferenceable(152) %7849)
          to label %7851 unwind label %7760

7851:                                             ; preds = %7848
  %7852 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %7850, ptr noundef @_ZSt3decRSt8ios_base)
          to label %7853 unwind label %7760

7853:                                             ; preds = %7851
  %7854 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %7852, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %7855 unwind label %7760

7855:                                             ; preds = %7853
  br label %7870

7856:                                             ; preds = %7826
  %7857 = landingpad { ptr, i32 }
          cleanup
  %7858 = extractvalue { ptr, i32 } %7857, 0
  store ptr %7858, ptr %11, align 8
  %7859 = extractvalue { ptr, i32 } %7857, 1
  store i32 %7859, ptr %12, align 4
  br label %7869

7860:                                             ; preds = %7829
  %7861 = landingpad { ptr, i32 }
          cleanup
  %7862 = extractvalue { ptr, i32 } %7861, 0
  store ptr %7862, ptr %11, align 8
  %7863 = extractvalue { ptr, i32 } %7861, 1
  store i32 %7863, ptr %12, align 4
  br label %7868

7864:                                             ; preds = %7832
  %7865 = landingpad { ptr, i32 }
          cleanup
  %7866 = extractvalue { ptr, i32 } %7865, 0
  store ptr %7866, ptr %11, align 8
  %7867 = extractvalue { ptr, i32 } %7865, 1
  store i32 %7867, ptr %12, align 4
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %638) #10
  br label %7868

7868:                                             ; preds = %7864, %7860
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %639) #10
  br label %7869

7869:                                             ; preds = %7868, %7856
  call void @llvm.lifetime.end.p0(i64 32, ptr %639) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %638) #10
  br label %7876

7870:                                             ; preds = %7855, %7841
  br label %7871

7871:                                             ; preds = %7870
  br label %7872

7872:                                             ; preds = %7871
  br label %7874

7873:                                             ; preds = %7822
  br label %7874

7874:                                             ; preds = %7873, %7872
  br label %7875

7875:                                             ; preds = %7874, %7821
  call void @llvm.lifetime.end.p0(i64 8, ptr %629) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %628) #10
  br label %7878

7876:                                             ; preds = %7869, %7818, %7760
  call void @llvm.lifetime.end.p0(i64 8, ptr %629) #10
  br label %7877

7877:                                             ; preds = %7876, %7756
  call void @llvm.lifetime.end.p0(i64 8, ptr %628) #10
  br label %7881

7878:                                             ; preds = %7875, %7730
  br label %7880

7879:                                             ; preds = %7724
  br label %7880

7880:                                             ; preds = %7879, %7878
  call void @llvm.lifetime.end.p0(i64 8, ptr %627) #10
  br label %7882

7881:                                             ; preds = %7877, %7752
  call void @llvm.lifetime.end.p0(i64 8, ptr %627) #10
  br label %7883

7882:                                             ; preds = %7880, %7719
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #10
  br label %7884

7883:                                             ; preds = %7881, %7716, %7699
  call void @llvm.lifetime.end.p0(i64 8, ptr %623) #10
  br label %7885

7884:                                             ; preds = %7882, %7661
  call void @llvm.lifetime.end.p0(i64 8, ptr %618) #10
  br label %7886

7885:                                             ; preds = %7883, %7658, %7636
  call void @llvm.lifetime.end.p0(i64 8, ptr %618) #10
  br label %7890

7886:                                             ; preds = %7884, %7589
  br label %7887

7887:                                             ; preds = %7886, %7582
  call void @llvm.lifetime.end.p0(i64 8, ptr %617) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #10
  br label %7888

7888:                                             ; preds = %7887
  %7889 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %99) #10
  br label %1621

7890:                                             ; preds = %7885, %7632
  call void @llvm.lifetime.end.p0(i64 8, ptr %617) #10
  br label %7891

7891:                                             ; preds = %7890, %7628, %7627, %1658, %1654
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #10
  br label %8232

7892:                                             ; preds = %1623
  %7893 = load ptr, ptr %3, align 8, !tbaa !5
  %7894 = load i64, ptr %91, align 8, !tbaa !13
  %7895 = trunc i64 %7894 to i32
  invoke void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120) %7893, i32 noundef %7895)
          to label %7896 unwind label %7906

7896:                                             ; preds = %7892
  %7897 = load ptr, ptr %90, align 8, !tbaa !5
  %7898 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %7897, i32 0, i32 1
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %641, ptr noundef nonnull align 8 dereferenceable(24) %97)
          to label %7899 unwind label %7906

7899:                                             ; preds = %7896
  %7900 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR10TerminatorESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168) %7898, ptr noundef %641)
          to label %7901 unwind label %7910

7901:                                             ; preds = %7899
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %641) #10
  %7902 = load ptr, ptr %90, align 8, !tbaa !5
  %7903 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %7902, i32 0, i32 1
  %7904 = invoke noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %7903)
          to label %7905 unwind label %7906

7905:                                             ; preds = %7901
  switch i32 %7904, label %8228 [
    i32 0, label %7914
    i32 7, label %7916
    i32 6, label %8042
    i32 9, label %8181
  ]

7906:                                             ; preds = %7914, %7901, %7896, %7892
  %7907 = landingpad { ptr, i32 }
          cleanup
  %7908 = extractvalue { ptr, i32 } %7907, 0
  store ptr %7908, ptr %11, align 8
  %7909 = extractvalue { ptr, i32 } %7907, 1
  store i32 %7909, ptr %12, align 4
  br label %8232

7910:                                             ; preds = %7899
  %7911 = landingpad { ptr, i32 }
          cleanup
  %7912 = extractvalue { ptr, i32 } %7911, 0
  store ptr %7912, ptr %11, align 8
  %7913 = extractvalue { ptr, i32 } %7911, 1
  store i32 %7913, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %641) #10
  br label %8232

7914:                                             ; preds = %7905
  %7915 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %7915, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %7915, ptr @_ZTIPKc, ptr null) #12
          to label %8459 unwind label %7906

7916:                                             ; preds = %7905
  call void @llvm.lifetime.start.p0(i64 1, ptr %642) #10
  store i8 1, ptr %642, align 1, !tbaa !9
  br label %7917

7917:                                             ; preds = %8040, %7916
  %7918 = load i8, ptr %642, align 1, !tbaa !9, !range !40, !noundef !41
  %7919 = trunc i8 %7918 to i1
  br i1 %7919, label %7921, label %7920

7920:                                             ; preds = %7917
  store i32 600, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %642) #10
  br label %8041

7921:                                             ; preds = %7917
  call void @llvm.lifetime.start.p0(i64 8, ptr %643) #10
  %7922 = load ptr, ptr %90, align 8, !tbaa !5
  %7923 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %7922, i32 0, i32 1
  %7924 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR10Terminator9as_SwitchEv(ptr noundef nonnull align 8 dereferenceable(168) %7923)
          to label %7925 unwind label %7931

7925:                                             ; preds = %7921
  store ptr %7924, ptr %643, align 8, !tbaa !5
  br label %7926

7926:                                             ; preds = %8036, %7925
  %7927 = load ptr, ptr %643, align 8, !tbaa !5
  %7928 = load i8, ptr %642, align 1, !tbaa !9, !range !40, !noundef !41
  %7929 = trunc i8 %7928 to i1
  br i1 %7929, label %7935, label %7930

7930:                                             ; preds = %7926
  store i32 603, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %643) #10
  br label %8039

7931:                                             ; preds = %7921
  %7932 = landingpad { ptr, i32 }
          cleanup
  %7933 = extractvalue { ptr, i32 } %7932, 0
  store ptr %7933, ptr %11, align 8
  %7934 = extractvalue { ptr, i32 } %7932, 1
  store i32 %7934, ptr %12, align 4
  br label %8038

7935:                                             ; preds = %7926
  call void @llvm.lifetime.start.p0(i64 8, ptr %644) #10
  %7936 = load ptr, ptr %643, align 8, !tbaa !5
  %7937 = getelementptr inbounds %"struct.MIR::Terminator::Data_Switch", ptr %7936, i32 0, i32 0
  %7938 = invoke ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %93, ptr noundef nonnull align 8 dereferenceable(32) %7937)
          to label %7939 unwind label %7960

7939:                                             ; preds = %7935
  %7940 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.540", ptr %644, i32 0, i32 0
  store ptr %7938, ptr %7940, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %645) #10
  %7941 = call ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %93) #10
  %7942 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.540", ptr %645, i32 0, i32 0
  store ptr %7941, ptr %7942, align 8
  %7943 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8) %644, ptr noundef nonnull align 8 dereferenceable(8) %645) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %645) #10
  br i1 %7943, label %7944, label %8035

7944:                                             ; preds = %7939
  br label %7945

7945:                                             ; preds = %7944
  %7946 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %644) #10
  %7947 = getelementptr inbounds %"struct.std::pair.545", ptr %7946, i32 0, i32 1
  %7948 = load i32, ptr %7947, align 8, !tbaa !220
  %7949 = zext i32 %7948 to i64
  %7950 = load ptr, ptr %643, align 8, !tbaa !5
  %7951 = getelementptr inbounds %"struct.MIR::Terminator::Data_Switch", ptr %7950, i32 0, i32 1
  %7952 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %7951) #10
  %7953 = icmp ult i64 %7949, %7952
  br i1 %7953, label %7968, label %7954

7954:                                             ; preds = %7945
  %7955 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %647) #10
  %7956 = getelementptr inbounds %class.anon.548, ptr %647, i32 0, i32 0
  store ptr %644, ptr %7956, align 8, !tbaa !5
  %7957 = getelementptr inbounds %class.anon.548, ptr %647, i32 0, i32 1
  %7958 = load ptr, ptr %90, align 8, !tbaa !5
  store ptr %7958, ptr %7957, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_48vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %646, ptr noundef nonnull align 8 dereferenceable(16) %647) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %7955, ptr noundef %646)
          to label %7959 unwind label %7964

7959:                                             ; preds = %7954
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %646) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %647) #10
  br label %7968

7960:                                             ; preds = %7935
  %7961 = landingpad { ptr, i32 }
          cleanup
  %7962 = extractvalue { ptr, i32 } %7961, 0
  store ptr %7962, ptr %11, align 8
  %7963 = extractvalue { ptr, i32 } %7961, 1
  store i32 %7963, ptr %12, align 4
  br label %8037

7964:                                             ; preds = %7954
  %7965 = landingpad { ptr, i32 }
          cleanup
  %7966 = extractvalue { ptr, i32 } %7965, 0
  store ptr %7966, ptr %11, align 8
  %7967 = extractvalue { ptr, i32 } %7965, 1
  store i32 %7967, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %646) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %647) #10
  br label %8037

7968:                                             ; preds = %7959, %7945
  br label %7969

7969:                                             ; preds = %7968
  br label %7970

7970:                                             ; preds = %7969
  call void @llvm.lifetime.start.p0(i64 4, ptr %648) #10
  %7971 = load ptr, ptr %643, align 8, !tbaa !5
  %7972 = getelementptr inbounds %"struct.MIR::Terminator::Data_Switch", ptr %7971, i32 0, i32 1
  %7973 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %644) #10
  %7974 = getelementptr inbounds %"struct.std::pair.545", ptr %7973, i32 0, i32 1
  %7975 = load i32, ptr %7974, align 8, !tbaa !220
  %7976 = zext i32 %7975 to i64
  %7977 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %7972, i64 noundef %7976)
          to label %7978 unwind label %8012

7978:                                             ; preds = %7970
  %7979 = load i32, ptr %7977, align 4, !tbaa !11
  store i32 %7979, ptr %648, align 4, !tbaa !11
  br label %7980

7980:                                             ; preds = %7978
  %7981 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %7982 unwind label %8012

7982:                                             ; preds = %7980
  br i1 %7981, label %7983, label %8016

7983:                                             ; preds = %7982
  %7984 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %7985 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %7984, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %7986 unwind label %8012

7986:                                             ; preds = %7983
  %7987 = load ptr, ptr %3, align 8, !tbaa !5
  %7988 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %7985, ptr noundef nonnull align 8 dereferenceable(120) %7987)
          to label %7989 unwind label %8012

7989:                                             ; preds = %7986
  %7990 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %7988, ptr noundef @.str.92)
          to label %7991 unwind label %8012

7991:                                             ; preds = %7989
  %7992 = load ptr, ptr %90, align 8, !tbaa !5
  %7993 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %7992, i32 0, i32 1
  %7994 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %7990, ptr noundef nonnull align 8 dereferenceable(168) %7993)
          to label %7995 unwind label %8012

7995:                                             ; preds = %7991
  %7996 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %7994, ptr noundef @.str.93)
          to label %7997 unwind label %8012

7997:                                             ; preds = %7995
  %7998 = load i32, ptr %648, align 4, !tbaa !11
  %7999 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %7996, i32 noundef %7998)
          to label %8000 unwind label %8012

8000:                                             ; preds = %7997
  %8001 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %7999, ptr noundef @.str.94)
          to label %8002 unwind label %8012

8002:                                             ; preds = %8000
  %8003 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %644) #10
  %8004 = getelementptr inbounds %"struct.std::pair.545", ptr %8003, i32 0, i32 1
  %8005 = load i32, ptr %8004, align 8, !tbaa !220
  %8006 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %8001, i32 noundef %8005)
          to label %8007 unwind label %8012

8007:                                             ; preds = %8002
  %8008 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %8006, ptr noundef @_ZSt3decRSt8ios_base)
          to label %8009 unwind label %8012

8009:                                             ; preds = %8007
  %8010 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %8008, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %8011 unwind label %8012

8011:                                             ; preds = %8009
  br label %8016

8012:                                             ; preds = %8009, %8007, %8002, %8000, %7997, %7995, %7991, %7989, %7986, %7983, %7980, %7970
  %8013 = landingpad { ptr, i32 }
          cleanup
  %8014 = extractvalue { ptr, i32 } %8013, 0
  store ptr %8014, ptr %11, align 8
  %8015 = extractvalue { ptr, i32 } %8013, 1
  store i32 %8015, ptr %12, align 4
  br label %8034

8016:                                             ; preds = %8011, %7982
  br label %8017

8017:                                             ; preds = %8016
  br label %8018

8018:                                             ; preds = %8017
  call void @llvm.lifetime.start.p0(i64 168, ptr %649) #10
  %8019 = load i32, ptr %648, align 4, !tbaa !11
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %649, i32 noundef %8019)
          to label %8020 unwind label %8025

8020:                                             ; preds = %8018
  %8021 = load ptr, ptr %90, align 8, !tbaa !5
  %8022 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8021, i32 0, i32 1
  %8023 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %8022, ptr noundef nonnull align 8 dereferenceable(168) %649)
          to label %8024 unwind label %8029

8024:                                             ; preds = %8020
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %649) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %649) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %648) #10
  br label %8035

8025:                                             ; preds = %8018
  %8026 = landingpad { ptr, i32 }
          cleanup
  %8027 = extractvalue { ptr, i32 } %8026, 0
  store ptr %8027, ptr %11, align 8
  %8028 = extractvalue { ptr, i32 } %8026, 1
  store i32 %8028, ptr %12, align 4
  br label %8033

8029:                                             ; preds = %8020
  %8030 = landingpad { ptr, i32 }
          cleanup
  %8031 = extractvalue { ptr, i32 } %8030, 0
  store ptr %8031, ptr %11, align 8
  %8032 = extractvalue { ptr, i32 } %8030, 1
  store i32 %8032, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %649) #10
  br label %8033

8033:                                             ; preds = %8029, %8025
  call void @llvm.lifetime.end.p0(i64 168, ptr %649) #10
  br label %8034

8034:                                             ; preds = %8033, %8012
  call void @llvm.lifetime.end.p0(i64 4, ptr %648) #10
  br label %8037

8035:                                             ; preds = %8024, %7939
  call void @llvm.lifetime.end.p0(i64 8, ptr %644) #10
  br label %8036

8036:                                             ; preds = %8035
  store i8 0, ptr %642, align 1, !tbaa !9
  br label %7926, !llvm.loop !222

8037:                                             ; preds = %8034, %7964, %7960
  call void @llvm.lifetime.end.p0(i64 8, ptr %644) #10
  br label %8038

8038:                                             ; preds = %8037, %7931
  call void @llvm.lifetime.end.p0(i64 8, ptr %643) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %642) #10
  br label %8232

8039:                                             ; preds = %7930
  br label %8040

8040:                                             ; preds = %8039
  store i8 0, ptr %642, align 1, !tbaa !9
  br label %7917, !llvm.loop !223

8041:                                             ; preds = %7920
  br label %8229

8042:                                             ; preds = %7905
  call void @llvm.lifetime.start.p0(i64 1, ptr %650) #10
  store i8 1, ptr %650, align 1, !tbaa !9
  br label %8043

8043:                                             ; preds = %8179, %8042
  %8044 = load i8, ptr %650, align 1, !tbaa !9, !range !40, !noundef !41
  %8045 = trunc i8 %8044 to i1
  br i1 %8045, label %8047, label %8046

8046:                                             ; preds = %8043
  store i32 610, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %650) #10
  br label %8180

8047:                                             ; preds = %8043
  call void @llvm.lifetime.start.p0(i64 8, ptr %651) #10
  %8048 = load ptr, ptr %90, align 8, !tbaa !5
  %8049 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8048, i32 0, i32 1
  %8050 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %8049)
          to label %8051 unwind label %8057

8051:                                             ; preds = %8047
  store ptr %8050, ptr %651, align 8, !tbaa !5
  br label %8052

8052:                                             ; preds = %8175, %8051
  %8053 = load ptr, ptr %651, align 8, !tbaa !5
  %8054 = load i8, ptr %650, align 1, !tbaa !9, !range !40, !noundef !41
  %8055 = trunc i8 %8054 to i1
  br i1 %8055, label %8061, label %8056

8056:                                             ; preds = %8052
  store i32 613, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %651) #10
  br label %8178

8057:                                             ; preds = %8047
  %8058 = landingpad { ptr, i32 }
          cleanup
  %8059 = extractvalue { ptr, i32 } %8058, 0
  store ptr %8059, ptr %11, align 8
  %8060 = extractvalue { ptr, i32 } %8058, 1
  store i32 %8060, ptr %12, align 4
  br label %8177

8061:                                             ; preds = %8052
  call void @llvm.lifetime.start.p0(i64 8, ptr %652) #10
  %8062 = load ptr, ptr %651, align 8, !tbaa !5
  %8063 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8062, i32 0, i32 0
  %8064 = invoke ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48) %92, ptr noundef nonnull align 8 dereferenceable(32) %8063)
          to label %8065 unwind label %8081

8065:                                             ; preds = %8061
  %8066 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %652, i32 0, i32 0
  store ptr %8064, ptr %8066, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %653) #10
  %8067 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  %8068 = getelementptr inbounds %"struct.std::_Rb_tree_iterator.517", ptr %653, i32 0, i32 0
  store ptr %8067, ptr %8068, align 8
  %8069 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %652, ptr noundef nonnull align 8 dereferenceable(8) %653) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %653) #10
  br i1 %8069, label %8070, label %8174

8070:                                             ; preds = %8065
  %8071 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %652) #10
  %8072 = getelementptr inbounds %"struct.std::pair.518", ptr %8071, i32 0, i32 1
  %8073 = invoke noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %8072)
          to label %8074 unwind label %8081

8074:                                             ; preds = %8070
  br i1 %8073, label %8080, label %8075

8075:                                             ; preds = %8074
  %8076 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %652) #10
  %8077 = getelementptr inbounds %"struct.std::pair.518", ptr %8076, i32 0, i32 1
  %8078 = invoke noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %8077)
          to label %8079 unwind label %8081

8079:                                             ; preds = %8075
  br i1 %8078, label %8080, label %8085

8080:                                             ; preds = %8079, %8074
  br label %8173

8081:                                             ; preds = %8086, %8075, %8070, %8061
  %8082 = landingpad { ptr, i32 }
          cleanup
  %8083 = extractvalue { ptr, i32 } %8082, 0
  store ptr %8083, ptr %11, align 8
  %8084 = extractvalue { ptr, i32 } %8082, 1
  store i32 %8084, ptr %12, align 4
  br label %8176

8085:                                             ; preds = %8079
  br label %8086

8086:                                             ; preds = %8085
  %8087 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %652) #10
  %8088 = getelementptr inbounds %"struct.std::pair.518", ptr %8087, i32 0, i32 1
  %8089 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %8088)
          to label %8090 unwind label %8081

8090:                                             ; preds = %8086
  br i1 %8089, label %8099, label %8091

8091:                                             ; preds = %8090
  %8092 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %655) #10
  %8093 = getelementptr inbounds %class.anon.549, ptr %655, i32 0, i32 0
  store ptr %652, ptr %8093, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_49vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %654, ptr noundef nonnull align 8 dereferenceable(8) %655) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %8092, ptr noundef %654)
          to label %8094 unwind label %8095

8094:                                             ; preds = %8091
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %654) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %655) #10
  br label %8099

8095:                                             ; preds = %8091
  %8096 = landingpad { ptr, i32 }
          cleanup
  %8097 = extractvalue { ptr, i32 } %8096, 0
  store ptr %8097, ptr %11, align 8
  %8098 = extractvalue { ptr, i32 } %8096, 1
  store i32 %8098, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %654) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %655) #10
  br label %8176

8099:                                             ; preds = %8094, %8090
  br label %8100

8100:                                             ; preds = %8099
  br label %8101

8101:                                             ; preds = %8100
  call void @llvm.lifetime.start.p0(i64 4, ptr %656) #10
  %8102 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %652) #10
  %8103 = getelementptr inbounds %"struct.std::pair.518", ptr %8102, i32 0, i32 1
  %8104 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZN3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %8103)
          to label %8105 unwind label %8150

8105:                                             ; preds = %8101
  %8106 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %8104, i32 0, i32 0
  %8107 = load i8, ptr %8106, align 1, !tbaa !42, !range !40, !noundef !41
  %8108 = trunc i8 %8107 to i1
  br i1 %8108, label %8109, label %8113

8109:                                             ; preds = %8105
  %8110 = load ptr, ptr %651, align 8, !tbaa !5
  %8111 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8110, i32 0, i32 1
  %8112 = load i32, ptr %8111, align 8, !tbaa !224
  br label %8117

8113:                                             ; preds = %8105
  %8114 = load ptr, ptr %651, align 8, !tbaa !5
  %8115 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8114, i32 0, i32 2
  %8116 = load i32, ptr %8115, align 4, !tbaa !226
  br label %8117

8117:                                             ; preds = %8113, %8109
  %8118 = phi i32 [ %8112, %8109 ], [ %8116, %8113 ]
  store i32 %8118, ptr %656, align 4, !tbaa !11
  br label %8119

8119:                                             ; preds = %8117
  %8120 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %8121 unwind label %8150

8121:                                             ; preds = %8119
  br i1 %8120, label %8122, label %8154

8122:                                             ; preds = %8121
  %8123 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %8124 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %8123, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %8125 unwind label %8150

8125:                                             ; preds = %8122
  %8126 = load ptr, ptr %3, align 8, !tbaa !5
  %8127 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %8124, ptr noundef nonnull align 8 dereferenceable(120) %8126)
          to label %8128 unwind label %8150

8128:                                             ; preds = %8125
  %8129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %8127, ptr noundef @.str.92)
          to label %8130 unwind label %8150

8130:                                             ; preds = %8128
  %8131 = load ptr, ptr %90, align 8, !tbaa !5
  %8132 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8131, i32 0, i32 1
  %8133 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %8129, ptr noundef nonnull align 8 dereferenceable(168) %8132)
          to label %8134 unwind label %8150

8134:                                             ; preds = %8130
  %8135 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %8133, ptr noundef @.str.93)
          to label %8136 unwind label %8150

8136:                                             ; preds = %8134
  %8137 = load i32, ptr %656, align 4, !tbaa !11
  %8138 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %8135, i32 noundef %8137)
          to label %8139 unwind label %8150

8139:                                             ; preds = %8136
  %8140 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %8138, ptr noundef @.str.95)
          to label %8141 unwind label %8150

8141:                                             ; preds = %8139
  %8142 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %652) #10
  %8143 = getelementptr inbounds %"struct.std::pair.518", ptr %8142, i32 0, i32 1
  %8144 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %8140, ptr noundef nonnull align 8 dereferenceable(40) %8143)
          to label %8145 unwind label %8150

8145:                                             ; preds = %8141
  %8146 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %8144, ptr noundef @_ZSt3decRSt8ios_base)
          to label %8147 unwind label %8150

8147:                                             ; preds = %8145
  %8148 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %8146, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %8149 unwind label %8150

8149:                                             ; preds = %8147
  br label %8154

8150:                                             ; preds = %8147, %8145, %8141, %8139, %8136, %8134, %8130, %8128, %8125, %8122, %8119, %8101
  %8151 = landingpad { ptr, i32 }
          cleanup
  %8152 = extractvalue { ptr, i32 } %8151, 0
  store ptr %8152, ptr %11, align 8
  %8153 = extractvalue { ptr, i32 } %8151, 1
  store i32 %8153, ptr %12, align 4
  br label %8172

8154:                                             ; preds = %8149, %8121
  br label %8155

8155:                                             ; preds = %8154
  br label %8156

8156:                                             ; preds = %8155
  call void @llvm.lifetime.start.p0(i64 168, ptr %657) #10
  %8157 = load i32, ptr %656, align 4, !tbaa !11
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %657, i32 noundef %8157)
          to label %8158 unwind label %8163

8158:                                             ; preds = %8156
  %8159 = load ptr, ptr %90, align 8, !tbaa !5
  %8160 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8159, i32 0, i32 1
  %8161 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %8160, ptr noundef nonnull align 8 dereferenceable(168) %657)
          to label %8162 unwind label %8167

8162:                                             ; preds = %8158
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %657) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %657) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.end.p0(i64 4, ptr %656) #10
  br label %8173

8163:                                             ; preds = %8156
  %8164 = landingpad { ptr, i32 }
          cleanup
  %8165 = extractvalue { ptr, i32 } %8164, 0
  store ptr %8165, ptr %11, align 8
  %8166 = extractvalue { ptr, i32 } %8164, 1
  store i32 %8166, ptr %12, align 4
  br label %8171

8167:                                             ; preds = %8158
  %8168 = landingpad { ptr, i32 }
          cleanup
  %8169 = extractvalue { ptr, i32 } %8168, 0
  store ptr %8169, ptr %11, align 8
  %8170 = extractvalue { ptr, i32 } %8168, 1
  store i32 %8170, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %657) #10
  br label %8171

8171:                                             ; preds = %8167, %8163
  call void @llvm.lifetime.end.p0(i64 168, ptr %657) #10
  br label %8172

8172:                                             ; preds = %8171, %8150
  call void @llvm.lifetime.end.p0(i64 4, ptr %656) #10
  br label %8176

8173:                                             ; preds = %8162, %8080
  br label %8174

8174:                                             ; preds = %8173, %8065
  call void @llvm.lifetime.end.p0(i64 8, ptr %652) #10
  br label %8175

8175:                                             ; preds = %8174
  store i8 0, ptr %650, align 1, !tbaa !9
  br label %8052, !llvm.loop !227

8176:                                             ; preds = %8172, %8095, %8081
  call void @llvm.lifetime.end.p0(i64 8, ptr %652) #10
  br label %8177

8177:                                             ; preds = %8176, %8057
  call void @llvm.lifetime.end.p0(i64 8, ptr %651) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %650) #10
  br label %8232

8178:                                             ; preds = %8056
  br label %8179

8179:                                             ; preds = %8178
  store i8 0, ptr %650, align 1, !tbaa !9
  br label %8043, !llvm.loop !228

8180:                                             ; preds = %8046
  br label %8229

8181:                                             ; preds = %7905
  call void @llvm.lifetime.start.p0(i64 1, ptr %658) #10
  store i8 1, ptr %658, align 1, !tbaa !9
  br label %8182

8182:                                             ; preds = %8226, %8181
  %8183 = load i8, ptr %658, align 1, !tbaa !9, !range !40, !noundef !41
  %8184 = trunc i8 %8183 to i1
  br i1 %8184, label %8186, label %8185

8185:                                             ; preds = %8182
  store i32 620, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %658) #10
  br label %8227

8186:                                             ; preds = %8182
  call void @llvm.lifetime.start.p0(i64 8, ptr %659) #10
  %8187 = load ptr, ptr %90, align 8, !tbaa !5
  %8188 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8187, i32 0, i32 1
  %8189 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %8188)
          to label %8190 unwind label %8196

8190:                                             ; preds = %8186
  store ptr %8189, ptr %659, align 8, !tbaa !5
  br label %8191

8191:                                             ; preds = %8223, %8190
  %8192 = load ptr, ptr %659, align 8, !tbaa !5
  %8193 = load i8, ptr %658, align 1, !tbaa !9, !range !40, !noundef !41
  %8194 = trunc i8 %8193 to i1
  br i1 %8194, label %8200, label %8195

8195:                                             ; preds = %8191
  store i32 623, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %659) #10
  br label %8225

8196:                                             ; preds = %8186
  %8197 = landingpad { ptr, i32 }
          cleanup
  %8198 = extractvalue { ptr, i32 } %8197, 0
  store ptr %8198, ptr %11, align 8
  %8199 = extractvalue { ptr, i32 } %8197, 1
  store i32 %8199, ptr %12, align 4
  br label %8224

8200:                                             ; preds = %8191
  call void @llvm.lifetime.start.p0(i64 8, ptr %660) #10
  %8201 = load ptr, ptr %659, align 8, !tbaa !5
  %8202 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %8201, i32 0, i32 4
  store ptr %8202, ptr %660, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %661) #10
  %8203 = load ptr, ptr %660, align 8, !tbaa !5
  %8204 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8203) #10
  %8205 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %661, i32 0, i32 0
  store ptr %8204, ptr %8205, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %662) #10
  %8206 = load ptr, ptr %660, align 8, !tbaa !5
  %8207 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8206) #10
  %8208 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.215", ptr %662, i32 0, i32 0
  store ptr %8207, ptr %8208, align 8
  br label %8209

8209:                                             ; preds = %8216, %8200
  %8210 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %661, ptr noundef nonnull align 8 dereferenceable(8) %662) #10
  br i1 %8210, label %8212, label %8211

8211:                                             ; preds = %8209
  store i32 626, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %662) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %661) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %660) #10
  br label %8222

8212:                                             ; preds = %8209
  call void @llvm.lifetime.start.p0(i64 8, ptr %663) #10
  %8213 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %661) #10
  store ptr %8213, ptr %663, align 8, !tbaa !5
  %8214 = load ptr, ptr %663, align 8, !tbaa !5
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %96, ptr noundef nonnull align 8 dereferenceable(48) %8214)
          to label %8215 unwind label %8218

8215:                                             ; preds = %8212
  call void @llvm.lifetime.end.p0(i64 8, ptr %663) #10
  br label %8216

8216:                                             ; preds = %8215
  %8217 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %661) #10
  br label %8209

8218:                                             ; preds = %8212
  %8219 = landingpad { ptr, i32 }
          cleanup
  %8220 = extractvalue { ptr, i32 } %8219, 0
  store ptr %8220, ptr %11, align 8
  %8221 = extractvalue { ptr, i32 } %8219, 1
  store i32 %8221, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %663) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %662) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %661) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %660) #10
  br label %8224

8222:                                             ; preds = %8211
  br label %8223

8223:                                             ; preds = %8222
  store i8 0, ptr %658, align 1, !tbaa !9
  br label %8191, !llvm.loop !229

8224:                                             ; preds = %8218, %8196
  call void @llvm.lifetime.end.p0(i64 8, ptr %659) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %658) #10
  br label %8232

8225:                                             ; preds = %8195
  br label %8226

8226:                                             ; preds = %8225
  store i8 0, ptr %658, align 1, !tbaa !9
  br label %8182, !llvm.loop !230

8227:                                             ; preds = %8185
  br label %8229

8228:                                             ; preds = %7905
  br label %8229

8229:                                             ; preds = %8228, %8227, %8180, %8041
  call void @llvm.lifetime.end.p0(i64 24, ptr %97) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #10
  call void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %94) #10
  call void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %93) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %93) #10
  call void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %92) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #10
  br label %8230

8230:                                             ; preds = %8229
  %8231 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %88) #10
  br label %1591

8232:                                             ; preds = %8224, %8177, %8038, %7910, %7906, %7891
  call void @llvm.lifetime.end.p0(i64 24, ptr %97) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %96) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr %95) #10
  call void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %94) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %94) #10
  call void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %93) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %93) #10
  call void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %92) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr %92) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %91) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %90) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %89) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #10
  br label %8452

8233:                                             ; preds = %1593
  call void @llvm.lifetime.start.p0(i64 8, ptr %664) #10
  %8234 = load ptr, ptr %4, align 8, !tbaa !5
  %8235 = getelementptr inbounds %"class.MIR::Function", ptr %8234, i32 0, i32 2
  store ptr %8235, ptr %664, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %665) #10
  %8236 = load ptr, ptr %664, align 8, !tbaa !5
  %8237 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %8236) #10
  %8238 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %665, i32 0, i32 0
  store ptr %8237, ptr %8238, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %666) #10
  %8239 = load ptr, ptr %664, align 8, !tbaa !5
  %8240 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %8239) #10
  %8241 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %666, i32 0, i32 0
  store ptr %8240, ptr %8241, align 8
  br label %8242

8242:                                             ; preds = %8444, %8233
  %8243 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %665, ptr noundef nonnull align 8 dereferenceable(8) %666) #10
  br i1 %8243, label %8245, label %8244

8244:                                             ; preds = %8242
  store i32 628, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %666) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %665) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %664) #10
  br label %8449

8245:                                             ; preds = %8242
  call void @llvm.lifetime.start.p0(i64 8, ptr %667) #10
  %8246 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %665) #10
  store ptr %8246, ptr %667, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %668) #10
  %8247 = load ptr, ptr %667, align 8, !tbaa !5
  %8248 = load ptr, ptr %4, align 8, !tbaa !5
  %8249 = getelementptr inbounds %"class.MIR::Function", ptr %8248, i32 0, i32 2
  %8250 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %8249) #10
  %8251 = ptrtoint ptr %8247 to i64
  %8252 = ptrtoint ptr %8250 to i64
  %8253 = sub i64 %8251, %8252
  %8254 = sdiv exact i64 %8253, 192
  store i64 %8254, ptr %668, align 8, !tbaa !13
  %8255 = load ptr, ptr %667, align 8, !tbaa !5
  %8256 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8255, i32 0, i32 1
  %8257 = invoke noundef zeroext i1 @_ZNK3MIR10Terminator5is_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %8256)
          to label %8258 unwind label %8260

8258:                                             ; preds = %8245
  br i1 %8257, label %8264, label %8259

8259:                                             ; preds = %8258
  store i32 629, ptr %16, align 4
  br label %8438

8260:                                             ; preds = %8245
  %8261 = landingpad { ptr, i32 }
          cleanup
  %8262 = extractvalue { ptr, i32 } %8261, 0
  store ptr %8262, ptr %11, align 8
  %8263 = extractvalue { ptr, i32 } %8261, 1
  store i32 %8263, ptr %12, align 4
  br label %8448

8264:                                             ; preds = %8258
  call void @llvm.lifetime.start.p0(i64 8, ptr %669) #10
  %8265 = load ptr, ptr %667, align 8, !tbaa !5
  %8266 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8265, i32 0, i32 1
  %8267 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %8266)
          to label %8268 unwind label %8274

8268:                                             ; preds = %8264
  store ptr %8267, ptr %669, align 8, !tbaa !5
  %8269 = load ptr, ptr %669, align 8, !tbaa !5
  %8270 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8269, i32 0, i32 0
  %8271 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %8270)
          to label %8272 unwind label %8274

8272:                                             ; preds = %8268
  br i1 %8271, label %8273, label %8278

8273:                                             ; preds = %8272
  br label %8279

8274:                                             ; preds = %8268, %8264
  %8275 = landingpad { ptr, i32 }
          cleanup
  %8276 = extractvalue { ptr, i32 } %8275, 0
  store ptr %8276, ptr %11, align 8
  %8277 = extractvalue { ptr, i32 } %8275, 1
  store i32 %8277, ptr %12, align 4
  br label %8447

8278:                                             ; preds = %8272
  store i32 629, ptr %16, align 4
  br label %8437

8279:                                             ; preds = %8273
  call void @llvm.lifetime.start.p0(i64 8, ptr %670) #10
  %8280 = getelementptr inbounds %class.anon.550, ptr %670, i32 0, i32 0
  %8281 = load ptr, ptr %669, align 8, !tbaa !5
  store ptr %8281, ptr %8280, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %671) #10
  store i8 0, ptr %671, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 1, ptr %672) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr %673) #10
  %8282 = load ptr, ptr %667, align 8, !tbaa !5
  %8283 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8282, i32 0, i32 0
  %8284 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %8283) #10
  %8285 = trunc i64 %8284 to i32
  store i32 %8285, ptr %673, align 4, !tbaa !11
  br label %8286

8286:                                             ; preds = %8374, %8357, %8279
  %8287 = load i32, ptr %673, align 4, !tbaa !11
  %8288 = add i32 %8287, -1
  store i32 %8288, ptr %673, align 4, !tbaa !11
  %8289 = icmp ne i32 %8287, 0
  br i1 %8289, label %8291, label %8290

8290:                                             ; preds = %8286
  store i32 630, ptr %16, align 4
  br label %8375

8291:                                             ; preds = %8286
  %8292 = load ptr, ptr %667, align 8, !tbaa !5
  %8293 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8292, i32 0, i32 0
  %8294 = load i32, ptr %673, align 4, !tbaa !11
  %8295 = zext i32 %8294 to i64
  %8296 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8293, i64 noundef %8295) #10
  %8297 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %8296)
          to label %8298 unwind label %8312

8298:                                             ; preds = %8291
  br i1 %8297, label %8299, label %8360

8299:                                             ; preds = %8298
  call void @llvm.lifetime.start.p0(i64 8, ptr %674) #10
  %8300 = load ptr, ptr %667, align 8, !tbaa !5
  %8301 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8300, i32 0, i32 0
  %8302 = load i32, ptr %673, align 4, !tbaa !11
  %8303 = zext i32 %8302 to i64
  %8304 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8301, i64 noundef %8303) #10
  %8305 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %8304)
          to label %8306 unwind label %8316

8306:                                             ; preds = %8299
  store ptr %8305, ptr %674, align 8, !tbaa !5
  %8307 = load ptr, ptr %674, align 8, !tbaa !5
  %8308 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %8307, i32 0, i32 1
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_50vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %675, ptr noundef nonnull align 8 dereferenceable(8) %670) #10
  %8309 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR6RValueESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112) %8308, ptr noundef %675)
          to label %8310 unwind label %8320

8310:                                             ; preds = %8306
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %675) #10
  br i1 %8309, label %8311, label %8324

8311:                                             ; preds = %8310
  store i32 630, ptr %16, align 4
  br label %8357

8312:                                             ; preds = %8291
  %8313 = landingpad { ptr, i32 }
          cleanup
  %8314 = extractvalue { ptr, i32 } %8313, 0
  store ptr %8314, ptr %11, align 8
  %8315 = extractvalue { ptr, i32 } %8313, 1
  store i32 %8315, ptr %12, align 4
  br label %8376

8316:                                             ; preds = %8348, %8344, %8341, %8337, %8332, %8324, %8299
  %8317 = landingpad { ptr, i32 }
          cleanup
  %8318 = extractvalue { ptr, i32 } %8317, 0
  store ptr %8318, ptr %11, align 8
  %8319 = extractvalue { ptr, i32 } %8317, 1
  store i32 %8319, ptr %12, align 4
  br label %8359

8320:                                             ; preds = %8306
  %8321 = landingpad { ptr, i32 }
          cleanup
  %8322 = extractvalue { ptr, i32 } %8321, 0
  store ptr %8322, ptr %11, align 8
  %8323 = extractvalue { ptr, i32 } %8321, 1
  store i32 %8323, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %675) #10
  br label %8359

8324:                                             ; preds = %8310
  %8325 = load ptr, ptr %674, align 8, !tbaa !5
  %8326 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %8325, i32 0, i32 0
  %8327 = load ptr, ptr %669, align 8, !tbaa !5
  %8328 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8327, i32 0, i32 0
  %8329 = invoke noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %8326, ptr noundef nonnull align 8 dereferenceable(32) %8328)
          to label %8330 unwind label %8316

8330:                                             ; preds = %8324
  br i1 %8329, label %8331, label %8332

8331:                                             ; preds = %8330
  store i32 631, ptr %16, align 4
  br label %8357, !llvm.loop !231

8332:                                             ; preds = %8330
  %8333 = load ptr, ptr %674, align 8, !tbaa !5
  %8334 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %8333, i32 0, i32 1
  %8335 = invoke noundef zeroext i1 @_ZNK3MIR6RValue11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %8334)
          to label %8336 unwind label %8316

8336:                                             ; preds = %8332
  br i1 %8335, label %8337, label %8355

8337:                                             ; preds = %8336
  %8338 = load ptr, ptr %674, align 8, !tbaa !5
  %8339 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %8338, i32 0, i32 1
  %8340 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %8339)
          to label %8341 unwind label %8316

8341:                                             ; preds = %8337
  %8342 = invoke noundef zeroext i1 @_ZNK3MIR8Constant7is_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %8340)
          to label %8343 unwind label %8316

8343:                                             ; preds = %8341
  br i1 %8342, label %8344, label %8355

8344:                                             ; preds = %8343
  store i8 1, ptr %671, align 1, !tbaa !9
  %8345 = load ptr, ptr %674, align 8, !tbaa !5
  %8346 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %8345, i32 0, i32 1
  %8347 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %8346)
          to label %8348 unwind label %8316

8348:                                             ; preds = %8344
  %8349 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %8347)
          to label %8350 unwind label %8316

8350:                                             ; preds = %8348
  %8351 = getelementptr inbounds %"struct.MIR::Constant::Data_Bool", ptr %8349, i32 0, i32 0
  %8352 = load i8, ptr %8351, align 1, !tbaa !42, !range !40, !noundef !41
  %8353 = trunc i8 %8352 to i1
  %8354 = zext i1 %8353 to i8
  store i8 %8354, ptr %672, align 1, !tbaa !9
  br label %8356

8355:                                             ; preds = %8343, %8336
  store i8 0, ptr %671, align 1, !tbaa !9
  br label %8356

8356:                                             ; preds = %8355, %8350
  store i32 630, ptr %16, align 4
  br label %8357

8357:                                             ; preds = %8356, %8331, %8311
  call void @llvm.lifetime.end.p0(i64 8, ptr %674) #10
  %8358 = load i32, ptr %16, align 4
  switch i32 %8358, label %8375 [
    i32 631, label %8286
  ]

8359:                                             ; preds = %8320, %8316
  call void @llvm.lifetime.end.p0(i64 8, ptr %674) #10
  br label %8376

8360:                                             ; preds = %8298
  %8361 = load ptr, ptr %667, align 8, !tbaa !5
  %8362 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8361, i32 0, i32 0
  %8363 = load i32, ptr %673, align 4, !tbaa !11
  %8364 = zext i32 %8363 to i64
  %8365 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %8362, i64 noundef %8364) #10
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_50vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %676, ptr noundef nonnull align 8 dereferenceable(8) %670) #10
  %8366 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %8365, ptr noundef %676)
          to label %8367 unwind label %8369

8367:                                             ; preds = %8360
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %676) #10
  br i1 %8366, label %8368, label %8373

8368:                                             ; preds = %8367
  store i32 630, ptr %16, align 4
  br label %8375

8369:                                             ; preds = %8360
  %8370 = landingpad { ptr, i32 }
          cleanup
  %8371 = extractvalue { ptr, i32 } %8370, 0
  store ptr %8371, ptr %11, align 8
  %8372 = extractvalue { ptr, i32 } %8370, 1
  store i32 %8372, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %676) #10
  br label %8376

8373:                                             ; preds = %8367
  br label %8374

8374:                                             ; preds = %8373
  br label %8286, !llvm.loop !231

8375:                                             ; preds = %8368, %8357, %8290
  call void @llvm.lifetime.end.p0(i64 4, ptr %673) #10
  br label %8377

8376:                                             ; preds = %8369, %8359, %8312
  call void @llvm.lifetime.end.p0(i64 4, ptr %673) #10
  br label %8446

8377:                                             ; preds = %8375
  %8378 = load i8, ptr %671, align 1, !tbaa !9, !range !40, !noundef !41
  %8379 = trunc i8 %8378 to i1
  br i1 %8379, label %8380, label %8436

8380:                                             ; preds = %8377
  br label %8381

8381:                                             ; preds = %8380
  %8382 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %8383 unwind label %8403

8383:                                             ; preds = %8381
  br i1 %8382, label %8384, label %8407

8384:                                             ; preds = %8383
  %8385 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %8386 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %8385, ptr noundef @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %8387 unwind label %8403

8387:                                             ; preds = %8384
  %8388 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %8386, ptr noundef @.str.96)
          to label %8389 unwind label %8403

8389:                                             ; preds = %8387
  %8390 = load i64, ptr %668, align 8, !tbaa !13
  %8391 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8) %8388, i64 noundef %8390)
          to label %8392 unwind label %8403

8392:                                             ; preds = %8389
  %8393 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %8391, ptr noundef @.str.97)
          to label %8394 unwind label %8403

8394:                                             ; preds = %8392
  %8395 = load i8, ptr %672, align 1, !tbaa !9, !range !40, !noundef !41
  %8396 = trunc i8 %8395 to i1
  %8397 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEb(ptr noundef nonnull align 8 dereferenceable(8) %8393, i1 noundef zeroext %8396)
          to label %8398 unwind label %8403

8398:                                             ; preds = %8394
  %8399 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %8397, ptr noundef @_ZSt3decRSt8ios_base)
          to label %8400 unwind label %8403

8400:                                             ; preds = %8398
  %8401 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %8399, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %8402 unwind label %8403

8402:                                             ; preds = %8400
  br label %8407

8403:                                             ; preds = %8400, %8398, %8394, %8392, %8389, %8387, %8384, %8381
  %8404 = landingpad { ptr, i32 }
          cleanup
  %8405 = extractvalue { ptr, i32 } %8404, 0
  store ptr %8405, ptr %11, align 8
  %8406 = extractvalue { ptr, i32 } %8404, 1
  store i32 %8406, ptr %12, align 4
  br label %8446

8407:                                             ; preds = %8402, %8383
  br label %8408

8408:                                             ; preds = %8407
  br label %8409

8409:                                             ; preds = %8408
  call void @llvm.lifetime.start.p0(i64 168, ptr %677) #10
  %8410 = load i8, ptr %672, align 1, !tbaa !9, !range !40, !noundef !41
  %8411 = trunc i8 %8410 to i1
  br i1 %8411, label %8412, label %8416

8412:                                             ; preds = %8409
  %8413 = load ptr, ptr %669, align 8, !tbaa !5
  %8414 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8413, i32 0, i32 1
  %8415 = load i32, ptr %8414, align 8, !tbaa !224
  br label %8420

8416:                                             ; preds = %8409
  %8417 = load ptr, ptr %669, align 8, !tbaa !5
  %8418 = getelementptr inbounds %"struct.MIR::Terminator::Data_If", ptr %8417, i32 0, i32 2
  %8419 = load i32, ptr %8418, align 4, !tbaa !226
  br label %8420

8420:                                             ; preds = %8416, %8412
  %8421 = phi i32 [ %8415, %8412 ], [ %8419, %8416 ]
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind writable sret(%"class.MIR::Terminator") align 8 %677, i32 noundef %8421)
          to label %8422 unwind label %8427

8422:                                             ; preds = %8420
  %8423 = load ptr, ptr %667, align 8, !tbaa !5
  %8424 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %8423, i32 0, i32 1
  %8425 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %8424, ptr noundef nonnull align 8 dereferenceable(168) %677)
          to label %8426 unwind label %8431

8426:                                             ; preds = %8422
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %677) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr %677) #10
  store i8 1, ptr %5, align 1, !tbaa !9
  br label %8436

8427:                                             ; preds = %8420
  %8428 = landingpad { ptr, i32 }
          cleanup
  %8429 = extractvalue { ptr, i32 } %8428, 0
  store ptr %8429, ptr %11, align 8
  %8430 = extractvalue { ptr, i32 } %8428, 1
  store i32 %8430, ptr %12, align 4
  br label %8435

8431:                                             ; preds = %8422
  %8432 = landingpad { ptr, i32 }
          cleanup
  %8433 = extractvalue { ptr, i32 } %8432, 0
  store ptr %8433, ptr %11, align 8
  %8434 = extractvalue { ptr, i32 } %8432, 1
  store i32 %8434, ptr %12, align 4
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %677) #10
  br label %8435

8435:                                             ; preds = %8431, %8427
  call void @llvm.lifetime.end.p0(i64 168, ptr %677) #10
  br label %8446

8436:                                             ; preds = %8426, %8377
  call void @llvm.lifetime.end.p0(i64 1, ptr %672) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %671) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %670) #10
  store i32 0, ptr %16, align 4
  br label %8437

8437:                                             ; preds = %8436, %8278
  call void @llvm.lifetime.end.p0(i64 8, ptr %669) #10
  br label %8438

8438:                                             ; preds = %8437, %8259
  call void @llvm.lifetime.end.p0(i64 8, ptr %668) #10
  %8439 = load i32, ptr %16, align 4
  switch i32 %8439, label %8441 [
    i32 0, label %8440
  ]

8440:                                             ; preds = %8438
  store i32 0, ptr %16, align 4
  br label %8441

8441:                                             ; preds = %8440, %8438
  call void @llvm.lifetime.end.p0(i64 8, ptr %667) #10
  %8442 = load i32, ptr %16, align 4
  switch i32 %8442, label %8459 [
    i32 0, label %8443
    i32 629, label %8444
  ]

8443:                                             ; preds = %8441
  br label %8444

8444:                                             ; preds = %8443, %8441
  %8445 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %665) #10
  br label %8242

8446:                                             ; preds = %8435, %8403, %8376
  call void @llvm.lifetime.end.p0(i64 1, ptr %672) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %671) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %670) #10
  br label %8447

8447:                                             ; preds = %8446, %8274
  call void @llvm.lifetime.end.p0(i64 8, ptr %669) #10
  br label %8448

8448:                                             ; preds = %8447, %8260
  call void @llvm.lifetime.end.p0(i64 8, ptr %668) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %667) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %666) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %665) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr %664) #10
  br label %8452

8449:                                             ; preds = %8244
  %8450 = load i8, ptr %5, align 1, !tbaa !9, !range !40, !noundef !41
  %8451 = trunc i8 %8450 to i1
  store i32 1, ptr %16, align 4
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #10
  ret i1 %8451

8452:                                             ; preds = %8448, %8232, %1581
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #10
  br label %8453

8453:                                             ; preds = %8452, %698
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #10
  br label %8454

8454:                                             ; preds = %8453
  %8455 = load ptr, ptr %11, align 8
  %8456 = load i32, ptr %12, align 4
  %8457 = insertvalue { ptr, i32 } poison, ptr %8455, 0
  %8458 = insertvalue { ptr, i32 } %8457, i32 %8456, 1
  resume { ptr, i32 } %8458

8459:                                             ; preds = %8441, %7914, %6659, %6541, %6366, %5659, %5359, %2408, %2247, %1574
  unreachable
}

declare void @_Z12MIR_Dump_FcnRSoRKN3MIR8FunctionEj(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(96), i32 noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR10Terminator9as_SwitchEv(ptr noundef nonnull align 8 dereferenceable(168)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #6

declare noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef, ptr noundef) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3decRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #6

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(152)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #8

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef nonnull align 8 dereferenceable(168)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(152)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120), i32 noundef) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(120)) #2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(168)) #1

declare ptr @__cxa_allocate_exception(i64)

declare void @__cxa_throw(ptr, ptr, ptr)

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR11TypeResolve15get_lvalue_typeERN3HIR7TypeRefERKNS_6LValueEj(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR5Param9is_LValueEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_5ParamE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(48)) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR5Param9as_LValueEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValueC2ENS_6LValueE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Statement") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind noalias writable sret(%"class.MIR::Terminator") align 8, i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8, ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZN3MIR9StatementaSEOS0_(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(152)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR10TerminatorESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef) #2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120), i32 noundef, i32 noundef) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK9FmtLambda(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #2

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR11TypeResolve17set_cur_stmt_termERKNS_10BasicBlockE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(192)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10CallTarget12is_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR10CallTarget12as_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #2 align 2

declare noundef zeroext i1 @_Z16Target_GetSizeOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i64 noundef) unnamed_addr #5 align 2

declare noundef zeroext i1 @_Z24Target_GetSizeAndAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERmS9_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

declare noundef zeroext i1 @_Z17Target_GetAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

declare noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKNS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR5Param10opt_LValueEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValue12make_DstMetaENS0_12Data_DstMetaE(ptr dead_on_unwind noalias writable sret(%"class.MIR::RValue") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

declare noundef zeroext i1 @_Z13visit_ty_withRKN3HIR7TypeRefESt8functionIFbS2_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbRKN3HIR7TypeRefEEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS7_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

declare noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind noalias writable sret(%"class.MIR::RValue") align 8, ptr noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, i8) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK3$_5clERKNS_6LValueE"(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(112)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZN3MIR6RValue13as_SizedArrayEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant13make_ItemAddrESt10unique_ptrIN3HIR4PathESt14default_deleteIS3_EE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrIN3HIR4PathEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.157") align 8, ptr noundef nonnull align 8 dereferenceable(88)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6LValue7Storage9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE5eraseERS6_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5eraseERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue7as_CastEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3HIR8TypeData13opt_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant8opt_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef, i64, i64) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant7opt_IntEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant8opt_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant9opt_FloatEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8) #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef, i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4S128C2E4U128(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4S128C2El(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5countERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE2atERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR8TypeData12is_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16)) #5 align 2

declare noundef zeroext i1 @_ZNK3HIR4Enum8is_valueEv(ptr noundef nonnull align 8 dereferenceable(200)) #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

declare noundef i32 @_ZNK3HIR4Enum9get_valueEm(ptr noundef nonnull align 8 dereferenceable(200), i64 noundef) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #6 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(40)) #1

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(112)) #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(104) ptr @_ZN3MIR6RValue8as_BinOpEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstanteqERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantltERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantleERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantgtERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantgeERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, double, i32) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128plES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128plES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128miES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128miES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_19vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_20vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_21vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128mlES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_22vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128mlES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_23vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_24vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_25vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4S128eqEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128dvES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_26vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128dvES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_27vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_28vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4S128neEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_29vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128rmES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_30vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4U128neEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_31vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128rmES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_32vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_33vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128anES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_34vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128anES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_35vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_36vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128orES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_37vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128orES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_38vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_39vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128eoES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_40vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128eoES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4U128C2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_41vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4U128leEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_42vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK4U12812truncate_u64Ev(ptr noundef nonnull align 8 dereferenceable(16)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128lsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128lsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_43vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_44vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128rsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128rsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR5ParamC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR5ParamneERKS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR5Param3tagEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN3MIR6RValue8as_UniOpEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128coEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_45vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128coEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_46vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128ngEv(ptr noundef nonnull align 8 dereferenceable(16)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt5isnand(double noundef) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue10as_DstMetaEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue9as_DstPtrEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(96) ptr @_ZN3MIR6RValue10as_MakeDstEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6RValue15as_UnionVariantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(64) ptr @_ZN3MIR6RValue14as_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR6RValue9as_StructEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR9Statement15opt_SetDropFlagEv(ptr noundef nonnull align 8 dereferenceable(152)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE6insertIS2_IjbEEENSt9enable_ifIXsr16is_constructibleIS4_T_EE5valueES2_ISt17_Rb_tree_iteratorIS4_EbEE4typeEOSA_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(5)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRKjRKbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) #2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE4findERS3_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKjbEES5_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRKjbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKjbEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR9Statement8opt_DropEv(ptr noundef nonnull align 8 dereferenceable(152)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR9Statement13make_ScopeEndENS0_13Data_ScopeEndE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Statement") align 8, ptr noundef) #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9Statement13Data_ScopeEndD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_47vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3MIR6RValue12opt_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE6insertIS5_IS1_S2_EEENSt9enable_ifIXsr16is_constructibleIS7_T_EE5valueES5_ISt17_Rb_tree_iteratorIS7_EbEE4typeEOSD_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(72)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueENS0_8ConstantEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.536") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(40)) #2

declare void @_ZNK3MIR8Constant5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8, ptr noundef nonnull align 8 dereferenceable(40)) #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3MIR6RValue15opt_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE6insertIS4_IS1_jEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(36)) #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueERKjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.542") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4)) #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3MIR6RValue7opt_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueERjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.542") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4)) #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_48vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant7is_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_49vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZN3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10Terminator5is_IfEv(ptr noundef nonnull align 8 dereferenceable(168)) #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR6RValueESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_50vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6RValue11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }
attributes #12 = { noreturn }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"bool", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !6, i64 8}
!16 = !{!"_ZTSN3MIR11TypeResolveE", !12, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !17, i64 32, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !12, i64 112, !12, i64 116}
!17 = !{!"_ZTS9FmtLambda", !18, i64 0}
!18 = !{!"_ZTSSt8functionIFvRSoEE", !19, i64 0, !6, i64 24}
!19 = !{!"_ZTSSt14_Function_base", !7, i64 0, !6, i64 16}
!20 = !{!16, !6, i64 16}
!21 = !{!22, !24, i64 16}
!22 = !{!"_ZTSN3MIR8Constant9Data_UintE", !23, i64 0, !24, i64 16}
!23 = !{!"_ZTS4U128", !14, i64 0, !14, i64 8}
!24 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!25 = !{!26, !12, i64 0}
!26 = !{!"_ZTSN3MIR10Terminator9Data_CallE", !12, i64 0, !12, i64 4, !27, i64 8, !33, i64 40, !35, i64 136}
!27 = !{!"_ZTSN3MIR6LValueE", !28, i64 0, !29, i64 8}
!28 = !{!"_ZTSN3MIR6LValue7StorageE", !14, i64 0}
!29 = !{!"_ZTSSt6vectorIN3MIR6LValue7WrapperESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSN3MIR10CallTargetE", !34, i64 0, !7, i64 8}
!34 = !{!"_ZTSN3MIR10CallTarget3TagE", !7, i64 0}
!35 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!24, !24, i64 0}
!40 = !{i8 0, i8 2}
!41 = !{}
!42 = !{!43, !10, i64 0}
!43 = !{!"_ZTSN3MIR8Constant9Data_BoolE", !10, i64 0}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = distinct !{!46, !45}
!47 = distinct !{!47, !45}
!48 = distinct !{!48, !45}
!49 = distinct !{!49, !45}
!50 = distinct !{!50, !45}
!51 = !{!52, !53, i64 0}
!52 = !{!"_ZTSN3MIR6RValue11Data_BorrowE", !53, i64 0, !27, i64 8}
!53 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!54 = distinct !{!54, !45}
!55 = distinct !{!55, !45}
!56 = !{i64 0, i64 8, !13, i64 8, i64 8, !13}
!57 = !{!58, !59, i64 0}
!58 = !{!"_ZTSN3MIR8Constant10Data_FloatE", !59, i64 0, !24, i64 8}
!59 = !{!"double", !7, i64 0}
!60 = !{!61, !24, i64 16}
!61 = !{!"_ZTSN3MIR8Constant8Data_IntE", !62, i64 0, !24, i64 16}
!62 = !{!"_ZTS4S128", !23, i64 0}
!63 = distinct !{!63, !45}
!64 = distinct !{!64, !45}
!65 = !{!66, !69, i64 48}
!66 = !{!"_ZTSN3MIR6RValue10Data_BinOpE", !67, i64 0, !69, i64 48, !67, i64 56}
!67 = !{!"_ZTSN3MIR5ParamE", !68, i64 0, !7, i64 8}
!68 = !{!"_ZTSN3MIR5Param3TagE", !7, i64 0}
!69 = !{!"_ZTSN3MIR6eBinOpE", !7, i64 0}
!70 = !{!58, !24, i64 8}
!71 = distinct !{!71, !45}
!72 = distinct !{!72, !45}
!73 = distinct !{!73, !45}
!74 = distinct !{!74, !45}
!75 = distinct !{!75, !45}
!76 = distinct !{!76, !45}
!77 = distinct !{!77, !45}
!78 = distinct !{!78, !45}
!79 = distinct !{!79, !45}
!80 = distinct !{!80, !45}
!81 = distinct !{!81, !45}
!82 = distinct !{!82, !45}
!83 = distinct !{!83, !45}
!84 = distinct !{!84, !45}
!85 = distinct !{!85, !45}
!86 = distinct !{!86, !45}
!87 = distinct !{!87, !45}
!88 = distinct !{!88, !45}
!89 = distinct !{!89, !45}
!90 = distinct !{!90, !45}
!91 = distinct !{!91, !45}
!92 = distinct !{!92, !45}
!93 = distinct !{!93, !45}
!94 = distinct !{!94, !45}
!95 = distinct !{!95, !45}
!96 = distinct !{!96, !45}
!97 = distinct !{!97, !45}
!98 = distinct !{!98, !45}
!99 = distinct !{!99, !45}
!100 = distinct !{!100, !45}
!101 = distinct !{!101, !45}
!102 = distinct !{!102, !45}
!103 = distinct !{!103, !45}
!104 = distinct !{!104, !45}
!105 = distinct !{!105, !45}
!106 = distinct !{!106, !45}
!107 = distinct !{!107, !45}
!108 = distinct !{!108, !45}
!109 = distinct !{!109, !45}
!110 = distinct !{!110, !45}
!111 = distinct !{!111, !45}
!112 = distinct !{!112, !45}
!113 = distinct !{!113, !45}
!114 = distinct !{!114, !45}
!115 = distinct !{!115, !45}
!116 = distinct !{!116, !45}
!117 = distinct !{!117, !45}
!118 = distinct !{!118, !45}
!119 = distinct !{!119, !45}
!120 = distinct !{!120, !45}
!121 = distinct !{!121, !45}
!122 = distinct !{!122, !45}
!123 = distinct !{!123, !45}
!124 = distinct !{!124, !45}
!125 = distinct !{!125, !45}
!126 = distinct !{!126, !45}
!127 = distinct !{!127, !45}
!128 = distinct !{!128, !45}
!129 = distinct !{!129, !45}
!130 = distinct !{!130, !45}
!131 = distinct !{!131, !45}
!132 = distinct !{!132, !45}
!133 = distinct !{!133, !45}
!134 = distinct !{!134, !45}
!135 = distinct !{!135, !45}
!136 = distinct !{!136, !45}
!137 = distinct !{!137, !45}
!138 = distinct !{!138, !45}
!139 = distinct !{!139, !45}
!140 = distinct !{!140, !45}
!141 = distinct !{!141, !45}
!142 = distinct !{!142, !45}
!143 = distinct !{!143, !45}
!144 = distinct !{!144, !45}
!145 = distinct !{!145, !45}
!146 = distinct !{!146, !45}
!147 = distinct !{!147, !45}
!148 = distinct !{!148, !45}
!149 = distinct !{!149, !45}
!150 = distinct !{!150, !45}
!151 = distinct !{!151, !45}
!152 = distinct !{!152, !45}
!153 = distinct !{!153, !45}
!154 = distinct !{!154, !45}
!155 = distinct !{!155, !45}
!156 = distinct !{!156, !45}
!157 = distinct !{!157, !45}
!158 = distinct !{!158, !45}
!159 = distinct !{!159, !45}
!160 = distinct !{!160, !45}
!161 = distinct !{!161, !45}
!162 = distinct !{!162, !45}
!163 = distinct !{!163, !45}
!164 = distinct !{!164, !45}
!165 = distinct !{!165, !45}
!166 = distinct !{!166, !45}
!167 = !{!168, !169, i64 32}
!168 = !{!"_ZTSN3MIR6RValue10Data_UniOpE", !27, i64 0, !169, i64 32}
!169 = !{!"_ZTSN3MIR6eUniOpE", !7, i64 0}
!170 = distinct !{!170, !45}
!171 = distinct !{!171, !45}
!172 = distinct !{!172, !45}
!173 = distinct !{!173, !45}
!174 = distinct !{!174, !45}
!175 = distinct !{!175, !45}
!176 = distinct !{!176, !45}
!177 = distinct !{!177, !45}
!178 = distinct !{!178, !45}
!179 = distinct !{!179, !45}
!180 = distinct !{!180, !45}
!181 = distinct !{!181, !45}
!182 = distinct !{!182, !45}
!183 = distinct !{!183, !45}
!184 = distinct !{!184, !45}
!185 = distinct !{!185, !45}
!186 = distinct !{!186, !45}
!187 = distinct !{!187, !45}
!188 = distinct !{!188, !45}
!189 = distinct !{!189, !45}
!190 = distinct !{!190, !45}
!191 = distinct !{!191, !45}
!192 = distinct !{!192, !45}
!193 = distinct !{!193, !45}
!194 = distinct !{!194, !45}
!195 = distinct !{!195, !45}
!196 = distinct !{!196, !45}
!197 = distinct !{!197, !45}
!198 = distinct !{!198, !45}
!199 = distinct !{!199, !45}
!200 = distinct !{!200, !45}
!201 = distinct !{!201, !45}
!202 = distinct !{!202, !45}
!203 = distinct !{!203, !45}
!204 = distinct !{!204, !45}
!205 = distinct !{!205, !45}
!206 = distinct !{!206, !45}
!207 = distinct !{!207, !45}
!208 = distinct !{!208, !45}
!209 = distinct !{!209, !45}
!210 = distinct !{!210, !45}
!211 = distinct !{!211, !45}
!212 = !{!213, !12, i64 8}
!213 = !{!"_ZTSN3MIR9Statement16Data_SetDropFlagE", !12, i64 0, !10, i64 4, !12, i64 8}
!214 = !{!213, !10, i64 4}
!215 = !{!216, !10, i64 4}
!216 = !{!"_ZTSSt4pairIKjbE", !12, i64 0, !10, i64 4}
!217 = !{!218, !12, i64 40}
!218 = !{!"_ZTSN3MIR9Statement9Data_DropE", !219, i64 0, !27, i64 8, !12, i64 40}
!219 = !{!"_ZTSN3MIR9eDropKindE", !7, i64 0}
!220 = !{!221, !12, i64 32}
!221 = !{!"_ZTSSt4pairIKN3MIR6LValueEjE", !27, i64 0, !12, i64 32}
!222 = distinct !{!222, !45}
!223 = distinct !{!223, !45}
!224 = !{!225, !12, i64 32}
!225 = !{!"_ZTSN3MIR10Terminator7Data_IfE", !27, i64 0, !12, i64 32, !12, i64 36}
!226 = !{!225, !12, i64 36}
!227 = distinct !{!227, !45}
!228 = distinct !{!228, !45}
!229 = distinct !{!229, !45}
!230 = distinct !{!230, !45}
!231 = distinct !{!231, !45}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

%"class.std::basic_ostream" = type { ptr, %"class.std::basic_ios" }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"class.std::locale" = type { ptr }
%class.TraceLog = type { ptr, %"class.std::function" }
%"class.std::function" = type { %"class.std::_Function_base", ptr }
%"class.std::_Function_base" = type { %"union.std::_Any_data", ptr }
%"union.std::_Any_data" = type { %"union.std::_Nocopy_types" }
%"union.std::_Nocopy_types" = type { { i64, i64 } }
%class.anon.430 = type { i8 }
%class.anon.432 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%struct.FmtLambda = type { %"class.std::function" }
%class.anon.433 = type { ptr }
%"class.MIR::Constant" = type { i32, %"union.MIR::Constant::DataUnion" }
%"union.MIR::Constant::DataUnion" = type { %"class.std::__cxx11::basic_string" }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"struct.MIR::Constant::Data_Uint" = type <{ %class.U128, i32, [4 x i8] }>
%class.U128 = type { i64, i64 }
%"class.MIR::Statement" = type { i32, %"union.MIR::Statement::DataUnion" }
%"union.MIR::Statement::DataUnion" = type { %"struct.MIR::Statement::Data_Assign" }
%"struct.MIR::Statement::Data_Assign" = type { %"struct.MIR::LValue", %"class.MIR::RValue" }
%"struct.MIR::LValue" = type { %"class.MIR::LValue::Storage", %"class.std::vector.106" }
%"class.MIR::LValue::Storage" = type { i64 }
%"class.std::vector.106" = type { %"struct.std::_Vector_base.107" }
%"struct.std::_Vector_base.107" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::RValue" = type { i32, %"union.MIR::RValue::DataUnion" }
%"union.MIR::RValue::DataUnion" = type { %"struct.MIR::RValue::Data_BinOp" }
%"struct.MIR::RValue::Data_BinOp" = type { %"class.MIR::Param", i32, %"class.MIR::Param" }
%"class.MIR::Param" = type { i32, %"union.MIR::Param::DataUnion" }
%"union.MIR::Param::DataUnion" = type { %"struct.MIR::Param::Data_Borrow" }
%"struct.MIR::Param::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%"class.MIR::Terminator" = type { i32, %"union.MIR::Terminator::DataUnion" }
%"union.MIR::Terminator::DataUnion" = type { %"struct.MIR::Terminator::Data_Call" }
%"struct.MIR::Terminator::Data_Call" = type { i32, i32, %"struct.MIR::LValue", %"class.MIR::CallTarget", %"class.std::vector.138" }
%"class.MIR::CallTarget" = type { i32, %"union.MIR::CallTarget::DataUnion" }
%"union.MIR::CallTarget::DataUnion" = type { %"class.HIR::Path" }
%"class.HIR::Path" = type { %"class.HIR::Path::Data" }
%"class.HIR::Path::Data" = type { i32, %"union.HIR::Path::Data::DataUnion" }
%"union.HIR::Path::Data::DataUnion" = type { %"struct.HIR::Path::Data::Data_UfcsKnown" }
%"struct.HIR::Path::Data::Data_UfcsKnown" = type { %"class.HIR::TypeRef", %"class.HIR::GenericPath", %class.RcString, %"struct.HIR::PathParams", %"class.std::unique_ptr" }
%"class.HIR::TypeRef" = type { ptr }
%"class.HIR::GenericPath" = type { %"struct.HIR::SimplePath", %"struct.HIR::PathParams" }
%"struct.HIR::SimplePath" = type { %class.ThinVector }
%class.ThinVector = type { ptr }
%class.RcString = type { ptr }
%"struct.HIR::PathParams" = type { %class.ThinVector.133, %class.ThinVector.134, %class.ThinVector.135 }
%class.ThinVector.133 = type { ptr }
%class.ThinVector.134 = type { ptr }
%class.ThinVector.135 = type { ptr }
%"class.std::unique_ptr" = type { %"struct.std::__uniq_ptr_data" }
%"struct.std::__uniq_ptr_data" = type { %"class.std::__uniq_ptr_impl" }
%"class.std::__uniq_ptr_impl" = type { %"class.std::tuple" }
%"class.std::tuple" = type { %"struct.std::_Tuple_impl" }
%"struct.std::_Tuple_impl" = type { %"struct.std::_Head_base.137" }
%"struct.std::_Head_base.137" = type { ptr }
%"class.std::vector.138" = type { %"struct.std::_Vector_base.139" }
%"struct.std::_Vector_base.139" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Param, std::allocator<MIR::Param>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.434 = type { i8 }
%"struct.MIR::RValue::Data_DstMeta" = type { %"struct.MIR::LValue" }
%"class.std::function.436" = type { %"class.std::_Function_base", ptr }
%class.anon.439 = type { i8 }
%"class.std::map.441" = type { %"class.std::_Rb_tree.442" }
%"class.std::_Rb_tree.442" = type { %"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, MIR::Constant>, std::_Select1st<std::pair<const MIR::LValue, MIR::Constant>>, std::less<MIR::LValue>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, MIR::Constant>, std::_Select1st<std::pair<const MIR::LValue, MIR::Constant>>, std::less<MIR::LValue>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.std::map.447" = type { %"class.std::_Rb_tree.448" }
%"class.std::_Rb_tree.448" = type { %"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, unsigned int>, std::_Select1st<std::pair<const MIR::LValue, unsigned int>>, std::less<MIR::LValue>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<MIR::LValue, std::pair<const MIR::LValue, unsigned int>, std::_Select1st<std::pair<const MIR::LValue, unsigned int>>, std::less<MIR::LValue>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"class.std::map.452" = type { %"class.std::_Rb_tree.453" }
%"class.std::_Rb_tree.453" = type { %"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, bool>, std::_Select1st<std::pair<const unsigned int, bool>>, std::less<unsigned int>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<unsigned int, std::pair<const unsigned int, bool>, std::_Select1st<std::pair<const unsigned int, bool>>, std::less<unsigned int>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%class.anon.457 = type { ptr, ptr }
%class.anon.458 = type { ptr, ptr }
%class.anon.459 = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.148" = type { ptr }
%"class.std::function.267" = type { %"class.std::_Function_base", ptr }
%"class.std::unique_ptr.157" = type { %"struct.std::__uniq_ptr_data.158" }
%"struct.std::__uniq_ptr_data.158" = type { %"class.std::__uniq_ptr_impl.159" }
%"class.std::__uniq_ptr_impl.159" = type { %"class.std::tuple.160" }
%"class.std::tuple.160" = type { %"struct.std::_Tuple_impl.161" }
%"struct.std::_Tuple_impl.161" = type { %"struct.std::_Head_base.164" }
%"struct.std::_Head_base.164" = type { ptr }
%"struct.MIR::Constant::Data_Int" = type <{ %class.S128, i32, [4 x i8] }>
%class.S128 = type { %class.U128 }
%class.anon.460 = type { ptr }
%class.anon.461 = type { ptr }
%class.anon.478 = type { i8 }
%class.anon.480 = type { ptr }
%class.anon.481 = type { ptr, ptr }
%class.anon.482 = type { ptr, ptr }
%class.anon.483 = type { ptr, ptr }
%class.anon.484 = type { ptr, ptr }
%class.anon.485 = type { ptr, ptr }
%class.anon.486 = type { ptr, ptr }
%class.anon.487 = type { ptr, ptr }
%class.anon.488 = type { ptr, ptr }
%class.anon.489 = type { ptr, ptr }
%class.anon.490 = type { ptr, ptr }
%class.anon.491 = type { ptr, ptr }
%class.anon.492 = type { ptr, ptr }
%class.anon.493 = type { ptr, ptr }
%class.anon.494 = type { ptr, ptr }
%class.anon.495 = type { ptr, ptr }
%class.anon.496 = type { ptr, ptr }
%class.anon.497 = type { ptr, ptr }
%class.anon.498 = type { ptr, ptr }
%class.anon.499 = type { i8 }
%class.anon.501 = type { ptr, ptr }
%class.anon.502 = type { i8 }
%class.anon.504 = type { ptr, ptr }
%class.anon.505 = type { ptr, ptr }
%class.anon.506 = type { ptr, ptr }
%class.anon.507 = type { ptr, ptr }
%class.anon.508 = type { ptr, ptr }
%class.anon.509 = type { ptr, ptr }
%class.anon.510 = type { ptr, ptr }
%class.anon.511 = type { ptr, ptr }
%class.anon.512 = type { ptr, ptr }
%class.anon.513 = type { ptr, ptr, ptr }
%class.anon.514 = type { ptr, ptr }
%class.anon.515 = type { ptr, ptr, ptr }
%class.anon.516 = type { ptr, ptr }
%"struct.std::_Rb_tree_iterator.517" = type { ptr }
%class.anon.520 = type { ptr }
%class.anon.521 = type { ptr }
%"class.__gnu_cxx::__normal_iterator.215" = type { ptr }
%"struct.std::pair.526" = type <{ i32, i8, [3 x i8] }>
%"struct.std::_Rb_tree_iterator.524" = type { ptr }
%"struct.MIR::Statement::Data_ScopeEnd" = type { %"class.std::vector.111" }
%"class.std::vector.111" = type { %"struct.std::_Vector_base.112" }
%"struct.std::_Vector_base.112" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl" = type { %"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" }
%"struct.std::_Vector_base<unsigned int, std::allocator<unsigned int>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::function.226" = type { %"class.std::_Function_base", ptr }
%class.anon.532 = type { ptr, ptr }
%"struct.std::pair.536" = type { %"struct.MIR::LValue", %"class.MIR::Constant" }
%"struct.std::pair.542" = type <{ %"struct.MIR::LValue", i32, [4 x i8] }>
%"struct.std::_Rb_tree_iterator.540" = type { ptr }
%class.anon.548 = type { ptr, ptr }
%class.anon.549 = type { ptr }
%class.anon.550 = type { ptr }

@_ZSt4cout = external global %"class.std::basic_ostream", align 8
@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str.8 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [1 x i8], align 1
@_ZTIPKc = external constant ptr
@.str.28 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [4 x i8], align 1
@__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [28 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [11 x i8], align 1
@__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [74 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [44 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [62 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [25 x i8], align 1

declare i32 @__gxx_personality_v0(...)

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #0

declare noundef zeroext i1 @_Z13debug_enabledv() local_unnamed_addr #1

; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #0

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN9FmtLambdaC2ESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN9FmtLambdaD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: nounwind
declare void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #4

declare void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef, ptr noundef, ptr noundef) unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(96) %1) local_unnamed_addr #2 personality ptr @__gxx_personality_v0 {
  %3 = alloca i8, align 1
  %4 = alloca %class.TraceLog, align 8
  %5 = alloca %"class.std::function", align 8
  %6 = alloca %class.anon.430, align 1
  %7 = alloca %"class.std::function", align 8
  %8 = alloca %class.anon.432, align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %struct.FmtLambda, align 8
  %12 = alloca %"class.std::function", align 8
  %13 = alloca %class.anon.433, align 8
  %14 = alloca i64, align 8
  %15 = alloca %"class.MIR::Constant", align 8
  %16 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %17 = alloca %"class.MIR::Statement", align 8
  %18 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %19 = alloca %"class.MIR::Constant", align 8
  %20 = alloca %"class.MIR::Terminator", align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca %"class.MIR::Constant", align 8
  %24 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %25 = alloca %"class.MIR::Statement", align 8
  %26 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %27 = alloca %"class.MIR::Constant", align 8
  %28 = alloca %"class.MIR::Terminator", align 8
  %29 = alloca i64, align 8
  %30 = alloca %"class.MIR::Constant", align 8
  %31 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %32 = alloca %"class.MIR::Statement", align 8
  %33 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %34 = alloca %"class.MIR::Constant", align 8
  %35 = alloca %"class.MIR::Terminator", align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca %"class.MIR::Constant", align 8
  %39 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %40 = alloca %"class.MIR::Statement", align 8
  %41 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %42 = alloca %"class.MIR::Constant", align 8
  %43 = alloca %"class.MIR::Terminator", align 8
  %44 = alloca i32, align 4
  %45 = alloca i32, align 4
  %46 = alloca %"class.MIR::Statement", align 8
  %47 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %48 = alloca %"struct.MIR::LValue", align 8
  %49 = alloca %"class.MIR::Statement", align 8
  %50 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %51 = alloca %"class.MIR::Constant", align 8
  %52 = alloca %"class.MIR::Terminator", align 8
  %53 = alloca %"class.std::function", align 8
  %54 = alloca %class.anon.434, align 1
  %55 = alloca %"class.MIR::Statement", align 8
  %56 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %57 = alloca %"struct.MIR::RValue::Data_DstMeta", align 8
  %58 = alloca %"class.MIR::Terminator", align 8
  %59 = alloca %"class.std::function.436", align 8
  %60 = alloca %class.anon.439, align 1
  %61 = alloca %"class.MIR::Statement", align 8
  %62 = alloca %"struct.MIR::Statement::Data_Assign", align 8
  %63 = alloca %"class.MIR::Constant", align 8
  %64 = alloca %"class.MIR::Terminator", align 8
  %65 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %66 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %67 = alloca %"class.std::map.441", align 8
  %68 = alloca %"class.std::map.447", align 8
  %69 = alloca %"class.std::map.452", align 8
  %70 = alloca %class.anon.457, align 8
  %71 = alloca %class.anon.458, align 8
  %72 = alloca %class.anon.459, align 8
  %73 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %74 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %75 = alloca %"class.std::function.267", align 8
  %76 = alloca %"class.MIR::Constant", align 8
  %77 = alloca %"class.MIR::RValue", align 8
  %78 = alloca %"class.MIR::Constant", align 8
  %79 = alloca %"class.MIR::RValue", align 8
  %80 = alloca %"class.MIR::Constant", align 8
  %81 = alloca %"class.std::unique_ptr.157", align 8
  %82 = alloca %"class.MIR::Constant", align 8
  %83 = alloca %"class.MIR::Constant", align 8
  %84 = alloca %"class.MIR::Constant", align 8
  %85 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %86 = alloca %"class.MIR::Constant", align 8
  %87 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %88 = alloca %"class.MIR::Constant", align 8
  %89 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %90 = alloca %"class.MIR::Constant", align 8
  %91 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %92 = alloca %class.U128, align 8
  %93 = alloca %"class.MIR::Constant", align 8
  %94 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %95 = alloca %class.S128, align 8
  %96 = alloca %"class.MIR::Constant", align 8
  %97 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %98 = alloca %"class.MIR::Constant", align 8
  %99 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %100 = alloca ptr, align 8
  %101 = alloca %"class.std::function", align 8
  %102 = alloca %class.anon.460, align 8
  %103 = alloca %"class.std::function", align 8
  %104 = alloca %class.anon.461, align 8
  %105 = alloca %"class.HIR::TypeRef", align 8
  %106 = alloca %"class.std::function", align 8
  %107 = alloca %class.anon.478, align 1
  %108 = alloca %"class.MIR::Constant", align 8
  %109 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %110 = alloca %"class.MIR::Constant", align 8
  %111 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %112 = alloca %class.U128, align 8
  %113 = alloca ptr, align 8
  %114 = alloca %"class.std::function", align 8
  %115 = alloca %class.anon.480, align 8
  %116 = alloca %"class.MIR::Constant", align 8
  %117 = alloca %"class.MIR::RValue", align 8
  %118 = alloca %"class.MIR::Constant", align 8
  %119 = alloca %"class.MIR::Constant", align 8
  %120 = alloca %"class.MIR::Constant", align 8
  %121 = alloca %"class.MIR::Constant", align 8
  %122 = alloca %"class.MIR::Constant", align 8
  %123 = alloca %"class.MIR::Constant", align 8
  %124 = alloca %"class.MIR::Constant", align 8
  %125 = alloca %"class.MIR::Constant", align 8
  %126 = alloca %"class.std::function", align 8
  %127 = alloca %class.anon.481, align 8
  %128 = alloca %"class.std::function", align 8
  %129 = alloca %class.anon.482, align 8
  %130 = alloca %"class.MIR::Constant", align 8
  %131 = alloca %"class.std::function", align 8
  %132 = alloca %class.anon.483, align 8
  %133 = alloca %"class.MIR::Constant", align 8
  %134 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %135 = alloca %"class.std::function", align 8
  %136 = alloca %class.anon.484, align 8
  %137 = alloca %"class.MIR::Constant", align 8
  %138 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %139 = alloca %"class.std::function", align 8
  %140 = alloca %class.anon.485, align 8
  %141 = alloca %"class.std::function", align 8
  %142 = alloca %class.anon.486, align 8
  %143 = alloca %"class.MIR::Constant", align 8
  %144 = alloca %"class.std::function", align 8
  %145 = alloca %class.anon.487, align 8
  %146 = alloca %"class.MIR::Constant", align 8
  %147 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %148 = alloca %"class.std::function", align 8
  %149 = alloca %class.anon.488, align 8
  %150 = alloca %"class.MIR::Constant", align 8
  %151 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %152 = alloca %"class.std::function", align 8
  %153 = alloca %class.anon.489, align 8
  %154 = alloca %"class.std::function", align 8
  %155 = alloca %class.anon.490, align 8
  %156 = alloca %"class.MIR::Constant", align 8
  %157 = alloca %"class.std::function", align 8
  %158 = alloca %class.anon.491, align 8
  %159 = alloca %"class.MIR::Constant", align 8
  %160 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %161 = alloca %"class.std::function", align 8
  %162 = alloca %class.anon.492, align 8
  %163 = alloca %"class.MIR::Constant", align 8
  %164 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %165 = alloca %"class.std::function", align 8
  %166 = alloca %class.anon.493, align 8
  %167 = alloca %"class.std::function", align 8
  %168 = alloca %class.anon.494, align 8
  %169 = alloca %"class.MIR::Constant", align 8
  %170 = alloca %"class.std::function", align 8
  %171 = alloca %class.anon.495, align 8
  %172 = alloca %"class.MIR::Constant", align 8
  %173 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %174 = alloca %"class.std::function", align 8
  %175 = alloca %class.anon.496, align 8
  %176 = alloca %"class.MIR::Constant", align 8
  %177 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %178 = alloca %"class.std::function", align 8
  %179 = alloca %class.anon.497, align 8
  %180 = alloca %"class.std::function", align 8
  %181 = alloca %class.anon.498, align 8
  %182 = alloca %"class.std::function", align 8
  %183 = alloca %class.anon.499, align 1
  %184 = alloca %"class.MIR::Constant", align 8
  %185 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %186 = alloca %"class.std::function", align 8
  %187 = alloca %class.anon.501, align 8
  %188 = alloca %"class.std::function", align 8
  %189 = alloca %class.anon.502, align 1
  %190 = alloca %"class.MIR::Constant", align 8
  %191 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %192 = alloca %"class.std::function", align 8
  %193 = alloca %class.anon.504, align 8
  %194 = alloca %"class.MIR::Constant", align 8
  %195 = alloca %"class.std::function", align 8
  %196 = alloca %class.anon.505, align 8
  %197 = alloca %"class.MIR::Constant", align 8
  %198 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %199 = alloca %"class.std::function", align 8
  %200 = alloca %class.anon.506, align 8
  %201 = alloca %"class.MIR::Constant", align 8
  %202 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %203 = alloca %"class.std::function", align 8
  %204 = alloca %class.anon.507, align 8
  %205 = alloca %"class.MIR::Constant", align 8
  %206 = alloca %"class.std::function", align 8
  %207 = alloca %class.anon.508, align 8
  %208 = alloca %"class.MIR::Constant", align 8
  %209 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %210 = alloca %"class.std::function", align 8
  %211 = alloca %class.anon.509, align 8
  %212 = alloca %"class.MIR::Constant", align 8
  %213 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %214 = alloca %"class.std::function", align 8
  %215 = alloca %class.anon.510, align 8
  %216 = alloca %"class.MIR::Constant", align 8
  %217 = alloca %"class.std::function", align 8
  %218 = alloca %class.anon.511, align 8
  %219 = alloca %"class.MIR::Constant", align 8
  %220 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %221 = alloca %"class.std::function", align 8
  %222 = alloca %class.anon.512, align 8
  %223 = alloca %"class.MIR::Constant", align 8
  %224 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %225 = alloca %class.U128, align 8
  %226 = alloca ptr, align 8
  %227 = alloca %"class.std::function", align 8
  %228 = alloca %class.anon.513, align 8
  %229 = alloca %"class.std::function", align 8
  %230 = alloca %class.anon.514, align 8
  %231 = alloca %"class.MIR::Constant", align 8
  %232 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %233 = alloca %"class.MIR::Constant", align 8
  %234 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %235 = alloca %class.U128, align 8
  %236 = alloca ptr, align 8
  %237 = alloca %"class.std::function", align 8
  %238 = alloca %class.anon.515, align 8
  %239 = alloca %"class.std::function", align 8
  %240 = alloca %class.anon.516, align 8
  %241 = alloca %"class.MIR::Constant", align 8
  %242 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %243 = alloca %"class.MIR::Constant", align 8
  %244 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %245 = alloca %"class.MIR::Constant", align 8
  %246 = alloca %"class.MIR::RValue", align 8
  %247 = alloca %"class.MIR::Constant", align 8
  %248 = alloca %"class.MIR::Param", align 8
  %249 = alloca %"class.MIR::Param", align 8
  %250 = alloca %"class.MIR::Constant", align 8
  %251 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %252 = alloca %"class.MIR::Param", align 8
  %253 = alloca %"class.MIR::Constant", align 8
  %254 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %255 = alloca %"class.MIR::Param", align 8
  %256 = alloca %"class.MIR::Constant", align 8
  %257 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %258 = alloca %"class.MIR::Param", align 8
  %259 = alloca %"class.MIR::RValue", align 8
  %260 = alloca %"struct.MIR::LValue", align 8
  %261 = alloca %"class.MIR::RValue", align 8
  %262 = alloca %"class.MIR::Constant", align 8
  %263 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %264 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %265 = alloca %"class.MIR::Constant", align 8
  %266 = alloca %class.U128, align 8
  %267 = alloca ptr, align 8
  %268 = alloca %"class.std::function", align 8
  %269 = alloca %class.anon.520, align 8
  %270 = alloca %"class.MIR::Constant", align 8
  %271 = alloca %"struct.MIR::Constant::Data_Uint", align 8
  %272 = alloca %class.S128, align 8
  %273 = alloca ptr, align 8
  %274 = alloca %"class.std::function", align 8
  %275 = alloca %class.anon.521, align 8
  %276 = alloca %"class.MIR::Constant", align 8
  %277 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %278 = alloca %"class.MIR::Constant", align 8
  %279 = alloca %"class.MIR::Constant", align 8
  %280 = alloca %"struct.MIR::Constant::Data_Int", align 8
  %281 = alloca %"class.MIR::Constant", align 8
  %282 = alloca %"class.MIR::RValue", align 8
  %283 = alloca %"class.MIR::Constant", align 8
  %284 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %285 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %286 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %287 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %288 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %289 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %290 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %291 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %292 = alloca %"struct.std::pair.526", align 8
  %293 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %294 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %295 = alloca %"struct.std::pair.526", align 8
  %296 = alloca i8, align 1
  %297 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %298 = alloca %"struct.std::_Rb_tree_iterator.524", align 8
  %299 = alloca %"class.MIR::Statement", align 8
  %300 = alloca %"struct.MIR::Statement::Data_ScopeEnd", align 8
  %301 = alloca %"class.std::function.226", align 8
  %302 = alloca %class.anon.532, align 8
  %303 = alloca %"struct.std::pair.536", align 8
  %304 = alloca %"struct.MIR::LValue", align 8
  %305 = alloca %"class.MIR::Constant", align 8
  %306 = alloca %"struct.std::pair.542", align 8
  %307 = alloca %"struct.MIR::LValue", align 8
  %308 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %309 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %310 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %311 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %312 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %313 = alloca %"struct.std::pair.536", align 8
  %314 = alloca %"struct.MIR::LValue", align 8
  %315 = alloca %"class.MIR::Constant", align 8
  %316 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %317 = alloca %"struct.std::pair.542", align 8
  %318 = alloca %"struct.MIR::LValue", align 8
  %319 = alloca %"class.std::function.267", align 8
  %320 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %321 = alloca %"struct.std::_Rb_tree_iterator.540", align 8
  %322 = alloca %"class.std::function", align 8
  %323 = alloca %class.anon.548, align 8
  %324 = alloca %"class.MIR::Terminator", align 8
  %325 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %326 = alloca %"struct.std::_Rb_tree_iterator.517", align 8
  %327 = alloca %"class.std::function", align 8
  %328 = alloca %class.anon.549, align 8
  %329 = alloca %"class.MIR::Terminator", align 8
  %330 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %331 = alloca %"class.__gnu_cxx::__normal_iterator.215", align 8
  %332 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %333 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %334 = alloca %class.anon.550, align 8
  %335 = alloca %"class.std::function.226", align 8
  %336 = alloca %"class.std::function.226", align 8
  %337 = alloca %"class.MIR::Terminator", align 8
  %338 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  br i1 %338, label %339, label %340

339:                                              ; preds = %2
  tail call void @_Z12MIR_Dump_FcnRSoRKN3MIR8FunctionEj(ptr noundef nonnull align 8 dereferenceable(8) @_ZSt4cout, ptr noundef nonnull align 8 dereferenceable(96) %1, i32 noundef 0)
  br label %340

340:                                              ; preds = %339, %2
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #10
  store i8 0, ptr %3, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #10
  %341 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  %342 = select i1 %341, ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 1 dereferenceable(1) %6) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #10
  store ptr %3, ptr %8, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #10
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %4, ptr noundef %342, ptr noundef nonnull %5, ptr noundef nonnull %7)
          to label %343 unwind label %465

343:                                              ; preds = %340
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #10
  %344 = getelementptr inbounds i8, ptr %1, i64 64
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #10
  %345 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  store ptr %345, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #10
  %346 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  store ptr %346, ptr %10, align 8
  %347 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  br i1 %347, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %343
  %348 = getelementptr inbounds i8, ptr %0, i64 16
  %349 = getelementptr inbounds i8, ptr %0, i64 8
  %350 = getelementptr inbounds i8, ptr %62, i64 32
  %351 = getelementptr inbounds i8, ptr %56, i64 32
  %352 = getelementptr inbounds i8, ptr %47, i64 32
  %353 = getelementptr inbounds i8, ptr %50, i64 32
  %354 = getelementptr inbounds i8, ptr %39, i64 16
  %355 = getelementptr inbounds i8, ptr %41, i64 32
  %356 = getelementptr inbounds i8, ptr %31, i64 16
  %357 = getelementptr inbounds i8, ptr %33, i64 32
  %358 = getelementptr inbounds i8, ptr %24, i64 16
  %359 = getelementptr inbounds i8, ptr %26, i64 32
  %360 = getelementptr inbounds i8, ptr %16, i64 16
  %361 = getelementptr inbounds i8, ptr %18, i64 32
  br label %467

._crit_edge:                                      ; preds = %.critedge1942, %343
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #10
  %362 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  store ptr %362, ptr %65, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #10
  %363 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  store ptr %363, ptr %66, align 8
  %364 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %66) #10
  br i1 %364, label %.lr.ph23221, label %._crit_edge23222

.lr.ph23221:                                      ; preds = %._crit_edge
  %365 = getelementptr inbounds i8, ptr %70, i64 8
  %366 = getelementptr inbounds i8, ptr %71, i64 8
  %367 = getelementptr inbounds i8, ptr %72, i64 8
  %368 = getelementptr inbounds i8, ptr %72, i64 16
  %369 = getelementptr inbounds i8, ptr %280, i64 8
  %370 = getelementptr inbounds i8, ptr %280, i64 16
  %.sroa.5.0..sroa_idx = getelementptr inbounds i8, ptr %272, i64 8
  %371 = getelementptr inbounds i8, ptr %277, i64 16
  %.sroa.5201.0..sroa_idx = getelementptr inbounds i8, ptr %266, i64 8
  %372 = getelementptr inbounds i8, ptr %271, i64 16
  %373 = getelementptr inbounds i8, ptr %254, i64 16
  %374 = getelementptr inbounds i8, ptr %257, i64 16
  %375 = getelementptr inbounds i8, ptr %251, i64 16
  %.sroa.4.0..sroa_idx = getelementptr inbounds i8, ptr %235, i64 8
  %376 = getelementptr inbounds i8, ptr %240, i64 8
  %377 = getelementptr inbounds i8, ptr %244, i64 8
  %378 = getelementptr inbounds i8, ptr %244, i64 16
  %379 = getelementptr inbounds i8, ptr %242, i64 8
  %380 = getelementptr inbounds i8, ptr %242, i64 16
  %.sroa.4328.0..sroa_idx = getelementptr inbounds i8, ptr %225, i64 8
  %381 = getelementptr inbounds i8, ptr %230, i64 8
  %382 = getelementptr inbounds i8, ptr %234, i64 8
  %383 = getelementptr inbounds i8, ptr %234, i64 16
  %384 = getelementptr inbounds i8, ptr %232, i64 8
  %385 = getelementptr inbounds i8, ptr %232, i64 16
  %386 = getelementptr inbounds i8, ptr %215, i64 8
  %387 = getelementptr inbounds i8, ptr %222, i64 8
  %388 = getelementptr inbounds i8, ptr %224, i64 8
  %389 = getelementptr inbounds i8, ptr %224, i64 16
  %390 = getelementptr inbounds i8, ptr %218, i64 8
  %391 = getelementptr inbounds i8, ptr %220, i64 8
  %392 = getelementptr inbounds i8, ptr %220, i64 16
  %393 = getelementptr inbounds i8, ptr %204, i64 8
  %394 = getelementptr inbounds i8, ptr %211, i64 8
  %395 = getelementptr inbounds i8, ptr %213, i64 8
  %396 = getelementptr inbounds i8, ptr %213, i64 16
  %397 = getelementptr inbounds i8, ptr %207, i64 8
  %398 = getelementptr inbounds i8, ptr %209, i64 8
  %399 = getelementptr inbounds i8, ptr %209, i64 16
  %400 = getelementptr inbounds i8, ptr %193, i64 8
  %401 = getelementptr inbounds i8, ptr %200, i64 8
  %402 = getelementptr inbounds i8, ptr %202, i64 8
  %403 = getelementptr inbounds i8, ptr %202, i64 16
  %404 = getelementptr inbounds i8, ptr %196, i64 8
  %405 = getelementptr inbounds i8, ptr %198, i64 8
  %406 = getelementptr inbounds i8, ptr %198, i64 16
  %407 = getelementptr inbounds i8, ptr %179, i64 8
  %408 = getelementptr inbounds i8, ptr %187, i64 8
  %409 = getelementptr inbounds i8, ptr %191, i64 8
  %410 = getelementptr inbounds i8, ptr %191, i64 16
  %411 = getelementptr inbounds i8, ptr %181, i64 8
  %412 = getelementptr inbounds i8, ptr %185, i64 8
  %413 = getelementptr inbounds i8, ptr %185, i64 16
  %414 = getelementptr inbounds i8, ptr %166, i64 8
  %415 = getelementptr inbounds i8, ptr %175, i64 8
  %416 = getelementptr inbounds i8, ptr %177, i64 8
  %417 = getelementptr inbounds i8, ptr %177, i64 16
  %418 = getelementptr inbounds i8, ptr %171, i64 8
  %419 = getelementptr inbounds i8, ptr %173, i64 8
  %420 = getelementptr inbounds i8, ptr %173, i64 16
  %421 = getelementptr inbounds i8, ptr %168, i64 8
  %422 = getelementptr inbounds i8, ptr %153, i64 8
  %423 = getelementptr inbounds i8, ptr %162, i64 8
  %424 = getelementptr inbounds i8, ptr %164, i64 8
  %425 = getelementptr inbounds i8, ptr %164, i64 16
  %426 = getelementptr inbounds i8, ptr %158, i64 8
  %427 = getelementptr inbounds i8, ptr %160, i64 8
  %428 = getelementptr inbounds i8, ptr %160, i64 16
  %429 = getelementptr inbounds i8, ptr %155, i64 8
  %430 = getelementptr inbounds i8, ptr %140, i64 8
  %431 = getelementptr inbounds i8, ptr %149, i64 8
  %432 = getelementptr inbounds i8, ptr %151, i64 8
  %433 = getelementptr inbounds i8, ptr %151, i64 16
  %434 = getelementptr inbounds i8, ptr %145, i64 8
  %435 = getelementptr inbounds i8, ptr %147, i64 8
  %436 = getelementptr inbounds i8, ptr %147, i64 16
  %437 = getelementptr inbounds i8, ptr %142, i64 8
  %438 = getelementptr inbounds i8, ptr %127, i64 8
  %439 = getelementptr inbounds i8, ptr %136, i64 8
  %440 = getelementptr inbounds i8, ptr %138, i64 8
  %441 = getelementptr inbounds i8, ptr %138, i64 16
  %442 = getelementptr inbounds i8, ptr %132, i64 8
  %443 = getelementptr inbounds i8, ptr %134, i64 8
  %444 = getelementptr inbounds i8, ptr %134, i64 16
  %445 = getelementptr inbounds i8, ptr %129, i64 8
  %446 = getelementptr inbounds i8, ptr %95, i64 8
  %447 = getelementptr inbounds i8, ptr %94, i64 8
  %448 = getelementptr inbounds i8, ptr %94, i64 16
  %449 = getelementptr inbounds i8, ptr %97, i64 8
  %450 = getelementptr inbounds i8, ptr %97, i64 16
  %451 = getelementptr inbounds i8, ptr %99, i64 16
  %452 = getelementptr inbounds i8, ptr %85, i64 8
  %453 = getelementptr inbounds i8, ptr %85, i64 16
  %454 = getelementptr inbounds i8, ptr %87, i64 8
  %455 = getelementptr inbounds i8, ptr %87, i64 16
  %456 = getelementptr inbounds i8, ptr %89, i64 16
  %457 = getelementptr inbounds i8, ptr %92, i64 8
  %458 = getelementptr inbounds i8, ptr %91, i64 8
  %459 = getelementptr inbounds i8, ptr %91, i64 16
  %460 = getelementptr inbounds i8, ptr %112, i64 8
  %461 = getelementptr inbounds i8, ptr %111, i64 16
  %462 = getelementptr inbounds i8, ptr %109, i64 16
  %463 = getelementptr inbounds i8, ptr %302, i64 8
  %464 = getelementptr inbounds i8, ptr %323, i64 8
  br label %935

465:                                              ; preds = %340
  %466 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #10
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #10
  br label %3098

467:                                              ; preds = %.lr.ph, %.critedge1942
  %468 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #10
  call void @_ZN3MIR11TypeResolve17set_cur_stmt_termERKNS_10BasicBlockE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(192) %468)
  %469 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %470 unwind label %485

470:                                              ; preds = %467
  br i1 %469, label %471, label %492

471:                                              ; preds = %470
  %472 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %473 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %472, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %474 unwind label %485

474:                                              ; preds = %471
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %11) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #10
  store ptr %0, ptr %13, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %12, ptr noundef nonnull align 8 dereferenceable(8) %13) #10
  invoke void @_ZN9FmtLambdaC2ESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull %12)
          to label %475 unwind label %487

475:                                              ; preds = %474
  %476 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK9FmtLambda(ptr noundef nonnull align 8 dereferenceable(8) %473, ptr noundef nonnull align 8 dereferenceable(32) %11)
          to label %477 unwind label %489

477:                                              ; preds = %475
  %478 = getelementptr inbounds i8, ptr %468, i64 24
  %479 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %476, ptr noundef nonnull align 8 dereferenceable(168) %478)
          to label %480 unwind label %489

480:                                              ; preds = %477
  %481 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %479, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %482 unwind label %489

482:                                              ; preds = %480
  %483 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %481, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %484 unwind label %489

484:                                              ; preds = %482
  call void @_ZN9FmtLambdaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #10
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #10
  br label %492

485:                                              ; preds = %471, %467
  %486 = landingpad { ptr, i32 }
          cleanup
  br label %931

487:                                              ; preds = %474
  %488 = landingpad { ptr, i32 }
          cleanup
  br label %491

489:                                              ; preds = %482, %480, %477, %475
  %490 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN9FmtLambdaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #10
  br label %491

491:                                              ; preds = %489, %487
  %.pn1866 = phi { ptr, i32 } [ %490, %489 ], [ %488, %487 ]
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %12) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %11) #10
  br label %931

492:                                              ; preds = %484, %470
  %493 = getelementptr inbounds i8, ptr %468, i64 24
  %494 = call noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %493)
  br i1 %494, label %495, label %.critedge1942

495:                                              ; preds = %492
  %496 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %493)
  %497 = getelementptr inbounds i8, ptr %496, i64 40
  %498 = call noundef zeroext i1 @_ZNK3MIR10CallTarget12is_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96) %497)
  br i1 %498, label %499, label %.critedge1942

499:                                              ; preds = %495
  %500 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR10CallTarget12as_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96) %497)
  %501 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.77)
          to label %502 unwind label %526

502:                                              ; preds = %499
  br i1 %501, label %503, label %563

503:                                              ; preds = %502
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #10
  store i64 0, ptr %14, align 8, !tbaa !13
  %504 = load ptr, ptr %349, align 8, !tbaa !15
  %505 = load ptr, ptr %348, align 8, !tbaa !20
  %506 = getelementptr inbounds i8, ptr %500, i64 16
  %507 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %506, i64 noundef 0)
          to label %508 unwind label %528

508:                                              ; preds = %503
  %509 = invoke noundef zeroext i1 @_Z16Target_GetSizeOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8) %504, ptr noundef nonnull align 8 dereferenceable(424) %505, ptr noundef nonnull align 8 dereferenceable(8) %507, ptr noundef nonnull align 8 dereferenceable(8) %14)
          to label %510 unwind label %528

510:                                              ; preds = %508
  br i1 %509, label %511, label %561

511:                                              ; preds = %510
  %512 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %513 unwind label %528

513:                                              ; preds = %511
  br i1 %512, label %514, label %530

514:                                              ; preds = %513
  %515 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %516 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %515, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %517 unwind label %528

517:                                              ; preds = %514
  %518 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %516, ptr noundef nonnull @.str.78)
          to label %519 unwind label %528

519:                                              ; preds = %517
  %520 = load i64, ptr %14, align 8, !tbaa !13
  %521 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %518, i64 noundef %520)
          to label %522 unwind label %528

522:                                              ; preds = %519
  %523 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %521, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %524 unwind label %528

524:                                              ; preds = %522
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %523, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %530 unwind label %528

526:                                              ; preds = %882, %841, %838, %777, %775, %773, %770, %767, %756, %753, %690, %629, %626, %563, %499
  %527 = landingpad { ptr, i32 }
          cleanup
  br label %931

528:                                              ; preds = %524, %522, %519, %517, %514, %511, %508, %503
  %529 = landingpad { ptr, i32 }
          cleanup
  br label %562

530:                                              ; preds = %524, %513
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %15) #10
  %531 = load i64, ptr %14, align 8, !tbaa !13
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %16, i64 noundef %531, i64 noundef 0)
  store i32 0, ptr %360, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %15, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %16)
          to label %532 unwind label %542

532:                                              ; preds = %530
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %17) #10
  %533 = getelementptr inbounds i8, ptr %496, i64 8
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %18, ptr noundef nonnull align 8 dereferenceable(32) %533)
          to label %534 unwind label %544

534:                                              ; preds = %532
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %19, ptr noundef nonnull align 8 dereferenceable(40) %15) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %361, ptr noundef nonnull %19)
          to label %535 unwind label %551

535:                                              ; preds = %534
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %17, ptr noundef nonnull %18)
          to label %536 unwind label %546

536:                                              ; preds = %535
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %17)
          to label %537 unwind label %548

537:                                              ; preds = %536
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %17) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %18) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %17) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %20) #10
  %538 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %20, i32 noundef %538)
          to label %539 unwind label %554

539:                                              ; preds = %537
  %540 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %20)
          to label %541 unwind label %556

541:                                              ; preds = %539
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %20) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %20) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #10
  br label %561

542:                                              ; preds = %530
  %543 = landingpad { ptr, i32 }
          cleanup
  br label %560

544:                                              ; preds = %532
  %545 = landingpad { ptr, i32 }
          cleanup
  br label %553

546:                                              ; preds = %535
  %547 = landingpad { ptr, i32 }
          cleanup
  br label %550

548:                                              ; preds = %536
  %549 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %17) #10
  br label %550

550:                                              ; preds = %546, %548
  %.pn1928 = phi { ptr, i32 } [ %549, %548 ], [ %547, %546 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %18) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #10
  br label %553

551:                                              ; preds = %534
  %552 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %19) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %18) #10
  br label %553

553:                                              ; preds = %550, %551, %544
  %.pn1928.pn.pn = phi { ptr, i32 } [ %552, %551 ], [ %.pn1928, %550 ], [ %545, %544 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %17) #10
  br label %559

554:                                              ; preds = %537
  %555 = landingpad { ptr, i32 }
          cleanup
  br label %558

556:                                              ; preds = %539
  %557 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %20) #10
  br label %558

558:                                              ; preds = %556, %554
  %.pn1932 = phi { ptr, i32 } [ %557, %556 ], [ %555, %554 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %20) #10
  br label %559

559:                                              ; preds = %558, %553
  %.pn1932.pn = phi { ptr, i32 } [ %.pn1932, %558 ], [ %.pn1928.pn.pn, %553 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %15) #10
  br label %560

560:                                              ; preds = %559, %542
  %.pn1932.pn.pn = phi { ptr, i32 } [ %.pn1932.pn, %559 ], [ %543, %542 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %15) #10
  br label %562

561:                                              ; preds = %541, %510
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %.critedge1942

562:                                              ; preds = %560, %528
  %.pn1932.pn.pn.pn = phi { ptr, i32 } [ %.pn1932.pn.pn, %560 ], [ %529, %528 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #10
  br label %931

563:                                              ; preds = %502
  %564 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.79)
          to label %565 unwind label %526

565:                                              ; preds = %563
  br i1 %564, label %566, label %626

566:                                              ; preds = %565
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #10
  store i64 0, ptr %21, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #10
  %567 = load ptr, ptr %349, align 8, !tbaa !15
  %568 = load ptr, ptr %348, align 8, !tbaa !20
  %569 = getelementptr inbounds i8, ptr %500, i64 16
  %570 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %569, i64 noundef 0)
          to label %571 unwind label %591

571:                                              ; preds = %566
  %572 = invoke noundef zeroext i1 @_Z24Target_GetSizeAndAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERmS9_(ptr noundef nonnull align 8 dereferenceable(8) %567, ptr noundef nonnull align 8 dereferenceable(424) %568, ptr noundef nonnull align 8 dereferenceable(8) %570, ptr noundef nonnull align 8 dereferenceable(8) %21, ptr noundef nonnull align 8 dereferenceable(8) %22)
          to label %573 unwind label %591

573:                                              ; preds = %571
  %574 = load i64, ptr %21, align 8
  %575 = icmp ne i64 %574, -1
  %or.cond = select i1 %572, i1 %575, i1 false
  br i1 %or.cond, label %576, label %624

576:                                              ; preds = %573
  %577 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %578 unwind label %591

578:                                              ; preds = %576
  br i1 %577, label %579, label %593

579:                                              ; preds = %578
  %580 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %581 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %580, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %582 unwind label %591

582:                                              ; preds = %579
  %583 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %581, ptr noundef nonnull @.str.80)
          to label %584 unwind label %591

584:                                              ; preds = %582
  %585 = load i64, ptr %21, align 8, !tbaa !13
  %586 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %583, i64 noundef %585)
          to label %587 unwind label %591

587:                                              ; preds = %584
  %588 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %586, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %589 unwind label %591

589:                                              ; preds = %587
  %590 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %588, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %593 unwind label %591

591:                                              ; preds = %589, %587, %584, %582, %579, %576, %571, %566
  %592 = landingpad { ptr, i32 }
          cleanup
  br label %625

593:                                              ; preds = %589, %578
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %23) #10
  %594 = load i64, ptr %21, align 8, !tbaa !13
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %24, i64 noundef %594, i64 noundef 0)
  store i32 0, ptr %358, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %23, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %24)
          to label %595 unwind label %605

595:                                              ; preds = %593
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %25) #10
  %596 = getelementptr inbounds i8, ptr %496, i64 8
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(32) %596)
          to label %597 unwind label %607

597:                                              ; preds = %595
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %27, ptr noundef nonnull align 8 dereferenceable(40) %23) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %359, ptr noundef nonnull %27)
          to label %598 unwind label %614

598:                                              ; preds = %597
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %25, ptr noundef nonnull %26)
          to label %599 unwind label %609

599:                                              ; preds = %598
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %25)
          to label %600 unwind label %611

600:                                              ; preds = %599
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %25) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %26) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %27) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %25) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %28) #10
  %601 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %28, i32 noundef %601)
          to label %602 unwind label %617

602:                                              ; preds = %600
  %603 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %28)
          to label %604 unwind label %619

604:                                              ; preds = %602
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %28) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %28) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %23) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %23) #10
  br label %624

605:                                              ; preds = %593
  %606 = landingpad { ptr, i32 }
          cleanup
  br label %623

607:                                              ; preds = %595
  %608 = landingpad { ptr, i32 }
          cleanup
  br label %616

609:                                              ; preds = %598
  %610 = landingpad { ptr, i32 }
          cleanup
  br label %613

611:                                              ; preds = %599
  %612 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %25) #10
  br label %613

613:                                              ; preds = %609, %611
  %.pn1919 = phi { ptr, i32 } [ %612, %611 ], [ %610, %609 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %26) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %27) #10
  br label %616

614:                                              ; preds = %597
  %615 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %27) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #10
  br label %616

616:                                              ; preds = %613, %614, %607
  %.pn1919.pn.pn = phi { ptr, i32 } [ %615, %614 ], [ %.pn1919, %613 ], [ %608, %607 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %25) #10
  br label %622

617:                                              ; preds = %600
  %618 = landingpad { ptr, i32 }
          cleanup
  br label %621

619:                                              ; preds = %602
  %620 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %28) #10
  br label %621

621:                                              ; preds = %619, %617
  %.pn1923 = phi { ptr, i32 } [ %620, %619 ], [ %618, %617 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %28) #10
  br label %622

622:                                              ; preds = %621, %616
  %.pn1923.pn = phi { ptr, i32 } [ %.pn1923, %621 ], [ %.pn1919.pn.pn, %616 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %23) #10
  br label %623

623:                                              ; preds = %622, %605
  %.pn1923.pn.pn = phi { ptr, i32 } [ %.pn1923.pn, %622 ], [ %606, %605 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %23) #10
  br label %625

624:                                              ; preds = %604, %573
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %.critedge1942

625:                                              ; preds = %623, %591
  %.pn1923.pn.pn.pn = phi { ptr, i32 } [ %.pn1923.pn.pn, %623 ], [ %592, %591 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #10
  br label %931

626:                                              ; preds = %565
  %627 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.81)
          to label %628 unwind label %526

628:                                              ; preds = %626
  br i1 %627, label %632, label %629

629:                                              ; preds = %628
  %630 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.82)
          to label %631 unwind label %526

631:                                              ; preds = %629
  br i1 %630, label %632, label %690

632:                                              ; preds = %631, %628
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #10
  store i64 0, ptr %29, align 8, !tbaa !13
  %633 = load ptr, ptr %349, align 8, !tbaa !15
  %634 = load ptr, ptr %348, align 8, !tbaa !20
  %635 = getelementptr inbounds i8, ptr %500, i64 16
  %636 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %635, i64 noundef 0)
          to label %637 unwind label %655

637:                                              ; preds = %632
  %638 = invoke noundef zeroext i1 @_Z17Target_GetAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8) %633, ptr noundef nonnull align 8 dereferenceable(424) %634, ptr noundef nonnull align 8 dereferenceable(8) %636, ptr noundef nonnull align 8 dereferenceable(8) %29)
          to label %639 unwind label %655

639:                                              ; preds = %637
  br i1 %638, label %640, label %688

640:                                              ; preds = %639
  %641 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %642 unwind label %655

642:                                              ; preds = %640
  br i1 %641, label %643, label %657

643:                                              ; preds = %642
  %644 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %645 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %644, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %646 unwind label %655

646:                                              ; preds = %643
  %647 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %645, ptr noundef nonnull @.str.83)
          to label %648 unwind label %655

648:                                              ; preds = %646
  %649 = load i64, ptr %29, align 8, !tbaa !13
  %650 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %647, i64 noundef %649)
          to label %651 unwind label %655

651:                                              ; preds = %648
  %652 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %650, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %653 unwind label %655

653:                                              ; preds = %651
  %654 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %652, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %657 unwind label %655

655:                                              ; preds = %653, %651, %648, %646, %643, %640, %637, %632
  %656 = landingpad { ptr, i32 }
          cleanup
  br label %689

657:                                              ; preds = %653, %642
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %30) #10
  %658 = load i64, ptr %29, align 8, !tbaa !13
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %31, i64 noundef %658, i64 noundef 0)
  store i32 0, ptr %356, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %30, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %31)
          to label %659 unwind label %669

659:                                              ; preds = %657
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %32) #10
  %660 = getelementptr inbounds i8, ptr %496, i64 8
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %33, ptr noundef nonnull align 8 dereferenceable(32) %660)
          to label %661 unwind label %671

661:                                              ; preds = %659
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %34, ptr noundef nonnull align 8 dereferenceable(40) %30) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %357, ptr noundef nonnull %34)
          to label %662 unwind label %678

662:                                              ; preds = %661
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %32, ptr noundef nonnull %33)
          to label %663 unwind label %673

663:                                              ; preds = %662
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %32)
          to label %664 unwind label %675

664:                                              ; preds = %663
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %32) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %33) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %32) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %35) #10
  %665 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %35, i32 noundef %665)
          to label %666 unwind label %681

666:                                              ; preds = %664
  %667 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %35)
          to label %668 unwind label %683

668:                                              ; preds = %666
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %35) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %35) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %30) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %30) #10
  br label %688

669:                                              ; preds = %657
  %670 = landingpad { ptr, i32 }
          cleanup
  br label %687

671:                                              ; preds = %659
  %672 = landingpad { ptr, i32 }
          cleanup
  br label %680

673:                                              ; preds = %662
  %674 = landingpad { ptr, i32 }
          cleanup
  br label %677

675:                                              ; preds = %663
  %676 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %32) #10
  br label %677

677:                                              ; preds = %673, %675
  %.pn1910 = phi { ptr, i32 } [ %676, %675 ], [ %674, %673 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %33) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #10
  br label %680

678:                                              ; preds = %661
  %679 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %34) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %33) #10
  br label %680

680:                                              ; preds = %677, %678, %671
  %.pn1910.pn.pn = phi { ptr, i32 } [ %679, %678 ], [ %.pn1910, %677 ], [ %672, %671 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %32) #10
  br label %686

681:                                              ; preds = %664
  %682 = landingpad { ptr, i32 }
          cleanup
  br label %685

683:                                              ; preds = %666
  %684 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %35) #10
  br label %685

685:                                              ; preds = %683, %681
  %.pn1914 = phi { ptr, i32 } [ %684, %683 ], [ %682, %681 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %35) #10
  br label %686

686:                                              ; preds = %685, %680
  %.pn1914.pn = phi { ptr, i32 } [ %.pn1914, %685 ], [ %.pn1910.pn.pn, %680 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %30) #10
  br label %687

687:                                              ; preds = %686, %669
  %.pn1914.pn.pn = phi { ptr, i32 } [ %.pn1914.pn, %686 ], [ %670, %669 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %30) #10
  br label %689

688:                                              ; preds = %668, %639
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #10
  br label %.critedge1942

689:                                              ; preds = %687, %655
  %.pn1914.pn.pn.pn = phi { ptr, i32 } [ %.pn1914.pn.pn, %687 ], [ %656, %655 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #10
  br label %931

690:                                              ; preds = %631
  %691 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.84)
          to label %692 unwind label %526

692:                                              ; preds = %690
  br i1 %691, label %693, label %753

693:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #10
  store i64 0, ptr %36, align 8, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %37) #10
  store i64 0, ptr %37, align 8, !tbaa !13
  %694 = load ptr, ptr %349, align 8, !tbaa !15
  %695 = load ptr, ptr %348, align 8, !tbaa !20
  %696 = getelementptr inbounds i8, ptr %500, i64 16
  %697 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %696, i64 noundef 0)
          to label %698 unwind label %718

698:                                              ; preds = %693
  %699 = invoke noundef zeroext i1 @_Z24Target_GetSizeAndAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERmS9_(ptr noundef nonnull align 8 dereferenceable(8) %694, ptr noundef nonnull align 8 dereferenceable(424) %695, ptr noundef nonnull align 8 dereferenceable(8) %697, ptr noundef nonnull align 8 dereferenceable(8) %37, ptr noundef nonnull align 8 dereferenceable(8) %36)
          to label %700 unwind label %718

700:                                              ; preds = %698
  %701 = load i64, ptr %36, align 8
  %702 = icmp ne i64 %701, 0
  %or.cond5 = select i1 %699, i1 %702, i1 false
  br i1 %or.cond5, label %703, label %751

703:                                              ; preds = %700
  %704 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %705 unwind label %718

705:                                              ; preds = %703
  br i1 %704, label %706, label %720

706:                                              ; preds = %705
  %707 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %708 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %707, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %709 unwind label %718

709:                                              ; preds = %706
  %710 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %708, ptr noundef nonnull @.str.85)
          to label %711 unwind label %718

711:                                              ; preds = %709
  %712 = load i64, ptr %36, align 8, !tbaa !13
  %713 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %710, i64 noundef %712)
          to label %714 unwind label %718

714:                                              ; preds = %711
  %715 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %713, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %716 unwind label %718

716:                                              ; preds = %714
  %717 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %715, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %720 unwind label %718

718:                                              ; preds = %716, %714, %711, %709, %706, %703, %698, %693
  %719 = landingpad { ptr, i32 }
          cleanup
  br label %752

720:                                              ; preds = %716, %705
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %38) #10
  %721 = load i64, ptr %36, align 8, !tbaa !13
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %39, i64 noundef %721, i64 noundef 0)
  store i32 0, ptr %354, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %38, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %39)
          to label %722 unwind label %732

722:                                              ; preds = %720
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %40) #10
  %723 = getelementptr inbounds i8, ptr %496, i64 8
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %41, ptr noundef nonnull align 8 dereferenceable(32) %723)
          to label %724 unwind label %734

724:                                              ; preds = %722
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %42, ptr noundef nonnull align 8 dereferenceable(40) %38) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %355, ptr noundef nonnull %42)
          to label %725 unwind label %741

725:                                              ; preds = %724
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %40, ptr noundef nonnull %41)
          to label %726 unwind label %736

726:                                              ; preds = %725
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %40)
          to label %727 unwind label %738

727:                                              ; preds = %726
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %40) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %42) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %40) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %43) #10
  %728 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %43, i32 noundef %728)
          to label %729 unwind label %744

729:                                              ; preds = %727
  %730 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %43)
          to label %731 unwind label %746

731:                                              ; preds = %729
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %43) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %43) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %38) #10
  br label %751

732:                                              ; preds = %720
  %733 = landingpad { ptr, i32 }
          cleanup
  br label %750

734:                                              ; preds = %722
  %735 = landingpad { ptr, i32 }
          cleanup
  br label %743

736:                                              ; preds = %725
  %737 = landingpad { ptr, i32 }
          cleanup
  br label %740

738:                                              ; preds = %726
  %739 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %40) #10
  br label %740

740:                                              ; preds = %736, %738
  %.pn1901 = phi { ptr, i32 } [ %739, %738 ], [ %737, %736 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %41) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %42) #10
  br label %743

741:                                              ; preds = %724
  %742 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %42) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %41) #10
  br label %743

743:                                              ; preds = %740, %741, %734
  %.pn1901.pn.pn = phi { ptr, i32 } [ %742, %741 ], [ %.pn1901, %740 ], [ %735, %734 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %40) #10
  br label %749

744:                                              ; preds = %727
  %745 = landingpad { ptr, i32 }
          cleanup
  br label %748

746:                                              ; preds = %729
  %747 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %43) #10
  br label %748

748:                                              ; preds = %746, %744
  %.pn1905 = phi { ptr, i32 } [ %747, %746 ], [ %745, %744 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %43) #10
  br label %749

749:                                              ; preds = %748, %743
  %.pn1905.pn = phi { ptr, i32 } [ %.pn1905, %748 ], [ %.pn1901.pn.pn, %743 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %38) #10
  br label %750

750:                                              ; preds = %749, %732
  %.pn1905.pn.pn = phi { ptr, i32 } [ %.pn1905.pn, %749 ], [ %733, %732 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %38) #10
  br label %752

751:                                              ; preds = %731, %700
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  br label %.critedge1942

752:                                              ; preds = %750, %718
  %.pn1905.pn.pn.pn = phi { ptr, i32 } [ %.pn1905.pn.pn, %750 ], [ %719, %718 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %37) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #10
  br label %931

753:                                              ; preds = %692
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %44) #10
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %45) #10
  %754 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.86)
          to label %755 unwind label %526

755:                                              ; preds = %753
  br i1 %754, label %756, label %.critedge

756:                                              ; preds = %755
  %757 = getelementptr inbounds i8, ptr %500, i64 16
  %758 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %757, i64 noundef 0)
          to label %759 unwind label %526

759:                                              ; preds = %756
  store i32 2, ptr %44, align 4, !tbaa !39
  %760 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKNS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %758, ptr noundef nonnull align 4 dereferenceable(4) %44)
          to label %761 unwind label %779

761:                                              ; preds = %759
  br i1 %760, label %.critedge7, label %762

762:                                              ; preds = %761
  %763 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %757, i64 noundef 0)
          to label %764 unwind label %779

764:                                              ; preds = %762
  store i32 3, ptr %45, align 4, !tbaa !39
  %765 = invoke noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKNS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8) %763, ptr noundef nonnull align 4 dereferenceable(4) %45)
          to label %766 unwind label %781

766:                                              ; preds = %764
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #10
  br i1 %765, label %767, label %838

.critedge7:                                       ; preds = %761
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #10
  br label %767

767:                                              ; preds = %766, %.critedge7
  %768 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %769 unwind label %526

769:                                              ; preds = %767
  br i1 %768, label %770, label %784

770:                                              ; preds = %769
  %771 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %772 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %771, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %773 unwind label %526

773:                                              ; preds = %770
  %774 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %772, ptr noundef nonnull @.str.87)
          to label %775 unwind label %526

775:                                              ; preds = %773
  %776 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %774, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %777 unwind label %526

777:                                              ; preds = %775
  %778 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %776, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %784 unwind label %526

779:                                              ; preds = %762, %759
  %780 = landingpad { ptr, i32 }
          cleanup
  br label %783

781:                                              ; preds = %764
  %782 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #10
  br label %783

783:                                              ; preds = %781, %779
  %.pn1868 = phi { ptr, i32 } [ %782, %781 ], [ %780, %779 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #10
  br label %931

784:                                              ; preds = %777, %769
  %785 = getelementptr inbounds i8, ptr %496, i64 136
  %786 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %785, i64 noundef 0)
          to label %787 unwind label %796

787:                                              ; preds = %784
  %788 = call noundef ptr @_ZN3MIR5Param10opt_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %786)
  %.not1887 = icmp eq ptr %788, null
  %789 = getelementptr inbounds i8, ptr %496, i64 8
  br i1 %.not1887, label %809, label %790

790:                                              ; preds = %787
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %46) #10
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %47, ptr noundef nonnull align 8 dereferenceable(32) %789)
          to label %791 unwind label %798

791:                                              ; preds = %790
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %48, ptr noundef nonnull align 8 dereferenceable(32) %788)
          to label %792 unwind label %.thread1962

792:                                              ; preds = %791
  invoke void @_ZN3MIR6RValueC2ENS_6LValueE(ptr noundef nonnull align 8 dereferenceable(112) %352, ptr noundef nonnull %48)
          to label %793 unwind label %.thread1966

793:                                              ; preds = %792
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %46, ptr noundef nonnull %47)
          to label %794 unwind label %802

794:                                              ; preds = %793
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %46)
          to label %795 unwind label %804

795:                                              ; preds = %794
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %46) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %47) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %46) #10
  br label %828

796:                                              ; preds = %784
  %797 = landingpad { ptr, i32 }
          cleanup
  br label %931

798:                                              ; preds = %790
  %799 = landingpad { ptr, i32 }
          cleanup
  br label %808

.thread1962:                                      ; preds = %791
  %800 = landingpad { ptr, i32 }
          cleanup
  br label %807

.thread1966:                                      ; preds = %792
  %801 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  br label %807

802:                                              ; preds = %793
  %803 = landingpad { ptr, i32 }
          cleanup
  br label %806

804:                                              ; preds = %794
  %805 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %46) #10
  br label %806

806:                                              ; preds = %802, %804
  %.pn1893 = phi { ptr, i32 } [ %805, %804 ], [ %803, %802 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %47) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #10
  br label %808

807:                                              ; preds = %.thread1966, %.thread1962
  %.pn1893.pn.pn1965 = phi { ptr, i32 } [ %800, %.thread1962 ], [ %801, %.thread1966 ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #10
  br label %808

808:                                              ; preds = %806, %807, %798
  %.pn1893.pn.pn.pn = phi { ptr, i32 } [ %.pn1893.pn.pn1965, %807 ], [ %.pn1893, %806 ], [ %799, %798 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %46) #10
  br label %931

809:                                              ; preds = %787
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %49) #10
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 8 dereferenceable(32) %789)
          to label %810 unwind label %817

810:                                              ; preds = %809
  %811 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %785, i64 noundef 0)
          to label %812 unwind label %.thread1969

812:                                              ; preds = %810
  %813 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %811)
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %51, ptr noundef nonnull align 8 dereferenceable(40) %813) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %353, ptr noundef nonnull %51)
          to label %814 unwind label %.thread1973

814:                                              ; preds = %812
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %49, ptr noundef nonnull %50)
          to label %815 unwind label %821

815:                                              ; preds = %814
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %49)
          to label %816 unwind label %823

816:                                              ; preds = %815
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %49) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %50) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %49) #10
  br label %828

817:                                              ; preds = %809
  %818 = landingpad { ptr, i32 }
          cleanup
  br label %827

.thread1969:                                      ; preds = %810
  %819 = landingpad { ptr, i32 }
          cleanup
  br label %826

.thread1973:                                      ; preds = %812
  %820 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #10
  br label %826

821:                                              ; preds = %814
  %822 = landingpad { ptr, i32 }
          cleanup
  br label %825

823:                                              ; preds = %815
  %824 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %49) #10
  br label %825

825:                                              ; preds = %821, %823
  %.pn1888 = phi { ptr, i32 } [ %824, %823 ], [ %822, %821 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %50) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %51) #10
  br label %827

826:                                              ; preds = %.thread1973, %.thread1969
  %.pn1888.pn.pn1972 = phi { ptr, i32 } [ %819, %.thread1969 ], [ %820, %.thread1973 ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #10
  br label %827

827:                                              ; preds = %825, %826, %817
  %.pn1888.pn.pn.pn = phi { ptr, i32 } [ %.pn1888.pn.pn1972, %826 ], [ %.pn1888, %825 ], [ %818, %817 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %49) #10
  br label %931

828:                                              ; preds = %816, %795
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %52) #10
  %829 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %52, i32 noundef %829)
          to label %830 unwind label %833

830:                                              ; preds = %828
  %831 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %52)
          to label %832 unwind label %835

832:                                              ; preds = %830
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %52) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %52) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %.critedge1942

833:                                              ; preds = %828
  %834 = landingpad { ptr, i32 }
          cleanup
  br label %837

835:                                              ; preds = %830
  %836 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %52) #10
  br label %837

837:                                              ; preds = %835, %833
  %.pn1899 = phi { ptr, i32 } [ %836, %835 ], [ %834, %833 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %52) #10
  br label %931

.critedge:                                        ; preds = %755
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %45) #10
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %44) #10
  br label %838

838:                                              ; preds = %.critedge, %766
  %839 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.88)
          to label %840 unwind label %526

840:                                              ; preds = %838
  br i1 %839, label %841, label %882

841:                                              ; preds = %840
  %842 = getelementptr inbounds i8, ptr %496, i64 136
  %843 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %842, i64 noundef 0)
          to label %844 unwind label %526

844:                                              ; preds = %841
  %845 = call noundef zeroext i1 @_ZNK3MIR5Param9is_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %843)
  br i1 %845, label %850, label %846

846:                                              ; preds = %844
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %54) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %53, ptr noundef nonnull align 1 dereferenceable(1) %54) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %53)
          to label %847 unwind label %848

847:                                              ; preds = %846
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #10
  br label %850

848:                                              ; preds = %846
  %849 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %53) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %54) #10
  br label %931

850:                                              ; preds = %847, %844
  %851 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %842, i64 noundef 0)
          to label %852 unwind label %864

852:                                              ; preds = %850
  %853 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR5Param9as_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %851)
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %55) #10
  %854 = getelementptr inbounds i8, ptr %496, i64 8
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %56, ptr noundef nonnull align 8 dereferenceable(32) %854)
          to label %855 unwind label %866

855:                                              ; preds = %852
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %57, ptr noundef nonnull align 8 dereferenceable(32) %853)
          to label %856 unwind label %.thread1976

856:                                              ; preds = %855
  invoke void @_ZN3MIR6RValue12make_DstMetaENS0_12Data_DstMetaE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::RValue") align 8 %351, ptr noundef nonnull %57)
          to label %857 unwind label %.thread1980

857:                                              ; preds = %856
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %55, ptr noundef nonnull %56)
          to label %858 unwind label %870

858:                                              ; preds = %857
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %55)
          to label %859 unwind label %872

859:                                              ; preds = %858
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %55) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %56) #10
  call void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %55) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %58) #10
  %860 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %58, i32 noundef %860)
          to label %861 unwind label %877

861:                                              ; preds = %859
  %862 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %58)
          to label %863 unwind label %879

863:                                              ; preds = %861
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %58) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %58) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %.critedge1942

864:                                              ; preds = %850
  %865 = landingpad { ptr, i32 }
          cleanup
  br label %931

866:                                              ; preds = %852
  %867 = landingpad { ptr, i32 }
          cleanup
  br label %876

.thread1976:                                      ; preds = %855
  %868 = landingpad { ptr, i32 }
          cleanup
  br label %875

.thread1980:                                      ; preds = %856
  %869 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  br label %875

870:                                              ; preds = %857
  %871 = landingpad { ptr, i32 }
          cleanup
  br label %874

872:                                              ; preds = %858
  %873 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %55) #10
  br label %874

874:                                              ; preds = %870, %872
  %.pn1879 = phi { ptr, i32 } [ %873, %872 ], [ %871, %870 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %56) #10
  call void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %57) #10
  br label %876

875:                                              ; preds = %.thread1980, %.thread1976
  %.pn1879.pn.pn1979 = phi { ptr, i32 } [ %868, %.thread1976 ], [ %869, %.thread1980 ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %56) #10
  br label %876

876:                                              ; preds = %874, %875, %866
  %.pn1879.pn.pn.pn = phi { ptr, i32 } [ %.pn1879.pn.pn1979, %875 ], [ %.pn1879, %874 ], [ %867, %866 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %55) #10
  br label %931

877:                                              ; preds = %859
  %878 = landingpad { ptr, i32 }
          cleanup
  br label %881

879:                                              ; preds = %861
  %880 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %58) #10
  br label %881

881:                                              ; preds = %879, %877
  %.pn1884 = phi { ptr, i32 } [ %880, %879 ], [ %878, %877 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %58) #10
  br label %931

882:                                              ; preds = %840
  %883 = invoke noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8) %500, ptr noundef nonnull @.str.89)
          to label %884 unwind label %526

884:                                              ; preds = %882
  br i1 %883, label %885, label %.critedge1942

885:                                              ; preds = %884
  %886 = getelementptr inbounds i8, ptr %500, i64 16
  %887 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8) %886, i64 noundef 0)
          to label %888 unwind label %907

888:                                              ; preds = %885
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %60) #10
  call void @"_ZNSt8functionIFbRKN3HIR7TypeRefEEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS7_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %59, ptr noundef nonnull align 1 dereferenceable(1) %60) #10
  %889 = invoke noundef zeroext i1 @_Z13visit_ty_withRKN3HIR7TypeRefESt8functionIFbS2_EE(ptr noundef nonnull align 8 dereferenceable(8) %887, ptr noundef nonnull %59)
          to label %890 unwind label %909

890:                                              ; preds = %888
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #10
  br i1 %889, label %.critedge1942, label %891

891:                                              ; preds = %890
  %892 = load ptr, ptr %348, align 8, !tbaa !20
  %893 = load ptr, ptr %349, align 8, !tbaa !15
  %894 = invoke noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424) %892, ptr noundef nonnull align 8 dereferenceable(8) %893, ptr noundef nonnull align 8 dereferenceable(8) %887)
          to label %895 unwind label %911

895:                                              ; preds = %891
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %61) #10
  %896 = getelementptr inbounds i8, ptr %496, i64 8
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(32) %896)
          to label %897 unwind label %913

897:                                              ; preds = %895
  %898 = zext i1 %894 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %63, i8 %898)
          to label %899 unwind label %.thread1983

899:                                              ; preds = %897
  invoke void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::RValue") align 8 %350, ptr noundef nonnull %63)
          to label %900 unwind label %.thread1987

900:                                              ; preds = %899
  invoke void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %61, ptr noundef nonnull %62)
          to label %901 unwind label %917

901:                                              ; preds = %900
  invoke void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24) %468, ptr noundef nonnull align 8 dereferenceable(152) %61)
          to label %902 unwind label %919

902:                                              ; preds = %901
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %61) #10
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %62) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %63) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %61) #10
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %64) #10
  %903 = load i32, ptr %496, align 8, !tbaa !25
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %64, i32 noundef %903)
          to label %904 unwind label %924

904:                                              ; preds = %902
  %905 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %493, ptr noundef nonnull align 8 dereferenceable(168) %64)
          to label %906 unwind label %926

906:                                              ; preds = %904
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %64) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %64) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %.critedge1942

907:                                              ; preds = %885
  %908 = landingpad { ptr, i32 }
          cleanup
  br label %931

909:                                              ; preds = %888
  %910 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %59) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %60) #10
  br label %931

911:                                              ; preds = %891
  %912 = landingpad { ptr, i32 }
          cleanup
  br label %931

913:                                              ; preds = %895
  %914 = landingpad { ptr, i32 }
          cleanup
  br label %923

.thread1983:                                      ; preds = %897
  %915 = landingpad { ptr, i32 }
          cleanup
  br label %922

.thread1987:                                      ; preds = %899
  %916 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %63) #10
  br label %922

917:                                              ; preds = %900
  %918 = landingpad { ptr, i32 }
          cleanup
  br label %921

919:                                              ; preds = %901
  %920 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %61) #10
  br label %921

921:                                              ; preds = %917, %919
  %.pn1870 = phi { ptr, i32 } [ %920, %919 ], [ %918, %917 ]
  call void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144) %62) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %63) #10
  br label %923

922:                                              ; preds = %.thread1987, %.thread1983
  %.pn1870.pn.pn1986 = phi { ptr, i32 } [ %915, %.thread1983 ], [ %916, %.thread1987 ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #10
  br label %923

923:                                              ; preds = %921, %922, %913
  %.pn1870.pn.pn.pn = phi { ptr, i32 } [ %.pn1870.pn.pn1986, %922 ], [ %.pn1870, %921 ], [ %914, %913 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %61) #10
  br label %931

924:                                              ; preds = %902
  %925 = landingpad { ptr, i32 }
          cleanup
  br label %928

926:                                              ; preds = %904
  %927 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %64) #10
  br label %928

928:                                              ; preds = %926, %924
  %.pn1875 = phi { ptr, i32 } [ %927, %926 ], [ %925, %924 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %64) #10
  br label %931

.critedge1942:                                    ; preds = %890, %906, %624, %751, %863, %884, %832, %688, %561, %495, %492
  %929 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #10
  %930 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #10
  br i1 %930, label %467, label %._crit_edge

931:                                              ; preds = %526, %562, %625, %689, %752, %783, %837, %848, %827, %808, %796, %881, %876, %864, %911, %923, %928, %909, %907, %491, %485
  %.pn1932.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1866, %491 ], [ %486, %485 ], [ %.pn1932.pn.pn.pn, %562 ], [ %.pn1923.pn.pn.pn, %625 ], [ %.pn1914.pn.pn.pn, %689 ], [ %.pn1905.pn.pn.pn, %752 ], [ %.pn1899, %837 ], [ %527, %526 ], [ %849, %848 ], [ %.pn1868, %783 ], [ %.pn1893.pn.pn.pn, %808 ], [ %.pn1888.pn.pn.pn, %827 ], [ %797, %796 ], [ %.pn1884, %881 ], [ %.pn1879.pn.pn.pn, %876 ], [ %865, %864 ], [ %910, %909 ], [ %908, %907 ], [ %.pn1875, %928 ], [ %.pn1870.pn.pn.pn, %923 ], [ %912, %911 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #10
  br label %3097

._crit_edge23222:                                 ; preds = %.loopexit2223, %._crit_edge
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %332) #10
  %932 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  store ptr %932, ptr %332, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %333) #10
  %933 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  store ptr %933, ptr %333, align 8
  %934 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %332, ptr noundef nonnull align 8 dereferenceable(8) %333) #10
  br i1 %934, label %.lr.ph23230, label %._crit_edge23231

935:                                              ; preds = %.lr.ph23221, %.loopexit2223
  %936 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #10
  %937 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  %938 = ptrtoint ptr %936 to i64
  %939 = ptrtoint ptr %937 to i64
  %940 = sub i64 %938, %939
  %941 = sdiv exact i64 %940, 192
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %67) #10
  call void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %68) #10
  call void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %68) #10
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %69) #10
  call void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %69) #10
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %70) #10
  store ptr %67, ptr %70, align 8, !tbaa !9
  store ptr %0, ptr %365, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %71) #10
  store ptr %70, ptr %71, align 8, !tbaa !9
  store ptr %3, ptr %366, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %72) #10
  store ptr %67, ptr %72, align 8, !tbaa !9
  store ptr %0, ptr %367, align 8, !tbaa !9
  store ptr %3, ptr %368, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %73) #10
  %942 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %936) #10
  store ptr %942, ptr %73, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %74) #10
  %943 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %936) #10
  store ptr %943, ptr %74, align 8
  %944 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %73, ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  %945 = trunc i64 %941 to i32
  br i1 %944, label %.lr.ph23184, label %._crit_edge23185

._crit_edge23185:                                 ; preds = %2860, %935
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #10
  call void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %945)
  %946 = getelementptr inbounds i8, ptr %936, i64 24
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %319, ptr noundef nonnull align 8 dereferenceable(24) %72)
          to label %2864 unwind label %.loopexit2228

.lr.ph23184:                                      ; preds = %935, %2860
  %947 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %73) #10
  %948 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %936) #10
  %949 = ptrtoint ptr %947 to i64
  %950 = ptrtoint ptr %948 to i64
  %951 = sub i64 %949, %950
  %952 = sdiv exact i64 %951, 152
  %953 = trunc i64 %952 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %945, i32 noundef %953)
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(24) %72)
          to label %954 unwind label %958

954:                                              ; preds = %.lr.ph23184
  %955 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %947, ptr noundef nonnull %75)
          to label %956 unwind label %960

956:                                              ; preds = %954
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  %957 = call noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %947)
  %.not1609 = icmp eq ptr %957, null
  br i1 %.not1609, label %2648, label %.lr.ph23181

958:                                              ; preds = %.lr.ph23184
  %959 = landingpad { ptr, i32 }
          cleanup
  br label %2863

960:                                              ; preds = %954
  %961 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #10
  br label %2863

.lr.ph23181:                                      ; preds = %956
  %962 = getelementptr inbounds i8, ptr %957, i64 32
  %963 = call noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  switch i32 %963, label %.loopexit2221 [
    i32 0, label %996
    i32 1, label %.preheader2186.split.split
    i32 3, label %.preheader2188.split
    i32 4, label %.preheader2190.split
    i32 2, label %.preheader2192.split.split
    i32 5, label %.lr.ph21232
    i32 6, label %.lr.ph21229
    i32 7, label %.lr.ph4889
    i32 8, label %.preheader2200.split
    i32 9, label %.preheader2202.split
    i32 10, label %.preheader2204.split.split
    i32 11, label %.preheader2206.split.split
    i32 12, label %.preheader2208.split.split
    i32 13, label %.preheader2210.split
    i32 14, label %.preheader2212.split.split
    i32 15, label %.preheader2214.split.split
  ]

.preheader2214.split.split:                       ; preds = %.lr.ph23181
  %964 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR6RValue9as_StructEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %965 = getelementptr inbounds i8, ptr %964, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %290) #10
  %966 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %965) #10
  store ptr %966, ptr %290, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %291) #10
  %967 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %965) #10
  store ptr %967, ptr %291, align 8
  %968 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef nonnull align 8 dereferenceable(8) %291) #10
  br i1 %968, label %.lr.ph2525, label %..loopexit2185_crit_edge

.preheader2212.split.split:                       ; preds = %.lr.ph23181
  %969 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZN3MIR6RValue14as_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %970 = getelementptr inbounds i8, ptr %969, i64 40
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %288) #10
  %971 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %970) #10
  store ptr %971, ptr %288, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %289) #10
  %972 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %970) #10
  store ptr %972, ptr %289, align 8
  %973 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %288, ptr noundef nonnull align 8 dereferenceable(8) %289) #10
  br i1 %973, label %.lr.ph2755, label %..loopexit2184_crit_edge

.preheader2210.split:                             ; preds = %.lr.ph23181
  %974 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6RValue15as_UnionVariantEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %975 = getelementptr inbounds i8, ptr %974, i64 40
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %975)
          to label %.loopexit2221 unwind label %.split2993, !llvm.loop !40

.preheader2208.split.split:                       ; preds = %.lr.ph23181
  %976 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %286) #10
  %977 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %976) #10
  store ptr %977, ptr %286, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %287) #10
  %978 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %976) #10
  store ptr %978, ptr %287, align 8
  %979 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %286, ptr noundef nonnull align 8 dereferenceable(8) %287) #10
  br i1 %979, label %.lr.ph3220, label %..loopexit2182_crit_edge

.preheader2206.split.split:                       ; preds = %.lr.ph23181
  %980 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %284) #10
  %981 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %980) #10
  store ptr %981, ptr %284, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %285) #10
  %982 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %980) #10
  store ptr %982, ptr %285, align 8
  %983 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %284, ptr noundef nonnull align 8 dereferenceable(8) %285) #10
  br i1 %983, label %.lr.ph3460, label %..loopexit2181_crit_edge

.preheader2204.split.split:                       ; preds = %.lr.ph23181
  %984 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZN3MIR6RValue10as_MakeDstEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %985 = getelementptr inbounds i8, ptr %984, i64 48
  %986 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %985)
  br i1 %986, label %2617, label %2625

.preheader2202.split:                             ; preds = %.lr.ph23181
  %987 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue9as_DstPtrEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  br label %.loopexit2221

.preheader2200.split:                             ; preds = %.lr.ph23181
  %988 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue10as_DstMetaEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  br label %.loopexit2221

.preheader2192.split.split:                       ; preds = %.lr.ph23181
  %989 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %990 = getelementptr inbounds i8, ptr %989, i64 8
  %991 = load i32, ptr %989, align 8, !tbaa !42
  %992 = icmp eq i32 %991, 0
  br i1 %992, label %1013, label %1032

.preheader2190.split:                             ; preds = %.lr.ph23181
  %993 = call noundef nonnull align 8 dereferenceable(80) ptr @_ZN3MIR6RValue13as_SizedArrayEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %993)
          to label %.loopexit2221 unwind label %.split21905, !llvm.loop !45

.preheader2188.split:                             ; preds = %.lr.ph23181
  %994 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  br label %.loopexit2221

.preheader2186.split.split:                       ; preds = %.lr.ph23181
  %995 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %76) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK3$_5clERKNS_6LValueE"(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %76, ptr noundef nonnull align 8 dereferenceable(16) %70, ptr noundef nonnull align 8 dereferenceable(32) %995)
          to label %997 unwind label %.split22536.split

996:                                              ; preds = %.lr.ph23181
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 3793, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

997:                                              ; preds = %.preheader2186.split.split
  %998 = call noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %76)
  br i1 %998, label %999, label %1003

999:                                              ; preds = %997
  %1000 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %76)
  %1001 = call noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8) %1000) #10
  br i1 %1001, label %1003, label %..loopexit2171_crit_edge

.split22536.split:                                ; preds = %.preheader2186.split.split
  %1002 = landingpad { ptr, i32 }
          cleanup
  br label %1010

1003:                                             ; preds = %999, %997
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %77) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %78, ptr noundef nonnull align 8 dereferenceable(40) %76) #10
  invoke void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::RValue") align 8 %77, ptr noundef nonnull %78)
          to label %1004 unwind label %.split22539.split

1004:                                             ; preds = %1003
  %1005 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %77)
          to label %1006 unwind label %.split22542.split

1006:                                             ; preds = %1004
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %77) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %78) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %77) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %..loopexit2171_crit_edge

.split22539.split:                                ; preds = %1003
  %1007 = landingpad { ptr, i32 }
          cleanup
  br label %1009

.split22542.split:                                ; preds = %1004
  %1008 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %77) #10
  br label %1009

1009:                                             ; preds = %.split22542.split, %.split22539.split
  %.pn1858 = phi { ptr, i32 } [ %1008, %.split22542.split ], [ %1007, %.split22539.split ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %78) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %77) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %76) #10
  br label %1010

..loopexit2171_crit_edge:                         ; preds = %999, %1006
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %76) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %76) #10
  br label %.loopexit2221

1010:                                             ; preds = %1009, %.split22536.split
  %.pn1858.pn = phi { ptr, i32 } [ %.pn1858, %1009 ], [ %1002, %.split22536.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %76) #10
  br label %2863

.split21905:                                      ; preds = %.preheader2190.split
  %1011 = landingpad { ptr, i32 }
          cleanup
  br label %2863

.split21237.split:                                ; preds = %1037, %1035
  %1012 = landingpad { ptr, i32 }
          cleanup
  br label %2863

1013:                                             ; preds = %.preheader2192.split.split
  %1014 = getelementptr inbounds i8, ptr %989, i64 16
  %1015 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %1014) #10
  br i1 %1015, label %1016, label %thread-pre-split

1016:                                             ; preds = %1013
  %1017 = call noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8) %990)
  br i1 %1017, label %1018, label %thread-pre-split

1018:                                             ; preds = %1016
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %79) #10
  %1019 = call noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6LValue7Storage9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(8) %990)
  invoke void @_Z15make_unique_ptrIN3HIR4PathEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind nonnull writable sret(%"class.std::unique_ptr.157") align 8 %81, ptr noundef nonnull align 8 dereferenceable(88) %1019)
          to label %1020 unwind label %.split21240.split

1020:                                             ; preds = %1018
  invoke void @_ZN3MIR8Constant13make_ItemAddrESt10unique_ptrIN3HIR4PathESt14default_deleteIS3_EE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %80, ptr noundef nonnull %81)
          to label %1021 unwind label %.split21243.split

1021:                                             ; preds = %1020
  invoke void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::RValue") align 8 %79, ptr noundef nonnull %80)
          to label %1022 unwind label %.split21246.split

1022:                                             ; preds = %1021
  %1023 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %79)
          to label %1024 unwind label %.split21249.split

1024:                                             ; preds = %1022
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %79) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %80) #10
  call void @_ZNSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %81) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %79) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %.loopexit2221

.split21240.split:                                ; preds = %1018
  %1025 = landingpad { ptr, i32 }
          cleanup
  br label %1031

.split21243.split:                                ; preds = %1020
  %1026 = landingpad { ptr, i32 }
          cleanup
  br label %1030

.split21246.split:                                ; preds = %1021
  %1027 = landingpad { ptr, i32 }
          cleanup
  br label %1029

.split21249.split:                                ; preds = %1022
  %1028 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %79) #10
  br label %1029

1029:                                             ; preds = %.split21249.split, %.split21246.split
  %.pn1853 = phi { ptr, i32 } [ %1028, %.split21249.split ], [ %1027, %.split21246.split ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %80) #10
  br label %1030

1030:                                             ; preds = %1029, %.split21243.split
  %.pn1853.pn = phi { ptr, i32 } [ %.pn1853, %1029 ], [ %1026, %.split21243.split ]
  call void @_ZNSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %81) #10
  br label %1031

1031:                                             ; preds = %1030, %.split21240.split
  %.pn1853.pn.pn = phi { ptr, i32 } [ %.pn1853.pn, %1030 ], [ %1025, %.split21240.split ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %79) #10
  br label %2863

thread-pre-split:                                 ; preds = %1013, %1016
  %.pr = load i32, ptr %989, align 8, !tbaa !42
  br label %1032

1032:                                             ; preds = %thread-pre-split, %.preheader2192.split.split
  %1033 = phi i32 [ %.pr, %thread-pre-split ], [ %991, %.preheader2192.split.split ]
  %1034 = icmp eq i32 %1033, 1
  br i1 %1034, label %1035, label %.loopexit2221

1035:                                             ; preds = %1032
  %1036 = invoke noundef i64 @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE5eraseERS6_(ptr noundef nonnull align 8 dereferenceable(48) %67, ptr noundef nonnull align 8 dereferenceable(32) %990)
          to label %1037 unwind label %.split21237.split

1037:                                             ; preds = %1035
  %1038 = invoke noundef i64 @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5eraseERS5_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(32) %990)
          to label %.loopexit2221 unwind label %.split21237.split

.lr.ph21232:                                      ; preds = %.lr.ph23181
  %1039 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue7as_CastEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %1040 = getelementptr inbounds i8, ptr %1039, i64 32
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %82) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %82)
          to label %1041 unwind label %1049

1041:                                             ; preds = %.lr.ph21232
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %83) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK3$_5clERKNS_6LValueE"(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %83, ptr noundef nonnull align 8 dereferenceable(16) %70, ptr noundef nonnull align 8 dereferenceable(32) %1039)
          to label %1042 unwind label %1051

1042:                                             ; preds = %1041
  %1043 = call noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  br i1 %1043, label %1189, label %1044

1044:                                             ; preds = %1042
  %1045 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1040)
  %1046 = call noundef ptr @_ZNK3HIR8TypeData13opt_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %1045)
  %.not1803 = icmp eq ptr %1046, null
  br i1 %.not1803, label %1267, label %1047

1047:                                             ; preds = %1044
  %1048 = load i32, ptr %1046, align 4, !tbaa !39
  switch i32 %1048, label %1267 [
    i32 2, label %1055
    i32 4, label %1055
    i32 6, label %1055
    i32 8, label %1055
    i32 10, label %1055
    i32 0, label %1055
    i32 3, label %1130
    i32 5, label %1130
    i32 7, label %1130
    i32 9, label %1130
    i32 11, label %1130
    i32 1, label %1130
    i32 16, label %1181
  ]

1049:                                             ; preds = %.lr.ph21232
  %1050 = landingpad { ptr, i32 }
          cleanup
  br label %1307

1051:                                             ; preds = %1041
  %1052 = landingpad { ptr, i32 }
          cleanup
  br label %1306

1053:                                             ; preds = %1289, %1287, %1285, %1283, %1281, %1279, %1277, %1274, %1271, %1189
  %1054 = landingpad { ptr, i32 }
          cleanup
  br label %1305

1055:                                             ; preds = %1047, %1047, %1047, %1047, %1047, %1047
  %1056 = call noundef ptr @_ZN3MIR8Constant8opt_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1817 = icmp eq ptr %1056, null
  br i1 %.not1817, label %1072, label %1057

1057:                                             ; preds = %1055
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %84) #10
  %1058 = load i32, ptr %1046, align 4, !tbaa !39
  %.sroa.0889.0.copyload = load i64, ptr %1056, align 8, !tbaa !13
  %.sroa.2890.0..sroa_idx = getelementptr inbounds i8, ptr %1056, i64 8
  %.sroa.2890.0.copyload = load i64, ptr %.sroa.2890.0..sroa_idx, align 8, !tbaa !13
  %1059 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1058, i64 %.sroa.0889.0.copyload, i64 %.sroa.2890.0.copyload)
          to label %1060 unwind label %1067

1060:                                             ; preds = %1057
  %1061 = extractvalue { i64, i64 } %1059, 0
  store i64 %1061, ptr %85, align 8
  %1062 = extractvalue { i64, i64 } %1059, 1
  store i64 %1062, ptr %452, align 8
  %1063 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1063, ptr %453, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %84, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %85)
          to label %1064 unwind label %1067

1064:                                             ; preds = %1060
  %1065 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %84)
          to label %1066 unwind label %1069

1066:                                             ; preds = %1064
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %84) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %84) #10
  br label %1267

1067:                                             ; preds = %1060, %1057
  %1068 = landingpad { ptr, i32 }
          cleanup
  br label %1071

1069:                                             ; preds = %1064
  %1070 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %84) #10
  br label %1071

1071:                                             ; preds = %1069, %1067
  %.pn1829 = phi { ptr, i32 } [ %1070, %1069 ], [ %1068, %1067 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %84) #10
  br label %1305

1072:                                             ; preds = %1055
  %1073 = call noundef ptr @_ZN3MIR8Constant7opt_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1818 = icmp eq ptr %1073, null
  br i1 %.not1818, label %1092, label %1074

1074:                                             ; preds = %1072
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %86) #10
  %1075 = load i32, ptr %1046, align 4, !tbaa !39
  %1076 = call { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16) %1073)
  %1077 = extractvalue { i64, i64 } %1076, 0
  %1078 = extractvalue { i64, i64 } %1076, 1
  %1079 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1075, i64 %1077, i64 %1078)
          to label %1080 unwind label %1087

1080:                                             ; preds = %1074
  %1081 = extractvalue { i64, i64 } %1079, 0
  store i64 %1081, ptr %87, align 8
  %1082 = extractvalue { i64, i64 } %1079, 1
  store i64 %1082, ptr %454, align 8
  %1083 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1083, ptr %455, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %86, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %87)
          to label %1084 unwind label %1087

1084:                                             ; preds = %1080
  %1085 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %86)
          to label %1086 unwind label %1089

1086:                                             ; preds = %1084
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %86) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %86) #10
  br label %1267

1087:                                             ; preds = %1080, %1074
  %1088 = landingpad { ptr, i32 }
          cleanup
  br label %1091

1089:                                             ; preds = %1084
  %1090 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %86) #10
  br label %1091

1091:                                             ; preds = %1089, %1087
  %.pn1826 = phi { ptr, i32 } [ %1090, %1089 ], [ %1088, %1087 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %86) #10
  br label %1305

1092:                                             ; preds = %1072
  %1093 = call noundef ptr @_ZN3MIR8Constant8opt_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1819 = icmp eq ptr %1093, null
  br i1 %.not1819, label %1106, label %1094

1094:                                             ; preds = %1092
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %88) #10
  %1095 = load i8, ptr %1093, align 1, !tbaa !46, !range !48, !noundef !49
  %1096 = zext nneg i8 %1095 to i64
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %89, i64 noundef %1096, i64 noundef 0)
  %1097 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1097, ptr %456, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %88, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %89)
          to label %1098 unwind label %1101

1098:                                             ; preds = %1094
  %1099 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %88)
          to label %1100 unwind label %1103

1100:                                             ; preds = %1098
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %88) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %88) #10
  br label %1267

1101:                                             ; preds = %1094
  %1102 = landingpad { ptr, i32 }
          cleanup
  br label %1105

1103:                                             ; preds = %1098
  %1104 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %88) #10
  br label %1105

1105:                                             ; preds = %1103, %1101
  %.pn1823 = phi { ptr, i32 } [ %1104, %1103 ], [ %1102, %1101 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %88) #10
  br label %1305

1106:                                             ; preds = %1092
  %1107 = call noundef ptr @_ZN3MIR8Constant9opt_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1820 = icmp eq ptr %1107, null
  br i1 %.not1820, label %1267, label %1108

1108:                                             ; preds = %1106
  %1109 = load double, ptr %1107, align 8, !tbaa !50
  %1110 = fcmp ult double %1109, 0.000000e+00
  %1111 = fcmp ugt double %1109, 0x43F0000000000000
  %or.cond1943 = or i1 %1110, %1111
  br i1 %or.cond1943, label %1267, label %1112

1112:                                             ; preds = %1108
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %90) #10
  %1113 = load i32, ptr %1046, align 4, !tbaa !39
  %1114 = fptoui double %1109 to i64
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %92, i64 noundef %1114, i64 noundef 0)
  %1115 = load i64, ptr %92, align 8
  %1116 = load i64, ptr %457, align 8
  %1117 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1113, i64 %1115, i64 %1116)
          to label %1118 unwind label %1125

1118:                                             ; preds = %1112
  %1119 = extractvalue { i64, i64 } %1117, 0
  store i64 %1119, ptr %91, align 8
  %1120 = extractvalue { i64, i64 } %1117, 1
  store i64 %1120, ptr %458, align 8
  %1121 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1121, ptr %459, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %90, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %91)
          to label %1122 unwind label %1125

1122:                                             ; preds = %1118
  %1123 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %90)
          to label %1124 unwind label %1127

1124:                                             ; preds = %1122
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %90) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %90) #10
  br label %1267

1125:                                             ; preds = %1118, %1112
  %1126 = landingpad { ptr, i32 }
          cleanup
  br label %1129

1127:                                             ; preds = %1122
  %1128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %90) #10
  br label %1129

1129:                                             ; preds = %1127, %1125
  %.pn1821 = phi { ptr, i32 } [ %1128, %1127 ], [ %1126, %1125 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %90) #10
  br label %1305

1130:                                             ; preds = %1047, %1047, %1047, %1047, %1047, %1047
  %1131 = call noundef ptr @_ZN3MIR8Constant8opt_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1806 = icmp eq ptr %1131, null
  br i1 %.not1806, label %1149, label %1132

1132:                                             ; preds = %1130
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %93) #10
  %1133 = load i32, ptr %1046, align 4, !tbaa !39
  %.sroa.0875.0.copyload = load i64, ptr %1131, align 8, !tbaa !13
  %.sroa.2876.0..sroa_idx = getelementptr inbounds i8, ptr %1131, i64 8
  %.sroa.2876.0.copyload = load i64, ptr %.sroa.2876.0..sroa_idx, align 8, !tbaa !13
  call void @_ZN4S128C2E4U128(ptr noundef nonnull align 8 dereferenceable(16) %95, i64 %.sroa.0875.0.copyload, i64 %.sroa.2876.0.copyload)
  %1134 = load i64, ptr %95, align 8
  %1135 = load i64, ptr %446, align 8
  %1136 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1133, i64 %1134, i64 %1135)
          to label %1137 unwind label %1144

1137:                                             ; preds = %1132
  %1138 = extractvalue { i64, i64 } %1136, 0
  store i64 %1138, ptr %94, align 8
  %1139 = extractvalue { i64, i64 } %1136, 1
  store i64 %1139, ptr %447, align 8
  %1140 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1140, ptr %448, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %93, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %94)
          to label %1141 unwind label %1144

1141:                                             ; preds = %1137
  %1142 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %93)
          to label %1143 unwind label %1146

1143:                                             ; preds = %1141
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %93) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %93) #10
  br label %1267

1144:                                             ; preds = %1137, %1132
  %1145 = landingpad { ptr, i32 }
          cleanup
  br label %1148

1146:                                             ; preds = %1141
  %1147 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %93) #10
  br label %1148

1148:                                             ; preds = %1146, %1144
  %.pn1814 = phi { ptr, i32 } [ %1147, %1146 ], [ %1145, %1144 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %93) #10
  br label %1305

1149:                                             ; preds = %1130
  %1150 = call noundef ptr @_ZN3MIR8Constant7opt_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1807 = icmp eq ptr %1150, null
  br i1 %.not1807, label %1166, label %1151

1151:                                             ; preds = %1149
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %96) #10
  %1152 = load i32, ptr %1046, align 4, !tbaa !39
  %.sroa.0871.0.copyload = load i64, ptr %1150, align 8, !tbaa !13
  %.sroa.2872.0..sroa_idx = getelementptr inbounds i8, ptr %1150, i64 8
  %.sroa.2872.0.copyload = load i64, ptr %.sroa.2872.0..sroa_idx, align 8, !tbaa !13
  %1153 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1152, i64 %.sroa.0871.0.copyload, i64 %.sroa.2872.0.copyload)
          to label %1154 unwind label %1161

1154:                                             ; preds = %1151
  %1155 = extractvalue { i64, i64 } %1153, 0
  store i64 %1155, ptr %97, align 8
  %1156 = extractvalue { i64, i64 } %1153, 1
  store i64 %1156, ptr %449, align 8
  %1157 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1157, ptr %450, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %96, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %97)
          to label %1158 unwind label %1161

1158:                                             ; preds = %1154
  %1159 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %96)
          to label %1160 unwind label %1163

1160:                                             ; preds = %1158
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %96) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %96) #10
  br label %1267

1161:                                             ; preds = %1154, %1151
  %1162 = landingpad { ptr, i32 }
          cleanup
  br label %1165

1163:                                             ; preds = %1158
  %1164 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %96) #10
  br label %1165

1165:                                             ; preds = %1163, %1161
  %.pn1811 = phi { ptr, i32 } [ %1164, %1163 ], [ %1162, %1161 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %96) #10
  br label %1305

1166:                                             ; preds = %1149
  %1167 = call noundef ptr @_ZN3MIR8Constant8opt_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %83)
  %.not1808 = icmp eq ptr %1167, null
  br i1 %.not1808, label %1267, label %1168

1168:                                             ; preds = %1166
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %98) #10
  %1169 = load i8, ptr %1167, align 1, !tbaa !46, !range !48, !noundef !49
  %1170 = zext nneg i8 %1169 to i64
  invoke void @_ZN4S128C2El(ptr noundef nonnull align 8 dereferenceable(16) %99, i64 noundef %1170)
          to label %1171 unwind label %1176

1171:                                             ; preds = %1168
  %1172 = load i32, ptr %1046, align 4, !tbaa !39
  store i32 %1172, ptr %451, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %98, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %99)
          to label %1173 unwind label %1176

1173:                                             ; preds = %1171
  %1174 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %98)
          to label %1175 unwind label %1178

1175:                                             ; preds = %1173
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %98) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %98) #10
  br label %1267

1176:                                             ; preds = %1171, %1168
  %1177 = landingpad { ptr, i32 }
          cleanup
  br label %1180

1178:                                             ; preds = %1173
  %1179 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %98) #10
  br label %1180

1180:                                             ; preds = %1178, %1176
  %.pn1809 = phi { ptr, i32 } [ %1179, %1178 ], [ %1177, %1176 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %98) #10
  br label %1305

1181:                                             ; preds = %1047
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %100) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %100, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %102) #10
  store ptr %100, ptr %102, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %101, ptr noundef nonnull align 8 dereferenceable(8) %102) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %101)
          to label %1182 unwind label %1184

1182:                                             ; preds = %1181
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #10
  %1183 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %1183, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %1183, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %1186

1184:                                             ; preds = %1181
  %1185 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %101) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %102) #10
  br label %1188

1186:                                             ; preds = %1182
  %1187 = landingpad { ptr, i32 }
          cleanup
  br label %1188

1188:                                             ; preds = %1186, %1184
  %.pn1804 = phi { ptr, i32 } [ %1187, %1186 ], [ %1185, %1184 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %100) #10
  br label %1305

1189:                                             ; preds = %1042
  %1190 = invoke noundef i64 @_ZNKSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5countERS5_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(32) %1039)
          to label %1191 unwind label %1053

1191:                                             ; preds = %1189
  %.not1833 = icmp eq i64 %1190, 0
  br i1 %.not1833, label %1267, label %1192

1192:                                             ; preds = %1191
  %1193 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE2atERS5_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(32) %1039)
          to label %1194 unwind label %1200

1194:                                             ; preds = %1192
  %1195 = load i32, ptr %1193, align 4, !tbaa !11
  %1196 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1040)
  %1197 = call noundef zeroext i1 @_ZNK3HIR8TypeData12is_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %1196)
  br i1 %1197, label %1204, label %1198

1198:                                             ; preds = %1194
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %104) #10
  store ptr %1039, ptr %104, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %103, ptr noundef nonnull align 8 dereferenceable(8) %104) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %103)
          to label %1199 unwind label %1202

1199:                                             ; preds = %1198
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #10
  br label %1204

1200:                                             ; preds = %1192
  %1201 = landingpad { ptr, i32 }
          cleanup
  br label %1305

1202:                                             ; preds = %1198
  %1203 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %103) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %104) #10
  br label %1305

1204:                                             ; preds = %1199, %1194
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %105) #10
  invoke void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105)
          to label %1205 unwind label %1217

1205:                                             ; preds = %1204
  %1206 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR11TypeResolve15get_lvalue_typeERN3HIR7TypeRefERKNS_6LValueEj(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(8) %105, ptr noundef nonnull align 8 dereferenceable(32) %1039, i32 noundef 0)
          to label %1207 unwind label %1219

1207:                                             ; preds = %1205
  %1208 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1206)
  %1209 = call noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184) %1208)
  %1210 = getelementptr inbounds i8, ptr %1209, i64 88
  %1211 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16) %1210)
  %1212 = load ptr, ptr %1211, align 8, !tbaa !9
  %1213 = invoke noundef zeroext i1 @_ZNK3HIR4Enum8is_valueEv(ptr noundef nonnull align 8 dereferenceable(200) %1212)
          to label %1214 unwind label %1221

1214:                                             ; preds = %1207
  br i1 %1213, label %1225, label %1215

1215:                                             ; preds = %1214
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %107) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %106, ptr noundef nonnull align 1 dereferenceable(1) %107) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %106)
          to label %1216 unwind label %1223

1216:                                             ; preds = %1215
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %107) #10
  br label %1225

1217:                                             ; preds = %1204
  %1218 = landingpad { ptr, i32 }
          cleanup
  br label %1266

1219:                                             ; preds = %1205
  %1220 = landingpad { ptr, i32 }
          cleanup
  br label %1265

1221:                                             ; preds = %1207
  %1222 = landingpad { ptr, i32 }
          cleanup
  br label %1265

1223:                                             ; preds = %1215
  %1224 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %106) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %107) #10
  br label %1265

1225:                                             ; preds = %1216, %1214
  %1226 = zext i32 %1195 to i64
  %1227 = invoke noundef i32 @_ZNK3HIR4Enum9get_valueEm(ptr noundef nonnull align 8 dereferenceable(200) %1212, i64 noundef %1226)
          to label %1228 unwind label %1232

1228:                                             ; preds = %1225
  %1229 = call noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8) %1040)
  %1230 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184) %1229)
  %1231 = load i32, ptr %1230, align 4, !tbaa !39
  switch i32 %1231, label %1264 [
    i32 2, label %1234
    i32 4, label %1234
    i32 6, label %1234
    i32 8, label %1234
    i32 10, label %1234
    i32 0, label %1234
    i32 3, label %1244
    i32 5, label %1244
    i32 7, label %1244
    i32 9, label %1244
    i32 11, label %1244
    i32 1, label %1244
    i32 16, label %1256
  ]

1232:                                             ; preds = %1225
  %1233 = landingpad { ptr, i32 }
          cleanup
  br label %1265

1234:                                             ; preds = %1228, %1228, %1228, %1228, %1228, %1228
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %108) #10
  %1235 = zext i32 %1227 to i64
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %109, i64 noundef %1235, i64 noundef 0)
  store i32 %1231, ptr %462, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %108, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %109)
          to label %1236 unwind label %1239

1236:                                             ; preds = %1234
  %1237 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %108)
          to label %1238 unwind label %1241

1238:                                             ; preds = %1236
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %108) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %108) #10
  br label %1264

1239:                                             ; preds = %1234
  %1240 = landingpad { ptr, i32 }
          cleanup
  br label %1243

1241:                                             ; preds = %1236
  %1242 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %108) #10
  br label %1243

1243:                                             ; preds = %1241, %1239
  %.pn1838 = phi { ptr, i32 } [ %1242, %1241 ], [ %1240, %1239 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %108) #10
  br label %1265

1244:                                             ; preds = %1228, %1228, %1228, %1228, %1228, %1228
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %110) #10
  %1245 = zext i32 %1227 to i64
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %112, i64 noundef %1245, i64 noundef 0)
  %1246 = load i64, ptr %112, align 8
  %1247 = load i64, ptr %460, align 8
  call void @_ZN4S128C2E4U128(ptr noundef nonnull align 8 dereferenceable(16) %111, i64 %1246, i64 %1247)
  store i32 %1231, ptr %461, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %110, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %111)
          to label %1248 unwind label %1251

1248:                                             ; preds = %1244
  %1249 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %110)
          to label %1250 unwind label %1253

1250:                                             ; preds = %1248
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %110) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %110) #10
  br label %1264

1251:                                             ; preds = %1244
  %1252 = landingpad { ptr, i32 }
          cleanup
  br label %1255

1253:                                             ; preds = %1248
  %1254 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %110) #10
  br label %1255

1255:                                             ; preds = %1253, %1251
  %.pn1836 = phi { ptr, i32 } [ %1254, %1253 ], [ %1252, %1251 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %110) #10
  br label %1265

1256:                                             ; preds = %1228
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %113) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %113, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %115) #10
  store ptr %113, ptr %115, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %114, ptr noundef nonnull align 8 dereferenceable(8) %115) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %114)
          to label %1257 unwind label %1259

1257:                                             ; preds = %1256
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #10
  %1258 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %1258, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %1258, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %1261

1259:                                             ; preds = %1256
  %1260 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %114) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %115) #10
  br label %1263

1261:                                             ; preds = %1257
  %1262 = landingpad { ptr, i32 }
          cleanup
  br label %1263

1263:                                             ; preds = %1261, %1259
  %.pn1834 = phi { ptr, i32 } [ %1262, %1261 ], [ %1260, %1259 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %113) #10
  br label %1265

1264:                                             ; preds = %1250, %1238, %1228
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #10
  br label %1267

1265:                                             ; preds = %1221, %1223, %1243, %1255, %1263, %1232, %1219
  %.pn1834.pn.pn.pn.pn = phi { ptr, i32 } [ %1220, %1219 ], [ %1224, %1223 ], [ %1222, %1221 ], [ %1233, %1232 ], [ %.pn1834, %1263 ], [ %.pn1836, %1255 ], [ %.pn1838, %1243 ]
  call void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8) %105) #10
  br label %1266

1266:                                             ; preds = %1265, %1217
  %.pn1834.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1834.pn.pn.pn.pn, %1265 ], [ %1218, %1217 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %105) #10
  br label %1305

1267:                                             ; preds = %1044, %1047, %1086, %1108, %1124, %1106, %1100, %1066, %1160, %1166, %1175, %1143, %1264, %1191
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %116) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %116)
          to label %1268 unwind label %1291

1268:                                             ; preds = %1267
  %1269 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %82, ptr noundef nonnull align 8 dereferenceable(40) %116)
          to label %1270 unwind label %1293

1270:                                             ; preds = %1268
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %116) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %116) #10
  br i1 %1269, label %1271, label %..loopexit2175_crit_edge

1271:                                             ; preds = %1270
  %1272 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1273 unwind label %1053

1273:                                             ; preds = %1271
  br i1 %1272, label %1274, label %1296

1274:                                             ; preds = %1273
  %1275 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %1276 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1275, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1277 unwind label %1053

1277:                                             ; preds = %1274
  %1278 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1276, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %1279 unwind label %1053

1279:                                             ; preds = %1277
  %1280 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1278, ptr noundef nonnull @.str.38)
          to label %1281 unwind label %1053

1281:                                             ; preds = %1279
  %1282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %1280, ptr noundef nonnull align 8 dereferenceable(112) %962)
          to label %1283 unwind label %1053

1283:                                             ; preds = %1281
  %1284 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1282, ptr noundef nonnull @.str.60)
          to label %1285 unwind label %1053

1285:                                             ; preds = %1283
  %1286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %1284, ptr noundef nonnull align 8 dereferenceable(40) %82)
          to label %1287 unwind label %1053

1287:                                             ; preds = %1285
  %1288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1286, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %1289 unwind label %1053

1289:                                             ; preds = %1287
  %1290 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1288, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1296 unwind label %1053

1291:                                             ; preds = %1267
  %1292 = landingpad { ptr, i32 }
          cleanup
  br label %1295

1293:                                             ; preds = %1268
  %1294 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %116) #10
  br label %1295

1295:                                             ; preds = %1293, %1291
  %.pn1846 = phi { ptr, i32 } [ %1294, %1293 ], [ %1292, %1291 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %116) #10
  br label %1305

1296:                                             ; preds = %1289, %1273
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %117) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %118, ptr noundef nonnull align 8 dereferenceable(40) %82) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %117, ptr noundef nonnull %118)
          to label %1297 unwind label %1300

1297:                                             ; preds = %1296
  %1298 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %117)
          to label %1299 unwind label %1302

1299:                                             ; preds = %1297
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %117) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %118) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %117) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %..loopexit2175_crit_edge

1300:                                             ; preds = %1296
  %1301 = landingpad { ptr, i32 }
          cleanup
  br label %1304

1302:                                             ; preds = %1297
  %1303 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %117) #10
  br label %1304

1304:                                             ; preds = %1302, %1300
  %.pn1848 = phi { ptr, i32 } [ %1303, %1302 ], [ %1301, %1300 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %118) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %117) #10
  br label %1305

..loopexit2175_crit_edge:                         ; preds = %1299, %1270
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %83) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %83) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %82) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %82) #10
  br label %.loopexit2221

1305:                                             ; preds = %1200, %1202, %1266, %1188, %1091, %1129, %1105, %1071, %1165, %1180, %1148, %1304, %1295, %1053
  %.pn1848.pn = phi { ptr, i32 } [ %.pn1848, %1304 ], [ %1054, %1053 ], [ %.pn1846, %1295 ], [ %.pn1804, %1188 ], [ %.pn1829, %1071 ], [ %.pn1826, %1091 ], [ %.pn1823, %1105 ], [ %.pn1821, %1129 ], [ %.pn1814, %1148 ], [ %.pn1811, %1165 ], [ %.pn1809, %1180 ], [ %.pn1834.pn.pn.pn.pn.pn, %1266 ], [ %1203, %1202 ], [ %1201, %1200 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %83) #10
  br label %1306

1306:                                             ; preds = %1305, %1051
  %.pn1848.pn.pn = phi { ptr, i32 } [ %.pn1848.pn, %1305 ], [ %1052, %1051 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %83) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %82) #10
  br label %1307

1307:                                             ; preds = %1306, %1049
  %.pn1848.pn.pn.pn = phi { ptr, i32 } [ %.pn1848.pn.pn, %1306 ], [ %1050, %1049 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %82) #10
  br label %2863

.lr.ph21229:                                      ; preds = %.lr.ph23181
  %1308 = call noundef nonnull align 8 dereferenceable(104) ptr @_ZN3MIR6RValue8as_BinOpEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %1309 = getelementptr inbounds i8, ptr %1308, i64 56
  %1310 = getelementptr inbounds i8, ptr %1308, i64 48
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %1308)
          to label %1313 unwind label %1311

1311:                                             ; preds = %1313, %.lr.ph21229
  %1312 = landingpad { ptr, i32 }
          cleanup
  br label %2863

1313:                                             ; preds = %.lr.ph21229
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %1309)
          to label %1314 unwind label %1311

1314:                                             ; preds = %1313
  %1315 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1308)
  br i1 %1315, label %1316, label %2268

1316:                                             ; preds = %1314
  %1317 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  br i1 %1317, label %1318, label %2268

1318:                                             ; preds = %1316
  %1319 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1308)
  %1320 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %1321 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1321, label %.loopexit2221, label %1322

1322:                                             ; preds = %1318
  %1323 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  br i1 %1323, label %.loopexit2221, label %1324

1324:                                             ; preds = %1322
  %1325 = call noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1325, label %.loopexit2221, label %1326

1326:                                             ; preds = %1324
  %1327 = call noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  br i1 %1327, label %.loopexit2221, label %1328

1328:                                             ; preds = %1326
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %119) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %119)
          to label %1329 unwind label %1331

1329:                                             ; preds = %1328
  %1330 = load i32, ptr %1310, align 8, !tbaa !56
  switch i32 %1330, label %.loopexit2162 [
    i32 14, label %1333
    i32 15, label %1349
    i32 18, label %1363
    i32 19, label %1377
    i32 16, label %1391
    i32 17, label %1405
    i32 0, label %1419
    i32 2, label %1501
    i32 4, label %1583
    i32 6, label %1665
    i32 8, label %1793
    i32 10, label %1879
    i32 9, label %1951
    i32 11, label %2023
    i32 13, label %.split8146
    i32 12, label %.split6964
  ]

1331:                                             ; preds = %1328
  %1332 = landingpad { ptr, i32 }
          cleanup
  br label %2267

1333:                                             ; preds = %1329
  %1334 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1334, label %.loopexit2162, label %1335

1335:                                             ; preds = %1333
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %120) #10
  %1336 = invoke noundef zeroext i1 @_ZNK3MIR8ConstanteqERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %1319, ptr noundef nonnull align 8 dereferenceable(40) %1320)
          to label %1337 unwind label %1344

1337:                                             ; preds = %1335
  %1338 = zext i1 %1336 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %120, i8 %1338)
          to label %1339 unwind label %1344

1339:                                             ; preds = %1337
  %1340 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %120)
          to label %1341 unwind label %1346

1341:                                             ; preds = %1339
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %120) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %120) #10
  br label %.loopexit2162

1342:                                             ; preds = %2249, %2247, %2245, %2243, %2241, %2239, %2237, %2234, %2231
  %1343 = landingpad { ptr, i32 }
          cleanup
  br label %2266

1344:                                             ; preds = %1337, %1335
  %1345 = landingpad { ptr, i32 }
          cleanup
  br label %1348

1346:                                             ; preds = %1339
  %1347 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %120) #10
  br label %1348

1348:                                             ; preds = %1346, %1344
  %.pn1794 = phi { ptr, i32 } [ %1347, %1346 ], [ %1345, %1344 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %120) #10
  br label %2266

1349:                                             ; preds = %1329
  %1350 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1350, label %.loopexit2162, label %1351

1351:                                             ; preds = %1349
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %121) #10
  %1352 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %1319, ptr noundef nonnull align 8 dereferenceable(40) %1320)
          to label %1353 unwind label %1358

1353:                                             ; preds = %1351
  %1354 = zext i1 %1352 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %121, i8 %1354)
          to label %1355 unwind label %1358

1355:                                             ; preds = %1353
  %1356 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %121)
          to label %1357 unwind label %1360

1357:                                             ; preds = %1355
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %121) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %121) #10
  br label %.loopexit2162

1358:                                             ; preds = %1353, %1351
  %1359 = landingpad { ptr, i32 }
          cleanup
  br label %1362

1360:                                             ; preds = %1355
  %1361 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %121) #10
  br label %1362

1362:                                             ; preds = %1360, %1358
  %.pn1792 = phi { ptr, i32 } [ %1361, %1360 ], [ %1359, %1358 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %121) #10
  br label %2266

1363:                                             ; preds = %1329
  %1364 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1364, label %.loopexit2162, label %1365

1365:                                             ; preds = %1363
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %122) #10
  %1366 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantltERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %1319, ptr noundef nonnull align 8 dereferenceable(40) %1320)
          to label %1367 unwind label %1372

1367:                                             ; preds = %1365
  %1368 = zext i1 %1366 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %122, i8 %1368)
          to label %1369 unwind label %1372

1369:                                             ; preds = %1367
  %1370 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %122)
          to label %1371 unwind label %1374

1371:                                             ; preds = %1369
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %122) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %122) #10
  br label %.loopexit2162

1372:                                             ; preds = %1367, %1365
  %1373 = landingpad { ptr, i32 }
          cleanup
  br label %1376

1374:                                             ; preds = %1369
  %1375 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %122) #10
  br label %1376

1376:                                             ; preds = %1374, %1372
  %.pn1790 = phi { ptr, i32 } [ %1375, %1374 ], [ %1373, %1372 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %122) #10
  br label %2266

1377:                                             ; preds = %1329
  %1378 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1378, label %.loopexit2162, label %1379

1379:                                             ; preds = %1377
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %123) #10
  %1380 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantleERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %1319, ptr noundef nonnull align 8 dereferenceable(40) %1320)
          to label %1381 unwind label %1386

1381:                                             ; preds = %1379
  %1382 = zext i1 %1380 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %123, i8 %1382)
          to label %1383 unwind label %1386

1383:                                             ; preds = %1381
  %1384 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %123)
          to label %1385 unwind label %1388

1385:                                             ; preds = %1383
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %123) #10
  br label %.loopexit2162

1386:                                             ; preds = %1381, %1379
  %1387 = landingpad { ptr, i32 }
          cleanup
  br label %1390

1388:                                             ; preds = %1383
  %1389 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %123) #10
  br label %1390

1390:                                             ; preds = %1388, %1386
  %.pn1788 = phi { ptr, i32 } [ %1389, %1388 ], [ %1387, %1386 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %123) #10
  br label %2266

1391:                                             ; preds = %1329
  %1392 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1392, label %.loopexit2162, label %1393

1393:                                             ; preds = %1391
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %124) #10
  %1394 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantgtERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %1319, ptr noundef nonnull align 8 dereferenceable(40) %1320)
          to label %1395 unwind label %1400

1395:                                             ; preds = %1393
  %1396 = zext i1 %1394 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %124, i8 %1396)
          to label %1397 unwind label %1400

1397:                                             ; preds = %1395
  %1398 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %124)
          to label %1399 unwind label %1402

1399:                                             ; preds = %1397
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %124) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %124) #10
  br label %.loopexit2162

1400:                                             ; preds = %1395, %1393
  %1401 = landingpad { ptr, i32 }
          cleanup
  br label %1404

1402:                                             ; preds = %1397
  %1403 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %124) #10
  br label %1404

1404:                                             ; preds = %1402, %1400
  %.pn1786 = phi { ptr, i32 } [ %1403, %1402 ], [ %1401, %1400 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %124) #10
  br label %2266

1405:                                             ; preds = %1329
  %1406 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  br i1 %1406, label %.loopexit2162, label %1407

1407:                                             ; preds = %1405
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %125) #10
  %1408 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantgeERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %1319, ptr noundef nonnull align 8 dereferenceable(40) %1320)
          to label %1409 unwind label %1414

1409:                                             ; preds = %1407
  %1410 = zext i1 %1408 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %125, i8 %1410)
          to label %1411 unwind label %1414

1411:                                             ; preds = %1409
  %1412 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %125)
          to label %1413 unwind label %1416

1413:                                             ; preds = %1411
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %125) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %125) #10
  br label %.loopexit2162

1414:                                             ; preds = %1409, %1407
  %1415 = landingpad { ptr, i32 }
          cleanup
  br label %1418

1416:                                             ; preds = %1411
  %1417 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %125) #10
  br label %1418

1418:                                             ; preds = %1416, %1414
  %.pn1784 = phi { ptr, i32 } [ %1417, %1416 ], [ %1415, %1414 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %125) #10
  br label %2266

1419:                                             ; preds = %1329
  %1420 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1421 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1422 = icmp eq i32 %1420, %1421
  br i1 %1422, label %.lr.ph21225, label %1423

1423:                                             ; preds = %1419
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %127) #10
  store ptr %1319, ptr %127, align 8, !tbaa !9
  store ptr %1320, ptr %438, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %126, ptr noundef nonnull align 8 dereferenceable(16) %127) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %126)
          to label %1424 unwind label %1425

1424:                                             ; preds = %1423
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %127) #10
  br label %.lr.ph21225

1425:                                             ; preds = %1423
  %1426 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %126) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %127) #10
  br label %2266

.lr.ph21225:                                      ; preds = %1424, %1419
  %1427 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1427, label %.loopexit2162 [
    i32 0, label %1449
    i32 3, label %.preheader
    i32 1, label %.preheader2050
    i32 2, label %.preheader2052
  ]

.preheader2052:                                   ; preds = %.lr.ph21225
  %1428 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1429 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1430 = getelementptr inbounds i8, ptr %1428, i64 16
  %1431 = getelementptr inbounds i8, ptr %1429, i64 16
  %.sroa.2654.0..sroa_idx = getelementptr inbounds i8, ptr %1429, i64 8
  %1432 = load i32, ptr %1430, align 8, !tbaa !21
  %1433 = load i32, ptr %1431, align 8, !tbaa !21
  %1434 = icmp eq i32 %1432, %1433
  br i1 %1434, label %1485, label %1482

.preheader2050:                                   ; preds = %.lr.ph21225
  %1435 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1436 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1437 = getelementptr inbounds i8, ptr %1435, i64 16
  %1438 = getelementptr inbounds i8, ptr %1436, i64 16
  %.sroa.2668.0..sroa_idx = getelementptr inbounds i8, ptr %1436, i64 8
  %1439 = load i32, ptr %1437, align 8, !tbaa !53
  %1440 = load i32, ptr %1438, align 8, !tbaa !53
  %1441 = icmp eq i32 %1439, %1440
  br i1 %1441, label %1466, label %1463

.preheader:                                       ; preds = %.lr.ph21225
  %1442 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1443 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1444 = getelementptr inbounds i8, ptr %1442, i64 8
  %1445 = getelementptr inbounds i8, ptr %1443, i64 8
  %1446 = load i32, ptr %1444, align 8, !tbaa !61
  %1447 = load i32, ptr %1445, align 8, !tbaa !61
  %1448 = icmp eq i32 %1446, %1447
  br i1 %1448, label %1453, label %1450

1449:                                             ; preds = %.lr.ph21225
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4011, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1450:                                             ; preds = %.preheader
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %129) #10
  store ptr %1319, ptr %129, align 8, !tbaa !9
  store ptr %1320, ptr %445, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %128, ptr noundef nonnull align 8 dereferenceable(16) %129) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %128)
          to label %1451 unwind label %.split20465.split

1451:                                             ; preds = %1450
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %129) #10
  %.pre23508 = load i32, ptr %1444, align 8, !tbaa !61
  br label %1453

.split20465.split:                                ; preds = %1450
  %1452 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %128) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %129) #10
  br label %2266

1453:                                             ; preds = %1451, %.preheader
  %1454 = phi i32 [ %.pre23508, %1451 ], [ %1446, %.preheader ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %130) #10
  %1455 = load double, ptr %1442, align 8, !tbaa !50
  %1456 = load double, ptr %1443, align 8, !tbaa !50
  %1457 = fadd double %1455, %1456
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %130, double %1457, i32 %1454)
          to label %1458 unwind label %.split20468.split

1458:                                             ; preds = %1453
  %1459 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %130)
          to label %..loopexit_crit_edge unwind label %.split20471.split

..loopexit_crit_edge:                             ; preds = %1458
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %130) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %130) #10
  br label %.loopexit2162

.split20468.split:                                ; preds = %1453
  %1460 = landingpad { ptr, i32 }
          cleanup
  br label %1462

.split20471.split:                                ; preds = %1458
  %1461 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %130) #10
  br label %1462

1462:                                             ; preds = %.split20471.split, %.split20468.split
  %.pn1780 = phi { ptr, i32 } [ %1461, %.split20471.split ], [ %1460, %.split20468.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %130) #10
  br label %2266

1463:                                             ; preds = %.preheader2050
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %132) #10
  store ptr %1319, ptr %132, align 8, !tbaa !9
  store ptr %1320, ptr %442, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %131, ptr noundef nonnull align 8 dereferenceable(16) %132) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %131)
          to label %1464 unwind label %.split19689.split

1464:                                             ; preds = %1463
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %132) #10
  %.pre23507 = load i32, ptr %1437, align 8, !tbaa !53
  br label %1466

.split19689.split:                                ; preds = %1463
  %1465 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %131) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %132) #10
  br label %2266

1466:                                             ; preds = %1464, %.preheader2050
  %1467 = phi i32 [ %.pre23507, %1464 ], [ %1439, %.preheader2050 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %133) #10
  %.sroa.0667.0.copyload = load i64, ptr %1436, align 8, !tbaa !13
  %.sroa.2668.0.copyload = load i64, ptr %.sroa.2668.0..sroa_idx, align 8, !tbaa !13
  %1468 = invoke { i64, i64 } @_ZNK4S128plES_(ptr noundef nonnull align 8 dereferenceable(16) %1435, i64 %.sroa.0667.0.copyload, i64 %.sroa.2668.0.copyload)
          to label %1469 unwind label %.split19692.split

1469:                                             ; preds = %1466
  %1470 = extractvalue { i64, i64 } %1468, 0
  %1471 = extractvalue { i64, i64 } %1468, 1
  %1472 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1467, i64 %1470, i64 %1471)
          to label %1473 unwind label %.split19692.split

1473:                                             ; preds = %1469
  %1474 = extractvalue { i64, i64 } %1472, 0
  store i64 %1474, ptr %134, align 8
  %1475 = extractvalue { i64, i64 } %1472, 1
  store i64 %1475, ptr %443, align 8
  %1476 = load i32, ptr %1437, align 8, !tbaa !53
  store i32 %1476, ptr %444, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %133, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %134)
          to label %1477 unwind label %.split19692.split

1477:                                             ; preds = %1473
  %1478 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %133)
          to label %..loopexit2007_crit_edge unwind label %.split19695.split

..loopexit2007_crit_edge:                         ; preds = %1477
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %133) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %133) #10
  br label %.loopexit2162

.split19692.split:                                ; preds = %1473, %1469, %1466
  %1479 = landingpad { ptr, i32 }
          cleanup
  br label %1481

.split19695.split:                                ; preds = %1477
  %1480 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %133) #10
  br label %1481

1481:                                             ; preds = %.split19695.split, %.split19692.split
  %.pn1777 = phi { ptr, i32 } [ %1480, %.split19695.split ], [ %1479, %.split19692.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %133) #10
  br label %2266

1482:                                             ; preds = %.preheader2052
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %136) #10
  store ptr %1319, ptr %136, align 8, !tbaa !9
  store ptr %1320, ptr %439, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %135, ptr noundef nonnull align 8 dereferenceable(16) %136) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %135)
          to label %1483 unwind label %.split18921.split

1483:                                             ; preds = %1482
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %136) #10
  %.pre23506 = load i32, ptr %1430, align 8, !tbaa !21
  br label %1485

.split18921.split:                                ; preds = %1482
  %1484 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %135) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %136) #10
  br label %2266

1485:                                             ; preds = %1483, %.preheader2052
  %1486 = phi i32 [ %.pre23506, %1483 ], [ %1432, %.preheader2052 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %137) #10
  %.sroa.0653.0.copyload = load i64, ptr %1429, align 8, !tbaa !13
  %.sroa.2654.0.copyload = load i64, ptr %.sroa.2654.0..sroa_idx, align 8, !tbaa !13
  %1487 = invoke { i64, i64 } @_ZNK4U128plES_(ptr noundef nonnull align 8 dereferenceable(16) %1428, i64 %.sroa.0653.0.copyload, i64 %.sroa.2654.0.copyload)
          to label %1488 unwind label %.split18924.split

1488:                                             ; preds = %1485
  %1489 = extractvalue { i64, i64 } %1487, 0
  %1490 = extractvalue { i64, i64 } %1487, 1
  %1491 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1486, i64 %1489, i64 %1490)
          to label %1492 unwind label %.split18924.split

1492:                                             ; preds = %1488
  %1493 = extractvalue { i64, i64 } %1491, 0
  store i64 %1493, ptr %138, align 8
  %1494 = extractvalue { i64, i64 } %1491, 1
  store i64 %1494, ptr %440, align 8
  %1495 = load i32, ptr %1430, align 8, !tbaa !21
  store i32 %1495, ptr %441, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %137, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %138)
          to label %1496 unwind label %.split18924.split

1496:                                             ; preds = %1492
  %1497 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %137)
          to label %..loopexit2008_crit_edge unwind label %.split18927.split

..loopexit2008_crit_edge:                         ; preds = %1496
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %137) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %137) #10
  br label %.loopexit2162

.split18924.split:                                ; preds = %1492, %1488, %1485
  %1498 = landingpad { ptr, i32 }
          cleanup
  br label %1500

.split18927.split:                                ; preds = %1496
  %1499 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %137) #10
  br label %1500

1500:                                             ; preds = %.split18927.split, %.split18924.split
  %.pn1774 = phi { ptr, i32 } [ %1499, %.split18927.split ], [ %1498, %.split18924.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %137) #10
  br label %2266

1501:                                             ; preds = %1329
  %1502 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1503 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1504 = icmp eq i32 %1502, %1503
  br i1 %1504, label %.lr.ph18915, label %1505

1505:                                             ; preds = %1501
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %140) #10
  store ptr %1319, ptr %140, align 8, !tbaa !9
  store ptr %1320, ptr %430, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %139, ptr noundef nonnull align 8 dereferenceable(16) %140) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %139)
          to label %1506 unwind label %1507

1506:                                             ; preds = %1505
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %140) #10
  br label %.lr.ph18915

1507:                                             ; preds = %1505
  %1508 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %139) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %140) #10
  br label %2266

.lr.ph18915:                                      ; preds = %1506, %1501
  %1509 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1509, label %.loopexit2162 [
    i32 0, label %1531
    i32 3, label %.preheader2054
    i32 1, label %.preheader2056
    i32 2, label %.preheader2058
  ]

.preheader2058:                                   ; preds = %.lr.ph18915
  %1510 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1511 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1512 = getelementptr inbounds i8, ptr %1510, i64 16
  %1513 = getelementptr inbounds i8, ptr %1511, i64 16
  %.sroa.2606.0..sroa_idx = getelementptr inbounds i8, ptr %1511, i64 8
  %1514 = load i32, ptr %1512, align 8, !tbaa !21
  %1515 = load i32, ptr %1513, align 8, !tbaa !21
  %1516 = icmp eq i32 %1514, %1515
  br i1 %1516, label %1567, label %1564

.preheader2056:                                   ; preds = %.lr.ph18915
  %1517 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1518 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1519 = getelementptr inbounds i8, ptr %1517, i64 16
  %1520 = getelementptr inbounds i8, ptr %1518, i64 16
  %.sroa.2620.0..sroa_idx = getelementptr inbounds i8, ptr %1518, i64 8
  %1521 = load i32, ptr %1519, align 8, !tbaa !53
  %1522 = load i32, ptr %1520, align 8, !tbaa !53
  %1523 = icmp eq i32 %1521, %1522
  br i1 %1523, label %1548, label %1545

.preheader2054:                                   ; preds = %.lr.ph18915
  %1524 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1525 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1526 = getelementptr inbounds i8, ptr %1524, i64 8
  %1527 = getelementptr inbounds i8, ptr %1525, i64 8
  %1528 = load i32, ptr %1526, align 8, !tbaa !61
  %1529 = load i32, ptr %1527, align 8, !tbaa !61
  %1530 = icmp eq i32 %1528, %1529
  br i1 %1530, label %1535, label %1532

1531:                                             ; preds = %.lr.ph18915
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4030, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1532:                                             ; preds = %.preheader2054
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %142) #10
  store ptr %1319, ptr %142, align 8, !tbaa !9
  store ptr %1320, ptr %437, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %141, ptr noundef nonnull align 8 dereferenceable(16) %142) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %141)
          to label %1533 unwind label %.split18179.split

1533:                                             ; preds = %1532
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %142) #10
  %.pre23505 = load i32, ptr %1526, align 8, !tbaa !61
  br label %1535

.split18179.split:                                ; preds = %1532
  %1534 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %141) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %142) #10
  br label %2266

1535:                                             ; preds = %1533, %.preheader2054
  %1536 = phi i32 [ %.pre23505, %1533 ], [ %1528, %.preheader2054 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %143) #10
  %1537 = load double, ptr %1524, align 8, !tbaa !50
  %1538 = load double, ptr %1525, align 8, !tbaa !50
  %1539 = fsub double %1537, %1538
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %143, double %1539, i32 %1536)
          to label %1540 unwind label %.split18182.split

1540:                                             ; preds = %1535
  %1541 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %143)
          to label %..loopexit2009_crit_edge unwind label %.split18185.split

..loopexit2009_crit_edge:                         ; preds = %1540
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %143) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %143) #10
  br label %.loopexit2162

.split18182.split:                                ; preds = %1535
  %1542 = landingpad { ptr, i32 }
          cleanup
  br label %1544

.split18185.split:                                ; preds = %1540
  %1543 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %143) #10
  br label %1544

1544:                                             ; preds = %.split18185.split, %.split18182.split
  %.pn1770 = phi { ptr, i32 } [ %1543, %.split18185.split ], [ %1542, %.split18182.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %143) #10
  br label %2266

1545:                                             ; preds = %.preheader2056
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %145) #10
  store ptr %1319, ptr %145, align 8, !tbaa !9
  store ptr %1320, ptr %434, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %144, ptr noundef nonnull align 8 dereferenceable(16) %145) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %144)
          to label %1546 unwind label %.split17427.split

1546:                                             ; preds = %1545
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %145) #10
  %.pre23504 = load i32, ptr %1519, align 8, !tbaa !53
  br label %1548

.split17427.split:                                ; preds = %1545
  %1547 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %144) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %145) #10
  br label %2266

1548:                                             ; preds = %1546, %.preheader2056
  %1549 = phi i32 [ %.pre23504, %1546 ], [ %1521, %.preheader2056 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %146) #10
  %.sroa.0619.0.copyload = load i64, ptr %1518, align 8, !tbaa !13
  %.sroa.2620.0.copyload = load i64, ptr %.sroa.2620.0..sroa_idx, align 8, !tbaa !13
  %1550 = invoke { i64, i64 } @_ZNK4S128miES_(ptr noundef nonnull align 8 dereferenceable(16) %1517, i64 %.sroa.0619.0.copyload, i64 %.sroa.2620.0.copyload)
          to label %1551 unwind label %.split17430.split

1551:                                             ; preds = %1548
  %1552 = extractvalue { i64, i64 } %1550, 0
  %1553 = extractvalue { i64, i64 } %1550, 1
  %1554 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1549, i64 %1552, i64 %1553)
          to label %1555 unwind label %.split17430.split

1555:                                             ; preds = %1551
  %1556 = extractvalue { i64, i64 } %1554, 0
  store i64 %1556, ptr %147, align 8
  %1557 = extractvalue { i64, i64 } %1554, 1
  store i64 %1557, ptr %435, align 8
  %1558 = load i32, ptr %1519, align 8, !tbaa !53
  store i32 %1558, ptr %436, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %146, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %147)
          to label %1559 unwind label %.split17430.split

1559:                                             ; preds = %1555
  %1560 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %146)
          to label %..loopexit2010_crit_edge unwind label %.split17433.split

..loopexit2010_crit_edge:                         ; preds = %1559
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %146) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %146) #10
  br label %.loopexit2162

.split17430.split:                                ; preds = %1555, %1551, %1548
  %1561 = landingpad { ptr, i32 }
          cleanup
  br label %1563

.split17433.split:                                ; preds = %1559
  %1562 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %146) #10
  br label %1563

1563:                                             ; preds = %.split17433.split, %.split17430.split
  %.pn1767 = phi { ptr, i32 } [ %1562, %.split17433.split ], [ %1561, %.split17430.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %146) #10
  br label %2266

1564:                                             ; preds = %.preheader2058
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %149) #10
  store ptr %1319, ptr %149, align 8, !tbaa !9
  store ptr %1320, ptr %431, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %148, ptr noundef nonnull align 8 dereferenceable(16) %149) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %148)
          to label %1565 unwind label %.split16683.split

1565:                                             ; preds = %1564
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %149) #10
  %.pre23503 = load i32, ptr %1512, align 8, !tbaa !21
  br label %1567

.split16683.split:                                ; preds = %1564
  %1566 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %148) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %149) #10
  br label %2266

1567:                                             ; preds = %1565, %.preheader2058
  %1568 = phi i32 [ %.pre23503, %1565 ], [ %1514, %.preheader2058 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %150) #10
  %.sroa.0605.0.copyload = load i64, ptr %1511, align 8, !tbaa !13
  %.sroa.2606.0.copyload = load i64, ptr %.sroa.2606.0..sroa_idx, align 8, !tbaa !13
  %1569 = invoke { i64, i64 } @_ZNK4U128miES_(ptr noundef nonnull align 8 dereferenceable(16) %1510, i64 %.sroa.0605.0.copyload, i64 %.sroa.2606.0.copyload)
          to label %1570 unwind label %.split16686.split

1570:                                             ; preds = %1567
  %1571 = extractvalue { i64, i64 } %1569, 0
  %1572 = extractvalue { i64, i64 } %1569, 1
  %1573 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1568, i64 %1571, i64 %1572)
          to label %1574 unwind label %.split16686.split

1574:                                             ; preds = %1570
  %1575 = extractvalue { i64, i64 } %1573, 0
  store i64 %1575, ptr %151, align 8
  %1576 = extractvalue { i64, i64 } %1573, 1
  store i64 %1576, ptr %432, align 8
  %1577 = load i32, ptr %1512, align 8, !tbaa !21
  store i32 %1577, ptr %433, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %150, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %151)
          to label %1578 unwind label %.split16686.split

1578:                                             ; preds = %1574
  %1579 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %150)
          to label %..loopexit2011_crit_edge unwind label %.split16689.split

..loopexit2011_crit_edge:                         ; preds = %1578
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %150) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %150) #10
  br label %.loopexit2162

.split16686.split:                                ; preds = %1574, %1570, %1567
  %1580 = landingpad { ptr, i32 }
          cleanup
  br label %1582

.split16689.split:                                ; preds = %1578
  %1581 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %150) #10
  br label %1582

1582:                                             ; preds = %.split16689.split, %.split16686.split
  %.pn1764 = phi { ptr, i32 } [ %1581, %.split16689.split ], [ %1580, %.split16686.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %150) #10
  br label %2266

1583:                                             ; preds = %1329
  %1584 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1585 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1586 = icmp eq i32 %1584, %1585
  br i1 %1586, label %.lr.ph16677, label %1587

1587:                                             ; preds = %1583
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %153) #10
  store ptr %1319, ptr %153, align 8, !tbaa !9
  store ptr %1320, ptr %422, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_19vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %152, ptr noundef nonnull align 8 dereferenceable(16) %153) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %152)
          to label %1588 unwind label %1589

1588:                                             ; preds = %1587
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %153) #10
  br label %.lr.ph16677

1589:                                             ; preds = %1587
  %1590 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %152) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %153) #10
  br label %2266

.lr.ph16677:                                      ; preds = %1588, %1583
  %1591 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1591, label %.loopexit2162 [
    i32 0, label %1613
    i32 3, label %.preheader2060
    i32 1, label %.preheader2062
    i32 2, label %.preheader2064
  ]

.preheader2064:                                   ; preds = %.lr.ph16677
  %1592 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1593 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1594 = getelementptr inbounds i8, ptr %1592, i64 16
  %1595 = getelementptr inbounds i8, ptr %1593, i64 16
  %.sroa.2558.0..sroa_idx = getelementptr inbounds i8, ptr %1593, i64 8
  %1596 = load i32, ptr %1594, align 8, !tbaa !21
  %1597 = load i32, ptr %1595, align 8, !tbaa !21
  %1598 = icmp eq i32 %1596, %1597
  br i1 %1598, label %1649, label %1646

.preheader2062:                                   ; preds = %.lr.ph16677
  %1599 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1600 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1601 = getelementptr inbounds i8, ptr %1599, i64 16
  %1602 = getelementptr inbounds i8, ptr %1600, i64 16
  %.sroa.2572.0..sroa_idx = getelementptr inbounds i8, ptr %1600, i64 8
  %1603 = load i32, ptr %1601, align 8, !tbaa !53
  %1604 = load i32, ptr %1602, align 8, !tbaa !53
  %1605 = icmp eq i32 %1603, %1604
  br i1 %1605, label %1630, label %1627

.preheader2060:                                   ; preds = %.lr.ph16677
  %1606 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1607 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1608 = getelementptr inbounds i8, ptr %1606, i64 8
  %1609 = getelementptr inbounds i8, ptr %1607, i64 8
  %1610 = load i32, ptr %1608, align 8, !tbaa !61
  %1611 = load i32, ptr %1609, align 8, !tbaa !61
  %1612 = icmp eq i32 %1610, %1611
  br i1 %1612, label %1617, label %1614

1613:                                             ; preds = %.lr.ph16677
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4049, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1614:                                             ; preds = %.preheader2060
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %155) #10
  store ptr %1319, ptr %155, align 8, !tbaa !9
  store ptr %1320, ptr %429, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_20vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %154, ptr noundef nonnull align 8 dereferenceable(16) %155) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %154)
          to label %1615 unwind label %.split15965.split

1615:                                             ; preds = %1614
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %155) #10
  %.pre23502 = load i32, ptr %1608, align 8, !tbaa !61
  br label %1617

.split15965.split:                                ; preds = %1614
  %1616 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %154) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %155) #10
  br label %2266

1617:                                             ; preds = %1615, %.preheader2060
  %1618 = phi i32 [ %.pre23502, %1615 ], [ %1610, %.preheader2060 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %156) #10
  %1619 = load double, ptr %1606, align 8, !tbaa !50
  %1620 = load double, ptr %1607, align 8, !tbaa !50
  %1621 = fmul double %1619, %1620
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %156, double %1621, i32 %1618)
          to label %1622 unwind label %.split15968.split

1622:                                             ; preds = %1617
  %1623 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %156)
          to label %..loopexit2012_crit_edge unwind label %.split15971.split

..loopexit2012_crit_edge:                         ; preds = %1622
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %156) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %156) #10
  br label %.loopexit2162

.split15968.split:                                ; preds = %1617
  %1624 = landingpad { ptr, i32 }
          cleanup
  br label %1626

.split15971.split:                                ; preds = %1622
  %1625 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %156) #10
  br label %1626

1626:                                             ; preds = %.split15971.split, %.split15968.split
  %.pn1760 = phi { ptr, i32 } [ %1625, %.split15971.split ], [ %1624, %.split15968.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %156) #10
  br label %2266

1627:                                             ; preds = %.preheader2062
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %158) #10
  store ptr %1319, ptr %158, align 8, !tbaa !9
  store ptr %1320, ptr %426, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_21vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %157, ptr noundef nonnull align 8 dereferenceable(16) %158) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %157)
          to label %1628 unwind label %.split15237.split

1628:                                             ; preds = %1627
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %158) #10
  %.pre23501 = load i32, ptr %1601, align 8, !tbaa !53
  br label %1630

.split15237.split:                                ; preds = %1627
  %1629 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %157) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %158) #10
  br label %2266

1630:                                             ; preds = %1628, %.preheader2062
  %1631 = phi i32 [ %.pre23501, %1628 ], [ %1603, %.preheader2062 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %159) #10
  %.sroa.0571.0.copyload = load i64, ptr %1600, align 8, !tbaa !13
  %.sroa.2572.0.copyload = load i64, ptr %.sroa.2572.0..sroa_idx, align 8, !tbaa !13
  %1632 = invoke { i64, i64 } @_ZNK4S128mlES_(ptr noundef nonnull align 8 dereferenceable(16) %1599, i64 %.sroa.0571.0.copyload, i64 %.sroa.2572.0.copyload)
          to label %1633 unwind label %.split15240.split

1633:                                             ; preds = %1630
  %1634 = extractvalue { i64, i64 } %1632, 0
  %1635 = extractvalue { i64, i64 } %1632, 1
  %1636 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1631, i64 %1634, i64 %1635)
          to label %1637 unwind label %.split15240.split

1637:                                             ; preds = %1633
  %1638 = extractvalue { i64, i64 } %1636, 0
  store i64 %1638, ptr %160, align 8
  %1639 = extractvalue { i64, i64 } %1636, 1
  store i64 %1639, ptr %427, align 8
  %1640 = load i32, ptr %1601, align 8, !tbaa !53
  store i32 %1640, ptr %428, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %159, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %160)
          to label %1641 unwind label %.split15240.split

1641:                                             ; preds = %1637
  %1642 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %159)
          to label %..loopexit2013_crit_edge unwind label %.split15243.split

..loopexit2013_crit_edge:                         ; preds = %1641
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %159) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %159) #10
  br label %.loopexit2162

.split15240.split:                                ; preds = %1637, %1633, %1630
  %1643 = landingpad { ptr, i32 }
          cleanup
  br label %1645

.split15243.split:                                ; preds = %1641
  %1644 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %159) #10
  br label %1645

1645:                                             ; preds = %.split15243.split, %.split15240.split
  %.pn1757 = phi { ptr, i32 } [ %1644, %.split15243.split ], [ %1643, %.split15240.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %159) #10
  br label %2266

1646:                                             ; preds = %.preheader2064
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %162) #10
  store ptr %1319, ptr %162, align 8, !tbaa !9
  store ptr %1320, ptr %423, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_22vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %161, ptr noundef nonnull align 8 dereferenceable(16) %162) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %161)
          to label %1647 unwind label %.split14517.split

1647:                                             ; preds = %1646
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %162) #10
  %.pre23500 = load i32, ptr %1594, align 8, !tbaa !21
  br label %1649

.split14517.split:                                ; preds = %1646
  %1648 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %161) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %162) #10
  br label %2266

1649:                                             ; preds = %1647, %.preheader2064
  %1650 = phi i32 [ %.pre23500, %1647 ], [ %1596, %.preheader2064 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %163) #10
  %.sroa.0557.0.copyload = load i64, ptr %1593, align 8, !tbaa !13
  %.sroa.2558.0.copyload = load i64, ptr %.sroa.2558.0..sroa_idx, align 8, !tbaa !13
  %1651 = invoke { i64, i64 } @_ZNK4U128mlES_(ptr noundef nonnull align 8 dereferenceable(16) %1592, i64 %.sroa.0557.0.copyload, i64 %.sroa.2558.0.copyload)
          to label %1652 unwind label %.split14520.split

1652:                                             ; preds = %1649
  %1653 = extractvalue { i64, i64 } %1651, 0
  %1654 = extractvalue { i64, i64 } %1651, 1
  %1655 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1650, i64 %1653, i64 %1654)
          to label %1656 unwind label %.split14520.split

1656:                                             ; preds = %1652
  %1657 = extractvalue { i64, i64 } %1655, 0
  store i64 %1657, ptr %164, align 8
  %1658 = extractvalue { i64, i64 } %1655, 1
  store i64 %1658, ptr %424, align 8
  %1659 = load i32, ptr %1594, align 8, !tbaa !21
  store i32 %1659, ptr %425, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %163, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %164)
          to label %1660 unwind label %.split14520.split

1660:                                             ; preds = %1656
  %1661 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %163)
          to label %..loopexit2014_crit_edge unwind label %.split14523.split

..loopexit2014_crit_edge:                         ; preds = %1660
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %163) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %163) #10
  br label %.loopexit2162

.split14520.split:                                ; preds = %1656, %1652, %1649
  %1662 = landingpad { ptr, i32 }
          cleanup
  br label %1664

.split14523.split:                                ; preds = %1660
  %1663 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %163) #10
  br label %1664

1664:                                             ; preds = %.split14523.split, %.split14520.split
  %.pn1754 = phi { ptr, i32 } [ %1663, %.split14523.split ], [ %1662, %.split14520.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %163) #10
  br label %2266

1665:                                             ; preds = %1329
  %1666 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1667 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1668 = icmp eq i32 %1666, %1667
  br i1 %1668, label %.lr.ph14511, label %1669

1669:                                             ; preds = %1665
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %166) #10
  store ptr %1319, ptr %166, align 8, !tbaa !9
  store ptr %1320, ptr %414, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_23vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %165, ptr noundef nonnull align 8 dereferenceable(16) %166) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %165)
          to label %1670 unwind label %1671

1670:                                             ; preds = %1669
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %166) #10
  br label %.lr.ph14511

1671:                                             ; preds = %1669
  %1672 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %165) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %166) #10
  br label %2266

.lr.ph14511:                                      ; preds = %1670, %1665
  %1673 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1673, label %.loopexit2162 [
    i32 0, label %1681
    i32 3, label %.preheader2066
    i32 1, label %.lr.ph13818
    i32 2, label %.lr.ph13815
  ]

.preheader2066:                                   ; preds = %.lr.ph14511
  %1674 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1675 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1676 = getelementptr inbounds i8, ptr %1674, i64 8
  %1677 = getelementptr inbounds i8, ptr %1675, i64 8
  %1678 = load i32, ptr %1676, align 8, !tbaa !61
  %1679 = load i32, ptr %1677, align 8, !tbaa !61
  %1680 = icmp eq i32 %1678, %1679
  br i1 %1680, label %1685, label %1682

1681:                                             ; preds = %.lr.ph14511
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4068, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1682:                                             ; preds = %.preheader2066
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %168) #10
  store ptr %1319, ptr %168, align 8, !tbaa !9
  store ptr %1320, ptr %421, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_24vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %167, ptr noundef nonnull align 8 dereferenceable(16) %168) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %167)
          to label %1683 unwind label %.split13823.split

1683:                                             ; preds = %1682
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %168) #10
  %.pre23499 = load i32, ptr %1676, align 8, !tbaa !61
  br label %1685

.split13823.split:                                ; preds = %1682
  %1684 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %167) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %168) #10
  br label %2266

1685:                                             ; preds = %1683, %.preheader2066
  %1686 = phi i32 [ %.pre23499, %1683 ], [ %1678, %.preheader2066 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %169) #10
  %1687 = load double, ptr %1674, align 8, !tbaa !50
  %1688 = load double, ptr %1675, align 8, !tbaa !50
  %1689 = fdiv double %1687, %1688
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %169, double %1689, i32 %1686)
          to label %1690 unwind label %.split13826.split

1690:                                             ; preds = %1685
  %1691 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %169)
          to label %..loopexit2015_crit_edge unwind label %.split13829.split

..loopexit2015_crit_edge:                         ; preds = %1690
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %169) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %169) #10
  br label %.loopexit2162

.split13826.split:                                ; preds = %1685
  %1692 = landingpad { ptr, i32 }
          cleanup
  br label %1694

.split13829.split:                                ; preds = %1690
  %1693 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %169) #10
  br label %1694

1694:                                             ; preds = %.split13829.split, %.split13826.split
  %.pn1750 = phi { ptr, i32 } [ %1693, %.split13829.split ], [ %1692, %.split13826.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %169) #10
  br label %2266

.lr.ph13818:                                      ; preds = %.lr.ph14511
  %1695 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1696 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1697 = getelementptr inbounds i8, ptr %1695, i64 16
  %1698 = getelementptr inbounds i8, ptr %1696, i64 16
  %.sroa.2523.0..sroa_idx = getelementptr inbounds i8, ptr %1696, i64 8
  %1699 = load i32, ptr %1697, align 8, !tbaa !53
  %1700 = load i32, ptr %1698, align 8, !tbaa !53
  %1701 = icmp eq i32 %1699, %1700
  br i1 %1701, label %1708, label %1704

1702:                                             ; preds = %1723, %1721, %1719, %1717, %1714, %1711, %1708
  %1703 = landingpad { ptr, i32 }
          cleanup
  br label %2266

1704:                                             ; preds = %.lr.ph13818
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %171) #10
  store ptr %1319, ptr %171, align 8, !tbaa !9
  store ptr %1320, ptr %418, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_25vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %170, ptr noundef nonnull align 8 dereferenceable(16) %171) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %170)
          to label %1705 unwind label %1706

1705:                                             ; preds = %1704
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %171) #10
  br label %1708

1706:                                             ; preds = %1704
  %1707 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %170) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %171) #10
  br label %2266

1708:                                             ; preds = %1705, %.lr.ph13818
  %1709 = invoke noundef zeroext i1 @_ZNK4S128eqEi(ptr noundef nonnull align 8 dereferenceable(16) %1696, i32 noundef 0)
          to label %1710 unwind label %1702

1710:                                             ; preds = %1708
  br i1 %1709, label %1711, label %1725

1711:                                             ; preds = %1710
  %1712 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1713 unwind label %1702

1713:                                             ; preds = %1711
  br i1 %1712, label %1714, label %.loopexit2162

1714:                                             ; preds = %1713
  %1715 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %1716 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1715, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1717 unwind label %1702

1717:                                             ; preds = %1714
  %1718 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1716, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %1719 unwind label %1702

1719:                                             ; preds = %1717
  %1720 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1718, ptr noundef nonnull @.str.90)
          to label %1721 unwind label %1702

1721:                                             ; preds = %1719
  %1722 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1720, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %1723 unwind label %1702

1723:                                             ; preds = %1721
  %1724 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1722, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.loopexit2162 unwind label %1702

1725:                                             ; preds = %1710
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %172) #10
  %1726 = load i32, ptr %1697, align 8, !tbaa !53
  %.sroa.0522.0.copyload = load i64, ptr %1696, align 8, !tbaa !13
  %.sroa.2523.0.copyload = load i64, ptr %.sroa.2523.0..sroa_idx, align 8, !tbaa !13
  %1727 = invoke { i64, i64 } @_ZNK4S128dvES_(ptr noundef nonnull align 8 dereferenceable(16) %1695, i64 %.sroa.0522.0.copyload, i64 %.sroa.2523.0.copyload)
          to label %1728 unwind label %1739

1728:                                             ; preds = %1725
  %1729 = extractvalue { i64, i64 } %1727, 0
  %1730 = extractvalue { i64, i64 } %1727, 1
  %1731 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1726, i64 %1729, i64 %1730)
          to label %1732 unwind label %1739

1732:                                             ; preds = %1728
  %1733 = extractvalue { i64, i64 } %1731, 0
  store i64 %1733, ptr %173, align 8
  %1734 = extractvalue { i64, i64 } %1731, 1
  store i64 %1734, ptr %419, align 8
  %1735 = load i32, ptr %1697, align 8, !tbaa !53
  store i32 %1735, ptr %420, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %172, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %173)
          to label %1736 unwind label %1739

1736:                                             ; preds = %1732
  %1737 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %172)
          to label %1738 unwind label %1741

1738:                                             ; preds = %1736
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %172) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %172) #10
  br label %.loopexit2162

1739:                                             ; preds = %1732, %1728, %1725
  %1740 = landingpad { ptr, i32 }
          cleanup
  br label %1743

1741:                                             ; preds = %1736
  %1742 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %172) #10
  br label %1743

1743:                                             ; preds = %1741, %1739
  %.pn1746 = phi { ptr, i32 } [ %1742, %1741 ], [ %1740, %1739 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %172) #10
  br label %2266

.lr.ph13815:                                      ; preds = %.lr.ph14511
  %1744 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1745 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1746 = getelementptr inbounds i8, ptr %1744, i64 16
  %1747 = getelementptr inbounds i8, ptr %1745, i64 16
  %.sroa.2508.0..sroa_idx = getelementptr inbounds i8, ptr %1745, i64 8
  %1748 = load i32, ptr %1746, align 8, !tbaa !21
  %1749 = load i32, ptr %1747, align 8, !tbaa !21
  %1750 = icmp eq i32 %1748, %1749
  br i1 %1750, label %1757, label %1753

1751:                                             ; preds = %1772, %1770, %1768, %1766, %1763, %1760, %1757
  %1752 = landingpad { ptr, i32 }
          cleanup
  br label %2266

1753:                                             ; preds = %.lr.ph13815
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %175) #10
  store ptr %1319, ptr %175, align 8, !tbaa !9
  store ptr %1320, ptr %415, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_26vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %174, ptr noundef nonnull align 8 dereferenceable(16) %175) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %174)
          to label %1754 unwind label %1755

1754:                                             ; preds = %1753
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %175) #10
  br label %1757

1755:                                             ; preds = %1753
  %1756 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %174) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %175) #10
  br label %2266

1757:                                             ; preds = %1754, %.lr.ph13815
  %1758 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %1745, i32 noundef 0)
          to label %1759 unwind label %1751

1759:                                             ; preds = %1757
  br i1 %1758, label %1760, label %1774

1760:                                             ; preds = %1759
  %1761 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1762 unwind label %1751

1762:                                             ; preds = %1760
  br i1 %1761, label %1763, label %.loopexit2162

1763:                                             ; preds = %1762
  %1764 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %1765 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1764, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1766 unwind label %1751

1766:                                             ; preds = %1763
  %1767 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1765, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %1768 unwind label %1751

1768:                                             ; preds = %1766
  %1769 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1767, ptr noundef nonnull @.str.90)
          to label %1770 unwind label %1751

1770:                                             ; preds = %1768
  %1771 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1769, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %1772 unwind label %1751

1772:                                             ; preds = %1770
  %1773 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1771, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.loopexit2162 unwind label %1751

1774:                                             ; preds = %1759
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %176) #10
  %1775 = load i32, ptr %1746, align 8, !tbaa !21
  %.sroa.0507.0.copyload = load i64, ptr %1745, align 8, !tbaa !13
  %.sroa.2508.0.copyload = load i64, ptr %.sroa.2508.0..sroa_idx, align 8, !tbaa !13
  %1776 = invoke { i64, i64 } @_ZNK4U128dvES_(ptr noundef nonnull align 8 dereferenceable(16) %1744, i64 %.sroa.0507.0.copyload, i64 %.sroa.2508.0.copyload)
          to label %1777 unwind label %1788

1777:                                             ; preds = %1774
  %1778 = extractvalue { i64, i64 } %1776, 0
  %1779 = extractvalue { i64, i64 } %1776, 1
  %1780 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1775, i64 %1778, i64 %1779)
          to label %1781 unwind label %1788

1781:                                             ; preds = %1777
  %1782 = extractvalue { i64, i64 } %1780, 0
  store i64 %1782, ptr %177, align 8
  %1783 = extractvalue { i64, i64 } %1780, 1
  store i64 %1783, ptr %416, align 8
  %1784 = load i32, ptr %1746, align 8, !tbaa !21
  store i32 %1784, ptr %417, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %176, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %177)
          to label %1785 unwind label %1788

1785:                                             ; preds = %1781
  %1786 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %176)
          to label %1787 unwind label %1790

1787:                                             ; preds = %1785
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %176) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %176) #10
  br label %.loopexit2162

1788:                                             ; preds = %1781, %1777, %1774
  %1789 = landingpad { ptr, i32 }
          cleanup
  br label %1792

1790:                                             ; preds = %1785
  %1791 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %176) #10
  br label %1792

1792:                                             ; preds = %1790, %1788
  %.pn1742 = phi { ptr, i32 } [ %1791, %1790 ], [ %1789, %1788 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %176) #10
  br label %2266

1793:                                             ; preds = %1329
  %1794 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1795 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1796 = icmp eq i32 %1794, %1795
  br i1 %1796, label %.lr.ph13812, label %1797

1797:                                             ; preds = %1793
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %179) #10
  store ptr %1319, ptr %179, align 8, !tbaa !9
  store ptr %1320, ptr %407, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_27vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %178, ptr noundef nonnull align 8 dereferenceable(16) %179) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %178)
          to label %1798 unwind label %1799

1798:                                             ; preds = %1797
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %179) #10
  br label %.lr.ph13812

1799:                                             ; preds = %1797
  %1800 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %178) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %179) #10
  br label %2266

.lr.ph13812:                                      ; preds = %1798, %1793
  %1801 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1801, label %.loopexit2162 [
    i32 0, label %1802
    i32 1, label %.lr.ph13810
    i32 2, label %.lr.ph13807
  ]

1802:                                             ; preds = %.lr.ph13812
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4097, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

.lr.ph13810:                                      ; preds = %.lr.ph13812
  %1803 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1804 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1805 = getelementptr inbounds i8, ptr %1803, i64 16
  %1806 = getelementptr inbounds i8, ptr %1804, i64 16
  %.sroa.2486.0..sroa_idx = getelementptr inbounds i8, ptr %1804, i64 8
  %1807 = load i32, ptr %1805, align 8, !tbaa !53
  %1808 = load i32, ptr %1806, align 8, !tbaa !53
  %1809 = icmp eq i32 %1807, %1808
  br i1 %1809, label %1816, label %1812

1810:                                             ; preds = %1816
  %1811 = landingpad { ptr, i32 }
          cleanup
  br label %2266

1812:                                             ; preds = %.lr.ph13810
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %181) #10
  store ptr %1319, ptr %181, align 8, !tbaa !9
  store ptr %1320, ptr %411, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_28vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %180, ptr noundef nonnull align 8 dereferenceable(16) %181) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %180)
          to label %1813 unwind label %1814

1813:                                             ; preds = %1812
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %181) #10
  br label %1816

1814:                                             ; preds = %1812
  %1815 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %180) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %181) #10
  br label %2266

1816:                                             ; preds = %.lr.ph13810, %1813
  %1817 = invoke noundef zeroext i1 @_ZNK4S128neEi(ptr noundef nonnull align 8 dereferenceable(16) %1804, i32 noundef 0)
          to label %1818 unwind label %1810

1818:                                             ; preds = %1816
  br i1 %1817, label %1823, label %1819

1819:                                             ; preds = %1818
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %183) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_29vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %182, ptr noundef nonnull align 1 dereferenceable(1) %183) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %182)
          to label %1820 unwind label %1821

1820:                                             ; preds = %1819
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %183) #10
  br label %1823

1821:                                             ; preds = %1819
  %1822 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %182) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %183) #10
  br label %2266

1823:                                             ; preds = %1820, %1818
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %184) #10
  %1824 = load i32, ptr %1805, align 8, !tbaa !53
  %.sroa.0485.0.copyload = load i64, ptr %1804, align 8, !tbaa !13
  %.sroa.2486.0.copyload = load i64, ptr %.sroa.2486.0..sroa_idx, align 8, !tbaa !13
  %1825 = invoke { i64, i64 } @_ZNK4S128rmES_(ptr noundef nonnull align 8 dereferenceable(16) %1803, i64 %.sroa.0485.0.copyload, i64 %.sroa.2486.0.copyload)
          to label %1826 unwind label %1836

1826:                                             ; preds = %1823
  %1827 = extractvalue { i64, i64 } %1825, 0
  %1828 = extractvalue { i64, i64 } %1825, 1
  %1829 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1824, i64 %1827, i64 %1828)
          to label %1830 unwind label %1836

1830:                                             ; preds = %1826
  %1831 = extractvalue { i64, i64 } %1829, 0
  store i64 %1831, ptr %185, align 8
  %1832 = extractvalue { i64, i64 } %1829, 1
  store i64 %1832, ptr %412, align 8
  %1833 = load i32, ptr %1805, align 8, !tbaa !53
  store i32 %1833, ptr %413, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %184, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %185)
          to label %1834 unwind label %1836

1834:                                             ; preds = %1830
  %1835 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %184)
          to label %..loopexit2018_crit_edge unwind label %1838

..loopexit2018_crit_edge:                         ; preds = %1834
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %184) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %184) #10
  br label %.loopexit2162

1836:                                             ; preds = %1830, %1826, %1823
  %1837 = landingpad { ptr, i32 }
          cleanup
  br label %1840

1838:                                             ; preds = %1834
  %1839 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %184) #10
  br label %1840

1840:                                             ; preds = %1838, %1836
  %.pn1738 = phi { ptr, i32 } [ %1839, %1838 ], [ %1837, %1836 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %184) #10
  br label %2266

.lr.ph13807:                                      ; preds = %.lr.ph13812
  %1841 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1842 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1843 = getelementptr inbounds i8, ptr %1841, i64 16
  %1844 = getelementptr inbounds i8, ptr %1842, i64 16
  %.sroa.2471.0..sroa_idx = getelementptr inbounds i8, ptr %1842, i64 8
  %1845 = load i32, ptr %1843, align 8, !tbaa !21
  %1846 = load i32, ptr %1844, align 8, !tbaa !21
  %1847 = icmp eq i32 %1845, %1846
  br i1 %1847, label %1854, label %1850

1848:                                             ; preds = %1854
  %1849 = landingpad { ptr, i32 }
          cleanup
  br label %2266

1850:                                             ; preds = %.lr.ph13807
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %187) #10
  store ptr %1319, ptr %187, align 8, !tbaa !9
  store ptr %1320, ptr %408, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_30vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %186, ptr noundef nonnull align 8 dereferenceable(16) %187) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %186)
          to label %1851 unwind label %1852

1851:                                             ; preds = %1850
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %187) #10
  br label %1854

1852:                                             ; preds = %1850
  %1853 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %186) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %187) #10
  br label %2266

1854:                                             ; preds = %.lr.ph13807, %1851
  %1855 = invoke noundef zeroext i1 @_ZNK4U128neEj(ptr noundef nonnull align 8 dereferenceable(16) %1842, i32 noundef 0)
          to label %1856 unwind label %1848

1856:                                             ; preds = %1854
  br i1 %1855, label %1861, label %1857

1857:                                             ; preds = %1856
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %189) #10
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_31vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %188, ptr noundef nonnull align 1 dereferenceable(1) %189) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %188)
          to label %1858 unwind label %1859

1858:                                             ; preds = %1857
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %189) #10
  br label %1861

1859:                                             ; preds = %1857
  %1860 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %188) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %189) #10
  br label %2266

1861:                                             ; preds = %1858, %1856
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %190) #10
  %1862 = load i32, ptr %1843, align 8, !tbaa !21
  %.sroa.0470.0.copyload = load i64, ptr %1842, align 8, !tbaa !13
  %.sroa.2471.0.copyload = load i64, ptr %.sroa.2471.0..sroa_idx, align 8, !tbaa !13
  %1863 = invoke { i64, i64 } @_ZNK4U128rmES_(ptr noundef nonnull align 8 dereferenceable(16) %1841, i64 %.sroa.0470.0.copyload, i64 %.sroa.2471.0.copyload)
          to label %1864 unwind label %1874

1864:                                             ; preds = %1861
  %1865 = extractvalue { i64, i64 } %1863, 0
  %1866 = extractvalue { i64, i64 } %1863, 1
  %1867 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1862, i64 %1865, i64 %1866)
          to label %1868 unwind label %1874

1868:                                             ; preds = %1864
  %1869 = extractvalue { i64, i64 } %1867, 0
  store i64 %1869, ptr %191, align 8
  %1870 = extractvalue { i64, i64 } %1867, 1
  store i64 %1870, ptr %409, align 8
  %1871 = load i32, ptr %1843, align 8, !tbaa !21
  store i32 %1871, ptr %410, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %190, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %191)
          to label %1872 unwind label %1874

1872:                                             ; preds = %1868
  %1873 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %190)
          to label %..loopexit2019_crit_edge unwind label %1876

..loopexit2019_crit_edge:                         ; preds = %1872
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %190) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %190) #10
  br label %.loopexit2162

1874:                                             ; preds = %1868, %1864, %1861
  %1875 = landingpad { ptr, i32 }
          cleanup
  br label %1878

1876:                                             ; preds = %1872
  %1877 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %190) #10
  br label %1878

1878:                                             ; preds = %1876, %1874
  %.pn1735 = phi { ptr, i32 } [ %1877, %1876 ], [ %1875, %1874 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %190) #10
  br label %2266

1879:                                             ; preds = %1329
  %1880 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1881 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1882 = icmp eq i32 %1880, %1881
  br i1 %1882, label %.lr.ph13803, label %1883

1883:                                             ; preds = %1879
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %193) #10
  store ptr %1319, ptr %193, align 8, !tbaa !9
  store ptr %1320, ptr %400, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_32vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %192, ptr noundef nonnull align 8 dereferenceable(16) %193) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %192)
          to label %1884 unwind label %1885

1884:                                             ; preds = %1883
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %193) #10
  br label %.lr.ph13803

1885:                                             ; preds = %1883
  %1886 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %192) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %193) #10
  br label %2266

.lr.ph13803:                                      ; preds = %1884, %1879
  %1887 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1887, label %.loopexit2162 [
    i32 0, label %1907
    i32 4, label %.preheader2076
    i32 1, label %.preheader2078
    i32 2, label %.preheader2080
  ]

.preheader2080:                                   ; preds = %.lr.ph13803
  %1888 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1889 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1890 = getelementptr inbounds i8, ptr %1888, i64 16
  %1891 = getelementptr inbounds i8, ptr %1889, i64 16
  %.sroa.2427.0..sroa_idx = getelementptr inbounds i8, ptr %1889, i64 8
  %1892 = load i32, ptr %1890, align 8, !tbaa !21
  %1893 = load i32, ptr %1891, align 8, !tbaa !21
  %1894 = icmp eq i32 %1892, %1893
  br i1 %1894, label %1935, label %1932

.preheader2078:                                   ; preds = %.lr.ph13803
  %1895 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1896 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1897 = getelementptr inbounds i8, ptr %1895, i64 16
  %1898 = getelementptr inbounds i8, ptr %1896, i64 16
  %.sroa.2441.0..sroa_idx = getelementptr inbounds i8, ptr %1896, i64 8
  %1899 = load i32, ptr %1897, align 8, !tbaa !53
  %1900 = load i32, ptr %1898, align 8, !tbaa !53
  %1901 = icmp eq i32 %1899, %1900
  br i1 %1901, label %1916, label %1913

.preheader2076:                                   ; preds = %.lr.ph13803
  %1902 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1903 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %194) #10
  %1904 = load i8, ptr %1902, align 1, !tbaa !46, !range !48, !noundef !49
  %1905 = trunc nuw i8 %1904 to i1
  %1906 = load i8, ptr %1903, align 1, !range !48
  %spec.select = select i1 %1905, i8 %1906, i8 0
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %194, i8 %spec.select)
          to label %1908 unwind label %.split13464.split

1907:                                             ; preds = %.lr.ph13803
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4115, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1908:                                             ; preds = %.preheader2076
  %1909 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %194)
          to label %..loopexit2020_crit_edge unwind label %.split13467.split

..loopexit2020_crit_edge:                         ; preds = %1908
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %194) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %194) #10
  br label %.loopexit2162

.split13464.split:                                ; preds = %.preheader2076
  %1910 = landingpad { ptr, i32 }
          cleanup
  br label %1912

.split13467.split:                                ; preds = %1908
  %1911 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %194) #10
  br label %1912

1912:                                             ; preds = %.split13467.split, %.split13464.split
  %.pn1732 = phi { ptr, i32 } [ %1911, %.split13467.split ], [ %1910, %.split13464.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %194) #10
  br label %2266

1913:                                             ; preds = %.preheader2078
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %196) #10
  store ptr %1319, ptr %196, align 8, !tbaa !9
  store ptr %1320, ptr %404, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_33vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %195, ptr noundef nonnull align 8 dereferenceable(16) %196) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %195)
          to label %1914 unwind label %.split12768.split

1914:                                             ; preds = %1913
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %196) #10
  %.pre23498 = load i32, ptr %1897, align 8, !tbaa !53
  br label %1916

.split12768.split:                                ; preds = %1913
  %1915 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %195) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %196) #10
  br label %2266

1916:                                             ; preds = %1914, %.preheader2078
  %1917 = phi i32 [ %.pre23498, %1914 ], [ %1899, %.preheader2078 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %197) #10
  %.sroa.0440.0.copyload = load i64, ptr %1896, align 8, !tbaa !13
  %.sroa.2441.0.copyload = load i64, ptr %.sroa.2441.0..sroa_idx, align 8, !tbaa !13
  %1918 = invoke { i64, i64 } @_ZNK4S128anES_(ptr noundef nonnull align 8 dereferenceable(16) %1895, i64 %.sroa.0440.0.copyload, i64 %.sroa.2441.0.copyload)
          to label %1919 unwind label %.split12771.split

1919:                                             ; preds = %1916
  %1920 = extractvalue { i64, i64 } %1918, 0
  %1921 = extractvalue { i64, i64 } %1918, 1
  %1922 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1917, i64 %1920, i64 %1921)
          to label %1923 unwind label %.split12771.split

1923:                                             ; preds = %1919
  %1924 = extractvalue { i64, i64 } %1922, 0
  store i64 %1924, ptr %198, align 8
  %1925 = extractvalue { i64, i64 } %1922, 1
  store i64 %1925, ptr %405, align 8
  %1926 = load i32, ptr %1897, align 8, !tbaa !53
  store i32 %1926, ptr %406, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %197, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %198)
          to label %1927 unwind label %.split12771.split

1927:                                             ; preds = %1923
  %1928 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %197)
          to label %..loopexit2021_crit_edge unwind label %.split12774.split

..loopexit2021_crit_edge:                         ; preds = %1927
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %197) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %197) #10
  br label %.loopexit2162

.split12771.split:                                ; preds = %1923, %1919, %1916
  %1929 = landingpad { ptr, i32 }
          cleanup
  br label %1931

.split12774.split:                                ; preds = %1927
  %1930 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %197) #10
  br label %1931

1931:                                             ; preds = %.split12774.split, %.split12771.split
  %.pn1729 = phi { ptr, i32 } [ %1930, %.split12774.split ], [ %1929, %.split12771.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %197) #10
  br label %2266

1932:                                             ; preds = %.preheader2080
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %200) #10
  store ptr %1319, ptr %200, align 8, !tbaa !9
  store ptr %1320, ptr %401, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_34vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %199, ptr noundef nonnull align 8 dereferenceable(16) %200) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %199)
          to label %1933 unwind label %.split12080.split

1933:                                             ; preds = %1932
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %200) #10
  %.pre23497 = load i32, ptr %1890, align 8, !tbaa !21
  br label %1935

.split12080.split:                                ; preds = %1932
  %1934 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %199) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %200) #10
  br label %2266

1935:                                             ; preds = %1933, %.preheader2080
  %1936 = phi i32 [ %.pre23497, %1933 ], [ %1892, %.preheader2080 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %201) #10
  %.sroa.0426.0.copyload = load i64, ptr %1889, align 8, !tbaa !13
  %.sroa.2427.0.copyload = load i64, ptr %.sroa.2427.0..sroa_idx, align 8, !tbaa !13
  %1937 = invoke { i64, i64 } @_ZNK4U128anES_(ptr noundef nonnull align 8 dereferenceable(16) %1888, i64 %.sroa.0426.0.copyload, i64 %.sroa.2427.0.copyload)
          to label %1938 unwind label %.split12083.split

1938:                                             ; preds = %1935
  %1939 = extractvalue { i64, i64 } %1937, 0
  %1940 = extractvalue { i64, i64 } %1937, 1
  %1941 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %1936, i64 %1939, i64 %1940)
          to label %1942 unwind label %.split12083.split

1942:                                             ; preds = %1938
  %1943 = extractvalue { i64, i64 } %1941, 0
  store i64 %1943, ptr %202, align 8
  %1944 = extractvalue { i64, i64 } %1941, 1
  store i64 %1944, ptr %402, align 8
  %1945 = load i32, ptr %1890, align 8, !tbaa !21
  store i32 %1945, ptr %403, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %201, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %202)
          to label %1946 unwind label %.split12083.split

1946:                                             ; preds = %1942
  %1947 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %201)
          to label %..loopexit2022_crit_edge unwind label %.split12086.split

..loopexit2022_crit_edge:                         ; preds = %1946
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %201) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %201) #10
  br label %.loopexit2162

.split12083.split:                                ; preds = %1942, %1938, %1935
  %1948 = landingpad { ptr, i32 }
          cleanup
  br label %1950

.split12086.split:                                ; preds = %1946
  %1949 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %201) #10
  br label %1950

1950:                                             ; preds = %.split12086.split, %.split12083.split
  %.pn1726 = phi { ptr, i32 } [ %1949, %.split12086.split ], [ %1948, %.split12083.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %201) #10
  br label %2266

1951:                                             ; preds = %1329
  %1952 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1953 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1954 = icmp eq i32 %1952, %1953
  br i1 %1954, label %.lr.ph12074, label %1955

1955:                                             ; preds = %1951
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %204) #10
  store ptr %1319, ptr %204, align 8, !tbaa !9
  store ptr %1320, ptr %393, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_35vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %203, ptr noundef nonnull align 8 dereferenceable(16) %204) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %203)
          to label %1956 unwind label %1957

1956:                                             ; preds = %1955
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %204) #10
  br label %.lr.ph12074

1957:                                             ; preds = %1955
  %1958 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %203) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %204) #10
  br label %2266

.lr.ph12074:                                      ; preds = %1956, %1951
  %1959 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %1959, label %.loopexit2162 [
    i32 0, label %1979
    i32 4, label %.preheader2082
    i32 1, label %.preheader2084
    i32 2, label %.preheader2086
  ]

.preheader2086:                                   ; preds = %.lr.ph12074
  %1960 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1961 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1962 = getelementptr inbounds i8, ptr %1960, i64 16
  %1963 = getelementptr inbounds i8, ptr %1961, i64 16
  %.sroa.2383.0..sroa_idx = getelementptr inbounds i8, ptr %1961, i64 8
  %1964 = load i32, ptr %1962, align 8, !tbaa !21
  %1965 = load i32, ptr %1963, align 8, !tbaa !21
  %1966 = icmp eq i32 %1964, %1965
  br i1 %1966, label %2007, label %2004

.preheader2084:                                   ; preds = %.lr.ph12074
  %1967 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1968 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %1969 = getelementptr inbounds i8, ptr %1967, i64 16
  %1970 = getelementptr inbounds i8, ptr %1968, i64 16
  %.sroa.2397.0..sroa_idx = getelementptr inbounds i8, ptr %1968, i64 8
  %1971 = load i32, ptr %1969, align 8, !tbaa !53
  %1972 = load i32, ptr %1970, align 8, !tbaa !53
  %1973 = icmp eq i32 %1971, %1972
  br i1 %1973, label %1988, label %1985

.preheader2082:                                   ; preds = %.lr.ph12074
  %1974 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %1975 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %205) #10
  %1976 = load i8, ptr %1974, align 1, !tbaa !46, !range !48, !noundef !49
  %1977 = trunc nuw i8 %1976 to i1
  %1978 = load i8, ptr %1975, align 1, !range !48
  %spec.select1944 = select i1 %1977, i8 1, i8 %1978
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %205, i8 %spec.select1944)
          to label %1980 unwind label %.split11747.split

1979:                                             ; preds = %.lr.ph12074
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4133, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

1980:                                             ; preds = %.preheader2082
  %1981 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %205)
          to label %..loopexit2023_crit_edge unwind label %.split11750.split

..loopexit2023_crit_edge:                         ; preds = %1980
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %205) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %205) #10
  br label %.loopexit2162

.split11747.split:                                ; preds = %.preheader2082
  %1982 = landingpad { ptr, i32 }
          cleanup
  br label %1984

.split11750.split:                                ; preds = %1980
  %1983 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %205) #10
  br label %1984

1984:                                             ; preds = %.split11750.split, %.split11747.split
  %.pn1723 = phi { ptr, i32 } [ %1983, %.split11750.split ], [ %1982, %.split11747.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %205) #10
  br label %2266

1985:                                             ; preds = %.preheader2084
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %207) #10
  store ptr %1319, ptr %207, align 8, !tbaa !9
  store ptr %1320, ptr %397, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_36vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %206, ptr noundef nonnull align 8 dereferenceable(16) %207) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %206)
          to label %1986 unwind label %.split11075.split

1986:                                             ; preds = %1985
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %207) #10
  %.pre23496 = load i32, ptr %1969, align 8, !tbaa !53
  br label %1988

.split11075.split:                                ; preds = %1985
  %1987 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %206) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %207) #10
  br label %2266

1988:                                             ; preds = %1986, %.preheader2084
  %1989 = phi i32 [ %.pre23496, %1986 ], [ %1971, %.preheader2084 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %208) #10
  %.sroa.0396.0.copyload = load i64, ptr %1968, align 8, !tbaa !13
  %.sroa.2397.0.copyload = load i64, ptr %.sroa.2397.0..sroa_idx, align 8, !tbaa !13
  %1990 = invoke { i64, i64 } @_ZNK4S128orES_(ptr noundef nonnull align 8 dereferenceable(16) %1967, i64 %.sroa.0396.0.copyload, i64 %.sroa.2397.0.copyload)
          to label %1991 unwind label %.split11078.split

1991:                                             ; preds = %1988
  %1992 = extractvalue { i64, i64 } %1990, 0
  %1993 = extractvalue { i64, i64 } %1990, 1
  %1994 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %1989, i64 %1992, i64 %1993)
          to label %1995 unwind label %.split11078.split

1995:                                             ; preds = %1991
  %1996 = extractvalue { i64, i64 } %1994, 0
  store i64 %1996, ptr %209, align 8
  %1997 = extractvalue { i64, i64 } %1994, 1
  store i64 %1997, ptr %398, align 8
  %1998 = load i32, ptr %1969, align 8, !tbaa !53
  store i32 %1998, ptr %399, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %208, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %209)
          to label %1999 unwind label %.split11078.split

1999:                                             ; preds = %1995
  %2000 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %208)
          to label %..loopexit2024_crit_edge unwind label %.split11081.split

..loopexit2024_crit_edge:                         ; preds = %1999
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %208) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %208) #10
  br label %.loopexit2162

.split11078.split:                                ; preds = %1995, %1991, %1988
  %2001 = landingpad { ptr, i32 }
          cleanup
  br label %2003

.split11081.split:                                ; preds = %1999
  %2002 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %208) #10
  br label %2003

2003:                                             ; preds = %.split11081.split, %.split11078.split
  %.pn1720 = phi { ptr, i32 } [ %2002, %.split11081.split ], [ %2001, %.split11078.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %208) #10
  br label %2266

2004:                                             ; preds = %.preheader2086
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %211) #10
  store ptr %1319, ptr %211, align 8, !tbaa !9
  store ptr %1320, ptr %394, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_37vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %210, ptr noundef nonnull align 8 dereferenceable(16) %211) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %210)
          to label %2005 unwind label %.split10411.split

2005:                                             ; preds = %2004
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %211) #10
  %.pre23495 = load i32, ptr %1962, align 8, !tbaa !21
  br label %2007

.split10411.split:                                ; preds = %2004
  %2006 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %210) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %211) #10
  br label %2266

2007:                                             ; preds = %2005, %.preheader2086
  %2008 = phi i32 [ %.pre23495, %2005 ], [ %1964, %.preheader2086 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %212) #10
  %.sroa.0382.0.copyload = load i64, ptr %1961, align 8, !tbaa !13
  %.sroa.2383.0.copyload = load i64, ptr %.sroa.2383.0..sroa_idx, align 8, !tbaa !13
  %2009 = invoke { i64, i64 } @_ZNK4U128orES_(ptr noundef nonnull align 8 dereferenceable(16) %1960, i64 %.sroa.0382.0.copyload, i64 %.sroa.2383.0.copyload)
          to label %2010 unwind label %.split10414.split

2010:                                             ; preds = %2007
  %2011 = extractvalue { i64, i64 } %2009, 0
  %2012 = extractvalue { i64, i64 } %2009, 1
  %2013 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %2008, i64 %2011, i64 %2012)
          to label %2014 unwind label %.split10414.split

2014:                                             ; preds = %2010
  %2015 = extractvalue { i64, i64 } %2013, 0
  store i64 %2015, ptr %213, align 8
  %2016 = extractvalue { i64, i64 } %2013, 1
  store i64 %2016, ptr %395, align 8
  %2017 = load i32, ptr %1962, align 8, !tbaa !21
  store i32 %2017, ptr %396, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %212, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %213)
          to label %2018 unwind label %.split10414.split

2018:                                             ; preds = %2014
  %2019 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %212)
          to label %..loopexit2025_crit_edge unwind label %.split10417.split

..loopexit2025_crit_edge:                         ; preds = %2018
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %212) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %212) #10
  br label %.loopexit2162

.split10414.split:                                ; preds = %2014, %2010, %2007
  %2020 = landingpad { ptr, i32 }
          cleanup
  br label %2022

.split10417.split:                                ; preds = %2018
  %2021 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %212) #10
  br label %2022

2022:                                             ; preds = %.split10417.split, %.split10414.split
  %.pn1717 = phi { ptr, i32 } [ %2021, %.split10417.split ], [ %2020, %.split10414.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %212) #10
  br label %2266

2023:                                             ; preds = %1329
  %2024 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2025 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %2026 = icmp eq i32 %2024, %2025
  br i1 %2026, label %.lr.ph10405, label %2027

2027:                                             ; preds = %2023
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %215) #10
  store ptr %1319, ptr %215, align 8, !tbaa !9
  store ptr %1320, ptr %386, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_38vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %214, ptr noundef nonnull align 8 dereferenceable(16) %215) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %214)
          to label %2028 unwind label %2029

2028:                                             ; preds = %2027
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %215) #10
  br label %.lr.ph10405

2029:                                             ; preds = %2027
  %2030 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %214) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %215) #10
  br label %2266

.lr.ph10405:                                      ; preds = %2028, %2023
  %2031 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %2031, label %.loopexit2162 [
    i32 0, label %2052
    i32 4, label %.preheader2088
    i32 1, label %.preheader2090
    i32 2, label %.preheader2092
  ]

.preheader2092:                                   ; preds = %.lr.ph10405
  %2032 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2033 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %2034 = getelementptr inbounds i8, ptr %2032, i64 16
  %2035 = getelementptr inbounds i8, ptr %2033, i64 16
  %.sroa.2339.0..sroa_idx = getelementptr inbounds i8, ptr %2033, i64 8
  %2036 = load i32, ptr %2034, align 8, !tbaa !21
  %2037 = load i32, ptr %2035, align 8, !tbaa !21
  %2038 = icmp eq i32 %2036, %2037
  br i1 %2038, label %2080, label %2077

.preheader2090:                                   ; preds = %.lr.ph10405
  %2039 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2040 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %2041 = getelementptr inbounds i8, ptr %2039, i64 16
  %2042 = getelementptr inbounds i8, ptr %2040, i64 16
  %.sroa.2353.0..sroa_idx = getelementptr inbounds i8, ptr %2040, i64 8
  %2043 = load i32, ptr %2041, align 8, !tbaa !53
  %2044 = load i32, ptr %2042, align 8, !tbaa !53
  %2045 = icmp eq i32 %2043, %2044
  br i1 %2045, label %2061, label %2058

.preheader2088:                                   ; preds = %.lr.ph10405
  %2046 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2047 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %216) #10
  %2048 = load i8, ptr %2046, align 1, !tbaa !46, !range !48, !noundef !49
  %2049 = load i8, ptr %2047, align 1, !tbaa !46, !range !48, !noundef !49
  %2050 = icmp ne i8 %2048, %2049
  %2051 = zext i1 %2050 to i8
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %216, i8 %2051)
          to label %2053 unwind label %.split10091.split

2052:                                             ; preds = %.lr.ph10405
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4151, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2053:                                             ; preds = %.preheader2088
  %2054 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %216)
          to label %..loopexit2026_crit_edge unwind label %.split10094.split

..loopexit2026_crit_edge:                         ; preds = %2053
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %216) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %216) #10
  br label %.loopexit2162

.split10091.split:                                ; preds = %.preheader2088
  %2055 = landingpad { ptr, i32 }
          cleanup
  br label %2057

.split10094.split:                                ; preds = %2053
  %2056 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %216) #10
  br label %2057

2057:                                             ; preds = %.split10094.split, %.split10091.split
  %.pn1714 = phi { ptr, i32 } [ %2056, %.split10094.split ], [ %2055, %.split10091.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %216) #10
  br label %2266

2058:                                             ; preds = %.preheader2090
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %218) #10
  store ptr %1319, ptr %218, align 8, !tbaa !9
  store ptr %1320, ptr %390, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_39vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %217, ptr noundef nonnull align 8 dereferenceable(16) %218) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %217)
          to label %2059 unwind label %.split9443.split

2059:                                             ; preds = %2058
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %218) #10
  %.pre23494 = load i32, ptr %2041, align 8, !tbaa !53
  br label %2061

.split9443.split:                                 ; preds = %2058
  %2060 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %217) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %218) #10
  br label %2266

2061:                                             ; preds = %2059, %.preheader2090
  %2062 = phi i32 [ %.pre23494, %2059 ], [ %2043, %.preheader2090 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %219) #10
  %.sroa.0352.0.copyload = load i64, ptr %2040, align 8, !tbaa !13
  %.sroa.2353.0.copyload = load i64, ptr %.sroa.2353.0..sroa_idx, align 8, !tbaa !13
  %2063 = invoke { i64, i64 } @_ZNK4S128eoES_(ptr noundef nonnull align 8 dereferenceable(16) %2039, i64 %.sroa.0352.0.copyload, i64 %.sroa.2353.0.copyload)
          to label %2064 unwind label %.split9446.split

2064:                                             ; preds = %2061
  %2065 = extractvalue { i64, i64 } %2063, 0
  %2066 = extractvalue { i64, i64 } %2063, 1
  %2067 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2062, i64 %2065, i64 %2066)
          to label %2068 unwind label %.split9446.split

2068:                                             ; preds = %2064
  %2069 = extractvalue { i64, i64 } %2067, 0
  store i64 %2069, ptr %220, align 8
  %2070 = extractvalue { i64, i64 } %2067, 1
  store i64 %2070, ptr %391, align 8
  %2071 = load i32, ptr %2041, align 8, !tbaa !53
  store i32 %2071, ptr %392, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %219, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %220)
          to label %2072 unwind label %.split9446.split

2072:                                             ; preds = %2068
  %2073 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %219)
          to label %..loopexit2027_crit_edge unwind label %.split9449.split

..loopexit2027_crit_edge:                         ; preds = %2072
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %219) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %219) #10
  br label %.loopexit2162

.split9446.split:                                 ; preds = %2068, %2064, %2061
  %2074 = landingpad { ptr, i32 }
          cleanup
  br label %2076

.split9449.split:                                 ; preds = %2072
  %2075 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %219) #10
  br label %2076

2076:                                             ; preds = %.split9449.split, %.split9446.split
  %.pn1711 = phi { ptr, i32 } [ %2075, %.split9449.split ], [ %2074, %.split9446.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %219) #10
  br label %2266

2077:                                             ; preds = %.preheader2092
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %222) #10
  store ptr %1319, ptr %222, align 8, !tbaa !9
  store ptr %1320, ptr %387, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_40vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %221, ptr noundef nonnull align 8 dereferenceable(16) %222) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %221)
          to label %2078 unwind label %.split8803.split

2078:                                             ; preds = %2077
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %221) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %222) #10
  %.pre23493 = load i32, ptr %2034, align 8, !tbaa !21
  br label %2080

.split8803.split:                                 ; preds = %2077
  %2079 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %221) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %222) #10
  br label %2266

2080:                                             ; preds = %2078, %.preheader2092
  %2081 = phi i32 [ %.pre23493, %2078 ], [ %2036, %.preheader2092 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %223) #10
  %.sroa.0338.0.copyload = load i64, ptr %2033, align 8, !tbaa !13
  %.sroa.2339.0.copyload = load i64, ptr %.sroa.2339.0..sroa_idx, align 8, !tbaa !13
  %2082 = invoke { i64, i64 } @_ZNK4U128eoES_(ptr noundef nonnull align 8 dereferenceable(16) %2032, i64 %.sroa.0338.0.copyload, i64 %.sroa.2339.0.copyload)
          to label %2083 unwind label %.split8806.split

2083:                                             ; preds = %2080
  %2084 = extractvalue { i64, i64 } %2082, 0
  %2085 = extractvalue { i64, i64 } %2082, 1
  %2086 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %2081, i64 %2084, i64 %2085)
          to label %2087 unwind label %.split8806.split

2087:                                             ; preds = %2083
  %2088 = extractvalue { i64, i64 } %2086, 0
  store i64 %2088, ptr %224, align 8
  %2089 = extractvalue { i64, i64 } %2086, 1
  store i64 %2089, ptr %388, align 8
  %2090 = load i32, ptr %2034, align 8, !tbaa !21
  store i32 %2090, ptr %389, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %223, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %224)
          to label %2091 unwind label %.split8806.split

2091:                                             ; preds = %2087
  %2092 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %223)
          to label %..loopexit2028_crit_edge unwind label %.split8809.split

..loopexit2028_crit_edge:                         ; preds = %2091
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %223) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %223) #10
  br label %.loopexit2162

.split8806.split:                                 ; preds = %2087, %2083, %2080
  %2093 = landingpad { ptr, i32 }
          cleanup
  br label %2095

.split8809.split:                                 ; preds = %2091
  %2094 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %223) #10
  br label %2095

2095:                                             ; preds = %.split8809.split, %.split8806.split
  %.pn1708 = phi { ptr, i32 } [ %2094, %.split8809.split ], [ %2093, %.split8806.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %223) #10
  br label %2266

.split8146:                                       ; preds = %1329
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %225) #10
  call void @_ZN4U128C2Ev(ptr noundef nonnull align 8 dereferenceable(16) %225)
  %2096 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  switch i32 %2096, label %.split7861 [
    i32 0, label %.split7865
    i32 1, label %.preheader2098
    i32 2, label %.preheader2100
  ]

2097:                                             ; preds = %..loopexit2153_crit_edge
  %2098 = landingpad { ptr, i32 }
          cleanup
  br label %2161

.preheader2100:                                   ; preds = %.split8146
  %2099 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %225, ptr noundef nonnull align 8 dereferenceable(16) %2099, i64 16, i1 false), !tbaa.struct !62
  br label %..loopexit2153_crit_edge

.preheader2098:                                   ; preds = %.split8146
  %2100 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %2101 = call { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16) %2100)
  %2102 = extractvalue { i64, i64 } %2101, 0
  %2103 = extractvalue { i64, i64 } %2101, 1
  store i64 %2102, ptr %225, align 8, !tbaa !13
  store i64 %2103, ptr %.sroa.4328.0..sroa_idx, align 8, !tbaa !13
  br label %..loopexit2153_crit_edge

.split7865:                                       ; preds = %.split8146
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4171, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

.split7861:                                       ; preds = %.split8146
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %226) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %226, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %228) #10
  store ptr %226, ptr %228, align 8, !tbaa !9
  %2104 = getelementptr inbounds i8, ptr %228, i64 8
  store ptr %1319, ptr %2104, align 8, !tbaa !9
  %2105 = getelementptr inbounds i8, ptr %228, i64 16
  store ptr %1320, ptr %2105, align 8, !tbaa !9
  invoke void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_41vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %227, ptr noundef nonnull align 8 dereferenceable(24) %228)
          to label %2106 unwind label %2109

2106:                                             ; preds = %.split7861
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %227)
          to label %2107 unwind label %2111

2107:                                             ; preds = %2106
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %227) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %228) #10
  %2108 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2108, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %2108, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %2114

2109:                                             ; preds = %.split7861
  %2110 = landingpad { ptr, i32 }
          cleanup
  br label %2113

2111:                                             ; preds = %2106
  %2112 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %227) #10
  br label %2113

2113:                                             ; preds = %2111, %2109
  %.pn1703 = phi { ptr, i32 } [ %2112, %2111 ], [ %2110, %2109 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %228) #10
  br label %2116

2114:                                             ; preds = %2107
  %2115 = landingpad { ptr, i32 }
          cleanup
  br label %2116

2116:                                             ; preds = %2114, %2113
  %.pn1705 = phi { ptr, i32 } [ %2115, %2114 ], [ %.pn1703, %2113 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %226) #10
  br label %2161

..loopexit2153_crit_edge:                         ; preds = %.preheader2100, %.preheader2098
  %2117 = invoke noundef zeroext i1 @_ZNK4U128leEj(ptr noundef nonnull align 8 dereferenceable(16) %225, i32 noundef 128)
          to label %2118 unwind label %2097

2118:                                             ; preds = %..loopexit2153_crit_edge
  br i1 %2117, label %.lr.ph8797, label %2119

2119:                                             ; preds = %2118
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %230) #10
  store ptr %1319, ptr %230, align 8, !tbaa !9
  store ptr %1320, ptr %381, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_42vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %229, ptr noundef nonnull align 8 dereferenceable(16) %230) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %229)
          to label %2120 unwind label %2121

2120:                                             ; preds = %2119
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %230) #10
  br label %.lr.ph8797

2121:                                             ; preds = %2119
  %2122 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %229) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %230) #10
  br label %2161

.loopexit2151:                                    ; preds = %.lr.ph8797, %..loopexit2029_crit_edge, %..loopexit2030_crit_edge
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %225) #10
  br label %.loopexit2162

.lr.ph8797:                                       ; preds = %2118, %2120
  %2123 = call noundef i64 @_ZNK4U12812truncate_u64Ev(ptr noundef nonnull align 8 dereferenceable(16) %225)
  %2124 = trunc i64 %2123 to i32
  %2125 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %2125, label %.loopexit2151 [
    i32 0, label %2134
    i32 1, label %.preheader2094
    i32 2, label %.preheader2096
  ]

.preheader2096:                                   ; preds = %.lr.ph8797
  %2126 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2127 = getelementptr inbounds i8, ptr %2126, i64 16
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %233) #10
  %2128 = load i32, ptr %2127, align 8, !tbaa !21
  %2129 = invoke { i64, i64 } @_ZNK4U128lsEj(ptr noundef nonnull align 8 dereferenceable(16) %2126, i32 noundef %2124)
          to label %2148 unwind label %.split8446.split

.preheader2094:                                   ; preds = %.lr.ph8797
  %2130 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2131 = getelementptr inbounds i8, ptr %2130, i64 16
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %231) #10
  %2132 = load i32, ptr %2131, align 8, !tbaa !53
  %2133 = invoke { i64, i64 } @_ZNK4S128lsEj(ptr noundef nonnull align 8 dereferenceable(16) %2130, i32 noundef %2124)
          to label %2135 unwind label %.split8622.split

2134:                                             ; preds = %.lr.ph8797
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4184, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2135:                                             ; preds = %.preheader2094
  %2136 = extractvalue { i64, i64 } %2133, 0
  %2137 = extractvalue { i64, i64 } %2133, 1
  %2138 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2132, i64 %2136, i64 %2137)
          to label %2139 unwind label %.split8622.split

2139:                                             ; preds = %2135
  %2140 = extractvalue { i64, i64 } %2138, 0
  store i64 %2140, ptr %232, align 8
  %2141 = extractvalue { i64, i64 } %2138, 1
  store i64 %2141, ptr %384, align 8
  %2142 = load i32, ptr %2131, align 8, !tbaa !53
  store i32 %2142, ptr %385, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %231, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %232)
          to label %2143 unwind label %.split8622.split

2143:                                             ; preds = %2139
  %2144 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %231)
          to label %..loopexit2029_crit_edge unwind label %.split8625.split

..loopexit2029_crit_edge:                         ; preds = %2143
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %231) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %231) #10
  br label %.loopexit2151

.split8622.split:                                 ; preds = %2139, %2135, %.preheader2094
  %2145 = landingpad { ptr, i32 }
          cleanup
  br label %2147

.split8625.split:                                 ; preds = %2143
  %2146 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %231) #10
  br label %2147

2147:                                             ; preds = %.split8625.split, %.split8622.split
  %.pn1700 = phi { ptr, i32 } [ %2146, %.split8625.split ], [ %2145, %.split8622.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %231) #10
  br label %2161

2148:                                             ; preds = %.preheader2096
  %2149 = extractvalue { i64, i64 } %2129, 0
  %2150 = extractvalue { i64, i64 } %2129, 1
  %2151 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %2128, i64 %2149, i64 %2150)
          to label %2152 unwind label %.split8446.split

2152:                                             ; preds = %2148
  %2153 = extractvalue { i64, i64 } %2151, 0
  store i64 %2153, ptr %234, align 8
  %2154 = extractvalue { i64, i64 } %2151, 1
  store i64 %2154, ptr %382, align 8
  %2155 = load i32, ptr %2127, align 8, !tbaa !21
  store i32 %2155, ptr %383, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %233, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %234)
          to label %2156 unwind label %.split8446.split

2156:                                             ; preds = %2152
  %2157 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %233)
          to label %..loopexit2030_crit_edge unwind label %.split8449.split

..loopexit2030_crit_edge:                         ; preds = %2156
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %233) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %233) #10
  br label %.loopexit2151

.split8446.split:                                 ; preds = %2152, %2148, %.preheader2096
  %2158 = landingpad { ptr, i32 }
          cleanup
  br label %2160

.split8449.split:                                 ; preds = %2156
  %2159 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %233) #10
  br label %2160

2160:                                             ; preds = %.split8449.split, %.split8446.split
  %.pn1698 = phi { ptr, i32 } [ %2159, %.split8449.split ], [ %2158, %.split8446.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %233) #10
  br label %2161

2161:                                             ; preds = %2147, %2160, %2121, %2116, %2097
  %.pn1705.pn = phi { ptr, i32 } [ %.pn1705, %2116 ], [ %2122, %2121 ], [ %2098, %2097 ], [ %.pn1698, %2160 ], [ %.pn1700, %2147 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %225) #10
  br label %2266

.split6964:                                       ; preds = %1329
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %235) #10
  call void @_ZN4U128C2Ev(ptr noundef nonnull align 8 dereferenceable(16) %235)
  %2162 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  switch i32 %2162, label %.split6699 [
    i32 0, label %.split6703
    i32 1, label %.preheader2106
    i32 2, label %.preheader2108
  ]

2163:                                             ; preds = %..loopexit2157_crit_edge
  %2164 = landingpad { ptr, i32 }
          cleanup
  br label %2227

.preheader2108:                                   ; preds = %.split6964
  %2165 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %235, ptr noundef nonnull align 8 dereferenceable(16) %2165, i64 16, i1 false), !tbaa.struct !62
  br label %..loopexit2157_crit_edge

.preheader2106:                                   ; preds = %.split6964
  %2166 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1320)
  %2167 = call { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16) %2166)
  %2168 = extractvalue { i64, i64 } %2167, 0
  %2169 = extractvalue { i64, i64 } %2167, 1
  store i64 %2168, ptr %235, align 8, !tbaa !13
  store i64 %2169, ptr %.sroa.4.0..sroa_idx, align 8, !tbaa !13
  br label %..loopexit2157_crit_edge

.split6703:                                       ; preds = %.split6964
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4197, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

.split6699:                                       ; preds = %.split6964
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %236) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %236, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %238) #10
  store ptr %236, ptr %238, align 8, !tbaa !9
  %2170 = getelementptr inbounds i8, ptr %238, i64 8
  store ptr %1319, ptr %2170, align 8, !tbaa !9
  %2171 = getelementptr inbounds i8, ptr %238, i64 16
  store ptr %1320, ptr %2171, align 8, !tbaa !9
  invoke void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_43vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %237, ptr noundef nonnull align 8 dereferenceable(24) %238)
          to label %2172 unwind label %2175

2172:                                             ; preds = %.split6699
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %237)
          to label %2173 unwind label %2177

2173:                                             ; preds = %2172
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %237) #10
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %238) #10
  %2174 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2174, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %2174, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %2180

2175:                                             ; preds = %.split6699
  %2176 = landingpad { ptr, i32 }
          cleanup
  br label %2179

2177:                                             ; preds = %2172
  %2178 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %237) #10
  br label %2179

2179:                                             ; preds = %2177, %2175
  %.pn1693 = phi { ptr, i32 } [ %2178, %2177 ], [ %2176, %2175 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %238) #10
  br label %2182

2180:                                             ; preds = %2173
  %2181 = landingpad { ptr, i32 }
          cleanup
  br label %2182

2182:                                             ; preds = %2180, %2179
  %.pn1695 = phi { ptr, i32 } [ %2181, %2180 ], [ %.pn1693, %2179 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %236) #10
  br label %2227

..loopexit2157_crit_edge:                         ; preds = %.preheader2108, %.preheader2106
  %2183 = invoke noundef zeroext i1 @_ZNK4U128leEj(ptr noundef nonnull align 8 dereferenceable(16) %235, i32 noundef 128)
          to label %2184 unwind label %2163

2184:                                             ; preds = %..loopexit2157_crit_edge
  br i1 %2183, label %.lr.ph7575, label %2185

2185:                                             ; preds = %2184
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %240) #10
  store ptr %1319, ptr %240, align 8, !tbaa !9
  store ptr %1320, ptr %376, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_44vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %239, ptr noundef nonnull align 8 dereferenceable(16) %240) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %239)
          to label %2186 unwind label %2187

2186:                                             ; preds = %2185
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %240) #10
  br label %.lr.ph7575

2187:                                             ; preds = %2185
  %2188 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %239) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %240) #10
  br label %2227

.loopexit2155:                                    ; preds = %.lr.ph7575, %..loopexit2033_crit_edge, %..loopexit2034_crit_edge
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %235) #10
  br label %.loopexit2162

.lr.ph7575:                                       ; preds = %2184, %2186
  %2189 = call noundef i64 @_ZNK4U12812truncate_u64Ev(ptr noundef nonnull align 8 dereferenceable(16) %235)
  %2190 = trunc i64 %2189 to i32
  %2191 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  switch i32 %2191, label %.loopexit2155 [
    i32 0, label %2200
    i32 1, label %.preheader2102
    i32 2, label %.preheader2104
  ]

.preheader2104:                                   ; preds = %.lr.ph7575
  %2192 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2193 = getelementptr inbounds i8, ptr %2192, i64 16
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %243) #10
  %2194 = load i32, ptr %2193, align 8, !tbaa !21
  %2195 = invoke { i64, i64 } @_ZNK4U128rsEj(ptr noundef nonnull align 8 dereferenceable(16) %2192, i32 noundef %2190)
          to label %2214 unwind label %.split7244.split

.preheader2102:                                   ; preds = %.lr.ph7575
  %2196 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %1319)
  %2197 = getelementptr inbounds i8, ptr %2196, i64 16
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %241) #10
  %2198 = load i32, ptr %2197, align 8, !tbaa !53
  %2199 = invoke { i64, i64 } @_ZNK4S128rsEj(ptr noundef nonnull align 8 dereferenceable(16) %2196, i32 noundef %2190)
          to label %2201 unwind label %.split7410.split

2200:                                             ; preds = %.lr.ph7575
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4210, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2201:                                             ; preds = %.preheader2102
  %2202 = extractvalue { i64, i64 } %2199, 0
  %2203 = extractvalue { i64, i64 } %2199, 1
  %2204 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2198, i64 %2202, i64 %2203)
          to label %2205 unwind label %.split7410.split

2205:                                             ; preds = %2201
  %2206 = extractvalue { i64, i64 } %2204, 0
  store i64 %2206, ptr %242, align 8
  %2207 = extractvalue { i64, i64 } %2204, 1
  store i64 %2207, ptr %379, align 8
  %2208 = load i32, ptr %2197, align 8, !tbaa !53
  store i32 %2208, ptr %380, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %241, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %242)
          to label %2209 unwind label %.split7410.split

2209:                                             ; preds = %2205
  %2210 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %241)
          to label %..loopexit2033_crit_edge unwind label %.split7413.split

..loopexit2033_crit_edge:                         ; preds = %2209
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %241) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %241) #10
  br label %.loopexit2155

.split7410.split:                                 ; preds = %2205, %2201, %.preheader2102
  %2211 = landingpad { ptr, i32 }
          cleanup
  br label %2213

.split7413.split:                                 ; preds = %2209
  %2212 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %241) #10
  br label %2213

2213:                                             ; preds = %.split7413.split, %.split7410.split
  %.pn1690 = phi { ptr, i32 } [ %2212, %.split7413.split ], [ %2211, %.split7410.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %241) #10
  br label %2227

2214:                                             ; preds = %.preheader2104
  %2215 = extractvalue { i64, i64 } %2195, 0
  %2216 = extractvalue { i64, i64 } %2195, 1
  %2217 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %2194, i64 %2215, i64 %2216)
          to label %2218 unwind label %.split7244.split

2218:                                             ; preds = %2214
  %2219 = extractvalue { i64, i64 } %2217, 0
  store i64 %2219, ptr %244, align 8
  %2220 = extractvalue { i64, i64 } %2217, 1
  store i64 %2220, ptr %377, align 8
  %2221 = load i32, ptr %2193, align 8, !tbaa !21
  store i32 %2221, ptr %378, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %243, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %244)
          to label %2222 unwind label %.split7244.split

2222:                                             ; preds = %2218
  %2223 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %243)
          to label %..loopexit2034_crit_edge unwind label %.split7247.split

..loopexit2034_crit_edge:                         ; preds = %2222
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %243) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %243) #10
  br label %.loopexit2155

.split7244.split:                                 ; preds = %2218, %2214, %.preheader2104
  %2224 = landingpad { ptr, i32 }
          cleanup
  br label %2226

.split7247.split:                                 ; preds = %2222
  %2225 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %243) #10
  br label %2226

2226:                                             ; preds = %.split7247.split, %.split7244.split
  %.pn1688 = phi { ptr, i32 } [ %2225, %.split7247.split ], [ %2224, %.split7244.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %243) #10
  br label %2227

2227:                                             ; preds = %2213, %2226, %2187, %2182, %2163
  %.pn1695.pn = phi { ptr, i32 } [ %.pn1695, %2182 ], [ %2188, %2187 ], [ %2164, %2163 ], [ %.pn1688, %2226 ], [ %.pn1690, %2213 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %235) #10
  br label %2266

.loopexit2162:                                    ; preds = %..loopexit2028_crit_edge, %..loopexit2027_crit_edge, %..loopexit2026_crit_edge, %.lr.ph10405, %..loopexit2025_crit_edge, %..loopexit2024_crit_edge, %..loopexit2023_crit_edge, %.lr.ph12074, %..loopexit2022_crit_edge, %..loopexit2021_crit_edge, %..loopexit2020_crit_edge, %.lr.ph13803, %..loopexit2019_crit_edge, %..loopexit2018_crit_edge, %.lr.ph13812, %1787, %1772, %1762, %1738, %1723, %1713, %..loopexit2015_crit_edge, %.lr.ph14511, %..loopexit2014_crit_edge, %..loopexit2013_crit_edge, %..loopexit2012_crit_edge, %.lr.ph16677, %..loopexit2011_crit_edge, %..loopexit2010_crit_edge, %..loopexit2009_crit_edge, %.lr.ph18915, %..loopexit2008_crit_edge, %..loopexit2007_crit_edge, %..loopexit_crit_edge, %.lr.ph21225, %1329, %1405, %1413, %1391, %1399, %1377, %1385, %1363, %1371, %1349, %1357, %1333, %1341, %.loopexit2155, %.loopexit2151
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %245) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %245)
          to label %2228 unwind label %2251

2228:                                             ; preds = %.loopexit2162
  %2229 = invoke noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40) %119, ptr noundef nonnull align 8 dereferenceable(40) %245)
          to label %2230 unwind label %2253

2230:                                             ; preds = %2228
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %245) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %245) #10
  br i1 %2229, label %2231, label %2265

2231:                                             ; preds = %2230
  %2232 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2233 unwind label %1342

2233:                                             ; preds = %2231
  br i1 %2232, label %2234, label %2256

2234:                                             ; preds = %2233
  %2235 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2235, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2237 unwind label %1342

2237:                                             ; preds = %2234
  %2238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2236, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2239 unwind label %1342

2239:                                             ; preds = %2237
  %2240 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2238, ptr noundef nonnull @.str.38)
          to label %2241 unwind label %1342

2241:                                             ; preds = %2239
  %2242 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %2240, ptr noundef nonnull align 8 dereferenceable(112) %962)
          to label %2243 unwind label %1342

2243:                                             ; preds = %2241
  %2244 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2242, ptr noundef nonnull @.str.60)
          to label %2245 unwind label %1342

2245:                                             ; preds = %2243
  %2246 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %2244, ptr noundef nonnull align 8 dereferenceable(40) %119)
          to label %2247 unwind label %1342

2247:                                             ; preds = %2245
  %2248 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2246, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2249 unwind label %1342

2249:                                             ; preds = %2247
  %2250 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2248, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2256 unwind label %1342

2251:                                             ; preds = %.loopexit2162
  %2252 = landingpad { ptr, i32 }
          cleanup
  br label %2255

2253:                                             ; preds = %2228
  %2254 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %245) #10
  br label %2255

2255:                                             ; preds = %2253, %2251
  %.pn1796 = phi { ptr, i32 } [ %2254, %2253 ], [ %2252, %2251 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %245) #10
  br label %2266

2256:                                             ; preds = %2249, %2233
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %246) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %247, ptr noundef nonnull align 8 dereferenceable(40) %119) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %246, ptr noundef nonnull %247)
          to label %2257 unwind label %2260

2257:                                             ; preds = %2256
  %2258 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %246)
          to label %2259 unwind label %2262

2259:                                             ; preds = %2257
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %246) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %247) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %246) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %2265

2260:                                             ; preds = %2256
  %2261 = landingpad { ptr, i32 }
          cleanup
  br label %2264

2262:                                             ; preds = %2257
  %2263 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %246) #10
  br label %2264

2264:                                             ; preds = %2262, %2260
  %.pn1798 = phi { ptr, i32 } [ %2263, %2262 ], [ %2261, %2260 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %247) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %246) #10
  br label %2266

2265:                                             ; preds = %2259, %2230
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %119) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %119) #10
  br label %.loopexit2221

2266:                                             ; preds = %2057, %2076, %.split9443.split, %2095, %.split8803.split, %1984, %2003, %.split11075.split, %2022, %.split10411.split, %1912, %1931, %.split12768.split, %1950, %.split12080.split, %1840, %1821, %1814, %1810, %1878, %1859, %1852, %1848, %1694, %.split13823.split, %1743, %1706, %1702, %1792, %1755, %1751, %1626, %.split15965.split, %1645, %.split15237.split, %1664, %.split14517.split, %1544, %.split18179.split, %1563, %.split17427.split, %1582, %.split16683.split, %1462, %.split20465.split, %1481, %.split19689.split, %1500, %.split18921.split, %2264, %2255, %2227, %2161, %2029, %1957, %1885, %1799, %1671, %1589, %1507, %1425, %1418, %1404, %1390, %1376, %1362, %1348, %1342
  %.pn1798.pn = phi { ptr, i32 } [ %.pn1798, %2264 ], [ %1343, %1342 ], [ %.pn1796, %2255 ], [ %.pn1695.pn, %2227 ], [ %.pn1705.pn, %2161 ], [ %2030, %2029 ], [ %1958, %1957 ], [ %1886, %1885 ], [ %1800, %1799 ], [ %1672, %1671 ], [ %1590, %1589 ], [ %1508, %1507 ], [ %1426, %1425 ], [ %.pn1784, %1418 ], [ %.pn1786, %1404 ], [ %.pn1788, %1390 ], [ %.pn1790, %1376 ], [ %.pn1792, %1362 ], [ %.pn1794, %1348 ], [ %.pn1780, %1462 ], [ %1452, %.split20465.split ], [ %.pn1777, %1481 ], [ %1465, %.split19689.split ], [ %.pn1774, %1500 ], [ %1484, %.split18921.split ], [ %.pn1770, %1544 ], [ %1534, %.split18179.split ], [ %.pn1767, %1563 ], [ %1547, %.split17427.split ], [ %.pn1764, %1582 ], [ %1566, %.split16683.split ], [ %.pn1760, %1626 ], [ %1616, %.split15965.split ], [ %.pn1757, %1645 ], [ %1629, %.split15237.split ], [ %.pn1754, %1664 ], [ %1648, %.split14517.split ], [ %.pn1750, %1694 ], [ %1684, %.split13823.split ], [ %1703, %1702 ], [ %.pn1746, %1743 ], [ %1707, %1706 ], [ %1752, %1751 ], [ %.pn1742, %1792 ], [ %1756, %1755 ], [ %.pn1738, %1840 ], [ %1822, %1821 ], [ %1811, %1810 ], [ %1815, %1814 ], [ %.pn1735, %1878 ], [ %1860, %1859 ], [ %1849, %1848 ], [ %1853, %1852 ], [ %.pn1732, %1912 ], [ %.pn1729, %1931 ], [ %1915, %.split12768.split ], [ %.pn1726, %1950 ], [ %1934, %.split12080.split ], [ %.pn1723, %1984 ], [ %.pn1720, %2003 ], [ %1987, %.split11075.split ], [ %.pn1717, %2022 ], [ %2006, %.split10411.split ], [ %.pn1714, %2057 ], [ %.pn1711, %2076 ], [ %2060, %.split9443.split ], [ %.pn1708, %2095 ], [ %2079, %.split8803.split ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %119) #10
  br label %2267

2267:                                             ; preds = %2266, %1331
  %.pn1798.pn.pn = phi { ptr, i32 } [ %.pn1798.pn, %2266 ], [ %1332, %1331 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %119) #10
  br label %2863

2268:                                             ; preds = %1316, %1314
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %248) #10
  invoke void @_ZN3MIR5ParamC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %248)
          to label %2269 unwind label %2271

2269:                                             ; preds = %2268
  %2270 = load i32, ptr %1310, align 8, !tbaa !56
  switch i32 %2270, label %2387 [
    i32 0, label %2273
    i32 2, label %2273
    i32 8, label %2285
    i32 6, label %2312
    i32 4, label %2323
  ]

2271:                                             ; preds = %2268
  %2272 = landingpad { ptr, i32 }
          cleanup
  br label %2438

2273:                                             ; preds = %2269, %2269
  %2274 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  br i1 %2274, label %2275, label %2387

2275:                                             ; preds = %2273
  %2276 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2277 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2276)
  br i1 %2277, label %2278, label %2387

2278:                                             ; preds = %2275
  %2279 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2280 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2279)
  %2281 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2280, i32 noundef 0)
          to label %2282 unwind label %2283

2282:                                             ; preds = %2278
  br i1 %2281, label %.invoke, label %2387

2283:                                             ; preds = %.invoke, %2409, %2407, %2405, %2403, %2401, %2399, %2397, %2394, %2391, %2317, %2290, %2278
  %2284 = landingpad { ptr, i32 }
          cleanup
  br label %2437

2285:                                             ; preds = %2269
  %2286 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  br i1 %2286, label %2287, label %2387

2287:                                             ; preds = %2285
  %2288 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2289 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2288)
  br i1 %2289, label %2290, label %2387

2290:                                             ; preds = %2287
  %2291 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2292 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2291)
  %2293 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2292, i32 noundef 1)
          to label %2294 unwind label %2283

2294:                                             ; preds = %2290
  br i1 %2293, label %2295, label %2387

2295:                                             ; preds = %2294
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %249) #10
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %251, i64 noundef 0, i64 noundef 0)
  %2296 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2297 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2296)
  %2298 = getelementptr inbounds i8, ptr %2297, i64 16
  %2299 = load i32, ptr %2298, align 8, !tbaa !21
  store i32 %2299, ptr %375, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %250, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %251)
          to label %2300 unwind label %2304

2300:                                             ; preds = %2295
  invoke void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48) %249, ptr noundef nonnull %250)
          to label %2301 unwind label %2306

2301:                                             ; preds = %2300
  %2302 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %249)
          to label %2303 unwind label %2308

2303:                                             ; preds = %2301
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %249) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %250) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %249) #10
  br label %2387

2304:                                             ; preds = %2295
  %2305 = landingpad { ptr, i32 }
          cleanup
  br label %2311

2306:                                             ; preds = %2300
  %2307 = landingpad { ptr, i32 }
          cleanup
  br label %2310

2308:                                             ; preds = %2301
  %2309 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %249) #10
  br label %2310

2310:                                             ; preds = %2308, %2306
  %.pn1675 = phi { ptr, i32 } [ %2309, %2308 ], [ %2307, %2306 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %250) #10
  br label %2311

2311:                                             ; preds = %2310, %2304
  %.pn1675.pn = phi { ptr, i32 } [ %.pn1675, %2310 ], [ %2305, %2304 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %249) #10
  br label %2437

2312:                                             ; preds = %2269
  %2313 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  br i1 %2313, label %2314, label %2387

2314:                                             ; preds = %2312
  %2315 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2316 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2315)
  br i1 %2316, label %2317, label %2387

2317:                                             ; preds = %2314
  %2318 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2319 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2318)
  %2320 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2319, i32 noundef 1)
          to label %2321 unwind label %2283

2321:                                             ; preds = %2317
  br i1 %2320, label %.invoke, label %2387

.invoke:                                          ; preds = %2282, %2321
  %2322 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %1308)
          to label %2387 unwind label %2283

2323:                                             ; preds = %2269
  %2324 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  br i1 %2324, label %2325, label %2355

2325:                                             ; preds = %2323
  %2326 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2327 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2326)
  br i1 %2327, label %2328, label %2355

2328:                                             ; preds = %2325
  %2329 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1309)
  %2330 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2329)
  %2331 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2330, i32 noundef 0)
          to label %2332 unwind label %2340

2332:                                             ; preds = %2328
  br i1 %2331, label %2333, label %2350

2333:                                             ; preds = %2332
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %252) #10
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %254, i64 noundef 0, i64 noundef 0)
  %2334 = getelementptr inbounds i8, ptr %2330, i64 16
  %2335 = load i32, ptr %2334, align 8, !tbaa !21
  store i32 %2335, ptr %373, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %253, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %254)
          to label %2336 unwind label %2342

2336:                                             ; preds = %2333
  invoke void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48) %252, ptr noundef nonnull %253)
          to label %2337 unwind label %2344

2337:                                             ; preds = %2336
  %2338 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %252)
          to label %2339 unwind label %2346

2339:                                             ; preds = %2337
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %252) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %253) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %252) #10
  br label %2355

2340:                                             ; preds = %2353, %2350, %2328
  %2341 = landingpad { ptr, i32 }
          cleanup
  br label %2437

2342:                                             ; preds = %2333
  %2343 = landingpad { ptr, i32 }
          cleanup
  br label %2349

2344:                                             ; preds = %2336
  %2345 = landingpad { ptr, i32 }
          cleanup
  br label %2348

2346:                                             ; preds = %2337
  %2347 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %252) #10
  br label %2348

2348:                                             ; preds = %2346, %2344
  %.pn1667 = phi { ptr, i32 } [ %2347, %2346 ], [ %2345, %2344 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %253) #10
  br label %2349

2349:                                             ; preds = %2348, %2342
  %.pn1667.pn = phi { ptr, i32 } [ %.pn1667, %2348 ], [ %2343, %2342 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %252) #10
  br label %2437

2350:                                             ; preds = %2332
  %2351 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2330, i32 noundef 1)
          to label %2352 unwind label %2340

2352:                                             ; preds = %2350
  br i1 %2351, label %2353, label %2355

2353:                                             ; preds = %2352
  %2354 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %1308)
          to label %2355 unwind label %2340

2355:                                             ; preds = %2339, %2352, %2353, %2325, %2323
  %2356 = call noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1308)
  br i1 %2356, label %2357, label %2387

2357:                                             ; preds = %2355
  %2358 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1308)
  %2359 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2358)
  br i1 %2359, label %2360, label %2387

2360:                                             ; preds = %2357
  %2361 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %1308)
  %2362 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2361)
  %2363 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2362, i32 noundef 0)
          to label %2364 unwind label %2372

2364:                                             ; preds = %2360
  br i1 %2363, label %2365, label %2382

2365:                                             ; preds = %2364
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %255) #10
  call void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16) %257, i64 noundef 0, i64 noundef 0)
  %2366 = getelementptr inbounds i8, ptr %2362, i64 16
  %2367 = load i32, ptr %2366, align 8, !tbaa !21
  store i32 %2367, ptr %374, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %256, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %257)
          to label %2368 unwind label %2374

2368:                                             ; preds = %2365
  invoke void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48) %255, ptr noundef nonnull %256)
          to label %2369 unwind label %2376

2369:                                             ; preds = %2368
  %2370 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %255)
          to label %2371 unwind label %2378

2371:                                             ; preds = %2369
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %255) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %256) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %255) #10
  br label %2387

2372:                                             ; preds = %2385, %2382, %2360
  %2373 = landingpad { ptr, i32 }
          cleanup
  br label %2437

2374:                                             ; preds = %2365
  %2375 = landingpad { ptr, i32 }
          cleanup
  br label %2381

2376:                                             ; preds = %2368
  %2377 = landingpad { ptr, i32 }
          cleanup
  br label %2380

2378:                                             ; preds = %2369
  %2379 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %255) #10
  br label %2380

2380:                                             ; preds = %2378, %2376
  %.pn1671 = phi { ptr, i32 } [ %2379, %2378 ], [ %2377, %2376 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %256) #10
  br label %2381

2381:                                             ; preds = %2380, %2374
  %.pn1671.pn = phi { ptr, i32 } [ %.pn1671, %2380 ], [ %2375, %2374 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %255) #10
  br label %2437

2382:                                             ; preds = %2364
  %2383 = invoke noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16) %2362, i32 noundef 1)
          to label %2384 unwind label %2372

2384:                                             ; preds = %2382
  br i1 %2383, label %2385, label %2387

2385:                                             ; preds = %2384
  %2386 = invoke noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %1309)
          to label %2387 unwind label %2372

2387:                                             ; preds = %.invoke, %2371, %2384, %2385, %2269, %2355, %2357, %2312, %2314, %2321, %2285, %2287, %2294, %2303, %2273, %2275, %2282
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %258) #10
  invoke void @_ZN3MIR5ParamC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %258)
          to label %2388 unwind label %2411

2388:                                             ; preds = %2387
  %2389 = invoke noundef zeroext i1 @_ZNK3MIR5ParamneERKS0_(ptr noundef nonnull align 8 dereferenceable(48) %248, ptr noundef nonnull align 8 dereferenceable(48) %258)
          to label %2390 unwind label %2413

2390:                                             ; preds = %2388
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %258) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %258) #10
  br i1 %2389, label %2391, label %2436

2391:                                             ; preds = %2390
  %2392 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2393 unwind label %2283

2393:                                             ; preds = %2391
  br i1 %2392, label %2394, label %.split6174

2394:                                             ; preds = %2393
  %2395 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2396 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2395, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2397 unwind label %2283

2397:                                             ; preds = %2394
  %2398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2396, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2399 unwind label %2283

2399:                                             ; preds = %2397
  %2400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2398, ptr noundef nonnull @.str.38)
          to label %2401 unwind label %2283

2401:                                             ; preds = %2399
  %2402 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %2400, ptr noundef nonnull align 8 dereferenceable(112) %962)
          to label %2403 unwind label %2283

2403:                                             ; preds = %2401
  %2404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2402, ptr noundef nonnull @.str.60)
          to label %2405 unwind label %2283

2405:                                             ; preds = %2403
  %2406 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_5ParamE(ptr noundef nonnull align 8 dereferenceable(8) %2404, ptr noundef nonnull align 8 dereferenceable(48) %248)
          to label %2407 unwind label %2283

2407:                                             ; preds = %2405
  %2408 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2406, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2409 unwind label %2283

2409:                                             ; preds = %2407
  %2410 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2408, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.split6174 unwind label %2283

2411:                                             ; preds = %2387
  %2412 = landingpad { ptr, i32 }
          cleanup
  br label %2415

2413:                                             ; preds = %2388
  %2414 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %258) #10
  br label %2415

2415:                                             ; preds = %2413, %2411
  %.pn1678 = phi { ptr, i32 } [ %2414, %2413 ], [ %2412, %2411 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %258) #10
  br label %2437

.split6174:                                       ; preds = %2409, %2393
  %2416 = call noundef i32 @_ZNK3MIR5Param3tagEv(ptr noundef nonnull align 8 dereferenceable(48) %248)
  switch i32 %2416, label %..loopexit2159_crit_edge [
    i32 0, label %.split5916
    i32 1, label %.preheader2110
    i32 2, label %.split5918
    i32 3, label %.preheader2112
  ]

.preheader2112:                                   ; preds = %.split6174
  %2417 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %248)
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %261) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %262, ptr noundef nonnull align 8 dereferenceable(40) %2417) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %261, ptr noundef nonnull %262)
          to label %2431 unwind label %.split4894.split.split.split

.preheader2110:                                   ; preds = %.split6174
  %2418 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR5Param9as_LValueEv(ptr noundef nonnull align 8 dereferenceable(48) %248)
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %259) #10
  invoke void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32) %260, ptr noundef nonnull align 8 dereferenceable(32) %2418)
          to label %2419 unwind label %.split5400.split.split.split

.split5916:                                       ; preds = %.split6174
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4295, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2419:                                             ; preds = %.preheader2110
  invoke void @_ZN3MIR6RValueC2ENS_6LValueE(ptr noundef nonnull align 8 dereferenceable(112) %259, ptr noundef nonnull %260)
          to label %2420 unwind label %.split5403.split.split.split

2420:                                             ; preds = %2419
  %2421 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %259)
          to label %..loopexit2037_crit_edge unwind label %.split5406.split.split.split

..loopexit2037_crit_edge:                         ; preds = %2420
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %259) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %260) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %259) #10
  br label %..loopexit2159_crit_edge

.split5400.split.split.split:                     ; preds = %.preheader2110
  %2422 = landingpad { ptr, i32 }
          cleanup
  br label %2426

.split5403.split.split.split:                     ; preds = %2419
  %2423 = landingpad { ptr, i32 }
          cleanup
  br label %2425

.split5406.split.split.split:                     ; preds = %2420
  %2424 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %259) #10
  br label %2425

2425:                                             ; preds = %.split5406.split.split.split, %.split5403.split.split.split
  %.pn1682 = phi { ptr, i32 } [ %2424, %.split5406.split.split.split ], [ %2423, %.split5403.split.split.split ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %260) #10
  br label %2426

2426:                                             ; preds = %2425, %.split5400.split.split.split
  %.pn1682.pn = phi { ptr, i32 } [ %.pn1682, %2425 ], [ %2422, %.split5400.split.split.split ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %259) #10
  br label %2437

.split5918:                                       ; preds = %.split6174
  %2427 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(48) %248)
  %2428 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2428, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %2428, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %2429

2429:                                             ; preds = %.split5918
  %2430 = landingpad { ptr, i32 }
          cleanup
  br label %2437

2431:                                             ; preds = %.preheader2112
  %2432 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %261)
          to label %..loopexit2038_crit_edge unwind label %.split4897.split.split.split

..loopexit2038_crit_edge:                         ; preds = %2431
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %261) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %262) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %261) #10
  br label %..loopexit2159_crit_edge

.split4894.split.split.split:                     ; preds = %.preheader2112
  %2433 = landingpad { ptr, i32 }
          cleanup
  br label %2435

.split4897.split.split.split:                     ; preds = %2431
  %2434 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %261) #10
  br label %2435

2435:                                             ; preds = %.split4897.split.split.split, %.split4894.split.split.split
  %.pn1680 = phi { ptr, i32 } [ %2434, %.split4897.split.split.split ], [ %2433, %.split4894.split.split.split ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %262) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %261) #10
  br label %2437

..loopexit2159_crit_edge:                         ; preds = %..loopexit2038_crit_edge, %..loopexit2037_crit_edge, %.split6174
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %2436

2436:                                             ; preds = %..loopexit2159_crit_edge, %2390
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %248) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %248) #10
  br label %.loopexit2221

2437:                                             ; preds = %2426, %2429, %2435, %2372, %2381, %2340, %2349, %2415, %2311, %2283
  %.pn1680.pn.pn = phi { ptr, i32 } [ %2284, %2283 ], [ %.pn1678, %2415 ], [ %.pn1675.pn, %2311 ], [ %.pn1667.pn, %2349 ], [ %2341, %2340 ], [ %.pn1671.pn, %2381 ], [ %2373, %2372 ], [ %.pn1680, %2435 ], [ %2430, %2429 ], [ %.pn1682.pn, %2426 ]
  call void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48) %248) #10
  br label %2438

2438:                                             ; preds = %2437, %2271
  %.pn1680.pn.pn.pn = phi { ptr, i32 } [ %.pn1680.pn.pn, %2437 ], [ %2272, %2271 ]
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %248) #10
  br label %2863

.lr.ph4889:                                       ; preds = %.lr.ph23181
  %2439 = call noundef nonnull align 8 dereferenceable(36) ptr @_ZN3MIR6RValue8as_UniOpEv(ptr noundef nonnull align 8 dereferenceable(112) %962)
  %2440 = getelementptr inbounds i8, ptr %2439, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %263) #10
  %2441 = invoke ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48) %67, ptr noundef nonnull align 8 dereferenceable(32) %2439)
          to label %2442 unwind label %2450

2442:                                             ; preds = %.lr.ph4889
  store ptr %2441, ptr %263, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %264) #10
  %2443 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  store ptr %2443, ptr %264, align 8
  %2444 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %263, ptr noundef nonnull align 8 dereferenceable(8) %264) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %264) #10
  br i1 %2444, label %2445, label %..loopexit2177_crit_edge

2445:                                             ; preds = %2442
  %2446 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %263) #10
  %2447 = getelementptr inbounds i8, ptr %2446, i64 32
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %265) #10
  invoke void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40) %265)
          to label %2448 unwind label %2452

2448:                                             ; preds = %2445
  %2449 = load i32, ptr %2440, align 8, !tbaa !63
  switch i32 %2449, label %.thread1990 [
    i32 0, label %.lr.ph4885
    i32 1, label %2531
  ]

2450:                                             ; preds = %.lr.ph4889
  %2451 = landingpad { ptr, i32 }
          cleanup
  br label %2615

2452:                                             ; preds = %2445
  %2453 = landingpad { ptr, i32 }
          cleanup
  br label %2614

.lr.ph4885:                                       ; preds = %2448
  %2454 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  switch i32 %2454, label %.thread1990 [
    i32 0, label %2471
    i32 2, label %.preheader2114
    i32 1, label %.preheader2116
    i32 3, label %.preheader2118
    i32 4, label %.preheader2120
    i32 5, label %.preheader2122
    i32 6, label %.preheader2124
    i32 7, label %.preheader2126
    i32 8, label %.preheader2128
    i32 9, label %.preheader2130
    i32 10, label %.preheader2132
  ]

.preheader2132:                                   ; preds = %.lr.ph4885
  %2455 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2130:                                   ; preds = %.lr.ph4885
  %2456 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2128:                                   ; preds = %.lr.ph4885
  %2457 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2126:                                   ; preds = %.lr.ph4885
  %2458 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2124:                                   ; preds = %.lr.ph4885
  %2459 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2122:                                   ; preds = %.lr.ph4885
  %2460 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2120:                                   ; preds = %.lr.ph4885
  %2461 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %278) #10
  %2462 = load i8, ptr %2461, align 1, !tbaa !46, !range !48, !noundef !49
  %2463 = xor i8 %2462, 1
  invoke void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %278, i8 %2463)
          to label %2526 unwind label %.split4563.split

.preheader2118:                                   ; preds = %.lr.ph4885
  %2464 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.preheader2116:                                   ; preds = %.lr.ph4885
  %2465 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  %2466 = getelementptr inbounds i8, ptr %2465, i64 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %272) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %272, ptr noundef nonnull align 8 dereferenceable(16) %2465, i64 16, i1 false), !tbaa.struct !62
  %2467 = load i32, ptr %2466, align 8, !tbaa !53
  switch i32 %2467, label %2518 [
    i32 3, label %2497
    i32 5, label %2497
    i32 7, label %2497
    i32 1, label %2497
    i32 9, label %2497
    i32 11, label %2504
    i32 15, label %.split4659
  ]

.preheader2114:                                   ; preds = %.lr.ph4885
  %2468 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  %2469 = getelementptr inbounds i8, ptr %2468, i64 16
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %266) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %266, ptr noundef nonnull align 8 dereferenceable(16) %2468, i64 16, i1 false), !tbaa.struct !62
  %2470 = load i32, ptr %2469, align 8, !tbaa !21
  switch i32 %2470, label %2489 [
    i32 2, label %2472
    i32 4, label %2472
    i32 6, label %2472
    i32 0, label %2472
    i32 8, label %2472
    i32 15, label %.split4781
  ]

2471:                                             ; preds = %.lr.ph4885
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4314, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2472:                                             ; preds = %.preheader2114, %.preheader2114, %.preheader2114, %.preheader2114, %.preheader2114
  %2473 = invoke { i64, i64 } @_ZNK4U128coEv(ptr noundef nonnull align 8 dereferenceable(16) %266)
          to label %2474 unwind label %.split4783.split

2474:                                             ; preds = %2472
  %2475 = extractvalue { i64, i64 } %2473, 0
  %2476 = extractvalue { i64, i64 } %2473, 1
  %2477 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef %2470, i64 %2475, i64 %2476)
          to label %2478 unwind label %.split4783.split

2478:                                             ; preds = %2474
  %2479 = extractvalue { i64, i64 } %2477, 0
  %2480 = extractvalue { i64, i64 } %2477, 1
  store i64 %2479, ptr %266, align 8, !tbaa !13
  store i64 %2480, ptr %.sroa.5201.0..sroa_idx, align 8, !tbaa !13
  %.pre = load i32, ptr %2469, align 8, !tbaa !21
  br label %2489

.split4783.split:                                 ; preds = %2474, %2472
  %2481 = landingpad { ptr, i32 }
          cleanup
  br label %2496

.split4781:                                       ; preds = %.preheader2114
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %267) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %267, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %269) #10
  store ptr %267, ptr %269, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_45vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %268, ptr noundef nonnull align 8 dereferenceable(8) %269) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %268)
          to label %2482 unwind label %2484

2482:                                             ; preds = %.split4781
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %269) #10
  %2483 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2483, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %2483, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %2486

2484:                                             ; preds = %.split4781
  %2485 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %268) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %269) #10
  br label %2488

2486:                                             ; preds = %2482
  %2487 = landingpad { ptr, i32 }
          cleanup
  br label %2488

2488:                                             ; preds = %2486, %2484
  %.pn1656 = phi { ptr, i32 } [ %2487, %2486 ], [ %2485, %2484 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %267) #10
  br label %2496

2489:                                             ; preds = %.preheader2114, %2478
  %2490 = phi i32 [ %.pre, %2478 ], [ %2470, %.preheader2114 ]
  %.41560 = phi i1 [ true, %2478 ], [ false, %.preheader2114 ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %270) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %271, ptr noundef nonnull align 8 dereferenceable(16) %266, i64 16, i1 false), !tbaa.struct !62
  store i32 %2490, ptr %372, align 8, !tbaa !21
  invoke void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %270, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Uint") align 8 %271)
          to label %2491 unwind label %.split4786.split

2491:                                             ; preds = %2489
  %2492 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %265, ptr noundef nonnull align 8 dereferenceable(40) %270)
          to label %..loopexit2039_crit_edge unwind label %.split4789.split

..loopexit2039_crit_edge:                         ; preds = %2491
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %270) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %270) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %266) #10
  br i1 %.41560, label %.thread1993, label %.thread1990

.split4786.split:                                 ; preds = %2489
  %2493 = landingpad { ptr, i32 }
          cleanup
  br label %2495

.split4789.split:                                 ; preds = %2491
  %2494 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %270) #10
  br label %2495

2495:                                             ; preds = %.split4789.split, %.split4786.split
  %.pn1658 = phi { ptr, i32 } [ %2494, %.split4789.split ], [ %2493, %.split4786.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %270) #10
  br label %2496

2496:                                             ; preds = %2495, %2488, %.split4783.split
  %.pn1658.pn = phi { ptr, i32 } [ %.pn1658, %2495 ], [ %.pn1656, %2488 ], [ %2481, %.split4783.split ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %266) #10
  br label %2613

2497:                                             ; preds = %.preheader2116, %.preheader2116, %.preheader2116, %.preheader2116, %.preheader2116
  %2498 = invoke { i64, i64 } @_ZNK4S128coEv(ptr noundef nonnull align 8 dereferenceable(16) %272)
          to label %2499 unwind label %.split4664.split

2499:                                             ; preds = %2497
  %2500 = extractvalue { i64, i64 } %2498, 0
  %2501 = extractvalue { i64, i64 } %2498, 1
  %2502 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef %2467, i64 %2500, i64 %2501)
          to label %.sink.split unwind label %.split4664.split

.split4664.split:                                 ; preds = %2499, %2497
  %2503 = landingpad { ptr, i32 }
          cleanup
  br label %2525

2504:                                             ; preds = %.preheader2116
  %2505 = invoke { i64, i64 } @_ZNK4S128coEv(ptr noundef nonnull align 8 dereferenceable(16) %272)
          to label %2506 unwind label %.split4661.split

2506:                                             ; preds = %2504
  %2507 = extractvalue { i64, i64 } %2505, 0
  %2508 = extractvalue { i64, i64 } %2505, 1
  %2509 = invoke { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef 11, i64 %2507, i64 %2508)
          to label %.sink.split unwind label %.split4661.split

.split4661.split:                                 ; preds = %2506, %2504
  %2510 = landingpad { ptr, i32 }
          cleanup
  br label %2525

.split4659:                                       ; preds = %.preheader2116
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %273) #10
  store ptr @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE, ptr %273, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %275) #10
  store ptr %273, ptr %275, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_46vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %274, ptr noundef nonnull align 8 dereferenceable(8) %275) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %274)
          to label %2511 unwind label %2513

2511:                                             ; preds = %.split4659
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %274) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %275) #10
  %2512 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2512, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %2512, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %2515

2513:                                             ; preds = %.split4659
  %2514 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %274) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %275) #10
  br label %2517

2515:                                             ; preds = %2511
  %2516 = landingpad { ptr, i32 }
          cleanup
  br label %2517

2517:                                             ; preds = %2515, %2513
  %.pn1651 = phi { ptr, i32 } [ %2516, %2515 ], [ %2514, %2513 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %273) #10
  br label %2525

.sink.split:                                      ; preds = %2506, %2499
  %.pn = phi { i64, i64 } [ %2502, %2499 ], [ %2509, %2506 ]
  %.sink = extractvalue { i64, i64 } %.pn, 1
  %storemerge = extractvalue { i64, i64 } %.pn, 0
  store i64 %storemerge, ptr %272, align 8, !tbaa !13
  store i64 %.sink, ptr %.sroa.5.0..sroa_idx, align 8, !tbaa !13
  br label %2518

2518:                                             ; preds = %.sink.split, %.preheader2116
  %.71563 = phi i1 [ false, %.preheader2116 ], [ true, %.sink.split ]
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %276) #10
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(16) %277, ptr noundef nonnull align 8 dereferenceable(16) %272, i64 16, i1 false), !tbaa.struct !62
  %2519 = load i32, ptr %2466, align 8, !tbaa !53
  store i32 %2519, ptr %371, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %276, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %277)
          to label %2520 unwind label %.split4667.split

2520:                                             ; preds = %2518
  %2521 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %265, ptr noundef nonnull align 8 dereferenceable(40) %276)
          to label %.loopexit2161 unwind label %.split4670.split

.split4667.split:                                 ; preds = %2518
  %2522 = landingpad { ptr, i32 }
          cleanup
  br label %2524

.split4670.split:                                 ; preds = %2520
  %2523 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %276) #10
  br label %2524

2524:                                             ; preds = %.split4670.split, %.split4667.split
  %.pn1653 = phi { ptr, i32 } [ %2523, %.split4670.split ], [ %2522, %.split4667.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %276) #10
  br label %2525

2525:                                             ; preds = %2524, %2517, %.split4661.split, %.split4664.split
  %.pn1653.pn = phi { ptr, i32 } [ %.pn1653, %2524 ], [ %.pn1651, %2517 ], [ %2510, %.split4661.split ], [ %2503, %.split4664.split ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %272) #10
  br label %2613

2526:                                             ; preds = %.preheader2120
  %2527 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %265, ptr noundef nonnull align 8 dereferenceable(40) %278)
          to label %..loopexit2042_crit_edge unwind label %.split4566.split

..loopexit2042_crit_edge:                         ; preds = %2526
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %278) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %278) #10
  br label %.thread1993

.split4563.split:                                 ; preds = %.preheader2120
  %2528 = landingpad { ptr, i32 }
          cleanup
  br label %2530

.split4566.split:                                 ; preds = %2526
  %2529 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %278) #10
  br label %2530

2530:                                             ; preds = %.split4566.split, %.split4563.split
  %.pn1649 = phi { ptr, i32 } [ %2529, %.split4566.split ], [ %2528, %.split4563.split ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %278) #10
  br label %2613

2531:                                             ; preds = %2448
  %2532 = call noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  switch i32 %2532, label %.thread1990 [
    i32 0, label %2535
    i32 2, label %2536
    i32 1, label %2538
    i32 3, label %2554
    i32 4, label %2571
    i32 5, label %2573
    i32 6, label %2575
    i32 7, label %2577
    i32 8, label %2579
    i32 9, label %2581
    i32 10, label %2583
  ]

2533:                                             ; preds = %2602, %2600, %2598, %2596, %2594, %2592, %2590, %2587, %.thread1993
  %2534 = landingpad { ptr, i32 }
          cleanup
  br label %2613

2535:                                             ; preds = %2531
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 4414, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2536:                                             ; preds = %2531
  %2537 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2538:                                             ; preds = %2531
  %2539 = call noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %279) #10
  %2540 = invoke { i64, i64 } @_ZNK4S128ngEv(ptr noundef nonnull align 8 dereferenceable(16) %2539)
          to label %2541 unwind label %2549

2541:                                             ; preds = %2538
  %2542 = extractvalue { i64, i64 } %2540, 0
  store i64 %2542, ptr %280, align 8
  %2543 = extractvalue { i64, i64 } %2540, 1
  store i64 %2543, ptr %369, align 8
  %2544 = getelementptr inbounds i8, ptr %2539, i64 16
  %2545 = load i32, ptr %2544, align 8, !tbaa !53
  store i32 %2545, ptr %370, align 8, !tbaa !53
  invoke void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %279, ptr noundef nonnull byval(%"struct.MIR::Constant::Data_Int") align 8 %280)
          to label %2546 unwind label %2549

2546:                                             ; preds = %2541
  %2547 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %265, ptr noundef nonnull align 8 dereferenceable(40) %279)
          to label %2548 unwind label %2551

2548:                                             ; preds = %2546
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %279) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %279) #10
  br label %.thread1993

2549:                                             ; preds = %2541, %2538
  %2550 = landingpad { ptr, i32 }
          cleanup
  br label %2553

2551:                                             ; preds = %2546
  %2552 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %279) #10
  br label %2553

2553:                                             ; preds = %2551, %2549
  %.pn1647 = phi { ptr, i32 } [ %2552, %2551 ], [ %2550, %2549 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %279) #10
  br label %2613

2554:                                             ; preds = %2531
  %2555 = call noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  %2556 = load double, ptr %2555, align 8, !tbaa !50
  %2557 = call noundef zeroext i1 @_ZSt5isnand(double noundef %2556)
  br i1 %2557, label %.thread1990, label %2558

2558:                                             ; preds = %2554
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %281) #10
  %2559 = load double, ptr %2555, align 8, !tbaa !50
  %2560 = fneg double %2559
  %2561 = getelementptr inbounds i8, ptr %2555, i64 8
  %2562 = load i32, ptr %2561, align 8, !tbaa !61
  invoke void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %281, double %2560, i32 %2562)
          to label %2563 unwind label %2566

2563:                                             ; preds = %2558
  %2564 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40) %265, ptr noundef nonnull align 8 dereferenceable(40) %281)
          to label %2565 unwind label %2568

2565:                                             ; preds = %2563
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %281) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %281) #10
  br label %.thread1993

2566:                                             ; preds = %2558
  %2567 = landingpad { ptr, i32 }
          cleanup
  br label %2570

2568:                                             ; preds = %2563
  %2569 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %281) #10
  br label %2570

2570:                                             ; preds = %2568, %2566
  %.pn1645 = phi { ptr, i32 } [ %2569, %2568 ], [ %2567, %2566 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %281) #10
  br label %2613

2571:                                             ; preds = %2531
  %2572 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2573:                                             ; preds = %2531
  %2574 = call noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2575:                                             ; preds = %2531
  %2576 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2577:                                             ; preds = %2531
  %2578 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2579:                                             ; preds = %2531
  %2580 = call noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2581:                                             ; preds = %2531
  %2582 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

2583:                                             ; preds = %2531
  %2584 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %2447)
  br label %.thread1990

.loopexit2161:                                    ; preds = %2520
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %276) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %276) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %272) #10
  br i1 %.71563, label %.thread1993, label %.thread1990

.thread1993:                                      ; preds = %..loopexit2039_crit_edge, %..loopexit2042_crit_edge, %2565, %2548, %.loopexit2161
  %2585 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2586 unwind label %2533

2586:                                             ; preds = %.thread1993
  br i1 %2585, label %2587, label %2604

2587:                                             ; preds = %2586
  %2588 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2589 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2588, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2590 unwind label %2533

2590:                                             ; preds = %2587
  %2591 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2589, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2592 unwind label %2533

2592:                                             ; preds = %2590
  %2593 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2591, ptr noundef nonnull @.str.38)
          to label %2594 unwind label %2533

2594:                                             ; preds = %2592
  %2595 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8) %2593, ptr noundef nonnull align 8 dereferenceable(112) %962)
          to label %2596 unwind label %2533

2596:                                             ; preds = %2594
  %2597 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2595, ptr noundef nonnull @.str.60)
          to label %2598 unwind label %2533

2598:                                             ; preds = %2596
  %2599 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %2597, ptr noundef nonnull align 8 dereferenceable(40) %265)
          to label %2600 unwind label %2533

2600:                                             ; preds = %2598
  %2601 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2599, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2602 unwind label %2533

2602:                                             ; preds = %2600
  %2603 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2601, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2604 unwind label %2533

2604:                                             ; preds = %2602, %2586
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %282) #10
  call void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40) %283, ptr noundef nonnull align 8 dereferenceable(40) %265) #10
  invoke void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112) %282, ptr noundef nonnull %283)
          to label %2605 unwind label %2608

2605:                                             ; preds = %2604
  %2606 = invoke noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112) %962, ptr noundef nonnull align 8 dereferenceable(112) %282)
          to label %2607 unwind label %2610

2607:                                             ; preds = %2605
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %282) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %283) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %282) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %.thread1990

2608:                                             ; preds = %2604
  %2609 = landingpad { ptr, i32 }
          cleanup
  br label %2612

2610:                                             ; preds = %2605
  %2611 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %282) #10
  br label %2612

2612:                                             ; preds = %2610, %2608
  %.pn1662 = phi { ptr, i32 } [ %2611, %2610 ], [ %2609, %2608 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %283) #10
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %282) #10
  br label %2613

.thread1990:                                      ; preds = %..loopexit2039_crit_edge, %.preheader2132, %.preheader2130, %.preheader2128, %.preheader2126, %.preheader2124, %.preheader2122, %.preheader2118, %.lr.ph4885, %2554, %2536, %2571, %2573, %2575, %2577, %2579, %2581, %2583, %2531, %2448, %2607, %.loopexit2161
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %265) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %265) #10
  br label %..loopexit2177_crit_edge

2613:                                             ; preds = %2496, %2525, %2530, %2612, %2570, %2553, %2533
  %.pn1662.pn = phi { ptr, i32 } [ %.pn1662, %2612 ], [ %2534, %2533 ], [ %.pn1645, %2570 ], [ %.pn1647, %2553 ], [ %.pn1649, %2530 ], [ %.pn1653.pn, %2525 ], [ %.pn1658.pn, %2496 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %265) #10
  br label %2614

2614:                                             ; preds = %2613, %2452
  %.pn1662.pn.pn = phi { ptr, i32 } [ %.pn1662.pn, %2613 ], [ %2453, %2452 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %265) #10
  br label %2615

..loopexit2177_crit_edge:                         ; preds = %.thread1990, %2442
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %263) #10
  br label %.loopexit2221

2615:                                             ; preds = %2614, %2450
  %.pn1662.pn.pn.pn = phi { ptr, i32 } [ %.pn1662.pn.pn, %2614 ], [ %2451, %2450 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %263) #10
  br label %2863

.split3704.split:                                 ; preds = %2626, %2625
  %2616 = landingpad { ptr, i32 }
          cleanup
  br label %2863

2617:                                             ; preds = %.preheader2204.split.split
  %2618 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %985)
  %2619 = call noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %2618)
  br i1 %2619, label %2620, label %2625

2620:                                             ; preds = %2617
  %2621 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48) %985)
  %2622 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40) %2621)
  %2623 = call noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8) %2622) #10
  %2624 = icmp eq ptr %2623, null
  br i1 %2624, label %.loopexit2221, label %2625

2625:                                             ; preds = %2620, %2617, %.preheader2204.split.split
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %984)
          to label %2626 unwind label %.split3704.split

2626:                                             ; preds = %2625
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %985)
          to label %.loopexit2221 unwind label %.split3704.split

..loopexit2181_crit_edge:                         ; preds = %2628, %.preheader2206.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %285) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %284) #10
  br label %.loopexit2221

.lr.ph3460:                                       ; preds = %.preheader2206.split.split, %2628
  %2627 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %284) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %2627)
          to label %2628 unwind label %.split3465.split

2628:                                             ; preds = %.lr.ph3460
  %2629 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %284) #10
  %2630 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %284, ptr noundef nonnull align 8 dereferenceable(8) %285) #10
  br i1 %2630, label %.lr.ph3460, label %..loopexit2181_crit_edge

.split3465.split:                                 ; preds = %.lr.ph3460
  %2631 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %285) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %284) #10
  br label %2863

..loopexit2182_crit_edge:                         ; preds = %2633, %.preheader2208.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %287) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %286) #10
  br label %.loopexit2221

.lr.ph3220:                                       ; preds = %.preheader2208.split.split, %2633
  %2632 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %286) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %2632)
          to label %2633 unwind label %.split3225.split

2633:                                             ; preds = %.lr.ph3220
  %2634 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %286) #10
  %2635 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %286, ptr noundef nonnull align 8 dereferenceable(8) %287) #10
  br i1 %2635, label %.lr.ph3220, label %..loopexit2182_crit_edge

.split3225.split:                                 ; preds = %.lr.ph3220
  %2636 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %287) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %286) #10
  br label %2863

.split2993:                                       ; preds = %.preheader2210.split
  %2637 = landingpad { ptr, i32 }
          cleanup
  br label %2863

..loopexit2184_crit_edge:                         ; preds = %2639, %.preheader2212.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %289) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %288) #10
  br label %.loopexit2221

.lr.ph2755:                                       ; preds = %.preheader2212.split.split, %2639
  %2638 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %288) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %2638)
          to label %2639 unwind label %.split2760.split

2639:                                             ; preds = %.lr.ph2755
  %2640 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %288) #10
  %2641 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %288, ptr noundef nonnull align 8 dereferenceable(8) %289) #10
  br i1 %2641, label %.lr.ph2755, label %..loopexit2184_crit_edge

.split2760.split:                                 ; preds = %.lr.ph2755
  %2642 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %289) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %288) #10
  br label %2863

..loopexit2185_crit_edge:                         ; preds = %2644, %.preheader2214.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %291) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %290) #10
  br label %.loopexit2221

.lr.ph2525:                                       ; preds = %.preheader2214.split.split, %2644
  %2643 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %290) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %2643)
          to label %2644 unwind label %.split.split

2644:                                             ; preds = %.lr.ph2525
  %2645 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %290) #10
  %2646 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %290, ptr noundef nonnull align 8 dereferenceable(8) %291) #10
  br i1 %2646, label %.lr.ph2525, label %..loopexit2185_crit_edge

.split.split:                                     ; preds = %.lr.ph2525
  %2647 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %291) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %290) #10
  br label %2863

2648:                                             ; preds = %956
  %2649 = call noundef ptr @_ZN3MIR9Statement15opt_SetDropFlagEv(ptr noundef nonnull align 8 dereferenceable(152) %947)
  %.not1610 = icmp eq ptr %2649, null
  br i1 %.not1610, label %2687, label %2650

2650:                                             ; preds = %2648
  %2651 = getelementptr inbounds i8, ptr %2649, i64 8
  %2652 = load i32, ptr %2651, align 4, !tbaa !66
  %2653 = icmp eq i32 %2652, -1
  br i1 %2653, label %2654, label %2663

2654:                                             ; preds = %2650
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %292) #10
  %2655 = getelementptr inbounds i8, ptr %2649, i64 4
  %2656 = invoke i64 @_ZSt9make_pairIRKjRKbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr noundef nonnull align 4 dereferenceable(4) %2649, ptr noundef nonnull align 1 dereferenceable(1) %2655)
          to label %2657 unwind label %2661

2657:                                             ; preds = %2654
  %2658 = trunc i64 %2656 to i40
  store i40 %2658, ptr %292, align 8
  %2659 = invoke { ptr, i8 } @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE6insertIS2_IjbEEENSt9enable_ifIXsr16is_constructibleIS4_T_EE5valueES2_ISt17_Rb_tree_iteratorIS4_EbEE4typeEOSA_(ptr noundef nonnull align 8 dereferenceable(48) %69, ptr noundef nonnull align 4 dereferenceable(5) %292)
          to label %2660 unwind label %2661

2660:                                             ; preds = %2657
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %292) #10
  br label %.loopexit2221

2661:                                             ; preds = %2657, %2654
  %2662 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %292) #10
  br label %2863

2663:                                             ; preds = %2650
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %293) #10
  %2664 = invoke ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE4findERS3_(ptr noundef nonnull align 8 dereferenceable(48) %69, ptr noundef nonnull align 4 dereferenceable(4) %2651)
          to label %2665 unwind label %2681

2665:                                             ; preds = %2663
  store ptr %2664, ptr %293, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %294) #10
  %2666 = call ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %69) #10
  store ptr %2666, ptr %294, align 8
  %2667 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKjbEES5_(ptr noundef nonnull align 8 dereferenceable(8) %293, ptr noundef nonnull align 8 dereferenceable(8) %294) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %294) #10
  br i1 %2667, label %2668, label %2685

2668:                                             ; preds = %2665
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %295) #10
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %296) #10
  %2669 = getelementptr inbounds i8, ptr %2649, i64 4
  %2670 = load i8, ptr %2669, align 4, !tbaa !68, !range !48, !noundef !49
  %2671 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKjbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %293) #10
  %2672 = getelementptr inbounds i8, ptr %2671, i64 4
  %2673 = load i8, ptr %2672, align 4, !tbaa !69, !range !48, !noundef !49
  %2674 = icmp ne i8 %2670, %2673
  %2675 = zext i1 %2674 to i8
  store i8 %2675, ptr %296, align 1, !tbaa !5
  %2676 = invoke i64 @_ZSt9make_pairIRKjbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr noundef nonnull align 4 dereferenceable(4) %2649, ptr noundef nonnull align 1 dereferenceable(1) %296)
          to label %2677 unwind label %2683

2677:                                             ; preds = %2668
  %2678 = trunc i64 %2676 to i40
  store i40 %2678, ptr %295, align 8
  %2679 = invoke { ptr, i8 } @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE6insertIS2_IjbEEENSt9enable_ifIXsr16is_constructibleIS4_T_EE5valueES2_ISt17_Rb_tree_iteratorIS4_EbEE4typeEOSA_(ptr noundef nonnull align 8 dereferenceable(48) %69, ptr noundef nonnull align 4 dereferenceable(5) %295)
          to label %2680 unwind label %2683

2680:                                             ; preds = %2677
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %296) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %295) #10
  br label %2685

2681:                                             ; preds = %2663
  %2682 = landingpad { ptr, i32 }
          cleanup
  br label %2686

2683:                                             ; preds = %2677, %2668
  %2684 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %296) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %295) #10
  br label %2686

2685:                                             ; preds = %2680, %2665
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %293) #10
  br label %.loopexit2221

2686:                                             ; preds = %2683, %2681
  %.pn1616 = phi { ptr, i32 } [ %2684, %2683 ], [ %2682, %2681 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %293) #10
  br label %2863

2687:                                             ; preds = %2648
  %2688 = call noundef ptr @_ZN3MIR9Statement8opt_DropEv(ptr noundef nonnull align 8 dereferenceable(152) %947)
  %.not1611 = icmp eq ptr %2688, null
  br i1 %.not1611, label %.loopexit2221, label %2689

2689:                                             ; preds = %2687
  %2690 = getelementptr inbounds i8, ptr %2688, i64 40
  %2691 = load i32, ptr %2690, align 8, !tbaa !71
  %.not1612 = icmp eq i32 %2691, -1
  br i1 %.not1612, label %.loopexit2221, label %2692

2692:                                             ; preds = %2689
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %297) #10
  %2693 = invoke ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE4findERS3_(ptr noundef nonnull align 8 dereferenceable(48) %69, ptr noundef nonnull align 4 dereferenceable(4) %2690)
          to label %2694 unwind label %2703

2694:                                             ; preds = %2692
  store ptr %2693, ptr %297, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %298) #10
  %2695 = call ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %69) #10
  store ptr %2695, ptr %298, align 8
  %2696 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKjbEES5_(ptr noundef nonnull align 8 dereferenceable(8) %297, ptr noundef nonnull align 8 dereferenceable(8) %298) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %298) #10
  br i1 %2696, label %2697, label %2714

2697:                                             ; preds = %2694
  %2698 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKjbEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %297) #10
  %2699 = getelementptr inbounds i8, ptr %2698, i64 4
  %2700 = load i8, ptr %2699, align 4, !tbaa !69, !range !48, !noundef !49
  %2701 = trunc nuw i8 %2700 to i1
  br i1 %2701, label %2702, label %2705

2702:                                             ; preds = %2697
  store i32 -1, ptr %2690, align 8, !tbaa !71
  br label %2714

2703:                                             ; preds = %2692
  %2704 = landingpad { ptr, i32 }
          cleanup
  br label %2715

2705:                                             ; preds = %2697
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %299) #10
  call void @llvm.memset.p0.i64(ptr noundef nonnull align 8 dereferenceable(24) %300, i8 0, i64 24, i1 false)
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %300) #10
  invoke void @_ZN3MIR9Statement13make_ScopeEndENS0_13Data_ScopeEndE(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Statement") align 8 %299, ptr noundef nonnull %300)
          to label %2706 unwind label %2709

2706:                                             ; preds = %2705
  %2707 = invoke noundef nonnull align 8 dereferenceable(152) ptr @_ZN3MIR9StatementaSEOS0_(ptr noundef nonnull align 8 dereferenceable(152) %947, ptr noundef nonnull align 8 dereferenceable(152) %299)
          to label %2708 unwind label %2711

2708:                                             ; preds = %2706
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %299) #10
  call void @_ZN3MIR9Statement13Data_ScopeEndD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %300) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %299) #10
  br label %2714

2709:                                             ; preds = %2705
  %2710 = landingpad { ptr, i32 }
          cleanup
  br label %2713

2711:                                             ; preds = %2706
  %2712 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %299) #10
  br label %2713

2713:                                             ; preds = %2711, %2709
  %.pn1613 = phi { ptr, i32 } [ %2712, %2711 ], [ %2710, %2709 ]
  call void @_ZN3MIR9Statement13Data_ScopeEndD2Ev(ptr noundef nonnull align 8 dereferenceable(24) %300) #10
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %299) #10
  br label %2715

2714:                                             ; preds = %2702, %2708, %2694
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %297) #10
  br label %.loopexit2221

2715:                                             ; preds = %2713, %2703
  %.pn1613.pn = phi { ptr, i32 } [ %.pn1613, %2713 ], [ %2704, %2703 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %297) #10
  br label %2863

.loopexit2221:                                    ; preds = %.preheader2210.split, %.preheader2190.split, %.preheader2202.split, %.preheader2200.split, %.preheader2188.split, %..loopexit2177_crit_edge, %1322, %1318, %1324, %1326, %2265, %2436, %..loopexit2175_crit_edge, %2626, %2620, %1032, %1037, %1024, %..loopexit2185_crit_edge, %..loopexit2184_crit_edge, %..loopexit2182_crit_edge, %..loopexit2181_crit_edge, %..loopexit2171_crit_edge, %.lr.ph23181, %2685, %2660, %2689, %2714, %2687
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %302) #10
  store ptr %67, ptr %302, align 8, !tbaa !9
  store ptr %68, ptr %463, align 8, !tbaa !9
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_47vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %301, ptr noundef nonnull align 8 dereferenceable(16) %302) #10
  %2716 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %947, ptr noundef nonnull %301)
          to label %2717 unwind label %2743

2717:                                             ; preds = %.loopexit2221
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %301) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %302) #10
  %2718 = call noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %947)
  %.not1620 = icmp eq ptr %2718, null
  br i1 %.not1620, label %2860, label %2719

2719:                                             ; preds = %2717
  %2720 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %2718)
  br i1 %2720, label %2721, label %2860

2721:                                             ; preds = %2719
  %2722 = getelementptr inbounds i8, ptr %2718, i64 32
  %2723 = call noundef ptr @_ZNK3MIR6RValue12opt_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %2722)
  %.not1621 = icmp eq ptr %2723, null
  br i1 %.not1621, label %2758, label %2724

2724:                                             ; preds = %2721
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %303) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %304) #10
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %304, ptr noundef nonnull align 8 dereferenceable(32) %2718)
          to label %2725 unwind label %2747

2725:                                             ; preds = %2724
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %305) #10
  invoke void @_ZNK3MIR8Constant5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %305, ptr noundef nonnull align 8 dereferenceable(40) %2723)
          to label %2726 unwind label %2749

2726:                                             ; preds = %2725
  invoke void @_ZSt9make_pairIN3MIR6LValueENS0_8ConstantEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.536") align 8 %303, ptr noundef nonnull align 8 dereferenceable(32) %304, ptr noundef nonnull align 8 dereferenceable(40) %305)
          to label %2727 unwind label %2751

2727:                                             ; preds = %2726
  %2728 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE6insertIS5_IS1_S2_EEENSt9enable_ifIXsr16is_constructibleIS7_T_EE5valueES5_ISt17_Rb_tree_iteratorIS7_EbEE4typeEOSD_(ptr noundef nonnull align 8 dereferenceable(48) %67, ptr noundef nonnull align 8 dereferenceable(72) %303)
          to label %2729 unwind label %2753

2729:                                             ; preds = %2727
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %303) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %305) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %305) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %304) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %304) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %303) #10
  %2730 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2731 unwind label %2745

2731:                                             ; preds = %2729
  br i1 %2730, label %2732, label %2860

2732:                                             ; preds = %2731
  %2733 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2734 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2733, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2735 unwind label %2745

2735:                                             ; preds = %2732
  %2736 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2734, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2737 unwind label %2745

2737:                                             ; preds = %2735
  %2738 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %2736, ptr noundef nonnull align 8 dereferenceable(152) %947)
          to label %2739 unwind label %2745

2739:                                             ; preds = %2737
  %2740 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2738, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2741 unwind label %2745

2741:                                             ; preds = %2739
  %2742 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2740, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2860 unwind label %2745

2743:                                             ; preds = %.loopexit2221
  %2744 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %301) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %302) #10
  br label %2863

2745:                                             ; preds = %2741, %2739, %2737, %2735, %2732, %2729
  %2746 = landingpad { ptr, i32 }
          cleanup
  br label %2863

2747:                                             ; preds = %2724
  %2748 = landingpad { ptr, i32 }
          cleanup
  br label %2757

2749:                                             ; preds = %2725
  %2750 = landingpad { ptr, i32 }
          cleanup
  br label %2756

2751:                                             ; preds = %2726
  %2752 = landingpad { ptr, i32 }
          cleanup
  br label %2755

2753:                                             ; preds = %2727
  %2754 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %303) #10
  br label %2755

2755:                                             ; preds = %2753, %2751
  %.pn1639 = phi { ptr, i32 } [ %2754, %2753 ], [ %2752, %2751 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %305) #10
  br label %2756

2756:                                             ; preds = %2755, %2749
  %.pn1639.pn = phi { ptr, i32 } [ %.pn1639, %2755 ], [ %2750, %2749 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %305) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %304) #10
  br label %2757

2757:                                             ; preds = %2756, %2747
  %.pn1639.pn.pn = phi { ptr, i32 } [ %.pn1639.pn, %2756 ], [ %2748, %2747 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %304) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %303) #10
  br label %2863

2758:                                             ; preds = %2721
  %2759 = call noundef ptr @_ZNK3MIR6RValue15opt_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112) %2722)
  %.not1622 = icmp eq ptr %2759, null
  br i1 %.not1622, label %2789, label %2760

2760:                                             ; preds = %2758
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %306) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %307) #10
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %307, ptr noundef nonnull align 8 dereferenceable(32) %2718)
          to label %2761 unwind label %2781

2761:                                             ; preds = %2760
  %2762 = getelementptr inbounds i8, ptr %2759, i64 32
  invoke void @_ZSt9make_pairIN3MIR6LValueERKjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.542") align 8 %306, ptr noundef nonnull align 8 dereferenceable(32) %307, ptr noundef nonnull align 4 dereferenceable(4) %2762)
          to label %2763 unwind label %2783

2763:                                             ; preds = %2761
  %2764 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE6insertIS4_IS1_jEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(36) %306)
          to label %2765 unwind label %2785

2765:                                             ; preds = %2763
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %306) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %307) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %307) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %306) #10
  %2766 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2767 unwind label %2779

2767:                                             ; preds = %2765
  br i1 %2766, label %2768, label %2860

2768:                                             ; preds = %2767
  %2769 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2770 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2769, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2771 unwind label %2779

2771:                                             ; preds = %2768
  %2772 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2770, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2773 unwind label %2779

2773:                                             ; preds = %2771
  %2774 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %2772, ptr noundef nonnull align 8 dereferenceable(152) %947)
          to label %2775 unwind label %2779

2775:                                             ; preds = %2773
  %2776 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2774, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2777 unwind label %2779

2777:                                             ; preds = %2775
  %2778 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2776, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2860 unwind label %2779

2779:                                             ; preds = %2777, %2775, %2773, %2771, %2768, %2765
  %2780 = landingpad { ptr, i32 }
          cleanup
  br label %2863

2781:                                             ; preds = %2760
  %2782 = landingpad { ptr, i32 }
          cleanup
  br label %2788

2783:                                             ; preds = %2761
  %2784 = landingpad { ptr, i32 }
          cleanup
  br label %2787

2785:                                             ; preds = %2763
  %2786 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %306) #10
  br label %2787

2787:                                             ; preds = %2785, %2783
  %.pn1634 = phi { ptr, i32 } [ %2786, %2785 ], [ %2784, %2783 ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %307) #10
  br label %2788

2788:                                             ; preds = %2787, %2781
  %.pn1634.pn = phi { ptr, i32 } [ %.pn1634, %2787 ], [ %2782, %2781 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %307) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %306) #10
  br label %2863

2789:                                             ; preds = %2758
  %2790 = call noundef ptr @_ZNK3MIR6RValue7opt_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %2722)
  %.not1623 = icmp eq ptr %2790, null
  br i1 %.not1623, label %2860, label %2791

2791:                                             ; preds = %2789
  %2792 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %2790)
  br i1 %2792, label %2793, label %2860

2793:                                             ; preds = %2791
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %308) #10
  %2794 = invoke ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48) %67, ptr noundef nonnull align 8 dereferenceable(32) %2790)
          to label %2795 unwind label %2804

2795:                                             ; preds = %2793
  store ptr %2794, ptr %308, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %309) #10
  %2796 = invoke ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(32) %2790)
          to label %2797 unwind label %2806

2797:                                             ; preds = %2795
  store ptr %2796, ptr %309, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %310) #10
  %2798 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  store ptr %2798, ptr %310, align 8
  %2799 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %308, ptr noundef nonnull align 8 dereferenceable(8) %310) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %311) #10
  br i1 %2799, label %2800, label %.critedge1946

2800:                                             ; preds = %2797
  %2801 = call ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %68) #10
  store ptr %2801, ptr %311, align 8
  %2802 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef nonnull align 8 dereferenceable(8) %311) #10
  br i1 %2802, label %2803, label %.critedge1946

2803:                                             ; preds = %2800
  call void @__assert_fail(ptr noundef nonnull @.str.91, ptr noundef nonnull @.str.8, i32 noundef 4524, ptr noundef nonnull @__PRETTY_FUNCTION__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE) #11
  unreachable

2804:                                             ; preds = %2793
  %2805 = landingpad { ptr, i32 }
          cleanup
  br label %2859

2806:                                             ; preds = %.invoke23771, %.invoke23770, %.invoke23769, %.invoke23768, %.invoke23767, %2840, %2817, %2795
  %2807 = landingpad { ptr, i32 }
          cleanup
  br label %2858

.critedge1946:                                    ; preds = %2797, %2800
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %311) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %310) #10
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %312) #10
  %2808 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  store ptr %2808, ptr %312, align 8
  %2809 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %308, ptr noundef nonnull align 8 dereferenceable(8) %312) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %312) #10
  br i1 %2809, label %2810, label %2831

2810:                                             ; preds = %.critedge1946
  call void @llvm.lifetime.start.p0(i64 72, ptr nonnull %313) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %314) #10
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %314, ptr noundef nonnull align 8 dereferenceable(32) %2718)
          to label %2811 unwind label %2820

2811:                                             ; preds = %2810
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %315) #10
  %2812 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %308) #10
  %2813 = getelementptr inbounds i8, ptr %2812, i64 32
  invoke void @_ZNK3MIR8Constant5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Constant") align 8 %315, ptr noundef nonnull align 8 dereferenceable(40) %2813)
          to label %2814 unwind label %2822

2814:                                             ; preds = %2811
  invoke void @_ZSt9make_pairIN3MIR6LValueENS0_8ConstantEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.536") align 8 %313, ptr noundef nonnull align 8 dereferenceable(32) %314, ptr noundef nonnull align 8 dereferenceable(40) %315)
          to label %2815 unwind label %2824

2815:                                             ; preds = %2814
  %2816 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE6insertIS5_IS1_S2_EEENSt9enable_ifIXsr16is_constructibleIS7_T_EE5valueES5_ISt17_Rb_tree_iteratorIS7_EbEE4typeEOSD_(ptr noundef nonnull align 8 dereferenceable(48) %67, ptr noundef nonnull align 8 dereferenceable(72) %313)
          to label %2817 unwind label %2826

2817:                                             ; preds = %2815
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %313) #10
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %315) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %315) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %314) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %313) #10
  %2818 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2819 unwind label %2806

2819:                                             ; preds = %2817
  br i1 %2818, label %.invoke23771, label %2857

2820:                                             ; preds = %2810
  %2821 = landingpad { ptr, i32 }
          cleanup
  br label %2830

2822:                                             ; preds = %2811
  %2823 = landingpad { ptr, i32 }
          cleanup
  br label %2829

2824:                                             ; preds = %2814
  %2825 = landingpad { ptr, i32 }
          cleanup
  br label %2828

2826:                                             ; preds = %2815
  %2827 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72) %313) #10
  br label %2828

2828:                                             ; preds = %2826, %2824
  %.pn1627 = phi { ptr, i32 } [ %2827, %2826 ], [ %2825, %2824 ]
  call void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40) %315) #10
  br label %2829

2829:                                             ; preds = %2828, %2822
  %.pn1627.pn = phi { ptr, i32 } [ %.pn1627, %2828 ], [ %2823, %2822 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %315) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %314) #10
  br label %2830

2830:                                             ; preds = %2829, %2820
  %.pn1627.pn.pn = phi { ptr, i32 } [ %.pn1627.pn, %2829 ], [ %2821, %2820 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %314) #10
  call void @llvm.lifetime.end.p0(i64 72, ptr nonnull %313) #10
  br label %2858

2831:                                             ; preds = %.critedge1946
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %316) #10
  %2832 = call ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %68) #10
  store ptr %2832, ptr %316, align 8
  %2833 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef nonnull align 8 dereferenceable(8) %316) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %316) #10
  br i1 %2833, label %2834, label %2857

2834:                                             ; preds = %2831
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %317) #10
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %318) #10
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %318, ptr noundef nonnull align 8 dereferenceable(32) %2718)
          to label %2835 unwind label %2849

2835:                                             ; preds = %2834
  %2836 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %309) #10
  %2837 = getelementptr inbounds i8, ptr %2836, i64 32
  invoke void @_ZSt9make_pairIN3MIR6LValueERjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.542") align 8 %317, ptr noundef nonnull align 8 dereferenceable(32) %318, ptr noundef nonnull align 4 dereferenceable(4) %2837)
          to label %2838 unwind label %2851

2838:                                             ; preds = %2835
  %2839 = invoke { ptr, i8 } @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE6insertIS4_IS1_jEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(36) %317)
          to label %2840 unwind label %2853

2840:                                             ; preds = %2838
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %317) #10
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #10
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %318) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %317) #10
  %2841 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2842 unwind label %2806

2842:                                             ; preds = %2840
  br i1 %2841, label %.invoke23771, label %2857

.invoke23771:                                     ; preds = %2842, %2819
  %2843 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2844 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2843, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %.invoke23770 unwind label %2806

.invoke23770:                                     ; preds = %.invoke23771
  %2845 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2844, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %.invoke23769 unwind label %2806

.invoke23769:                                     ; preds = %.invoke23770
  %2846 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %2845, ptr noundef nonnull align 8 dereferenceable(152) %947)
          to label %.invoke23768 unwind label %2806

.invoke23768:                                     ; preds = %.invoke23769
  %2847 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2846, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %.invoke23767 unwind label %2806

.invoke23767:                                     ; preds = %.invoke23768
  %2848 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2847, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2857 unwind label %2806

2849:                                             ; preds = %2834
  %2850 = landingpad { ptr, i32 }
          cleanup
  br label %2856

2851:                                             ; preds = %2835
  %2852 = landingpad { ptr, i32 }
          cleanup
  br label %2855

2853:                                             ; preds = %2838
  %2854 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36) %317) #10
  br label %2855

2855:                                             ; preds = %2853, %2851
  %.pn1624 = phi { ptr, i32 } [ %2854, %2853 ], [ %2852, %2851 ]
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %318) #10
  br label %2856

2856:                                             ; preds = %2855, %2849
  %.pn1624.pn = phi { ptr, i32 } [ %.pn1624, %2855 ], [ %2850, %2849 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %318) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %317) #10
  br label %2858

2857:                                             ; preds = %.invoke23767, %2842, %2831, %2819
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %309) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %308) #10
  br label %2860

2858:                                             ; preds = %2856, %2830, %2806
  %.pn1631 = phi { ptr, i32 } [ %2807, %2806 ], [ %.pn1627.pn.pn, %2830 ], [ %.pn1624.pn, %2856 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %309) #10
  br label %2859

2859:                                             ; preds = %2858, %2804
  %.pn1631.pn = phi { ptr, i32 } [ %.pn1631, %2858 ], [ %2805, %2804 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %308) #10
  br label %2863

2860:                                             ; preds = %2741, %2731, %2857, %2791, %2789, %2767, %2777, %2719, %2717
  %2861 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %73) #10
  %2862 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %73, ptr noundef nonnull align 8 dereferenceable(8) %74) #10
  br i1 %2862, label %.lr.ph23184, label %._crit_edge23185

2863:                                             ; preds = %2745, %2757, %2859, %2788, %2779, %1311, %2267, %2438, %.split21237.split, %1031, %.split.split, %.split2760.split, %.split2993, %.split3225.split, %.split3465.split, %.split3704.split, %2615, %1307, %.split21905, %1010, %2715, %2686, %2661, %2743, %960, %958
  %.pn1861.pn.pn = phi { ptr, i32 } [ %2744, %2743 ], [ %961, %960 ], [ %959, %958 ], [ %2647, %.split.split ], [ %2642, %.split2760.split ], [ %2637, %.split2993 ], [ %2636, %.split3225.split ], [ %2631, %.split3465.split ], [ %2616, %.split3704.split ], [ %.pn1662.pn.pn.pn, %2615 ], [ %.pn1848.pn.pn.pn, %1307 ], [ %1011, %.split21905 ], [ %.pn1858.pn, %1010 ], [ %.pn1853.pn.pn, %1031 ], [ %1012, %.split21237.split ], [ %.pn1798.pn.pn, %2267 ], [ %.pn1680.pn.pn.pn, %2438 ], [ %1312, %1311 ], [ %2662, %2661 ], [ %.pn1616, %2686 ], [ %.pn1613.pn, %2715 ], [ %2746, %2745 ], [ %.pn1639.pn.pn, %2757 ], [ %2780, %2779 ], [ %.pn1634.pn, %2788 ], [ %.pn1631.pn, %2859 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %74) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %73) #10
  br label %3016

2864:                                             ; preds = %._crit_edge23185
  %2865 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR10TerminatorESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168) %946, ptr noundef nonnull %319)
          to label %2866 unwind label %2873

2866:                                             ; preds = %2864
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #10
  %2867 = call noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %946)
  switch i32 %2867, label %.loopexit2223 [
    i32 0, label %2875
    i32 7, label %.lr.ph23218
    i32 6, label %.lr.ph23215
    i32 9, label %.preheader2226.split.split
  ]

.preheader2226.split.split:                       ; preds = %2866
  %2868 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %946)
  %2869 = getelementptr inbounds i8, ptr %2868, i64 136
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %330) #10
  %2870 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %2869) #10
  store ptr %2870, ptr %330, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %331) #10
  %2871 = call ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %2869) #10
  store ptr %2871, ptr %331, align 8
  %2872 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %330, ptr noundef nonnull align 8 dereferenceable(8) %331) #10
  br i1 %2872, label %.lr.ph23187, label %..loopexit2219_crit_edge

.loopexit2228:                                    ; preds = %._crit_edge23185
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %3016

.loopexit.split-lp:                               ; preds = %2875
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %3016

2873:                                             ; preds = %2864
  %2874 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %319) #10
  br label %3016

2875:                                             ; preds = %2866
  %2876 = call ptr @__cxa_allocate_exception(i64 8) #10
  store ptr @.str.11, ptr %2876, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %2876, ptr nonnull @_ZTIPKc, ptr null) #12
          to label %3099 unwind label %.loopexit.split-lp

.lr.ph23218:                                      ; preds = %2866
  %2877 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR10Terminator9as_SwitchEv(ptr noundef nonnull align 8 dereferenceable(168) %946)
  %2878 = getelementptr inbounds i8, ptr %2877, i64 32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %320) #10
  %2879 = invoke ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48) %68, ptr noundef nonnull align 8 dereferenceable(32) %2877)
          to label %2880 unwind label %2892

2880:                                             ; preds = %.lr.ph23218
  store ptr %2879, ptr %320, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %321) #10
  %2881 = call ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %68) #10
  store ptr %2881, ptr %321, align 8
  %2882 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8) %320, ptr noundef nonnull align 8 dereferenceable(8) %321) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %321) #10
  br i1 %2882, label %2883, label %..loopexit2217_crit_edge

2883:                                             ; preds = %2880
  %2884 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %320) #10
  %2885 = getelementptr inbounds i8, ptr %2884, i64 32
  %2886 = load i32, ptr %2885, align 8, !tbaa !74
  %2887 = zext i32 %2886 to i64
  %2888 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %2878) #10
  %2889 = icmp ugt i64 %2888, %2887
  br i1 %2889, label %2896, label %2890

2890:                                             ; preds = %2883
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %323) #10
  store ptr %320, ptr %323, align 8, !tbaa !9
  store ptr %936, ptr %464, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_48vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %322, ptr noundef nonnull align 8 dereferenceable(16) %323) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %322)
          to label %2891 unwind label %2894

2891:                                             ; preds = %2890
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %323) #10
  br label %2896

2892:                                             ; preds = %.lr.ph23218
  %2893 = landingpad { ptr, i32 }
          cleanup
  br label %2941

2894:                                             ; preds = %2890
  %2895 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %322) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %323) #10
  br label %2941

2896:                                             ; preds = %2891, %2883
  %2897 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %320) #10
  %2898 = getelementptr inbounds i8, ptr %2897, i64 32
  %2899 = load i32, ptr %2898, align 8, !tbaa !74
  %2900 = zext i32 %2899 to i64
  %2901 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %2878, i64 noundef %2900)
          to label %2902 unwind label %2930

2902:                                             ; preds = %2896
  %2903 = load i32, ptr %2901, align 4, !tbaa !11
  %2904 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2905 unwind label %2930

2905:                                             ; preds = %2902
  br i1 %2904, label %2906, label %2932

2906:                                             ; preds = %2905
  %2907 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2908 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2907, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2909 unwind label %2930

2909:                                             ; preds = %2906
  %2910 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2908, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2911 unwind label %2930

2911:                                             ; preds = %2909
  %2912 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2910, ptr noundef nonnull @.str.92)
          to label %2913 unwind label %2930

2913:                                             ; preds = %2911
  %2914 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %2912, ptr noundef nonnull align 8 dereferenceable(168) %946)
          to label %2915 unwind label %2930

2915:                                             ; preds = %2913
  %2916 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2914, ptr noundef nonnull @.str.93)
          to label %2917 unwind label %2930

2917:                                             ; preds = %2915
  %2918 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %2916, i32 noundef %2903)
          to label %2919 unwind label %2930

2919:                                             ; preds = %2917
  %2920 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2918, ptr noundef nonnull @.str.94)
          to label %2921 unwind label %2930

2921:                                             ; preds = %2919
  %2922 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %320) #10
  %2923 = getelementptr inbounds i8, ptr %2922, i64 32
  %2924 = load i32, ptr %2923, align 8, !tbaa !74
  %2925 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %2920, i32 noundef %2924)
          to label %2926 unwind label %2930

2926:                                             ; preds = %2921
  %2927 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2925, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2928 unwind label %2930

2928:                                             ; preds = %2926
  %2929 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2927, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2932 unwind label %2930

2930:                                             ; preds = %2928, %2926, %2921, %2919, %2917, %2915, %2913, %2911, %2909, %2906, %2902, %2896
  %2931 = landingpad { ptr, i32 }
          cleanup
  br label %2941

2932:                                             ; preds = %2928, %2905
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %324) #10
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %324, i32 noundef %2903)
          to label %2933 unwind label %2936

2933:                                             ; preds = %2932
  %2934 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %946, ptr noundef nonnull align 8 dereferenceable(168) %324)
          to label %2935 unwind label %2938

2935:                                             ; preds = %2933
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %324) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %324) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %..loopexit2217_crit_edge

2936:                                             ; preds = %2932
  %2937 = landingpad { ptr, i32 }
          cleanup
  br label %2940

2938:                                             ; preds = %2933
  %2939 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %324) #10
  br label %2940

2940:                                             ; preds = %2938, %2936
  %.pn1605 = phi { ptr, i32 } [ %2939, %2938 ], [ %2937, %2936 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %324) #10
  br label %2941

..loopexit2217_crit_edge:                         ; preds = %2935, %2880
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %320) #10
  br label %.loopexit2223

2941:                                             ; preds = %2930, %2940, %2894, %2892
  %.pn1605.pn.pn = phi { ptr, i32 } [ %2895, %2894 ], [ %2893, %2892 ], [ %.pn1605, %2940 ], [ %2931, %2930 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %320) #10
  br label %3016

.lr.ph23215:                                      ; preds = %2866
  %2942 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %946)
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %325) #10
  %2943 = invoke ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48) %67, ptr noundef nonnull align 8 dereferenceable(32) %2942)
          to label %2944 unwind label %2955

2944:                                             ; preds = %.lr.ph23215
  store ptr %2943, ptr %325, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %326) #10
  %2945 = call ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  store ptr %2945, ptr %326, align 8
  %2946 = call noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8) %325, ptr noundef nonnull align 8 dereferenceable(8) %326) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %326) #10
  br i1 %2946, label %2947, label %..loopexit2218_crit_edge

2947:                                             ; preds = %2944
  %2948 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %325) #10
  %2949 = getelementptr inbounds i8, ptr %2948, i64 32
  %2950 = call noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40) %2949)
  br i1 %2950, label %..loopexit2218_crit_edge, label %2951

2951:                                             ; preds = %2947
  %2952 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %325) #10
  %2953 = getelementptr inbounds i8, ptr %2952, i64 32
  %2954 = call noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40) %2953)
  br i1 %2954, label %..loopexit2218_crit_edge, label %2957

2955:                                             ; preds = %.lr.ph23215
  %2956 = landingpad { ptr, i32 }
          cleanup
  br label %3008

2957:                                             ; preds = %2951
  %2958 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %325) #10
  %2959 = getelementptr inbounds i8, ptr %2958, i64 32
  %2960 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %2959)
  br i1 %2960, label %2965, label %2961

2961:                                             ; preds = %2957
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %328) #10
  store ptr %325, ptr %328, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_49vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %327, ptr noundef nonnull align 8 dereferenceable(8) %328) #10
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %327)
          to label %2962 unwind label %2963

2962:                                             ; preds = %2961
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %328) #10
  br label %2965

2963:                                             ; preds = %2961
  %2964 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %327) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %328) #10
  br label %3008

2965:                                             ; preds = %2962, %2957
  %2966 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %325) #10
  %2967 = getelementptr inbounds i8, ptr %2966, i64 32
  %2968 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZN3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %2967)
  %2969 = load i8, ptr %2968, align 1, !tbaa !46, !range !48, !noundef !49
  %2970 = trunc nuw i8 %2969 to i1
  %.in1600.v = select i1 %2970, i64 32, i64 36
  %.in1600 = getelementptr inbounds i8, ptr %2942, i64 %.in1600.v
  %2971 = load i32, ptr %.in1600, align 4, !tbaa !11
  %2972 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2973 unwind label %2997

2973:                                             ; preds = %2965
  br i1 %2972, label %2974, label %2999

2974:                                             ; preds = %2973
  %2975 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %2976 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2975, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2977 unwind label %2997

2977:                                             ; preds = %2974
  %2978 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2976, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %2979 unwind label %2997

2979:                                             ; preds = %2977
  %2980 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2978, ptr noundef nonnull @.str.92)
          to label %2981 unwind label %2997

2981:                                             ; preds = %2979
  %2982 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %2980, ptr noundef nonnull align 8 dereferenceable(168) %946)
          to label %2983 unwind label %2997

2983:                                             ; preds = %2981
  %2984 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2982, ptr noundef nonnull @.str.93)
          to label %2985 unwind label %2997

2985:                                             ; preds = %2983
  %2986 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %2984, i32 noundef %2971)
          to label %2987 unwind label %2997

2987:                                             ; preds = %2985
  %2988 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2986, ptr noundef nonnull @.str.95)
          to label %2989 unwind label %2997

2989:                                             ; preds = %2987
  %2990 = call noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %325) #10
  %2991 = getelementptr inbounds i8, ptr %2990, i64 32
  %2992 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8) %2988, ptr noundef nonnull align 8 dereferenceable(40) %2991)
          to label %2993 unwind label %2997

2993:                                             ; preds = %2989
  %2994 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2992, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %2995 unwind label %2997

2995:                                             ; preds = %2993
  %2996 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2994, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2999 unwind label %2997

2997:                                             ; preds = %2995, %2993, %2989, %2987, %2985, %2983, %2981, %2979, %2977, %2974, %2965
  %2998 = landingpad { ptr, i32 }
          cleanup
  br label %3008

2999:                                             ; preds = %2995, %2973
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %329) #10
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %329, i32 noundef %2971)
          to label %3000 unwind label %3003

3000:                                             ; preds = %2999
  %3001 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %946, ptr noundef nonnull align 8 dereferenceable(168) %329)
          to label %3002 unwind label %3005

3002:                                             ; preds = %3000
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %329) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %329) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %..loopexit2218_crit_edge

3003:                                             ; preds = %2999
  %3004 = landingpad { ptr, i32 }
          cleanup
  br label %3007

3005:                                             ; preds = %3000
  %3006 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %329) #10
  br label %3007

3007:                                             ; preds = %3005, %3003
  %.pn1601 = phi { ptr, i32 } [ %3006, %3005 ], [ %3004, %3003 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %329) #10
  br label %3008

..loopexit2218_crit_edge:                         ; preds = %3002, %2951, %2947, %2944
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %325) #10
  br label %.loopexit2223

3008:                                             ; preds = %2997, %3007, %2963, %2955
  %.pn1601.pn.pn = phi { ptr, i32 } [ %2964, %2963 ], [ %2956, %2955 ], [ %.pn1601, %3007 ], [ %2998, %2997 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %325) #10
  br label %3016

..loopexit2219_crit_edge:                         ; preds = %3010, %.preheader2226.split.split
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %331) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %330) #10
  br label %.loopexit2223

.lr.ph23187:                                      ; preds = %.preheader2226.split.split, %3010
  %3009 = call noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %330) #10
  invoke void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16) %71, ptr noundef nonnull align 8 dereferenceable(48) %3009)
          to label %3010 unwind label %.split23192.split

3010:                                             ; preds = %.lr.ph23187
  %3011 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %330) #10
  %3012 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %330, ptr noundef nonnull align 8 dereferenceable(8) %331) #10
  br i1 %3012, label %.lr.ph23187, label %..loopexit2219_crit_edge

.split23192.split:                                ; preds = %.lr.ph23187
  %3013 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %331) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %330) #10
  br label %3016

.loopexit2223:                                    ; preds = %..loopexit2218_crit_edge, %..loopexit2217_crit_edge, %..loopexit2219_crit_edge, %2866
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %72) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %71) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #10
  call void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %69) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %69) #10
  call void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %68) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %68) #10
  call void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %67) #10
  %3014 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %65) #10
  %3015 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %65, ptr noundef nonnull align 8 dereferenceable(8) %66) #10
  br i1 %3015, label %935, label %._crit_edge23222

3016:                                             ; preds = %.loopexit2228, %.loopexit.split-lp, %.split23192.split, %3008, %2941, %2873, %2863
  %.pn1861.pn.pn.pn = phi { ptr, i32 } [ %.pn1861.pn.pn, %2863 ], [ %3013, %.split23192.split ], [ %.pn1601.pn.pn, %3008 ], [ %.pn1605.pn.pn, %2941 ], [ %2874, %2873 ], [ %lpad.loopexit, %.loopexit2228 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %72) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %71) #10
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %70) #10
  call void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %69) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %69) #10
  call void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %68) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %68) #10
  call void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %67) #10
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %67) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #10
  br label %3097

._crit_edge23231:                                 ; preds = %3093, %._crit_edge23222
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %333) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %332) #10
  %3017 = load i8, ptr %3, align 1, !tbaa !5, !range !48, !noundef !49
  %3018 = trunc nuw i8 %3017 to i1
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #10
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #10
  ret i1 %3018

.lr.ph23230:                                      ; preds = %._crit_edge23222, %3093
  %3019 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %332) #10
  %3020 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %344) #10
  %3021 = ptrtoint ptr %3019 to i64
  %3022 = ptrtoint ptr %3020 to i64
  %3023 = sub i64 %3021, %3022
  %3024 = sdiv exact i64 %3023, 192
  %3025 = getelementptr inbounds i8, ptr %3019, i64 24
  %3026 = call noundef zeroext i1 @_ZNK3MIR10Terminator5is_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %3025)
  br i1 %3026, label %3027, label %3093

3027:                                             ; preds = %.lr.ph23230
  %3028 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %3025)
  %3029 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %3028)
  br i1 %3029, label %3030, label %3093

3030:                                             ; preds = %3027
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %334) #10
  store ptr %3028, ptr %334, align 8, !tbaa !9
  %3031 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %3019) #10
  %3032 = trunc i64 %3031 to i32
  %.not23223 = icmp eq i32 %3032, 0
  br i1 %.not23223, label %.thread1996.thread, label %.lr.ph23225

.lr.ph23225:                                      ; preds = %3030, %.lr.ph23225.backedge
  %.in23233 = phi i32 [ %3033, %.lr.ph23225.backedge ], [ %3032, %3030 ]
  %3033 = add i32 %.in23233, -1
  %3034 = zext i32 %3033 to i64
  %3035 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3019, i64 noundef %3034) #10
  %3036 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %3035)
  %3037 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %3019, i64 noundef %3034) #10
  br i1 %3036, label %3038, label %3059

3038:                                             ; preds = %.lr.ph23225
  %3039 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %3037)
  %3040 = getelementptr inbounds i8, ptr %3039, i64 32
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_50vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %335, ptr noundef nonnull align 8 dereferenceable(8) %334) #10
  %3041 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR6RValueESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112) %3040, ptr noundef nonnull %335)
          to label %3042 unwind label %3045

3042:                                             ; preds = %3038
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #10
  br i1 %3041, label %.thread1996.thread, label %3047

3043:                                             ; preds = %3047
  %3044 = landingpad { ptr, i32 }
          cleanup
  br label %3096

3045:                                             ; preds = %3038
  %3046 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %335) #10
  br label %3096

3047:                                             ; preds = %3042
  %3048 = invoke noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %3039, ptr noundef nonnull align 8 dereferenceable(32) %3028)
          to label %3049 unwind label %3043

3049:                                             ; preds = %3047
  br i1 %3048, label %.backedge, label %3050

3050:                                             ; preds = %3049
  %3051 = call noundef zeroext i1 @_ZNK3MIR6RValue11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %3040)
  br i1 %3051, label %3052, label %.thread1996.thread

3052:                                             ; preds = %3050
  %3053 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %3040)
  %3054 = call noundef zeroext i1 @_ZNK3MIR8Constant7is_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %3053)
  br i1 %3054, label %.thread1996.thread2003, label %.thread1996.thread

.thread1996.thread2003:                           ; preds = %3052
  %3055 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112) %3040)
  %3056 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40) %3055)
  %3057 = load i8, ptr %3056, align 1, !tbaa !46, !range !48, !noundef !49
  %3058 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %3064 unwind label %3081

3059:                                             ; preds = %.lr.ph23225
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_50vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %336, ptr noundef nonnull align 8 dereferenceable(8) %334) #10
  %3060 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %3037, ptr noundef nonnull %336)
          to label %3061 unwind label %3062

3061:                                             ; preds = %3059
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %336) #10
  %.not = icmp eq i32 %3033, 0
  %or.cond23232 = or i1 %3060, %.not
  br i1 %or.cond23232, label %.thread1996.thread, label %.lr.ph23225.backedge

.backedge:                                        ; preds = %3049
  %.not.old = icmp eq i32 %3033, 0
  br i1 %.not.old, label %.thread1996.thread, label %.lr.ph23225.backedge

.lr.ph23225.backedge:                             ; preds = %.backedge, %3061
  br label %.lr.ph23225, !llvm.loop !76

3062:                                             ; preds = %3059
  %3063 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %336) #10
  br label %3096

3064:                                             ; preds = %.thread1996.thread2003
  br i1 %3058, label %3065, label %._crit_edge23509

._crit_edge23509:                                 ; preds = %3064
  %.pre23511 = trunc nuw i8 %3057 to i1
  br label %3083

3065:                                             ; preds = %3064
  %3066 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !11
  %3067 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %3066, ptr noundef nonnull @__func__._Z27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionE)
          to label %3068 unwind label %3081

3068:                                             ; preds = %3065
  %3069 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %3067, ptr noundef nonnull @.str.96)
          to label %3070 unwind label %3081

3070:                                             ; preds = %3068
  %3071 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8) %3069, i64 noundef %3024)
          to label %3072 unwind label %3081

3072:                                             ; preds = %3070
  %3073 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %3071, ptr noundef nonnull @.str.97)
          to label %3074 unwind label %3081

3074:                                             ; preds = %3072
  %3075 = trunc nuw i8 %3057 to i1
  %3076 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEb(ptr noundef nonnull align 8 dereferenceable(8) %3073, i1 noundef zeroext %3075)
          to label %3077 unwind label %3081

3077:                                             ; preds = %3074
  %3078 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %3076, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %3079 unwind label %3081

3079:                                             ; preds = %3077
  %3080 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %3078, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %3083 unwind label %3081

3081:                                             ; preds = %3079, %3077, %3074, %3072, %3070, %3068, %3065, %.thread1996.thread2003
  %3082 = landingpad { ptr, i32 }
          cleanup
  br label %3096

3083:                                             ; preds = %._crit_edge23509, %3079
  %.pre-phi23512 = phi i1 [ %.pre23511, %._crit_edge23509 ], [ %3075, %3079 ]
  call void @llvm.lifetime.start.p0(i64 168, ptr nonnull %337) #10
  %.in.v = select i1 %.pre-phi23512, i64 32, i64 36
  %.in = getelementptr inbounds i8, ptr %3028, i64 %.in.v
  %3084 = load i32, ptr %.in, align 4, !tbaa !11
  invoke void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind nonnull writable sret(%"class.MIR::Terminator") align 8 %337, i32 noundef %3084)
          to label %3085 unwind label %3088

3085:                                             ; preds = %3083
  %3086 = invoke noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168) %3025, ptr noundef nonnull align 8 dereferenceable(168) %337)
          to label %3087 unwind label %3090

3087:                                             ; preds = %3085
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %337) #10
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %337) #10
  store i8 1, ptr %3, align 1, !tbaa !5
  br label %.thread1996.thread

3088:                                             ; preds = %3083
  %3089 = landingpad { ptr, i32 }
          cleanup
  br label %3092

3090:                                             ; preds = %3085
  %3091 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168) %337) #10
  br label %3092

3092:                                             ; preds = %3090, %3088
  %.pn1597 = phi { ptr, i32 } [ %3091, %3090 ], [ %3089, %3088 ]
  call void @llvm.lifetime.end.p0(i64 168, ptr nonnull %337) #10
  br label %3096

.thread1996.thread:                               ; preds = %3042, %3061, %.backedge, %3030, %3052, %3050, %3087
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %334) #10
  br label %3093

3093:                                             ; preds = %.thread1996.thread, %3027, %.lr.ph23230
  %3094 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %332) #10
  %3095 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %332, ptr noundef nonnull align 8 dereferenceable(8) %333) #10
  br i1 %3095, label %.lr.ph23230, label %._crit_edge23231

3096:                                             ; preds = %3062, %3045, %3043, %3092, %3081
  %.pn1597.pn = phi { ptr, i32 } [ %.pn1597, %3092 ], [ %3082, %3081 ], [ %3063, %3062 ], [ %3044, %3043 ], [ %3046, %3045 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %334) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %333) #10
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %332) #10
  br label %3097

3097:                                             ; preds = %3096, %3016, %931
  %.pn1932.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1932.pn.pn.pn.pn.pn, %931 ], [ %.pn1861.pn.pn.pn, %3016 ], [ %.pn1597.pn, %3096 ]
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #10
  br label %3098

3098:                                             ; preds = %3097, %465
  %.pn1932.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn1932.pn.pn.pn.pn.pn.pn, %3097 ], [ %466, %465 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #10
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #10
  resume { ptr, i32 } %.pn1932.pn.pn.pn.pn.pn.pn.pn

3099:                                             ; preds = %2875, %2511, %2482, %.split5918, %2173, %2107, %1257, %1182
  unreachable
}

declare void @_Z12MIR_Dump_FcnRSoRKN3MIR8FunctionEj(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(96), i32 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR10Terminator9as_SwitchEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #6

declare noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef, ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEl(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(216) ptr @_ZSt3decRSt8ios_base(ptr noundef nonnull align 8 dereferenceable(216)) #6

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_(ptr noundef nonnull align 8 dereferenceable(8)) #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #8

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(168) ptr @_ZN3MIR10TerminatoraSEOS0_(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR10TerminatorD2Ev(ptr noundef nonnull align 8 dereferenceable(168)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIN3MIR9StatementESaIS1_EE9push_backEOS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120), i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #1

declare ptr @__cxa_allocate_exception(i64) local_unnamed_addr

declare void @__cxa_throw(ptr, ptr, ptr) local_unnamed_addr

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3HIR7TypeRefC2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #6 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR11TypeResolve15get_lvalue_typeERN3HIR7TypeRefERKNS_6LValueEj(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32), i32 noundef) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3HIR7TypeRefD2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR5Param9is_LValueEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR5ParamD2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_5ParamE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR5Param11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR5Param9as_LValueEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR8ConstantC2EOS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValueC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZN3MIR6LValueC2EOS0_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValueC2ENS_6LValueE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR8ConstantD2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR9Statement11make_AssignENS0_11Data_AssignE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Statement") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9Statement11Data_AssignD2Ev(ptr noundef nonnull align 8 dereferenceable(144)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR5ParamESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR10Terminator9make_GotoEj(ptr dead_on_unwind noalias writable sret(%"class.MIR::Terminator") align 8, i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind noalias writable sret(%"struct.MIR::LValue") align 8, ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZN3MIR9StatementaSEOS0_(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEb(ptr noundef nonnull align 8 dereferenceable(8), i1 noundef zeroext) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR10TerminatorESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(184) ptr @_ZNK3HIR7TypeRef4dataEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120), i32 noundef, i32 noundef) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZlsRSoRK9FmtLambda(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #9

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR11TypeResolve17set_cur_stmt_termERKNS_10BasicBlockE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(192)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10CallTarget12is_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR10CallTarget12as_IntrinsicEv(ptr noundef nonnull align 8 dereferenceable(96)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK8RcStringeqEPKc(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #2 align 2

declare noundef zeroext i1 @_Z16Target_GetSizeOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK10ThinVectorIN3HIR7TypeRefEE2atEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant9make_UintENS0_9Data_UintE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef byval(%"struct.MIR::Constant::Data_Uint") align 8) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4U128C2Emm(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef, i64 noundef) unnamed_addr #5 align 2

declare noundef zeroext i1 @_Z24Target_GetSizeAndAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERmS9_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

declare noundef zeroext i1 @_Z17Target_GetAlignOfRK4SpanRK18StaticTraitResolveRKN3HIR7TypeRefERm(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

declare noundef zeroext i1 @_ZNK3HIR7TypeRefeqERKNS_8CoreTypeE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZNSt6vectorIN3MIR5ParamESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR5Param10opt_LValueEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValue12make_DstMetaENS0_12Data_DstMetaE(ptr dead_on_unwind noalias writable sret(%"class.MIR::RValue") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR6RValue12Data_DstMetaD2Ev(ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

declare noundef zeroext i1 @_Z13visit_ty_withRKN3HIR7TypeRefESt8functionIFbS2_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbRKN3HIR7TypeRefEEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS7_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

declare noundef zeroext i1 @_ZNK18StaticTraitResolve20type_needs_drop_glueERK4SpanRKN3HIR7TypeRefE(ptr noundef nonnull align 8 dereferenceable(424), ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #1

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR6RValue13make_ConstantENS_8ConstantE(ptr dead_on_unwind noalias writable sret(%"class.MIR::RValue") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant9make_BoolENS0_9Data_BoolE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, i8) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK3$_5clERKNS_6LValueE"(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant11is_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EEcvbEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZN3MIR6RValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(80) ptr @_ZN3MIR6RValue13as_SizedArrayEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden void @"_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEENK4$_51clERNS_5ParamE"(ptr noundef nonnull align 8 dereferenceable(16), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant13make_ItemAddrESt10unique_ptrIN3HIR4PathESt14default_deleteIS3_EE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_Z15make_unique_ptrIN3HIR4PathEESt10unique_ptrIT_St14default_deleteIS3_EEOS3_(ptr dead_on_unwind noalias writable sret(%"class.std::unique_ptr.157") align 8, ptr noundef nonnull align 8 dereferenceable(88)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6LValue7Storage9as_StaticEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE5eraseERS6_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5eraseERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR6RValue7as_CastEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8ConstantC2Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3HIR8TypeData13opt_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant8opt_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_uEN3HIR8CoreTypeE4U128(i32 noundef, i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR8ConstantaSEOS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant7opt_IntEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local { i64, i64 } @_ZNK4S1289get_innerEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant8opt_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR8Constant9opt_FloatEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant8make_IntENS0_8Data_IntE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, ptr noundef byval(%"struct.MIR::Constant::Data_Int") align 8) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden { i64, i64 } @_ZZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS_8FunctionEEN1H10truncate_sEN3HIR8CoreTypeE4S128(i32 noundef, i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4S128C2E4U128(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN4S128C2El(ptr noundef nonnull align 8 dereferenceable(16), i64 noundef) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef i64 @_ZNKSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE5countERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE2atERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3HIR8TypeData12is_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(112) ptr @_ZNK3HIR8TypeData7as_PathEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3HIR15TypePathBinding7as_EnumEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #5 align 2

declare noundef zeroext i1 @_ZNK3HIR4Enum8is_valueEv(ptr noundef nonnull align 8 dereferenceable(200)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

declare noundef i32 @_ZNK3HIR4Enum9get_valueEm(ptr noundef nonnull align 8 dereferenceable(200), i64 noundef) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3HIR8TypeData12as_PrimitiveEv(ptr noundef nonnull align 8 dereferenceable(184)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_10vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantneERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #6 align 2

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6RValueE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #1

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(104) ptr @_ZN3MIR6RValue8as_BinOpEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant8is_ConstEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant10is_GenericEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant8is_FloatEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstanteqERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantltERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantleERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantgtERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #6 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8ConstantgeERKS0_(ptr noundef nonnull align 8 dereferenceable(40), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR8Constant3tagEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(16) ptr @_ZNK3MIR8Constant8as_FloatEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR8Constant10make_FloatENS0_10Data_FloatE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Constant") align 8, double, i32) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant6as_IntEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_13vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128plES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(20) ptr @_ZNK3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_14vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128plES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_15vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_16vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_17vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128miES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_18vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128miES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_19vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_20vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_21vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128mlES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_22vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128mlES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_23vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_24vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_25vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4S128eqEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128dvES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_26vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4U128eqEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128dvES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_27vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_28vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4S128neEi(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_29vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128rmES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_30vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4U128neEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_31vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128rmES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_32vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_33vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128anES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_34vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128anES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_35vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_36vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128orES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_37vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128orES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_38vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_39vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128eoES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_40vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128eoES_(ptr noundef nonnull align 8 dereferenceable(16), i64, i64) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN4U128C2Ev(ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_41vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK4U128leEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_42vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNK4U12812truncate_u64Ev(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128lsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128lsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_43vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_44vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128rsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128rsEj(ptr noundef nonnull align 8 dereferenceable(16), i32 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR5ParamC2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant7is_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(20) ptr @_ZN3MIR8Constant7as_UintEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(48) ptr @_ZN3MIR5ParamaSEOS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR5ParamC2ENS_8ConstantE(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef) unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR5ParamneERKS0_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR5Param3tagEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR5Param9as_BorrowEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(36) ptr @_ZN3MIR6RValue8as_UniOpEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE4findERS6_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEES8_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueENS1_8ConstantEEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4U128coEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_45vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128coEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_46vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZNK3MIR8Constant8as_BytesEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR8Constant15as_StaticStringB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant8as_ConstEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(12) ptr @_ZNK3MIR8Constant10as_GenericEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_FunctionEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK3MIR8Constant11as_ItemAddrEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { i64, i64 } @_ZNK4S128ngEv(ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZSt5isnand(double noundef) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue10as_DstMetaEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue9as_DstPtrEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(96) ptr @_ZN3MIR6RValue10as_MakeDstEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt10unique_ptrIN3HIR4PathESt14default_deleteIS1_EE3getEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_TupleEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(24) ptr @_ZN3MIR6RValue8as_ArrayEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(88) ptr @_ZN3MIR6RValue15as_UnionVariantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(64) ptr @_ZN3MIR6RValue14as_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN3MIR6RValue9as_StructEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR9Statement15opt_SetDropFlagEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE6insertIS2_IjbEEENSt9enable_ifIXsr16is_constructibleIS4_T_EE5valueES2_ISt17_Rb_tree_iteratorIS4_EbEE4typeEOSA_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(5)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRKjRKbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE4findERS3_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKjbEES5_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local i64 @_ZSt9make_pairIRKjbESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS3_INS4_IT0_E4typeEE6__typeEEOS5_OSA_(ptr noundef nonnull align 4 dereferenceable(4), ptr noundef nonnull align 1 dereferenceable(1)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKjbEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZN3MIR9Statement8opt_DropEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR9Statement13make_ScopeEndENS0_13Data_ScopeEndE(ptr dead_on_unwind noalias writable sret(%"class.MIR::Statement") align 8, ptr noundef) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9Statement13Data_ScopeEndD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_47vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3MIR6RValue12opt_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEE6insertIS5_IS1_S2_EEENSt9enable_ifIXsr16is_constructibleIS7_T_EE5valueES5_ISt17_Rb_tree_iteratorIS7_EbEE4typeEOSD_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(72)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueENS0_8ConstantEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.536") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2

declare void @_ZNK3MIR8Constant5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::Constant") align 8, ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #1

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3MIR6LValueENS0_8ConstantEED2Ev(ptr noundef nonnull align 8 dereferenceable(72)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3MIR6RValue15opt_EnumVariantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local { ptr, i8 } @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE6insertIS4_IS1_jEEENSt9enable_ifIXsr16is_constructibleIS6_T_EE5valueES4_ISt17_Rb_tree_iteratorIS6_EbEE4typeEOSC_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(36)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueERKjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS5_INS6_IT0_E4typeEE6__typeEEOS7_OSC_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.542") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local void @_ZNSt4pairIN3MIR6LValueEjED2Ev(ptr noundef nonnull align 8 dereferenceable(36)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNK3MIR6RValue7opt_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE4findERS5_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZStneRKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEES7_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEE3endEv(ptr noundef nonnull align 8 dereferenceable(48)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueERjESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.542") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef ptr @_ZNKSt17_Rb_tree_iteratorISt4pairIKN3MIR6LValueEjEEptEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_48vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(16)) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIjSaIjEE2atEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZN3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR8Constant7is_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ27MIR_Optimise_ConstPropagateRN3MIR11TypeResolveERNS4_8FunctionEE4$_49vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 1 dereferenceable(1) ptr @_ZN3MIR8Constant7as_BoolEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIjbSt4lessIjESaISt4pairIKjbEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueEjSt4lessIS1_ESaISt4pairIKS1_jEEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt3mapIN3MIR6LValueENS0_8ConstantESt4lessIS1_ESaISt4pairIKS1_S2_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10Terminator5is_IfEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR6RValueESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) local_unnamed_addr #2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ27MIR_Optimise_ConstPropagateRNS0_11TypeResolveERNS0_8FunctionEE4$_50vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #5 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6RValue11is_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR6RValue11as_ConstantEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { inlinehint mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #10 = { nounwind }
attributes #11 = { noreturn nounwind }
attributes #12 = { noreturn }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"bool", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"long", !7, i64 0}
!15 = !{!16, !10, i64 8}
!16 = !{!"_ZTSN3MIR11TypeResolveE", !12, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !17, i64 32, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !10, i64 104, !12, i64 112, !12, i64 116}
!17 = !{!"_ZTS9FmtLambda", !18, i64 0}
!18 = !{!"_ZTSSt8functionIFvRSoEE", !19, i64 0, !10, i64 24}
!19 = !{!"_ZTSSt14_Function_base", !7, i64 0, !10, i64 16}
!20 = !{!16, !10, i64 16}
!21 = !{!22, !24, i64 16}
!22 = !{!"_ZTSN3MIR8Constant9Data_UintE", !23, i64 0, !24, i64 16}
!23 = !{!"_ZTS4U128", !14, i64 0, !14, i64 8}
!24 = !{!"_ZTSN3HIR8CoreTypeE", !7, i64 0}
!25 = !{!26, !12, i64 0}
!26 = !{!"_ZTSN3MIR10Terminator9Data_CallE", !12, i64 0, !12, i64 4, !27, i64 8, !33, i64 40, !35, i64 136}
!27 = !{!"_ZTSN3MIR6LValueE", !28, i64 0, !29, i64 8}
!28 = !{!"_ZTSN3MIR6LValue7StorageE", !14, i64 0}
!29 = !{!"_ZTSSt6vectorIN3MIR6LValue7WrapperESaIS2_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!33 = !{!"_ZTSN3MIR10CallTargetE", !34, i64 0, !7, i64 8}
!34 = !{!"_ZTSN3MIR10CallTarget3TagE", !7, i64 0}
!35 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!39 = !{!24, !24, i64 0}
!40 = distinct !{!40, !41}
!41 = !{!"llvm.loop.mustprogress"}
!42 = !{!43, !44, i64 0}
!43 = !{!"_ZTSN3MIR6RValue11Data_BorrowE", !44, i64 0, !27, i64 8}
!44 = !{!"_ZTSN3HIR10BorrowTypeE", !7, i64 0}
!45 = distinct !{!45, !41}
!46 = !{!47, !6, i64 0}
!47 = !{!"_ZTSN3MIR8Constant9Data_BoolE", !6, i64 0}
!48 = !{i8 0, i8 2}
!49 = !{}
!50 = !{!51, !52, i64 0}
!51 = !{!"_ZTSN3MIR8Constant10Data_FloatE", !52, i64 0, !24, i64 8}
!52 = !{!"double", !7, i64 0}
!53 = !{!54, !24, i64 16}
!54 = !{!"_ZTSN3MIR8Constant8Data_IntE", !55, i64 0, !24, i64 16}
!55 = !{!"_ZTS4S128", !23, i64 0}
!56 = !{!57, !60, i64 48}
!57 = !{!"_ZTSN3MIR6RValue10Data_BinOpE", !58, i64 0, !60, i64 48, !58, i64 56}
!58 = !{!"_ZTSN3MIR5ParamE", !59, i64 0, !7, i64 8}
!59 = !{!"_ZTSN3MIR5Param3TagE", !7, i64 0}
!60 = !{!"_ZTSN3MIR6eBinOpE", !7, i64 0}
!61 = !{!51, !24, i64 8}
!62 = !{i64 0, i64 8, !13, i64 8, i64 8, !13}
!63 = !{!64, !65, i64 32}
!64 = !{!"_ZTSN3MIR6RValue10Data_UniOpE", !27, i64 0, !65, i64 32}
!65 = !{!"_ZTSN3MIR6eUniOpE", !7, i64 0}
!66 = !{!67, !12, i64 8}
!67 = !{!"_ZTSN3MIR9Statement16Data_SetDropFlagE", !12, i64 0, !6, i64 4, !12, i64 8}
!68 = !{!67, !6, i64 4}
!69 = !{!70, !6, i64 4}
!70 = !{!"_ZTSSt4pairIKjbE", !12, i64 0, !6, i64 4}
!71 = !{!72, !12, i64 40}
!72 = !{!"_ZTSN3MIR9Statement9Data_DropE", !73, i64 0, !27, i64 8, !12, i64 40}
!73 = !{!"_ZTSN3MIR9eDropKindE", !7, i64 0}
!74 = !{!75, !12, i64 32}
!75 = !{!"_ZTSSt4pairIKN3MIR6LValueEjE", !27, i64 0, !12, i64 32}
!76 = distinct !{!76, !41}


; Effective O3 passes: AggressiveInstCombinePass,BDCEPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferAlignmentPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass