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

; 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.572 = type { i8 }
%class.anon.574 = type { ptr }
%struct.anon = type { %"class.std::vector.575" }
%"class.std::vector.575" = type { %"struct.std::_Vector_base.576" }
%"struct.std::_Vector_base.576" = type { %"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl" }
%"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl" = type { %"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.577" = type { i8 }
%"class.std::function.226" = type { %"class.std::_Function_base", ptr }
%class.anon.580 = type { ptr }
%"class.std::vector.581" = type { %"struct.std::_Vector_base.582" }
%"struct.std::_Vector_base.582" = type { %"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.586 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.260" = type { ptr }
%class.anon.587 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.589" = type { ptr }
%"class.MIR::LValue::CRef" = type { %"class.MIR::LValue::RefCommon" }
%"class.MIR::LValue::RefCommon" = type { ptr, i64 }
%class.anon.590 = type { ptr }
%class.anon.591 = type { ptr, ptr }
%"struct.std::pair.592" = type { %"struct.MIR::LValue", %"class.MIR::RValue" }
%"struct.MIR::LValue" = type { %"class.MIR::LValue::Storage", %"class.std::vector.106" }
%"class.MIR::LValue::Storage" = type { i64 }
%"class.std::vector.106" = type { %"struct.std::_Vector_base.107" }
%"struct.std::_Vector_base.107" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::RValue" = type { i32, %"union.MIR::RValue::DataUnion" }
%"union.MIR::RValue::DataUnion" = type { %"struct.MIR::RValue::Data_BinOp" }
%"struct.MIR::RValue::Data_BinOp" = type { %"class.MIR::Param", i32, %"class.MIR::Param" }
%"class.MIR::Param" = type { i32, %"union.MIR::Param::DataUnion" }
%"union.MIR::Param::DataUnion" = type { %"struct.MIR::Param::Data_Borrow" }
%"struct.MIR::Param::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%"class.std::function.267" = type { %"class.std::_Function_base", ptr }
%class.anon.594 = type { ptr, ptr, ptr }
%class.anon.595 = type { ptr, ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.148" = type { ptr }
%class.anon.596 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.189" = type { ptr }
%class.anon.598 = type { i8 }
%class.anon.600 = type { ptr }
%class.anon.601 = type { ptr }
%class.anon.602 = type { ptr }
%class.anon.603 = type { ptr, ptr }
%"class.MIR::Function" = type { %"class.std::vector.20", %"class.std::vector.25", %"class.std::vector.29", %"class.MIR::EnumCachePtr" }
%"class.std::vector.20" = type { %"struct.std::_Vector_base.21" }
%"struct.std::_Vector_base.21" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl" = type { %"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" }
%"struct.std::_Vector_base<HIR::TypeRef, std::allocator<HIR::TypeRef>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.25" = type { %"struct.std::_Bvector_base" }
%"struct.std::_Bvector_base" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl" = type { %"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" }
%"struct.std::_Bvector_base<std::allocator<bool>>::_Bvector_impl_data" = type { %"struct.std::_Bit_iterator", %"struct.std::_Bit_iterator", ptr }
%"struct.std::_Bit_iterator" = type { %"struct.std::_Bit_iterator_base.base", [4 x i8] }
%"struct.std::_Bit_iterator_base.base" = type <{ ptr, i32 }>
%"class.std::vector.29" = type { %"struct.std::_Vector_base.30" }
%"struct.std::_Vector_base.30" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::BasicBlock, std::allocator<MIR::BasicBlock>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::EnumCachePtr" = type { ptr }
%"struct.MIR::BasicBlock" = type { %"class.std::vector.101", %"class.MIR::Terminator" }
%"class.std::vector.101" = type { %"struct.std::_Vector_base.102" }
%"struct.std::_Vector_base.102" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::Statement, std::allocator<MIR::Statement>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"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 }
%"struct.MIR::Statement::Data_Assign" = type { %"struct.MIR::LValue", %"class.MIR::RValue" }
%struct.ValUse = type { i32, i32, i32 }

@g_debug_indent_level = external global i32, align 4
@.str.8 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [19 x i8], align 1
@__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [40 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [86 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [30 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
declare dso_local void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef) #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_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.572, align 1
  %9 = alloca %"class.std::function", align 8
  %10 = alloca %class.anon.574, align 8
  %11 = alloca ptr, align 8
  %12 = alloca i32, align 4
  %13 = alloca %struct.anon, align 8
  %14 = alloca %"class.std::allocator.577", align 1
  %15 = alloca %"class.std::function.226", align 8
  %16 = alloca %class.anon.580, align 8
  %17 = alloca %"class.std::vector.581", align 8
  %18 = alloca %class.anon.586, align 8
  %19 = alloca ptr, align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca i8, align 1
  %29 = alloca ptr, align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.260", align 8
  %31 = alloca %"class.__gnu_cxx::__normal_iterator.260", align 8
  %32 = alloca %class.anon.587, align 1
  %33 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %34 = alloca %"class.MIR::LValue::CRef", align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %36 = alloca i8, align 1
  %37 = alloca %class.anon.590, align 8
  %38 = alloca i8, align 1
  %39 = alloca i8, align 1
  %40 = alloca i32, align 4
  %41 = alloca ptr, align 8
  %42 = alloca %"class.std::function.226", align 8
  %43 = alloca %"class.std::function.226", align 8
  %44 = alloca %class.anon.591, align 8
  %45 = alloca ptr, align 8
  %46 = alloca ptr, align 8
  %47 = alloca ptr, align 8
  %48 = alloca ptr, align 8
  %49 = alloca ptr, align 8
  %50 = alloca ptr, align 8
  %51 = alloca ptr, align 8
  %52 = alloca ptr, align 8
  %53 = alloca ptr, align 8
  %54 = alloca %"struct.std::pair.592", align 8
  %55 = alloca %"struct.MIR::LValue", align 8
  %56 = alloca %"class.MIR::RValue", align 8
  %57 = alloca i32, align 4
  %58 = alloca ptr, align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %60 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %61 = alloca ptr, align 8
  %62 = alloca %"class.std::function.267", align 8
  %63 = alloca %class.anon.594, align 8
  %64 = alloca i32, align 4
  %65 = alloca i32, align 4
  %66 = alloca %class.anon.595, align 8
  %67 = alloca i32, align 4
  %68 = alloca ptr, align 8
  %69 = alloca ptr, align 8
  %70 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %71 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %72 = alloca ptr, align 8
  %73 = alloca %"class.std::function.267", align 8
  %74 = alloca %"class.std::function.267", align 8
  %75 = alloca %"class.std::function", align 8
  %76 = alloca %class.anon.596, align 1
  %77 = alloca ptr, align 8
  %78 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %79 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %80 = alloca ptr, align 8
  %81 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %82 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %83 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %84 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %85 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %86 = alloca %"class.MIR::LValue::CRef", align 8
  %87 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %88 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %89 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %90 = alloca %"class.std::function", align 8
  %91 = alloca %class.anon.598, align 1
  %92 = alloca ptr, align 8
  %93 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %94 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %95 = alloca ptr, align 8
  %96 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %97 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %98 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %99 = alloca ptr, align 8
  %100 = alloca ptr, align 8
  %101 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %102 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %103 = alloca ptr, align 8
  %104 = alloca ptr, align 8
  %105 = alloca i8, align 1
  %106 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %107 = alloca %class.anon.600, align 8
  %108 = alloca %"class.std::function.226", align 8
  %109 = alloca %class.anon.601, align 8
  %110 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %111 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %112 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %113 = alloca ptr, align 8
  %114 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %115 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %116 = alloca ptr, align 8
  %117 = alloca ptr, align 8
  %118 = alloca ptr, align 8
  %119 = alloca ptr, align 8
  %120 = alloca ptr, align 8
  %121 = alloca ptr, align 8
  %122 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %123 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %124 = alloca ptr, align 8
  %125 = alloca %class.anon.602, align 8
  %126 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %127 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %128 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %129 = alloca ptr, align 8
  %130 = alloca %"struct.MIR::LValue", align 8
  %131 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %132 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %133 = alloca %"class.std::function.226", align 8
  %134 = alloca %class.anon.603, align 8
  %135 = alloca ptr, align 8
  %136 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %137 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %138 = alloca ptr, align 8
  %139 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %140 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %141 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %142 = alloca ptr, align 8
  %143 = alloca ptr, align 8
  %144 = alloca ptr, align 8
  %145 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %146 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %147 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %148 = alloca ptr, align 8
  %149 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %150 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %151 = alloca %"class.__gnu_cxx::__normal_iterator.189", 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) #9
  call void @llvm.lifetime.start.p0(i64 40, ptr %6) #9
  %152 = call noundef zeroext i1 @_Z13debug_enabledv()
  %153 = zext i1 %152 to i64
  %154 = select i1 %152, ptr @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr %8) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_0vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %7, ptr noundef nonnull align 1 dereferenceable(1) %8) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #9
  %155 = getelementptr inbounds %class.anon.574, ptr %10, i32 0, i32 0
  store ptr %5, ptr %155, align 8, !tbaa !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %9, ptr noundef nonnull align 8 dereferenceable(8) %10) #9
  invoke void @_ZN8TraceLogC1EPKcSt8functionIFvRSoEES5_(ptr noundef nonnull align 8 dereferenceable(40) %6, ptr noundef %154, ptr noundef %7, ptr noundef %9)
          to label %156 unwind label %178

156:                                              ; preds = %2
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %9) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #9
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %7) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %8) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %13) #9
  %157 = getelementptr inbounds %struct.anon, ptr %13, i32 0, i32 0
  %158 = load ptr, ptr %4, align 8, !tbaa !5
  %159 = getelementptr inbounds %"class.MIR::Function", ptr %158, i32 0, i32 0
  %160 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %159) #9
  call void @llvm.lifetime.start.p0(i64 1, ptr %14) #9
  call void @_ZNSaIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEE6ValUseEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #9
  invoke void @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEC2EmRKS6_(ptr noundef nonnull align 8 dereferenceable(24) %157, i64 noundef %160, ptr noundef nonnull align 1 dereferenceable(1) %14)
          to label %161 unwind label %182

161:                                              ; preds = %156
  call void @_ZNSt15__new_allocatorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #9
  %162 = load ptr, ptr %3, align 8, !tbaa !5
  %163 = load ptr, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #9
  %164 = getelementptr inbounds %class.anon.580, ptr %16, i32 0, i32 0
  store ptr %13, ptr %164, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #9
  invoke void @_ZN12_GLOBAL__N_117visit_mir_lvaluesERN3MIR11TypeResolveERKNS0_8FunctionESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(120) %162, ptr noundef nonnull align 8 dereferenceable(96) %163, ptr noundef %15)
          to label %165 unwind label %186

165:                                              ; preds = %161
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #9
  call void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %166 = getelementptr inbounds %class.anon.586, ptr %18, i32 0, i32 0
  store ptr %17, ptr %166, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %167 = load ptr, ptr %4, align 8, !tbaa !5
  %168 = getelementptr inbounds %"class.MIR::Function", ptr %167, i32 0, i32 2
  store ptr %168, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %169 = load ptr, ptr %19, align 8, !tbaa !5
  %170 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %169) #9
  %171 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %170, ptr %171, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %172 = load ptr, ptr %19, align 8, !tbaa !5
  %173 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %172) #9
  %174 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %21, i32 0, i32 0
  store ptr %173, ptr %174, align 8
  br label %175

175:                                              ; preds = %918, %165
  %176 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %20, ptr noundef nonnull align 8 dereferenceable(8) %21) #9
  br i1 %176, label %190, label %177

177:                                              ; preds = %175
  store i32 2, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %921

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

182:                                              ; preds = %156
  %183 = landingpad { ptr, i32 }
          cleanup
  %184 = extractvalue { ptr, i32 } %183, 0
  store ptr %184, ptr %11, align 8
  %185 = extractvalue { ptr, i32 } %183, 1
  store i32 %185, ptr %12, align 4
  call void @_ZNSt15__new_allocatorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %14) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %14) #9
  br label %2134

186:                                              ; preds = %161
  %187 = landingpad { ptr, i32 }
          cleanup
  %188 = extractvalue { ptr, i32 } %187, 0
  store ptr %188, ptr %11, align 8
  %189 = extractvalue { ptr, i32 } %187, 1
  store i32 %189, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %15) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #9
  br label %2133

190:                                              ; preds = %175
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %191 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  store ptr %191, ptr %23, align 8, !tbaa !5
  %192 = load ptr, ptr %23, align 8, !tbaa !5
  %193 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %192, i32 0, i32 1
  %194 = invoke noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %193)
          to label %195 unwind label %198

195:                                              ; preds = %190
  %196 = icmp eq i32 %194, 0
  br i1 %196, label %197, label %202

197:                                              ; preds = %195
  store i32 3, ptr %22, align 4
  br label %915

198:                                              ; preds = %190
  %199 = landingpad { ptr, i32 }
          cleanup
  %200 = extractvalue { ptr, i32 } %199, 0
  store ptr %200, ptr %11, align 8
  %201 = extractvalue { ptr, i32 } %199, 1
  store i32 %201, ptr %12, align 4
  br label %920

202:                                              ; preds = %195
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  store i32 0, ptr %24, align 4, !tbaa !9
  br label %203

203:                                              ; preds = %905, %202
  %204 = load i32, ptr %24, align 4, !tbaa !9
  %205 = zext i32 %204 to i64
  %206 = load ptr, ptr %23, align 8, !tbaa !5
  %207 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %206, i32 0, i32 0
  %208 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %207) #9
  %209 = icmp ult i64 %205, %208
  br i1 %209, label %211, label %210

210:                                              ; preds = %203
  store i32 4, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %914

211:                                              ; preds = %203
  %212 = load ptr, ptr %3, align 8, !tbaa !5
  %213 = load ptr, ptr %23, align 8, !tbaa !5
  %214 = load ptr, ptr %4, align 8, !tbaa !5
  %215 = getelementptr inbounds %"class.MIR::Function", ptr %214, i32 0, i32 2
  %216 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %215) #9
  %217 = ptrtoint ptr %213 to i64
  %218 = ptrtoint ptr %216 to i64
  %219 = sub i64 %217, %218
  %220 = sdiv exact i64 %219, 192
  %221 = trunc i64 %220 to i32
  %222 = load i32, ptr %24, align 4, !tbaa !9
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %212, i32 noundef %221, i32 noundef %222)
          to label %223 unwind label %246

223:                                              ; preds = %211
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %224 = load ptr, ptr %23, align 8, !tbaa !5
  %225 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %224, i32 0, i32 0
  %226 = load i32, ptr %24, align 4, !tbaa !9
  %227 = zext i32 %226 to i64
  %228 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %225, i64 noundef %227) #9
  store ptr %228, ptr %25, align 8, !tbaa !5
  br label %229

229:                                              ; preds = %223
  %230 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %231 unwind label %250

231:                                              ; preds = %229
  br i1 %230, label %232, label %254

232:                                              ; preds = %231
  %233 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %234 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %233, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %235 unwind label %250

235:                                              ; preds = %232
  %236 = load ptr, ptr %3, align 8, !tbaa !5
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef nonnull align 8 dereferenceable(120) %236)
          to label %238 unwind label %250

238:                                              ; preds = %235
  %239 = load ptr, ptr %25, align 8, !tbaa !5
  %240 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %237, ptr noundef nonnull align 8 dereferenceable(152) %239)
          to label %241 unwind label %250

241:                                              ; preds = %238
  %242 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %240, ptr noundef @_ZSt3decRSt8ios_base)
          to label %243 unwind label %250

243:                                              ; preds = %241
  %244 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %242, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %245 unwind label %250

245:                                              ; preds = %243
  br label %254

246:                                              ; preds = %211
  %247 = landingpad { ptr, i32 }
          cleanup
  %248 = extractvalue { ptr, i32 } %247, 0
  store ptr %248, ptr %11, align 8
  %249 = extractvalue { ptr, i32 } %247, 1
  store i32 %249, ptr %12, align 4
  br label %913

250:                                              ; preds = %256, %243, %241, %238, %235, %232, %229
  %251 = landingpad { ptr, i32 }
          cleanup
  %252 = extractvalue { ptr, i32 } %251, 0
  store ptr %252, ptr %11, align 8
  %253 = extractvalue { ptr, i32 } %251, 1
  store i32 %253, ptr %12, align 4
  br label %912

254:                                              ; preds = %245, %231
  br label %255

255:                                              ; preds = %254
  br label %256

256:                                              ; preds = %255
  %257 = load ptr, ptr %25, align 8, !tbaa !5
  %258 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %257)
          to label %259 unwind label %250

259:                                              ; preds = %256
  br i1 %258, label %261, label %260

260:                                              ; preds = %259
  store i32 6, ptr %22, align 4
  br label %902

261:                                              ; preds = %259
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #9
  %262 = load ptr, ptr %25, align 8, !tbaa !5
  %263 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %262)
          to label %264 unwind label %315

264:                                              ; preds = %261
  store ptr %263, ptr %26, align 8, !tbaa !5
  %265 = load ptr, ptr %26, align 8, !tbaa !5
  %266 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %265, i32 0, i32 0
  %267 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %266)
          to label %268 unwind label %315

268:                                              ; preds = %264
  br i1 %267, label %269, label %361

269:                                              ; preds = %268
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #9
  %270 = getelementptr inbounds %struct.anon, ptr %13, i32 0, i32 0
  %271 = load ptr, ptr %26, align 8, !tbaa !5
  %272 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %271, i32 0, i32 0
  %273 = invoke noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %272)
          to label %274 unwind label %319

274:                                              ; preds = %269
  %275 = zext i32 %273 to i64
  %276 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %270, i64 noundef %275) #9
  store ptr %276, ptr %27, align 8, !tbaa !5
  br label %277

277:                                              ; preds = %274
  %278 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %279 unwind label %319

279:                                              ; preds = %277
  br i1 %278, label %280, label %323

280:                                              ; preds = %279
  %281 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %281, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %283 unwind label %319

283:                                              ; preds = %280
  %284 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %282, ptr noundef @.str.102)
          to label %285 unwind label %319

285:                                              ; preds = %283
  %286 = load ptr, ptr %26, align 8, !tbaa !5
  %287 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %286, i32 0, i32 0
  %288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %284, ptr noundef nonnull align 8 dereferenceable(32) %287)
          to label %289 unwind label %319

289:                                              ; preds = %285
  %290 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %288, ptr noundef @.str.103)
          to label %291 unwind label %319

291:                                              ; preds = %289
  %292 = load ptr, ptr %27, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.ValUse, ptr %292, i32 0, i32 0
  %294 = load i32, ptr %293, align 4, !tbaa !11
  %295 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %290, i32 noundef %294)
          to label %296 unwind label %319

296:                                              ; preds = %291
  %297 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %295, ptr noundef @.str.104)
          to label %298 unwind label %319

298:                                              ; preds = %296
  %299 = load ptr, ptr %27, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.ValUse, ptr %299, i32 0, i32 1
  %301 = load i32, ptr %300, align 4, !tbaa !13
  %302 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %297, i32 noundef %301)
          to label %303 unwind label %319

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

305:                                              ; preds = %303
  %306 = load ptr, ptr %27, align 8, !tbaa !5
  %307 = getelementptr inbounds %struct.ValUse, ptr %306, i32 0, i32 2
  %308 = load i32, ptr %307, align 4, !tbaa !14
  %309 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %304, i32 noundef %308)
          to label %310 unwind label %319

310:                                              ; preds = %305
  %311 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %309, ptr noundef @_ZSt3decRSt8ios_base)
          to label %312 unwind label %319

312:                                              ; preds = %310
  %313 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %311, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %314 unwind label %319

314:                                              ; preds = %312
  br label %323

315:                                              ; preds = %264, %261
  %316 = landingpad { ptr, i32 }
          cleanup
  %317 = extractvalue { ptr, i32 } %316, 0
  store ptr %317, ptr %11, align 8
  %318 = extractvalue { ptr, i32 } %316, 1
  store i32 %318, ptr %12, align 4
  br label %911

319:                                              ; preds = %351, %349, %347, %344, %341, %312, %310, %305, %303, %298, %296, %291, %289, %285, %283, %280, %277, %269
  %320 = landingpad { ptr, i32 }
          cleanup
  %321 = extractvalue { ptr, i32 } %320, 0
  store ptr %321, ptr %11, align 8
  %322 = extractvalue { ptr, i32 } %320, 1
  store i32 %322, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  br label %911

323:                                              ; preds = %314, %279
  br label %324

324:                                              ; preds = %323
  br label %325

325:                                              ; preds = %324
  %326 = load ptr, ptr %27, align 8, !tbaa !5
  %327 = getelementptr inbounds %struct.ValUse, ptr %326, i32 0, i32 0
  %328 = load i32, ptr %327, align 4, !tbaa !11
  %329 = icmp eq i32 %328, 1
  br i1 %329, label %330, label %340

330:                                              ; preds = %325
  %331 = load ptr, ptr %27, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.ValUse, ptr %331, i32 0, i32 1
  %333 = load i32, ptr %332, align 4, !tbaa !13
  %334 = icmp eq i32 %333, 1
  br i1 %334, label %335, label %340

335:                                              ; preds = %330
  %336 = load ptr, ptr %27, align 8, !tbaa !5
  %337 = getelementptr inbounds %struct.ValUse, ptr %336, i32 0, i32 2
  %338 = load i32, ptr %337, align 4, !tbaa !14
  %339 = icmp eq i32 %338, 0
  br i1 %339, label %357, label %340

340:                                              ; preds = %335, %330, %325
  br label %341

341:                                              ; preds = %340
  %342 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %343 unwind label %319

343:                                              ; preds = %341
  br i1 %342, label %344, label %354

344:                                              ; preds = %343
  %345 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %346 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %345, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %347 unwind label %319

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

349:                                              ; preds = %347
  %350 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %348, ptr noundef @_ZSt3decRSt8ios_base)
          to label %351 unwind label %319

351:                                              ; preds = %349
  %352 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %350, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %353 unwind label %319

353:                                              ; preds = %351
  br label %354

354:                                              ; preds = %353, %343
  br label %355

355:                                              ; preds = %354
  br label %356

356:                                              ; preds = %355
  store i32 6, ptr %22, align 4
  br label %358

357:                                              ; preds = %335
  store i32 0, ptr %22, align 4
  br label %358

358:                                              ; preds = %357, %356
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #9
  %359 = load i32, ptr %22, align 4
  switch i32 %359, label %901 [
    i32 0, label %360
  ]

360:                                              ; preds = %358
  br label %362

361:                                              ; preds = %268
  store i32 6, ptr %22, align 4
  br label %901

362:                                              ; preds = %360
  call void @llvm.lifetime.start.p0(i64 1, ptr %28) #9
  store i8 0, ptr %28, align 1, !tbaa !15
  %363 = load ptr, ptr %26, align 8, !tbaa !5
  %364 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %363, i32 0, i32 1
  %365 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %364)
          to label %366 unwind label %400

366:                                              ; preds = %362
  br i1 %365, label %367, label %468

367:                                              ; preds = %366
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #9
  %368 = load ptr, ptr %26, align 8, !tbaa !5
  %369 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %368, i32 0, i32 1
  %370 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %369)
          to label %371 unwind label %404

371:                                              ; preds = %367
  store ptr %370, ptr %29, align 8, !tbaa !5
  %372 = load ptr, ptr %29, align 8, !tbaa !5
  %373 = getelementptr inbounds %"struct.MIR::LValue", ptr %372, i32 0, i32 1
  %374 = call ptr @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %373) #9
  %375 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.260", ptr %30, i32 0, i32 0
  store ptr %374, ptr %375, align 8
  %376 = load ptr, ptr %29, align 8, !tbaa !5
  %377 = getelementptr inbounds %"struct.MIR::LValue", ptr %376, i32 0, i32 1
  %378 = call ptr @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %377) #9
  %379 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.260", ptr %31, i32 0, i32 0
  store ptr %378, ptr %379, align 8
  %380 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.260", ptr %30, i32 0, i32 0
  %381 = load ptr, ptr %380, align 8
  %382 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.260", ptr %31, i32 0, i32 0
  %383 = load ptr, ptr %382, align 8
  %384 = invoke noundef zeroext i1 @"_ZSt6any_ofIN9__gnu_cxx17__normal_iteratorIPKN3MIR6LValue7WrapperESt6vectorIS4_SaIS4_EEEEZ39MIR_Optimise_PropagateSingleAssignmentsRNS2_11TypeResolveERNS2_8FunctionEE4$_14EbT_SG_T0_"(ptr %381, ptr %383)
          to label %385 unwind label %404

385:                                              ; preds = %371
  br i1 %384, label %386, label %411

386:                                              ; preds = %385
  br label %387

387:                                              ; preds = %386
  %388 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %389 unwind label %404

389:                                              ; preds = %387
  br i1 %388, label %390, label %408

390:                                              ; preds = %389
  %391 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %392 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %391, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %393 unwind label %404

393:                                              ; preds = %390
  %394 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %392, ptr noundef @.str.107)
          to label %395 unwind label %404

395:                                              ; preds = %393
  %396 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %394, ptr noundef @_ZSt3decRSt8ios_base)
          to label %397 unwind label %404

397:                                              ; preds = %395
  %398 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %396, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %399 unwind label %404

399:                                              ; preds = %397
  br label %408

400:                                              ; preds = %362
  %401 = landingpad { ptr, i32 }
          cleanup
  %402 = extractvalue { ptr, i32 } %401, 0
  store ptr %402, ptr %11, align 8
  %403 = extractvalue { ptr, i32 } %401, 1
  store i32 %403, ptr %12, align 4
  br label %910

404:                                              ; preds = %453, %451, %449, %446, %443, %427, %425, %423, %420, %417, %411, %397, %395, %393, %390, %387, %371, %367
  %405 = landingpad { ptr, i32 }
          cleanup
  %406 = extractvalue { ptr, i32 } %405, 0
  store ptr %406, ptr %11, align 8
  %407 = extractvalue { ptr, i32 } %405, 1
  store i32 %407, ptr %12, align 4
  br label %467

408:                                              ; preds = %399, %389
  br label %409

409:                                              ; preds = %408
  br label %410

410:                                              ; preds = %409
  store i8 1, ptr %28, align 1, !tbaa !15
  store i32 6, ptr %22, align 4
  br label %464

411:                                              ; preds = %385
  %412 = load ptr, ptr %29, align 8, !tbaa !5
  %413 = getelementptr inbounds %"struct.MIR::LValue", ptr %412, i32 0, i32 0
  %414 = invoke noundef zeroext i1 @_ZNK3MIR6LValue7Storage8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(8) %413)
          to label %415 unwind label %404

415:                                              ; preds = %411
  br i1 %414, label %433, label %416

416:                                              ; preds = %415
  br label %417

417:                                              ; preds = %416
  %418 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %419 unwind label %404

419:                                              ; preds = %417
  br i1 %418, label %420, label %430

420:                                              ; preds = %419
  %421 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %422 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %421, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %423 unwind label %404

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

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

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

429:                                              ; preds = %427
  br label %430

430:                                              ; preds = %429, %419
  br label %431

431:                                              ; preds = %430
  br label %432

432:                                              ; preds = %431
  store i32 6, ptr %22, align 4
  br label %464

433:                                              ; preds = %415
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %34) #9
  %434 = load ptr, ptr %29, align 8, !tbaa !5
  invoke void @_ZN3MIR6LValue4CRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %34, ptr noundef nonnull align 8 dereferenceable(32) %434)
          to label %435 unwind label %456

435:                                              ; preds = %433
  %436 = invoke ptr @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEENK4$_13clERKNS_6LValue4CRefE"(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(16) %34)
          to label %437 unwind label %456

437:                                              ; preds = %435
  %438 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %33, i32 0, i32 0
  store ptr %436, ptr %438, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #9
  %439 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  %440 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %35, i32 0, i32 0
  store ptr %439, ptr %440, align 8
  %441 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %33, ptr noundef nonnull align 8 dereferenceable(8) %35) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br i1 %441, label %442, label %463

442:                                              ; preds = %437
  br label %443

443:                                              ; preds = %442
  %444 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %445 unwind label %404

445:                                              ; preds = %443
  br i1 %444, label %446, label %460

446:                                              ; preds = %445
  %447 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %448 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %447, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %449 unwind label %404

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

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

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

455:                                              ; preds = %453
  br label %460

456:                                              ; preds = %435, %433
  %457 = landingpad { ptr, i32 }
          cleanup
  %458 = extractvalue { ptr, i32 } %457, 0
  store ptr %458, ptr %11, align 8
  %459 = extractvalue { ptr, i32 } %457, 1
  store i32 %459, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %34) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #9
  br label %467

460:                                              ; preds = %455, %445
  br label %461

461:                                              ; preds = %460
  br label %462

462:                                              ; preds = %461
  store i32 6, ptr %22, align 4
  br label %464

463:                                              ; preds = %437
  store i32 0, ptr %22, align 4
  br label %464

464:                                              ; preds = %463, %462, %432, %410
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  %465 = load i32, ptr %22, align 4
  switch i32 %465, label %900 [
    i32 0, label %466
  ]

466:                                              ; preds = %464
  br label %469

467:                                              ; preds = %456, %404
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #9
  br label %910

468:                                              ; preds = %366
  store i32 6, ptr %22, align 4
  br label %900

469:                                              ; preds = %466
  call void @llvm.lifetime.start.p0(i64 1, ptr %36) #9
  %470 = load ptr, ptr %26, align 8, !tbaa !5
  %471 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %470, i32 0, i32 1
  %472 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %471)
          to label %473 unwind label %488

473:                                              ; preds = %469
  %474 = zext i1 %472 to i8
  store i8 %474, ptr %36, align 1, !tbaa !15
  br label %475

475:                                              ; preds = %473
  %476 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %477 unwind label %488

477:                                              ; preds = %475
  br i1 %476, label %478, label %492

478:                                              ; preds = %477
  %479 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %480 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %479, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %481 unwind label %488

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.110)
          to label %483 unwind label %488

483:                                              ; preds = %481
  %484 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %482, ptr noundef @_ZSt3decRSt8ios_base)
          to label %485 unwind label %488

485:                                              ; preds = %483
  %486 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %484, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %487 unwind label %488

487:                                              ; preds = %485
  br label %492

488:                                              ; preds = %485, %483, %481, %478, %475, %469
  %489 = landingpad { ptr, i32 }
          cleanup
  %490 = extractvalue { ptr, i32 } %489, 0
  store ptr %490, ptr %11, align 8
  %491 = extractvalue { ptr, i32 } %489, 1
  store i32 %491, ptr %12, align 4
  br label %909

492:                                              ; preds = %487, %477
  br label %493

493:                                              ; preds = %492
  br label %494

494:                                              ; preds = %493
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #9
  %495 = getelementptr inbounds %class.anon.590, ptr %37, i32 0, i32 0
  %496 = load ptr, ptr %26, align 8, !tbaa !5
  store ptr %496, ptr %495, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %38) #9
  store i8 0, ptr %38, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 1, ptr %39) #9
  store i8 0, ptr %39, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #9
  %497 = load i32, ptr %24, align 4, !tbaa !9
  %498 = add i32 %497, 1
  store i32 %498, ptr %40, align 4, !tbaa !9
  br label %499

499:                                              ; preds = %613, %494
  %500 = load i32, ptr %40, align 4, !tbaa !9
  %501 = zext i32 %500 to i64
  %502 = load ptr, ptr %23, align 8, !tbaa !5
  %503 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %502, i32 0, i32 0
  %504 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %503) #9
  %505 = icmp ult i64 %501, %504
  br i1 %505, label %507, label %506

506:                                              ; preds = %499
  store i32 21, ptr %22, align 4
  br label %617

507:                                              ; preds = %499
  %508 = load ptr, ptr %3, align 8, !tbaa !5
  %509 = load ptr, ptr %23, align 8, !tbaa !5
  %510 = load ptr, ptr %4, align 8, !tbaa !5
  %511 = getelementptr inbounds %"class.MIR::Function", ptr %510, i32 0, i32 2
  %512 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %511) #9
  %513 = ptrtoint ptr %509 to i64
  %514 = ptrtoint ptr %512 to i64
  %515 = sub i64 %513, %514
  %516 = sdiv exact i64 %515, 192
  %517 = trunc i64 %516 to i32
  %518 = load i32, ptr %40, align 4, !tbaa !9
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %508, i32 noundef %517, i32 noundef %518)
          to label %519 unwind label %544

519:                                              ; preds = %507
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #9
  %520 = load ptr, ptr %23, align 8, !tbaa !5
  %521 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %520, i32 0, i32 0
  %522 = load i32, ptr %40, align 4, !tbaa !9
  %523 = zext i32 %522 to i64
  %524 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %521, i64 noundef %523) #9
  store ptr %524, ptr %41, align 8, !tbaa !5
  br label %525

525:                                              ; preds = %519
  %526 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %527 unwind label %548

527:                                              ; preds = %525
  br i1 %526, label %528, label %552

528:                                              ; preds = %527
  %529 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %530 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %529, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %531 unwind label %548

531:                                              ; preds = %528
  %532 = load ptr, ptr %3, align 8, !tbaa !5
  %533 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %530, ptr noundef nonnull align 8 dereferenceable(120) %532)
          to label %534 unwind label %548

534:                                              ; preds = %531
  %535 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %533, ptr noundef @.str.111)
          to label %536 unwind label %548

536:                                              ; preds = %534
  %537 = load ptr, ptr %41, align 8, !tbaa !5
  %538 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %535, ptr noundef nonnull align 8 dereferenceable(152) %537)
          to label %539 unwind label %548

539:                                              ; preds = %536
  %540 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %538, ptr noundef @_ZSt3decRSt8ios_base)
          to label %541 unwind label %548

541:                                              ; preds = %539
  %542 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %540, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %543 unwind label %548

543:                                              ; preds = %541
  br label %552

544:                                              ; preds = %507
  %545 = landingpad { ptr, i32 }
          cleanup
  %546 = extractvalue { ptr, i32 } %545, 0
  store ptr %546, ptr %11, align 8
  %547 = extractvalue { ptr, i32 } %545, 1
  store i32 %547, ptr %12, align 4
  br label %618

548:                                              ; preds = %593, %590, %586, %573, %571, %569, %566, %563, %559, %554, %541, %539, %536, %534, %531, %528, %525
  %549 = landingpad { ptr, i32 }
          cleanup
  %550 = extractvalue { ptr, i32 } %549, 0
  store ptr %550, ptr %11, align 8
  %551 = extractvalue { ptr, i32 } %549, 1
  store i32 %551, ptr %12, align 4
  br label %616

552:                                              ; preds = %543, %527
  br label %553

553:                                              ; preds = %552
  br label %554

554:                                              ; preds = %553
  %555 = load ptr, ptr %41, align 8, !tbaa !5
  %556 = load ptr, ptr %26, align 8, !tbaa !5
  %557 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %556, i32 0, i32 1
  %558 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %557)
          to label %559 unwind label %548

559:                                              ; preds = %554
  %560 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR9StatementERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(152) %555, ptr noundef nonnull align 8 dereferenceable(32) %558, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %561 unwind label %548

561:                                              ; preds = %559
  br i1 %560, label %562, label %579

562:                                              ; preds = %561
  store i8 1, ptr %38, align 1, !tbaa !15
  br label %563

563:                                              ; preds = %562
  %564 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %565 unwind label %548

565:                                              ; preds = %563
  br i1 %564, label %566, label %576

566:                                              ; preds = %565
  %567 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %568 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %567, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %569 unwind label %548

569:                                              ; preds = %566
  %570 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %568, ptr noundef @.str.41)
          to label %571 unwind label %548

571:                                              ; preds = %569
  %572 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %570, ptr noundef @_ZSt3decRSt8ios_base)
          to label %573 unwind label %548

573:                                              ; preds = %571
  %574 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %572, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %575 unwind label %548

575:                                              ; preds = %573
  br label %576

576:                                              ; preds = %575, %565
  br label %577

577:                                              ; preds = %576
  br label %578

578:                                              ; preds = %577
  store i32 21, ptr %22, align 4
  br label %610

579:                                              ; preds = %561
  %580 = load ptr, ptr %41, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %42, ptr noundef nonnull align 8 dereferenceable(8) %37) #9
  %581 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %580, ptr noundef %42)
          to label %582 unwind label %598

582:                                              ; preds = %579
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br i1 %581, label %583, label %605

583:                                              ; preds = %582
  %584 = load i8, ptr %36, align 1, !tbaa !15, !range !17, !noundef !18
  %585 = trunc i8 %584 to i1
  br i1 %585, label %604, label %586

586:                                              ; preds = %583
  %587 = load ptr, ptr %41, align 8, !tbaa !5
  %588 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %587)
          to label %589 unwind label %548

589:                                              ; preds = %586
  br i1 %588, label %590, label %602

590:                                              ; preds = %589
  %591 = load ptr, ptr %41, align 8, !tbaa !5
  %592 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %591)
          to label %593 unwind label %548

593:                                              ; preds = %590
  %594 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %592, i32 0, i32 1
  %595 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %594)
          to label %596 unwind label %548

596:                                              ; preds = %593
  br i1 %595, label %597, label %602

597:                                              ; preds = %596
  br label %603

598:                                              ; preds = %579
  %599 = landingpad { ptr, i32 }
          cleanup
  %600 = extractvalue { ptr, i32 } %599, 0
  store ptr %600, ptr %11, align 8
  %601 = extractvalue { ptr, i32 } %599, 1
  store i32 %601, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %42) #9
  br label %616

602:                                              ; preds = %596, %589
  store i8 1, ptr %38, align 1, !tbaa !15
  store i32 21, ptr %22, align 4
  br label %610

603:                                              ; preds = %597
  br label %604

604:                                              ; preds = %603, %583
  store i8 1, ptr %39, align 1, !tbaa !15
  store i8 1, ptr %38, align 1, !tbaa !15
  store i32 21, ptr %22, align 4
  br label %610

605:                                              ; preds = %582
  %606 = load i8, ptr %28, align 1, !tbaa !15, !range !17, !noundef !18
  %607 = trunc i8 %606 to i1
  br i1 %607, label %608, label %609

608:                                              ; preds = %605
  store i8 1, ptr %38, align 1, !tbaa !15
  br label %609

609:                                              ; preds = %608, %605
  store i32 0, ptr %22, align 4
  br label %610

610:                                              ; preds = %609, %604, %602, %578
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  %611 = load i32, ptr %22, align 4
  switch i32 %611, label %617 [
    i32 0, label %612
  ]

612:                                              ; preds = %610
  br label %613

613:                                              ; preds = %612
  %614 = load i32, ptr %40, align 4, !tbaa !9
  %615 = add i32 %614, 1
  store i32 %615, ptr %40, align 4, !tbaa !9
  br label %499, !llvm.loop !19

616:                                              ; preds = %598, %548
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #9
  br label %618

617:                                              ; preds = %610, %506
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %619

618:                                              ; preds = %616, %544
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #9
  br label %908

619:                                              ; preds = %617
  %620 = load i8, ptr %38, align 1, !tbaa !15, !range !17, !noundef !18
  %621 = trunc i8 %620 to i1
  br i1 %621, label %653, label %622

622:                                              ; preds = %619
  %623 = load ptr, ptr %23, align 8, !tbaa !5
  %624 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %623, i32 0, i32 1
  %625 = load ptr, ptr %26, align 8, !tbaa !5
  %626 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %625, i32 0, i32 1
  %627 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %626)
          to label %628 unwind label %645

628:                                              ; preds = %622
  %629 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR10TerminatorERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(168) %624, ptr noundef nonnull align 8 dereferenceable(32) %627, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %630 unwind label %645

630:                                              ; preds = %628
  br i1 %629, label %631, label %652

631:                                              ; preds = %630
  store i8 1, ptr %38, align 1, !tbaa !15
  br label %632

632:                                              ; preds = %631
  %633 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %634 unwind label %645

634:                                              ; preds = %632
  br i1 %633, label %635, label %649

635:                                              ; preds = %634
  %636 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %637 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %636, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %638 unwind label %645

638:                                              ; preds = %635
  %639 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %637, ptr noundef @.str.112)
          to label %640 unwind label %645

640:                                              ; preds = %638
  %641 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %639, ptr noundef @_ZSt3decRSt8ios_base)
          to label %642 unwind label %645

642:                                              ; preds = %640
  %643 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %641, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %644 unwind label %645

644:                                              ; preds = %642
  br label %649

645:                                              ; preds = %893, %891, %889, %885, %883, %880, %877, %843, %841, %839, %835, %833, %829, %827, %824, %821, %704, %685, %683, %679, %677, %674, %671, %668, %656, %642, %640, %638, %635, %632, %628, %622
  %646 = landingpad { ptr, i32 }
          cleanup
  %647 = extractvalue { ptr, i32 } %646, 0
  store ptr %647, ptr %11, align 8
  %648 = extractvalue { ptr, i32 } %646, 1
  store i32 %648, ptr %12, align 4
  br label %908

649:                                              ; preds = %644, %634
  br label %650

650:                                              ; preds = %649
  br label %651

651:                                              ; preds = %650
  br label %652

652:                                              ; preds = %651, %630
  br label %653

653:                                              ; preds = %652, %619
  %654 = load i8, ptr %38, align 1, !tbaa !15, !range !17, !noundef !18
  %655 = trunc i8 %654 to i1
  br i1 %655, label %817, label %656

656:                                              ; preds = %653
  %657 = load ptr, ptr %3, align 8, !tbaa !5
  %658 = load ptr, ptr %23, align 8, !tbaa !5
  %659 = load ptr, ptr %4, align 8, !tbaa !5
  %660 = getelementptr inbounds %"class.MIR::Function", ptr %659, i32 0, i32 2
  %661 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %660) #9
  %662 = ptrtoint ptr %658 to i64
  %663 = ptrtoint ptr %661 to i64
  %664 = sub i64 %662, %663
  %665 = sdiv exact i64 %664, 192
  %666 = trunc i64 %665 to i32
  invoke void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120) %657, i32 noundef %666)
          to label %667 unwind label %645

667:                                              ; preds = %656
  br label %668

668:                                              ; preds = %667
  %669 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %670 unwind label %645

670:                                              ; preds = %668
  br i1 %669, label %671, label %688

671:                                              ; preds = %670
  %672 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %673 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %672, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %674 unwind label %645

674:                                              ; preds = %671
  %675 = load ptr, ptr %3, align 8, !tbaa !5
  %676 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %673, ptr noundef nonnull align 8 dereferenceable(120) %675)
          to label %677 unwind label %645

677:                                              ; preds = %674
  %678 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %676, ptr noundef @.str.111)
          to label %679 unwind label %645

679:                                              ; preds = %677
  %680 = load ptr, ptr %23, align 8, !tbaa !5
  %681 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %680, i32 0, i32 1
  %682 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %678, ptr noundef nonnull align 8 dereferenceable(168) %681)
          to label %683 unwind label %645

683:                                              ; preds = %679
  %684 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %682, ptr noundef @_ZSt3decRSt8ios_base)
          to label %685 unwind label %645

685:                                              ; preds = %683
  %686 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %684, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %687 unwind label %645

687:                                              ; preds = %685
  br label %688

688:                                              ; preds = %687, %670
  br label %689

689:                                              ; preds = %688
  br label %690

690:                                              ; preds = %689
  %691 = load i8, ptr %36, align 1, !tbaa !15, !range !17, !noundef !18
  %692 = trunc i8 %691 to i1
  br i1 %692, label %693, label %704

693:                                              ; preds = %690
  %694 = load ptr, ptr %23, align 8, !tbaa !5
  %695 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %694, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 16, ptr %44) #9
  %696 = getelementptr inbounds %class.anon.591, ptr %44, i32 0, i32 0
  store ptr %39, ptr %696, align 8, !tbaa !5
  %697 = getelementptr inbounds %class.anon.591, ptr %44, i32 0, i32 1
  store ptr %37, ptr %697, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %43, ptr noundef nonnull align 8 dereferenceable(16) %44) #9
  %698 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR10TerminatorESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168) %695, ptr noundef %43)
          to label %699 unwind label %700

699:                                              ; preds = %693
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #9
  br label %704

700:                                              ; preds = %693
  %701 = landingpad { ptr, i32 }
          cleanup
  %702 = extractvalue { ptr, i32 } %701, 0
  store ptr %702, ptr %11, align 8
  %703 = extractvalue { ptr, i32 } %701, 1
  store i32 %703, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %43) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %44) #9
  br label %908

704:                                              ; preds = %699, %690
  %705 = load ptr, ptr %23, align 8, !tbaa !5
  %706 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %705, i32 0, i32 1
  %707 = invoke noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %706)
          to label %708 unwind label %645

708:                                              ; preds = %704
  switch i32 %707, label %816 [
    i32 0, label %709
    i32 1, label %710
    i32 2, label %720
    i32 3, label %730
    i32 4, label %740
    i32 5, label %766
    i32 6, label %776
    i32 7, label %786
    i32 8, label %796
    i32 9, label %806
  ]

709:                                              ; preds = %708
  call void @__assert_fail(ptr noundef @.str.28, ptr noundef @.str.8, i32 noundef 5124, ptr noundef @__PRETTY_FUNCTION__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE) #10
  unreachable

710:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #9
  %711 = load ptr, ptr %23, align 8, !tbaa !5
  %712 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %711, i32 0, i32 1
  %713 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR10Terminator13as_IncompleteEv(ptr noundef nonnull align 8 dereferenceable(168) %712)
          to label %714 unwind label %716

714:                                              ; preds = %710
  store ptr %713, ptr %45, align 8, !tbaa !5
  %715 = load ptr, ptr %45, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %816

716:                                              ; preds = %710
  %717 = landingpad { ptr, i32 }
          cleanup
  %718 = extractvalue { ptr, i32 } %717, 0
  store ptr %718, ptr %11, align 8
  %719 = extractvalue { ptr, i32 } %717, 1
  store i32 %719, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #9
  br label %908

720:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %46) #9
  %721 = load ptr, ptr %23, align 8, !tbaa !5
  %722 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %721, i32 0, i32 1
  %723 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR10Terminator9as_ReturnEv(ptr noundef nonnull align 8 dereferenceable(168) %722)
          to label %724 unwind label %726

724:                                              ; preds = %720
  store ptr %723, ptr %46, align 8, !tbaa !5
  %725 = load ptr, ptr %46, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %816

726:                                              ; preds = %720
  %727 = landingpad { ptr, i32 }
          cleanup
  %728 = extractvalue { ptr, i32 } %727, 0
  store ptr %728, ptr %11, align 8
  %729 = extractvalue { ptr, i32 } %727, 1
  store i32 %729, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #9
  br label %908

730:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %47) #9
  %731 = load ptr, ptr %23, align 8, !tbaa !5
  %732 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %731, i32 0, i32 1
  %733 = invoke noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR10Terminator10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(168) %732)
          to label %734 unwind label %736

734:                                              ; preds = %730
  store ptr %733, ptr %47, align 8, !tbaa !5
  %735 = load ptr, ptr %47, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %816

736:                                              ; preds = %730
  %737 = landingpad { ptr, i32 }
          cleanup
  %738 = extractvalue { ptr, i32 } %737, 0
  store ptr %738, ptr %11, align 8
  %739 = extractvalue { ptr, i32 } %737, 1
  store i32 %739, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #9
  br label %908

740:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %48) #9
  %741 = load ptr, ptr %23, align 8, !tbaa !5
  %742 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %741, i32 0, i32 1
  %743 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator7as_GotoEv(ptr noundef nonnull align 8 dereferenceable(168) %742)
          to label %744 unwind label %759

744:                                              ; preds = %740
  store ptr %743, ptr %48, align 8, !tbaa !5
  %745 = load ptr, ptr %48, align 8, !tbaa !5
  br label %746

746:                                              ; preds = %744
  %747 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %748 unwind label %759

748:                                              ; preds = %746
  br i1 %747, label %749, label %763

749:                                              ; preds = %748
  %750 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %751 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %750, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %752 unwind label %759

752:                                              ; preds = %749
  %753 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %751, ptr noundef @.str.113)
          to label %754 unwind label %759

754:                                              ; preds = %752
  %755 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %753, ptr noundef @_ZSt3decRSt8ios_base)
          to label %756 unwind label %759

756:                                              ; preds = %754
  %757 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %755, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %758 unwind label %759

758:                                              ; preds = %756
  br label %763

759:                                              ; preds = %756, %754, %752, %749, %746, %740
  %760 = landingpad { ptr, i32 }
          cleanup
  %761 = extractvalue { ptr, i32 } %760, 0
  store ptr %761, ptr %11, align 8
  %762 = extractvalue { ptr, i32 } %760, 1
  store i32 %762, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %908

763:                                              ; preds = %758, %748
  br label %764

764:                                              ; preds = %763
  br label %765

765:                                              ; preds = %764
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #9
  br label %816

766:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %49) #9
  %767 = load ptr, ptr %23, align 8, !tbaa !5
  %768 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %767, i32 0, i32 1
  %769 = invoke noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator8as_PanicEv(ptr noundef nonnull align 8 dereferenceable(168) %768)
          to label %770 unwind label %772

770:                                              ; preds = %766
  store ptr %769, ptr %49, align 8, !tbaa !5
  %771 = load ptr, ptr %49, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  br label %816

772:                                              ; preds = %766
  %773 = landingpad { ptr, i32 }
          cleanup
  %774 = extractvalue { ptr, i32 } %773, 0
  store ptr %774, ptr %11, align 8
  %775 = extractvalue { ptr, i32 } %773, 1
  store i32 %775, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #9
  br label %908

776:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %50) #9
  %777 = load ptr, ptr %23, align 8, !tbaa !5
  %778 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %777, i32 0, i32 1
  %779 = invoke noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %778)
          to label %780 unwind label %782

780:                                              ; preds = %776
  store ptr %779, ptr %50, align 8, !tbaa !5
  %781 = load ptr, ptr %50, align 8, !tbaa !5
  store i8 1, ptr %38, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %816

782:                                              ; preds = %776
  %783 = landingpad { ptr, i32 }
          cleanup
  %784 = extractvalue { ptr, i32 } %783, 0
  store ptr %784, ptr %11, align 8
  %785 = extractvalue { ptr, i32 } %783, 1
  store i32 %785, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #9
  br label %908

786:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %51) #9
  %787 = load ptr, ptr %23, align 8, !tbaa !5
  %788 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %787, i32 0, i32 1
  %789 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZNK3MIR10Terminator9as_SwitchEv(ptr noundef nonnull align 8 dereferenceable(168) %788)
          to label %790 unwind label %792

790:                                              ; preds = %786
  store ptr %789, ptr %51, align 8, !tbaa !5
  %791 = load ptr, ptr %51, align 8, !tbaa !5
  store i8 1, ptr %38, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %816

792:                                              ; preds = %786
  %793 = landingpad { ptr, i32 }
          cleanup
  %794 = extractvalue { ptr, i32 } %793, 0
  store ptr %794, ptr %11, align 8
  %795 = extractvalue { ptr, i32 } %793, 1
  store i32 %795, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #9
  br label %908

796:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %52) #9
  %797 = load ptr, ptr %23, align 8, !tbaa !5
  %798 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %797, i32 0, i32 1
  %799 = invoke noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3MIR10Terminator14as_SwitchValueEv(ptr noundef nonnull align 8 dereferenceable(168) %798)
          to label %800 unwind label %802

800:                                              ; preds = %796
  store ptr %799, ptr %52, align 8, !tbaa !5
  %801 = load ptr, ptr %52, align 8, !tbaa !5
  store i8 1, ptr %38, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %816

802:                                              ; preds = %796
  %803 = landingpad { ptr, i32 }
          cleanup
  %804 = extractvalue { ptr, i32 } %803, 0
  store ptr %804, ptr %11, align 8
  %805 = extractvalue { ptr, i32 } %803, 1
  store i32 %805, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %52) #9
  br label %908

806:                                              ; preds = %708
  call void @llvm.lifetime.start.p0(i64 8, ptr %53) #9
  %807 = load ptr, ptr %23, align 8, !tbaa !5
  %808 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %807, i32 0, i32 1
  %809 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %808)
          to label %810 unwind label %812

810:                                              ; preds = %806
  store ptr %809, ptr %53, align 8, !tbaa !5
  %811 = load ptr, ptr %53, align 8, !tbaa !5
  store i8 1, ptr %38, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %816

812:                                              ; preds = %806
  %813 = landingpad { ptr, i32 }
          cleanup
  %814 = extractvalue { ptr, i32 } %813, 0
  store ptr %814, ptr %11, align 8
  %815 = extractvalue { ptr, i32 } %813, 1
  store i32 %815, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %53) #9
  br label %908

816:                                              ; preds = %810, %800, %790, %780, %770, %765, %734, %724, %714, %708
  br label %817

817:                                              ; preds = %816, %653
  %818 = load i8, ptr %39, align 1, !tbaa !15, !range !17, !noundef !18
  %819 = trunc i8 %818 to i1
  br i1 %819, label %820, label %876

820:                                              ; preds = %817
  br label %821

821:                                              ; preds = %820
  %822 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %823 unwind label %645

823:                                              ; preds = %821
  br i1 %822, label %824, label %846

824:                                              ; preds = %823
  %825 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %826 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %825, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %827 unwind label %645

827:                                              ; preds = %824
  %828 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %826, ptr noundef @.str.114)
          to label %829 unwind label %645

829:                                              ; preds = %827
  %830 = load ptr, ptr %26, align 8, !tbaa !5
  %831 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %830, i32 0, i32 0
  %832 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %828, ptr noundef nonnull align 8 dereferenceable(32) %831)
          to label %833 unwind label %645

833:                                              ; preds = %829
  %834 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %832, ptr noundef @.str.35)
          to label %835 unwind label %645

835:                                              ; preds = %833
  %836 = load ptr, ptr %26, align 8, !tbaa !5
  %837 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %836, i32 0, i32 1
  %838 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %837)
          to label %839 unwind label %645

839:                                              ; preds = %835
  %840 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %834, ptr noundef nonnull align 8 dereferenceable(32) %838)
          to label %841 unwind label %645

841:                                              ; preds = %839
  %842 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %840, ptr noundef @_ZSt3decRSt8ios_base)
          to label %843 unwind label %645

843:                                              ; preds = %841
  %844 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %842, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %845 unwind label %645

845:                                              ; preds = %843
  br label %846

846:                                              ; preds = %845, %823
  br label %847

847:                                              ; preds = %846
  br label %848

848:                                              ; preds = %847
  call void @llvm.lifetime.start.p0(i64 144, ptr %54) #9
  call void @llvm.lifetime.start.p0(i64 32, ptr %55) #9
  %849 = load ptr, ptr %26, align 8, !tbaa !5
  %850 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %849, i32 0, i32 0
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %55, ptr noundef nonnull align 8 dereferenceable(32) %850)
          to label %851 unwind label %857

851:                                              ; preds = %848
  call void @llvm.lifetime.start.p0(i64 112, ptr %56) #9
  %852 = load ptr, ptr %26, align 8, !tbaa !5
  %853 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %852, i32 0, i32 1
  invoke void @_ZNK3MIR6RValue5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8 %56, ptr noundef nonnull align 8 dereferenceable(112) %853)
          to label %854 unwind label %861

854:                                              ; preds = %851
  invoke void @_ZSt9make_pairIN3MIR6LValueENS0_6RValueEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind writable sret(%"struct.std::pair.592") align 8 %54, ptr noundef nonnull align 8 dereferenceable(32) %55, ptr noundef nonnull align 8 dereferenceable(112) %56)
          to label %855 unwind label %865

855:                                              ; preds = %854
  invoke void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(144) %54)
          to label %856 unwind label %869

856:                                              ; preds = %855
  call void @_ZNSt4pairIN3MIR6LValueENS0_6RValueEED2Ev(ptr noundef nonnull align 8 dereferenceable(144) %54) #9
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %56) #9
  call void @llvm.lifetime.end.p0(i64 112, ptr %56) #9
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %54) #9
  br label %899

857:                                              ; preds = %848
  %858 = landingpad { ptr, i32 }
          cleanup
  %859 = extractvalue { ptr, i32 } %858, 0
  store ptr %859, ptr %11, align 8
  %860 = extractvalue { ptr, i32 } %858, 1
  store i32 %860, ptr %12, align 4
  br label %875

861:                                              ; preds = %851
  %862 = landingpad { ptr, i32 }
          cleanup
  %863 = extractvalue { ptr, i32 } %862, 0
  store ptr %863, ptr %11, align 8
  %864 = extractvalue { ptr, i32 } %862, 1
  store i32 %864, ptr %12, align 4
  br label %874

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

869:                                              ; preds = %855
  %870 = landingpad { ptr, i32 }
          cleanup
  %871 = extractvalue { ptr, i32 } %870, 0
  store ptr %871, ptr %11, align 8
  %872 = extractvalue { ptr, i32 } %870, 1
  store i32 %872, ptr %12, align 4
  call void @_ZNSt4pairIN3MIR6LValueENS0_6RValueEED2Ev(ptr noundef nonnull align 8 dereferenceable(144) %54) #9
  br label %873

873:                                              ; preds = %869, %865
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %56) #9
  br label %874

874:                                              ; preds = %873, %861
  call void @llvm.lifetime.end.p0(i64 112, ptr %56) #9
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %55) #9
  br label %875

875:                                              ; preds = %874, %857
  call void @llvm.lifetime.end.p0(i64 32, ptr %55) #9
  call void @llvm.lifetime.end.p0(i64 144, ptr %54) #9
  br label %908

876:                                              ; preds = %817
  br label %877

877:                                              ; preds = %876
  %878 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %879 unwind label %645

879:                                              ; preds = %877
  br i1 %878, label %880, label %896

880:                                              ; preds = %879
  %881 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %882 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %881, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %883 unwind label %645

883:                                              ; preds = %880
  %884 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %882, ptr noundef @.str.115)
          to label %885 unwind label %645

885:                                              ; preds = %883
  %886 = load ptr, ptr %26, align 8, !tbaa !5
  %887 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %886, i32 0, i32 0
  %888 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %884, ptr noundef nonnull align 8 dereferenceable(32) %887)
          to label %889 unwind label %645

889:                                              ; preds = %885
  %890 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %888, ptr noundef @.str.116)
          to label %891 unwind label %645

891:                                              ; preds = %889
  %892 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %890, ptr noundef @_ZSt3decRSt8ios_base)
          to label %893 unwind label %645

893:                                              ; preds = %891
  %894 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %892, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %895 unwind label %645

895:                                              ; preds = %893
  br label %896

896:                                              ; preds = %895, %879
  br label %897

897:                                              ; preds = %896
  br label %898

898:                                              ; preds = %897
  br label %899

899:                                              ; preds = %898, %856
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  store i32 0, ptr %22, align 4
  br label %900

900:                                              ; preds = %899, %468, %464
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  br label %901

901:                                              ; preds = %900, %361, %358
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %902

902:                                              ; preds = %901, %260
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  %903 = load i32, ptr %22, align 4
  switch i32 %903, label %2141 [
    i32 0, label %904
    i32 6, label %905
  ]

904:                                              ; preds = %902
  br label %905

905:                                              ; preds = %904, %902
  %906 = load i32, ptr %24, align 4, !tbaa !9
  %907 = add i32 %906, 1
  store i32 %907, ptr %24, align 4, !tbaa !9
  br label %203, !llvm.loop !21

908:                                              ; preds = %875, %812, %802, %792, %782, %772, %759, %736, %726, %716, %700, %645, %618
  call void @llvm.lifetime.end.p0(i64 1, ptr %39) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %38) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #9
  br label %909

909:                                              ; preds = %908, %488
  call void @llvm.lifetime.end.p0(i64 1, ptr %36) #9
  br label %910

910:                                              ; preds = %909, %467, %400
  call void @llvm.lifetime.end.p0(i64 1, ptr %28) #9
  br label %911

911:                                              ; preds = %910, %319, %315
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #9
  br label %912

912:                                              ; preds = %911, %250
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  br label %913

913:                                              ; preds = %912, %246
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %920

914:                                              ; preds = %210
  store i32 0, ptr %22, align 4
  br label %915

915:                                              ; preds = %914, %197
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  %916 = load i32, ptr %22, align 4
  switch i32 %916, label %2141 [
    i32 0, label %917
    i32 3, label %918
  ]

917:                                              ; preds = %915
  br label %918

918:                                              ; preds = %917, %915
  %919 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %20) #9
  br label %175

920:                                              ; preds = %913, %198
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  br label %1291

921:                                              ; preds = %177
  br label %922

922:                                              ; preds = %921
  %923 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %924 unwind label %937

924:                                              ; preds = %922
  br i1 %923, label %925, label %941

925:                                              ; preds = %924
  %926 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %927 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %926, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %928 unwind label %937

928:                                              ; preds = %925
  %929 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %927, ptr noundef @.str.117)
          to label %930 unwind label %937

930:                                              ; preds = %928
  %931 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt4pairIN3MIR6LValueENS1_6RValueEEERSoS5_RKSt6vectorIT_SaIS7_EE(ptr noundef nonnull align 8 dereferenceable(8) %929, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %932 unwind label %937

932:                                              ; preds = %930
  %933 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %931, ptr noundef @_ZSt3decRSt8ios_base)
          to label %934 unwind label %937

934:                                              ; preds = %932
  %935 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %933, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %936 unwind label %937

936:                                              ; preds = %934
  br label %941

937:                                              ; preds = %996, %994, %992, %990, %987, %984, %934, %932, %930, %928, %925, %922
  %938 = landingpad { ptr, i32 }
          cleanup
  %939 = extractvalue { ptr, i32 } %938, 0
  store ptr %939, ptr %11, align 8
  %940 = extractvalue { ptr, i32 } %938, 1
  store i32 %940, ptr %12, align 4
  br label %1291

941:                                              ; preds = %936, %924
  br label %942

942:                                              ; preds = %941
  br label %943

943:                                              ; preds = %942
  br label %944

944:                                              ; preds = %982, %943
  call void @llvm.lifetime.start.p0(i64 4, ptr %57) #9
  store i32 0, ptr %57, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %58) #9
  store ptr %17, ptr %58, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %59) #9
  %945 = load ptr, ptr %58, align 8, !tbaa !5
  %946 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %945) #9
  %947 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %59, i32 0, i32 0
  store ptr %946, ptr %947, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %60) #9
  %948 = load ptr, ptr %58, align 8, !tbaa !5
  %949 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %948) #9
  %950 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %60, i32 0, i32 0
  store ptr %949, ptr %950, align 8
  br label %951

951:                                              ; preds = %964, %944
  %952 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %60) #9
  br i1 %952, label %954, label %953

953:                                              ; preds = %951
  store i32 43, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  br label %975

954:                                              ; preds = %951
  call void @llvm.lifetime.start.p0(i64 8, ptr %61) #9
  %955 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #9
  store ptr %955, ptr %61, align 8, !tbaa !5
  %956 = load ptr, ptr %61, align 8, !tbaa !5
  %957 = getelementptr inbounds %"struct.std::pair.592", ptr %956, i32 0, i32 1
  call void @llvm.lifetime.start.p0(i64 24, ptr %63) #9
  %958 = getelementptr inbounds %class.anon.594, ptr %63, i32 0, i32 0
  store ptr %18, ptr %958, align 8, !tbaa !5
  %959 = getelementptr inbounds %class.anon.594, ptr %63, i32 0, i32 1
  store ptr %17, ptr %959, align 8, !tbaa !5
  %960 = getelementptr inbounds %class.anon.594, ptr %63, i32 0, i32 2
  store ptr %57, ptr %960, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %62, ptr noundef nonnull align 8 dereferenceable(24) %63)
          to label %961 unwind label %966

961:                                              ; preds = %954
  %962 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR6RValueESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112) %957, ptr noundef %62)
          to label %963 unwind label %970

963:                                              ; preds = %961
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  br label %964

964:                                              ; preds = %963
  %965 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #9
  br label %951

966:                                              ; preds = %954
  %967 = landingpad { ptr, i32 }
          cleanup
  %968 = extractvalue { ptr, i32 } %967, 0
  store ptr %968, ptr %11, align 8
  %969 = extractvalue { ptr, i32 } %967, 1
  store i32 %969, ptr %12, align 4
  br label %974

970:                                              ; preds = %961
  %971 = landingpad { ptr, i32 }
          cleanup
  %972 = extractvalue { ptr, i32 } %971, 0
  store ptr %972, ptr %11, align 8
  %973 = extractvalue { ptr, i32 } %971, 1
  store i32 %973, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %62) #9
  br label %974

974:                                              ; preds = %970, %966
  call void @llvm.lifetime.end.p0(i64 24, ptr %63) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %61) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %60) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %59) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %58) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  br label %1291

975:                                              ; preds = %953
  %976 = load i32, ptr %57, align 4, !tbaa !9
  %977 = icmp eq i32 %976, 0
  br i1 %977, label %978, label %979

978:                                              ; preds = %975
  store i32 41, ptr %22, align 4
  br label %980

979:                                              ; preds = %975
  store i32 0, ptr %22, align 4
  br label %980

980:                                              ; preds = %979, %978
  call void @llvm.lifetime.end.p0(i64 4, ptr %57) #9
  %981 = load i32, ptr %22, align 4
  switch i32 %981, label %2141 [
    i32 0, label %982
    i32 41, label %983
  ]

982:                                              ; preds = %980
  br label %944, !llvm.loop !22

983:                                              ; preds = %980
  br label %984

984:                                              ; preds = %983
  %985 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %986 unwind label %937

986:                                              ; preds = %984
  br i1 %985, label %987, label %999

987:                                              ; preds = %986
  %988 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %989 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %988, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %990 unwind label %937

990:                                              ; preds = %987
  %991 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %989, ptr noundef @.str.117)
          to label %992 unwind label %937

992:                                              ; preds = %990
  %993 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt4pairIN3MIR6LValueENS1_6RValueEEERSoS5_RKSt6vectorIT_SaIS7_EE(ptr noundef nonnull align 8 dereferenceable(8) %991, ptr noundef nonnull align 8 dereferenceable(24) %17)
          to label %994 unwind label %937

994:                                              ; preds = %992
  %995 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %993, ptr noundef @_ZSt3decRSt8ios_base)
          to label %996 unwind label %937

996:                                              ; preds = %994
  %997 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %995, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %998 unwind label %937

998:                                              ; preds = %996
  br label %999

999:                                              ; preds = %998, %986
  br label %1000

1000:                                             ; preds = %999
  br label %1001

1001:                                             ; preds = %1000
  call void @llvm.lifetime.start.p0(i64 4, ptr %64) #9
  store i32 0, ptr %64, align 4, !tbaa !9
  br label %1002

1002:                                             ; preds = %1133, %1001
  %1003 = load i32, ptr %64, align 4, !tbaa !9
  %1004 = zext i32 %1003 to i64
  %1005 = call noundef i64 @_ZNKSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  %1006 = icmp ult i64 %1004, %1005
  br i1 %1006, label %1007, label %1135

1007:                                             ; preds = %1002
  call void @llvm.lifetime.start.p0(i64 4, ptr %65) #9
  %1008 = load i32, ptr %64, align 4, !tbaa !9
  store i32 %1008, ptr %65, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr %66) #9
  %1009 = getelementptr inbounds %class.anon.595, ptr %66, i32 0, i32 0
  store ptr %18, ptr %1009, align 8, !tbaa !5
  %1010 = getelementptr inbounds %class.anon.595, ptr %66, i32 0, i32 1
  store ptr %17, ptr %1010, align 8, !tbaa !5
  %1011 = getelementptr inbounds %class.anon.595, ptr %66, i32 0, i32 2
  %1012 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %1012, ptr %1011, align 8, !tbaa !5
  %1013 = getelementptr inbounds %class.anon.595, ptr %66, i32 0, i32 3
  store ptr %64, ptr %1013, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %67) #9
  store i32 0, ptr %67, align 4, !tbaa !9
  br label %1014

1014:                                             ; preds = %1111, %1007
  %1015 = load i32, ptr %67, align 4, !tbaa !9
  %1016 = zext i32 %1015 to i64
  %1017 = load ptr, ptr %4, align 8, !tbaa !5
  %1018 = getelementptr inbounds %"class.MIR::Function", ptr %1017, i32 0, i32 2
  %1019 = call noundef i64 @_ZNKSt6vectorIN3MIR10BasicBlockESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1018) #9
  %1020 = icmp ult i64 %1016, %1019
  br i1 %1020, label %1022, label %1021

1021:                                             ; preds = %1014
  store i32 49, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  br label %1119

1022:                                             ; preds = %1014
  call void @llvm.lifetime.start.p0(i64 8, ptr %68) #9
  %1023 = load ptr, ptr %4, align 8, !tbaa !5
  %1024 = getelementptr inbounds %"class.MIR::Function", ptr %1023, i32 0, i32 2
  %1025 = load i32, ptr %67, align 4, !tbaa !9
  %1026 = zext i32 %1025 to i64
  %1027 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1024, i64 noundef %1026) #9
  store ptr %1027, ptr %68, align 8, !tbaa !5
  %1028 = load ptr, ptr %68, align 8, !tbaa !5
  %1029 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1028, i32 0, i32 1
  %1030 = invoke noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %1029)
          to label %1031 unwind label %1034

1031:                                             ; preds = %1022
  %1032 = icmp eq i32 %1030, 0
  br i1 %1032, label %1033, label %1038

1033:                                             ; preds = %1031
  store i32 51, ptr %22, align 4
  br label %1108

1034:                                             ; preds = %1102, %1099, %1022
  %1035 = landingpad { ptr, i32 }
          cleanup
  %1036 = extractvalue { ptr, i32 } %1035, 0
  store ptr %1036, ptr %11, align 8
  %1037 = extractvalue { ptr, i32 } %1035, 1
  store i32 %1037, ptr %12, align 4
  br label %1118

1038:                                             ; preds = %1031
  call void @llvm.lifetime.start.p0(i64 8, ptr %69) #9
  %1039 = load ptr, ptr %68, align 8, !tbaa !5
  %1040 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1039, i32 0, i32 0
  store ptr %1040, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %70) #9
  %1041 = load ptr, ptr %69, align 8, !tbaa !5
  %1042 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1041) #9
  %1043 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %70, i32 0, i32 0
  store ptr %1042, ptr %1043, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %71) #9
  %1044 = load ptr, ptr %69, align 8, !tbaa !5
  %1045 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1044) #9
  %1046 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %71, i32 0, i32 0
  store ptr %1045, ptr %1046, align 8
  br label %1047

1047:                                             ; preds = %1092, %1038
  %1048 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #9
  br i1 %1048, label %1050, label %1049

1049:                                             ; preds = %1047
  store i32 52, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  br label %1099

1050:                                             ; preds = %1047
  call void @llvm.lifetime.start.p0(i64 8, ptr %72) #9
  %1051 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #9
  store ptr %1051, ptr %72, align 8, !tbaa !5
  %1052 = load ptr, ptr %3, align 8, !tbaa !5
  %1053 = load i32, ptr %67, align 4, !tbaa !9
  %1054 = load ptr, ptr %72, align 8, !tbaa !5
  %1055 = load ptr, ptr %68, align 8, !tbaa !5
  %1056 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1055, i32 0, i32 0
  %1057 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1056) #9
  %1058 = ptrtoint ptr %1054 to i64
  %1059 = ptrtoint ptr %1057 to i64
  %1060 = sub i64 %1058, %1059
  %1061 = sdiv exact i64 %1060, 152
  %1062 = trunc i64 %1061 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %1052, i32 noundef %1053, i32 noundef %1062)
          to label %1063 unwind label %1081

1063:                                             ; preds = %1050
  br label %1064

1064:                                             ; preds = %1063
  %1065 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1066 unwind label %1081

1066:                                             ; preds = %1064
  br i1 %1065, label %1067, label %1085

1067:                                             ; preds = %1066
  %1068 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1069 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1068, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1070 unwind label %1081

1070:                                             ; preds = %1067
  %1071 = load ptr, ptr %3, align 8, !tbaa !5
  %1072 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1069, ptr noundef nonnull align 8 dereferenceable(120) %1071)
          to label %1073 unwind label %1081

1073:                                             ; preds = %1070
  %1074 = load ptr, ptr %72, align 8, !tbaa !5
  %1075 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %1072, ptr noundef nonnull align 8 dereferenceable(152) %1074)
          to label %1076 unwind label %1081

1076:                                             ; preds = %1073
  %1077 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1075, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1078 unwind label %1081

1078:                                             ; preds = %1076
  %1079 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1077, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1080 unwind label %1081

1080:                                             ; preds = %1078
  br label %1085

1081:                                             ; preds = %1087, %1078, %1076, %1073, %1070, %1067, %1064, %1050
  %1082 = landingpad { ptr, i32 }
          cleanup
  %1083 = extractvalue { ptr, i32 } %1082, 0
  store ptr %1083, ptr %11, align 8
  %1084 = extractvalue { ptr, i32 } %1082, 1
  store i32 %1084, ptr %12, align 4
  br label %1098

1085:                                             ; preds = %1080, %1066
  br label %1086

1086:                                             ; preds = %1085
  br label %1087

1087:                                             ; preds = %1086
  %1088 = load ptr, ptr %72, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %73, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %1089 unwind label %1081

1089:                                             ; preds = %1087
  %1090 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %1088, ptr noundef %73)
          to label %1091 unwind label %1094

1091:                                             ; preds = %1089
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  br label %1092

1092:                                             ; preds = %1091
  %1093 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #9
  br label %1047

1094:                                             ; preds = %1089
  %1095 = landingpad { ptr, i32 }
          cleanup
  %1096 = extractvalue { ptr, i32 } %1095, 0
  store ptr %1096, ptr %11, align 8
  %1097 = extractvalue { ptr, i32 } %1095, 1
  store i32 %1097, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #9
  br label %1098

1098:                                             ; preds = %1094, %1081
  call void @llvm.lifetime.end.p0(i64 8, ptr %72) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %71) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %70) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %69) #9
  br label %1118

1099:                                             ; preds = %1049
  %1100 = load ptr, ptr %3, align 8, !tbaa !5
  %1101 = load i32, ptr %67, align 4, !tbaa !9
  invoke void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120) %1100, i32 noundef %1101)
          to label %1102 unwind label %1034

1102:                                             ; preds = %1099
  %1103 = load ptr, ptr %68, align 8, !tbaa !5
  %1104 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1103, i32 0, i32 1
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %74, ptr noundef nonnull align 8 dereferenceable(32) %66)
          to label %1105 unwind label %1034

1105:                                             ; preds = %1102
  %1106 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR10TerminatorESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168) %1104, ptr noundef %74)
          to label %1107 unwind label %1114

1107:                                             ; preds = %1105
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #9
  store i32 0, ptr %22, align 4
  br label %1108

1108:                                             ; preds = %1107, %1033
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  %1109 = load i32, ptr %22, align 4
  switch i32 %1109, label %2141 [
    i32 0, label %1110
    i32 51, label %1111
  ]

1110:                                             ; preds = %1108
  br label %1111

1111:                                             ; preds = %1110, %1108
  %1112 = load i32, ptr %67, align 4, !tbaa !9
  %1113 = add i32 %1112, 1
  store i32 %1113, ptr %67, align 4, !tbaa !9
  br label %1014, !llvm.loop !23

1114:                                             ; preds = %1105
  %1115 = landingpad { ptr, i32 }
          cleanup
  %1116 = extractvalue { ptr, i32 } %1115, 0
  store ptr %1116, ptr %11, align 8
  %1117 = extractvalue { ptr, i32 } %1115, 1
  store i32 %1117, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %74) #9
  br label %1118

1118:                                             ; preds = %1114, %1098, %1034
  call void @llvm.lifetime.end.p0(i64 8, ptr %68) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %67) #9
  br label %1134

1119:                                             ; preds = %1021
  br label %1120

1120:                                             ; preds = %1119
  %1121 = load i32, ptr %64, align 4, !tbaa !9
  %1122 = load i32, ptr %65, align 4, !tbaa !9
  %1123 = icmp ugt i32 %1121, %1122
  br i1 %1123, label %1131, label %1124

1124:                                             ; preds = %1120
  %1125 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %76) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 1 dereferenceable(1) %76) #9
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1125, ptr noundef %75)
          to label %1126 unwind label %1127

1126:                                             ; preds = %1124
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #9
  br label %1131

1127:                                             ; preds = %1124
  %1128 = landingpad { ptr, i32 }
          cleanup
  %1129 = extractvalue { ptr, i32 } %1128, 0
  store ptr %1129, ptr %11, align 8
  %1130 = extractvalue { ptr, i32 } %1128, 1
  store i32 %1130, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %76) #9
  br label %1134

1131:                                             ; preds = %1126, %1120
  br label %1132

1132:                                             ; preds = %1131
  br label %1133

1133:                                             ; preds = %1132
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %1002, !llvm.loop !24

1134:                                             ; preds = %1127, %1118
  call void @llvm.lifetime.end.p0(i64 32, ptr %66) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %65) #9
  br label %1290

1135:                                             ; preds = %1002
  call void @llvm.lifetime.start.p0(i64 8, ptr %77) #9
  %1136 = load ptr, ptr %4, align 8, !tbaa !5
  %1137 = getelementptr inbounds %"class.MIR::Function", ptr %1136, i32 0, i32 2
  store ptr %1137, ptr %77, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %78) #9
  %1138 = load ptr, ptr %77, align 8, !tbaa !5
  %1139 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1138) #9
  %1140 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %78, i32 0, i32 0
  store ptr %1139, ptr %1140, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %79) #9
  %1141 = load ptr, ptr %77, align 8, !tbaa !5
  %1142 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1141) #9
  %1143 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %79, i32 0, i32 0
  store ptr %1142, ptr %1143, align 8
  br label %1144

1144:                                             ; preds = %1271, %1135
  %1145 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %78, ptr noundef nonnull align 8 dereferenceable(8) %79) #9
  br i1 %1145, label %1147, label %1146

1146:                                             ; preds = %1144
  store i32 58, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  br label %1273

1147:                                             ; preds = %1144
  call void @llvm.lifetime.start.p0(i64 8, ptr %80) #9
  %1148 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %78) #9
  store ptr %1148, ptr %80, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %81) #9
  %1149 = load ptr, ptr %80, align 8, !tbaa !5
  %1150 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1149, i32 0, i32 0
  %1151 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1150) #9
  %1152 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %81, i32 0, i32 0
  store ptr %1151, ptr %1152, align 8
  br label %1153

1153:                                             ; preds = %1267, %1147
  call void @llvm.lifetime.start.p0(i64 8, ptr %82) #9
  %1154 = load ptr, ptr %80, align 8, !tbaa !5
  %1155 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1154, i32 0, i32 0
  %1156 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1155) #9
  %1157 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %82, i32 0, i32 0
  store ptr %1156, ptr %1157, align 8
  %1158 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef nonnull align 8 dereferenceable(8) %82) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %82) #9
  br i1 %1158, label %1160, label %1159

1159:                                             ; preds = %1153
  store i32 60, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #9
  br label %1270

1160:                                             ; preds = %1153
  %1161 = load ptr, ptr %3, align 8, !tbaa !5
  %1162 = load ptr, ptr %80, align 8, !tbaa !5
  %1163 = load ptr, ptr %4, align 8, !tbaa !5
  %1164 = getelementptr inbounds %"class.MIR::Function", ptr %1163, i32 0, i32 2
  %1165 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1164) #9
  %1166 = ptrtoint ptr %1162 to i64
  %1167 = ptrtoint ptr %1165 to i64
  %1168 = sub i64 %1166, %1167
  %1169 = sdiv exact i64 %1168, 192
  %1170 = trunc i64 %1169 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr %83) #9
  %1171 = load ptr, ptr %80, align 8, !tbaa !5
  %1172 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1171, i32 0, i32 0
  %1173 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1172) #9
  %1174 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %83, i32 0, i32 0
  store ptr %1173, ptr %1174, align 8
  %1175 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %81, ptr noundef nonnull align 8 dereferenceable(8) %83) #9
  %1176 = trunc i64 %1175 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %1161, i32 noundef %1170, i32 noundef %1176)
          to label %1177 unwind label %1217

1177:                                             ; preds = %1160
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %84) #9
  %1178 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  %1179 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %84, i32 0, i32 0
  store ptr %1178, ptr %1179, align 8
  %1180 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %85) #9
  call void @llvm.lifetime.start.p0(i64 16, ptr %86) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %87) #9
  %1181 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1180)
          to label %1182 unwind label %1221

1182:                                             ; preds = %1177
  br i1 %1181, label %1183, label %1195

1183:                                             ; preds = %1182
  %1184 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  %1185 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1184)
          to label %1186 unwind label %1225

1186:                                             ; preds = %1183
  %1187 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1185, i32 0, i32 0
  invoke void @_ZN3MIR6LValue4CRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %86, ptr noundef nonnull align 8 dereferenceable(32) %1187)
          to label %1188 unwind label %1225

1188:                                             ; preds = %1186
  %1189 = invoke ptr @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEENK4$_13clERKNS_6LValue4CRefE"(ptr noundef nonnull align 8 dereferenceable(8) %18, ptr noundef nonnull align 8 dereferenceable(16) %86)
          to label %1190 unwind label %1225

1190:                                             ; preds = %1188
  %1191 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %85, i32 0, i32 0
  store ptr %1189, ptr %1191, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %84, ptr align 8 %85, i64 8, i1 false), !tbaa.struct !25
  %1192 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  %1193 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.589", ptr %87, i32 0, i32 0
  store ptr %1192, ptr %1193, align 8
  %1194 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %84, ptr noundef nonnull align 8 dereferenceable(8) %87) #9
  br label %1195

1195:                                             ; preds = %1190, %1182
  %1196 = phi i1 [ false, %1182 ], [ %1194, %1190 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr %87) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  br i1 %1196, label %1197, label %1243

1197:                                             ; preds = %1195
  br label %1198

1198:                                             ; preds = %1197
  %1199 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1200 unwind label %1221

1200:                                             ; preds = %1198
  br i1 %1199, label %1201, label %1229

1201:                                             ; preds = %1200
  %1202 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1203 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1202, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1204 unwind label %1221

1204:                                             ; preds = %1201
  %1205 = load ptr, ptr %3, align 8, !tbaa !5
  %1206 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1203, ptr noundef nonnull align 8 dereferenceable(120) %1205)
          to label %1207 unwind label %1221

1207:                                             ; preds = %1204
  %1208 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1206, ptr noundef @.str.118)
          to label %1209 unwind label %1221

1209:                                             ; preds = %1207
  %1210 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  %1211 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %1208, ptr noundef nonnull align 8 dereferenceable(152) %1210)
          to label %1212 unwind label %1221

1212:                                             ; preds = %1209
  %1213 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1211, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1214 unwind label %1221

1214:                                             ; preds = %1212
  %1215 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1213, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1216 unwind label %1221

1216:                                             ; preds = %1214
  br label %1229

1217:                                             ; preds = %1160
  %1218 = landingpad { ptr, i32 }
          cleanup
  %1219 = extractvalue { ptr, i32 } %1218, 0
  store ptr %1219, ptr %11, align 8
  %1220 = extractvalue { ptr, i32 } %1218, 1
  store i32 %1220, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %83) #9
  br label %1269

1221:                                             ; preds = %1251, %1248, %1244, %1214, %1212, %1209, %1207, %1204, %1201, %1198, %1177
  %1222 = landingpad { ptr, i32 }
          cleanup
  %1223 = extractvalue { ptr, i32 } %1222, 0
  store ptr %1223, ptr %11, align 8
  %1224 = extractvalue { ptr, i32 } %1222, 1
  store i32 %1224, ptr %12, align 4
  br label %1268

1225:                                             ; preds = %1188, %1186, %1183
  %1226 = landingpad { ptr, i32 }
          cleanup
  %1227 = extractvalue { ptr, i32 } %1226, 0
  store ptr %1227, ptr %11, align 8
  %1228 = extractvalue { ptr, i32 } %1226, 1
  store i32 %1228, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 16, ptr %86) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %85) #9
  br label %1268

1229:                                             ; preds = %1216, %1200
  br label %1230

1230:                                             ; preds = %1229
  br label %1231

1231:                                             ; preds = %1230
  call void @llvm.lifetime.start.p0(i64 8, ptr %88) #9
  %1232 = load ptr, ptr %80, align 8, !tbaa !5
  %1233 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1232, i32 0, i32 0
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %89, ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  %1234 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.189", ptr %89, i32 0, i32 0
  %1235 = load ptr, ptr %1234, align 8
  %1236 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %1233, ptr %1235)
          to label %1237 unwind label %1239

1237:                                             ; preds = %1231
  %1238 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %88, i32 0, i32 0
  store ptr %1236, ptr %1238, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %81, ptr align 8 %88, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  br label %1267

1239:                                             ; preds = %1231
  %1240 = landingpad { ptr, i32 }
          cleanup
  %1241 = extractvalue { ptr, i32 } %1240, 0
  store ptr %1241, ptr %11, align 8
  %1242 = extractvalue { ptr, i32 } %1240, 1
  store i32 %1242, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %88) #9
  br label %1268

1243:                                             ; preds = %1195
  br label %1244

1244:                                             ; preds = %1243
  %1245 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  %1246 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1245)
          to label %1247 unwind label %1221

1247:                                             ; preds = %1244
  br i1 %1246, label %1248, label %1263

1248:                                             ; preds = %1247
  %1249 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  %1250 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1249)
          to label %1251 unwind label %1221

1251:                                             ; preds = %1248
  %1252 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1250, i32 0, i32 1
  %1253 = invoke noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %1252)
          to label %1254 unwind label %1221

1254:                                             ; preds = %1251
  %1255 = icmp eq i32 %1253, 0
  br i1 %1255, label %1256, label %1263

1256:                                             ; preds = %1254
  %1257 = load ptr, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr %91) #9
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %90, ptr noundef nonnull align 1 dereferenceable(1) %91) #9
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %1257, ptr noundef %90)
          to label %1258 unwind label %1259

1258:                                             ; preds = %1256
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #9
  br label %1263

1259:                                             ; preds = %1256
  %1260 = landingpad { ptr, i32 }
          cleanup
  %1261 = extractvalue { ptr, i32 } %1260, 0
  store ptr %1261, ptr %11, align 8
  %1262 = extractvalue { ptr, i32 } %1260, 1
  store i32 %1262, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %90) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %91) #9
  br label %1268

1263:                                             ; preds = %1258, %1254, %1247
  br label %1264

1264:                                             ; preds = %1263
  br label %1265

1265:                                             ; preds = %1264
  %1266 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %81) #9
  br label %1267

1267:                                             ; preds = %1265, %1237
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  br label %1153, !llvm.loop !26

1268:                                             ; preds = %1259, %1239, %1225, %1221
  call void @llvm.lifetime.end.p0(i64 8, ptr %84) #9
  br label %1269

1269:                                             ; preds = %1268, %1217
  call void @llvm.lifetime.end.p0(i64 8, ptr %81) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %79) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %78) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %77) #9
  br label %1290

1270:                                             ; preds = %1159
  call void @llvm.lifetime.end.p0(i64 8, ptr %80) #9
  br label %1271

1271:                                             ; preds = %1270
  %1272 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %78) #9
  br label %1144

1273:                                             ; preds = %1146
  %1274 = load i32, ptr %64, align 4, !tbaa !9
  %1275 = icmp ugt i32 %1274, 0
  %1276 = zext i1 %1275 to i8
  store i8 %1276, ptr %5, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #9
  br label %1277

1277:                                             ; preds = %1273
  %1278 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1279 unwind label %1292

1279:                                             ; preds = %1277
  br i1 %1278, label %1280, label %1296

1280:                                             ; preds = %1279
  %1281 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1282 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1281, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1283 unwind label %1292

1283:                                             ; preds = %1280
  %1284 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1282, ptr noundef @.str.119)
          to label %1285 unwind label %1292

1285:                                             ; preds = %1283
  %1286 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1284, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1287 unwind label %1292

1287:                                             ; preds = %1285
  %1288 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1286, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1289 unwind label %1292

1289:                                             ; preds = %1287
  br label %1296

1290:                                             ; preds = %1269, %1134
  call void @llvm.lifetime.end.p0(i64 4, ptr %64) #9
  br label %1291

1291:                                             ; preds = %1290, %974, %937, %920
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  call void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #9
  br label %2133

1292:                                             ; preds = %1916, %1914, %1912, %1909, %1906, %1612, %1610, %1608, %1605, %1602, %1287, %1285, %1283, %1280, %1277
  %1293 = landingpad { ptr, i32 }
          cleanup
  %1294 = extractvalue { ptr, i32 } %1293, 0
  store ptr %1294, ptr %11, align 8
  %1295 = extractvalue { ptr, i32 } %1293, 1
  store i32 %1295, ptr %12, align 4
  br label %2133

1296:                                             ; preds = %1289, %1279
  br label %1297

1297:                                             ; preds = %1296
  br label %1298

1298:                                             ; preds = %1297
  call void @llvm.lifetime.start.p0(i64 8, ptr %92) #9
  %1299 = load ptr, ptr %4, align 8, !tbaa !5
  %1300 = getelementptr inbounds %"class.MIR::Function", ptr %1299, i32 0, i32 2
  store ptr %1300, ptr %92, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %93) #9
  %1301 = load ptr, ptr %92, align 8, !tbaa !5
  %1302 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1301) #9
  %1303 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %93, i32 0, i32 0
  store ptr %1302, ptr %1303, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %94) #9
  %1304 = load ptr, ptr %92, align 8, !tbaa !5
  %1305 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1304) #9
  %1306 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %94, i32 0, i32 0
  store ptr %1305, ptr %1306, align 8
  br label %1307

1307:                                             ; preds = %1599, %1298
  %1308 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %93, ptr noundef nonnull align 8 dereferenceable(8) %94) #9
  br i1 %1308, label %1310, label %1309

1309:                                             ; preds = %1307
  store i32 68, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  br label %1601

1310:                                             ; preds = %1307
  call void @llvm.lifetime.start.p0(i64 8, ptr %95) #9
  %1311 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %93) #9
  store ptr %1311, ptr %95, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %96) #9
  %1312 = load ptr, ptr %95, align 8, !tbaa !5
  %1313 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1312, i32 0, i32 0
  %1314 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1313) #9
  %1315 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %96, i32 0, i32 0
  store ptr %1314, ptr %1315, align 8
  br label %1316

1316:                                             ; preds = %1594, %1310
  call void @llvm.lifetime.start.p0(i64 8, ptr %97) #9
  %1317 = load ptr, ptr %95, align 8, !tbaa !5
  %1318 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1317, i32 0, i32 0
  %1319 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1318) #9
  %1320 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %97, i32 0, i32 0
  store ptr %1319, ptr %1320, align 8
  %1321 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef nonnull align 8 dereferenceable(8) %97) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %97) #9
  br i1 %1321, label %1323, label %1322

1322:                                             ; preds = %1316
  store i32 70, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  br label %1598

1323:                                             ; preds = %1316
  %1324 = load ptr, ptr %3, align 8, !tbaa !5
  %1325 = load ptr, ptr %95, align 8, !tbaa !5
  %1326 = load ptr, ptr %4, align 8, !tbaa !5
  %1327 = getelementptr inbounds %"class.MIR::Function", ptr %1326, i32 0, i32 2
  %1328 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1327) #9
  %1329 = ptrtoint ptr %1325 to i64
  %1330 = ptrtoint ptr %1328 to i64
  %1331 = sub i64 %1329, %1330
  %1332 = sdiv exact i64 %1331, 192
  %1333 = trunc i64 %1332 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr %98) #9
  %1334 = load ptr, ptr %95, align 8, !tbaa !5
  %1335 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1334, i32 0, i32 0
  %1336 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1335) #9
  %1337 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %98, i32 0, i32 0
  store ptr %1336, ptr %1337, align 8
  %1338 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %96, ptr noundef nonnull align 8 dereferenceable(8) %98) #9
  %1339 = trunc i64 %1338 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %1324, i32 noundef %1333, i32 noundef %1339)
          to label %1340 unwind label %1345

1340:                                             ; preds = %1323
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  %1341 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %96) #9
  %1342 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1341)
          to label %1343 unwind label %1349

1343:                                             ; preds = %1340
  br i1 %1342, label %1353, label %1344

1344:                                             ; preds = %1343
  br label %1594

1345:                                             ; preds = %1323
  %1346 = landingpad { ptr, i32 }
          cleanup
  %1347 = extractvalue { ptr, i32 } %1346, 0
  store ptr %1347, ptr %11, align 8
  %1348 = extractvalue { ptr, i32 } %1346, 1
  store i32 %1348, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %98) #9
  br label %1597

1349:                                             ; preds = %1356, %1353, %1340
  %1350 = landingpad { ptr, i32 }
          cleanup
  %1351 = extractvalue { ptr, i32 } %1350, 0
  store ptr %1351, ptr %11, align 8
  %1352 = extractvalue { ptr, i32 } %1350, 1
  store i32 %1352, ptr %12, align 4
  br label %1597

1353:                                             ; preds = %1343
  %1354 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %96) #9
  %1355 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1354)
          to label %1356 unwind label %1349

1356:                                             ; preds = %1353
  %1357 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1355, i32 0, i32 1
  %1358 = invoke noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %1357)
          to label %1359 unwind label %1349

1359:                                             ; preds = %1356
  %1360 = icmp eq i32 %1358, 0
  br i1 %1360, label %1361, label %1362

1361:                                             ; preds = %1359
  br label %1594

1362:                                             ; preds = %1359
  call void @llvm.lifetime.start.p0(i64 8, ptr %99) #9
  %1363 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %96) #9
  %1364 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1363)
          to label %1365 unwind label %1392

1365:                                             ; preds = %1362
  %1366 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1364, i32 0, i32 0
  store ptr %1366, ptr %99, align 8, !tbaa !5
  %1367 = load ptr, ptr %99, align 8, !tbaa !5
  %1368 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %1367)
          to label %1369 unwind label %1392

1369:                                             ; preds = %1365
  br i1 %1368, label %1370, label %1404

1370:                                             ; preds = %1369
  call void @llvm.lifetime.start.p0(i64 8, ptr %100) #9
  %1371 = getelementptr inbounds %struct.anon, ptr %13, i32 0, i32 0
  %1372 = load ptr, ptr %99, align 8, !tbaa !5
  %1373 = invoke noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %1372)
          to label %1374 unwind label %1396

1374:                                             ; preds = %1370
  %1375 = zext i32 %1373 to i64
  %1376 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1371, i64 noundef %1375) #9
  store ptr %1376, ptr %100, align 8, !tbaa !5
  %1377 = load ptr, ptr %100, align 8, !tbaa !5
  %1378 = getelementptr inbounds %struct.ValUse, ptr %1377, i32 0, i32 0
  %1379 = load i32, ptr %1378, align 4, !tbaa !11
  %1380 = icmp eq i32 %1379, 1
  br i1 %1380, label %1381, label %1391

1381:                                             ; preds = %1374
  %1382 = load ptr, ptr %100, align 8, !tbaa !5
  %1383 = getelementptr inbounds %struct.ValUse, ptr %1382, i32 0, i32 1
  %1384 = load i32, ptr %1383, align 4, !tbaa !13
  %1385 = icmp eq i32 %1384, 1
  br i1 %1385, label %1386, label %1391

1386:                                             ; preds = %1381
  %1387 = load ptr, ptr %100, align 8, !tbaa !5
  %1388 = getelementptr inbounds %struct.ValUse, ptr %1387, i32 0, i32 2
  %1389 = load i32, ptr %1388, align 4, !tbaa !14
  %1390 = icmp eq i32 %1389, 0
  br i1 %1390, label %1400, label %1391

1391:                                             ; preds = %1386, %1381, %1374
  store i32 72, ptr %22, align 4
  br label %1401

1392:                                             ; preds = %1365, %1362
  %1393 = landingpad { ptr, i32 }
          cleanup
  %1394 = extractvalue { ptr, i32 } %1393, 0
  store ptr %1394, ptr %11, align 8
  %1395 = extractvalue { ptr, i32 } %1393, 1
  store i32 %1395, ptr %12, align 4
  br label %1596

1396:                                             ; preds = %1370
  %1397 = landingpad { ptr, i32 }
          cleanup
  %1398 = extractvalue { ptr, i32 } %1397, 0
  store ptr %1398, ptr %11, align 8
  %1399 = extractvalue { ptr, i32 } %1397, 1
  store i32 %1399, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  br label %1596

1400:                                             ; preds = %1386
  store i32 0, ptr %22, align 4
  br label %1401

1401:                                             ; preds = %1400, %1391
  call void @llvm.lifetime.end.p0(i64 8, ptr %100) #9
  %1402 = load i32, ptr %22, align 4
  switch i32 %1402, label %1591 [
    i32 0, label %1403
  ]

1403:                                             ; preds = %1401
  br label %1405

1404:                                             ; preds = %1369
  store i32 72, ptr %22, align 4
  br label %1591

1405:                                             ; preds = %1403
  call void @llvm.lifetime.start.p0(i64 8, ptr %101) #9
  %1406 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %96, i64 noundef 1) #9
  %1407 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %101, i32 0, i32 0
  store ptr %1406, ptr %1407, align 8
  br label %1408

1408:                                             ; preds = %1584, %1405
  call void @llvm.lifetime.start.p0(i64 8, ptr %102) #9
  %1409 = load ptr, ptr %95, align 8, !tbaa !5
  %1410 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1409, i32 0, i32 0
  %1411 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1410) #9
  %1412 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %102, i32 0, i32 0
  store ptr %1411, ptr %1412, align 8
  %1413 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %101, ptr noundef nonnull align 8 dereferenceable(8) %102) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %102) #9
  br i1 %1413, label %1415, label %1414

1414:                                             ; preds = %1408
  store i32 73, ptr %22, align 4
  br label %1588

1415:                                             ; preds = %1408
  %1416 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1417 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1416)
          to label %1418 unwind label %1420

1418:                                             ; preds = %1415
  br i1 %1417, label %1424, label %1419

1419:                                             ; preds = %1418
  br label %1584

1420:                                             ; preds = %1447, %1444, %1441, %1436, %1433, %1427, %1424, %1415
  %1421 = landingpad { ptr, i32 }
          cleanup
  %1422 = extractvalue { ptr, i32 } %1421, 0
  store ptr %1422, ptr %11, align 8
  %1423 = extractvalue { ptr, i32 } %1421, 1
  store i32 %1423, ptr %12, align 4
  br label %1589

1424:                                             ; preds = %1418
  %1425 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1426 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1425)
          to label %1427 unwind label %1420

1427:                                             ; preds = %1424
  %1428 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1426, i32 0, i32 1
  %1429 = invoke noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %1428)
          to label %1430 unwind label %1420

1430:                                             ; preds = %1427
  %1431 = icmp eq i32 %1429, 0
  br i1 %1431, label %1432, label %1433

1432:                                             ; preds = %1430
  br label %1584

1433:                                             ; preds = %1430
  %1434 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1435 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1434)
          to label %1436 unwind label %1420

1436:                                             ; preds = %1433
  %1437 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1435, i32 0, i32 1
  %1438 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1437)
          to label %1439 unwind label %1420

1439:                                             ; preds = %1436
  br i1 %1438, label %1441, label %1440

1440:                                             ; preds = %1439
  br label %1584

1441:                                             ; preds = %1439
  %1442 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1443 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1442)
          to label %1444 unwind label %1420

1444:                                             ; preds = %1441
  %1445 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1443, i32 0, i32 1
  %1446 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1445)
          to label %1447 unwind label %1420

1447:                                             ; preds = %1444
  %1448 = load ptr, ptr %99, align 8, !tbaa !5
  %1449 = invoke noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %1446, ptr noundef nonnull align 8 dereferenceable(32) %1448)
          to label %1450 unwind label %1420

1450:                                             ; preds = %1447
  br i1 %1449, label %1451, label %1452

1451:                                             ; preds = %1450
  br label %1584

1452:                                             ; preds = %1450
  call void @llvm.lifetime.start.p0(i64 8, ptr %103) #9
  %1453 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1454 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1453)
          to label %1455 unwind label %1482

1455:                                             ; preds = %1452
  %1456 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1454, i32 0, i32 0
  store ptr %1456, ptr %103, align 8, !tbaa !5
  %1457 = load ptr, ptr %103, align 8, !tbaa !5
  %1458 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %1457)
          to label %1459 unwind label %1482

1459:                                             ; preds = %1455
  br i1 %1458, label %1460, label %1494

1460:                                             ; preds = %1459
  call void @llvm.lifetime.start.p0(i64 8, ptr %104) #9
  %1461 = getelementptr inbounds %struct.anon, ptr %13, i32 0, i32 0
  %1462 = load ptr, ptr %103, align 8, !tbaa !5
  %1463 = invoke noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %1462)
          to label %1464 unwind label %1486

1464:                                             ; preds = %1460
  %1465 = zext i32 %1463 to i64
  %1466 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1461, i64 noundef %1465) #9
  store ptr %1466, ptr %104, align 8, !tbaa !5
  %1467 = load ptr, ptr %104, align 8, !tbaa !5
  %1468 = getelementptr inbounds %struct.ValUse, ptr %1467, i32 0, i32 0
  %1469 = load i32, ptr %1468, align 4, !tbaa !11
  %1470 = icmp eq i32 %1469, 1
  br i1 %1470, label %1471, label %1481

1471:                                             ; preds = %1464
  %1472 = load ptr, ptr %104, align 8, !tbaa !5
  %1473 = getelementptr inbounds %struct.ValUse, ptr %1472, i32 0, i32 1
  %1474 = load i32, ptr %1473, align 4, !tbaa !13
  %1475 = icmp eq i32 %1474, 1
  br i1 %1475, label %1476, label %1481

1476:                                             ; preds = %1471
  %1477 = load ptr, ptr %104, align 8, !tbaa !5
  %1478 = getelementptr inbounds %struct.ValUse, ptr %1477, i32 0, i32 2
  %1479 = load i32, ptr %1478, align 4, !tbaa !14
  %1480 = icmp eq i32 %1479, 0
  br i1 %1480, label %1490, label %1481

1481:                                             ; preds = %1476, %1471, %1464
  store i32 73, ptr %22, align 4
  br label %1491

1482:                                             ; preds = %1494, %1455, %1452
  %1483 = landingpad { ptr, i32 }
          cleanup
  %1484 = extractvalue { ptr, i32 } %1483, 0
  store ptr %1484, ptr %11, align 8
  %1485 = extractvalue { ptr, i32 } %1483, 1
  store i32 %1485, ptr %12, align 4
  br label %1587

1486:                                             ; preds = %1460
  %1487 = landingpad { ptr, i32 }
          cleanup
  %1488 = extractvalue { ptr, i32 } %1487, 0
  store ptr %1488, ptr %11, align 8
  %1489 = extractvalue { ptr, i32 } %1487, 1
  store i32 %1489, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  br label %1587

1490:                                             ; preds = %1476
  store i32 0, ptr %22, align 4
  br label %1491

1491:                                             ; preds = %1490, %1481
  call void @llvm.lifetime.end.p0(i64 8, ptr %104) #9
  %1492 = load i32, ptr %22, align 4
  switch i32 %1492, label %1581 [
    i32 0, label %1493
  ]

1493:                                             ; preds = %1491
  br label %1501

1494:                                             ; preds = %1459
  %1495 = load ptr, ptr %103, align 8, !tbaa !5
  %1496 = invoke noundef zeroext i1 @_ZNK3MIR6LValue9is_ReturnEv(ptr noundef nonnull align 8 dereferenceable(32) %1495)
          to label %1497 unwind label %1482

1497:                                             ; preds = %1494
  br i1 %1496, label %1498, label %1499

1498:                                             ; preds = %1497
  br label %1500

1499:                                             ; preds = %1497
  store i32 73, ptr %22, align 4
  br label %1581

1500:                                             ; preds = %1498
  br label %1501

1501:                                             ; preds = %1500, %1493
  call void @llvm.lifetime.start.p0(i64 1, ptr %105) #9
  store i8 0, ptr %105, align 1, !tbaa !15
  call void @llvm.lifetime.start.p0(i64 8, ptr %106) #9
  %1502 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %96, i64 noundef 1) #9
  %1503 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %106, i32 0, i32 0
  store ptr %1502, ptr %1503, align 8
  br label %1504

1504:                                             ; preds = %1523, %1501
  %1505 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %106, ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  br i1 %1505, label %1507, label %1506

1506:                                             ; preds = %1504
  store i32 76, ptr %22, align 4
  br label %1526

1507:                                             ; preds = %1504
  call void @llvm.lifetime.start.p0(i64 8, ptr %107) #9
  %1508 = getelementptr inbounds %class.anon.600, ptr %107, i32 0, i32 0
  %1509 = load ptr, ptr %103, align 8, !tbaa !5
  store ptr %1509, ptr %1508, align 8, !tbaa !5
  %1510 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %106) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %109) #9
  %1511 = getelementptr inbounds %class.anon.601, ptr %109, i32 0, i32 0
  store ptr %107, ptr %1511, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %108, ptr noundef nonnull align 8 dereferenceable(8) %109) #9
  %1512 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %1510, ptr noundef %108)
          to label %1513 unwind label %1515

1513:                                             ; preds = %1507
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #9
  br i1 %1512, label %1514, label %1519

1514:                                             ; preds = %1513
  store i8 1, ptr %105, align 1, !tbaa !15
  store i32 76, ptr %22, align 4
  br label %1520

1515:                                             ; preds = %1507
  %1516 = landingpad { ptr, i32 }
          cleanup
  %1517 = extractvalue { ptr, i32 } %1516, 0
  store ptr %1517, ptr %11, align 8
  %1518 = extractvalue { ptr, i32 } %1516, 1
  store i32 %1518, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %108) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %109) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  br label %1586

1519:                                             ; preds = %1513
  store i32 0, ptr %22, align 4
  br label %1520

1520:                                             ; preds = %1519, %1514
  call void @llvm.lifetime.end.p0(i64 8, ptr %107) #9
  %1521 = load i32, ptr %22, align 4
  switch i32 %1521, label %1526 [
    i32 0, label %1522
  ]

1522:                                             ; preds = %1520
  br label %1523

1523:                                             ; preds = %1522
  %1524 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %106, i32 noundef 0) #9
  %1525 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %110, i32 0, i32 0
  store ptr %1524, ptr %1525, align 8
  br label %1504, !llvm.loop !27

1526:                                             ; preds = %1520, %1506
  call void @llvm.lifetime.end.p0(i64 8, ptr %106) #9
  br label %1527

1527:                                             ; preds = %1526
  %1528 = load i8, ptr %105, align 1, !tbaa !15, !range !17, !noundef !18
  %1529 = trunc i8 %1528 to i1
  br i1 %1529, label %1579, label %1530

1530:                                             ; preds = %1527
  br label %1531

1531:                                             ; preds = %1530
  %1532 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1533 unwind label %1555

1533:                                             ; preds = %1531
  br i1 %1532, label %1534, label %1559

1534:                                             ; preds = %1533
  %1535 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1536 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1535, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1537 unwind label %1555

1537:                                             ; preds = %1534
  %1538 = load ptr, ptr %3, align 8, !tbaa !5
  %1539 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1536, ptr noundef nonnull align 8 dereferenceable(120) %1538)
          to label %1540 unwind label %1555

1540:                                             ; preds = %1537
  %1541 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1539, ptr noundef @.str.120)
          to label %1542 unwind label %1555

1542:                                             ; preds = %1540
  %1543 = load ptr, ptr %99, align 8, !tbaa !5
  %1544 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %1541, ptr noundef nonnull align 8 dereferenceable(32) %1543)
          to label %1545 unwind label %1555

1545:                                             ; preds = %1542
  %1546 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1544, ptr noundef @.str.35)
          to label %1547 unwind label %1555

1547:                                             ; preds = %1545
  %1548 = load ptr, ptr %103, align 8, !tbaa !5
  %1549 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %1546, ptr noundef nonnull align 8 dereferenceable(32) %1548)
          to label %1550 unwind label %1555

1550:                                             ; preds = %1547
  %1551 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1549, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1552 unwind label %1555

1552:                                             ; preds = %1550
  %1553 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1551, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1554 unwind label %1555

1554:                                             ; preds = %1552
  br label %1559

1555:                                             ; preds = %1571, %1568, %1564, %1561, %1552, %1550, %1547, %1545, %1542, %1540, %1537, %1534, %1531
  %1556 = landingpad { ptr, i32 }
          cleanup
  %1557 = extractvalue { ptr, i32 } %1556, 0
  store ptr %1557, ptr %11, align 8
  %1558 = extractvalue { ptr, i32 } %1556, 1
  store i32 %1558, ptr %12, align 4
  br label %1586

1559:                                             ; preds = %1554, %1533
  br label %1560

1560:                                             ; preds = %1559
  br label %1561

1561:                                             ; preds = %1560
  %1562 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1563 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1562)
          to label %1564 unwind label %1555

1564:                                             ; preds = %1561
  %1565 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1563, i32 0, i32 0
  %1566 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %96) #9
  %1567 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1566)
          to label %1568 unwind label %1555

1568:                                             ; preds = %1564
  %1569 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1567, i32 0, i32 0
  %1570 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1569, ptr noundef nonnull align 8 dereferenceable(32) %1565)
          to label %1571 unwind label %1555

1571:                                             ; preds = %1568
  %1572 = load ptr, ptr %95, align 8, !tbaa !5
  %1573 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1572, i32 0, i32 0
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %111, ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  %1574 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.189", ptr %111, i32 0, i32 0
  %1575 = load ptr, ptr %1574, align 8
  %1576 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %1573, ptr %1575)
          to label %1577 unwind label %1555

1577:                                             ; preds = %1571
  %1578 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %112, i32 0, i32 0
  store ptr %1576, ptr %1578, align 8
  store i8 1, ptr %5, align 1, !tbaa !15
  store i32 73, ptr %22, align 4
  br label %1580

1579:                                             ; preds = %1527
  store i32 0, ptr %22, align 4
  br label %1580

1580:                                             ; preds = %1579, %1577
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  br label %1581

1581:                                             ; preds = %1580, %1499, %1491
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  %1582 = load i32, ptr %22, align 4
  switch i32 %1582, label %1588 [
    i32 0, label %1583
  ]

1583:                                             ; preds = %1581
  br label %1584

1584:                                             ; preds = %1583, %1451, %1440, %1432, %1419
  %1585 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %101) #9
  br label %1408, !llvm.loop !28

1586:                                             ; preds = %1555, %1515
  call void @llvm.lifetime.end.p0(i64 1, ptr %105) #9
  br label %1587

1587:                                             ; preds = %1586, %1486, %1482
  call void @llvm.lifetime.end.p0(i64 8, ptr %103) #9
  br label %1589

1588:                                             ; preds = %1581, %1414
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1590

1589:                                             ; preds = %1587, %1420
  call void @llvm.lifetime.end.p0(i64 8, ptr %101) #9
  br label %1596

1590:                                             ; preds = %1588
  store i32 0, ptr %22, align 4
  br label %1591

1591:                                             ; preds = %1590, %1404, %1401
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  %1592 = load i32, ptr %22, align 4
  switch i32 %1592, label %2141 [
    i32 0, label %1593
    i32 72, label %1594
  ]

1593:                                             ; preds = %1591
  br label %1594

1594:                                             ; preds = %1593, %1591, %1361, %1344
  %1595 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %96) #9
  br label %1316, !llvm.loop !29

1596:                                             ; preds = %1589, %1396, %1392
  call void @llvm.lifetime.end.p0(i64 8, ptr %99) #9
  br label %1597

1597:                                             ; preds = %1596, %1349, %1345
  call void @llvm.lifetime.end.p0(i64 8, ptr %96) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %94) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %93) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %92) #9
  br label %2133

1598:                                             ; preds = %1322
  call void @llvm.lifetime.end.p0(i64 8, ptr %95) #9
  br label %1599

1599:                                             ; preds = %1598
  %1600 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %93) #9
  br label %1307

1601:                                             ; preds = %1309
  br label %1602

1602:                                             ; preds = %1601
  %1603 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1604 unwind label %1292

1604:                                             ; preds = %1602
  br i1 %1603, label %1605, label %1615

1605:                                             ; preds = %1604
  %1606 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1607 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1606, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1608 unwind label %1292

1608:                                             ; preds = %1605
  %1609 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1607, ptr noundef @.str.121)
          to label %1610 unwind label %1292

1610:                                             ; preds = %1608
  %1611 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1609, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1612 unwind label %1292

1612:                                             ; preds = %1610
  %1613 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1611, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1614 unwind label %1292

1614:                                             ; preds = %1612
  br label %1615

1615:                                             ; preds = %1614, %1604
  br label %1616

1616:                                             ; preds = %1615
  br label %1617

1617:                                             ; preds = %1616
  call void @llvm.lifetime.start.p0(i64 8, ptr %113) #9
  %1618 = load ptr, ptr %4, align 8, !tbaa !5
  %1619 = getelementptr inbounds %"class.MIR::Function", ptr %1618, i32 0, i32 2
  store ptr %1619, ptr %113, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %114) #9
  %1620 = load ptr, ptr %113, align 8, !tbaa !5
  %1621 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1620) #9
  %1622 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %114, i32 0, i32 0
  store ptr %1621, ptr %1622, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %115) #9
  %1623 = load ptr, ptr %113, align 8, !tbaa !5
  %1624 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1623) #9
  %1625 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %115, i32 0, i32 0
  store ptr %1624, ptr %1625, align 8
  br label %1626

1626:                                             ; preds = %1902, %1617
  %1627 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %114, ptr noundef nonnull align 8 dereferenceable(8) %115) #9
  br i1 %1627, label %1629, label %1628

1628:                                             ; preds = %1626
  store i32 83, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #9
  br label %1905

1629:                                             ; preds = %1626
  call void @llvm.lifetime.start.p0(i64 8, ptr %116) #9
  %1630 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %114) #9
  store ptr %1630, ptr %116, align 8, !tbaa !5
  %1631 = load ptr, ptr %116, align 8, !tbaa !5
  %1632 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1631, i32 0, i32 1
  %1633 = invoke noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %1632)
          to label %1634 unwind label %1637

1634:                                             ; preds = %1629
  %1635 = icmp eq i32 %1633, 0
  br i1 %1635, label %1636, label %1641

1636:                                             ; preds = %1634
  store i32 84, ptr %22, align 4
  br label %1899

1637:                                             ; preds = %1641, %1629
  %1638 = landingpad { ptr, i32 }
          cleanup
  %1639 = extractvalue { ptr, i32 } %1638, 0
  store ptr %1639, ptr %11, align 8
  %1640 = extractvalue { ptr, i32 } %1638, 1
  store i32 %1640, ptr %12, align 4
  br label %1904

1641:                                             ; preds = %1634
  %1642 = load ptr, ptr %116, align 8, !tbaa !5
  %1643 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1642, i32 0, i32 1
  %1644 = invoke noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %1643)
          to label %1645 unwind label %1637

1645:                                             ; preds = %1641
  br i1 %1644, label %1646, label %1898

1646:                                             ; preds = %1645
  call void @llvm.lifetime.start.p0(i64 8, ptr %117) #9
  %1647 = load ptr, ptr %116, align 8, !tbaa !5
  %1648 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1647, i32 0, i32 1
  %1649 = invoke noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %1648)
          to label %1650 unwind label %1656

1650:                                             ; preds = %1646
  store ptr %1649, ptr %117, align 8, !tbaa !5
  %1651 = load ptr, ptr %117, align 8, !tbaa !5
  %1652 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1651, i32 0, i32 2
  %1653 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %1652)
          to label %1654 unwind label %1656

1654:                                             ; preds = %1650
  br i1 %1653, label %1660, label %1655

1655:                                             ; preds = %1654
  store i32 84, ptr %22, align 4
  br label %1892

1656:                                             ; preds = %1650, %1646
  %1657 = landingpad { ptr, i32 }
          cleanup
  %1658 = extractvalue { ptr, i32 } %1657, 0
  store ptr %1658, ptr %11, align 8
  %1659 = extractvalue { ptr, i32 } %1657, 1
  store i32 %1659, ptr %12, align 4
  br label %1897

1660:                                             ; preds = %1654
  call void @llvm.lifetime.start.p0(i64 8, ptr %118) #9
  %1661 = getelementptr inbounds %struct.anon, ptr %13, i32 0, i32 0
  %1662 = load ptr, ptr %117, align 8, !tbaa !5
  %1663 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1662, i32 0, i32 2
  %1664 = invoke noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %1663)
          to label %1665 unwind label %1683

1665:                                             ; preds = %1660
  %1666 = zext i32 %1664 to i64
  %1667 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %1661, i64 noundef %1666) #9
  store ptr %1667, ptr %118, align 8, !tbaa !5
  %1668 = load ptr, ptr %118, align 8, !tbaa !5
  %1669 = getelementptr inbounds %struct.ValUse, ptr %1668, i32 0, i32 0
  %1670 = load i32, ptr %1669, align 4, !tbaa !11
  %1671 = icmp eq i32 %1670, 1
  br i1 %1671, label %1672, label %1682

1672:                                             ; preds = %1665
  %1673 = load ptr, ptr %118, align 8, !tbaa !5
  %1674 = getelementptr inbounds %struct.ValUse, ptr %1673, i32 0, i32 1
  %1675 = load i32, ptr %1674, align 4, !tbaa !13
  %1676 = icmp eq i32 %1675, 1
  br i1 %1676, label %1677, label %1682

1677:                                             ; preds = %1672
  %1678 = load ptr, ptr %118, align 8, !tbaa !5
  %1679 = getelementptr inbounds %struct.ValUse, ptr %1678, i32 0, i32 2
  %1680 = load i32, ptr %1679, align 4, !tbaa !14
  %1681 = icmp eq i32 %1680, 0
  br i1 %1681, label %1687, label %1682

1682:                                             ; preds = %1677, %1672, %1665
  store i32 84, ptr %22, align 4
  br label %1891

1683:                                             ; preds = %1660
  %1684 = landingpad { ptr, i32 }
          cleanup
  %1685 = extractvalue { ptr, i32 } %1684, 0
  store ptr %1685, ptr %11, align 8
  %1686 = extractvalue { ptr, i32 } %1684, 1
  store i32 %1686, ptr %12, align 4
  br label %1896

1687:                                             ; preds = %1677
  call void @llvm.lifetime.start.p0(i64 8, ptr %119) #9
  store ptr null, ptr %119, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %120) #9
  %1688 = load ptr, ptr %4, align 8, !tbaa !5
  %1689 = getelementptr inbounds %"class.MIR::Function", ptr %1688, i32 0, i32 2
  %1690 = load ptr, ptr %117, align 8, !tbaa !5
  %1691 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1690, i32 0, i32 0
  %1692 = load i32, ptr %1691, align 8, !tbaa !30
  %1693 = zext i32 %1692 to i64
  %1694 = invoke noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %1689, i64 noundef %1693)
          to label %1695 unwind label %1707

1695:                                             ; preds = %1687
  store ptr %1694, ptr %120, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %121) #9
  %1696 = load ptr, ptr %120, align 8, !tbaa !5
  %1697 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1696, i32 0, i32 0
  store ptr %1697, ptr %121, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %122) #9
  %1698 = load ptr, ptr %121, align 8, !tbaa !5
  %1699 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1698) #9
  %1700 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %122, i32 0, i32 0
  store ptr %1699, ptr %1700, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %123) #9
  %1701 = load ptr, ptr %121, align 8, !tbaa !5
  %1702 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1701) #9
  %1703 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %123, i32 0, i32 0
  store ptr %1702, ptr %1703, align 8
  br label %1704

1704:                                             ; preds = %1747, %1695
  %1705 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %122, ptr noundef nonnull align 8 dereferenceable(8) %123) #9
  br i1 %1705, label %1711, label %1706

1706:                                             ; preds = %1704
  store i32 85, ptr %22, align 4
  br label %1749

1707:                                             ; preds = %1687
  %1708 = landingpad { ptr, i32 }
          cleanup
  %1709 = extractvalue { ptr, i32 } %1708, 0
  store ptr %1709, ptr %11, align 8
  %1710 = extractvalue { ptr, i32 } %1708, 1
  store i32 %1710, ptr %12, align 4
  br label %1895

1711:                                             ; preds = %1704
  call void @llvm.lifetime.start.p0(i64 8, ptr %124) #9
  %1712 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %122) #9
  store ptr %1712, ptr %124, align 8, !tbaa !5
  %1713 = load ptr, ptr %124, align 8, !tbaa !5
  %1714 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1713)
          to label %1715 unwind label %1739

1715:                                             ; preds = %1711
  br i1 %1714, label %1716, label %1743

1716:                                             ; preds = %1715
  %1717 = load ptr, ptr %124, align 8, !tbaa !5
  %1718 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1717)
          to label %1719 unwind label %1739

1719:                                             ; preds = %1716
  %1720 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1718, i32 0, i32 1
  %1721 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1720)
          to label %1722 unwind label %1739

1722:                                             ; preds = %1719
  br i1 %1721, label %1723, label %1743

1723:                                             ; preds = %1722
  %1724 = load ptr, ptr %124, align 8, !tbaa !5
  %1725 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1724)
          to label %1726 unwind label %1739

1726:                                             ; preds = %1723
  %1727 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1725, i32 0, i32 1
  %1728 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1727)
          to label %1729 unwind label %1739

1729:                                             ; preds = %1726
  %1730 = load ptr, ptr %117, align 8, !tbaa !5
  %1731 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1730, i32 0, i32 2
  %1732 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %1728, ptr noundef nonnull align 8 dereferenceable(32) %1731)
          to label %1733 unwind label %1739

1733:                                             ; preds = %1729
  br i1 %1732, label %1734, label %1743

1734:                                             ; preds = %1733
  %1735 = load ptr, ptr %124, align 8, !tbaa !5
  %1736 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1735)
          to label %1737 unwind label %1739

1737:                                             ; preds = %1734
  %1738 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1736, i32 0, i32 0
  store ptr %1738, ptr %119, align 8, !tbaa !5
  store i32 85, ptr %22, align 4
  br label %1744

1739:                                             ; preds = %1734, %1729, %1726, %1723, %1719, %1716, %1711
  %1740 = landingpad { ptr, i32 }
          cleanup
  %1741 = extractvalue { ptr, i32 } %1740, 0
  store ptr %1741, ptr %11, align 8
  %1742 = extractvalue { ptr, i32 } %1740, 1
  store i32 %1742, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #9
  br label %1895

1743:                                             ; preds = %1733, %1722, %1715
  store i32 0, ptr %22, align 4
  br label %1744

1744:                                             ; preds = %1743, %1737
  call void @llvm.lifetime.end.p0(i64 8, ptr %124) #9
  %1745 = load i32, ptr %22, align 4
  switch i32 %1745, label %1749 [
    i32 0, label %1746
  ]

1746:                                             ; preds = %1744
  br label %1747

1747:                                             ; preds = %1746
  %1748 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %122) #9
  br label %1704

1749:                                             ; preds = %1744, %1706
  call void @llvm.lifetime.end.p0(i64 8, ptr %123) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %122) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %121) #9
  br label %1750

1750:                                             ; preds = %1749
  %1751 = load ptr, ptr %119, align 8, !tbaa !5
  %1752 = icmp ne ptr %1751, null
  br i1 %1752, label %1753, label %1890

1753:                                             ; preds = %1750
  call void @llvm.lifetime.start.p0(i64 8, ptr %125) #9
  %1754 = getelementptr inbounds %class.anon.602, ptr %125, i32 0, i32 0
  store ptr %119, ptr %1754, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %126) #9
  %1755 = load ptr, ptr %120, align 8, !tbaa !5
  %1756 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1755, i32 0, i32 0
  %1757 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1756) #9
  %1758 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %126, i32 0, i32 0
  store ptr %1757, ptr %1758, align 8
  br label %1759

1759:                                             ; preds = %1884, %1753
  call void @llvm.lifetime.start.p0(i64 8, ptr %127) #9
  %1760 = load ptr, ptr %120, align 8, !tbaa !5
  %1761 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1760, i32 0, i32 0
  %1762 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1761) #9
  %1763 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %127, i32 0, i32 0
  store ptr %1762, ptr %1763, align 8
  %1764 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 8 dereferenceable(8) %127) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %127) #9
  br i1 %1764, label %1766, label %1765

1765:                                             ; preds = %1759
  store i32 87, ptr %22, align 4
  br label %1887

1766:                                             ; preds = %1759
  %1767 = load ptr, ptr %3, align 8, !tbaa !5
  %1768 = load ptr, ptr %120, align 8, !tbaa !5
  %1769 = load ptr, ptr %4, align 8, !tbaa !5
  %1770 = getelementptr inbounds %"class.MIR::Function", ptr %1769, i32 0, i32 2
  %1771 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1770) #9
  %1772 = ptrtoint ptr %1768 to i64
  %1773 = ptrtoint ptr %1771 to i64
  %1774 = sub i64 %1772, %1773
  %1775 = sdiv exact i64 %1774, 192
  %1776 = trunc i64 %1775 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr %128) #9
  %1777 = load ptr, ptr %120, align 8, !tbaa !5
  %1778 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1777, i32 0, i32 0
  %1779 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1778) #9
  %1780 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %128, i32 0, i32 0
  store ptr %1779, ptr %1780, align 8
  %1781 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %126, ptr noundef nonnull align 8 dereferenceable(8) %128) #9
  %1782 = trunc i64 %1781 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %1767, i32 noundef %1776, i32 noundef %1782)
          to label %1783 unwind label %1832

1783:                                             ; preds = %1766
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %129) #9
  %1784 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #9
  store ptr %1784, ptr %129, align 8, !tbaa !5
  %1785 = load ptr, ptr %129, align 8, !tbaa !5
  %1786 = invoke noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1785)
          to label %1787 unwind label %1836

1787:                                             ; preds = %1783
  br i1 %1786, label %1788, label %1869

1788:                                             ; preds = %1787
  %1789 = load ptr, ptr %129, align 8, !tbaa !5
  %1790 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1789)
          to label %1791 unwind label %1836

1791:                                             ; preds = %1788
  %1792 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1790, i32 0, i32 1
  %1793 = invoke noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1792)
          to label %1794 unwind label %1836

1794:                                             ; preds = %1791
  br i1 %1793, label %1795, label %1869

1795:                                             ; preds = %1794
  %1796 = load ptr, ptr %129, align 8, !tbaa !5
  %1797 = invoke noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1796)
          to label %1798 unwind label %1836

1798:                                             ; preds = %1795
  %1799 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1797, i32 0, i32 1
  %1800 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1799)
          to label %1801 unwind label %1836

1801:                                             ; preds = %1798
  %1802 = load ptr, ptr %117, align 8, !tbaa !5
  %1803 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1802, i32 0, i32 2
  %1804 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %1800, ptr noundef nonnull align 8 dereferenceable(32) %1803)
          to label %1805 unwind label %1836

1805:                                             ; preds = %1801
  br i1 %1804, label %1806, label %1869

1806:                                             ; preds = %1805
  br label %1807

1807:                                             ; preds = %1806
  %1808 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1809 unwind label %1836

1809:                                             ; preds = %1807
  br i1 %1808, label %1810, label %1840

1810:                                             ; preds = %1809
  %1811 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1812 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1811, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1813 unwind label %1836

1813:                                             ; preds = %1810
  %1814 = load ptr, ptr %3, align 8, !tbaa !5
  %1815 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1812, ptr noundef nonnull align 8 dereferenceable(120) %1814)
          to label %1816 unwind label %1836

1816:                                             ; preds = %1813
  %1817 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1815, ptr noundef @.str.122)
          to label %1818 unwind label %1836

1818:                                             ; preds = %1816
  %1819 = load ptr, ptr %117, align 8, !tbaa !5
  %1820 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1819, i32 0, i32 2
  %1821 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %1817, ptr noundef nonnull align 8 dereferenceable(32) %1820)
          to label %1822 unwind label %1836

1822:                                             ; preds = %1818
  %1823 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1821, ptr noundef @.str.35)
          to label %1824 unwind label %1836

1824:                                             ; preds = %1822
  %1825 = load ptr, ptr %119, align 8, !tbaa !5
  %1826 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %1823, ptr noundef nonnull align 8 dereferenceable(32) %1825)
          to label %1827 unwind label %1836

1827:                                             ; preds = %1824
  %1828 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1826, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1829 unwind label %1836

1829:                                             ; preds = %1827
  %1830 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1828, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1831 unwind label %1836

1831:                                             ; preds = %1829
  br label %1840

1832:                                             ; preds = %1766
  %1833 = landingpad { ptr, i32 }
          cleanup
  %1834 = extractvalue { ptr, i32 } %1833, 0
  store ptr %1834, ptr %11, align 8
  %1835 = extractvalue { ptr, i32 } %1833, 1
  store i32 %1835, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %128) #9
  br label %1888

1836:                                             ; preds = %1829, %1827, %1824, %1822, %1818, %1816, %1813, %1810, %1807, %1801, %1798, %1795, %1791, %1788, %1783
  %1837 = landingpad { ptr, i32 }
          cleanup
  %1838 = extractvalue { ptr, i32 } %1837, 0
  store ptr %1838, ptr %11, align 8
  %1839 = extractvalue { ptr, i32 } %1837, 1
  store i32 %1839, ptr %12, align 4
  br label %1886

1840:                                             ; preds = %1831, %1809
  br label %1841

1841:                                             ; preds = %1840
  br label %1842

1842:                                             ; preds = %1841
  call void @llvm.lifetime.start.p0(i64 32, ptr %130) #9
  %1843 = load ptr, ptr %119, align 8, !tbaa !5
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind writable sret(%"struct.MIR::LValue") align 8 %130, ptr noundef nonnull align 8 dereferenceable(32) %1843)
          to label %1844 unwind label %1856

1844:                                             ; preds = %1842
  %1845 = load ptr, ptr %117, align 8, !tbaa !5
  %1846 = getelementptr inbounds %"struct.MIR::Terminator::Data_Call", ptr %1845, i32 0, i32 2
  %1847 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %1846, ptr noundef nonnull align 8 dereferenceable(32) %130)
          to label %1848 unwind label %1860

1848:                                             ; preds = %1844
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #9
  call void @llvm.lifetime.end.p0(i64 32, ptr %130) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %131) #9
  %1849 = load ptr, ptr %120, align 8, !tbaa !5
  %1850 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1849, i32 0, i32 0
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %132, ptr noundef nonnull align 8 dereferenceable(8) %126) #9
  %1851 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.189", ptr %132, i32 0, i32 0
  %1852 = load ptr, ptr %1851, align 8
  %1853 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %1850, ptr %1852)
          to label %1854 unwind label %1865

1854:                                             ; preds = %1848
  %1855 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %131, i32 0, i32 0
  store ptr %1853, ptr %1855, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %126, ptr align 8 %131, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #9
  store i8 1, ptr %5, align 1, !tbaa !15
  store i32 87, ptr %22, align 4
  br label %1881

1856:                                             ; preds = %1842
  %1857 = landingpad { ptr, i32 }
          cleanup
  %1858 = extractvalue { ptr, i32 } %1857, 0
  store ptr %1858, ptr %11, align 8
  %1859 = extractvalue { ptr, i32 } %1857, 1
  store i32 %1859, ptr %12, align 4
  br label %1864

1860:                                             ; preds = %1844
  %1861 = landingpad { ptr, i32 }
          cleanup
  %1862 = extractvalue { ptr, i32 } %1861, 0
  store ptr %1862, ptr %11, align 8
  %1863 = extractvalue { ptr, i32 } %1861, 1
  store i32 %1863, ptr %12, align 4
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %130) #9
  br label %1864

1864:                                             ; preds = %1860, %1856
  call void @llvm.lifetime.end.p0(i64 32, ptr %130) #9
  br label %1886

1865:                                             ; preds = %1848
  %1866 = landingpad { ptr, i32 }
          cleanup
  %1867 = extractvalue { ptr, i32 } %1866, 0
  store ptr %1867, ptr %11, align 8
  %1868 = extractvalue { ptr, i32 } %1866, 1
  store i32 %1868, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %131) #9
  br label %1886

1869:                                             ; preds = %1805, %1794, %1787
  %1870 = load ptr, ptr %129, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 16, ptr %134) #9
  %1871 = getelementptr inbounds %class.anon.603, ptr %134, i32 0, i32 0
  store ptr %119, ptr %1871, align 8, !tbaa !5
  %1872 = getelementptr inbounds %class.anon.603, ptr %134, i32 0, i32 1
  store ptr %125, ptr %1872, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %133, ptr noundef nonnull align 8 dereferenceable(16) %134) #9
  %1873 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %1870, ptr noundef %133)
          to label %1874 unwind label %1876

1874:                                             ; preds = %1869
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #9
  br i1 %1873, label %1875, label %1880

1875:                                             ; preds = %1874
  store i32 87, ptr %22, align 4
  br label %1881

1876:                                             ; preds = %1869
  %1877 = landingpad { ptr, i32 }
          cleanup
  %1878 = extractvalue { ptr, i32 } %1877, 0
  store ptr %1878, ptr %11, align 8
  %1879 = extractvalue { ptr, i32 } %1877, 1
  store i32 %1879, ptr %12, align 4
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %133) #9
  call void @llvm.lifetime.end.p0(i64 16, ptr %134) #9
  br label %1886

1880:                                             ; preds = %1874
  store i32 0, ptr %22, align 4
  br label %1881

1881:                                             ; preds = %1880, %1875, %1854
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  %1882 = load i32, ptr %22, align 4
  switch i32 %1882, label %1887 [
    i32 0, label %1883
  ]

1883:                                             ; preds = %1881
  br label %1884

1884:                                             ; preds = %1883
  %1885 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %126) #9
  br label %1759, !llvm.loop !45

1886:                                             ; preds = %1876, %1865, %1864, %1836
  call void @llvm.lifetime.end.p0(i64 8, ptr %129) #9
  br label %1888

1887:                                             ; preds = %1881, %1765
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #9
  br label %1889

1888:                                             ; preds = %1886, %1832
  call void @llvm.lifetime.end.p0(i64 8, ptr %126) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  br label %1895

1889:                                             ; preds = %1887
  call void @llvm.lifetime.end.p0(i64 8, ptr %125) #9
  br label %1890

1890:                                             ; preds = %1889, %1750
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  store i32 0, ptr %22, align 4
  br label %1891

1891:                                             ; preds = %1890, %1682
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  br label %1892

1892:                                             ; preds = %1891, %1655
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  %1893 = load i32, ptr %22, align 4
  switch i32 %1893, label %1899 [
    i32 0, label %1894
  ]

1894:                                             ; preds = %1892
  br label %1898

1895:                                             ; preds = %1888, %1739, %1707
  call void @llvm.lifetime.end.p0(i64 8, ptr %120) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %119) #9
  br label %1896

1896:                                             ; preds = %1895, %1683
  call void @llvm.lifetime.end.p0(i64 8, ptr %118) #9
  br label %1897

1897:                                             ; preds = %1896, %1656
  call void @llvm.lifetime.end.p0(i64 8, ptr %117) #9
  br label %1904

1898:                                             ; preds = %1894, %1645
  store i32 0, ptr %22, align 4
  br label %1899

1899:                                             ; preds = %1898, %1892, %1636
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  %1900 = load i32, ptr %22, align 4
  switch i32 %1900, label %2141 [
    i32 0, label %1901
    i32 84, label %1902
  ]

1901:                                             ; preds = %1899
  br label %1902

1902:                                             ; preds = %1901, %1899
  %1903 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %114) #9
  br label %1626

1904:                                             ; preds = %1897, %1637
  call void @llvm.lifetime.end.p0(i64 8, ptr %116) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %115) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %114) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %113) #9
  br label %2133

1905:                                             ; preds = %1628
  br label %1906

1906:                                             ; preds = %1905
  %1907 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1908 unwind label %1292

1908:                                             ; preds = %1906
  br i1 %1907, label %1909, label %1919

1909:                                             ; preds = %1908
  %1910 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1911 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1910, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1912 unwind label %1292

1912:                                             ; preds = %1909
  %1913 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1911, ptr noundef @.str.123)
          to label %1914 unwind label %1292

1914:                                             ; preds = %1912
  %1915 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1913, ptr noundef @_ZSt3decRSt8ios_base)
          to label %1916 unwind label %1292

1916:                                             ; preds = %1914
  %1917 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1915, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1918 unwind label %1292

1918:                                             ; preds = %1916
  br label %1919

1919:                                             ; preds = %1918, %1908
  br label %1920

1920:                                             ; preds = %1919
  br label %1921

1921:                                             ; preds = %1920
  call void @llvm.lifetime.start.p0(i64 8, ptr %135) #9
  %1922 = load ptr, ptr %4, align 8, !tbaa !5
  %1923 = getelementptr inbounds %"class.MIR::Function", ptr %1922, i32 0, i32 2
  store ptr %1923, ptr %135, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %136) #9
  %1924 = load ptr, ptr %135, align 8, !tbaa !5
  %1925 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1924) #9
  %1926 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %136, i32 0, i32 0
  store ptr %1925, ptr %1926, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %137) #9
  %1927 = load ptr, ptr %135, align 8, !tbaa !5
  %1928 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1927) #9
  %1929 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %137, i32 0, i32 0
  store ptr %1928, ptr %1929, align 8
  br label %1930

1930:                                             ; preds = %2128, %1921
  %1931 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %136, ptr noundef nonnull align 8 dereferenceable(8) %137) #9
  br i1 %1931, label %1933, label %1932

1932:                                             ; preds = %1930
  store i32 94, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #9
  br label %2130

1933:                                             ; preds = %1930
  call void @llvm.lifetime.start.p0(i64 8, ptr %138) #9
  %1934 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %136) #9
  store ptr %1934, ptr %138, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %139) #9
  %1935 = load ptr, ptr %138, align 8, !tbaa !5
  %1936 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1935, i32 0, i32 0
  %1937 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1936) #9
  %1938 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %139, i32 0, i32 0
  store ptr %1937, ptr %1938, align 8
  br label %1939

1939:                                             ; preds = %2122, %1933
  call void @llvm.lifetime.start.p0(i64 8, ptr %140) #9
  %1940 = load ptr, ptr %138, align 8, !tbaa !5
  %1941 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1940, i32 0, i32 0
  %1942 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %1941) #9
  %1943 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %140, i32 0, i32 0
  store ptr %1942, ptr %1943, align 8
  %1944 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull align 8 dereferenceable(8) %140) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %140) #9
  br i1 %1944, label %1946, label %1945

1945:                                             ; preds = %1939
  store i32 96, ptr %22, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  br label %2127

1946:                                             ; preds = %1939
  %1947 = load ptr, ptr %3, align 8, !tbaa !5
  %1948 = load ptr, ptr %138, align 8, !tbaa !5
  %1949 = load ptr, ptr %4, align 8, !tbaa !5
  %1950 = getelementptr inbounds %"class.MIR::Function", ptr %1949, i32 0, i32 2
  %1951 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %1950) #9
  %1952 = ptrtoint ptr %1948 to i64
  %1953 = ptrtoint ptr %1951 to i64
  %1954 = sub i64 %1952, %1953
  %1955 = sdiv exact i64 %1954, 192
  %1956 = trunc i64 %1955 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr %141) #9
  %1957 = load ptr, ptr %138, align 8, !tbaa !5
  %1958 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %1957, i32 0, i32 0
  %1959 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %1958) #9
  %1960 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %141, i32 0, i32 0
  store ptr %1959, ptr %1960, align 8
  %1961 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %139, ptr noundef nonnull align 8 dereferenceable(8) %141) #9
  %1962 = trunc i64 %1961 to i32
  invoke void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %1947, i32 noundef %1956, i32 noundef %1962)
          to label %1963 unwind label %2007

1963:                                             ; preds = %1946
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %142) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %143) #9
  %1964 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %139) #9
  %1965 = invoke noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %1964)
          to label %1966 unwind label %2011

1966:                                             ; preds = %1963
  store ptr %1965, ptr %143, align 8, !tbaa !5
  store ptr %143, ptr %142, align 8, !tbaa !5
  %1967 = load ptr, ptr %142, align 8, !tbaa !5
  %1968 = load ptr, ptr %1967, align 8, !tbaa !5
  %1969 = icmp ne ptr %1968, null
  br i1 %1969, label %1970, label %2118

1970:                                             ; preds = %1966
  call void @llvm.lifetime.start.p0(i64 8, ptr %144) #9
  %1971 = load ptr, ptr %142, align 8, !tbaa !5
  %1972 = load ptr, ptr %1971, align 8, !tbaa !5
  %1973 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1972, i32 0, i32 1
  %1974 = invoke noundef ptr @_ZN3MIR6RValue7opt_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %1973)
          to label %1975 unwind label %2015

1975:                                             ; preds = %1970
  store ptr %1974, ptr %144, align 8, !tbaa !5
  %1976 = load ptr, ptr %144, align 8, !tbaa !5
  %1977 = icmp ne ptr %1976, null
  br i1 %1977, label %1978, label %2036

1978:                                             ; preds = %1975
  %1979 = load ptr, ptr %142, align 8, !tbaa !5
  %1980 = load ptr, ptr %1979, align 8, !tbaa !5
  %1981 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1980, i32 0, i32 0
  %1982 = load ptr, ptr %144, align 8, !tbaa !5
  %1983 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %1981, ptr noundef nonnull align 8 dereferenceable(32) %1982)
          to label %1984 unwind label %2015

1984:                                             ; preds = %1978
  br i1 %1983, label %1985, label %2035

1985:                                             ; preds = %1984
  br label %1986

1986:                                             ; preds = %1985
  %1987 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1988 unwind label %2015

1988:                                             ; preds = %1986
  br i1 %1987, label %1989, label %2019

1989:                                             ; preds = %1988
  %1990 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1991 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1990, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1992 unwind label %2015

1992:                                             ; preds = %1989
  %1993 = load ptr, ptr %3, align 8, !tbaa !5
  %1994 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1991, ptr noundef nonnull align 8 dereferenceable(120) %1993)
          to label %1995 unwind label %2015

1995:                                             ; preds = %1992
  %1996 = load ptr, ptr %142, align 8, !tbaa !5
  %1997 = load ptr, ptr %1996, align 8, !tbaa !5
  %1998 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %1997, i32 0, i32 0
  %1999 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %1994, ptr noundef nonnull align 8 dereferenceable(32) %1998)
          to label %2000 unwind label %2015

2000:                                             ; preds = %1995
  %2001 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1999, ptr noundef @.str.124)
          to label %2002 unwind label %2015

2002:                                             ; preds = %2000
  %2003 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2001, ptr noundef @_ZSt3decRSt8ios_base)
          to label %2004 unwind label %2015

2004:                                             ; preds = %2002
  %2005 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2003, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2006 unwind label %2015

2006:                                             ; preds = %2004
  br label %2019

2007:                                             ; preds = %1946
  %2008 = landingpad { ptr, i32 }
          cleanup
  %2009 = extractvalue { ptr, i32 } %2008, 0
  store ptr %2009, ptr %11, align 8
  %2010 = extractvalue { ptr, i32 } %2008, 1
  store i32 %2010, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %141) #9
  br label %2126

2011:                                             ; preds = %1963
  %2012 = landingpad { ptr, i32 }
          cleanup
  %2013 = extractvalue { ptr, i32 } %2012, 0
  store ptr %2013, ptr %11, align 8
  %2014 = extractvalue { ptr, i32 } %2012, 1
  store i32 %2014, ptr %12, align 4
  br label %2125

2015:                                             ; preds = %2004, %2002, %2000, %1995, %1992, %1989, %1986, %1978, %1970
  %2016 = landingpad { ptr, i32 }
          cleanup
  %2017 = extractvalue { ptr, i32 } %2016, 0
  store ptr %2017, ptr %11, align 8
  %2018 = extractvalue { ptr, i32 } %2016, 1
  store i32 %2018, ptr %12, align 4
  br label %2090

2019:                                             ; preds = %2006, %1988
  br label %2020

2020:                                             ; preds = %2019
  br label %2021

2021:                                             ; preds = %2020
  call void @llvm.lifetime.start.p0(i64 8, ptr %145) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %146) #9
  %2022 = load ptr, ptr %138, align 8, !tbaa !5
  %2023 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %2022, i32 0, i32 0
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %147, ptr noundef nonnull align 8 dereferenceable(8) %139) #9
  %2024 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.189", ptr %147, i32 0, i32 0
  %2025 = load ptr, ptr %2024, align 8
  %2026 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %2023, ptr %2025)
          to label %2027 unwind label %2031

2027:                                             ; preds = %2021
  %2028 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %146, i32 0, i32 0
  store ptr %2026, ptr %2028, align 8
  %2029 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEmiEl(ptr noundef nonnull align 8 dereferenceable(8) %146, i64 noundef 1) #9
  %2030 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %145, i32 0, i32 0
  store ptr %2029, ptr %2030, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %139, ptr align 8 %145, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  store i32 98, ptr %22, align 4
  br label %2037

2031:                                             ; preds = %2021
  %2032 = landingpad { ptr, i32 }
          cleanup
  %2033 = extractvalue { ptr, i32 } %2032, 0
  store ptr %2033, ptr %11, align 8
  %2034 = extractvalue { ptr, i32 } %2032, 1
  store i32 %2034, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %146) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %145) #9
  br label %2090

2035:                                             ; preds = %1984
  br label %2036

2036:                                             ; preds = %2035, %1975
  store i32 0, ptr %22, align 4
  br label %2037

2037:                                             ; preds = %2036, %2027
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  %2038 = load i32, ptr %22, align 4
  switch i32 %2038, label %2119 [
    i32 0, label %2039
  ]

2039:                                             ; preds = %2037
  %2040 = load ptr, ptr %142, align 8, !tbaa !5
  %2041 = load ptr, ptr %2040, align 8, !tbaa !5
  %2042 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %2041, i32 0, i32 0
  %2043 = invoke noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %2042)
          to label %2044 unwind label %2091

2044:                                             ; preds = %2039
  br i1 %2043, label %2045, label %2117

2045:                                             ; preds = %2044
  call void @llvm.lifetime.start.p0(i64 8, ptr %148) #9
  %2046 = getelementptr inbounds %struct.anon, ptr %13, i32 0, i32 0
  %2047 = load ptr, ptr %142, align 8, !tbaa !5
  %2048 = load ptr, ptr %2047, align 8, !tbaa !5
  %2049 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %2048, i32 0, i32 0
  %2050 = invoke noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %2049)
          to label %2051 unwind label %2095

2051:                                             ; preds = %2045
  %2052 = zext i32 %2050 to i64
  %2053 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %2046, i64 noundef %2052) #9
  store ptr %2053, ptr %148, align 8, !tbaa !5
  %2054 = load ptr, ptr %148, align 8, !tbaa !5
  %2055 = getelementptr inbounds %struct.ValUse, ptr %2054, i32 0, i32 1
  %2056 = load i32, ptr %2055, align 4, !tbaa !13
  %2057 = icmp eq i32 %2056, 1
  br i1 %2057, label %2058, label %2115

2058:                                             ; preds = %2051
  %2059 = load ptr, ptr %148, align 8, !tbaa !5
  %2060 = getelementptr inbounds %struct.ValUse, ptr %2059, i32 0, i32 0
  %2061 = load i32, ptr %2060, align 4, !tbaa !11
  %2062 = icmp eq i32 %2061, 0
  br i1 %2062, label %2063, label %2115

2063:                                             ; preds = %2058
  %2064 = load ptr, ptr %148, align 8, !tbaa !5
  %2065 = getelementptr inbounds %struct.ValUse, ptr %2064, i32 0, i32 2
  %2066 = load i32, ptr %2065, align 4, !tbaa !14
  %2067 = icmp eq i32 %2066, 0
  br i1 %2067, label %2068, label %2115

2068:                                             ; preds = %2063
  br label %2069

2069:                                             ; preds = %2068
  %2070 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %2071 unwind label %2095

2071:                                             ; preds = %2069
  br i1 %2070, label %2072, label %2099

2072:                                             ; preds = %2071
  %2073 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %2074 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %2073, ptr noundef @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %2075 unwind label %2095

2075:                                             ; preds = %2072
  %2076 = load ptr, ptr %3, align 8, !tbaa !5
  %2077 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %2074, ptr noundef nonnull align 8 dereferenceable(120) %2076)
          to label %2078 unwind label %2095

2078:                                             ; preds = %2075
  %2079 = load ptr, ptr %142, align 8, !tbaa !5
  %2080 = load ptr, ptr %2079, align 8, !tbaa !5
  %2081 = getelementptr inbounds %"struct.MIR::Statement::Data_Assign", ptr %2080, i32 0, i32 0
  %2082 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %2077, ptr noundef nonnull align 8 dereferenceable(32) %2081)
          to label %2083 unwind label %2095

2083:                                             ; preds = %2078
  %2084 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %2082, ptr noundef @.str.125)
          to label %2085 unwind label %2095

2085:                                             ; preds = %2083
  %2086 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %2084, ptr noundef @_ZSt3decRSt8ios_base)
          to label %2087 unwind label %2095

2087:                                             ; preds = %2085
  %2088 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %2086, ptr noundef @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %2089 unwind label %2095

2089:                                             ; preds = %2087
  br label %2099

2090:                                             ; preds = %2031, %2015
  call void @llvm.lifetime.end.p0(i64 8, ptr %144) #9
  br label %2124

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

2095:                                             ; preds = %2087, %2085, %2083, %2078, %2075, %2072, %2069, %2045
  %2096 = landingpad { ptr, i32 }
          cleanup
  %2097 = extractvalue { ptr, i32 } %2096, 0
  store ptr %2097, ptr %11, align 8
  %2098 = extractvalue { ptr, i32 } %2096, 1
  store i32 %2098, ptr %12, align 4
  br label %2116

2099:                                             ; preds = %2089, %2071
  br label %2100

2100:                                             ; preds = %2099
  br label %2101

2101:                                             ; preds = %2100
  call void @llvm.lifetime.start.p0(i64 8, ptr %149) #9
  call void @llvm.lifetime.start.p0(i64 8, ptr %150) #9
  %2102 = load ptr, ptr %138, align 8, !tbaa !5
  %2103 = getelementptr inbounds %"struct.MIR::BasicBlock", ptr %2102, i32 0, i32 0
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %151, ptr noundef nonnull align 8 dereferenceable(8) %139) #9
  %2104 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.189", ptr %151, i32 0, i32 0
  %2105 = load ptr, ptr %2104, align 8
  %2106 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %2103, ptr %2105)
          to label %2107 unwind label %2111

2107:                                             ; preds = %2101
  %2108 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %150, i32 0, i32 0
  store ptr %2106, ptr %2108, align 8
  %2109 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEmiEl(ptr noundef nonnull align 8 dereferenceable(8) %150, i64 noundef 1) #9
  %2110 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator.148", ptr %149, i32 0, i32 0
  store ptr %2109, ptr %2110, align 8
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %139, ptr align 8 %149, i64 8, i1 false), !tbaa.struct !25
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %2115

2111:                                             ; preds = %2101
  %2112 = landingpad { ptr, i32 }
          cleanup
  %2113 = extractvalue { ptr, i32 } %2112, 0
  store ptr %2113, ptr %11, align 8
  %2114 = extractvalue { ptr, i32 } %2112, 1
  store i32 %2114, ptr %12, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %150) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %149) #9
  br label %2116

2115:                                             ; preds = %2107, %2063, %2058, %2051
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  br label %2117

2116:                                             ; preds = %2111, %2095
  call void @llvm.lifetime.end.p0(i64 8, ptr %148) #9
  br label %2124

2117:                                             ; preds = %2115, %2044
  br label %2118

2118:                                             ; preds = %2117, %1966
  store i32 0, ptr %22, align 4
  br label %2119

2119:                                             ; preds = %2118, %2037
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  %2120 = load i32, ptr %22, align 4
  switch i32 %2120, label %2141 [
    i32 0, label %2121
    i32 98, label %2122
  ]

2121:                                             ; preds = %2119
  br label %2122

2122:                                             ; preds = %2121, %2119
  %2123 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %139) #9
  br label %1939, !llvm.loop !46

2124:                                             ; preds = %2116, %2091, %2090
  call void @llvm.lifetime.end.p0(i64 8, ptr %143) #9
  br label %2125

2125:                                             ; preds = %2124, %2011
  call void @llvm.lifetime.end.p0(i64 8, ptr %142) #9
  br label %2126

2126:                                             ; preds = %2125, %2007
  call void @llvm.lifetime.end.p0(i64 8, ptr %139) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %137) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %136) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %135) #9
  br label %2133

2127:                                             ; preds = %1945
  call void @llvm.lifetime.end.p0(i64 8, ptr %138) #9
  br label %2128

2128:                                             ; preds = %2127
  %2129 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %136) #9
  br label %1930

2130:                                             ; preds = %1932
  %2131 = load i8, ptr %5, align 1, !tbaa !15, !range !17, !noundef !18
  %2132 = trunc i8 %2131 to i1
  store i32 1, ptr %22, align 4
  call void @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(24) %13) #9
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #9
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #9
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #9
  ret i1 %2132

2133:                                             ; preds = %2126, %1904, %1597, %1292, %1291, %186
  call void @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(24) %13) #9
  br label %2134

2134:                                             ; preds = %2133, %182
  call void @llvm.lifetime.end.p0(i64 24, ptr %13) #9
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %6) #9
  br label %2135

2135:                                             ; preds = %2134, %178
  call void @llvm.lifetime.end.p0(i64 40, ptr %6) #9
  call void @llvm.lifetime.end.p0(i64 1, ptr %5) #9
  br label %2136

2136:                                             ; preds = %2135
  %2137 = load ptr, ptr %11, align 8
  %2138 = load i32, ptr %12, align 4
  %2139 = insertvalue { ptr, i32 } poison, ptr %2137, 0
  %2140 = insertvalue { ptr, i32 } %2139, i32 %2138, 1
  resume { ptr, i32 } %2140

2141:                                             ; preds = %2119, %1899, %1591, %1108, %980, %915, %902
  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 noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #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 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_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

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

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

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

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

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

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

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

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #7

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

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

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

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

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) #3

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) #3

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR9StatementERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) #3

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR10TerminatorERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) #3

; 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 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32)) #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 @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112)) #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(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_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 @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSaIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEE6ValUseEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEC2EmRKS6_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt15__new_allocatorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) #4 align 2

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @"_ZSt6any_ofIN9__gnu_cxx17__normal_iteratorIPKN3MIR6LValue7WrapperESt6vectorIS4_SaIS4_EEEEZ39MIR_Optimise_PropagateSingleAssignmentsRNS2_11TypeResolveERNS2_8FunctionEE4$_14EbT_SG_T0_"(ptr, ptr) #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden ptr @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEENK4$_13clERKNS_6LValue4CRefE"(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16)) #6 align 2

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

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

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

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

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

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

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

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

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

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

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

; 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 uwtable
declare dso_local void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(144)) #3 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueENS0_6RValueEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.592") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(112)) #3

declare void @_ZNK3MIR6RValue5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8, ptr noundef nonnull align 8 dereferenceable(112)) #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt4pairIN3MIR6LValueENS1_6RValueEEERSoS5_RKSt6vectorIT_SaIS7_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24)) #6

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR6RValueESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) #3

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(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 @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #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 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #8 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { noreturn nounwind }

!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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTSZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEE6ValUse", !10, i64 0, !10, i64 4, !10, i64 8}
!13 = !{!12, !10, i64 4}
!14 = !{!12, !10, i64 8}
!15 = !{!16, !16, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = !{i8 0, i8 2}
!18 = !{}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = distinct !{!22, !20}
!23 = distinct !{!23, !20}
!24 = distinct !{!24, !20}
!25 = !{i64 0, i64 8, !5}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = distinct !{!28, !20}
!29 = distinct !{!29, !20}
!30 = !{!31, !10, i64 0}
!31 = !{!"_ZTSN3MIR10Terminator9Data_CallE", !10, i64 0, !10, i64 4, !32, i64 8, !39, i64 40, !41, i64 136}
!32 = !{!"_ZTSN3MIR6LValueE", !33, i64 0, !35, i64 8}
!33 = !{!"_ZTSN3MIR6LValue7StorageE", !34, i64 0}
!34 = !{!"long", !7, i64 0}
!35 = !{!"_ZTSSt6vectorIN3MIR6LValue7WrapperESaIS2_EE", !36, i64 0}
!36 = !{!"_ZTSSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE", !37, i64 0}
!37 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE12_Vector_implE", !38, i64 0}
!38 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!39 = !{!"_ZTSN3MIR10CallTargetE", !40, i64 0, !7, i64 8}
!40 = !{!"_ZTSN3MIR10CallTarget3TagE", !7, i64 0}
!41 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !42, i64 0}
!42 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !43, i64 0}
!43 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !44, i64 0}
!44 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!45 = distinct !{!45, !20}
!46 = distinct !{!46, !20}


; 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.572 = type { i8 }
%class.anon.574 = type { ptr }
%struct.anon = type { %"class.std::vector.575" }
%"class.std::vector.575" = type { %"struct.std::_Vector_base.576" }
%"struct.std::_Vector_base.576" = type { %"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl" }
%"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl" = type { %"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ValUse, std::allocator<ValUse>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.577" = type { i8 }
%"class.std::function.226" = type { %"class.std::_Function_base", ptr }
%class.anon.580 = type { ptr }
%"class.std::vector.581" = type { %"struct.std::_Vector_base.582" }
%"struct.std::_Vector_base.582" = type { %"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl" }
%"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl" = type { %"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl_data" }
%"struct.std::_Vector_base<std::pair<MIR::LValue, MIR::RValue>, std::allocator<std::pair<MIR::LValue, MIR::RValue>>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%class.anon.586 = type { ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.__gnu_cxx::__normal_iterator.589" = type { ptr }
%"class.MIR::LValue::CRef" = type { %"class.MIR::LValue::RefCommon" }
%"class.MIR::LValue::RefCommon" = type { ptr, i64 }
%class.anon.590 = type { ptr }
%class.anon.591 = type { ptr, ptr }
%"struct.std::pair.592" = type { %"struct.MIR::LValue", %"class.MIR::RValue" }
%"struct.MIR::LValue" = type { %"class.MIR::LValue::Storage", %"class.std::vector.106" }
%"class.MIR::LValue::Storage" = type { i64 }
%"class.std::vector.106" = type { %"struct.std::_Vector_base.107" }
%"struct.std::_Vector_base.107" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl" = type { %"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" }
%"struct.std::_Vector_base<MIR::LValue::Wrapper, std::allocator<MIR::LValue::Wrapper>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.MIR::RValue" = type { i32, %"union.MIR::RValue::DataUnion" }
%"union.MIR::RValue::DataUnion" = type { %"struct.MIR::RValue::Data_BinOp" }
%"struct.MIR::RValue::Data_BinOp" = type { %"class.MIR::Param", i32, %"class.MIR::Param" }
%"class.MIR::Param" = type { i32, %"union.MIR::Param::DataUnion" }
%"union.MIR::Param::DataUnion" = type { %"struct.MIR::Param::Data_Borrow" }
%"struct.MIR::Param::Data_Borrow" = type { i32, %"struct.MIR::LValue" }
%"class.std::function.267" = type { %"class.std::_Function_base", ptr }
%class.anon.594 = type { ptr, ptr, ptr }
%class.anon.595 = type { ptr, ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator.148" = type { ptr }
%class.anon.596 = type { i8 }
%"class.__gnu_cxx::__normal_iterator.189" = type { ptr }
%class.anon.598 = type { i8 }
%class.anon.600 = type { ptr }
%class.anon.601 = type { ptr }
%class.anon.602 = type { ptr }
%class.anon.603 = type { ptr, ptr }

@g_debug_indent_level = external local_unnamed_addr global i32, align 4
@.str.8 = external hidden unnamed_addr constant [75 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.41 = external hidden unnamed_addr constant [19 x i8], align 1
@__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [40 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.105 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.106 = external hidden unnamed_addr constant [26 x i8], align 1
@.str.107 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.108 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.109 = external hidden unnamed_addr constant [48 x i8], align 1
@.str.110 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.111 = external hidden unnamed_addr constant [14 x i8], align 1
@.str.112 = external hidden unnamed_addr constant [33 x i8], align 1
@__PRETTY_FUNCTION__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE = external hidden unnamed_addr constant [86 x i8], align 1
@.str.113 = external hidden unnamed_addr constant [12 x i8], align 1
@.str.114 = external hidden unnamed_addr constant [20 x i8], align 1
@.str.115 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.116 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.117 = external hidden unnamed_addr constant [16 x i8], align 1
@.str.118 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.119 = external hidden unnamed_addr constant [15 x i8], align 1
@.str.120 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.121 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.122 = external hidden unnamed_addr constant [27 x i8], align 1
@.str.123 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.124 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.125 = external hidden unnamed_addr constant [30 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
declare dso_local void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120), ptr noundef) local_unnamed_addr #3 align 2

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_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.572, align 1
  %7 = alloca %"class.std::function", align 8
  %8 = alloca %class.anon.574, align 8
  %9 = alloca %struct.anon, align 8
  %10 = alloca %"class.std::allocator.577", align 1
  %11 = alloca %"class.std::function.226", align 8
  %12 = alloca %class.anon.580, align 8
  %13 = alloca %"class.std::vector.581", align 8
  %14 = alloca %class.anon.586, align 8
  %15 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %16 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %17 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %18 = alloca %"class.MIR::LValue::CRef", align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %20 = alloca %class.anon.590, align 8
  %21 = alloca i8, align 1
  %22 = alloca %"class.std::function.226", align 8
  %23 = alloca %"class.std::function.226", align 8
  %24 = alloca %class.anon.591, align 8
  %25 = alloca %"struct.std::pair.592", align 8
  %26 = alloca %"struct.MIR::LValue", align 8
  %27 = alloca %"class.MIR::RValue", align 8
  %28 = alloca i32, align 4
  %29 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %30 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %31 = alloca %"class.std::function.267", align 8
  %32 = alloca %class.anon.594, align 8
  %33 = alloca i32, align 4
  %34 = alloca %class.anon.595, align 8
  %35 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %36 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %37 = alloca %"class.std::function.267", align 8
  %38 = alloca %"class.std::function.267", align 8
  %39 = alloca %"class.std::function", align 8
  %40 = alloca %class.anon.596, align 1
  %41 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %42 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %43 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %44 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %45 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %46 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %47 = alloca %"class.MIR::LValue::CRef", align 8
  %48 = alloca %"class.__gnu_cxx::__normal_iterator.589", align 8
  %49 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %50 = alloca %"class.std::function", align 8
  %51 = alloca %class.anon.598, align 1
  %52 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %53 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %54 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %55 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %56 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %57 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %58 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %59 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %60 = alloca %class.anon.600, align 8
  %61 = alloca %"class.std::function.226", align 8
  %62 = alloca %class.anon.601, align 8
  %63 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %64 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %65 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %66 = alloca ptr, align 8
  %67 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %68 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %69 = alloca %class.anon.602, align 8
  %70 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %71 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %72 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %73 = alloca %"struct.MIR::LValue", align 8
  %74 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %75 = alloca %"class.std::function.226", align 8
  %76 = alloca %class.anon.603, align 8
  %77 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %78 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %79 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %80 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %81 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %82 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %83 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  %84 = alloca %"class.__gnu_cxx::__normal_iterator.148", align 8
  %85 = alloca %"class.__gnu_cxx::__normal_iterator.189", align 8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %3) #8
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %4) #8
  %86 = tail call noundef zeroext i1 @_Z13debug_enabledv()
  %87 = select i1 %86, ptr @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE, ptr null
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %6) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_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 !5
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_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 %87, ptr noundef nonnull %5, ptr noundef nonnull %7)
          to label %88 unwind label %98

88:                                               ; 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
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #8
  %89 = call noundef i64 @_ZNKSt6vectorIN3HIR7TypeRefESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %1) #8
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %10) #8
  call void @_ZNSaIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEE6ValUseEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  invoke void @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEC2EmRKS6_(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %89, ptr noundef nonnull align 1 dereferenceable(1) %10)
          to label %90 unwind label %100

90:                                               ; preds = %88
  call void @_ZNSt15__new_allocatorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  store ptr %9, ptr %12, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_2vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %11, ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  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 %11)
          to label %91 unwind label %102

91:                                               ; preds = %90
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %13) #8
  call void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #8
  store ptr %13, ptr %14, align 8, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %1, i64 64
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #8
  %93 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %93, ptr %15, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %16) #8
  %94 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %94, ptr %16, align 8
  %95 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  br i1 %95, label %.lr.ph441, label %._crit_edge442

.lr.ph441:                                        ; preds = %91
  %96 = getelementptr inbounds i8, ptr %24, i64 8
  br label %104

._crit_edge442:                                   ; preds = %.loopexit421, %91
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  %97 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %455 unwind label %467

98:                                               ; preds = %2
  %99 = 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 %1062

100:                                              ; preds = %88
  %101 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %10) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %10) #8
  br label %1061

102:                                              ; preds = %90
  %103 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  br label %1060

104:                                              ; preds = %.lr.ph441, %.loopexit421
  %105 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  %106 = getelementptr inbounds i8, ptr %105, i64 24
  %107 = call noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  %108 = icmp eq i32 %107, 0
  br i1 %108, label %.loopexit421, label %.preheader

.preheader:                                       ; preds = %104
  %109 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %105) #8
  %.not491 = icmp eq i64 %109, 0
  br i1 %.not491, label %.loopexit421, label %.lr.ph439

.lr.ph439:                                        ; preds = %.preheader
  %110 = ptrtoint ptr %105 to i64
  br label %111

111:                                              ; preds = %.lr.ph439, %.critedge361
  %112 = phi i64 [ 0, %.lr.ph439 ], [ %448, %.critedge361 ]
  %.0290438 = phi i32 [ 0, %.lr.ph439 ], [ %447, %.critedge361 ]
  %113 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %114 = ptrtoint ptr %113 to i64
  %115 = sub i64 %110, %114
  %116 = sdiv exact i64 %115, 192
  %117 = trunc i64 %116 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %117, i32 noundef %.0290438)
  %118 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %112) #8
  %119 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %120 unwind label %132

120:                                              ; preds = %111
  br i1 %119, label %121, label %134

121:                                              ; preds = %120
  %122 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %123 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %122, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %124 unwind label %132

124:                                              ; preds = %121
  %125 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %123, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %126 unwind label %132

126:                                              ; preds = %124
  %127 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %125, ptr noundef nonnull align 8 dereferenceable(152) %118)
          to label %128 unwind label %132

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

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

132:                                              ; preds = %130, %128, %126, %124, %121, %111
  %133 = landingpad { ptr, i32 }
          cleanup
  br label %452

134:                                              ; preds = %130, %120
  %135 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %118)
  br i1 %135, label %136, label %.critedge361

136:                                              ; preds = %134
  %137 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %118)
  %138 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %137)
  br i1 %138, label %139, label %.critedge361

139:                                              ; preds = %136
  %140 = call noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %137)
  %141 = zext i32 %140 to i64
  %142 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %141) #8
  %143 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %144 unwind label %173

144:                                              ; preds = %139
  br i1 %143, label %145, label %175

145:                                              ; preds = %144
  %146 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %147 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %146, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %148 unwind label %173

148:                                              ; preds = %145
  %149 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %147, ptr noundef nonnull @.str.102)
          to label %150 unwind label %173

150:                                              ; preds = %148
  %151 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %149, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %152 unwind label %173

152:                                              ; preds = %150
  %153 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %151, ptr noundef nonnull @.str.103)
          to label %154 unwind label %173

154:                                              ; preds = %152
  %155 = load i32, ptr %142, align 4, !tbaa !11
  %156 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %153, i32 noundef %155)
          to label %157 unwind label %173

157:                                              ; preds = %154
  %158 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %156, ptr noundef nonnull @.str.104)
          to label %159 unwind label %173

159:                                              ; preds = %157
  %160 = getelementptr inbounds i8, ptr %142, i64 4
  %161 = load i32, ptr %160, align 4, !tbaa !13
  %162 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %158, i32 noundef %161)
          to label %163 unwind label %173

163:                                              ; preds = %159
  %164 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %162, ptr noundef nonnull @.str.105)
          to label %165 unwind label %173

165:                                              ; preds = %163
  %166 = getelementptr inbounds i8, ptr %142, i64 8
  %167 = load i32, ptr %166, align 4, !tbaa !14
  %168 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEj(ptr noundef nonnull align 8 dereferenceable(8) %164, i32 noundef %167)
          to label %169 unwind label %173

169:                                              ; preds = %165
  %170 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %168, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %171 unwind label %173

171:                                              ; preds = %169
  %172 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %170, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %175 unwind label %173

173:                                              ; preds = %194, %192, %190, %187, %184, %171, %169, %165, %163, %159, %157, %154, %152, %150, %148, %145, %139
  %174 = landingpad { ptr, i32 }
          cleanup
  br label %452

175:                                              ; preds = %171, %144
  %176 = load i32, ptr %142, align 4, !tbaa !11
  %177 = icmp eq i32 %176, 1
  %178 = getelementptr inbounds i8, ptr %142, i64 4
  %179 = load i32, ptr %178, align 4
  %180 = icmp eq i32 %179, 1
  %or.cond = select i1 %177, i1 %180, i1 false
  %181 = getelementptr inbounds i8, ptr %142, i64 8
  %182 = load i32, ptr %181, align 4
  %183 = icmp eq i32 %182, 0
  %or.cond357 = select i1 %or.cond, i1 %183, i1 false
  br i1 %or.cond357, label %196, label %184

184:                                              ; preds = %175
  %185 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %186 unwind label %173

186:                                              ; preds = %184
  br i1 %185, label %187, label %.critedge361

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

190:                                              ; preds = %187
  %191 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %189, ptr noundef nonnull @.str.106)
          to label %192 unwind label %173

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

194:                                              ; preds = %192
  %195 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %193, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.critedge361 unwind label %173

196:                                              ; preds = %175
  %197 = getelementptr inbounds i8, ptr %137, i64 32
  %198 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %197)
  br i1 %198, label %199, label %.critedge361

199:                                              ; preds = %196
  %200 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %197)
  %201 = getelementptr inbounds i8, ptr %200, i64 8
  %202 = call ptr @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #8
  %203 = call ptr @_ZNKSt6vectorIN3MIR6LValue7WrapperESaIS2_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %201) #8
  %204 = invoke noundef zeroext i1 @"_ZSt6any_ofIN9__gnu_cxx17__normal_iteratorIPKN3MIR6LValue7WrapperESt6vectorIS4_SaIS4_EEEEZ39MIR_Optimise_PropagateSingleAssignmentsRNS2_11TypeResolveERNS2_8FunctionEE4$_14EbT_SG_T0_"(ptr %202, ptr %203)
          to label %205 unwind label %212

205:                                              ; preds = %199
  br i1 %204, label %206, label %214

206:                                              ; preds = %205
  %207 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %208 unwind label %212

208:                                              ; preds = %206
  br i1 %207, label %209, label %.critedge361

209:                                              ; preds = %208
  %210 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %211 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %210, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %.invoke518 unwind label %212

212:                                              ; preds = %.invoke518, %.invoke517, %.invoke, %231, %228, %219, %216, %209, %206, %199
  %213 = landingpad { ptr, i32 }
          cleanup
  br label %452

214:                                              ; preds = %205
  %215 = call noundef zeroext i1 @_ZNK3MIR6LValue7Storage8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(8) %200)
  br i1 %215, label %222, label %216

216:                                              ; preds = %214
  %217 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %218 unwind label %212

218:                                              ; preds = %216
  br i1 %217, label %219, label %.critedge361

219:                                              ; preds = %218
  %220 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %221 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %220, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %.invoke518 unwind label %212

222:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %18) #8
  invoke void @_ZN3MIR6LValue4CRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %18, ptr noundef nonnull align 8 dereferenceable(32) %200)
          to label %223 unwind label %239

223:                                              ; preds = %222
  %224 = invoke ptr @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEENK4$_13clERKNS_6LValue4CRefE"(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(16) %18)
          to label %225 unwind label %239

225:                                              ; preds = %223
  store ptr %224, ptr %17, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #8
  %226 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  store ptr %226, ptr %19, align 8
  %227 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  br i1 %227, label %228, label %241

228:                                              ; preds = %225
  %229 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %230 unwind label %212

230:                                              ; preds = %228
  br i1 %229, label %231, label %.critedge361

231:                                              ; preds = %230
  %232 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %233 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %232, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %.invoke518 unwind label %212

.invoke518:                                       ; preds = %209, %231, %219
  %234 = phi ptr [ %221, %219 ], [ %233, %231 ], [ %211, %209 ]
  %235 = phi ptr [ @.str.108, %219 ], [ @.str.109, %231 ], [ @.str.107, %209 ]
  %236 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %234, ptr noundef nonnull %235)
          to label %.invoke517 unwind label %212

.invoke517:                                       ; preds = %.invoke518
  %237 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %236, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %.invoke unwind label %212

.invoke:                                          ; preds = %.invoke517
  %238 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %237, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.critedge361 unwind label %212

239:                                              ; preds = %223, %222
  %240 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #8
  br label %452

241:                                              ; preds = %225
  %242 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %197)
  %243 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %244 unwind label %254

244:                                              ; preds = %241
  br i1 %243, label %245, label %256

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

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

250:                                              ; preds = %248
  %251 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %249, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %252 unwind label %254

252:                                              ; preds = %250
  %253 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %251, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %256 unwind label %254

254:                                              ; preds = %252, %250, %248, %245, %241
  %255 = landingpad { ptr, i32 }
          cleanup
  br label %452

256:                                              ; preds = %252, %244
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %20) #8
  store ptr %137, ptr %20, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %21) #8
  store i8 0, ptr %21, align 1, !tbaa !15
  %.0297435 = add i32 %.0290438, 1
  %257 = zext i32 %.0297435 to i64
  %258 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %105) #8
  %259 = icmp ugt i64 %258, %257
  br i1 %259, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %256, %311
  %260 = phi i64 [ %312, %311 ], [ %257, %256 ]
  %.0297437 = phi i32 [ %.0297, %311 ], [ %.0297435, %256 ]
  %261 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %262 = ptrtoint ptr %261 to i64
  %263 = sub i64 %110, %262
  %264 = sdiv exact i64 %263, 192
  %265 = trunc i64 %264 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %265, i32 noundef %.0297437)
  %266 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %105, i64 noundef %260) #8
  %267 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %268 unwind label %.loopexit416

268:                                              ; preds = %.lr.ph
  br i1 %267, label %269, label %282

269:                                              ; preds = %268
  %270 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %271 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %270, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %272 unwind label %.loopexit416

272:                                              ; preds = %269
  %273 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %271, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %274 unwind label %.loopexit416

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

276:                                              ; preds = %274
  %277 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %275, ptr noundef nonnull align 8 dereferenceable(152) %266)
          to label %278 unwind label %.loopexit416

278:                                              ; preds = %276
  %279 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %277, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %280 unwind label %.loopexit416

280:                                              ; preds = %278
  %281 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %279, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %282 unwind label %.loopexit416

.loopexit416:                                     ; preds = %.lr.ph, %269, %272, %274, %276, %278, %280, %282
  %lpad.loopexit418 = landingpad { ptr, i32 }
          cleanup
  br label %451

.loopexit.split-lp417:                            ; preds = %286, %289, %292, %294, %296
  %lpad.loopexit.split-lp419 = landingpad { ptr, i32 }
          cleanup
  br label %451

282:                                              ; preds = %280, %268
  %283 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %197)
  %284 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR9StatementERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(152) %266, ptr noundef nonnull align 8 dereferenceable(32) %283, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %285 unwind label %.loopexit416

285:                                              ; preds = %282
  br i1 %284, label %286, label %298

286:                                              ; preds = %285
  %287 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %288 unwind label %.loopexit.split-lp417

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

289:                                              ; preds = %288
  %290 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %291 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %290, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %292 unwind label %.loopexit.split-lp417

292:                                              ; preds = %289
  %293 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %291, ptr noundef nonnull @.str.41)
          to label %294 unwind label %.loopexit.split-lp417

294:                                              ; preds = %292
  %295 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %293, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %296 unwind label %.loopexit.split-lp417

296:                                              ; preds = %294
  %297 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %295, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.thread401 unwind label %.loopexit.split-lp417

298:                                              ; preds = %285
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_4vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %22, ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  %299 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %266, ptr noundef nonnull %22)
          to label %300 unwind label %308

300:                                              ; preds = %298
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br i1 %299, label %301, label %311

301:                                              ; preds = %300
  br i1 %242, label %310, label %302

302:                                              ; preds = %301
  %303 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %266)
  br i1 %303, label %304, label %.thread401

304:                                              ; preds = %302
  %305 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %266)
  %306 = getelementptr inbounds i8, ptr %305, i64 32
  %307 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %306)
  br i1 %307, label %310, label %.thread401

308:                                              ; preds = %298
  %309 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %22) #8
  br label %451

310:                                              ; preds = %304, %301
  store i8 1, ptr %21, align 1, !tbaa !15
  br label %.thread401

311:                                              ; preds = %300
  %.0297 = add i32 %.0297437, 1
  %312 = zext i32 %.0297 to i64
  %313 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %105) #8
  %314 = icmp ugt i64 %313, %312
  br i1 %314, label %.lr.ph, label %._crit_edge, !llvm.loop !17

._crit_edge:                                      ; preds = %311, %256
  %315 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %197)
  %316 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR10TerminatorERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(168) %106, ptr noundef nonnull align 8 dereferenceable(32) %315, i1 noundef zeroext false, i1 noundef zeroext false)
          to label %317 unwind label %330

317:                                              ; preds = %._crit_edge
  br i1 %316, label %318, label %332

318:                                              ; preds = %317
  %319 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %320 unwind label %330

320:                                              ; preds = %318
  br i1 %319, label %321, label %.thread401

321:                                              ; preds = %320
  %322 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %323 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %322, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %324 unwind label %330

324:                                              ; preds = %321
  %325 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %323, ptr noundef nonnull @.str.112)
          to label %326 unwind label %330

326:                                              ; preds = %324
  %327 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %325, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %328 unwind label %330

328:                                              ; preds = %326
  %329 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %327, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.thread401 unwind label %330

330:                                              ; preds = %444, %442, %440, %438, %436, %433, %430, %412, %410, %407, %405, %403, %401, %398, %395, %351, %349, %347, %345, %343, %340, %332, %328, %326, %324, %321, %318, %._crit_edge
  %331 = landingpad { ptr, i32 }
          cleanup
  br label %451

332:                                              ; preds = %317
  %333 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %334 = ptrtoint ptr %333 to i64
  %335 = sub i64 %110, %334
  %336 = sdiv exact i64 %335, 192
  %337 = trunc i64 %336 to i32
  call void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %337)
  %338 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %339 unwind label %330

339:                                              ; preds = %332
  br i1 %338, label %340, label %353

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

343:                                              ; preds = %340
  %344 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %342, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %345 unwind label %330

345:                                              ; preds = %343
  %346 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %344, ptr noundef nonnull @.str.111)
          to label %347 unwind label %330

347:                                              ; preds = %345
  %348 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_10TerminatorE(ptr noundef nonnull align 8 dereferenceable(8) %346, ptr noundef nonnull align 8 dereferenceable(168) %106)
          to label %349 unwind label %330

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

351:                                              ; preds = %349
  %352 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %350, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %353 unwind label %330

353:                                              ; preds = %351, %339
  br i1 %242, label %354, label %359

354:                                              ; preds = %353
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %24) #8
  store ptr %21, ptr %24, align 8, !tbaa !5
  store ptr %20, ptr %96, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_5vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %23, ptr noundef nonnull align 8 dereferenceable(16) %24) #8
  %355 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR10TerminatorESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168) %106, ptr noundef nonnull %23)
          to label %356 unwind label %357

356:                                              ; preds = %354
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #8
  br label %359

357:                                              ; preds = %354
  %358 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %23) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %24) #8
  br label %451

359:                                              ; preds = %356, %353
  %360 = call noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  switch i32 %360, label %.thread401 [
    i32 0, label %361
    i32 1, label %362
    i32 2, label %364
    i32 3, label %366
    i32 4, label %368
    i32 5, label %383
    i32 6, label %385
    i32 7, label %387
    i32 8, label %389
    i32 9, label %391
  ]

361:                                              ; preds = %359
  call void @__assert_fail(ptr noundef nonnull @.str.28, ptr noundef nonnull @.str.8, i32 noundef 5124, ptr noundef nonnull @__PRETTY_FUNCTION__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE) #9
  unreachable

362:                                              ; preds = %359
  %363 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR10Terminator13as_IncompleteEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

364:                                              ; preds = %359
  %365 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR10Terminator9as_ReturnEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

366:                                              ; preds = %359
  %367 = call noundef nonnull align 1 dereferenceable(1) ptr @_ZNK3MIR10Terminator10as_DivergeEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

368:                                              ; preds = %359
  %369 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator7as_GotoEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  %370 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %371 unwind label %381

371:                                              ; preds = %368
  br i1 %370, label %372, label %.thread401

372:                                              ; preds = %371
  %373 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %374 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %373, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %375 unwind label %381

375:                                              ; preds = %372
  %376 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %374, ptr noundef nonnull @.str.113)
          to label %377 unwind label %381

377:                                              ; preds = %375
  %378 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %376, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %379 unwind label %381

379:                                              ; preds = %377
  %380 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %378, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %.thread401 unwind label %381

381:                                              ; preds = %379, %377, %375, %372, %368
  %382 = landingpad { ptr, i32 }
          cleanup
  br label %451

383:                                              ; preds = %359
  %384 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator8as_PanicEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

385:                                              ; preds = %359
  %386 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNK3MIR10Terminator5as_IfEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

387:                                              ; preds = %359
  %388 = call noundef nonnull align 8 dereferenceable(56) ptr @_ZNK3MIR10Terminator9as_SwitchEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

389:                                              ; preds = %359
  %390 = call noundef nonnull align 8 dereferenceable(96) ptr @_ZNK3MIR10Terminator14as_SwitchValueEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

391:                                              ; preds = %359
  %392 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %106)
  br label %.thread401

.thread401:                                       ; preds = %310, %296, %288, %304, %302, %320, %328, %371, %379, %359, %362, %364, %366, %383, %385, %387, %389, %391
  %393 = load i8, ptr %21, align 1, !tbaa !15, !range !19, !noundef !20
  %394 = trunc nuw i8 %393 to i1
  br i1 %394, label %395, label %430

395:                                              ; preds = %.thread401
  %396 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %397 unwind label %330

397:                                              ; preds = %395
  br i1 %396, label %398, label %414

398:                                              ; preds = %397
  %399 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %400 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %399, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %401 unwind label %330

401:                                              ; preds = %398
  %402 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %400, ptr noundef nonnull @.str.114)
          to label %403 unwind label %330

403:                                              ; preds = %401
  %404 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %402, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %405 unwind label %330

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

407:                                              ; preds = %405
  %408 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %197)
  %409 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %406, ptr noundef nonnull align 8 dereferenceable(32) %408)
          to label %410 unwind label %330

410:                                              ; preds = %407
  %411 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %409, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %412 unwind label %330

412:                                              ; preds = %410
  %413 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %411, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %414 unwind label %330

414:                                              ; preds = %412, %397
  call void @llvm.lifetime.start.p0(i64 144, ptr nonnull %25) #8
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %26) #8
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %26, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %415 unwind label %419

415:                                              ; preds = %414
  call void @llvm.lifetime.start.p0(i64 112, ptr nonnull %27) #8
  invoke void @_ZNK3MIR6RValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"class.MIR::RValue") align 8 %27, ptr noundef nonnull align 8 dereferenceable(112) %197)
          to label %416 unwind label %421

416:                                              ; preds = %415
  invoke void @_ZSt9make_pairIN3MIR6LValueENS0_6RValueEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind nonnull writable sret(%"struct.std::pair.592") align 8 %25, ptr noundef nonnull align 8 dereferenceable(32) %26, ptr noundef nonnull align 8 dereferenceable(112) %27)
          to label %417 unwind label %423

417:                                              ; preds = %416
  invoke void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE9push_backEOS4_(ptr noundef nonnull align 8 dereferenceable(24) %13, ptr noundef nonnull align 8 dereferenceable(144) %25)
          to label %418 unwind label %425

418:                                              ; preds = %417
  call void @_ZNSt4pairIN3MIR6LValueENS0_6RValueEED2Ev(ptr noundef nonnull align 8 dereferenceable(144) %25) #8
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %27) #8
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %27) #8
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %25) #8
  br label %446

419:                                              ; preds = %414
  %420 = landingpad { ptr, i32 }
          cleanup
  br label %429

421:                                              ; preds = %415
  %422 = landingpad { ptr, i32 }
          cleanup
  br label %428

423:                                              ; preds = %416
  %424 = landingpad { ptr, i32 }
          cleanup
  br label %427

425:                                              ; preds = %417
  %426 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt4pairIN3MIR6LValueENS0_6RValueEED2Ev(ptr noundef nonnull align 8 dereferenceable(144) %25) #8
  br label %427

427:                                              ; preds = %425, %423
  %.pn340 = phi { ptr, i32 } [ %426, %425 ], [ %424, %423 ]
  call void @_ZN3MIR6RValueD2Ev(ptr noundef nonnull align 8 dereferenceable(112) %27) #8
  br label %428

428:                                              ; preds = %427, %421
  %.pn340.pn = phi { ptr, i32 } [ %.pn340, %427 ], [ %422, %421 ]
  call void @llvm.lifetime.end.p0(i64 112, ptr nonnull %27) #8
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %26) #8
  br label %429

429:                                              ; preds = %428, %419
  %.pn340.pn.pn = phi { ptr, i32 } [ %.pn340.pn, %428 ], [ %420, %419 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %26) #8
  call void @llvm.lifetime.end.p0(i64 144, ptr nonnull %25) #8
  br label %451

430:                                              ; preds = %.thread401
  %431 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %432 unwind label %330

432:                                              ; preds = %430
  br i1 %431, label %433, label %446

433:                                              ; preds = %432
  %434 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %435 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %434, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %436 unwind label %330

436:                                              ; preds = %433
  %437 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %435, ptr noundef nonnull @.str.115)
          to label %438 unwind label %330

438:                                              ; preds = %436
  %439 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %437, ptr noundef nonnull align 8 dereferenceable(32) %137)
          to label %440 unwind label %330

440:                                              ; preds = %438
  %441 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %439, ptr noundef nonnull @.str.116)
          to label %442 unwind label %330

442:                                              ; preds = %440
  %443 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %441, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %444 unwind label %330

444:                                              ; preds = %442
  %445 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %443, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %446 unwind label %330

446:                                              ; preds = %432, %444, %418
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %.critedge361

.critedge361:                                     ; preds = %.invoke, %136, %208, %218, %230, %196, %446, %186, %194, %134
  %447 = add i32 %.0290438, 1
  %448 = zext i32 %447 to i64
  %449 = call noundef i64 @_ZNKSt6vectorIN3MIR9StatementESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %105) #8
  %450 = icmp ugt i64 %449, %448
  br i1 %450, label %111, label %.loopexit421, !llvm.loop !21

451:                                              ; preds = %.loopexit416, %.loopexit.split-lp417, %308, %429, %381, %357, %330
  %.pn340.pn.pn.pn = phi { ptr, i32 } [ %.pn340.pn.pn, %429 ], [ %331, %330 ], [ %382, %381 ], [ %358, %357 ], [ %309, %308 ], [ %lpad.loopexit418, %.loopexit416 ], [ %lpad.loopexit.split-lp419, %.loopexit.split-lp417 ]
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %21) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %20) #8
  br label %452

452:                                              ; preds = %173, %254, %451, %212, %239, %132
  %.pn340.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %133, %132 ], [ %174, %173 ], [ %213, %212 ], [ %240, %239 ], [ %.pn340.pn.pn.pn, %451 ], [ %255, %254 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %16) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #8
  br label %667

.loopexit421:                                     ; preds = %.critedge361, %.preheader, %104
  %453 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %15) #8
  %454 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %15, ptr noundef nonnull align 8 dereferenceable(8) %16) #8
  br i1 %454, label %104, label %._crit_edge442

455:                                              ; preds = %._crit_edge442
  br i1 %97, label %456, label %469

456:                                              ; preds = %455
  %457 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %458 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %457, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %459 unwind label %467

459:                                              ; preds = %456
  %460 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %458, ptr noundef nonnull @.str.117)
          to label %461 unwind label %467

461:                                              ; preds = %459
  %462 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt4pairIN3MIR6LValueENS1_6RValueEEERSoS5_RKSt6vectorIT_SaIS7_EE(ptr noundef nonnull align 8 dereferenceable(8) %460, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %463 unwind label %467

463:                                              ; preds = %461
  %464 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %462, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %465 unwind label %467

465:                                              ; preds = %463
  %466 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %464, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %469 unwind label %467

467:                                              ; preds = %502, %500, %498, %496, %493, %490, %465, %463, %461, %459, %456, %._crit_edge442
  %468 = landingpad { ptr, i32 }
          cleanup
  br label %667

469:                                              ; preds = %465, %455
  %470 = getelementptr inbounds i8, ptr %32, i64 8
  %471 = getelementptr inbounds i8, ptr %32, i64 16
  br label %472

472:                                              ; preds = %._crit_edge445, %469
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %28) #8
  store i32 0, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %29) #8
  %473 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  store ptr %473, ptr %29, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %30) #8
  %474 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  store ptr %474, ptr %30, align 8
  %475 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  br i1 %475, label %.lr.ph444, label %._crit_edge445

._crit_edge445:                                   ; preds = %482, %472
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  %476 = load i32, ptr %28, align 4, !tbaa !9
  %477 = icmp eq i32 %476, 0
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  br i1 %477, label %490, label %472

.lr.ph444:                                        ; preds = %472, %482
  %478 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %32) #8
  store ptr %14, ptr %32, align 8, !tbaa !5
  store ptr %13, ptr %470, align 8, !tbaa !5
  store ptr %28, ptr %471, align 8, !tbaa !5
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_6vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(24) %32)
          to label %479 unwind label %485

479:                                              ; preds = %.lr.ph444
  %480 = getelementptr inbounds i8, ptr %478, i64 32
  %481 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR6RValueESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112) %480, ptr noundef nonnull %31)
          to label %482 unwind label %487

482:                                              ; preds = %479
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #8
  %483 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %29) #8
  %484 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %29, ptr noundef nonnull align 8 dereferenceable(8) %30) #8
  br i1 %484, label %.lr.ph444, label %._crit_edge445

485:                                              ; preds = %.lr.ph444
  %486 = landingpad { ptr, i32 }
          cleanup
  br label %489

487:                                              ; preds = %479
  %488 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %31) #8
  br label %489

489:                                              ; preds = %487, %485
  %.pn334 = phi { ptr, i32 } [ %488, %487 ], [ %486, %485 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %32) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %30) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %29) #8
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %28) #8
  br label %667

490:                                              ; preds = %._crit_edge445
  %491 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %492 unwind label %467

492:                                              ; preds = %490
  br i1 %491, label %493, label %504

493:                                              ; preds = %492
  %494 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %495 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %494, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %496 unwind label %467

496:                                              ; preds = %493
  %497 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %495, ptr noundef nonnull @.str.117)
          to label %498 unwind label %467

498:                                              ; preds = %496
  %499 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt4pairIN3MIR6LValueENS1_6RValueEEERSoS5_RKSt6vectorIT_SaIS7_EE(ptr noundef nonnull align 8 dereferenceable(8) %497, ptr noundef nonnull align 8 dereferenceable(24) %13)
          to label %500 unwind label %467

500:                                              ; preds = %498
  %501 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %499, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %502 unwind label %467

502:                                              ; preds = %500
  %503 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %501, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %504 unwind label %467

504:                                              ; preds = %502, %492
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %33) #8
  store i32 0, ptr %33, align 4, !tbaa !9
  %505 = call noundef i64 @_ZNKSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %.not492 = icmp eq i64 %505, 0
  br i1 %.not492, label %._crit_edge455, label %.lr.ph454

.lr.ph454:                                        ; preds = %504
  %506 = getelementptr inbounds i8, ptr %34, i64 8
  %507 = getelementptr inbounds i8, ptr %34, i64 16
  %508 = getelementptr inbounds i8, ptr %34, i64 24
  br label %509

509:                                              ; preds = %.lr.ph454, %570
  %510 = load i32, ptr %33, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %34) #8
  store ptr %14, ptr %34, align 8, !tbaa !5
  store ptr %13, ptr %506, align 8, !tbaa !5
  store ptr %0, ptr %507, align 8, !tbaa !5
  store ptr %33, ptr %508, align 8, !tbaa !5
  %511 = call noundef i64 @_ZNKSt6vectorIN3MIR10BasicBlockESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %.not493 = icmp eq i64 %511, 0
  br i1 %.not493, label %._crit_edge452, label %.lr.ph451

._crit_edge452:                                   ; preds = %559, %509
  %512 = load i32, ptr %33, align 4, !tbaa !9
  %513 = icmp ugt i32 %512, %510
  br i1 %513, label %570, label %566

.lr.ph451:                                        ; preds = %509, %559
  %514 = phi i64 [ %561, %559 ], [ 0, %509 ]
  %.0298449 = phi i32 [ %560, %559 ], [ 0, %509 ]
  %515 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %514) #8
  %516 = getelementptr inbounds i8, ptr %515, i64 24
  %517 = call noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %516)
  %518 = icmp eq i32 %517, 0
  br i1 %518, label %559, label %521

519:                                              ; preds = %._crit_edge448
  %520 = landingpad { ptr, i32 }
          cleanup
  br label %575

521:                                              ; preds = %.lr.ph451
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %35) #8
  %522 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %515) #8
  store ptr %522, ptr %35, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %36) #8
  %523 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %515) #8
  store ptr %523, ptr %36, align 8
  %524 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #8
  br i1 %524, label %.lr.ph447, label %._crit_edge448

._crit_edge448:                                   ; preds = %550, %521
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  call void @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %.0298449)
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %38, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %556 unwind label %519

.lr.ph447:                                        ; preds = %521, %550
  %525 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  %526 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %515) #8
  %527 = ptrtoint ptr %525 to i64
  %528 = ptrtoint ptr %526 to i64
  %529 = sub i64 %527, %528
  %530 = sdiv exact i64 %529, 152
  %531 = trunc i64 %530 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %.0298449, i32 noundef %531)
  %532 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %533 unwind label %545

533:                                              ; preds = %.lr.ph447
  br i1 %532, label %534, label %547

534:                                              ; preds = %533
  %535 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %536 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %535, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %537 unwind label %545

537:                                              ; preds = %534
  %538 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %536, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %539 unwind label %545

539:                                              ; preds = %537
  %540 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %538, ptr noundef nonnull align 8 dereferenceable(152) %525)
          to label %541 unwind label %545

541:                                              ; preds = %539
  %542 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %540, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %543 unwind label %545

543:                                              ; preds = %541
  %544 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %542, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %547 unwind label %545

545:                                              ; preds = %547, %543, %541, %539, %537, %534, %.lr.ph447
  %546 = landingpad { ptr, i32 }
          cleanup
  br label %555

547:                                              ; preds = %543, %533
  invoke void @"_ZNSt8functionIFbRN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IRZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE3$_7vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %37, ptr noundef nonnull align 8 dereferenceable(32) %34)
          to label %548 unwind label %545

548:                                              ; preds = %547
  %549 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %525, ptr noundef nonnull %37)
          to label %550 unwind label %553

550:                                              ; preds = %548
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  %551 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %35) #8
  %552 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %35, ptr noundef nonnull align 8 dereferenceable(8) %36) #8
  br i1 %552, label %.lr.ph447, label %._crit_edge448

553:                                              ; preds = %548
  %554 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %37) #8
  br label %555

555:                                              ; preds = %553, %545
  %.pn329 = phi { ptr, i32 } [ %554, %553 ], [ %546, %545 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %36) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %35) #8
  br label %575

556:                                              ; preds = %._crit_edge448
  %557 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR10TerminatorESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(168) %516, ptr noundef nonnull %38)
          to label %558 unwind label %564

558:                                              ; preds = %556
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %559

559:                                              ; preds = %.lr.ph451, %558
  %560 = add i32 %.0298449, 1
  %561 = zext i32 %560 to i64
  %562 = call noundef i64 @_ZNKSt6vectorIN3MIR10BasicBlockESaIS1_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %563 = icmp ugt i64 %562, %561
  br i1 %563, label %.lr.ph451, label %._crit_edge452, !llvm.loop !22

564:                                              ; preds = %556
  %565 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %38) #8
  br label %575

566:                                              ; preds = %._crit_edge452
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %40) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_8vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %39, ptr noundef nonnull align 1 dereferenceable(1) %40) #8
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %39)
          to label %567 unwind label %568

567:                                              ; preds = %566
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #8
  %.pre = load i32, ptr %33, align 4, !tbaa !9
  br label %570

568:                                              ; preds = %566
  %569 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %39) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %40) #8
  br label %575

570:                                              ; preds = %567, %._crit_edge452
  %571 = phi i32 [ %.pre, %567 ], [ %512, %._crit_edge452 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  %572 = zext i32 %571 to i64
  %573 = call noundef i64 @_ZNKSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE4sizeEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  %574 = icmp ugt i64 %573, %572
  br i1 %574, label %509, label %._crit_edge455, !llvm.loop !23

575:                                              ; preds = %519, %555, %564, %568
  %.pn329.pn.pn = phi { ptr, i32 } [ %569, %568 ], [ %.pn329, %555 ], [ %565, %564 ], [ %520, %519 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %34) #8
  br label %666

._crit_edge455:                                   ; preds = %570, %504
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %41) #8
  %576 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %576, ptr %41, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %42) #8
  %577 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %577, ptr %42, align 8
  %578 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  br i1 %578, label %.lr.ph460, label %._crit_edge461

._crit_edge461:                                   ; preds = %._crit_edge458, %._crit_edge455
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  %579 = load i32, ptr %33, align 4, !tbaa !9
  %580 = icmp ne i32 %579, 0
  %581 = zext i1 %580 to i8
  store i8 %581, ptr %3, align 1, !tbaa !15
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  %582 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %656 unwind label %668

.lr.ph460:                                        ; preds = %._crit_edge455, %._crit_edge458
  %583 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %43) #8
  %584 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %583) #8
  store ptr %584, ptr %43, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #8
  %585 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %583) #8
  store ptr %585, ptr %44, align 8
  %586 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  br i1 %586, label %.lr.ph457, label %._crit_edge458

.lr.ph457:                                        ; preds = %.lr.ph460
  %587 = ptrtoint ptr %583 to i64
  br label %590

._crit_edge458:                                   ; preds = %652, %.lr.ph460
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #8
  %588 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %41) #8
  %589 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %41, ptr noundef nonnull align 8 dereferenceable(8) %42) #8
  br i1 %589, label %.lr.ph460, label %._crit_edge461

590:                                              ; preds = %.lr.ph457, %652
  %591 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %592 = ptrtoint ptr %591 to i64
  %593 = sub i64 %587, %592
  %594 = sdiv exact i64 %593, 192
  %595 = trunc i64 %594 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %45) #8
  %596 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %583) #8
  store ptr %596, ptr %45, align 8
  %597 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %45) #8
  %598 = trunc i64 %597 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %595, i32 noundef %598)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %45) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %46) #8
  %599 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  store ptr %599, ptr %46, align 8
  %600 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %47) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %48) #8
  %601 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %600)
  br i1 %601, label %602, label %.critedge

602:                                              ; preds = %590
  %603 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  %604 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %603)
  invoke void @_ZN3MIR6LValue4CRefC2ERKS0_(ptr noundef nonnull align 8 dereferenceable(16) %47, ptr noundef nonnull align 8 dereferenceable(32) %604)
          to label %605 unwind label %629

605:                                              ; preds = %602
  %606 = invoke ptr @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEENK4$_13clERKNS_6LValue4CRefE"(ptr noundef nonnull align 8 dereferenceable(8) %14, ptr noundef nonnull align 8 dereferenceable(16) %47)
          to label %607 unwind label %629

607:                                              ; preds = %605
  store ptr %606, ptr %46, align 8, !tbaa !5
  %608 = call ptr @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  store ptr %608, ptr %48, align 8
  %609 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPSt4pairIN3MIR6LValueENS2_6RValueEESt6vectorIS5_SaIS5_EEEEbRKNS_17__normal_iteratorIT_T0_EESF_(ptr noundef nonnull align 8 dereferenceable(8) %46, ptr noundef nonnull align 8 dereferenceable(8) %48) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #8
  br i1 %609, label %610, label %637

610:                                              ; preds = %607
  %611 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %612 unwind label %627

612:                                              ; preds = %610
  br i1 %611, label %613, label %631

613:                                              ; preds = %612
  %614 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %615 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %614, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %616 unwind label %627

616:                                              ; preds = %613
  %617 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %615, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %618 unwind label %627

618:                                              ; preds = %616
  %619 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %617, ptr noundef nonnull @.str.118)
          to label %620 unwind label %627

620:                                              ; preds = %618
  %621 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  %622 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_9StatementE(ptr noundef nonnull align 8 dereferenceable(8) %619, ptr noundef nonnull align 8 dereferenceable(152) %621)
          to label %623 unwind label %627

623:                                              ; preds = %620
  %624 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %622, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %625 unwind label %627

625:                                              ; preds = %623
  %626 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %624, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %631 unwind label %627

627:                                              ; preds = %625, %623, %620, %618, %616, %613, %610
  %628 = landingpad { ptr, i32 }
          cleanup
  br label %655

629:                                              ; preds = %605, %602
  %630 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #8
  br label %655

631:                                              ; preds = %625, %612
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %49, ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  %632 = load ptr, ptr %49, align 8
  %633 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %583, ptr %632)
          to label %634 unwind label %635

634:                                              ; preds = %631
  store ptr %633, ptr %43, align 8, !tbaa !5
  br label %652

635:                                              ; preds = %631
  %636 = landingpad { ptr, i32 }
          cleanup
  br label %655

.critedge:                                        ; preds = %590
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %48) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %47) #8
  br label %637

637:                                              ; preds = %607, %.critedge
  %638 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  %639 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %638)
  br i1 %639, label %640, label %650

640:                                              ; preds = %637
  %641 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  %642 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %641)
  %643 = getelementptr inbounds i8, ptr %642, i64 32
  %644 = call noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %643)
  %645 = icmp eq i32 %644, 0
  br i1 %645, label %646, label %650

646:                                              ; preds = %640
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %51) #8
  call void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %50, ptr noundef nonnull align 1 dereferenceable(1) %51) #8
  invoke void @_ZNK3MIR11TypeResolve9print_bugESt8functionIFvRSoEE(ptr noundef nonnull align 8 dereferenceable(120) %0, ptr noundef nonnull %50)
          to label %647 unwind label %648

647:                                              ; preds = %646
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %51) #8
  br label %650

648:                                              ; preds = %646
  %649 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %50) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %51) #8
  br label %655

650:                                              ; preds = %647, %640, %637
  %651 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %43) #8
  br label %652

652:                                              ; preds = %650, %634
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %44) #8
  %653 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %583) #8
  store ptr %653, ptr %44, align 8
  %654 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %43, ptr noundef nonnull align 8 dereferenceable(8) %44) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %44) #8
  br i1 %654, label %590, label %._crit_edge458, !llvm.loop !24

655:                                              ; preds = %648, %635, %629, %627
  %.pn327 = phi { ptr, i32 } [ %636, %635 ], [ %628, %627 ], [ %649, %648 ], [ %630, %629 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %46) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %43) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %42) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %41) #8
  br label %666

656:                                              ; preds = %._crit_edge461
  br i1 %582, label %657, label %670

657:                                              ; preds = %656
  %658 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %659 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %658, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %660 unwind label %668

660:                                              ; preds = %657
  %661 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %659, ptr noundef nonnull @.str.119)
          to label %662 unwind label %668

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

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

666:                                              ; preds = %655, %575
  %.pn329.pn.pn.pn = phi { ptr, i32 } [ %.pn329.pn.pn, %575 ], [ %.pn327, %655 ]
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %33) #8
  br label %667

667:                                              ; preds = %666, %489, %467, %452
  %.pn340.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn340.pn.pn.pn.pn.pn.pn.pn, %452 ], [ %.pn334, %489 ], [ %.pn329.pn.pn.pn, %666 ], [ %468, %467 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #8
  call void @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %13) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %13) #8
  br label %1060

668:                                              ; preds = %960, %958, %956, %953, %._crit_edge484, %817, %815, %813, %810, %._crit_edge475, %664, %662, %660, %657, %._crit_edge461
  %669 = landingpad { ptr, i32 }
          cleanup
  br label %1060

670:                                              ; preds = %664, %656
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %52) #8
  %671 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %671, ptr %52, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %53) #8
  %672 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %672, ptr %53, align 8
  %673 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br i1 %673, label %.lr.ph474, label %._crit_edge475

._crit_edge475:                                   ; preds = %._crit_edge472, %670
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  %674 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %809 unwind label %668

.lr.ph474:                                        ; preds = %670, %._crit_edge472
  %675 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %54) #8
  %676 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #8
  store ptr %676, ptr %54, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #8
  %677 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #8
  store ptr %677, ptr %55, align 8
  %678 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #8
  br i1 %678, label %.lr.ph471, label %._crit_edge472

.lr.ph471:                                        ; preds = %.lr.ph474
  %679 = ptrtoint ptr %675 to i64
  br label %682

._crit_edge472:                                   ; preds = %805, %.lr.ph474
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  %680 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %52) #8
  %681 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %52, ptr noundef nonnull align 8 dereferenceable(8) %53) #8
  br i1 %681, label %.lr.ph474, label %._crit_edge475

682:                                              ; preds = %.lr.ph471, %805
  %683 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %684 = ptrtoint ptr %683 to i64
  %685 = sub i64 %679, %684
  %686 = sdiv exact i64 %685, 192
  %687 = trunc i64 %686 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %56) #8
  %688 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #8
  store ptr %688, ptr %56, align 8
  %689 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %56) #8
  %690 = trunc i64 %689 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %687, i32 noundef %690)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %56) #8
  %691 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  %692 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %691)
  br i1 %692, label %693, label %805

693:                                              ; preds = %682
  %694 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  %695 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %694)
  %696 = getelementptr inbounds i8, ptr %695, i64 32
  %697 = call noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %696)
  %698 = icmp eq i32 %697, 0
  br i1 %698, label %805, label %699

699:                                              ; preds = %693
  %700 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  %701 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %700)
  %702 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %701)
  br i1 %702, label %703, label %805

703:                                              ; preds = %699
  %704 = call noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %701)
  %705 = zext i32 %704 to i64
  %706 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %705) #8
  %707 = load i32, ptr %706, align 4, !tbaa !11
  %708 = icmp eq i32 %707, 1
  %709 = getelementptr inbounds i8, ptr %706, i64 4
  %710 = load i32, ptr %709, align 4
  %711 = icmp eq i32 %710, 1
  %or.cond364 = select i1 %708, i1 %711, i1 false
  %712 = getelementptr inbounds i8, ptr %706, i64 8
  %713 = load i32, ptr %712, align 4
  %714 = icmp eq i32 %713, 0
  %or.cond367 = select i1 %or.cond364, i1 %714, i1 false
  br i1 %or.cond367, label %.critedge369, label %805

.critedge369:                                     ; preds = %703
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %57) #8
  %715 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %54, i64 noundef 1) #8
  store ptr %715, ptr %57, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #8
  %716 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #8
  store ptr %716, ptr %58, align 8
  %717 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #8
  br i1 %717, label %.lr.ph467, label %.thread404

.lr.ph467:                                        ; preds = %.critedge369, %.thread407
  %718 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %719 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %718)
  br i1 %719, label %722, label %.thread407

720:                                              ; preds = %733
  %721 = landingpad { ptr, i32 }
          cleanup
  br label %804

722:                                              ; preds = %.lr.ph467
  %723 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %724 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %723)
  %725 = getelementptr inbounds i8, ptr %724, i64 32
  %726 = call noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112) %725)
  %727 = icmp eq i32 %726, 0
  br i1 %727, label %.thread407, label %728

728:                                              ; preds = %722
  %729 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %730 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %729)
  %731 = getelementptr inbounds i8, ptr %730, i64 32
  %732 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %731)
  br i1 %732, label %733, label %.thread407

733:                                              ; preds = %728
  %734 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %735 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %734)
  %736 = getelementptr inbounds i8, ptr %735, i64 32
  %737 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %736)
  %738 = invoke noundef zeroext i1 @_ZN3MIRneERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %737, ptr noundef nonnull align 8 dereferenceable(32) %701)
          to label %739 unwind label %720

739:                                              ; preds = %733
  br i1 %738, label %.thread407, label %740

740:                                              ; preds = %739
  %741 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %742 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %741)
  %743 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %742)
  br i1 %743, label %744, label %756

744:                                              ; preds = %740
  %745 = call noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %742)
  %746 = zext i32 %745 to i64
  %747 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %746) #8
  %748 = load i32, ptr %747, align 4, !tbaa !11
  %749 = icmp eq i32 %748, 1
  %750 = getelementptr inbounds i8, ptr %747, i64 4
  %751 = load i32, ptr %750, align 4
  %752 = icmp eq i32 %751, 1
  %or.cond372 = select i1 %749, i1 %752, i1 false
  %753 = getelementptr inbounds i8, ptr %747, i64 8
  %754 = load i32, ptr %753, align 4
  %755 = icmp eq i32 %754, 0
  %or.cond375 = select i1 %or.cond372, i1 %755, i1 false
  br i1 %or.cond375, label %758, label %.thread404

756:                                              ; preds = %740
  %757 = call noundef zeroext i1 @_ZNK3MIR6LValue9is_ReturnEv(ptr noundef nonnull align 8 dereferenceable(32) %742)
  br i1 %757, label %758, label %.thread404

758:                                              ; preds = %756, %744
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %59) #8
  %759 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEplEl(ptr noundef nonnull align 8 dereferenceable(8) %54, i64 noundef 1) #8
  store ptr %759, ptr %59, align 8
  %760 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  br i1 %760, label %.lr.ph463, label %.loopexit415

.lr.ph463:                                        ; preds = %758, %766
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %60) #8
  store ptr %742, ptr %60, align 8, !tbaa !5
  %761 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %59) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %62) #8
  store ptr %60, ptr %62, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE4$_11vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %61, ptr noundef nonnull align 8 dereferenceable(8) %62) #8
  %762 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %761, ptr noundef nonnull %61)
          to label %763 unwind label %764

763:                                              ; preds = %.lr.ph463
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #8
  br i1 %762, label %769, label %766

764:                                              ; preds = %.lr.ph463
  %765 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %61) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %62) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %60) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  br label %804

766:                                              ; preds = %763
  %767 = call ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEi(ptr noundef nonnull align 8 dereferenceable(8) %59, i32 noundef 0) #8
  %768 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %59, ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  br i1 %768, label %.lr.ph463, label %.loopexit415, !llvm.loop !25

769:                                              ; preds = %763
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  br label %.thread407

.loopexit415:                                     ; preds = %758, %766
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %59) #8
  %770 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %771 unwind label %789

771:                                              ; preds = %.loopexit415
  br i1 %770, label %772, label %791

772:                                              ; preds = %771
  %773 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %774 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %773, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %775 unwind label %789

775:                                              ; preds = %772
  %776 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %774, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %777 unwind label %789

777:                                              ; preds = %775
  %778 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %776, ptr noundef nonnull @.str.120)
          to label %779 unwind label %789

779:                                              ; preds = %777
  %780 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %778, ptr noundef nonnull align 8 dereferenceable(32) %701)
          to label %781 unwind label %789

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

783:                                              ; preds = %781
  %784 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %782, ptr noundef nonnull align 8 dereferenceable(32) %742)
          to label %785 unwind label %789

785:                                              ; preds = %783
  %786 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %784, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %787 unwind label %789

787:                                              ; preds = %785
  %788 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %786, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %791 unwind label %789

789:                                              ; preds = %797, %791, %787, %785, %783, %781, %779, %777, %775, %772, %.loopexit415
  %790 = landingpad { ptr, i32 }
          cleanup
  br label %804

791:                                              ; preds = %787, %771
  %792 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %793 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %792)
  %794 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  %795 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZN3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %794)
  %796 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %795, ptr noundef nonnull align 8 dereferenceable(32) %793)
          to label %797 unwind label %789

797:                                              ; preds = %791
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %63, ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  %798 = load ptr, ptr %63, align 8
  %799 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %675, ptr %798)
          to label %800 unwind label %789

800:                                              ; preds = %797
  store i8 1, ptr %3, align 1, !tbaa !15
  br label %.thread404

.thread407:                                       ; preds = %769, %739, %728, %722, %.lr.ph467
  %801 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %57) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %58) #8
  %802 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #8
  store ptr %802, ptr %58, align 8
  %803 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %57, ptr noundef nonnull align 8 dereferenceable(8) %58) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %58) #8
  br i1 %803, label %.lr.ph467, label %.thread404, !llvm.loop !26

.thread404:                                       ; preds = %.thread407, %756, %744, %.critedge369, %800
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #8
  br label %805

804:                                              ; preds = %764, %789, %720
  %.pn324.pn = phi { ptr, i32 } [ %721, %720 ], [ %790, %789 ], [ %765, %764 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %57) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %54) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %53) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %52) #8
  br label %1060

805:                                              ; preds = %.thread404, %703, %699, %693, %682
  %806 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %54) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %55) #8
  %807 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %675) #8
  store ptr %807, ptr %55, align 8
  %808 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %54, ptr noundef nonnull align 8 dereferenceable(8) %55) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %55) #8
  br i1 %808, label %682, label %._crit_edge472, !llvm.loop !27

809:                                              ; preds = %._crit_edge475
  br i1 %674, label %810, label %819

810:                                              ; preds = %809
  %811 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %812 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %811, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %813 unwind label %668

813:                                              ; preds = %810
  %814 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %812, ptr noundef nonnull @.str.121)
          to label %815 unwind label %668

815:                                              ; preds = %813
  %816 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %814, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %817 unwind label %668

817:                                              ; preds = %815
  %818 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %816, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %819 unwind label %668

819:                                              ; preds = %817, %809
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %64) #8
  %820 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %820, ptr %64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %65) #8
  %821 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %821, ptr %65, align 8
  %822 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  br i1 %822, label %.lr.ph483, label %._crit_edge484

.lr.ph483:                                        ; preds = %819
  %823 = getelementptr inbounds i8, ptr %76, i64 8
  br label %825

._crit_edge484:                                   ; preds = %949, %819
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #8
  %824 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %952 unwind label %668

825:                                              ; preds = %.lr.ph483, %949
  %826 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #8
  %827 = getelementptr inbounds i8, ptr %826, i64 24
  %828 = call noundef i32 @_ZNK3MIR10Terminator3tagEv(ptr noundef nonnull align 8 dereferenceable(168) %827)
  %829 = icmp eq i32 %828, 0
  br i1 %829, label %949, label %830

830:                                              ; preds = %825
  %831 = call noundef zeroext i1 @_ZNK3MIR10Terminator7is_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %827)
  br i1 %831, label %832, label %949

832:                                              ; preds = %830
  %833 = call noundef nonnull align 8 dereferenceable(160) ptr @_ZN3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168) %827)
  %834 = getelementptr inbounds i8, ptr %833, i64 8
  %835 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %834)
  br i1 %835, label %836, label %949

836:                                              ; preds = %832
  %837 = call noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %834)
  %838 = zext i32 %837 to i64
  %839 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %838) #8
  %840 = load i32, ptr %839, align 4, !tbaa !11
  %841 = icmp eq i32 %840, 1
  %842 = getelementptr inbounds i8, ptr %839, i64 4
  %843 = load i32, ptr %842, align 4
  %844 = icmp eq i32 %843, 1
  %or.cond378 = select i1 %841, i1 %844, i1 false
  %845 = getelementptr inbounds i8, ptr %839, i64 8
  %846 = load i32, ptr %845, align 4
  %847 = icmp eq i32 %846, 0
  %or.cond381 = select i1 %or.cond378, i1 %847, i1 false
  br i1 %or.cond381, label %848, label %949

848:                                              ; preds = %836
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %66) #8
  store ptr null, ptr %66, align 8, !tbaa !5
  %849 = load i32, ptr %833, align 8, !tbaa !28
  %850 = zext i32 %849 to i64
  %851 = invoke noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE2atEm(ptr noundef nonnull align 8 dereferenceable(24) %92, i64 noundef %850)
          to label %852 unwind label %856

852:                                              ; preds = %848
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %67) #8
  %853 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #8
  store ptr %853, ptr %67, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %68) #8
  %854 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #8
  store ptr %854, ptr %68, align 8
  %855 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  br i1 %855, label %.lr.ph477, label %._crit_edge478

856:                                              ; preds = %848
  %857 = landingpad { ptr, i32 }
          cleanup
  br label %948

.lr.ph477:                                        ; preds = %852, %873
  %858 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  %859 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %858)
  br i1 %859, label %860, label %873

860:                                              ; preds = %.lr.ph477
  %861 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %858)
  %862 = getelementptr inbounds i8, ptr %861, i64 32
  %863 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %862)
  br i1 %863, label %864, label %873

864:                                              ; preds = %860
  %865 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %858)
  %866 = getelementptr inbounds i8, ptr %865, i64 32
  %867 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %866)
  %868 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %867, ptr noundef nonnull align 8 dereferenceable(32) %834)
          to label %869 unwind label %871

869:                                              ; preds = %864
  br i1 %868, label %.thread410, label %873

.thread410:                                       ; preds = %869
  %870 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %858)
  store ptr %870, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  br label %876

871:                                              ; preds = %864
  %872 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  br label %948

873:                                              ; preds = %869, %860, %.lr.ph477
  %874 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %67) #8
  %875 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %67, ptr noundef nonnull align 8 dereferenceable(8) %68) #8
  br i1 %875, label %.lr.ph477, label %._crit_edge478

._crit_edge478:                                   ; preds = %873, %852
  %.pr = load ptr, ptr %66, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %68) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %67) #8
  %.not318 = icmp eq ptr %.pr, null
  br i1 %.not318, label %947, label %876

876:                                              ; preds = %.thread410, %._crit_edge478
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %69) #8
  store ptr %66, ptr %69, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %70) #8
  %877 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #8
  store ptr %877, ptr %70, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  %878 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #8
  store ptr %878, ptr %71, align 8
  %879 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  br i1 %879, label %.lr.ph480, label %.loopexit

.lr.ph480:                                        ; preds = %876
  %880 = ptrtoint ptr %851 to i64
  br label %881

881:                                              ; preds = %.lr.ph480, %942
  %882 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %883 = ptrtoint ptr %882 to i64
  %884 = sub i64 %880, %883
  %885 = sdiv exact i64 %884, 192
  %886 = trunc i64 %885 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %72) #8
  %887 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #8
  store ptr %887, ptr %72, align 8
  %888 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %72) #8
  %889 = trunc i64 %888 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %886, i32 noundef %889)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %72) #8
  %890 = call noundef nonnull align 8 dereferenceable(152) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #8
  %891 = call noundef zeroext i1 @_ZNK3MIR9Statement9is_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %890)
  br i1 %891, label %892, label %937

892:                                              ; preds = %881
  %893 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %890)
  %894 = getelementptr inbounds i8, ptr %893, i64 32
  %895 = call noundef zeroext i1 @_ZNK3MIR6RValue6is_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %894)
  br i1 %895, label %896, label %937

896:                                              ; preds = %892
  %897 = call noundef nonnull align 8 dereferenceable(144) ptr @_ZNK3MIR9Statement9as_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %890)
  %898 = getelementptr inbounds i8, ptr %897, i64 32
  %899 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %898)
  %900 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %899, ptr noundef nonnull align 8 dereferenceable(32) %834)
          to label %901 unwind label %.loopexit414

901:                                              ; preds = %896
  br i1 %900, label %902, label %937

902:                                              ; preds = %901
  %903 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %904 unwind label %.loopexit.split-lp

904:                                              ; preds = %902
  br i1 %903, label %905, label %923

905:                                              ; preds = %904
  %906 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %907 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %906, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %908 unwind label %.loopexit.split-lp

908:                                              ; preds = %905
  %909 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %907, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %910 unwind label %.loopexit.split-lp

910:                                              ; preds = %908
  %911 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %909, ptr noundef nonnull @.str.122)
          to label %912 unwind label %.loopexit.split-lp

912:                                              ; preds = %910
  %913 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %911, ptr noundef nonnull align 8 dereferenceable(32) %834)
          to label %914 unwind label %.loopexit.split-lp

914:                                              ; preds = %912
  %915 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %913, ptr noundef nonnull @.str.35)
          to label %916 unwind label %.loopexit.split-lp

916:                                              ; preds = %914
  %917 = load ptr, ptr %66, align 8, !tbaa !5
  %918 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %915, ptr noundef nonnull align 8 dereferenceable(32) %917)
          to label %919 unwind label %.loopexit.split-lp

919:                                              ; preds = %916
  %920 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %918, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %921 unwind label %.loopexit.split-lp

921:                                              ; preds = %919
  %922 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %920, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %923 unwind label %.loopexit.split-lp

.loopexit414:                                     ; preds = %896
  %lpad.loopexit = landingpad { ptr, i32 }
          cleanup
  br label %946

.loopexit.split-lp:                               ; preds = %902, %905, %908, %910, %912, %914, %916, %919, %921
  %lpad.loopexit.split-lp = landingpad { ptr, i32 }
          cleanup
  br label %946

923:                                              ; preds = %921, %904
  call void @llvm.lifetime.start.p0(i64 32, ptr nonnull %73) #8
  %924 = load ptr, ptr %66, align 8, !tbaa !5
  invoke void @_ZNK3MIR6LValue5cloneEv(ptr dead_on_unwind nonnull writable sret(%"struct.MIR::LValue") align 8 %73, ptr noundef nonnull align 8 dereferenceable(32) %924)
          to label %925 unwind label %930

925:                                              ; preds = %923
  %926 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZN3MIR6LValueaSEOS0_(ptr noundef nonnull align 8 dereferenceable(32) %834, ptr noundef nonnull align 8 dereferenceable(32) %73)
          to label %927 unwind label %932

927:                                              ; preds = %925
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %74, ptr noundef nonnull align 8 dereferenceable(8) %70) #8
  %928 = load ptr, ptr %74, align 8
  %929 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %851, ptr %928)
          to label %.critedge386 unwind label %935

.critedge386:                                     ; preds = %927
  store i8 1, ptr %3, align 1, !tbaa !15
  br label %.loopexit

930:                                              ; preds = %923
  %931 = landingpad { ptr, i32 }
          cleanup
  br label %934

932:                                              ; preds = %925
  %933 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN3MIR6LValueD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %73) #8
  br label %934

934:                                              ; preds = %932, %930
  %.pn319 = phi { ptr, i32 } [ %933, %932 ], [ %931, %930 ]
  call void @llvm.lifetime.end.p0(i64 32, ptr nonnull %73) #8
  br label %946

935:                                              ; preds = %927
  %936 = landingpad { ptr, i32 }
          cleanup
  br label %946

937:                                              ; preds = %901, %892, %881
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %76) #8
  store ptr %66, ptr %76, align 8, !tbaa !5
  store ptr %69, ptr %823, align 8, !tbaa !5
  call void @"_ZNSt8functionIFbRKN3MIR6LValueEN12_GLOBAL__N_18ValUsageEEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRNS0_11TypeResolveERNS0_8FunctionEE4$_12vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32) %75, ptr noundef nonnull align 8 dereferenceable(16) %76) #8
  %938 = invoke noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152) %890, ptr noundef nonnull %75)
          to label %939 unwind label %940

939:                                              ; preds = %937
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %76) #8
  br i1 %938, label %.loopexit, label %942

940:                                              ; preds = %937
  %941 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt14_Function_baseD2Ev(ptr noundef nonnull align 8 dereferenceable(32) %75) #8
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %76) #8
  br label %946

942:                                              ; preds = %939
  %943 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %70) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %71) #8
  %944 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %851) #8
  store ptr %944, ptr %71, align 8
  %945 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %70, ptr noundef nonnull align 8 dereferenceable(8) %71) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %71) #8
  br i1 %945, label %881, label %.loopexit, !llvm.loop !43

946:                                              ; preds = %.loopexit414, %.loopexit.split-lp, %940, %935, %934
  %.pn321 = phi { ptr, i32 } [ %936, %935 ], [ %.pn319, %934 ], [ %941, %940 ], [ %lpad.loopexit, %.loopexit414 ], [ %lpad.loopexit.split-lp, %.loopexit.split-lp ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  br label %948

.loopexit:                                        ; preds = %939, %942, %876, %.critedge386
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %70) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %69) #8
  br label %947

947:                                              ; preds = %.loopexit, %._crit_edge478
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  br label %949

948:                                              ; preds = %946, %871, %856
  %.pn321.pn = phi { ptr, i32 } [ %.pn321, %946 ], [ %872, %871 ], [ %857, %856 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %66) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %65) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %64) #8
  br label %1060

949:                                              ; preds = %832, %836, %947, %830, %825
  %950 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %64) #8
  %951 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %64, ptr noundef nonnull align 8 dereferenceable(8) %65) #8
  br i1 %951, label %825, label %._crit_edge484

952:                                              ; preds = %._crit_edge484
  br i1 %824, label %953, label %962

953:                                              ; preds = %952
  %954 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %955 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %954, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %956 unwind label %668

956:                                              ; preds = %953
  %957 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %955, ptr noundef nonnull @.str.123)
          to label %958 unwind label %668

958:                                              ; preds = %956
  %959 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %957, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %960 unwind label %668

960:                                              ; preds = %958
  %961 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %959, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %962 unwind label %668

962:                                              ; preds = %960, %952
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %77) #8
  %963 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %963, ptr %77, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %78) #8
  %964 = call ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  store ptr %964, ptr %78, align 8
  %965 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef nonnull align 8 dereferenceable(8) %78) #8
  br i1 %965, label %.lr.ph489, label %._crit_edge490

._crit_edge490:                                   ; preds = %._crit_edge487, %962
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  %966 = load i8, ptr %3, align 1, !tbaa !15, !range !19, !noundef !20
  %967 = trunc nuw i8 %966 to i1
  call void @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #8
  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 %967

.lr.ph489:                                        ; preds = %962, %._crit_edge487
  %968 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %79) #8
  %969 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %968) #8
  store ptr %969, ptr %79, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #8
  %970 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %968) #8
  store ptr %970, ptr %80, align 8
  %971 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #8
  br i1 %971, label %.lr.ph486, label %._crit_edge487

.lr.ph486:                                        ; preds = %.lr.ph489
  %972 = ptrtoint ptr %968 to i64
  br label %975

._crit_edge487:                                   ; preds = %1055, %.lr.ph489
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  %973 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %77) #8
  %974 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR10BasicBlockESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %77, ptr noundef nonnull align 8 dereferenceable(8) %78) #8
  br i1 %974, label %.lr.ph489, label %._crit_edge490

975:                                              ; preds = %.lr.ph486, %1055
  %976 = call noundef nonnull align 8 dereferenceable(192) ptr @_ZNSt6vectorIN3MIR10BasicBlockESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24) %92) #8
  %977 = ptrtoint ptr %976 to i64
  %978 = sub i64 %972, %977
  %979 = sdiv exact i64 %978, 192
  %980 = trunc i64 %979 to i32
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %81) #8
  %981 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %968) #8
  store ptr %981, ptr %81, align 8
  %982 = call noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %81) #8
  %983 = trunc i64 %982 to i32
  call void @_ZN3MIR11TypeResolve12set_cur_stmtEjj(ptr noundef nonnull align 8 dereferenceable(120) %0, i32 noundef %980, i32 noundef %983)
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %81) #8
  %984 = call noundef ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEptEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  %985 = call noundef ptr @_ZN3MIR9Statement10opt_AssignEv(ptr noundef nonnull align 8 dereferenceable(152) %984)
  %.not = icmp eq ptr %985, null
  br i1 %.not, label %1055, label %986

986:                                              ; preds = %975
  %987 = getelementptr inbounds i8, ptr %985, i64 32
  %988 = call noundef ptr @_ZN3MIR6RValue7opt_UseEv(ptr noundef nonnull align 8 dereferenceable(112) %987)
  %.not313 = icmp eq ptr %988, null
  br i1 %.not313, label %1016, label %989

989:                                              ; preds = %986
  %990 = invoke noundef zeroext i1 @_ZN3MIReqERKNS_6LValueES2_(ptr noundef nonnull align 8 dereferenceable(32) %985, ptr noundef nonnull align 8 dereferenceable(32) %988)
          to label %991 unwind label %1008

991:                                              ; preds = %989
  br i1 %990, label %992, label %1016

992:                                              ; preds = %991
  %993 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %994 unwind label %1008

994:                                              ; preds = %992
  br i1 %993, label %995, label %1010

995:                                              ; preds = %994
  %996 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %997 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %996, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %998 unwind label %1008

998:                                              ; preds = %995
  %999 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %997, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %1000 unwind label %1008

1000:                                             ; preds = %998
  %1001 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %999, ptr noundef nonnull align 8 dereferenceable(32) %985)
          to label %1002 unwind label %1008

1002:                                             ; preds = %1000
  %1003 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1001, ptr noundef nonnull @.str.124)
          to label %1004 unwind label %1008

1004:                                             ; preds = %1002
  %1005 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1003, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %1006 unwind label %1008

1006:                                             ; preds = %1004
  %1007 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1005, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1010 unwind label %1008

1008:                                             ; preds = %1006, %1004, %1002, %1000, %998, %995, %992, %989
  %1009 = landingpad { ptr, i32 }
          cleanup
  br label %1059

1010:                                             ; preds = %1006, %994
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %82) #8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %83, ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  %1011 = load ptr, ptr %83, align 8
  %1012 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %968, ptr %1011)
          to label %.critedge388 unwind label %1014

.critedge388:                                     ; preds = %1010
  store ptr %1012, ptr %82, align 8
  %1013 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEmiEl(ptr noundef nonnull align 8 dereferenceable(8) %82, i64 noundef 1) #8
  store ptr %1013, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  br label %1055

1014:                                             ; preds = %1010
  %1015 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %82) #8
  br label %1059

1016:                                             ; preds = %991, %986
  %1017 = call noundef zeroext i1 @_ZNK3MIR6LValue8is_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %985)
  br i1 %1017, label %1018, label %1055

1018:                                             ; preds = %1016
  %1019 = call noundef i32 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32) %985)
  %1020 = zext i32 %1019 to i64
  %1021 = call noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %9, i64 noundef %1020) #8
  %1022 = getelementptr inbounds i8, ptr %1021, i64 4
  %1023 = load i32, ptr %1022, align 4, !tbaa !13
  %1024 = icmp eq i32 %1023, 1
  %1025 = load i32, ptr %1021, align 4
  %1026 = icmp eq i32 %1025, 0
  %or.cond390 = select i1 %1024, i1 %1026, i1 false
  %1027 = getelementptr inbounds i8, ptr %1021, i64 8
  %1028 = load i32, ptr %1027, align 4
  %1029 = icmp eq i32 %1028, 0
  %or.cond393 = select i1 %or.cond390, i1 %1029, i1 false
  br i1 %or.cond393, label %1030, label %1055

1030:                                             ; preds = %1018
  %1031 = invoke noundef zeroext i1 @_Z13debug_enabledv()
          to label %1032 unwind label %1046

1032:                                             ; preds = %1030
  br i1 %1031, label %1033, label %1048

1033:                                             ; preds = %1032
  %1034 = load i32, ptr @g_debug_indent_level, align 4, !tbaa !9
  %1035 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_Z12debug_outputiPKc(i32 noundef %1034, ptr noundef nonnull @__func__._Z39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionE)
          to label %1036 unwind label %1046

1036:                                             ; preds = %1033
  %1037 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_11TypeResolveE(ptr noundef nonnull align 8 dereferenceable(8) %1035, ptr noundef nonnull align 8 dereferenceable(120) %0)
          to label %1038 unwind label %1046

1038:                                             ; preds = %1036
  %1039 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZN3MIRlsERSoRKNS_6LValueE(ptr noundef nonnull align 8 dereferenceable(8) %1037, ptr noundef nonnull align 8 dereferenceable(32) %985)
          to label %1040 unwind label %1046

1040:                                             ; preds = %1038
  %1041 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt11char_traitsIcEERSt13basic_ostreamIcT_ES5_PKc(ptr noundef nonnull align 8 dereferenceable(8) %1039, ptr noundef nonnull @.str.125)
          to label %1042 unwind label %1046

1042:                                             ; preds = %1040
  %1043 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSt8ios_baseS0_E(ptr noundef nonnull align 8 dereferenceable(8) %1041, ptr noundef nonnull @_ZSt3decRSt8ios_base)
          to label %1044 unwind label %1046

1044:                                             ; preds = %1042
  %1045 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSolsEPFRSoS_E(ptr noundef nonnull align 8 dereferenceable(8) %1043, ptr noundef nonnull @_ZSt4endlIcSt11char_traitsIcEERSt13basic_ostreamIT_T0_ES6_)
          to label %1048 unwind label %1046

1046:                                             ; preds = %1044, %1042, %1040, %1038, %1036, %1033, %1030
  %1047 = landingpad { ptr, i32 }
          cleanup
  br label %1059

1048:                                             ; preds = %1044, %1032
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %84) #8
  call void @_ZN9__gnu_cxx17__normal_iteratorIPKN3MIR9StatementESt6vectorIS2_SaIS2_EEEC2IPS2_vEERKNS0_IT_S7_EE(ptr noundef nonnull align 8 dereferenceable(8) %85, ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  %1049 = load ptr, ptr %85, align 8
  %1050 = invoke ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5eraseEN9__gnu_cxx17__normal_iteratorIPKS1_S3_EE(ptr noundef nonnull align 8 dereferenceable(24) %968, ptr %1049)
          to label %1051 unwind label %1053

1051:                                             ; preds = %1048
  store ptr %1050, ptr %84, align 8
  %1052 = call ptr @_ZNK9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEmiEl(ptr noundef nonnull align 8 dereferenceable(8) %84, i64 noundef 1) #8
  store ptr %1052, ptr %79, align 8, !tbaa !5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  br label %1055

1053:                                             ; preds = %1048
  %1054 = landingpad { ptr, i32 }
          cleanup
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %84) #8
  br label %1059

1055:                                             ; preds = %975, %1016, %1051, %1018, %.critedge388
  %1056 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %79) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %80) #8
  %1057 = call ptr @_ZNSt6vectorIN3MIR9StatementESaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %968) #8
  store ptr %1057, ptr %80, align 8
  %1058 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %80) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %80) #8
  br i1 %1058, label %975, label %._crit_edge487, !llvm.loop !44

1059:                                             ; preds = %1046, %1053, %1008, %1014
  %.pn315.pn = phi { ptr, i32 } [ %1015, %1014 ], [ %1009, %1008 ], [ %1054, %1053 ], [ %1047, %1046 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %79) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %78) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %77) #8
  br label %1060

1060:                                             ; preds = %1059, %948, %804, %668, %667, %102
  %.pn340.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn340.pn.pn.pn.pn.pn.pn.pn.pn, %667 ], [ %.pn324.pn, %804 ], [ %.pn321.pn, %948 ], [ %.pn315.pn, %1059 ], [ %669, %668 ], [ %103, %102 ]
  call void @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(24) %9) #8
  br label %1061

1061:                                             ; preds = %1060, %100
  %.pn340.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn340.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1060 ], [ %101, %100 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #8
  call void @_ZN8TraceLogD1Ev(ptr noundef nonnull align 8 dereferenceable(40) %4) #8
  br label %1062

1062:                                             ; preds = %1061, %98
  %.pn340.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn340.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn, %1061 ], [ %99, %98 ]
  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 } %.pn340.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

; 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 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: 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 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_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

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

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

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

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

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

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

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

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

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

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

; 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 @_ZN3MIR11TypeResolve17set_cur_stmt_termEj(ptr noundef nonnull align 8 dereferenceable(120), i32 noundef) local_unnamed_addr #4 align 2

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

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

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR9StatementESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) local_unnamed_addr #3

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

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_117visit_mir_lvaluesERKN3MIR9StatementESt8functionIFbRKNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR9StatementERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(152), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_124check_invalidates_lvalueERKN3MIR10TerminatorERKNS0_6LValueEbb(ptr noundef nonnull align 8 dereferenceable(168), ptr noundef nonnull align 8 dereferenceable(32), i1 noundef zeroext, i1 noundef zeroext) local_unnamed_addr #3

; 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 @_ZNK3MIR6LValue8as_LocalEv(ptr noundef nonnull align 8 dereferenceable(32)) 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 @_ZNSt6vectorIN3MIR9StatementESaIS1_EE5frontEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZNK3MIR6RValue3tagEv(ptr noundef nonnull align 8 dereferenceable(112)) 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(152) ptr @_ZNKSt6vectorIN3MIR9StatementESaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef) local_unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_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 @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_1vEEOT_"(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(8)) unnamed_addr #4 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSaIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEE6ValUseEC2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

; Function Attrs: mustprogress uwtable
declare hidden void @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_EEC2EmRKS6_(ptr noundef nonnull align 8 dereferenceable(24), i64 noundef, ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @_ZNSt15__new_allocatorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseED2Ev(ptr noundef nonnull align 1 dereferenceable(1)) unnamed_addr #4 align 2

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

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

; Function Attrs: mustprogress nounwind uwtable
declare hidden noundef nonnull align 4 dereferenceable(12) ptr @_ZNSt6vectorIZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS0_8FunctionEE6ValUseSaIS5_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 nonnull align 8 dereferenceable(32) ptr @_ZNK3MIR6RValue6as_UseEv(ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #4 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare hidden noundef zeroext i1 @"_ZSt6any_ofIN9__gnu_cxx17__normal_iteratorIPKN3MIR6LValue7WrapperESt6vectorIS4_SaIS4_EEEEZ39MIR_Optimise_PropagateSingleAssignmentsRNS2_11TypeResolveERNS2_8FunctionEE4$_14EbT_SG_T0_"(ptr, ptr) local_unnamed_addr #6

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

; Function Attrs: inlinehint mustprogress uwtable
declare hidden ptr @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEENK4$_13clERKNS_6LValue4CRefE"(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(16)) local_unnamed_addr #6 align 2

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

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

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

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

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

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

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

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef nonnull align 4 dereferenceable(4) ptr @_ZNK3MIR10Terminator8as_PanicEv(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(40) ptr @_ZNK3MIR10Terminator5as_IfEv(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(56) ptr @_ZNK3MIR10Terminator9as_SwitchEv(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(96) ptr @_ZNK3MIR10Terminator14as_SwitchValueEv(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(160) ptr @_ZNK3MIR10Terminator7as_CallEv(ptr noundef nonnull align 8 dereferenceable(168)) local_unnamed_addr #4 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZSt9make_pairIN3MIR6LValueENS0_6RValueEESt4pairINSt25__strip_reference_wrapperINSt5decayIT_E4typeEE6__typeENS4_INS5_IT0_E4typeEE6__typeEEOS6_OSB_(ptr dead_on_unwind noalias writable sret(%"struct.std::pair.592") align 8, ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #3

declare void @_ZNK3MIR6RValue5cloneEv(ptr dead_on_unwind writable sret(%"class.MIR::RValue") align 8, ptr noundef nonnull align 8 dereferenceable(112)) local_unnamed_addr #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZStlsISt4pairIN3MIR6LValueENS1_6RValueEEERSoS5_RKSt6vectorIT_SaIS7_EE(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #6

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

; Function Attrs: mustprogress uwtable
declare hidden noundef zeroext i1 @_ZN12_GLOBAL__N_121visit_mir_lvalues_mutERN3MIR6RValueESt8functionIFbRNS0_6LValueENS_8ValUsageEEE(ptr noundef nonnull align 8 dereferenceable(112), ptr noundef) local_unnamed_addr #3

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef i64 @_ZN9__gnu_cxxmiIPN3MIR9StatementESt6vectorIS2_SaIS2_EEEENS_17__normal_iteratorIT_T0_E15difference_typeERKSA_SD_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5

; Function Attrs: mustprogress nounwind uwtable
declare hidden void @"_ZNSt8functionIFvRSoEEC2IZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS4_8FunctionEE3$_9vEEOT_"(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 @_ZNSt6vectorISt4pairIN3MIR6LValueENS1_6RValueEESaIS4_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #4 align 2

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare hidden void @"_ZZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEEN3$_3D2Ev"(ptr noundef nonnull align 8 dereferenceable(24)) unnamed_addr #5 align 2

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

!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 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"_ZTSZ39MIR_Optimise_PropagateSingleAssignmentsRN3MIR11TypeResolveERNS_8FunctionEE6ValUse", !10, i64 0, !10, i64 4, !10, i64 8}
!13 = !{!12, !10, i64 4}
!14 = !{!12, !10, i64 8}
!15 = !{!16, !16, i64 0}
!16 = !{!"bool", !7, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = !{i8 0, i8 2}
!20 = !{}
!21 = distinct !{!21, !18}
!22 = distinct !{!22, !18}
!23 = distinct !{!23, !18}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}
!28 = !{!29, !10, i64 0}
!29 = !{!"_ZTSN3MIR10Terminator9Data_CallE", !10, i64 0, !10, i64 4, !30, i64 8, !37, i64 40, !39, i64 136}
!30 = !{!"_ZTSN3MIR6LValueE", !31, i64 0, !33, i64 8}
!31 = !{!"_ZTSN3MIR6LValue7StorageE", !32, i64 0}
!32 = !{!"long", !7, i64 0}
!33 = !{!"_ZTSSt6vectorIN3MIR6LValue7WrapperESaIS2_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIN3MIR6LValue7WrapperESaIS2_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!"_ZTSN3MIR10CallTargetE", !38, i64 0, !7, i64 8}
!38 = !{!"_ZTSN3MIR10CallTarget3TagE", !7, i64 0}
!39 = !{!"_ZTSSt6vectorIN3MIR5ParamESaIS1_EE", !40, i64 0}
!40 = !{!"_ZTSSt12_Vector_baseIN3MIR5ParamESaIS1_EE", !41, i64 0}
!41 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE12_Vector_implE", !42, i64 0}
!42 = !{!"_ZTSNSt12_Vector_baseIN3MIR5ParamESaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!43 = distinct !{!43, !18}
!44 = distinct !{!44, !18}


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