; LLVM IR from OAID/AutoKernel :: AutoSearch/src/adams2019 (FunctionDAG)

; 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"

%"struct.Halide::Expr" = type { %"struct.Halide::Internal::IRHandle" }
%"struct.Halide::Internal::IRHandle" = type { %"struct.Halide::Internal::IntrusivePtr.64" }
%"struct.Halide::Internal::IntrusivePtr.64" = type { ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.Halide::Internal::Autoscheduler::Span" = type <{ i64, i64, i8, [7 x i8] }>
%"class.Halide::Internal::Voidifier" = type { i8 }
%"struct.Halide::Internal::ErrorReport" = type <{ %"class.std::__cxx11::basic_ostringstream", i32, [4 x i8] }>
%"class.std::__cxx11::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }
%"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node" = type { ptr, %"class.Halide::Internal::Function", double, %"class.std::vector.19", %"class.std::vector.24", %"class.std::vector.29", i8, %"class.std::vector.34", %"class.std::vector.39", i32, i32, i32, i32, i8, i8, i8, i8, i8, %"class.std::unique_ptr" }
%"class.Halide::Internal::Function" = type { %"struct.Halide::Internal::FunctionPtr" }
%"struct.Halide::Internal::FunctionPtr" = type <{ %"struct.Halide::Internal::IntrusivePtr", ptr, i32, [4 x i8] }>
%"struct.Halide::Internal::IntrusivePtr" = type { ptr }
%"class.std::vector.19" = type { %"struct.std::_Vector_base.20" }
%"struct.std::_Vector_base.20" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval>>::_Vector_impl" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval>>::_Vector_impl" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.24" = type { %"struct.std::_Vector_base.25" }
%"struct.std::_Vector_base.25" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::Span, std::allocator<Halide::Internal::Autoscheduler::Span>>::_Vector_impl" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::Span, std::allocator<Halide::Internal::Autoscheduler::Span>>::_Vector_impl" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::Span, std::allocator<Halide::Internal::Autoscheduler::Span>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::Span, std::allocator<Halide::Internal::Autoscheduler::Span>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.29" = type { %"struct.std::_Vector_base.30" }
%"struct.std::_Vector_base.30" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo>>::_Vector_impl" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo>>::_Vector_impl" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.34" = type { %"struct.std::_Vector_base.35" }
%"struct.std::_Vector_base.35" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage>>::_Vector_impl" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage>>::_Vector_impl" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Node::Stage>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::vector.39" = type { %"struct.std::_Vector_base.40" }
%"struct.std::_Vector_base.40" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Edge *, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Edge *>>::_Vector_impl" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Edge *, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Edge *>>::_Vector_impl" = type { %"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Edge *, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Edge *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<Halide::Internal::Autoscheduler::FunctionDAG::Edge *, std::allocator<Halide::Internal::Autoscheduler::FunctionDAG::Edge *>>::_Vector_impl_data" = type { ptr, ptr, 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.45" }
%"struct.std::_Head_base.45" = type { ptr }
%"struct.Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval" = type { %"class.Halide::Var", %"class.Halide::Var" }
%"class.Halide::Var" = type { %"class.std::__cxx11::basic_string" }
%"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo" = type { %"struct.Halide::Internal::Interval", i8, i8, i64, i64 }
%"struct.Halide::Internal::Interval" = type { %"struct.Halide::Expr", %"struct.Halide::Expr" }

@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

; 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) #1

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

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

declare void @_ZN6Halide8Internal11ErrorReportC1EPKciS3_i(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

declare void @_ZN6Halide8Internal11ErrorReportD1Ev(ptr noundef nonnull align 8 dereferenceable(380)) unnamed_addr #3

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN6Halide8Internal9VoidifieranERNS0_11ErrorReportE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 8 dereferenceable(380)) #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReport3refEv(ptr noundef nonnull align 8 dereferenceable(380)) #5 align 2

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

declare noundef i32 @_ZNK6Halide8Internal8Function10dimensionsEv(ptr noundef nonnull align 8 dereferenceable(24)) #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEixERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN6Halide4ExpraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6Halide8Internal13Autoscheduler4SpanC2Ellb(ptr noundef nonnull align 8 dereferenceable(17), i64 noundef, i64 noundef, i1 noundef zeroext) unnamed_addr #2 align 2

declare void @_ZN6Halide8Internal8simplifyENS_4ExprEbRKNS0_5ScopeINS0_8IntervalEEERKNS2_INS0_16ModulusRemainderEEE(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8, ptr noundef, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) #3

declare void @_ZN6Halide8Internal10substituteERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4ExprESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS8_(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_8IntervalEE11empty_scopeEv() #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_16ModulusRemainderEE11empty_scopeEv() #6 align 2

declare noundef ptr @_ZN6Halide8Internal12as_const_intERKNS_4ExprE(ptr noundef nonnull align 8 dereferenceable(8)) #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsINS_4ExprEEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef nonnull align 8 dereferenceable(8)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA3_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef nonnull align 1 dereferenceable(3)) #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA2_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef nonnull align 1 dereferenceable(2)) #6 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Halide8Internal13Autoscheduler11FunctionDAG4Node20required_to_computedEPKNS1_4SpanEPS4_(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef %1, ptr noundef %2) #6 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca %"class.std::map", align 8
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca %"struct.Halide::Expr", align 8
  %12 = alloca %"struct.Halide::Expr", align 8
  %13 = alloca i32, align 4
  %14 = alloca ptr, align 8
  %15 = alloca %"class.Halide::Internal::Autoscheduler::Span", align 8
  %16 = alloca i64, align 8
  %17 = alloca i64, align 8
  %18 = alloca %"struct.Halide::Expr", align 8
  %19 = alloca %"struct.Halide::Expr", align 8
  %20 = alloca %"struct.Halide::Expr", align 8
  %21 = alloca %"struct.Halide::Expr", align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca %"class.Halide::Internal::Voidifier", align 1
  %25 = alloca %"struct.Halide::Internal::ErrorReport", align 8
  %26 = alloca i1, align 1
  %27 = alloca i1, align 1
  %28 = alloca %"class.Halide::Internal::Autoscheduler::Span", align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store ptr %2, ptr %6, align 8, !tbaa !5
  %29 = load ptr, ptr %4, align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr %7) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #8
  %30 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node", ptr %29, i32 0, i32 6
  %31 = load i8, ptr %30, align 8, !tbaa !9, !range !43, !noundef !44
  %32 = trunc i8 %31 to i1
  br i1 %32, label %105, label %33

33:                                               ; preds = %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #8
  store i32 0, ptr %8, align 4, !tbaa !45
  br label %34

34:                                               ; preds = %82, %33
  %35 = load i32, ptr %8, align 4, !tbaa !45
  %36 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node", ptr %29, i32 0, i32 1
  %37 = invoke noundef i32 @_ZNK6Halide8Internal8Function10dimensionsEv(ptr noundef nonnull align 8 dereferenceable(24) %36)
          to label %38 unwind label %41

38:                                               ; preds = %34
  %39 = icmp slt i32 %35, %37
  br i1 %39, label %45, label %40

40:                                               ; preds = %38
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  br label %104

41:                                               ; preds = %34
  %42 = landingpad { ptr, i32 }
          cleanup
  %43 = extractvalue { ptr, i32 } %42, 0
  store ptr %43, ptr %9, align 8
  %44 = extractvalue { ptr, i32 } %42, 1
  store i32 %44, ptr %10, align 4
  br label %103

45:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #8
  %46 = load ptr, ptr %5, align 8, !tbaa !5
  %47 = load i32, ptr %8, align 4, !tbaa !45
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %46, i64 %48
  %50 = invoke noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3minEv(ptr noundef nonnull align 8 dereferenceable(17) %49)
          to label %51 unwind label %85

51:                                               ; preds = %45
  %52 = trunc i64 %50 to i32
  invoke void @_ZN6Halide4ExprC2Ei(ptr noundef nonnull align 8 dereferenceable(8) %11, i32 noundef %52)
          to label %53 unwind label %85

53:                                               ; preds = %51
  %54 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node", ptr %29, i32 0, i32 3
  %55 = load i32, ptr %8, align 4, !tbaa !45
  %56 = sext i32 %55 to i64
  %57 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %54, i64 noundef %56) #8
  %58 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval", ptr %57, i32 0, i32 0
  %59 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK6Halide3Var4nameB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(32) %58)
          to label %60 unwind label %89

60:                                               ; preds = %53
  %61 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEixERSB_(ptr noundef nonnull align 8 dereferenceable(48) %7, ptr noundef nonnull align 8 dereferenceable(32) %59)
          to label %62 unwind label %89

62:                                               ; preds = %60
  %63 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6Halide4ExpraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %61, ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #8
  %64 = load ptr, ptr %5, align 8, !tbaa !5
  %65 = load i32, ptr %8, align 4, !tbaa !45
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %64, i64 %66
  %68 = invoke noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3maxEv(ptr noundef nonnull align 8 dereferenceable(17) %67)
          to label %69 unwind label %94

69:                                               ; preds = %62
  %70 = trunc i64 %68 to i32
  invoke void @_ZN6Halide4ExprC2Ei(ptr noundef nonnull align 8 dereferenceable(8) %12, i32 noundef %70)
          to label %71 unwind label %94

71:                                               ; preds = %69
  %72 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node", ptr %29, i32 0, i32 3
  %73 = load i32, ptr %8, align 4, !tbaa !45
  %74 = sext i32 %73 to i64
  %75 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %72, i64 noundef %74) #8
  %76 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::SymbolicInterval", ptr %75, i32 0, i32 1
  %77 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNK6Halide3Var4nameB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(32) %76)
          to label %78 unwind label %98

78:                                               ; preds = %71
  %79 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEixERSB_(ptr noundef nonnull align 8 dereferenceable(48) %7, ptr noundef nonnull align 8 dereferenceable(32) %77)
          to label %80 unwind label %98

80:                                               ; preds = %78
  %81 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6Halide4ExpraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %79, ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  br label %82

82:                                               ; preds = %80
  %83 = load i32, ptr %8, align 4, !tbaa !45
  %84 = add nsw i32 %83, 1
  store i32 %84, ptr %8, align 4, !tbaa !45
  br label %34, !llvm.loop !46

85:                                               ; preds = %51, %45
  %86 = landingpad { ptr, i32 }
          cleanup
  %87 = extractvalue { ptr, i32 } %86, 0
  store ptr %87, ptr %9, align 8
  %88 = extractvalue { ptr, i32 } %86, 1
  store i32 %88, ptr %10, align 4
  br label %93

89:                                               ; preds = %60, %53
  %90 = landingpad { ptr, i32 }
          cleanup
  %91 = extractvalue { ptr, i32 } %90, 0
  store ptr %91, ptr %9, align 8
  %92 = extractvalue { ptr, i32 } %90, 1
  store i32 %92, ptr %10, align 4
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  br label %93

93:                                               ; preds = %89, %85
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #8
  br label %103

94:                                               ; preds = %69, %62
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %9, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %10, align 4
  br label %102

98:                                               ; preds = %78, %71
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %9, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %10, align 4
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  br label %102

102:                                              ; preds = %98, %94
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #8
  br label %103

103:                                              ; preds = %102, %93, %41
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #8
  br label %292

104:                                              ; preds = %40
  br label %105

105:                                              ; preds = %104, %3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #8
  store i32 0, ptr %13, align 4, !tbaa !45
  br label %106

106:                                              ; preds = %286, %105
  %107 = load i32, ptr %13, align 4, !tbaa !45
  %108 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node", ptr %29, i32 0, i32 1
  %109 = invoke noundef i32 @_ZNK6Halide8Internal8Function10dimensionsEv(ptr noundef nonnull align 8 dereferenceable(24) %108)
          to label %110 unwind label %113

110:                                              ; preds = %106
  %111 = icmp slt i32 %107, %109
  br i1 %111, label %117, label %112

112:                                              ; preds = %110
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %291

113:                                              ; preds = %106
  %114 = landingpad { ptr, i32 }
          cleanup
  %115 = extractvalue { ptr, i32 } %114, 0
  store ptr %115, ptr %9, align 8
  %116 = extractvalue { ptr, i32 } %114, 1
  store i32 %116, ptr %10, align 4
  br label %290

117:                                              ; preds = %110
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #8
  %118 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node", ptr %29, i32 0, i32 5
  %119 = load i32, ptr %13, align 4, !tbaa !45
  %120 = sext i32 %119 to i64
  %121 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %118, i64 noundef %120) #8
  store ptr %121, ptr %14, align 8, !tbaa !5
  %122 = load ptr, ptr %14, align 8, !tbaa !5
  %123 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo", ptr %122, i32 0, i32 1
  %124 = load i8, ptr %123, align 8, !tbaa !48, !range !43, !noundef !44
  %125 = trunc i8 %124 to i1
  br i1 %125, label %126, label %135

126:                                              ; preds = %117
  %127 = load ptr, ptr %5, align 8, !tbaa !5
  %128 = load i32, ptr %13, align 4, !tbaa !45
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %127, i64 %129
  %131 = load ptr, ptr %6, align 8, !tbaa !5
  %132 = load i32, ptr %13, align 4, !tbaa !45
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %131, i64 %133
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %134, ptr align 8 %130, i64 17, i1 false), !tbaa.struct !55
  br label %285

135:                                              ; preds = %117
  %136 = load ptr, ptr %14, align 8, !tbaa !5
  %137 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo", ptr %136, i32 0, i32 2
  %138 = load i8, ptr %137, align 1, !tbaa !58, !range !43, !noundef !44
  %139 = trunc i8 %138 to i1
  br i1 %139, label %140, label %177

140:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 24, ptr %15) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #8
  %141 = load ptr, ptr %5, align 8, !tbaa !5
  %142 = load i32, ptr %13, align 4, !tbaa !45
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %141, i64 %143
  %145 = invoke noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3minEv(ptr noundef nonnull align 8 dereferenceable(17) %144)
          to label %146 unwind label %168

146:                                              ; preds = %140
  store i64 %145, ptr %16, align 8, !tbaa !56
  %147 = load ptr, ptr %14, align 8, !tbaa !5
  %148 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo", ptr %147, i32 0, i32 3
  %149 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIlERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %16, ptr noundef nonnull align 8 dereferenceable(8) %148)
          to label %150 unwind label %168

150:                                              ; preds = %146
  %151 = load i64, ptr %149, align 8, !tbaa !56
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #8
  %152 = load ptr, ptr %5, align 8, !tbaa !5
  %153 = load i32, ptr %13, align 4, !tbaa !45
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %152, i64 %154
  %156 = invoke noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3maxEv(ptr noundef nonnull align 8 dereferenceable(17) %155)
          to label %157 unwind label %172

157:                                              ; preds = %150
  store i64 %156, ptr %17, align 8, !tbaa !56
  %158 = load ptr, ptr %14, align 8, !tbaa !5
  %159 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo", ptr %158, i32 0, i32 4
  %160 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIlERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %17, ptr noundef nonnull align 8 dereferenceable(8) %159)
          to label %161 unwind label %172

161:                                              ; preds = %157
  %162 = load i64, ptr %160, align 8, !tbaa !56
  invoke void @_ZN6Halide8Internal13Autoscheduler4SpanC2Ellb(ptr noundef nonnull align 8 dereferenceable(17) %15, i64 noundef %151, i64 noundef %162, i1 noundef zeroext false)
          to label %163 unwind label %172

163:                                              ; preds = %161
  %164 = load ptr, ptr %6, align 8, !tbaa !5
  %165 = load i32, ptr %13, align 4, !tbaa !45
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %164, i64 %166
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %167, ptr align 8 %15, i64 17, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  br label %284

168:                                              ; preds = %146, %140
  %169 = landingpad { ptr, i32 }
          cleanup
  %170 = extractvalue { ptr, i32 } %169, 0
  store ptr %170, ptr %9, align 8
  %171 = extractvalue { ptr, i32 } %169, 1
  store i32 %171, ptr %10, align 4
  br label %176

172:                                              ; preds = %161, %157, %150
  %173 = landingpad { ptr, i32 }
          cleanup
  %174 = extractvalue { ptr, i32 } %173, 0
  store ptr %174, ptr %9, align 8
  %175 = extractvalue { ptr, i32 } %173, 1
  store i32 %175, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #8
  br label %176

176:                                              ; preds = %172, %168
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr %15) #8
  br label %289

177:                                              ; preds = %135
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #8
  %178 = load ptr, ptr %14, align 8, !tbaa !5
  %179 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo", ptr %178, i32 0, i32 0
  %180 = getelementptr inbounds %"struct.Halide::Internal::Interval", ptr %179, i32 0, i32 0
  invoke void @_ZN6Halide8Internal10substituteERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4ExprESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS8_(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8 %19, ptr noundef nonnull align 8 dereferenceable(48) %7, ptr noundef nonnull align 8 dereferenceable(8) %180)
          to label %181 unwind label %236

181:                                              ; preds = %177
  %182 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_8IntervalEE11empty_scopeEv()
          to label %183 unwind label %240

183:                                              ; preds = %181
  %184 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_16ModulusRemainderEE11empty_scopeEv()
          to label %185 unwind label %240

185:                                              ; preds = %183
  invoke void @_ZN6Halide8Internal8simplifyENS_4ExprEbRKNS0_5ScopeINS0_8IntervalEEERKNS2_INS0_16ModulusRemainderEEE(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8 %18, ptr noundef %19, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(56) %182, ptr noundef nonnull align 8 dereferenceable(56) %184)
          to label %186 unwind label %240

186:                                              ; preds = %185
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #8
  %187 = load ptr, ptr %14, align 8, !tbaa !5
  %188 = getelementptr inbounds %"struct.Halide::Internal::Autoscheduler::FunctionDAG::Node::RegionComputedInfo", ptr %187, i32 0, i32 0
  %189 = getelementptr inbounds %"struct.Halide::Internal::Interval", ptr %188, i32 0, i32 1
  invoke void @_ZN6Halide8Internal10substituteERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4ExprESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS8_(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8 %21, ptr noundef nonnull align 8 dereferenceable(48) %7, ptr noundef nonnull align 8 dereferenceable(8) %189)
          to label %190 unwind label %244

190:                                              ; preds = %186
  %191 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_8IntervalEE11empty_scopeEv()
          to label %192 unwind label %248

192:                                              ; preds = %190
  %193 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_16ModulusRemainderEE11empty_scopeEv()
          to label %194 unwind label %248

194:                                              ; preds = %192
  invoke void @_ZN6Halide8Internal8simplifyENS_4ExprEbRKNS0_5ScopeINS0_8IntervalEEERKNS2_INS0_16ModulusRemainderEEE(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8 %20, ptr noundef %21, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(56) %191, ptr noundef nonnull align 8 dereferenceable(56) %193)
          to label %195 unwind label %248

195:                                              ; preds = %194
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #8
  %196 = invoke noundef ptr @_ZN6Halide8Internal12as_const_intERKNS_4ExprE(ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %197 unwind label %252

197:                                              ; preds = %195
  store ptr %196, ptr %22, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #8
  %198 = invoke noundef ptr @_ZN6Halide8Internal12as_const_intERKNS_4ExprE(ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %199 unwind label %256

199:                                              ; preds = %197
  store ptr %198, ptr %23, align 8, !tbaa !5
  %200 = load ptr, ptr %22, align 8, !tbaa !5
  %201 = icmp ne ptr %200, null
  call void @llvm.lifetime.start.p0(i64 1, ptr %24) #8
  store i1 false, ptr %26, align 1
  store i1 false, ptr %27, align 1
  br i1 %201, label %202, label %206

202:                                              ; preds = %199
  %203 = load ptr, ptr %23, align 8, !tbaa !5
  %204 = icmp ne ptr %203, null
  br i1 %204, label %205, label %206

205:                                              ; preds = %202
  br label %219

206:                                              ; preds = %202, %199
  call void @llvm.lifetime.start.p0(i64 384, ptr %25) #8
  store i1 true, ptr %26, align 1
  invoke void @_ZN6Halide8Internal11ErrorReportC1EPKciS3_i(ptr noundef nonnull align 8 dereferenceable(380) %25, ptr noundef @.str.14, i32 noundef 443, ptr noundef @.str.22, i32 noundef 0)
          to label %207 unwind label %260

207:                                              ; preds = %206
  store i1 true, ptr %27, align 1
  %208 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReport3refEv(ptr noundef nonnull align 8 dereferenceable(380) %25)
          to label %209 unwind label %264

209:                                              ; preds = %207
  %210 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsINS_4ExprEEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %208, ptr noundef nonnull align 8 dereferenceable(8) %18)
          to label %211 unwind label %264

211:                                              ; preds = %209
  %212 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA3_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %210, ptr noundef nonnull align 1 dereferenceable(3) @.str.13)
          to label %213 unwind label %264

213:                                              ; preds = %211
  %214 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsINS_4ExprEEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %212, ptr noundef nonnull align 8 dereferenceable(8) %20)
          to label %215 unwind label %264

215:                                              ; preds = %213
  %216 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA2_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %214, ptr noundef nonnull align 1 dereferenceable(2) @.str.8)
          to label %217 unwind label %264

217:                                              ; preds = %215
  invoke void @_ZN6Halide8Internal9VoidifieranERNS0_11ErrorReportE(ptr noundef nonnull align 1 dereferenceable(1) %24, ptr noundef nonnull align 8 dereferenceable(380) %216)
          to label %218 unwind label %264

218:                                              ; preds = %217
  br label %219

219:                                              ; preds = %218, %205
  %220 = load i1, ptr %27, align 1
  br i1 %220, label %221, label %223

221:                                              ; preds = %219
  invoke void @_ZN6Halide8Internal11ErrorReportD1Ev(ptr noundef nonnull align 8 dereferenceable(380) %25)
          to label %222 unwind label %260

222:                                              ; preds = %221
  br label %223

223:                                              ; preds = %222, %219
  %224 = load i1, ptr %26, align 1
  br i1 %224, label %225, label %226

225:                                              ; preds = %223
  call void @llvm.lifetime.end.p0(i64 384, ptr %25) #8
  br label %226

226:                                              ; preds = %225, %223
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr %28) #8
  %227 = load ptr, ptr %22, align 8, !tbaa !5
  %228 = load i64, ptr %227, align 8, !tbaa !56
  %229 = load ptr, ptr %23, align 8, !tbaa !5
  %230 = load i64, ptr %229, align 8, !tbaa !56
  invoke void @_ZN6Halide8Internal13Autoscheduler4SpanC2Ellb(ptr noundef nonnull align 8 dereferenceable(17) %28, i64 noundef %228, i64 noundef %230, i1 noundef zeroext false)
          to label %231 unwind label %276

231:                                              ; preds = %226
  %232 = load ptr, ptr %6, align 8, !tbaa !5
  %233 = load i32, ptr %13, align 4, !tbaa !45
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %232, i64 %234
  call void @llvm.memcpy.p0.p0.i64(ptr align 8 %235, ptr align 8 %28, i64 17, i1 false), !tbaa.struct !55
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %284

236:                                              ; preds = %177
  %237 = landingpad { ptr, i32 }
          cleanup
  %238 = extractvalue { ptr, i32 } %237, 0
  store ptr %238, ptr %9, align 8
  %239 = extractvalue { ptr, i32 } %237, 1
  store i32 %239, ptr %10, align 4
  br label %283

240:                                              ; preds = %185, %183, %181
  %241 = landingpad { ptr, i32 }
          cleanup
  %242 = extractvalue { ptr, i32 } %241, 0
  store ptr %242, ptr %9, align 8
  %243 = extractvalue { ptr, i32 } %241, 1
  store i32 %243, ptr %10, align 4
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %19) #8
  br label %283

244:                                              ; preds = %186
  %245 = landingpad { ptr, i32 }
          cleanup
  %246 = extractvalue { ptr, i32 } %245, 0
  store ptr %246, ptr %9, align 8
  %247 = extractvalue { ptr, i32 } %245, 1
  store i32 %247, ptr %10, align 4
  br label %282

248:                                              ; preds = %194, %192, %190
  %249 = landingpad { ptr, i32 }
          cleanup
  %250 = extractvalue { ptr, i32 } %249, 0
  store ptr %250, ptr %9, align 8
  %251 = extractvalue { ptr, i32 } %249, 1
  store i32 %251, ptr %10, align 4
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %21) #8
  br label %282

252:                                              ; preds = %195
  %253 = landingpad { ptr, i32 }
          cleanup
  %254 = extractvalue { ptr, i32 } %253, 0
  store ptr %254, ptr %9, align 8
  %255 = extractvalue { ptr, i32 } %253, 1
  store i32 %255, ptr %10, align 4
  br label %281

256:                                              ; preds = %197
  %257 = landingpad { ptr, i32 }
          cleanup
  %258 = extractvalue { ptr, i32 } %257, 0
  store ptr %258, ptr %9, align 8
  %259 = extractvalue { ptr, i32 } %257, 1
  store i32 %259, ptr %10, align 4
  br label %280

260:                                              ; preds = %221, %206
  %261 = landingpad { ptr, i32 }
          cleanup
  %262 = extractvalue { ptr, i32 } %261, 0
  store ptr %262, ptr %9, align 8
  %263 = extractvalue { ptr, i32 } %261, 1
  store i32 %263, ptr %10, align 4
  br label %272

264:                                              ; preds = %217, %215, %213, %211, %209, %207
  %265 = landingpad { ptr, i32 }
          cleanup
  %266 = extractvalue { ptr, i32 } %265, 0
  store ptr %266, ptr %9, align 8
  %267 = extractvalue { ptr, i32 } %265, 1
  store i32 %267, ptr %10, align 4
  %268 = load i1, ptr %27, align 1
  br i1 %268, label %269, label %271

269:                                              ; preds = %264
  invoke void @_ZN6Halide8Internal11ErrorReportD1Ev(ptr noundef nonnull align 8 dereferenceable(380) %25)
          to label %270 unwind label %298

270:                                              ; preds = %269
  br label %271

271:                                              ; preds = %270, %264
  br label %272

272:                                              ; preds = %271, %260
  %273 = load i1, ptr %26, align 1
  br i1 %273, label %274, label %275

274:                                              ; preds = %272
  call void @llvm.lifetime.end.p0(i64 384, ptr %25) #8
  br label %275

275:                                              ; preds = %274, %272
  call void @llvm.lifetime.end.p0(i64 1, ptr %24) #8
  br label %280

276:                                              ; preds = %226
  %277 = landingpad { ptr, i32 }
          cleanup
  %278 = extractvalue { ptr, i32 } %277, 0
  store ptr %278, ptr %9, align 8
  %279 = extractvalue { ptr, i32 } %277, 1
  store i32 %279, ptr %10, align 4
  call void @llvm.lifetime.end.p0(i64 24, ptr %28) #8
  br label %280

280:                                              ; preds = %276, %275, %256
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #8
  br label %281

281:                                              ; preds = %280, %252
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %20) #8
  br label %282

282:                                              ; preds = %281, %248, %244
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %18) #8
  br label %283

283:                                              ; preds = %282, %240, %236
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #8
  br label %289

284:                                              ; preds = %231, %163
  br label %285

285:                                              ; preds = %284, %126
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %286

286:                                              ; preds = %285
  %287 = load i32, ptr %13, align 4, !tbaa !45
  %288 = add nsw i32 %287, 1
  store i32 %288, ptr %13, align 4, !tbaa !45
  br label %106, !llvm.loop !59

289:                                              ; preds = %283, %176
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #8
  br label %290

290:                                              ; preds = %289, %113
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #8
  br label %292

291:                                              ; preds = %112
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %7) #8
  ret void

292:                                              ; preds = %290, %103
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %7) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr %7) #8
  br label %293

293:                                              ; preds = %292
  %294 = load ptr, ptr %9, align 8
  %295 = load i32, ptr %10, align 4
  %296 = insertvalue { ptr, i32 } poison, ptr %294, 0
  %297 = insertvalue { ptr, i32 } %296, i32 %295, 1
  resume { ptr, i32 } %297

298:                                              ; preds = %269
  %299 = landingpad { ptr, i32 }
          catch ptr null
  %300 = extractvalue { ptr, i32 } %299, 0
  call void @__clang_call_terminate(ptr %300) #9
  unreachable
}

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "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 = { noinline noreturn nounwind uwtable "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 = { alwaysinline 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 = { 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 = { 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 #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, !28, i64 112}
!10 = !{!"_ZTSN6Halide8Internal13Autoscheduler11FunctionDAG4NodeE", !6, i64 0, !11, i64 8, !15, i64 32, !16, i64 40, !20, i64 64, !24, i64 88, !28, i64 112, !29, i64 120, !33, i64 144, !14, i64 168, !14, i64 172, !14, i64 176, !14, i64 180, !28, i64 184, !28, i64 185, !28, i64 186, !28, i64 187, !28, i64 188, !37, i64 192}
!11 = !{!"_ZTSN6Halide8Internal8FunctionE", !12, i64 0}
!12 = !{!"_ZTSN6Halide8Internal11FunctionPtrE", !13, i64 0, !6, i64 8, !14, i64 16}
!13 = !{!"_ZTSN6Halide8Internal12IntrusivePtrINS0_13FunctionGroupEEE", !6, i64 0}
!14 = !{!"int", !7, i64 0}
!15 = !{!"double", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE", !21, i64 0}
!21 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE12_Vector_implE", !23, i64 0}
!23 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!24 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE", !25, i64 0}
!25 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE12_Vector_implE", !27, i64 0}
!27 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!28 = !{!"bool", !7, i64 0}
!29 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE", !30, i64 0}
!30 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE12_Vector_implE", !32, i64 0}
!32 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!33 = !{!"_ZTSSt6vectorIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE", !34, i64 0}
!34 = !{!"_ZTSSt12_Vector_baseIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE12_Vector_implE", !36, i64 0}
!36 = !{!"_ZTSNSt12_Vector_baseIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!"_ZTSSt10unique_ptrIN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EE", !38, i64 0}
!38 = !{!"_ZTSSt15__uniq_ptr_dataIN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_ELb1ELb1EE", !39, i64 0}
!39 = !{!"_ZTSSt15__uniq_ptr_implIN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EE", !40, i64 0}
!40 = !{!"_ZTSSt5tupleIJPN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EEE", !41, i64 0}
!41 = !{!"_ZTSSt11_Tuple_implILm0EJPN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EEE", !42, i64 0}
!42 = !{!"_ZTSSt10_Head_baseILm0EPN6Halide8Internal13Autoscheduler13BoundContents6LayoutELb0EE", !6, i64 0}
!43 = !{i8 0, i8 2}
!44 = !{}
!45 = !{!14, !14, i64 0}
!46 = distinct !{!46, !47}
!47 = !{!"llvm.loop.mustprogress"}
!48 = !{!49, !28, i64 16}
!49 = !{!"_ZTSN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoE", !50, i64 0, !28, i64 16, !28, i64 17, !54, i64 24, !54, i64 32}
!50 = !{!"_ZTSN6Halide8Internal8IntervalE", !51, i64 0, !51, i64 8}
!51 = !{!"_ZTSN6Halide4ExprE", !52, i64 0}
!52 = !{!"_ZTSN6Halide8Internal8IRHandleE", !53, i64 0}
!53 = !{!"_ZTSN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEEE", !6, i64 0}
!54 = !{!"long", !7, i64 0}
!55 = !{i64 0, i64 8, !56, i64 8, i64 8, !56, i64 16, i64 1, !57}
!56 = !{!54, !54, i64 0}
!57 = !{!28, !28, i64 0}
!58 = !{!49, !28, i64 17}
!59 = distinct !{!59, !47}


; 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"

%"struct.Halide::Expr" = type { %"struct.Halide::Internal::IRHandle" }
%"struct.Halide::Internal::IRHandle" = type { %"struct.Halide::Internal::IntrusivePtr.64" }
%"struct.Halide::Internal::IntrusivePtr.64" = type { ptr }
%"class.std::map" = type { %"class.std::_Rb_tree" }
%"class.std::_Rb_tree" = type { %"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" }
%"struct.std::_Rb_tree<std::__cxx11::basic_string<char>, std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>, std::_Select1st<std::pair<const std::__cxx11::basic_string<char>, Halide::Expr>>, std::less<std::__cxx11::basic_string<char>>>::_Rb_tree_impl" = type { [8 x i8], %"struct.std::_Rb_tree_header" }
%"struct.std::_Rb_tree_header" = type { %"struct.std::_Rb_tree_node_base", i64 }
%"struct.std::_Rb_tree_node_base" = type { i32, ptr, ptr, ptr }
%"class.Halide::Internal::Autoscheduler::Span" = type <{ i64, i64, i8, [7 x i8] }>
%"class.Halide::Internal::Voidifier" = type { i8 }
%"struct.Halide::Internal::ErrorReport" = type <{ %"class.std::__cxx11::basic_ostringstream", i32, [4 x i8] }>
%"class.std::__cxx11::basic_ostringstream" = type { %"class.std::basic_ostream.base", %"class.std::__cxx11::basic_stringbuf", %"class.std::basic_ios" }
%"class.std::basic_ostream.base" = type { ptr }
%"class.std::__cxx11::basic_stringbuf" = type { %"class.std::basic_streambuf", i32, %"class.std::__cxx11::basic_string" }
%"class.std::basic_streambuf" = type { ptr, ptr, ptr, ptr, ptr, ptr, ptr, %"class.std::locale" }
%"class.std::locale" = type { ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon = type { i64, [8 x i8] }
%"class.std::basic_ios" = type { %"class.std::ios_base", ptr, i8, i8, ptr, ptr, ptr, ptr }
%"class.std::ios_base" = type { ptr, i64, i64, i32, i32, i32, ptr, %"struct.std::ios_base::_Words", [8 x %"struct.std::ios_base::_Words"], i32, ptr, %"class.std::locale" }
%"struct.std::ios_base::_Words" = type { ptr, i64 }

@.str.8 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [90 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [13 x i8], align 1

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

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

; Function Attrs: mustprogress 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) #1

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

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

declare void @_ZN6Halide8Internal11ErrorReportC1EPKciS3_i(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef, i32 noundef, ptr noundef, i32 noundef) unnamed_addr #3

declare i32 @__gxx_personality_v0(...)

declare void @_ZN6Halide8Internal11ErrorReportD1Ev(ptr noundef nonnull align 8 dereferenceable(380)) unnamed_addr #3

; Function Attrs: noinline noreturn nounwind uwtable
declare hidden void @__clang_call_terminate(ptr noundef) local_unnamed_addr #4

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local void @_ZN6Halide8Internal9VoidifieranERNS0_11ErrorReportE(ptr noundef nonnull align 1 dereferenceable(1), ptr noundef nonnull align 8 dereferenceable(380)) local_unnamed_addr #5 align 2

; Function Attrs: alwaysinline mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReport3refEv(ptr noundef nonnull align 8 dereferenceable(380)) local_unnamed_addr #5 align 2

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

declare noundef i32 @_ZNK6Halide8Internal8Function10dimensionsEv(ptr noundef nonnull align 8 dereferenceable(24)) local_unnamed_addr #3

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEixERSB_(ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #6 align 2

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

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZN6Halide4ExpraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local void @_ZN6Halide8Internal13Autoscheduler4SpanC2Ellb(ptr noundef nonnull align 8 dereferenceable(17), i64 noundef, i64 noundef, i1 noundef zeroext) unnamed_addr #2 align 2

declare void @_ZN6Halide8Internal8simplifyENS_4ExprEbRKNS0_5ScopeINS0_8IntervalEEERKNS2_INS0_16ModulusRemainderEEE(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8, ptr noundef, i1 noundef zeroext, ptr noundef nonnull align 8 dereferenceable(56), ptr noundef nonnull align 8 dereferenceable(56)) local_unnamed_addr #3

declare void @_ZN6Halide8Internal10substituteERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4ExprESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS8_(ptr dead_on_unwind writable sret(%"struct.Halide::Expr") align 8, ptr noundef nonnull align 8 dereferenceable(48), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_8IntervalEE11empty_scopeEv() local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_16ModulusRemainderEE11empty_scopeEv() local_unnamed_addr #6 align 2

declare noundef ptr @_ZN6Halide8Internal12as_const_intERKNS_4ExprE(ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #3

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsINS_4ExprEEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA3_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef nonnull align 1 dereferenceable(3)) local_unnamed_addr #6 align 2

; Function Attrs: mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA2_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380), ptr noundef nonnull align 1 dereferenceable(2)) local_unnamed_addr #6 align 2

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

; Function Attrs: mustprogress uwtable
define dso_local void @_ZNK6Halide8Internal13Autoscheduler11FunctionDAG4Node20required_to_computedEPKNS1_4SpanEPS4_(ptr noundef nonnull align 8 dereferenceable(200) %0, ptr noundef %1, ptr nocapture noundef writeonly %2) local_unnamed_addr #6 align 2 personality ptr @__gxx_personality_v0 {
  %4 = alloca %"class.std::map", align 8
  %5 = alloca %"struct.Halide::Expr", align 8
  %6 = alloca %"struct.Halide::Expr", align 8
  %7 = alloca %"class.Halide::Internal::Autoscheduler::Span", align 8
  %8 = alloca i64, align 8
  %9 = alloca i64, align 8
  %10 = alloca %"struct.Halide::Expr", align 8
  %11 = alloca %"struct.Halide::Expr", align 8
  %12 = alloca %"struct.Halide::Expr", align 8
  %13 = alloca %"struct.Halide::Expr", align 8
  %14 = alloca %"class.Halide::Internal::Voidifier", align 1
  %15 = alloca %"struct.Halide::Internal::ErrorReport", align 8
  %16 = alloca %"class.Halide::Internal::Autoscheduler::Span", align 8
  call void @llvm.lifetime.start.p0(i64 48, ptr nonnull %4) #8
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEC2Ev(ptr noundef nonnull align 8 dereferenceable(48) %4) #8
  %17 = getelementptr inbounds i8, ptr %0, i64 112
  %18 = load i8, ptr %17, align 8, !tbaa !5, !range !42, !noundef !43
  %19 = trunc nuw i8 %18 to i1
  br i1 %19, label %.loopexit, label %.preheader

.preheader:                                       ; preds = %3
  %20 = getelementptr inbounds i8, ptr %0, i64 8
  %21 = getelementptr inbounds i8, ptr %0, i64 40
  br label %22

22:                                               ; preds = %.preheader, %46
  %indvars.iv = phi i64 [ 0, %.preheader ], [ %indvars.iv.next, %46 ]
  %23 = invoke noundef i32 @_ZNK6Halide8Internal8Function10dimensionsEv(ptr noundef nonnull align 8 dereferenceable(24) %20)
          to label %24 unwind label %27

24:                                               ; preds = %22
  %25 = sext i32 %23 to i64
  %26 = icmp slt i64 %indvars.iv, %25
  br i1 %26, label %29, label %.loopexit

27:                                               ; preds = %22
  %28 = landingpad { ptr, i32 }
          cleanup
  br label %146

29:                                               ; preds = %24
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %5) #8
  %30 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %1, i64 %indvars.iv
  %31 = call noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3minEv(ptr noundef nonnull align 8 dereferenceable(17) %30)
  %32 = trunc i64 %31 to i32
  invoke void @_ZN6Halide4ExprC2Ei(ptr noundef nonnull align 8 dereferenceable(8) %5, i32 noundef %32)
          to label %33 unwind label %48

33:                                               ; preds = %29
  %34 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv) #8
  %35 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK6Halide3Var4nameB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(32) %34)
  %36 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEixERSB_(ptr noundef nonnull align 8 dereferenceable(48) %4, ptr noundef nonnull align 8 dereferenceable(32) %35)
          to label %37 unwind label %50

37:                                               ; preds = %33
  %38 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6Halide4ExpraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %36, ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %6) #8
  %39 = call noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3maxEv(ptr noundef nonnull align 8 dereferenceable(17) %30)
  %40 = trunc i64 %39 to i32
  invoke void @_ZN6Halide4ExprC2Ei(ptr noundef nonnull align 8 dereferenceable(8) %6, i32 noundef %40)
          to label %41 unwind label %53

41:                                               ; preds = %37
  %42 = call noundef nonnull align 8 dereferenceable(64) ptr @_ZNKSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %21, i64 noundef %indvars.iv) #8
  %43 = getelementptr inbounds i8, ptr %42, i64 32
  %44 = call noundef nonnull align 8 dereferenceable(32) ptr @_ZNK6Halide3Var4nameB5cxx11Ev(ptr noundef nonnull align 8 dereferenceable(32) %43)
  %45 = invoke noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEEixERSB_(ptr noundef nonnull align 8 dereferenceable(48) %4, ptr noundef nonnull align 8 dereferenceable(32) %44)
          to label %46 unwind label %55

46:                                               ; preds = %41
  %47 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN6Halide4ExpraSEOS0_(ptr noundef nonnull align 8 dereferenceable(8) %45, ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  br label %22, !llvm.loop !44

48:                                               ; preds = %29
  %49 = landingpad { ptr, i32 }
          cleanup
  br label %52

50:                                               ; preds = %33
  %51 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %5) #8
  br label %52

52:                                               ; preds = %50, %48
  %.pn = phi { ptr, i32 } [ %51, %50 ], [ %49, %48 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %5) #8
  br label %146

53:                                               ; preds = %37
  %54 = landingpad { ptr, i32 }
          cleanup
  br label %57

55:                                               ; preds = %41
  %56 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %6) #8
  br label %57

57:                                               ; preds = %55, %53
  %.pn57 = phi { ptr, i32 } [ %56, %55 ], [ %54, %53 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %6) #8
  br label %146

.loopexit:                                        ; preds = %24, %3
  %58 = getelementptr inbounds i8, ptr %0, i64 8
  %59 = getelementptr inbounds i8, ptr %0, i64 88
  br label %60

60:                                               ; preds = %145, %.loopexit
  %indvars.iv71 = phi i64 [ %indvars.iv.next72, %145 ], [ 0, %.loopexit ]
  %61 = invoke noundef i32 @_ZNK6Halide8Internal8Function10dimensionsEv(ptr noundef nonnull align 8 dereferenceable(24) %58)
          to label %62 unwind label %66

62:                                               ; preds = %60
  %63 = sext i32 %61 to i64
  %64 = icmp slt i64 %indvars.iv71, %63
  br i1 %64, label %68, label %65

65:                                               ; preds = %62
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %4) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #8
  ret void

66:                                               ; preds = %60
  %67 = landingpad { ptr, i32 }
          cleanup
  br label %146

68:                                               ; preds = %62
  %69 = call noundef nonnull align 8 dereferenceable(40) ptr @_ZNKSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %59, i64 noundef %indvars.iv71) #8
  %70 = getelementptr inbounds i8, ptr %69, i64 16
  %71 = load i8, ptr %70, align 8, !tbaa !46, !range !42, !noundef !43
  %72 = trunc nuw i8 %71 to i1
  br i1 %72, label %73, label %76

73:                                               ; preds = %68
  %74 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %1, i64 %indvars.iv71
  %75 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %2, i64 %indvars.iv71
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(17) %75, ptr noundef nonnull align 8 dereferenceable(17) %74, i64 17, i1 false), !tbaa.struct !53
  br label %145

76:                                               ; preds = %68
  %77 = getelementptr inbounds i8, ptr %69, i64 17
  %78 = load i8, ptr %77, align 1, !tbaa !56, !range !42, !noundef !43
  %79 = trunc nuw i8 %78 to i1
  br i1 %79, label %80, label %91

80:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %7) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %8) #8
  %81 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %1, i64 %indvars.iv71
  %82 = call noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3minEv(ptr noundef nonnull align 8 dereferenceable(17) %81)
  store i64 %82, ptr %8, align 8, !tbaa !54
  %83 = getelementptr inbounds i8, ptr %69, i64 24
  %84 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIlERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %8, ptr noundef nonnull align 8 dereferenceable(8) %83)
  %85 = load i64, ptr %84, align 8, !tbaa !54
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %9) #8
  %86 = call noundef i64 @_ZNK6Halide8Internal13Autoscheduler4Span3maxEv(ptr noundef nonnull align 8 dereferenceable(17) %81)
  store i64 %86, ptr %9, align 8, !tbaa !54
  %87 = getelementptr inbounds i8, ptr %69, i64 32
  %88 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIlERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8) %9, ptr noundef nonnull align 8 dereferenceable(8) %87)
  %89 = load i64, ptr %88, align 8, !tbaa !54
  call void @_ZN6Halide8Internal13Autoscheduler4SpanC2Ellb(ptr noundef nonnull align 8 dereferenceable(17) %7, i64 noundef %85, i64 noundef %89, i1 noundef zeroext false)
  %90 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %2, i64 %indvars.iv71
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(17) %90, ptr noundef nonnull align 8 dereferenceable(17) %7, i64 17, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %9) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %8) #8
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %7) #8
  br label %145

91:                                               ; preds = %76
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #8
  invoke void @_ZN6Halide8Internal10substituteERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4ExprESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS8_(ptr dead_on_unwind nonnull writable sret(%"struct.Halide::Expr") align 8 %11, ptr noundef nonnull align 8 dereferenceable(48) %4, ptr noundef nonnull align 8 dereferenceable(8) %69)
          to label %92 unwind label %125

92:                                               ; preds = %91
  %93 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_8IntervalEE11empty_scopeEv()
          to label %94 unwind label %127

94:                                               ; preds = %92
  %95 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_16ModulusRemainderEE11empty_scopeEv()
          to label %96 unwind label %127

96:                                               ; preds = %94
  invoke void @_ZN6Halide8Internal8simplifyENS_4ExprEbRKNS0_5ScopeINS0_8IntervalEEERKNS2_INS0_16ModulusRemainderEEE(ptr dead_on_unwind nonnull writable sret(%"struct.Halide::Expr") align 8 %10, ptr noundef nonnull %11, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(56) %93, ptr noundef nonnull align 8 dereferenceable(56) %95)
          to label %97 unwind label %127

97:                                               ; preds = %96
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #8
  %98 = getelementptr inbounds i8, ptr %69, i64 8
  invoke void @_ZN6Halide8Internal10substituteERKSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEENS_4ExprESt4lessIS7_ESaISt4pairIKS7_S8_EEERKS8_(ptr dead_on_unwind nonnull writable sret(%"struct.Halide::Expr") align 8 %13, ptr noundef nonnull align 8 dereferenceable(48) %4, ptr noundef nonnull align 8 dereferenceable(8) %98)
          to label %99 unwind label %129

99:                                               ; preds = %97
  %100 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_8IntervalEE11empty_scopeEv()
          to label %101 unwind label %131

101:                                              ; preds = %99
  %102 = invoke noundef nonnull align 8 dereferenceable(56) ptr @_ZN6Halide8Internal5ScopeINS0_16ModulusRemainderEE11empty_scopeEv()
          to label %103 unwind label %131

103:                                              ; preds = %101
  invoke void @_ZN6Halide8Internal8simplifyENS_4ExprEbRKNS0_5ScopeINS0_8IntervalEEERKNS2_INS0_16ModulusRemainderEEE(ptr dead_on_unwind nonnull writable sret(%"struct.Halide::Expr") align 8 %12, ptr noundef nonnull %13, i1 noundef zeroext true, ptr noundef nonnull align 8 dereferenceable(56) %100, ptr noundef nonnull align 8 dereferenceable(56) %102)
          to label %104 unwind label %131

104:                                              ; preds = %103
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  %105 = invoke noundef ptr @_ZN6Halide8Internal12as_const_intERKNS_4ExprE(ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %106 unwind label %133

106:                                              ; preds = %104
  %107 = invoke noundef ptr @_ZN6Halide8Internal12as_const_intERKNS_4ExprE(ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %108 unwind label %135

108:                                              ; preds = %106
  %109 = icmp eq ptr %105, null
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %14) #8
  %110 = icmp eq ptr %107, null
  %or.cond.not = or i1 %109, %110
  br i1 %or.cond.not, label %111, label %.critedge69

111:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 384, ptr nonnull %15) #8
  invoke void @_ZN6Halide8Internal11ErrorReportC1EPKciS3_i(ptr noundef nonnull align 8 dereferenceable(380) %15, ptr noundef nonnull @.str.14, i32 noundef 443, ptr noundef nonnull @.str.22, i32 noundef 0)
          to label %112 unwind label %137

112:                                              ; preds = %111
  %113 = call noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReport3refEv(ptr noundef nonnull align 8 dereferenceable(380) %15)
  %114 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsINS_4ExprEEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %113, ptr noundef nonnull align 8 dereferenceable(8) %10)
          to label %115 unwind label %139

115:                                              ; preds = %112
  %116 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA3_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %114, ptr noundef nonnull align 1 dereferenceable(3) @.str.13)
          to label %117 unwind label %139

117:                                              ; preds = %115
  %118 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsINS_4ExprEEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %116, ptr noundef nonnull align 8 dereferenceable(8) %12)
          to label %119 unwind label %139

119:                                              ; preds = %117
  %120 = invoke noundef nonnull align 8 dereferenceable(380) ptr @_ZN6Halide8Internal11ErrorReportlsIA2_cEERS1_RKT_(ptr noundef nonnull align 8 dereferenceable(380) %118, ptr noundef nonnull align 1 dereferenceable(2) @.str.8)
          to label %121 unwind label %139

121:                                              ; preds = %119
  call void @_ZN6Halide8Internal9VoidifieranERNS0_11ErrorReportE(ptr noundef nonnull align 1 dereferenceable(1) %14, ptr noundef nonnull align 8 dereferenceable(380) %120)
  invoke void @_ZN6Halide8Internal11ErrorReportD1Ev(ptr noundef nonnull align 8 dereferenceable(380) %15)
          to label %.critedge unwind label %137

.critedge:                                        ; preds = %121
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %15) #8
  br label %.critedge69

.critedge69:                                      ; preds = %108, %.critedge
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %16) #8
  %122 = load i64, ptr %105, align 8, !tbaa !54
  %123 = load i64, ptr %107, align 8, !tbaa !54
  call void @_ZN6Halide8Internal13Autoscheduler4SpanC2Ellb(ptr noundef nonnull align 8 dereferenceable(17) %16, i64 noundef %122, i64 noundef %123, i1 noundef zeroext false)
  %124 = getelementptr inbounds %"class.Halide::Internal::Autoscheduler::Span", ptr %2, i64 %indvars.iv71
  call void @llvm.memcpy.p0.p0.i64(ptr noundef nonnull align 8 dereferenceable(17) %124, ptr noundef nonnull align 8 dereferenceable(17) %16, i64 17, i1 false), !tbaa.struct !53
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %16) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %145

125:                                              ; preds = %91
  %126 = landingpad { ptr, i32 }
          cleanup
  br label %144

127:                                              ; preds = %96, %94, %92
  %128 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %11) #8
  br label %144

129:                                              ; preds = %97
  %130 = landingpad { ptr, i32 }
          cleanup
  br label %143

131:                                              ; preds = %103, %101, %99
  %132 = landingpad { ptr, i32 }
          cleanup
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %13) #8
  br label %143

133:                                              ; preds = %104
  %134 = landingpad { ptr, i32 }
          cleanup
  br label %142

135:                                              ; preds = %106
  %136 = landingpad { ptr, i32 }
          cleanup
  br label %142

137:                                              ; preds = %121, %111
  %138 = landingpad { ptr, i32 }
          cleanup
  br label %141

139:                                              ; preds = %119, %117, %115, %112
  %140 = landingpad { ptr, i32 }
          cleanup
  invoke void @_ZN6Halide8Internal11ErrorReportD1Ev(ptr noundef nonnull align 8 dereferenceable(380) %15)
          to label %141 unwind label %147

141:                                              ; preds = %139, %137
  %.pn61 = phi { ptr, i32 } [ %138, %137 ], [ %140, %139 ]
  call void @llvm.lifetime.end.p0(i64 384, ptr nonnull %15) #8
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %14) #8
  br label %142

142:                                              ; preds = %135, %141, %133
  %.pn61.pn.pn = phi { ptr, i32 } [ %134, %133 ], [ %.pn61, %141 ], [ %136, %135 ]
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %12) #8
  br label %143

143:                                              ; preds = %142, %131, %129
  %.pn61.pn.pn.pn = phi { ptr, i32 } [ %.pn61.pn.pn, %142 ], [ %132, %131 ], [ %130, %129 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #8
  call void @_ZN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEED2Ev(ptr noundef nonnull align 8 dereferenceable(8) %10) #8
  br label %144

144:                                              ; preds = %143, %127, %125
  %.pn61.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn61.pn.pn.pn, %143 ], [ %128, %127 ], [ %126, %125 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #8
  br label %146

145:                                              ; preds = %80, %.critedge69, %73
  %indvars.iv.next72 = add nuw nsw i64 %indvars.iv71, 1
  br label %60, !llvm.loop !57

146:                                              ; preds = %66, %144, %27, %52, %57
  %.pn61.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn57, %57 ], [ %.pn, %52 ], [ %28, %27 ], [ %.pn61.pn.pn.pn.pn, %144 ], [ %67, %66 ]
  call void @_ZNSt3mapINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEN6Halide4ExprESt4lessIS5_ESaISt4pairIKS5_S7_EEED2Ev(ptr noundef nonnull align 8 dereferenceable(48) %4) #8
  call void @llvm.lifetime.end.p0(i64 48, ptr nonnull %4) #8
  resume { ptr, i32 } %.pn61.pn.pn.pn.pn.pn.pn

147:                                              ; preds = %139
  %148 = landingpad { ptr, i32 }
          catch ptr null
  %149 = extractvalue { ptr, i32 } %148, 0
  call void @__clang_call_terminate(ptr %149) #9
  unreachable
}

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

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3minIlERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

; Function Attrs: inlinehint mustprogress nounwind uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZSt3maxIlERKT_S2_S2_(ptr noundef nonnull align 8 dereferenceable(8), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #7

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { "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 = { noinline noreturn nounwind uwtable "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 = { alwaysinline 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 = { 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 = { 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 #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, !27, i64 112}
!6 = !{!"_ZTSN6Halide8Internal13Autoscheduler11FunctionDAG4NodeE", !7, i64 0, !10, i64 8, !14, i64 32, !15, i64 40, !19, i64 64, !23, i64 88, !27, i64 112, !28, i64 120, !32, i64 144, !13, i64 168, !13, i64 172, !13, i64 176, !13, i64 180, !27, i64 184, !27, i64 185, !27, i64 186, !27, i64 187, !27, i64 188, !36, i64 192}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"_ZTSN6Halide8Internal8FunctionE", !11, i64 0}
!11 = !{!"_ZTSN6Halide8Internal11FunctionPtrE", !12, i64 0, !7, i64 8, !13, i64 16}
!12 = !{!"_ZTSN6Halide8Internal12IntrusivePtrINS0_13FunctionGroupEEE", !7, i64 0}
!13 = !{!"int", !8, i64 0}
!14 = !{!"double", !8, i64 0}
!15 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE", !16, i64 0}
!16 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE12_Vector_implE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG16SymbolicIntervalESaIS4_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!19 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE", !20, i64 0}
!20 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE", !21, i64 0}
!21 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE12_Vector_implE", !22, i64 0}
!22 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler4SpanESaIS3_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!23 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE", !24, i64 0}
!24 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE", !25, i64 0}
!25 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE12_Vector_implE", !26, i64 0}
!26 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoESaIS5_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!27 = !{!"bool", !8, i64 0}
!28 = !{!"_ZTSSt6vectorIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE", !29, i64 0}
!29 = !{!"_ZTSSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE", !30, i64 0}
!30 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE12_Vector_implE", !31, i64 0}
!31 = !{!"_ZTSNSt12_Vector_baseIN6Halide8Internal13Autoscheduler11FunctionDAG4Node5StageESaIS5_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!32 = !{!"_ZTSSt6vectorIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE", !33, i64 0}
!33 = !{!"_ZTSSt12_Vector_baseIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE", !34, i64 0}
!34 = !{!"_ZTSNSt12_Vector_baseIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE12_Vector_implE", !35, i64 0}
!35 = !{!"_ZTSNSt12_Vector_baseIPN6Halide8Internal13Autoscheduler11FunctionDAG4EdgeESaIS5_EE17_Vector_impl_dataE", !7, i64 0, !7, i64 8, !7, i64 16}
!36 = !{!"_ZTSSt10unique_ptrIN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EE", !37, i64 0}
!37 = !{!"_ZTSSt15__uniq_ptr_dataIN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_ELb1ELb1EE", !38, i64 0}
!38 = !{!"_ZTSSt15__uniq_ptr_implIN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EE", !39, i64 0}
!39 = !{!"_ZTSSt5tupleIJPN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EEE", !40, i64 0}
!40 = !{!"_ZTSSt11_Tuple_implILm0EJPN6Halide8Internal13Autoscheduler13BoundContents6LayoutESt14default_deleteIS4_EEE", !41, i64 0}
!41 = !{!"_ZTSSt10_Head_baseILm0EPN6Halide8Internal13Autoscheduler13BoundContents6LayoutELb0EE", !7, i64 0}
!42 = !{i8 0, i8 2}
!43 = !{}
!44 = distinct !{!44, !45}
!45 = !{!"llvm.loop.mustprogress"}
!46 = !{!47, !27, i64 16}
!47 = !{!"_ZTSN6Halide8Internal13Autoscheduler11FunctionDAG4Node18RegionComputedInfoE", !48, i64 0, !27, i64 16, !27, i64 17, !52, i64 24, !52, i64 32}
!48 = !{!"_ZTSN6Halide8Internal8IntervalE", !49, i64 0, !49, i64 8}
!49 = !{!"_ZTSN6Halide4ExprE", !50, i64 0}
!50 = !{!"_ZTSN6Halide8Internal8IRHandleE", !51, i64 0}
!51 = !{!"_ZTSN6Halide8Internal12IntrusivePtrIKNS0_6IRNodeEEE", !7, i64 0}
!52 = !{!"long", !8, i64 0}
!53 = !{i64 0, i64 8, !54, i64 8, i64 8, !54, i64 16, i64 1, !55}
!54 = !{!52, !52, i64 0}
!55 = !{!27, !27, i64 0}
!56 = !{!47, !27, i64 17}
!57 = distinct !{!57, !45}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass