; LLVM IR from thepowersgang/mrustc :: src/mir/optimise.ll (Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_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.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.626 = type { i8 }
%class.anon.628 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::function.226" = type { %"class.std::_Function_base", ptr }
%class.anon.629 = type { ptr, ptr, ptr }
%"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.193" = type { %"class.std::_Function_base", ptr }
%class.anon.630 = type { ptr, ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.147" = type { ptr }
%"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.anon.631 = type { i8 }
%"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" }
%"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::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 }
%"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 }

@g_debug_indent_level = external global i32, align 4
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.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.18 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [7 x i8], align 1
@__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [24 x i8], align 1
@.str.137 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.138 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.139 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.140 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [70 x i8], align 1
@.str.141 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.142 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.143 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.144 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.145 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.146 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.147 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.148 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.150 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.151 = external hidden unnamed_addr constant [10 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: nounwind
declare void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(96) %1) #3 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.626, align 1
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.628, 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 i64, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca i32, align 4
  %24 = alloca %"class.std::function.226", align 8
  %25 = alloca %class.anon.629, align 8
  %26 = alloca %"class.std::vector.111", align 8
  %27 = alloca i32, align 4
  %28 = alloca ptr, align 8
  %29 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i8, align 1
  %34 = alloca %"class.std::function.193", align 8
  %35 = alloca %class.anon.630, align 8
  %36 = alloca i8, align 1
  %37 = alloca ptr, align 8
  %38 = alloca i8, align 1
  %39 = alloca ptr, align 8
  %40 = alloca i8, align 1
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %45 = alloca i32, align 4
  %46 = alloca ptr, align 8
  %47 = alloca %"struct.MIR::LValue", align 8
  %48 = alloca %"struct.MIR::LValue", align 8
  %49 = alloca %"class.std::function", align 8
  %50 = alloca %class.anon.631, align 1
  %51 = alloca %"class.MIR::Statement", align 8
  store ptr %0, ptr %3, align 8, !tbaa !5
  store ptr %1, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %5) #8
  store i8 0, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 40, ptr %6) #8
  %52 = call noundef zeroext i1 @_Z13debug_enabledv()
  %53 = zext i1 %52 to i64
  %54 = select i1 %52, ptr @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(1) %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #8
  %55 = getelementptr inbounds %class.anon.628, ptr %10, i32 0, i32 0
  store ptr %5, ptr %55, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef %54, ptr noundef %7, ptr noundef %9)
          to label %56 unwind label %68

56:                                               ; preds = %2
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #8
  %57 = load ptr, ptr %4, align 8, !tbaa !5
  %58 = getelementptr inbounds %"class.MIR::Function", ptr %57, i32 0, i32 2
  store ptr %58, ptr %13, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %59 = load ptr, ptr %13, align 8, !tbaa !5
  %60 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %59) #8
  %61 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %14, i32 0, i32 0
  store ptr %60, ptr %61, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #8
  %62 = load ptr, ptr %13, align 8, !tbaa !5
  %63 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %62) #8
  %64 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %15, i32 0, i32 0
  store ptr %63, ptr %64, align 8
  br label %65

65:                                               ; preds = %880, %56
  %66 = 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) #8
  br i1 %66, label %72, label %67

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

68:                                               ; preds = %2
  %69 = landingpad { ptr, i32 }
          cleanup
  %70 = extractvalue { ptr, i32 } %69, 0
  store ptr %70, ptr %11, align 8
  %71 = extractvalue { ptr, i32 } %69, 1
  store i32 %71, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #8
  br label %891

72:                                               ; preds = %65
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %73 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #8
  store ptr %73, ptr %17, align 8, !tbaa !5
  %74 = load ptr, ptr %17, align 8, !tbaa !5
  %75 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %74, i32 0, i32 0
  %76 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %75) #8
  br i1 %76, label %77, label %78

77:                                               ; preds = %72
  store i32 3, ptr %16, align 4
  br label %877

78:                                               ; preds = %72
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %79 = load ptr, ptr %17, align 8, !tbaa !5
  %80 = load ptr, ptr %4, align 8, !tbaa !5
  %81 = getelementptr inbounds %"class.MIR::Function", ptr %80, i32 0, i32 2
  %82 = call noundef ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %81) #8
  %83 = ptrtoint ptr %79 to i64
  %84 = ptrtoint ptr %82 to i64
  %85 = sub i64 %83, %84
  %86 = sdiv exact i64 %85, 192
  store i64 %86, ptr %18, align 8, !tbaa !11
  %87 = load ptr, ptr %3, align 8, !tbaa !5
  %88 = load i64, ptr %18, align 8, !tbaa !11
  %89 = trunc i64 %88 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %87, i32 noundef %89, i32 noundef 0)
          to label %90 unwind label %98

90:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #8
  %91 = load ptr, ptr %17, align 8, !tbaa !5
  %92 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %91, i32 0, i32 0
  %93 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef 0) #8
  store ptr %93, ptr %19, align 8, !tbaa !5
  %94 = load ptr, ptr %19, align 8, !tbaa !5
  %95 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %94)
          to label %96 unwind label %102

96:                                               ; preds = %90
  br i1 %95, label %106, label %97

97:                                               ; preds = %96
  store i32 3, ptr %16, align 4
  br label %874

98:                                               ; preds = %78
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %11, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %12, align 4
  br label %887

102:                                              ; preds = %109, %106, %90
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %11, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %12, align 4
  br label %886

106:                                              ; preds = %96
  %107 = load ptr, ptr %19, align 8, !tbaa !5
  %108 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %107)
          to label %109 unwind label %102

109:                                              ; preds = %106
  %110 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %108, i32 0, i32 1
  %111 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %110)
          to label %112 unwind label %102

112:                                              ; preds = %109
  br i1 %111, label %114, label %113

113:                                              ; preds = %112
  store i32 3, ptr %16, align 4
  br label %874

114:                                              ; preds = %112
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %115 = load ptr, ptr %19, align 8, !tbaa !5
  %116 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %115)
          to label %117 unwind label %134

117:                                              ; preds = %114
  %118 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %116, i32 0, i32 0
  store ptr %118, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #8
  %119 = load ptr, ptr %19, align 8, !tbaa !5
  %120 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %119)
          to label %121 unwind label %138

121:                                              ; preds = %117
  %122 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %120, i32 0, i32 1
  %123 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %122)
          to label %124 unwind label %138

124:                                              ; preds = %121
  store ptr %123, ptr %21, align 8, !tbaa !5
  %125 = load ptr, ptr %20, align 8, !tbaa !5
  %126 = getelementptr inbounds %"struct.MIR::LValue", ptr %125, i32 0, i32 1
  %127 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %126) #8
  br i1 %127, label %128, label %133

128:                                              ; preds = %124
  %129 = load ptr, ptr %20, align 8, !tbaa !5
  %130 = getelementptr inbounds %"struct.MIR::LValue", ptr %129, i32 0, i32 0
  %131 = invoke noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8) %130)
          to label %132 unwind label %138

132:                                              ; preds = %128
  br i1 %131, label %133, label %142

133:                                              ; preds = %132, %124
  store i32 3, ptr %16, align 4
  br label %873

134:                                              ; preds = %114
  %135 = landingpad { ptr, i32 }
          cleanup
  %136 = extractvalue { ptr, i32 } %135, 0
  store ptr %136, ptr %11, align 8
  %137 = extractvalue { ptr, i32 } %135, 1
  store i32 %137, ptr %12, align 4
  br label %885

138:                                              ; preds = %142, %128, %121, %117
  %139 = landingpad { ptr, i32 }
          cleanup
  %140 = extractvalue { ptr, i32 } %139, 0
  store ptr %140, ptr %11, align 8
  %141 = extractvalue { ptr, i32 } %139, 1
  store i32 %141, ptr %12, align 4
  br label %884

142:                                              ; preds = %132
  %143 = load ptr, ptr %21, align 8, !tbaa !5
  %144 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %143)
          to label %145 unwind label %138

145:                                              ; preds = %142
  br i1 %144, label %147, label %146

146:                                              ; preds = %145
  store i32 3, ptr %16, align 4
  br label %873

147:                                              ; preds = %145
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #8
  store i32 0, ptr %22, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #8
  store i32 0, ptr %23, align 4, !tbaa !13
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 24, ptr %25) #8
  %150 = getelementptr inbounds %class.anon.629, ptr %25, i32 0, i32 0
  %151 = load ptr, ptr %21, align 8, !tbaa !5
  store ptr %151, ptr %150, align 8, !tbaa !5
  %152 = getelementptr inbounds %class.anon.629, ptr %25, i32 0, i32 1
  store ptr %22, ptr %152, align 8, !tbaa !5
  %153 = getelementptr inbounds %class.anon.629, ptr %25, i32 0, i32 2
  store ptr %23, ptr %153, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ23MIR_Optimise_GotoAssignRNS0_11TypeResolveERNS0_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %24, ptr noundef nonnull align 8 dereferenceable(24) %25)
          to label %154 unwind label %195

154:                                              ; preds = %147
  invoke void @_ZN12_GLOBAL__N_117visit_mir_lvaluesERN3MIR11TypeResolveERKNS0_8FunctionESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(120) %148, ptr noundef nonnull align 8 dereferenceable(96) %149, ptr noundef %24)
          to label %155 unwind label %199

155:                                              ; preds = %154
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #8
  %156 = load ptr, ptr %3, align 8, !tbaa !5
  %157 = load i64, ptr %18, align 8, !tbaa !11
  %158 = trunc i64 %157 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %156, i32 noundef %158, i32 noundef 0)
          to label %159 unwind label %204

159:                                              ; preds = %155
  %160 = load i32, ptr %22, align 4, !tbaa !13
  %161 = icmp ugt i32 %160, 1
  br i1 %161, label %165, label %162

162:                                              ; preds = %159
  %163 = load i32, ptr %23, align 4, !tbaa !13
  %164 = icmp ugt i32 %163, 0
  br i1 %164, label %165, label %211

165:                                              ; preds = %162, %159
  br label %166

166:                                              ; preds = %165
  %167 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %168 unwind label %204

168:                                              ; preds = %166
  br i1 %167, label %169, label %208

169:                                              ; preds = %168
  %170 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %171 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %170, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %172 unwind label %204

172:                                              ; preds = %169
  %173 = load ptr, ptr %3, align 8, !tbaa !5
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %171, ptr noundef nonnull align 8 dereferenceable(120) %173)
          to label %175 unwind label %204

175:                                              ; preds = %172
  %176 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %174, ptr noundef @.str.137)
          to label %177 unwind label %204

177:                                              ; preds = %175
  %178 = load ptr, ptr %21, align 8, !tbaa !5
  %179 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %176, ptr noundef nonnull align 8 dereferenceable(32) %178)
          to label %180 unwind label %204

180:                                              ; preds = %177
  %181 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %179, ptr noundef @.str.138)
          to label %182 unwind label %204

182:                                              ; preds = %180
  %183 = load i32, ptr %22, align 4, !tbaa !13
  %184 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %181, i32 noundef %183)
          to label %185 unwind label %204

185:                                              ; preds = %182
  %186 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %184, ptr noundef @.str.139)
          to label %187 unwind label %204

187:                                              ; preds = %185
  %188 = load i32, ptr %23, align 4, !tbaa !13
  %189 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %186, i32 noundef %188)
          to label %190 unwind label %204

190:                                              ; preds = %187
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef @_ZSt3decRSt8ios_base)
          to label %192 unwind label %204

192:                                              ; preds = %190
  %193 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %191, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %194 unwind label %204

194:                                              ; preds = %192
  br label %208

195:                                              ; preds = %147
  %196 = landingpad { ptr, i32 }
          cleanup
  %197 = extractvalue { ptr, i32 } %196, 0
  store ptr %197, ptr %11, align 8
  %198 = extractvalue { ptr, i32 } %196, 1
  store i32 %198, ptr %12, align 4
  br label %203

199:                                              ; preds = %154
  %200 = landingpad { ptr, i32 }
          cleanup
  %201 = extractvalue { ptr, i32 } %200, 0
  store ptr %201, ptr %11, align 8
  %202 = extractvalue { ptr, i32 } %200, 1
  store i32 %202, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %203

203:                                              ; preds = %199, %195
  call void @llvm.lifetime.end.p0(i64 24, ptr %25) #8
  br label %883

204:                                              ; preds = %230, %228, %226, %223, %221, %218, %215, %212, %192, %190, %187, %185, %182, %180, %177, %175, %172, %169, %166, %155
  %205 = landingpad { ptr, i32 }
          cleanup
  %206 = extractvalue { ptr, i32 } %205, 0
  store ptr %206, ptr %11, align 8
  %207 = extractvalue { ptr, i32 } %205, 1
  store i32 %207, ptr %12, align 4
  br label %883

208:                                              ; preds = %194, %168
  br label %209

209:                                              ; preds = %208
  br label %210

210:                                              ; preds = %209
  store i32 3, ptr %16, align 4
  br label %872

211:                                              ; preds = %162
  br label %212

212:                                              ; preds = %211
  %213 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %214 unwind label %204

214:                                              ; preds = %212
  br i1 %213, label %215, label %233

215:                                              ; preds = %214
  %216 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %216, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %218 unwind label %204

218:                                              ; preds = %215
  %219 = load ptr, ptr %3, align 8, !tbaa !5
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %217, ptr noundef nonnull align 8 dereferenceable(120) %219)
          to label %221 unwind label %204

221:                                              ; preds = %218
  %222 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %220, ptr noundef @.str.140)
          to label %223 unwind label %204

223:                                              ; preds = %221
  %224 = load ptr, ptr %19, align 8, !tbaa !5
  %225 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %222, ptr noundef nonnull align 8 dereferenceable(152) %224)
          to label %226 unwind label %204

226:                                              ; preds = %223
  %227 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %225, ptr noundef @.str.18)
          to label %228 unwind label %204

228:                                              ; preds = %226
  %229 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef @_ZSt3decRSt8ios_base)
          to label %230 unwind label %204

230:                                              ; preds = %228
  %231 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %229, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %232 unwind label %204

232:                                              ; preds = %230
  br label %233

233:                                              ; preds = %232, %214
  br label %234

234:                                              ; preds = %233
  br label %235

235:                                              ; preds = %234
  call void @llvm.lifetime.start.p0(i64 24, ptr %26) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #8
  store i32 0, ptr %27, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #8
  %236 = load ptr, ptr %4, align 8, !tbaa !5
  %237 = getelementptr inbounds %"class.MIR::Function", ptr %236, i32 0, i32 2
  store ptr %237, ptr %28, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #8
  %238 = load ptr, ptr %28, align 8, !tbaa !5
  %239 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %238) #8
  %240 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %29, i32 0, i32 0
  store ptr %239, ptr %240, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #8
  %241 = load ptr, ptr %28, align 8, !tbaa !5
  %242 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %241) #8
  %243 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %30, i32 0, i32 0
  store ptr %242, ptr %243, align 8
  br label %244

244:                                              ; preds = %581, %235
  %245 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  br i1 %245, label %247, label %246

246:                                              ; preds = %244
  store i32 8, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %584

247:                                              ; preds = %244
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #8
  %248 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  store ptr %248, ptr %31, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #8
  %249 = load ptr, ptr %31, align 8, !tbaa !5
  %250 = load ptr, ptr %4, align 8, !tbaa !5
  %251 = getelementptr inbounds %"class.MIR::Function", ptr %250, i32 0, i32 2
  %252 = call noundef ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %251) #8
  %253 = ptrtoint ptr %249 to i64
  %254 = ptrtoint ptr %252 to i64
  %255 = sub i64 %253, %254
  %256 = sdiv exact i64 %255, 192
  %257 = trunc i64 %256 to i32
  store i32 %257, ptr %32, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr %33) #8
  store i8 0, ptr %33, align 1, !tbaa !9
  %258 = load ptr, ptr %31, align 8, !tbaa !5
  %259 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %258, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 32, ptr %35) #8
  %260 = getelementptr inbounds %class.anon.630, ptr %35, i32 0, i32 0
  %261 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %261, ptr %260, align 8, !tbaa !5
  %262 = getelementptr inbounds %class.anon.630, ptr %35, i32 0, i32 1
  store ptr %33, ptr %262, align 8, !tbaa !5
  %263 = getelementptr inbounds %class.anon.630, ptr %35, i32 0, i32 2
  store ptr %26, ptr %263, align 8, !tbaa !5
  %264 = getelementptr inbounds %class.anon.630, ptr %35, i32 0, i32 3
  store ptr %32, ptr %264, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFvRKjEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS5_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %34, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %265 unwind label %274

265:                                              ; preds = %247
  invoke void @_ZN12_GLOBAL__N_123visit_terminator_targetERKN3MIR10TerminatorESt8functionIFvRKjEE(ptr noundef nonnull align 8 dereferenceable(168) %259, ptr noundef %34)
          to label %266 unwind label %278

266:                                              ; preds = %265
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  %267 = load i8, ptr %33, align 1, !tbaa !9, !range !15, !noundef !16
  %268 = trunc i8 %267 to i1
  br i1 %268, label %269, label %580

269:                                              ; preds = %266
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #8
  store i8 1, ptr %36, align 1, !tbaa !9
  br label %270

270:                                              ; preds = %578, %269
  %271 = load i8, ptr %36, align 1, !tbaa !9, !range !15, !noundef !16
  %272 = trunc i8 %271 to i1
  br i1 %272, label %283, label %273

273:                                              ; preds = %270
  store i32 10, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  br label %579

274:                                              ; preds = %247
  %275 = landingpad { ptr, i32 }
          cleanup
  %276 = extractvalue { ptr, i32 } %275, 0
  store ptr %276, ptr %11, align 8
  %277 = extractvalue { ptr, i32 } %275, 1
  store i32 %277, ptr %12, align 4
  br label %282

278:                                              ; preds = %265
  %279 = landingpad { ptr, i32 }
          cleanup
  %280 = extractvalue { ptr, i32 } %279, 0
  store ptr %280, ptr %11, align 8
  %281 = extractvalue { ptr, i32 } %279, 1
  store i32 %281, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %34) #8
  br label %282

282:                                              ; preds = %278, %274
  call void @llvm.lifetime.end.p0(i64 32, ptr %35) #8
  br label %583

283:                                              ; preds = %270
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #8
  %284 = load ptr, ptr %31, align 8, !tbaa !5
  %285 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %284, i32 0, i32 1
  store ptr %285, ptr %37, align 8, !tbaa !5
  br label %286

286:                                              ; preds = %575, %283
  %287 = load i8, ptr %36, align 1, !tbaa !9, !range !15, !noundef !16
  %288 = trunc i8 %287 to i1
  br i1 %288, label %290, label %289

289:                                              ; preds = %286
  store i32 13, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  br label %577

290:                                              ; preds = %286
  %291 = load ptr, ptr %37, align 8, !tbaa !5
  %292 = invoke noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %291)
          to label %293 unwind label %294

293:                                              ; preds = %290
  switch i32 %292, label %543 [
    i32 0, label %298
    i32 4, label %299
    i32 9, label %440
  ]

294:                                              ; preds = %568, %566, %564, %560, %558, %555, %553, %550, %547, %544, %290
  %295 = landingpad { ptr, i32 }
          cleanup
  %296 = extractvalue { ptr, i32 } %295, 0
  store ptr %296, ptr %11, align 8
  %297 = extractvalue { ptr, i32 } %295, 1
  store i32 %297, ptr %12, align 4
  br label %576

298:                                              ; preds = %293
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 5874, ptr noundef @__PRETTY_FUNCTION__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE) #9
  unreachable

299:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #8
  store i8 1, ptr %38, align 1, !tbaa !9
  br label %300

300:                                              ; preds = %438, %299
  %301 = load i8, ptr %38, align 1, !tbaa !9, !range !15, !noundef !16
  %302 = trunc i8 %301 to i1
  br i1 %302, label %304, label %303

303:                                              ; preds = %300
  store i32 17, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #8
  br label %439

304:                                              ; preds = %300
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #8
  %305 = load ptr, ptr %37, align 8, !tbaa !5
  %306 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator7as_GotoEv(ptr noundef nonnull align 8 dereferenceable(168) %305)
          to label %307 unwind label %313

307:                                              ; preds = %304
  store ptr %306, ptr %39, align 8, !tbaa !5
  br label %308

308:                                              ; preds = %436, %307
  %309 = load ptr, ptr %39, align 8, !tbaa !5
  %310 = load i8, ptr %38, align 1, !tbaa !9, !range !15, !noundef !16
  %311 = trunc i8 %310 to i1
  br i1 %311, label %317, label %312

312:                                              ; preds = %308
  store i32 20, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  br label %437

313:                                              ; preds = %428, %426, %424, %419, %417, %412, %410, %407, %405, %402, %399, %390, %388, %383, %381, %376, %374, %371, %369, %366, %363, %357, %352, %346, %340, %338, %336, %333, %331, %328, %325, %322, %304
  %314 = landingpad { ptr, i32 }
          cleanup
  %315 = extractvalue { ptr, i32 } %314, 0
  store ptr %315, ptr %11, align 8
  %316 = extractvalue { ptr, i32 } %314, 1
  store i32 %316, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #8
  br label %576

317:                                              ; preds = %308
  %318 = load ptr, ptr %31, align 8, !tbaa !5
  %319 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %318, i32 0, i32 0
  %320 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %319) #8
  br i1 %320, label %321, label %346

321:                                              ; preds = %317
  br label %322

322:                                              ; preds = %321
  %323 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %324 unwind label %313

324:                                              ; preds = %322
  br i1 %323, label %325, label %343

325:                                              ; preds = %324
  %326 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %327 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %326, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %328 unwind label %313

328:                                              ; preds = %325
  %329 = load ptr, ptr %3, align 8, !tbaa !5
  %330 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %327, ptr noundef nonnull align 8 dereferenceable(120) %329)
          to label %331 unwind label %313

331:                                              ; preds = %328
  %332 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %330, ptr noundef @.str)
          to label %333 unwind label %313

333:                                              ; preds = %331
  %334 = load i32, ptr %32, align 4, !tbaa !13
  %335 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %332, i32 noundef %334)
          to label %336 unwind label %313

336:                                              ; preds = %333
  %337 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %335, ptr noundef @.str.69)
          to label %338 unwind label %313

338:                                              ; preds = %336
  %339 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %337, ptr noundef @_ZSt3decRSt8ios_base)
          to label %340 unwind label %313

340:                                              ; preds = %338
  %341 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %339, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %342 unwind label %313

342:                                              ; preds = %340
  br label %343

343:                                              ; preds = %342, %324
  br label %344

344:                                              ; preds = %343
  br label %345

345:                                              ; preds = %344
  br label %435

346:                                              ; preds = %317
  %347 = load ptr, ptr %31, align 8, !tbaa !5
  %348 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %347, i32 0, i32 0
  %349 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %348) #8
  %350 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %349)
          to label %351 unwind label %313

351:                                              ; preds = %346
  br i1 %350, label %352, label %398

352:                                              ; preds = %351
  %353 = load ptr, ptr %31, align 8, !tbaa !5
  %354 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %353, i32 0, i32 0
  %355 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %354) #8
  %356 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %355)
          to label %357 unwind label %313

357:                                              ; preds = %352
  %358 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %356, i32 0, i32 0
  %359 = load ptr, ptr %21, align 8, !tbaa !5
  %360 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %358, ptr noundef nonnull align 8 dereferenceable(32) %359)
          to label %361 unwind label %313

361:                                              ; preds = %357
  br i1 %360, label %362, label %398

362:                                              ; preds = %361
  br label %363

363:                                              ; preds = %362
  %364 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %365 unwind label %313

365:                                              ; preds = %363
  br i1 %364, label %366, label %393

366:                                              ; preds = %365
  %367 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %368 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %367, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %369 unwind label %313

369:                                              ; preds = %366
  %370 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %368, ptr noundef @.str)
          to label %371 unwind label %313

371:                                              ; preds = %369
  %372 = load i32, ptr %32, align 4, !tbaa !13
  %373 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %370, i32 noundef %372)
          to label %374 unwind label %313

374:                                              ; preds = %371
  %375 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %373, ptr noundef @.str.37)
          to label %376 unwind label %313

376:                                              ; preds = %374
  %377 = load ptr, ptr %31, align 8, !tbaa !5
  %378 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %377, i32 0, i32 0
  %379 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %378) #8
  %380 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %375, i64 noundef %379)
          to label %381 unwind label %313

381:                                              ; preds = %376
  %382 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %380, ptr noundef @.str.38)
          to label %383 unwind label %313

383:                                              ; preds = %381
  %384 = load ptr, ptr %31, align 8, !tbaa !5
  %385 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %384, i32 0, i32 0
  %386 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %385) #8
  %387 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %382, ptr noundef nonnull align 8 dereferenceable(152) %386)
          to label %388 unwind label %313

388:                                              ; preds = %383
  %389 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %387, ptr noundef @_ZSt3decRSt8ios_base)
          to label %390 unwind label %313

390:                                              ; preds = %388
  %391 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %389, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %392 unwind label %313

392:                                              ; preds = %390
  br label %393

393:                                              ; preds = %392, %365
  br label %394

394:                                              ; preds = %393
  br label %395

395:                                              ; preds = %394
  %396 = load i32, ptr %27, align 4, !tbaa !13
  %397 = add i32 %396, 1
  store i32 %397, ptr %27, align 4, !tbaa !13
  br label %434

398:                                              ; preds = %361, %351
  br label %399

399:                                              ; preds = %398
  %400 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %401 unwind label %313

401:                                              ; preds = %399
  br i1 %400, label %402, label %431

402:                                              ; preds = %401
  %403 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %403, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %405 unwind label %313

405:                                              ; preds = %402
  %406 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %404, ptr noundef @.str)
          to label %407 unwind label %313

407:                                              ; preds = %405
  %408 = load i32, ptr %32, align 4, !tbaa !13
  %409 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %406, i32 noundef %408)
          to label %410 unwind label %313

410:                                              ; preds = %407
  %411 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %409, ptr noundef @.str.37)
          to label %412 unwind label %313

412:                                              ; preds = %410
  %413 = load ptr, ptr %31, align 8, !tbaa !5
  %414 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %413, i32 0, i32 0
  %415 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %414) #8
  %416 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %411, i64 noundef %415)
          to label %417 unwind label %313

417:                                              ; preds = %412
  %418 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %416, ptr noundef @.str.38)
          to label %419 unwind label %313

419:                                              ; preds = %417
  %420 = load ptr, ptr %31, align 8, !tbaa !5
  %421 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %420, i32 0, i32 0
  %422 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %421) #8
  %423 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %418, ptr noundef nonnull align 8 dereferenceable(152) %422)
          to label %424 unwind label %313

424:                                              ; preds = %419
  %425 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %423, ptr noundef @.str.141)
          to label %426 unwind label %313

426:                                              ; preds = %424
  %427 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %425, ptr noundef @_ZSt3decRSt8ios_base)
          to label %428 unwind label %313

428:                                              ; preds = %426
  %429 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %427, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %430 unwind label %313

430:                                              ; preds = %428
  br label %431

431:                                              ; preds = %430, %401
  br label %432

432:                                              ; preds = %431
  br label %433

433:                                              ; preds = %432
  br label %434

434:                                              ; preds = %433, %395
  br label %435

435:                                              ; preds = %434, %345
  br label %436

436:                                              ; preds = %435
  store i8 0, ptr %38, align 1, !tbaa !9
  br label %308, !llvm.loop !17

437:                                              ; preds = %312
  br label %438

438:                                              ; preds = %437
  store i8 0, ptr %38, align 1, !tbaa !9
  br label %300, !llvm.loop !19

439:                                              ; preds = %303
  br label %574

440:                                              ; preds = %293
  call void @llvm.lifetime.start.p0(i64 1, ptr %40) #8
  store i8 1, ptr %40, align 1, !tbaa !9
  br label %441

441:                                              ; preds = %541, %440
  %442 = load i8, ptr %40, align 1, !tbaa !9, !range !15, !noundef !16
  %443 = trunc i8 %442 to i1
  br i1 %443, label %445, label %444

444:                                              ; preds = %441
  store i32 29, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #8
  br label %542

445:                                              ; preds = %441
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #8
  %446 = load ptr, ptr %37, align 8, !tbaa !5
  %447 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %446)
          to label %448 unwind label %454

448:                                              ; preds = %445
  store ptr %447, ptr %41, align 8, !tbaa !5
  br label %449

449:                                              ; preds = %539, %448
  %450 = load ptr, ptr %41, align 8, !tbaa !5
  %451 = load i8, ptr %40, align 1, !tbaa !9, !range !15, !noundef !16
  %452 = trunc i8 %451 to i1
  br i1 %452, label %458, label %453

453:                                              ; preds = %449
  store i32 32, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  br label %540

454:                                              ; preds = %528, %526, %524, %520, %518, %515, %513, %510, %507, %504, %497, %491, %489, %487, %483, %481, %478, %476, %473, %470, %467, %458, %445
  %455 = landingpad { ptr, i32 }
          cleanup
  %456 = extractvalue { ptr, i32 } %455, 0
  store ptr %456, ptr %11, align 8
  %457 = extractvalue { ptr, i32 } %455, 1
  store i32 %457, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %40) #8
  br label %576

458:                                              ; preds = %449
  %459 = load ptr, ptr %41, align 8, !tbaa !5
  %460 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %459, i32 0, i32 0
  %461 = load i32, ptr %460, align 8, !tbaa !20
  %462 = load ptr, ptr %3, align 8, !tbaa !5
  %463 = invoke noundef i32 @_ZNK3MIR11TypeResolve13get_cur_blockEv(ptr noundef nonnull align 8 dereferenceable(120) %462)
          to label %464 unwind label %454

464:                                              ; preds = %458
  %465 = icmp ne i32 %461, %463
  br i1 %465, label %466, label %497

466:                                              ; preds = %464
  br label %467

467:                                              ; preds = %466
  %468 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %469 unwind label %454

469:                                              ; preds = %467
  br i1 %468, label %470, label %494

470:                                              ; preds = %469
  %471 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %472 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %471, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %473 unwind label %454

473:                                              ; preds = %470
  %474 = load ptr, ptr %3, align 8, !tbaa !5
  %475 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %472, ptr noundef nonnull align 8 dereferenceable(120) %474)
          to label %476 unwind label %454

476:                                              ; preds = %473
  %477 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %475, ptr noundef @.str)
          to label %478 unwind label %454

478:                                              ; preds = %476
  %479 = load i32, ptr %32, align 4, !tbaa !13
  %480 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %477, i32 noundef %479)
          to label %481 unwind label %454

481:                                              ; preds = %478
  %482 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %480, ptr noundef @.str.142)
          to label %483 unwind label %454

483:                                              ; preds = %481
  %484 = load ptr, ptr %31, align 8, !tbaa !5
  %485 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %484, i32 0, i32 1
  %486 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %482, ptr noundef nonnull align 8 dereferenceable(168) %485)
          to label %487 unwind label %454

487:                                              ; preds = %483
  %488 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %486, ptr noundef @.str.143)
          to label %489 unwind label %454

489:                                              ; preds = %487
  %490 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %488, ptr noundef @_ZSt3decRSt8ios_base)
          to label %491 unwind label %454

491:                                              ; preds = %489
  %492 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %490, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %493 unwind label %454

493:                                              ; preds = %491
  br label %494

494:                                              ; preds = %493, %469
  br label %495

495:                                              ; preds = %494
  br label %496

496:                                              ; preds = %495
  br label %538

497:                                              ; preds = %464
  %498 = load ptr, ptr %41, align 8, !tbaa !5
  %499 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %498, i32 0, i32 2
  %500 = load ptr, ptr %21, align 8, !tbaa !5
  %501 = invoke noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %499, ptr noundef nonnull align 8 dereferenceable(32) %500)
          to label %502 unwind label %454

502:                                              ; preds = %497
  br i1 %501, label %503, label %534

503:                                              ; preds = %502
  br label %504

504:                                              ; preds = %503
  %505 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %506 unwind label %454

506:                                              ; preds = %504
  br i1 %505, label %507, label %531

507:                                              ; preds = %506
  %508 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %509 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %508, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %510 unwind label %454

510:                                              ; preds = %507
  %511 = load ptr, ptr %3, align 8, !tbaa !5
  %512 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %509, ptr noundef nonnull align 8 dereferenceable(120) %511)
          to label %513 unwind label %454

513:                                              ; preds = %510
  %514 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %512, ptr noundef @.str)
          to label %515 unwind label %454

515:                                              ; preds = %513
  %516 = load i32, ptr %32, align 4, !tbaa !13
  %517 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %514, i32 noundef %516)
          to label %518 unwind label %454

518:                                              ; preds = %515
  %519 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %517, ptr noundef @.str.142)
          to label %520 unwind label %454

520:                                              ; preds = %518
  %521 = load ptr, ptr %31, align 8, !tbaa !5
  %522 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %521, i32 0, i32 1
  %523 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %519, ptr noundef nonnull align 8 dereferenceable(168) %522)
          to label %524 unwind label %454

524:                                              ; preds = %520
  %525 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %523, ptr noundef @.str.144)
          to label %526 unwind label %454

526:                                              ; preds = %524
  %527 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %525, ptr noundef @_ZSt3decRSt8ios_base)
          to label %528 unwind label %454

528:                                              ; preds = %526
  %529 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %527, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %530 unwind label %454

530:                                              ; preds = %528
  br label %531

531:                                              ; preds = %530, %506
  br label %532

532:                                              ; preds = %531
  br label %533

533:                                              ; preds = %532
  br label %537

534:                                              ; preds = %502
  %535 = load i32, ptr %27, align 4, !tbaa !13
  %536 = add i32 %535, 1
  store i32 %536, ptr %27, align 4, !tbaa !13
  br label %537

537:                                              ; preds = %534, %533
  br label %538

538:                                              ; preds = %537, %496
  br label %539

539:                                              ; preds = %538
  store i8 0, ptr %40, align 1, !tbaa !9
  br label %449, !llvm.loop !34

540:                                              ; preds = %453
  br label %541

541:                                              ; preds = %540
  store i8 0, ptr %40, align 1, !tbaa !9
  br label %441, !llvm.loop !35

542:                                              ; preds = %444
  br label %574

543:                                              ; preds = %293
  br label %544

544:                                              ; preds = %543
  %545 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %546 unwind label %294

546:                                              ; preds = %544
  br i1 %545, label %547, label %571

547:                                              ; preds = %546
  %548 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %549 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %548, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %550 unwind label %294

550:                                              ; preds = %547
  %551 = load ptr, ptr %3, align 8, !tbaa !5
  %552 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %549, ptr noundef nonnull align 8 dereferenceable(120) %551)
          to label %553 unwind label %294

553:                                              ; preds = %550
  %554 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %552, ptr noundef @.str)
          to label %555 unwind label %294

555:                                              ; preds = %553
  %556 = load i32, ptr %32, align 4, !tbaa !13
  %557 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %554, i32 noundef %556)
          to label %558 unwind label %294

558:                                              ; preds = %555
  %559 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %557, ptr noundef @.str.142)
          to label %560 unwind label %294

560:                                              ; preds = %558
  %561 = load ptr, ptr %31, align 8, !tbaa !5
  %562 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %561, i32 0, i32 1
  %563 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %559, ptr noundef nonnull align 8 dereferenceable(168) %562)
          to label %564 unwind label %294

564:                                              ; preds = %560
  %565 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %563, ptr noundef @.str.145)
          to label %566 unwind label %294

566:                                              ; preds = %564
  %567 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %565, ptr noundef @_ZSt3decRSt8ios_base)
          to label %568 unwind label %294

568:                                              ; preds = %566
  %569 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %567, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %570 unwind label %294

570:                                              ; preds = %568
  br label %571

571:                                              ; preds = %570, %546
  br label %572

572:                                              ; preds = %571
  br label %573

573:                                              ; preds = %572
  br label %574

574:                                              ; preds = %573, %542, %439
  br label %575

575:                                              ; preds = %574
  store i8 0, ptr %36, align 1, !tbaa !9
  br label %286, !llvm.loop !36

576:                                              ; preds = %454, %313, %294
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #8
  br label %583

577:                                              ; preds = %289
  br label %578

578:                                              ; preds = %577
  store i8 0, ptr %36, align 1, !tbaa !9
  br label %270, !llvm.loop !37

579:                                              ; preds = %273
  br label %580

580:                                              ; preds = %579, %266
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  br label %581

581:                                              ; preds = %580
  %582 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  br label %244

583:                                              ; preds = %576, %282
  call void @llvm.lifetime.end.p0(i64 1, ptr %33) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #8
  br label %882

584:                                              ; preds = %246
  %585 = load i32, ptr %27, align 4, !tbaa !13
  %586 = zext i32 %585 to i64
  %587 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  %588 = icmp ult i64 %586, %587
  br i1 %588, label %589, label %613

589:                                              ; preds = %584
  br label %590

590:                                              ; preds = %589
  %591 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %592 unwind label %606

592:                                              ; preds = %590
  br i1 %591, label %593, label %610

593:                                              ; preds = %592
  %594 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %595 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %594, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %596 unwind label %606

596:                                              ; preds = %593
  %597 = load ptr, ptr %3, align 8, !tbaa !5
  %598 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %595, ptr noundef nonnull align 8 dereferenceable(120) %597)
          to label %599 unwind label %606

599:                                              ; preds = %596
  %600 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %598, ptr noundef @.str.146)
          to label %601 unwind label %606

601:                                              ; preds = %599
  %602 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %600, ptr noundef @_ZSt3decRSt8ios_base)
          to label %603 unwind label %606

603:                                              ; preds = %601
  %604 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %602, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %605 unwind label %606

605:                                              ; preds = %603
  br label %610

606:                                              ; preds = %856, %854, %852, %849, %846, %843, %603, %601, %599, %596, %593, %590
  %607 = landingpad { ptr, i32 }
          cleanup
  %608 = extractvalue { ptr, i32 } %607, 0
  store ptr %608, ptr %11, align 8
  %609 = extractvalue { ptr, i32 } %607, 1
  store i32 %609, ptr %12, align 4
  br label %882

610:                                              ; preds = %605, %592
  br label %611

611:                                              ; preds = %610
  br label %612

612:                                              ; preds = %611
  store i32 3, ptr %16, align 4
  br label %871

613:                                              ; preds = %584
  store i8 1, ptr %5, align 1, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #8
  store ptr %26, ptr %42, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #8
  %614 = load ptr, ptr %42, align 8, !tbaa !5
  %615 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %614) #8
  %616 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.147", ptr %43, i32 0, i32 0
  store ptr %615, ptr %616, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #8
  %617 = load ptr, ptr %42, align 8, !tbaa !5
  %618 = call ptr @_ZNSt6vectorIjSaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %617) #8
  %619 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.147", ptr %44, i32 0, i32 0
  store ptr %618, ptr %619, align 8
  br label %620

620:                                              ; preds = %835, %613
  %621 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  br i1 %621, label %623, label %622

622:                                              ; preds = %620
  store i32 43, ptr %16, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %838

623:                                              ; preds = %620
  call void @llvm.lifetime.start.p0(i64 4, ptr %45) #8
  %624 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  %625 = load i32, ptr %624, align 4, !tbaa !13
  store i32 %625, ptr %45, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #8
  %626 = load ptr, ptr %4, align 8, !tbaa !5
  %627 = getelementptr inbounds %"class.MIR::Function", ptr %626, i32 0, i32 2
  %628 = load i32, ptr %45, align 4, !tbaa !13
  %629 = zext i32 %628 to i64
  %630 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %627, i64 noundef %629) #8
  store ptr %630, ptr %46, align 8, !tbaa !5
  %631 = load ptr, ptr %46, align 8, !tbaa !5
  %632 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %631, i32 0, i32 1
  %633 = invoke noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %632)
          to label %634 unwind label %667

634:                                              ; preds = %623
  br i1 %633, label %635, label %692

635:                                              ; preds = %634
  %636 = load ptr, ptr %46, align 8, !tbaa !5
  %637 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %636, i32 0, i32 1
  %638 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %637)
          to label %639 unwind label %667

639:                                              ; preds = %635
  %640 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %638, i32 0, i32 2
  %641 = load ptr, ptr %21, align 8, !tbaa !5
  %642 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %640, ptr noundef nonnull align 8 dereferenceable(32) %641)
          to label %643 unwind label %667

643:                                              ; preds = %639
  br i1 %642, label %644, label %692

644:                                              ; preds = %643
  br label %645

645:                                              ; preds = %644
  %646 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %647 unwind label %667

647:                                              ; preds = %645
  br i1 %646, label %648, label %671

648:                                              ; preds = %647
  %649 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %650 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %649, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %651 unwind label %667

651:                                              ; preds = %648
  %652 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %650, ptr noundef @.str.147)
          to label %653 unwind label %667

653:                                              ; preds = %651
  %654 = load i32, ptr %45, align 4, !tbaa !13
  %655 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %652, i32 noundef %654)
          to label %656 unwind label %667

656:                                              ; preds = %653
  %657 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %655, ptr noundef @.str.148)
          to label %658 unwind label %667

658:                                              ; preds = %656
  %659 = load ptr, ptr %46, align 8, !tbaa !5
  %660 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %659, i32 0, i32 1
  %661 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %657, ptr noundef nonnull align 8 dereferenceable(168) %660)
          to label %662 unwind label %667

662:                                              ; preds = %658
  %663 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %661, ptr noundef @_ZSt3decRSt8ios_base)
          to label %664 unwind label %667

664:                                              ; preds = %662
  %665 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %663, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %666 unwind label %667

666:                                              ; preds = %664
  br label %671

667:                                              ; preds = %829, %827, %823, %821, %818, %816, %813, %810, %803, %801, %796, %794, %788, %786, %783, %781, %778, %775, %761, %733, %731, %726, %724, %721, %719, %716, %713, %707, %702, %696, %664, %662, %658, %656, %653, %651, %648, %645, %639, %635, %623
  %668 = landingpad { ptr, i32 }
          cleanup
  %669 = extractvalue { ptr, i32 } %668, 0
  store ptr %669, ptr %11, align 8
  %670 = extractvalue { ptr, i32 } %668, 1
  store i32 %670, ptr %12, align 4
  br label %837

671:                                              ; preds = %666, %647
  br label %672

672:                                              ; preds = %671
  br label %673

673:                                              ; preds = %672
  call void @llvm.lifetime.start.p0(i64 32, ptr %47) #8
  %674 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %47, ptr noundef nonnull align 8 dereferenceable(32) %674)
          to label %675 unwind label %683

675:                                              ; preds = %673
  %676 = load ptr, ptr %46, align 8, !tbaa !5
  %677 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %676, i32 0, i32 1
  %678 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %677)
          to label %679 unwind label %687

679:                                              ; preds = %675
  %680 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %678, i32 0, i32 2
  %681 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %680, ptr noundef nonnull align 8 dereferenceable(32) %47)
          to label %682 unwind label %687

682:                                              ; preds = %679
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  br label %770

683:                                              ; preds = %673
  %684 = landingpad { ptr, i32 }
          cleanup
  %685 = extractvalue { ptr, i32 } %684, 0
  store ptr %685, ptr %11, align 8
  %686 = extractvalue { ptr, i32 } %684, 1
  store i32 %686, ptr %12, align 4
  br label %691

687:                                              ; preds = %679, %675
  %688 = landingpad { ptr, i32 }
          cleanup
  %689 = extractvalue { ptr, i32 } %688, 0
  store ptr %689, ptr %11, align 8
  %690 = extractvalue { ptr, i32 } %688, 1
  store i32 %690, ptr %12, align 4
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %47) #8
  br label %691

691:                                              ; preds = %687, %683
  call void @llvm.lifetime.end.p0(i64 32, ptr %47) #8
  br label %837

692:                                              ; preds = %643, %634
  %693 = load ptr, ptr %46, align 8, !tbaa !5
  %694 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %693, i32 0, i32 0
  %695 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %694) #8
  br i1 %695, label %758, label %696

696:                                              ; preds = %692
  %697 = load ptr, ptr %46, align 8, !tbaa !5
  %698 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %697, i32 0, i32 0
  %699 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %698) #8
  %700 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %699)
          to label %701 unwind label %667

701:                                              ; preds = %696
  br i1 %700, label %702, label %758

702:                                              ; preds = %701
  %703 = load ptr, ptr %46, align 8, !tbaa !5
  %704 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %703, i32 0, i32 0
  %705 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %704) #8
  %706 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %705)
          to label %707 unwind label %667

707:                                              ; preds = %702
  %708 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %706, i32 0, i32 0
  %709 = load ptr, ptr %21, align 8, !tbaa !5
  %710 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %708, ptr noundef nonnull align 8 dereferenceable(32) %709)
          to label %711 unwind label %667

711:                                              ; preds = %707
  br i1 %710, label %712, label %758

712:                                              ; preds = %711
  br label %713

713:                                              ; preds = %712
  %714 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %715 unwind label %667

715:                                              ; preds = %713
  br i1 %714, label %716, label %736

716:                                              ; preds = %715
  %717 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %718 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %717, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %719 unwind label %667

719:                                              ; preds = %716
  %720 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %718, ptr noundef @.str.147)
          to label %721 unwind label %667

721:                                              ; preds = %719
  %722 = load i32, ptr %45, align 4, !tbaa !13
  %723 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %720, i32 noundef %722)
          to label %724 unwind label %667

724:                                              ; preds = %721
  %725 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %723, ptr noundef @.str.149)
          to label %726 unwind label %667

726:                                              ; preds = %724
  %727 = load ptr, ptr %46, align 8, !tbaa !5
  %728 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %727, i32 0, i32 0
  %729 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %728) #8
  %730 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %725, ptr noundef nonnull align 8 dereferenceable(152) %729)
          to label %731 unwind label %667

731:                                              ; preds = %726
  %732 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %730, ptr noundef @_ZSt3decRSt8ios_base)
          to label %733 unwind label %667

733:                                              ; preds = %731
  %734 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %732, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %735 unwind label %667

735:                                              ; preds = %733
  br label %736

736:                                              ; preds = %735, %715
  br label %737

737:                                              ; preds = %736
  br label %738

738:                                              ; preds = %737
  call void @llvm.lifetime.start.p0(i64 32, ptr %48) #8
  %739 = load ptr, ptr %20, align 8, !tbaa !5
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %48, ptr noundef nonnull align 8 dereferenceable(32) %739)
          to label %740 unwind label %749

740:                                              ; preds = %738
  %741 = load ptr, ptr %46, align 8, !tbaa !5
  %742 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %741, i32 0, i32 0
  %743 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %742) #8
  %744 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %743)
          to label %745 unwind label %753

745:                                              ; preds = %740
  %746 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %744, i32 0, i32 0
  %747 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %746, ptr noundef nonnull align 8 dereferenceable(32) %48)
          to label %748 unwind label %753

748:                                              ; preds = %745
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  br label %769

749:                                              ; preds = %738
  %750 = landingpad { ptr, i32 }
          cleanup
  %751 = extractvalue { ptr, i32 } %750, 0
  store ptr %751, ptr %11, align 8
  %752 = extractvalue { ptr, i32 } %750, 1
  store i32 %752, ptr %12, align 4
  br label %757

753:                                              ; preds = %745, %740
  %754 = landingpad { ptr, i32 }
          cleanup
  %755 = extractvalue { ptr, i32 } %754, 0
  store ptr %755, ptr %11, align 8
  %756 = extractvalue { ptr, i32 } %754, 1
  store i32 %756, ptr %12, align 4
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %48) #8
  br label %757

757:                                              ; preds = %753, %749
  call void @llvm.lifetime.end.p0(i64 32, ptr %48) #8
  br label %837

758:                                              ; preds = %711, %701, %692
  br label %759

759:                                              ; preds = %758
  %760 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %50) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %49, ptr noundef nonnull align 1 dereferenceable(1) %50) #8
  invoke void @_ZNK3MIR11TypeResolve10print_todoESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %760, ptr noundef %49)
          to label %761 unwind label %763

761:                                              ; preds = %759
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #8
  %762 = call ptr @__cxa_allocate_exception(i64 8) #8
  store ptr @.str.11, ptr %762, align 16, !tbaa !5
  invoke void @__cxa_throw(ptr %762, ptr @_ZTIPKc, ptr null) #10
          to label %897 unwind label %667

763:                                              ; preds = %759
  %764 = landingpad { ptr, i32 }
          cleanup
  %765 = extractvalue { ptr, i32 } %764, 0
  store ptr %765, ptr %11, align 8
  %766 = extractvalue { ptr, i32 } %764, 1
  store i32 %766, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %49) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #8
  br label %837

767:                                              ; No predecessors!
  br label %768

768:                                              ; preds = %767
  br label %769

769:                                              ; preds = %768, %748
  br label %770

770:                                              ; preds = %769, %682
  %771 = load ptr, ptr %46, align 8, !tbaa !5
  %772 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %771, i32 0, i32 0
  %773 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %772) #8
  br i1 %773, label %809, label %774

774:                                              ; preds = %770
  br label %775

775:                                              ; preds = %774
  %776 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %777 unwind label %667

777:                                              ; preds = %775
  br i1 %776, label %778, label %806

778:                                              ; preds = %777
  %779 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %780 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %779, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %781 unwind label %667

781:                                              ; preds = %778
  %782 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %780, ptr noundef @.str.150)
          to label %783 unwind label %667

783:                                              ; preds = %781
  %784 = load i32, ptr %45, align 4, !tbaa !13
  %785 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %782, i32 noundef %784)
          to label %786 unwind label %667

786:                                              ; preds = %783
  %787 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %785, ptr noundef @.str.37)
          to label %788 unwind label %667

788:                                              ; preds = %786
  %789 = load ptr, ptr %46, align 8, !tbaa !5
  %790 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %789, i32 0, i32 0
  %791 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %790) #8
  %792 = sub i64 %791, 1
  %793 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %787, i64 noundef %792)
          to label %794 unwind label %667

794:                                              ; preds = %788
  %795 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %793, ptr noundef @.str.38)
          to label %796 unwind label %667

796:                                              ; preds = %794
  %797 = load ptr, ptr %46, align 8, !tbaa !5
  %798 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %797, i32 0, i32 0
  %799 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %798) #8
  %800 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %795, ptr noundef nonnull align 8 dereferenceable(152) %799)
          to label %801 unwind label %667

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

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

805:                                              ; preds = %803
  br label %806

806:                                              ; preds = %805, %777
  br label %807

807:                                              ; preds = %806
  br label %808

808:                                              ; preds = %807
  br label %809

809:                                              ; preds = %808, %770
  br label %810

810:                                              ; preds = %809
  %811 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %812 unwind label %667

812:                                              ; preds = %810
  br i1 %811, label %813, label %832

813:                                              ; preds = %812
  %814 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %815 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %814, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %816 unwind label %667

816:                                              ; preds = %813
  %817 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %815, ptr noundef @.str.150)
          to label %818 unwind label %667

818:                                              ; preds = %816
  %819 = load i32, ptr %45, align 4, !tbaa !13
  %820 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %817, i32 noundef %819)
          to label %821 unwind label %667

821:                                              ; preds = %818
  %822 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %820, ptr noundef @.str.142)
          to label %823 unwind label %667

823:                                              ; preds = %821
  %824 = load ptr, ptr %46, align 8, !tbaa !5
  %825 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %824, i32 0, i32 1
  %826 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %822, ptr noundef nonnull align 8 dereferenceable(168) %825)
          to label %827 unwind label %667

827:                                              ; preds = %823
  %828 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %826, ptr noundef @_ZSt3decRSt8ios_base)
          to label %829 unwind label %667

829:                                              ; preds = %827
  %830 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %828, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %831 unwind label %667

831:                                              ; preds = %829
  br label %832

832:                                              ; preds = %831, %812
  br label %833

833:                                              ; preds = %832
  br label %834

834:                                              ; preds = %833
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  br label %835

835:                                              ; preds = %834
  %836 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  br label %620

837:                                              ; preds = %763, %757, %691, %667
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #8
  br label %882

838:                                              ; preds = %622
  call void @llvm.lifetime.start.p0(i64 152, ptr %51) #8
  invoke void @_ZN3MIR9StatementC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %51)
          to label %839 unwind label %859

839:                                              ; preds = %838
  %840 = load ptr, ptr %19, align 8, !tbaa !5
  %841 = invoke noundef nonnull align 8 dereferenceable(152) ptr @_ZN3MIR9StatementaSEOS0_(ptr noundef nonnull align 8 dereferenceable(152) %840, ptr noundef nonnull align 8 dereferenceable(152) %51)
          to label %842 unwind label %863

842:                                              ; preds = %839
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %51) #8
  call void @llvm.lifetime.end.p0(i64 152, ptr %51) #8
  br label %843

843:                                              ; preds = %842
  %844 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %845 unwind label %606

845:                                              ; preds = %843
  br i1 %844, label %846, label %868

846:                                              ; preds = %845
  %847 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %848 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %847, ptr noundef @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %849 unwind label %606

849:                                              ; preds = %846
  %850 = load ptr, ptr %3, align 8, !tbaa !5
  %851 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %848, ptr noundef nonnull align 8 dereferenceable(120) %850)
          to label %852 unwind label %606

852:                                              ; preds = %849
  %853 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %851, ptr noundef @.str.151)
          to label %854 unwind label %606

854:                                              ; preds = %852
  %855 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %853, ptr noundef @_ZSt3decRSt8ios_base)
          to label %856 unwind label %606

856:                                              ; preds = %854
  %857 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %855, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %858 unwind label %606

858:                                              ; preds = %856
  br label %868

859:                                              ; preds = %838
  %860 = landingpad { ptr, i32 }
          cleanup
  %861 = extractvalue { ptr, i32 } %860, 0
  store ptr %861, ptr %11, align 8
  %862 = extractvalue { ptr, i32 } %860, 1
  store i32 %862, ptr %12, align 4
  br label %867

863:                                              ; preds = %839
  %864 = landingpad { ptr, i32 }
          cleanup
  %865 = extractvalue { ptr, i32 } %864, 0
  store ptr %865, ptr %11, align 8
  %866 = extractvalue { ptr, i32 } %864, 1
  store i32 %866, ptr %12, align 4
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %51) #8
  br label %867

867:                                              ; preds = %863, %859
  call void @llvm.lifetime.end.p0(i64 152, ptr %51) #8
  br label %882

868:                                              ; preds = %858, %845
  br label %869

869:                                              ; preds = %868
  br label %870

870:                                              ; preds = %869
  store i32 0, ptr %16, align 4
  br label %871

871:                                              ; preds = %870, %612
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #8
  br label %872

872:                                              ; preds = %871, %210
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %873

873:                                              ; preds = %872, %146, %133
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %874

874:                                              ; preds = %873, %113, %97
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  %875 = load i32, ptr %16, align 4
  switch i32 %875, label %877 [
    i32 0, label %876
  ]

876:                                              ; preds = %874
  store i32 0, ptr %16, align 4
  br label %877

877:                                              ; preds = %876, %874, %77
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  %878 = load i32, ptr %16, align 4
  switch i32 %878, label %897 [
    i32 0, label %879
    i32 3, label %880
  ]

879:                                              ; preds = %877
  br label %880

880:                                              ; preds = %879, %877
  %881 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %14) #8
  br label %65

882:                                              ; preds = %867, %837, %606, %583
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #8
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %26) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %26) #8
  br label %883

883:                                              ; preds = %882, %204, %203
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #8
  br label %884

884:                                              ; preds = %883, %138
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #8
  br label %885

885:                                              ; preds = %884, %134
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  br label %886

886:                                              ; preds = %885, %102
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #8
  br label %887

887:                                              ; preds = %886, %98
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #8
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #8
  br label %891

888:                                              ; preds = %67
  %889 = load i8, ptr %5, align 1, !tbaa !9, !range !15, !noundef !16
  %890 = trunc i8 %889 to i1
  store i32 1, ptr %16, align 4
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #8
  ret i1 %890

891:                                              ; preds = %887, %68
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #8
  br label %892

892:                                              ; preds = %891
  %893 = load ptr, ptr %11, align 8
  %894 = load i32, ptr %12, align 4
  %895 = insertvalue { ptr, i32 } poison, ptr %893, 0
  %896 = insertvalue { ptr, i32 } %895, i32 %894, 1
  resume { ptr, i32 } %896

897:                                              ; preds = %877, %761
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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)) #5

; 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)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIjSaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #5

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #6

; 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 nounwind uwtable
declare dso_local noundef ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8), i32 noundef) #3 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) #3 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) #3 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_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 align 2

; 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)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 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 void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_123visit_terminator_targetERKN3MIR10TerminatorESt8functionIFvRKjEE(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef) #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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)) #3

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 uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #6 align 2

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) #1

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8), i64 noundef) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_117visit_mir_lvaluesERN3MIR11TypeResolveERKNS0_8FunctionESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) #3

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) #4 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) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) #4 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)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) #4 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)) #4 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)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR9StatementC2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #3 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)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168)) #4 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) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR11TypeResolve13get_cur_blockEv(ptr noundef nonnull align 8 dereferenceable(120)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator7as_GotoEv(ptr noundef nonnull align 8 dereferenceable(168)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8)) #4 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 nonnull align 8 dereferenceable(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ23MIR_Optimise_GotoAssignRNS0_11TypeResolveERNS0_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvRKjEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS5_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #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 = { 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 #8 = { nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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 = !{!"long", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{i8 0, i8 2}
!16 = !{}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = !{!21, !14, i64 0}
!21 = !{!"_ZTSN3MIR10Terminator9Data_CallE", !14, i64 0, !14, i64 4, !22, i64 8, !28, i64 40, !30, i64 136}
!22 = !{!"_ZTSN3MIR6LValueE", !23, i64 0, !24, i64 8}
!23 = !{!"_ZTSN3MIR6LValue7StorageE", !12, i64 0}
!24 = !{!"_ZTSSt6vectorIN3MIR6LValue7WrapperESaIS2_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"_ZTSN3MIR10CallTargetE", !29, i64 0, !7, i64 8}
!29 = !{!"_ZTSN3MIR10CallTarget3TagE", !7, i64 0}
!30 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !31, i64 0}
!31 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !33, i64 0}
!33 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!34 = distinct !{!34, !18}
!35 = distinct !{!35, !18}
!36 = distinct !{!36, !18}
!37 = distinct !{!37, !18}


; 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.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.626 = type { i8 }
%class.anon.628 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::function.226" = type { %"class.std::_Function_base", ptr }
%class.anon.629 = type { ptr, ptr, ptr }
%"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.193" = type { %"class.std::_Function_base", ptr }
%class.anon.630 = type { ptr, ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.147" = type { ptr }
%"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.anon.631 = type { i8 }
%"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" }
%"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" }

@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [3 x i8], align 1
@.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.18 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.37 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.38 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.69 = external hidden unnamed_addr constant [7 x i8], align 1
@__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [24 x i8], align 1
@.str.137 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.138 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.139 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.140 = external hidden unnamed_addr constant [22 x i8], align 1
@__PRETTY_FUNCTION__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [70 x i8], align 1
@.str.141 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.142 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.143 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.144 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.145 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.146 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.147 = external hidden unnamed_addr constant [19 x i8], align 1
@.str.148 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.149 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.150 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.151 = external hidden unnamed_addr constant [10 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: nounwind
declare void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40)) unnamed_addr #2

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

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(96) %1) local_unnamed_addr #3 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.626, align 1
  %7 = alloca %"class.std::function", align 8
  %8 = alloca %class.anon.628, align 8
  %9 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca %"class.std::function.226", align 8
  %14 = alloca %class.anon.629, align 8
  %15 = alloca %"class.std::vector.111", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %18 = alloca i32, align 4
  %19 = alloca i8, align 1
  %20 = alloca %"class.std::function.193", align 8
  %21 = alloca %class.anon.630, align 8
  %22 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %23 = alloca %"class.__gnu_cxx::__normal_iterator.147", align 8
  %24 = alloca %"struct.MIR::LValue", align 8
  %25 = alloca %"struct.MIR::LValue", align 8
  %26 = alloca %"class.std::function", align 8
  %27 = alloca %class.anon.631, align 1
  %28 = alloca %"class.MIR::Statement", align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #8
  store i8 0, ptr %3, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #8
  %29 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  %30 = select i1 %29, ptr @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %5, ptr noundef nonnull align 1 dereferenceable(1) %6) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  store ptr %3, ptr %8, align 8, !tbaa !9
  call void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 8 dereferenceable(8) %8) #8
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %4, ptr noundef %30, ptr noundef nonnull %5, ptr noundef nonnull %7)
          to label %31 unwind label %43

31:                                               ; preds = %2
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #8
  %32 = getelementptr inbounds i8, ptr %1, i64 64
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %33 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  store ptr %33, ptr %9, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  %34 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  store ptr %34, ptr %10, align 8
  %35 = 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) #8
  br i1 %35, label %.lr.ph195, label %._crit_edge196

.lr.ph195:                                        ; preds = %31
  %36 = getelementptr inbounds i8, ptr %14, i64 8
  %37 = getelementptr inbounds i8, ptr %14, i64 16
  %38 = getelementptr inbounds i8, ptr %21, i64 8
  %39 = getelementptr inbounds i8, ptr %21, i64 16
  %40 = getelementptr inbounds i8, ptr %21, i64 24
  br label %45

._crit_edge196:                                   ; preds = %482, %31
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  %41 = load i8, ptr %3, align 1, !tbaa !5, !range !11, !noundef !12
  %42 = trunc nuw i8 %41 to i1
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #8
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #8
  ret i1 %42

43:                                               ; preds = %2
  %44 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %5) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %6) #8
  br label %487

45:                                               ; preds = %.lr.ph195, %482
  %46 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  %47 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %46) #8
  br i1 %47, label %482, label %48

48:                                               ; preds = %45
  %49 = call noundef ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  %50 = ptrtoint ptr %46 to i64
  %51 = ptrtoint ptr %49 to i64
  %52 = sub i64 %50, %51
  %53 = sdiv exact i64 %52, 192
  %54 = trunc i64 %53 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %54, i32 noundef 0)
  %55 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %46, i64 noundef 0) #8
  %56 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %55)
  br i1 %56, label %57, label %482

57:                                               ; preds = %48
  %58 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %55)
  %59 = getelementptr inbounds i8, ptr %58, i64 32
  %60 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %59)
  br i1 %60, label %61, label %482

61:                                               ; preds = %57
  %62 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %55)
  %63 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %55)
  %64 = getelementptr inbounds i8, ptr %63, i64 32
  %65 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %64)
  %66 = getelementptr inbounds i8, ptr %62, i64 8
  %67 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %66) #8
  br i1 %67, label %68, label %482

68:                                               ; preds = %61
  %69 = call noundef zeroext i1 @_ZNK3MIR6LValue7Storage9is_StaticEv(ptr noundef nonnull align 8 dereferenceable(8) %62)
  br i1 %69, label %482, label %70

70:                                               ; preds = %68
  %71 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %65)
  br i1 %71, label %72, label %482

72:                                               ; preds = %70
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #8
  store i32 0, ptr %11, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %12) #8
  store i32 0, ptr %12, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %14) #8
  store ptr %65, ptr %14, align 8, !tbaa !9
  store ptr %11, ptr %36, align 8, !tbaa !9
  store ptr %12, ptr %37, align 8, !tbaa !9
  invoke void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ23MIR_Optimise_GotoAssignRNS0_11TypeResolveERNS0_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %13, ptr noundef nonnull align 8 dereferenceable(24) %14)
          to label %73 unwind label %105

73:                                               ; preds = %72
  invoke void @_ZN12_GLOBAL__N_117visit_mir_lvaluesERN3MIR11TypeResolveERKNS0_8FunctionESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull align 8 dereferenceable(96) %1, ptr noundef nonnull %13)
          to label %74 unwind label %107

74:                                               ; preds = %73
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %54, i32 noundef 0)
  %75 = load i32, ptr %11, align 4, !tbaa !13
  %76 = icmp ugt i32 %75, 1
  %77 = load i32, ptr %12, align 4
  %78 = icmp ne i32 %77, 0
  %or.cond = select i1 %76, i1 true, i1 %78
  br i1 %or.cond, label %79, label %112

79:                                               ; preds = %74
  %80 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %81 unwind label %110

81:                                               ; preds = %79
  br i1 %80, label %82, label %481

82:                                               ; preds = %81
  %83 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %84 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %83, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %85 unwind label %110

85:                                               ; preds = %82
  %86 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %87 unwind label %110

87:                                               ; preds = %85
  %88 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %86, ptr noundef nonnull @.str.137)
          to label %89 unwind label %110

89:                                               ; preds = %87
  %90 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %88, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %91 unwind label %110

91:                                               ; preds = %89
  %92 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %90, ptr noundef nonnull @.str.138)
          to label %93 unwind label %110

93:                                               ; preds = %91
  %94 = load i32, ptr %11, align 4, !tbaa !13
  %95 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %92, i32 noundef %94)
          to label %96 unwind label %110

96:                                               ; preds = %93
  %97 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %95, ptr noundef nonnull @.str.139)
          to label %98 unwind label %110

98:                                               ; preds = %96
  %99 = load i32, ptr %12, align 4, !tbaa !13
  %100 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %97, i32 noundef %99)
          to label %101 unwind label %110

101:                                              ; preds = %98
  %102 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %100, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %103 unwind label %110

103:                                              ; preds = %101
  %104 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %102, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %481 unwind label %110

105:                                              ; preds = %72
  %106 = landingpad { ptr, i32 }
          cleanup
  br label %109

107:                                              ; preds = %73
  %108 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %13) #8
  br label %109

109:                                              ; preds = %107, %105
  %.pn = phi { ptr, i32 } [ %108, %107 ], [ %106, %105 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %14) #8
  br label %486

110:                                              ; preds = %128, %126, %124, %122, %120, %118, %115, %112, %103, %101, %98, %96, %93, %91, %89, %87, %85, %82, %79
  %111 = landingpad { ptr, i32 }
          cleanup
  br label %486

112:                                              ; preds = %74
  %113 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %114 unwind label %110

114:                                              ; preds = %112
  br i1 %113, label %115, label %130

115:                                              ; preds = %114
  %116 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %117 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %116, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %118 unwind label %110

118:                                              ; preds = %115
  %119 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %117, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %120 unwind label %110

120:                                              ; preds = %118
  %121 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %119, ptr noundef nonnull @.str.140)
          to label %122 unwind label %110

122:                                              ; preds = %120
  %123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %121, ptr noundef nonnull align 8 dereferenceable(152) %55)
          to label %124 unwind label %110

124:                                              ; preds = %122
  %125 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %123, ptr noundef nonnull @.str.18)
          to label %126 unwind label %110

126:                                              ; preds = %124
  %127 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %125, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %128 unwind label %110

128:                                              ; preds = %126
  %129 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %127, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %130 unwind label %110

130:                                              ; preds = %128, %114
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %15) #8
  call void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %131 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  store ptr %131, ptr %16, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  %132 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  store ptr %132, ptr %17, align 8
  %133 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #8
  br i1 %133, label %.lr.ph189, label %._crit_edge

._crit_edge:                                      ; preds = %.loopexit155, %130
  %.0113.lcssa = phi i32 [ 0, %130 ], [ %.10123, %.loopexit155 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  %134 = zext i32 %.0113.lcssa to i64
  %135 = call noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  %136 = icmp ugt i64 %135, %134
  br i1 %136, label %312, label %322

.lr.ph189:                                        ; preds = %130, %.loopexit155
  %.0113188 = phi i32 [ %.10123, %.loopexit155 ], [ 0, %130 ]
  %137 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #8
  %138 = call noundef ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %32) #8
  %139 = ptrtoint ptr %137 to i64
  %140 = ptrtoint ptr %138 to i64
  %141 = sub i64 %139, %140
  %142 = sdiv exact i64 %141, 192
  %143 = trunc i64 %142 to i32
  store i32 %143, ptr %18, align 4, !tbaa !13
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %19) #8
  store i8 0, ptr %19, align 1, !tbaa !5
  %144 = getelementptr inbounds i8, ptr %137, i64 24
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %21) #8
  store ptr %0, ptr %21, align 8, !tbaa !9
  store ptr %19, ptr %38, align 8, !tbaa !9
  store ptr %15, ptr %39, align 8, !tbaa !9
  store ptr %18, ptr %40, align 8, !tbaa !9
  invoke void @"_ZNSt8functionIFvRKjEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS5_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %20, ptr noundef nonnull align 8 dereferenceable(32) %21)
          to label %145 unwind label %149

145:                                              ; preds = %.lr.ph189
  invoke void @_ZN12_GLOBAL__N_123visit_terminator_targetERKN3MIR10TerminatorESt8functionIFvRKjEE(ptr noundef nonnull align 8 dereferenceable(168) %144, ptr noundef nonnull %20)
          to label %146 unwind label %151

146:                                              ; preds = %145
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  %147 = load i8, ptr %19, align 1, !tbaa !5, !range !11, !noundef !12
  %148 = trunc nuw i8 %147 to i1
  br i1 %148, label %.lr.ph184, label %.loopexit155

149:                                              ; preds = %.lr.ph189
  %150 = landingpad { ptr, i32 }
          cleanup
  br label %153

151:                                              ; preds = %145
  %152 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %20) #8
  br label %153

153:                                              ; preds = %151, %149
  %.pn139 = phi { ptr, i32 } [ %152, %151 ], [ %150, %149 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %21) #8
  br label %311

.lr.ph184:                                        ; preds = %146
  %154 = call noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %144)
  switch i32 %154, label %286 [
    i32 0, label %157
    i32 4, label %.lr.ph179
    i32 9, label %.lr.ph
  ]

155:                                              ; preds = %307, %305, %303, %301, %299, %296, %294, %292, %289, %286
  %156 = landingpad { ptr, i32 }
          cleanup
  br label %311

157:                                              ; preds = %.lr.ph184
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 5874, ptr noundef nonnull @__PRETTY_FUNCTION__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE) #9
  unreachable

158:                                              ; preds = %.invoke202, %.invoke199, %.invoke, %228, %226, %223, %221, %218, %216, %213, %210, %206, %204, %201, %199, %196, %194, %191, %189, %186, %183, %178, %172, %170, %168, %165, %162
  %159 = landingpad { ptr, i32 }
          cleanup
  br label %311

.lr.ph179:                                        ; preds = %.lr.ph184
  %160 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator7as_GotoEv(ptr noundef nonnull align 8 dereferenceable(168) %144)
  %161 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  br i1 %161, label %162, label %175

162:                                              ; preds = %.lr.ph179
  %163 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %164 unwind label %158

164:                                              ; preds = %162
  br i1 %163, label %165, label %.loopexit155

165:                                              ; preds = %164
  %166 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %167 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %166, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %168 unwind label %158

168:                                              ; preds = %165
  %169 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %167, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %170 unwind label %158

170:                                              ; preds = %168
  %171 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %169, ptr noundef nonnull @.str)
          to label %172 unwind label %158

172:                                              ; preds = %170
  %173 = load i32, ptr %18, align 4, !tbaa !13
  %174 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %171, i32 noundef %173)
          to label %.invoke202 unwind label %158

175:                                              ; preds = %.lr.ph179
  %176 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  %177 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %176)
  br i1 %177, label %178, label %210

178:                                              ; preds = %175
  %179 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  %180 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %179)
  %181 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %180, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %182 unwind label %158

182:                                              ; preds = %178
  br i1 %181, label %183, label %210

183:                                              ; preds = %182
  %184 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %185 unwind label %158

185:                                              ; preds = %183
  br i1 %184, label %186, label %208

186:                                              ; preds = %185
  %187 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %188 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %187, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %189 unwind label %158

189:                                              ; preds = %186
  %190 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %188, ptr noundef nonnull @.str)
          to label %191 unwind label %158

191:                                              ; preds = %189
  %192 = load i32, ptr %18, align 4, !tbaa !13
  %193 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %190, i32 noundef %192)
          to label %194 unwind label %158

194:                                              ; preds = %191
  %195 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %193, ptr noundef nonnull @.str.37)
          to label %196 unwind label %158

196:                                              ; preds = %194
  %197 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  %198 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %195, i64 noundef %197)
          to label %199 unwind label %158

199:                                              ; preds = %196
  %200 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %198, ptr noundef nonnull @.str.38)
          to label %201 unwind label %158

201:                                              ; preds = %199
  %202 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  %203 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %200, ptr noundef nonnull align 8 dereferenceable(152) %202)
          to label %204 unwind label %158

204:                                              ; preds = %201
  %205 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %203, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %206 unwind label %158

206:                                              ; preds = %204
  %207 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %205, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %208 unwind label %158

208:                                              ; preds = %206, %185
  %209 = add i32 %.0113188, 1
  br label %.loopexit155

210:                                              ; preds = %175, %182
  %211 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %212 unwind label %158

212:                                              ; preds = %210
  br i1 %211, label %213, label %.loopexit155

213:                                              ; preds = %212
  %214 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %215 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %214, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %216 unwind label %158

216:                                              ; preds = %213
  %217 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %215, ptr noundef nonnull @.str)
          to label %218 unwind label %158

218:                                              ; preds = %216
  %219 = load i32, ptr %18, align 4, !tbaa !13
  %220 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %217, i32 noundef %219)
          to label %221 unwind label %158

221:                                              ; preds = %218
  %222 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %220, ptr noundef nonnull @.str.37)
          to label %223 unwind label %158

223:                                              ; preds = %221
  %224 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  %225 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %222, i64 noundef %224)
          to label %226 unwind label %158

226:                                              ; preds = %223
  %227 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %225, ptr noundef nonnull @.str.38)
          to label %228 unwind label %158

228:                                              ; preds = %226
  %229 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %137) #8
  %230 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %227, ptr noundef nonnull align 8 dereferenceable(152) %229)
          to label %.invoke202 unwind label %158

.invoke202:                                       ; preds = %228, %172
  %231 = phi ptr [ %174, %172 ], [ %230, %228 ]
  %232 = phi ptr [ @.str.69, %172 ], [ @.str.141, %228 ]
  %233 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %231, ptr noundef nonnull %232)
          to label %.invoke199 unwind label %158

.invoke199:                                       ; preds = %.invoke202
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %233, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %.invoke unwind label %158

.invoke:                                          ; preds = %.invoke199
  %235 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.loopexit155 unwind label %158

.lr.ph:                                           ; preds = %.lr.ph184
  %236 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %144)
  %237 = load i32, ptr %236, align 8, !tbaa !15
  %238 = call noundef i32 @_ZNK3MIR11TypeResolve13get_cur_blockEv(ptr noundef nonnull align 8 dereferenceable(120) %0)
  %.not = icmp eq i32 %237, %238
  br i1 %.not, label %258, label %241

239:                                              ; preds = %.invoke203, %.invoke200, %.invoke197, %277, %275, %272, %270, %268, %265, %262, %258, %256, %254, %251, %249, %247, %244, %241
  %240 = landingpad { ptr, i32 }
          cleanup
  br label %311

241:                                              ; preds = %.lr.ph
  %242 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %243 unwind label %239

243:                                              ; preds = %241
  br i1 %242, label %244, label %.loopexit155

244:                                              ; preds = %243
  %245 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %246 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %245, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %247 unwind label %239

247:                                              ; preds = %244
  %248 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %246, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %249 unwind label %239

249:                                              ; preds = %247
  %250 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %248, ptr noundef nonnull @.str)
          to label %251 unwind label %239

251:                                              ; preds = %249
  %252 = load i32, ptr %18, align 4, !tbaa !13
  %253 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %250, i32 noundef %252)
          to label %254 unwind label %239

254:                                              ; preds = %251
  %255 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %253, ptr noundef nonnull @.str.142)
          to label %256 unwind label %239

256:                                              ; preds = %254
  %257 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %255, ptr noundef nonnull align 8 dereferenceable(168) %144)
          to label %.invoke203 unwind label %239

258:                                              ; preds = %.lr.ph
  %259 = getelementptr inbounds i8, ptr %236, i64 8
  %260 = invoke noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %259, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %261 unwind label %239

261:                                              ; preds = %258
  br i1 %260, label %262, label %284

262:                                              ; preds = %261
  %263 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %264 unwind label %239

264:                                              ; preds = %262
  br i1 %263, label %265, label %.loopexit155

265:                                              ; preds = %264
  %266 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %267 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %266, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %268 unwind label %239

268:                                              ; preds = %265
  %269 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %267, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %270 unwind label %239

270:                                              ; preds = %268
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %269, ptr noundef nonnull @.str)
          to label %272 unwind label %239

272:                                              ; preds = %270
  %273 = load i32, ptr %18, align 4, !tbaa !13
  %274 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %271, i32 noundef %273)
          to label %275 unwind label %239

275:                                              ; preds = %272
  %276 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %274, ptr noundef nonnull @.str.142)
          to label %277 unwind label %239

277:                                              ; preds = %275
  %278 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %276, ptr noundef nonnull align 8 dereferenceable(168) %144)
          to label %.invoke203 unwind label %239

.invoke203:                                       ; preds = %277, %256
  %279 = phi ptr [ %257, %256 ], [ %278, %277 ]
  %280 = phi ptr [ @.str.143, %256 ], [ @.str.144, %277 ]
  %281 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %279, ptr noundef nonnull %280)
          to label %.invoke200 unwind label %239

.invoke200:                                       ; preds = %.invoke203
  %282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %281, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %.invoke197 unwind label %239

.invoke197:                                       ; preds = %.invoke200
  %283 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %282, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.loopexit155 unwind label %239

284:                                              ; preds = %261
  %285 = add i32 %.0113188, 1
  br label %.loopexit155

286:                                              ; preds = %.lr.ph184
  %287 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %288 unwind label %155

288:                                              ; preds = %286
  br i1 %287, label %289, label %.loopexit155

289:                                              ; preds = %288
  %290 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %291 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %290, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %292 unwind label %155

292:                                              ; preds = %289
  %293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %291, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %294 unwind label %155

294:                                              ; preds = %292
  %295 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %293, ptr noundef nonnull @.str)
          to label %296 unwind label %155

296:                                              ; preds = %294
  %297 = load i32, ptr %18, align 4, !tbaa !13
  %298 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %295, i32 noundef %297)
          to label %299 unwind label %155

299:                                              ; preds = %296
  %300 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %298, ptr noundef nonnull @.str.142)
          to label %301 unwind label %155

301:                                              ; preds = %299
  %302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %300, ptr noundef nonnull align 8 dereferenceable(168) %144)
          to label %303 unwind label %155

303:                                              ; preds = %301
  %304 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %302, ptr noundef nonnull @.str.145)
          to label %305 unwind label %155

305:                                              ; preds = %303
  %306 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %304, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %307 unwind label %155

307:                                              ; preds = %305
  %308 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %306, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.loopexit155 unwind label %155

.loopexit155:                                     ; preds = %.invoke197, %.invoke, %243, %264, %284, %164, %212, %208, %307, %288, %146
  %.10123 = phi i32 [ %.0113188, %146 ], [ %.0113188, %307 ], [ %.0113188, %288 ], [ %.0113188, %164 ], [ %209, %208 ], [ %.0113188, %212 ], [ %.0113188, %243 ], [ %.0113188, %264 ], [ %285, %284 ], [ %.0113188, %.invoke ], [ %.0113188, %.invoke197 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  %309 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  %310 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %17) #8
  br i1 %310, label %.lr.ph189, label %._crit_edge

311:                                              ; preds = %155, %158, %239, %153
  %.pn141.pn = phi { ptr, i32 } [ %.pn139, %153 ], [ %156, %155 ], [ %240, %239 ], [ %159, %158 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  br label %485

312:                                              ; preds = %._crit_edge
  %313 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %314 unwind label %320

314:                                              ; preds = %312
  br i1 %313, label %315, label %480

315:                                              ; preds = %314
  %316 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %317 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %316, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %318 unwind label %320

318:                                              ; preds = %315
  %319 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %317, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %.invoke204 unwind label %320

320:                                              ; preds = %.invoke204, %.invoke201, %.invoke198, %468, %465, %462, %318, %315, %312
  %321 = landingpad { ptr, i32 }
          cleanup
  br label %485

322:                                              ; preds = %._crit_edge
  store i8 1, ptr %3, align 1, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %22) #8
  %323 = call ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  store ptr %323, ptr %22, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %23) #8
  %324 = call ptr @_ZNSt6vectorIjSaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  store ptr %324, ptr %23, align 8
  %325 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  br i1 %325, label %.lr.ph192, label %._crit_edge193

._crit_edge193:                                   ; preds = %456, %322
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  call void @llvm.lifetime.start.p0(i64 152, ptr nonnull %28) #8
  invoke void @_ZN3MIR9StatementC2Ev(ptr noundef nonnull align 8 dereferenceable(152) %28)
          to label %460 unwind label %475

.lr.ph192:                                        ; preds = %322, %456
  %326 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #8
  %327 = load i32, ptr %326, align 4, !tbaa !13
  %328 = zext i32 %327 to i64
  %329 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %32, i64 noundef %328) #8
  %330 = getelementptr inbounds i8, ptr %329, i64 24
  %331 = call noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %330)
  br i1 %331, label %332, label %366

332:                                              ; preds = %.lr.ph192
  %333 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %330)
  %334 = getelementptr inbounds i8, ptr %333, i64 8
  %335 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %334, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %336 unwind label %.loopexit156

336:                                              ; preds = %332
  br i1 %335, label %337, label %366

337:                                              ; preds = %336
  %338 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %339 unwind label %.loopexit156

339:                                              ; preds = %337
  br i1 %338, label %340, label %355

340:                                              ; preds = %339
  %341 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %342 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %341, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %343 unwind label %.loopexit156

343:                                              ; preds = %340
  %344 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %342, ptr noundef nonnull @.str.147)
          to label %345 unwind label %.loopexit156

345:                                              ; preds = %343
  %346 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %344, i32 noundef %327)
          to label %347 unwind label %.loopexit156

347:                                              ; preds = %345
  %348 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %346, ptr noundef nonnull @.str.148)
          to label %349 unwind label %.loopexit156

349:                                              ; preds = %347
  %350 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %348, ptr noundef nonnull align 8 dereferenceable(168) %330)
          to label %351 unwind label %.loopexit156

351:                                              ; preds = %349
  %352 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %350, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %353 unwind label %.loopexit156

353:                                              ; preds = %351
  %354 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %352, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %355 unwind label %.loopexit156

.loopexit156:                                     ; preds = %332, %337, %340, %343, %345, %347, %349, %351, %353, %371, %376, %379, %382, %384, %386, %388, %391, %393, %413, %416, %419, %421, %423, %425, %429, %431, %434, %436, %438, %441, %444, %446, %448, %450, %452, %454
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %459

.loopexit.split-lp:                               ; preds = %407
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %459

355:                                              ; preds = %353, %339
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %24) #8
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %24, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %356 unwind label %361

356:                                              ; preds = %355
  %357 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %330)
  %358 = getelementptr inbounds i8, ptr %357, i64 8
  %359 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %358, ptr noundef nonnull align 8 dereferenceable(32) %24)
          to label %360 unwind label %363

360:                                              ; preds = %356
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %411

361:                                              ; preds = %355
  %362 = landingpad { ptr, i32 }
          cleanup
  br label %365

363:                                              ; preds = %356
  %364 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %24) #8
  br label %365

365:                                              ; preds = %363, %361
  %.pn135 = phi { ptr, i32 } [ %364, %363 ], [ %362, %361 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %24) #8
  br label %459

366:                                              ; preds = %336, %.lr.ph192
  %367 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  br i1 %367, label %406, label %368

368:                                              ; preds = %366
  %369 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  %370 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %369)
  br i1 %370, label %371, label %406

371:                                              ; preds = %368
  %372 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  %373 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %372)
  %374 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %373, ptr noundef nonnull align 8 dereferenceable(32) %65)
          to label %375 unwind label %.loopexit156

375:                                              ; preds = %371
  br i1 %374, label %376, label %406

376:                                              ; preds = %375
  %377 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %378 unwind label %.loopexit156

378:                                              ; preds = %376
  br i1 %377, label %379, label %395

379:                                              ; preds = %378
  %380 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %381 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %380, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %382 unwind label %.loopexit156

382:                                              ; preds = %379
  %383 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %381, ptr noundef nonnull @.str.147)
          to label %384 unwind label %.loopexit156

384:                                              ; preds = %382
  %385 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %383, i32 noundef %327)
          to label %386 unwind label %.loopexit156

386:                                              ; preds = %384
  %387 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %385, ptr noundef nonnull @.str.149)
          to label %388 unwind label %.loopexit156

388:                                              ; preds = %386
  %389 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  %390 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %387, ptr noundef nonnull align 8 dereferenceable(152) %389)
          to label %391 unwind label %.loopexit156

391:                                              ; preds = %388
  %392 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %390, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %393 unwind label %.loopexit156

393:                                              ; preds = %391
  %394 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %392, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %395 unwind label %.loopexit156

395:                                              ; preds = %393, %378
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %25) #8
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %25, ptr noundef nonnull align 8 dereferenceable(32) %62)
          to label %396 unwind label %401

396:                                              ; preds = %395
  %397 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  %398 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %397)
  %399 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %398, ptr noundef nonnull align 8 dereferenceable(32) %25)
          to label %400 unwind label %403

400:                                              ; preds = %396
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %411

401:                                              ; preds = %395
  %402 = landingpad { ptr, i32 }
          cleanup
  br label %405

403:                                              ; preds = %396
  %404 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %25) #8
  br label %405

405:                                              ; preds = %403, %401
  %.pn133 = phi { ptr, i32 } [ %404, %403 ], [ %402, %401 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %25) #8
  br label %459

406:                                              ; preds = %366, %368, %375
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %27) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 1 dereferenceable(1) %27) #8
  invoke void @_ZNK3MIR11TypeResolve10print_todoESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %26)
          to label %407 unwind label %409

407:                                              ; preds = %406
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #8
  %408 = call ptr @__cxa_allocate_exception(i64 8) #8
  store ptr @.str.11, ptr %408, align 16, !tbaa !9
  invoke void @__cxa_throw(ptr nonnull %408, ptr nonnull @_ZTIPKc, ptr null) #10
          to label %488 unwind label %.loopexit.split-lp

409:                                              ; preds = %406
  %410 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %27) #8
  br label %459

411:                                              ; preds = %400, %360
  %412 = call noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  br i1 %412, label %438, label %413

413:                                              ; preds = %411
  %414 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %415 unwind label %.loopexit156

415:                                              ; preds = %413
  br i1 %414, label %416, label %438

416:                                              ; preds = %415
  %417 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %418 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %417, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %419 unwind label %.loopexit156

419:                                              ; preds = %416
  %420 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %418, ptr noundef nonnull @.str.150)
          to label %421 unwind label %.loopexit156

421:                                              ; preds = %419
  %422 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %420, i32 noundef %327)
          to label %423 unwind label %.loopexit156

423:                                              ; preds = %421
  %424 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %422, ptr noundef nonnull @.str.37)
          to label %425 unwind label %.loopexit156

425:                                              ; preds = %423
  %426 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  %427 = add i64 %426, -1
  %428 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEm(ptr noundef nonnull align 8 dereferenceable(8) %424, i64 noundef %427)
          to label %429 unwind label %.loopexit156

429:                                              ; preds = %425
  %430 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %428, ptr noundef nonnull @.str.38)
          to label %431 unwind label %.loopexit156

431:                                              ; preds = %429
  %432 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24) %329) #8
  %433 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %430, ptr noundef nonnull align 8 dereferenceable(152) %432)
          to label %434 unwind label %.loopexit156

434:                                              ; preds = %431
  %435 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %433, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %436 unwind label %.loopexit156

436:                                              ; preds = %434
  %437 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %435, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %438 unwind label %.loopexit156

438:                                              ; preds = %411, %436, %415
  %439 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %440 unwind label %.loopexit156

440:                                              ; preds = %438
  br i1 %439, label %441, label %456

441:                                              ; preds = %440
  %442 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %443 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %442, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %444 unwind label %.loopexit156

444:                                              ; preds = %441
  %445 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %443, ptr noundef nonnull @.str.150)
          to label %446 unwind label %.loopexit156

446:                                              ; preds = %444
  %447 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %445, i32 noundef %327)
          to label %448 unwind label %.loopexit156

448:                                              ; preds = %446
  %449 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %447, ptr noundef nonnull @.str.142)
          to label %450 unwind label %.loopexit156

450:                                              ; preds = %448
  %451 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %449, ptr noundef nonnull align 8 dereferenceable(168) %330)
          to label %452 unwind label %.loopexit156

452:                                              ; preds = %450
  %453 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %451, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %454 unwind label %.loopexit156

454:                                              ; preds = %452
  %455 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %453, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %456 unwind label %.loopexit156

456:                                              ; preds = %454, %440
  %457 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %22) #8
  %458 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(ptr noundef nonnull align 8 dereferenceable(8) %22, ptr noundef nonnull align 8 dereferenceable(8) %23) #8
  br i1 %458, label %.lr.ph192, label %._crit_edge193

459:                                              ; preds = %.loopexit156, %.loopexit.split-lp, %409, %405, %365
  %.pn137 = phi { ptr, i32 } [ %.pn135, %365 ], [ %410, %409 ], [ %.pn133, %405 ], [ %lpad.loopexit, %.loopexit156 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %22) #8
  br label %485

460:                                              ; preds = %._crit_edge193
  %461 = invoke noundef nonnull align 8 dereferenceable(152) ptr @_ZN3MIR9StatementaSEOS0_(ptr noundef nonnull align 8 dereferenceable(152) %55, ptr noundef nonnull align 8 dereferenceable(152) %28)
          to label %462 unwind label %477

462:                                              ; preds = %460
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %28) #8
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %28) #8
  %463 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %464 unwind label %320

464:                                              ; preds = %462
  br i1 %463, label %465, label %480

465:                                              ; preds = %464
  %466 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !13
  %467 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %466, ptr noundef nonnull @__func__._Z23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS_8FunctionE)
          to label %468 unwind label %320

468:                                              ; preds = %465
  %469 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %467, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %.invoke204 unwind label %320

.invoke204:                                       ; preds = %318, %468
  %470 = phi ptr [ %469, %468 ], [ %319, %318 ]
  %471 = phi ptr [ @.str.151, %468 ], [ @.str.146, %318 ]
  %472 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %470, ptr noundef nonnull %471)
          to label %.invoke201 unwind label %320

.invoke201:                                       ; preds = %.invoke204
  %473 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %472, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %.invoke198 unwind label %320

.invoke198:                                       ; preds = %.invoke201
  %474 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %473, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %480 unwind label %320

475:                                              ; preds = %._crit_edge193
  %476 = landingpad { ptr, i32 }
          cleanup
  br label %479

477:                                              ; preds = %460
  %478 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152) %28) #8
  br label %479

479:                                              ; preds = %477, %475
  %.pn131 = phi { ptr, i32 } [ %478, %477 ], [ %476, %475 ]
  call void @llvm.lifetime.end.p0(i64 152, ptr nonnull %28) #8
  br label %485

480:                                              ; preds = %.invoke198, %464, %314
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #8
  br label %481

481:                                              ; preds = %81, %103, %480
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  br label %482

482:                                              ; preds = %48, %57, %70, %61, %68, %481, %45
  %483 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %9) #8
  %484 = 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) #8
  br i1 %484, label %45, label %._crit_edge196

485:                                              ; preds = %479, %459, %320, %311
  %.pn141.pn.pn = phi { ptr, i32 } [ %.pn141.pn, %311 ], [ %321, %320 ], [ %.pn137, %459 ], [ %.pn131, %479 ]
  call void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %15) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %15) #8
  br label %486

486:                                              ; preds = %485, %110, %109
  %.pn145 = phi { ptr, i32 } [ %111, %110 ], [ %.pn141.pn.pn, %485 ], [ %.pn, %109 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %12) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #8
  br label %487

487:                                              ; preds = %486, %43
  %.pn145.pn = phi { ptr, i32 } [ %.pn145, %486 ], [ %44, %43 ]
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %4) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %3) #8
  resume { ptr, i32 } %.pn145.pn

488:                                              ; preds = %407
  unreachable
}

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #5

; 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIjSaIjEE5beginEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local ptr @_ZNSt6vectorIjSaIjEE3endEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZN9__gnu_cxxneIPjSt6vectorIjSaIjEEEEbRKNS_17__normal_iteratorIT_T0_EESA_(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 noundef nonnull align 4 dereferenceable(4) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPjSt6vectorIjSaIjEEEdeEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE5emptyEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6

; 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 nounwind uwtable
declare dso_local noundef ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE4dataEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #3 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 #3 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 #3 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_iteratorIPjSt6vectorIjSaIjEEEppEv(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #4 align 2

; 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 void @_ZNSt6vectorIjSaIjEEC2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZNKSt6vectorIjSaIjEE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_123visit_terminator_targetERKN3MIR10TerminatorESt8functionIFvRKjEE(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef) local_unnamed_addr #3

; Function Attrs: noreturn nounwind
declare void @__assert_fail(ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #7

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt6vectorIjSaIjEED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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 #3

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 uwtable
declare dso_local noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6 align 2

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

declare noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(32)) 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 #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN3MIR9StatementD2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZN12_GLOBAL__N_117visit_mir_lvaluesERN3MIR11TypeResolveERKNS0_8FunctionESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef nonnull align 8 dereferenceable(96), ptr noundef) local_unnamed_addr #3

; 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 #4 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 #4 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 #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #4 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 #4 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 #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZN3MIR9StatementC2Ev(ptr noundef nonnull align 8 dereferenceable(152)) unnamed_addr #3 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 #3 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 #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152)) local_unnamed_addr #4 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 #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR11TypeResolve13get_cur_blockEv(ptr noundef nonnull align 8 dereferenceable(120)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator7as_GotoEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE4backEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 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 #4 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 nonnull align 8 dereferenceable(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ23MIR_Optimise_GotoAssignRNS0_11TypeResolveERNS0_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @"_ZNSt8functionIFvRKjEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS5_8FunctionEE3$_3vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) unnamed_addr #3 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ23MIR_Optimise_GotoAssignRN3MIR11TypeResolveERNS4_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 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 = { 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 #3 = { 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 #4 = { 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 #5 = { 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 #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 = { 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 #8 = { nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { 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 = !{i8 0, i8 2}
!12 = !{}
!13 = !{!14, !14, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!16, !14, i64 0}
!16 = !{!"_ZTSN3MIR10Terminator9Data_CallE", !14, i64 0, !14, i64 4, !17, i64 8, !24, i64 40, !26, i64 136}
!17 = !{!"_ZTSN3MIR6LValueE", !18, i64 0, !20, i64 8}
!18 = !{!"_ZTSN3MIR6LValue7StorageE", !19, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = !{!"_ZTSSt6vectorIN3MIR6LValue7WrapperESaIS2_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}
!24 = !{!"_ZTSN3MIR10CallTargetE", !25, i64 0, !7, i64 8}
!25 = !{!"_ZTSN3MIR10CallTarget3TagE", !7, i64 0}
!26 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !27, i64 0}
!27 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !28, i64 0}
!28 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !29, i64 0}
!29 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !10, i64 0, !10, i64 8, !10, i64 16}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass