; LLVM IR from ggml-org/ggml :: examples/mnist (mnist-common)

; 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.mnist_model = type { %"class.std::__cxx11::basic_string", ptr, %"class.std::vector", i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.0 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl" }
%"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::random_device" = type { %union.anon.4 }
%union.anon.4 = type { %"class.std::mersenne_twister_engine" }
%"class.std::mersenne_twister_engine" = type { [624 x i64], i64 }
%"class.std::normal_distribution" = type <{ %"struct.std::normal_distribution<float>::param_type", float, i8, [3 x i8] }>
%"struct.std::normal_distribution<float>::param_type" = type { float, float }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl" }
%"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.12" = type { i8 }
%struct.ggml_tensor = type { i32, ptr, [4 x i64], [4 x i64], i32, [16 x i32], i32, [10 x ptr], ptr, i64, ptr, [64 x i8], ptr, [8 x i8] }

@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [61 x i8], align 1
@__func__._Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii = external hidden unnamed_addr constant [24 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [25 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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nounwind
declare i32 @fprintf(ptr noundef, ptr noundef, ...) #1

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

; Function Attrs: noreturn
declare void @ggml_abort(ptr noundef, i32 noundef, ptr noundef, ...) #3

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

declare i64 @ggml_nbytes(ptr noundef) #4

declare void @ggml_backend_tensor_set(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #4

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

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

declare ptr @ggml_backend_alloc_ctx_tensors(ptr noundef, ptr noundef) #4

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

declare ptr @ggml_new_tensor_2d(ptr noundef, i32 noundef, i64 noundef, i64 noundef) #4

declare ptr @ggml_set_name(ptr noundef, ptr noundef) #4

declare void @ggml_set_input(ptr noundef) #4

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii(ptr dead_on_unwind noalias writable sret(%struct.mnist_model) align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %3, i32 noundef %4) #5 personality ptr @__gxx_personality_v0 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i1, align 1
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca %"class.std::random_device", align 8
  %15 = alloca %"class.std::mersenne_twister_engine", align 8
  %16 = alloca %"class.std::normal_distribution", align 4
  %17 = alloca %"class.std::vector.5", align 8
  %18 = alloca ptr, align 8
  %19 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %20 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %21 = alloca i32, align 4
  %22 = alloca ptr, align 8
  %23 = alloca i64, align 8
  %24 = alloca %"class.std::vector.10", align 8
  %25 = alloca %"class.std::allocator.12", align 1
  %26 = alloca i64, align 8
  store ptr %0, ptr %6, align 8
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store i32 %3, ptr %9, align 4, !tbaa !9
  store i32 %4, ptr %10, align 4, !tbaa !9
  store i1 false, ptr %11, align 1
  %27 = load ptr, ptr %8, align 8, !tbaa !5
  %28 = load i32, ptr %9, align 4, !tbaa !9
  %29 = load i32, ptr %10, align 4, !tbaa !9
  call void @_ZN11mnist_modelC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef nonnull align 8 dereferenceable(32) %27, i32 noundef %28, i32 noundef %29)
  %30 = load ptr, ptr %7, align 8, !tbaa !5
  %31 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 0
  %32 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %31, ptr noundef nonnull align 8 dereferenceable(32) %30)
          to label %33 unwind label %90

33:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 5000, ptr %14) #7
  invoke void @_ZNSt13random_deviceC2Ev(ptr noundef nonnull align 8 dereferenceable(5000) %14)
          to label %34 unwind label %94

34:                                               ; preds = %33
  call void @llvm.lifetime.start.p0(i64 5000, ptr %15) #7
  %35 = invoke noundef i32 @_ZNSt13random_deviceclEv(ptr noundef nonnull align 8 dereferenceable(5000) %14)
          to label %36 unwind label %98

36:                                               ; preds = %34
  %37 = zext i32 %35 to i64
  invoke void @_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Em(ptr noundef nonnull align 8 dereferenceable(5000) %15, i64 noundef %37)
          to label %38 unwind label %98

38:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 16, ptr %16) #7
  invoke void @_ZNSt19normal_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(13) %16, float noundef 0.000000e+00, float noundef 0x3F847AE140000000)
          to label %39 unwind label %102

39:                                               ; preds = %38
  call void @llvm.lifetime.start.p0(i64 24, ptr %17) #7
  call void @_ZNSt6vectorIP11ggml_tensorSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  %40 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 0
  %41 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %40, ptr noundef @.str.14)
          to label %42 unwind label %106

42:                                               ; preds = %39
  br i1 %41, label %43, label %110

43:                                               ; preds = %42
  %44 = load ptr, ptr @stderr, align 8, !tbaa !5
  %45 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef @.str.76, ptr noundef @__func__._Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii) #7
  %46 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %47 = load ptr, ptr %46, align 8, !tbaa !11
  %48 = invoke ptr @ggml_new_tensor_2d(ptr noundef %47, i32 noundef 0, i64 noundef 784, i64 noundef 500)
          to label %49 unwind label %106

49:                                               ; preds = %43
  %50 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 7
  store ptr %48, ptr %50, align 8, !tbaa !20
  %51 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %52 = load ptr, ptr %51, align 8, !tbaa !11
  %53 = invoke ptr @ggml_new_tensor_1d(ptr noundef %52, i32 noundef 0, i64 noundef 500)
          to label %54 unwind label %106

54:                                               ; preds = %49
  %55 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 8
  store ptr %53, ptr %55, align 8, !tbaa !21
  %56 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %57 = load ptr, ptr %56, align 8, !tbaa !11
  %58 = invoke ptr @ggml_new_tensor_2d(ptr noundef %57, i32 noundef 0, i64 noundef 500, i64 noundef 10)
          to label %59 unwind label %106

59:                                               ; preds = %54
  %60 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 9
  store ptr %58, ptr %60, align 8, !tbaa !22
  %61 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %62 = load ptr, ptr %61, align 8, !tbaa !11
  %63 = invoke ptr @ggml_new_tensor_1d(ptr noundef %62, i32 noundef 0, i64 noundef 10)
          to label %64 unwind label %106

64:                                               ; preds = %59
  %65 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 10
  store ptr %63, ptr %65, align 8, !tbaa !23
  %66 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 7
  %67 = load ptr, ptr %66, align 8, !tbaa !20
  %68 = invoke ptr @ggml_set_name(ptr noundef %67, ptr noundef @.str.15)
          to label %69 unwind label %106

69:                                               ; preds = %64
  %70 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 8
  %71 = load ptr, ptr %70, align 8, !tbaa !21
  %72 = invoke ptr @ggml_set_name(ptr noundef %71, ptr noundef @.str.20)
          to label %73 unwind label %106

73:                                               ; preds = %69
  %74 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 9
  %75 = load ptr, ptr %74, align 8, !tbaa !22
  %76 = invoke ptr @ggml_set_name(ptr noundef %75, ptr noundef @.str.25)
          to label %77 unwind label %106

77:                                               ; preds = %73
  %78 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 10
  %79 = load ptr, ptr %78, align 8, !tbaa !23
  %80 = invoke ptr @ggml_set_name(ptr noundef %79, ptr noundef @.str.30)
          to label %81 unwind label %106

81:                                               ; preds = %77
  %82 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 7
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %83 unwind label %106

83:                                               ; preds = %81
  %84 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 8
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %84)
          to label %85 unwind label %106

85:                                               ; preds = %83
  %86 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 9
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %87 unwind label %106

87:                                               ; preds = %85
  %88 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 10
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %88)
          to label %89 unwind label %106

89:                                               ; preds = %87
  br label %187

90:                                               ; preds = %5
  %91 = landingpad { ptr, i32 }
          cleanup
  %92 = extractvalue { ptr, i32 } %91, 0
  store ptr %92, ptr %12, align 8
  %93 = extractvalue { ptr, i32 } %91, 1
  store i32 %93, ptr %13, align 4
  br label %286

94:                                               ; preds = %33
  %95 = landingpad { ptr, i32 }
          cleanup
  %96 = extractvalue { ptr, i32 } %95, 0
  store ptr %96, ptr %12, align 8
  %97 = extractvalue { ptr, i32 } %95, 1
  store i32 %97, ptr %13, align 4
  br label %283

98:                                               ; preds = %36, %34
  %99 = landingpad { ptr, i32 }
          cleanup
  %100 = extractvalue { ptr, i32 } %99, 0
  store ptr %100, ptr %12, align 8
  %101 = extractvalue { ptr, i32 } %99, 1
  store i32 %101, ptr %13, align 4
  br label %282

102:                                              ; preds = %38
  %103 = landingpad { ptr, i32 }
          cleanup
  %104 = extractvalue { ptr, i32 } %103, 0
  store ptr %104, ptr %12, align 8
  %105 = extractvalue { ptr, i32 } %103, 1
  store i32 %105, ptr %13, align 4
  br label %281

106:                                              ; preds = %199, %196, %191, %187, %178, %176, %174, %172, %170, %168, %164, %160, %156, %152, %148, %143, %138, %133, %128, %123, %118, %114, %110, %87, %85, %83, %81, %77, %73, %69, %64, %59, %54, %49, %43, %39
  %107 = landingpad { ptr, i32 }
          cleanup
  %108 = extractvalue { ptr, i32 } %107, 0
  store ptr %108, ptr %12, align 8
  %109 = extractvalue { ptr, i32 } %107, 1
  store i32 %109, ptr %13, align 4
  br label %280

110:                                              ; preds = %42
  %111 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 0
  %112 = invoke noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %111, ptr noundef @.str.35)
          to label %113 unwind label %106

113:                                              ; preds = %110
  br i1 %112, label %114, label %181

114:                                              ; preds = %113
  %115 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %116 = load ptr, ptr %115, align 8, !tbaa !11
  %117 = invoke ptr @ggml_new_tensor_4d(ptr noundef %116, i32 noundef 0, i64 noundef 3, i64 noundef 3, i64 noundef 1, i64 noundef 8)
          to label %118 unwind label %106

118:                                              ; preds = %114
  %119 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 11
  store ptr %117, ptr %119, align 8, !tbaa !24
  %120 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %121 = load ptr, ptr %120, align 8, !tbaa !11
  %122 = invoke ptr @ggml_new_tensor_3d(ptr noundef %121, i32 noundef 0, i64 noundef 1, i64 noundef 1, i64 noundef 8)
          to label %123 unwind label %106

123:                                              ; preds = %118
  %124 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 12
  store ptr %122, ptr %124, align 8, !tbaa !25
  %125 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %126 = load ptr, ptr %125, align 8, !tbaa !11
  %127 = invoke ptr @ggml_new_tensor_4d(ptr noundef %126, i32 noundef 0, i64 noundef 3, i64 noundef 3, i64 noundef 8, i64 noundef 16)
          to label %128 unwind label %106

128:                                              ; preds = %123
  %129 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 13
  store ptr %127, ptr %129, align 8, !tbaa !26
  %130 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %131 = load ptr, ptr %130, align 8, !tbaa !11
  %132 = invoke ptr @ggml_new_tensor_3d(ptr noundef %131, i32 noundef 0, i64 noundef 1, i64 noundef 1, i64 noundef 16)
          to label %133 unwind label %106

133:                                              ; preds = %128
  %134 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 14
  store ptr %132, ptr %134, align 8, !tbaa !27
  %135 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %136 = load ptr, ptr %135, align 8, !tbaa !11
  %137 = invoke ptr @ggml_new_tensor_2d(ptr noundef %136, i32 noundef 0, i64 noundef 784, i64 noundef 10)
          to label %138 unwind label %106

138:                                              ; preds = %133
  %139 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 15
  store ptr %137, ptr %139, align 8, !tbaa !28
  %140 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %141 = load ptr, ptr %140, align 8, !tbaa !11
  %142 = invoke ptr @ggml_new_tensor_1d(ptr noundef %141, i32 noundef 0, i64 noundef 10)
          to label %143 unwind label %106

143:                                              ; preds = %138
  %144 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 16
  store ptr %142, ptr %144, align 8, !tbaa !29
  %145 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 11
  %146 = load ptr, ptr %145, align 8, !tbaa !24
  %147 = invoke ptr @ggml_set_name(ptr noundef %146, ptr noundef @.str.36)
          to label %148 unwind label %106

148:                                              ; preds = %143
  %149 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 12
  %150 = load ptr, ptr %149, align 8, !tbaa !25
  %151 = invoke ptr @ggml_set_name(ptr noundef %150, ptr noundef @.str.42)
          to label %152 unwind label %106

152:                                              ; preds = %148
  %153 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 13
  %154 = load ptr, ptr %153, align 8, !tbaa !26
  %155 = invoke ptr @ggml_set_name(ptr noundef %154, ptr noundef @.str.48)
          to label %156 unwind label %106

156:                                              ; preds = %152
  %157 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 14
  %158 = load ptr, ptr %157, align 8, !tbaa !27
  %159 = invoke ptr @ggml_set_name(ptr noundef %158, ptr noundef @.str.54)
          to label %160 unwind label %106

160:                                              ; preds = %156
  %161 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 15
  %162 = load ptr, ptr %161, align 8, !tbaa !28
  %163 = invoke ptr @ggml_set_name(ptr noundef %162, ptr noundef @.str.60)
          to label %164 unwind label %106

164:                                              ; preds = %160
  %165 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 16
  %166 = load ptr, ptr %165, align 8, !tbaa !29
  %167 = invoke ptr @ggml_set_name(ptr noundef %166, ptr noundef @.str.66)
          to label %168 unwind label %106

168:                                              ; preds = %164
  %169 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 11
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %169)
          to label %170 unwind label %106

170:                                              ; preds = %168
  %171 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 12
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %171)
          to label %172 unwind label %106

172:                                              ; preds = %170
  %173 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 13
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %173)
          to label %174 unwind label %106

174:                                              ; preds = %172
  %175 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 14
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %175)
          to label %176 unwind label %106

176:                                              ; preds = %174
  %177 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 15
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %177)
          to label %178 unwind label %106

178:                                              ; preds = %176
  %179 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 16
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %17, ptr noundef nonnull align 8 dereferenceable(8) %179)
          to label %180 unwind label %106

180:                                              ; preds = %178
  br label %186

181:                                              ; preds = %113
  %182 = load ptr, ptr @stderr, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 0
  %184 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %183) #7
  %185 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %182, ptr noundef @.str.72, ptr noundef @__func__._Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii, ptr noundef %184) #7
  br label %186

186:                                              ; preds = %181, %180
  br label %187

187:                                              ; preds = %186, %89
  %188 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %189 = load ptr, ptr %188, align 8, !tbaa !11
  %190 = invoke ptr @ggml_new_tensor_2d(ptr noundef %189, i32 noundef 0, i64 noundef 784, i64 noundef 500)
          to label %191 unwind label %106

191:                                              ; preds = %187
  %192 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 5
  store ptr %190, ptr %192, align 8, !tbaa !30
  %193 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 5
  %194 = load ptr, ptr %193, align 8, !tbaa !30
  %195 = invoke ptr @ggml_set_name(ptr noundef %194, ptr noundef @.str.74)
          to label %196 unwind label %106

196:                                              ; preds = %191
  %197 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 5
  %198 = load ptr, ptr %197, align 8, !tbaa !30
  invoke void @ggml_set_input(ptr noundef %198)
          to label %199 unwind label %106

199:                                              ; preds = %196
  %200 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 18
  %201 = load ptr, ptr %200, align 8, !tbaa !11
  %202 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 2
  %203 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ggml_backendSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %202, i64 noundef 0) #7
  %204 = load ptr, ptr %203, align 8, !tbaa !5
  %205 = invoke ptr @ggml_backend_alloc_ctx_tensors(ptr noundef %201, ptr noundef %204)
          to label %206 unwind label %106

206:                                              ; preds = %199
  %207 = getelementptr inbounds %struct.mnist_model, ptr %0, i32 0, i32 21
  store ptr %205, ptr %207, align 8, !tbaa !31
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #7
  store ptr %17, ptr %18, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #7
  %208 = load ptr, ptr %18, align 8, !tbaa !5
  %209 = call ptr @_ZNSt6vectorIP11ggml_tensorSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %208) #7
  %210 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %19, i32 0, i32 0
  store ptr %209, ptr %210, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  %211 = load ptr, ptr %18, align 8, !tbaa !5
  %212 = call ptr @_ZNSt6vectorIP11ggml_tensorSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %211) #7
  %213 = getelementptr inbounds %"class.__gnu_cxx::__normal_iterator", ptr %20, i32 0, i32 0
  store ptr %212, ptr %213, align 8
  br label %214

214:                                              ; preds = %268, %206
  %215 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %19, ptr noundef nonnull align 8 dereferenceable(8) %20) #7
  br i1 %215, label %217, label %216

216:                                              ; preds = %214
  store i32 2, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %278

217:                                              ; preds = %214
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  %218 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  %219 = load ptr, ptr %218, align 8, !tbaa !5
  store ptr %219, ptr %22, align 8, !tbaa !5
  %220 = load ptr, ptr %22, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.ggml_tensor, ptr %220, i32 0, i32 0
  %222 = load i32, ptr %221, align 8, !tbaa !32
  %223 = icmp eq i32 %222, 0
  br i1 %223, label %230, label %224

224:                                              ; preds = %217
  invoke void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 298, ptr noundef @.str.2, ptr noundef @.str.77) #8
          to label %225 unwind label %226

225:                                              ; preds = %224
  unreachable

226:                                              ; preds = %224
  %227 = landingpad { ptr, i32 }
          cleanup
  %228 = extractvalue { ptr, i32 } %227, 0
  store ptr %228, ptr %12, align 8
  %229 = extractvalue { ptr, i32 } %227, 1
  store i32 %229, ptr %13, align 4
  br label %277

230:                                              ; preds = %217
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  %231 = load ptr, ptr %22, align 8, !tbaa !5
  %232 = invoke i64 @ggml_nelements(ptr noundef %231)
          to label %233 unwind label %241

233:                                              ; preds = %230
  store i64 %232, ptr %23, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 24, ptr %24) #7
  %234 = load i64, ptr %23, align 8, !tbaa !36
  call void @llvm.lifetime.start.p0(i64 1, ptr %25) #7
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %234, ptr noundef nonnull align 1 dereferenceable(1) %25)
          to label %235 unwind label %245

235:                                              ; preds = %233
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #7
  store i64 0, ptr %26, align 8, !tbaa !36
  br label %236

236:                                              ; preds = %254, %235
  %237 = load i64, ptr %26, align 8, !tbaa !36
  %238 = load i64, ptr %23, align 8, !tbaa !36
  %239 = icmp slt i64 %237, %238
  br i1 %239, label %249, label %240

240:                                              ; preds = %236
  store i32 4, ptr %21, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %261

241:                                              ; preds = %230
  %242 = landingpad { ptr, i32 }
          cleanup
  %243 = extractvalue { ptr, i32 } %242, 0
  store ptr %243, ptr %12, align 8
  %244 = extractvalue { ptr, i32 } %242, 1
  store i32 %244, ptr %13, align 4
  br label %276

245:                                              ; preds = %233
  %246 = landingpad { ptr, i32 }
          cleanup
  %247 = extractvalue { ptr, i32 } %246, 0
  store ptr %247, ptr %12, align 8
  %248 = extractvalue { ptr, i32 } %246, 1
  store i32 %248, ptr %13, align 4
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %25) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr %25) #7
  br label %275

249:                                              ; preds = %236
  %250 = invoke noundef float @_ZNSt19normal_distributionIfEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(13) %16, ptr noundef nonnull align 8 dereferenceable(5000) %15)
          to label %251 unwind label %257

251:                                              ; preds = %249
  %252 = load i64, ptr %26, align 8, !tbaa !36
  %253 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %24, i64 noundef %252) #7
  store float %250, ptr %253, align 4, !tbaa !37
  br label %254

254:                                              ; preds = %251
  %255 = load i64, ptr %26, align 8, !tbaa !36
  %256 = add nsw i64 %255, 1
  store i64 %256, ptr %26, align 8, !tbaa !36
  br label %236, !llvm.loop !39

257:                                              ; preds = %249
  %258 = landingpad { ptr, i32 }
          cleanup
  %259 = extractvalue { ptr, i32 } %258, 0
  store ptr %259, ptr %12, align 8
  %260 = extractvalue { ptr, i32 } %258, 1
  store i32 %260, ptr %13, align 4
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #7
  br label %274

261:                                              ; preds = %240
  %262 = load ptr, ptr %22, align 8, !tbaa !5
  %263 = call noundef ptr @_ZNSt6vectorIfSaIfEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  %264 = load ptr, ptr %22, align 8, !tbaa !5
  %265 = invoke i64 @ggml_nbytes(ptr noundef %264)
          to label %266 unwind label %270

266:                                              ; preds = %261
  invoke void @ggml_backend_tensor_set(ptr noundef %262, ptr noundef %263, i64 noundef 0, i64 noundef %265)
          to label %267 unwind label %270

267:                                              ; preds = %266
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  br label %268

268:                                              ; preds = %267
  %269 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %19) #7
  br label %214

270:                                              ; preds = %266, %261
  %271 = landingpad { ptr, i32 }
          cleanup
  %272 = extractvalue { ptr, i32 } %271, 0
  store ptr %272, ptr %12, align 8
  %273 = extractvalue { ptr, i32 } %271, 1
  store i32 %273, ptr %13, align 4
  br label %274

274:                                              ; preds = %270, %257
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %24) #7
  br label %275

275:                                              ; preds = %274, %245
  call void @llvm.lifetime.end.p0(i64 24, ptr %24) #7
  br label %276

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

277:                                              ; preds = %276, %226
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #7
  br label %280

278:                                              ; preds = %216
  store i1 true, ptr %11, align 1
  store i32 1, ptr %21, align 4
  call void @_ZNSt6vectorIP11ggml_tensorSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 5000, ptr %15) #7
  call void @_ZNSt13random_deviceD2Ev(ptr noundef nonnull align 8 dereferenceable(5000) %14) #7
  call void @llvm.lifetime.end.p0(i64 5000, ptr %14) #7
  %279 = load i1, ptr %11, align 1
  br i1 %279, label %285, label %284

280:                                              ; preds = %277, %106
  call void @_ZNSt6vectorIP11ggml_tensorSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %17) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr %17) #7
  br label %281

281:                                              ; preds = %280, %102
  call void @llvm.lifetime.end.p0(i64 16, ptr %16) #7
  br label %282

282:                                              ; preds = %281, %98
  call void @llvm.lifetime.end.p0(i64 5000, ptr %15) #7
  call void @_ZNSt13random_deviceD2Ev(ptr noundef nonnull align 8 dereferenceable(5000) %14) #7
  br label %283

283:                                              ; preds = %282, %94
  call void @llvm.lifetime.end.p0(i64 5000, ptr %14) #7
  br label %286

284:                                              ; preds = %278
  call void @_ZN11mnist_modelD2Ev(ptr noundef nonnull align 8 dereferenceable(208) %0) #7
  br label %285

285:                                              ; preds = %284, %278
  ret void

286:                                              ; preds = %283, %90
  call void @_ZN11mnist_modelD2Ev(ptr noundef nonnull align 8 dereferenceable(208) %0) #7
  br label %287

287:                                              ; preds = %286
  %288 = load ptr, ptr %12, align 8
  %289 = load i32, ptr %13, align 4
  %290 = insertvalue { ptr, i32 } poison, ptr %288, 0
  %291 = insertvalue { ptr, i32 } %290, i32 %289, 1
  resume { ptr, i32 } %291
}

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNSt13random_deviceclEv(ptr noundef nonnull align 8 dereferenceable(5000)) #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Em(ptr noundef nonnull align 8 dereferenceable(5000), i64 noundef) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt19normal_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(13), float noundef, float noundef) unnamed_addr #5 align 2

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

declare ptr @ggml_new_tensor_1d(ptr noundef, i32 noundef, i64 noundef) #4

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

declare ptr @ggml_new_tensor_4d(ptr noundef, i32 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) #4

declare ptr @ggml_new_tensor_3d(ptr noundef, i32 noundef, i64 noundef, i64 noundef, i64 noundef) #4

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

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

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

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

declare i64 @ggml_nelements(ptr noundef) #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNSt19normal_distributionIfEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(13), ptr noundef nonnull align 8 dereferenceable(5000)) #5 align 2

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

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

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

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

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

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

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

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { noreturn "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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress 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 #7 = { nounwind }
attributes #8 = { noreturn }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !6, i64 176}
!12 = !{!"_ZTS11mnist_model", !13, i64 0, !6, i64 32, !16, i64 40, !10, i64 64, !10, i64 68, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200}
!13 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !14, i64 0, !15, i64 8, !7, i64 16}
!14 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!15 = !{!"long", !7, i64 0}
!16 = !{!"_ZTSSt6vectorIP12ggml_backendSaIS1_EE", !17, i64 0}
!17 = !{!"_ZTSSt12_Vector_baseIP12ggml_backendSaIS1_EE", !18, i64 0}
!18 = !{!"_ZTSNSt12_Vector_baseIP12ggml_backendSaIS1_EE12_Vector_implE", !19, i64 0}
!19 = !{!"_ZTSNSt12_Vector_baseIP12ggml_backendSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!20 = !{!12, !6, i64 88}
!21 = !{!12, !6, i64 96}
!22 = !{!12, !6, i64 104}
!23 = !{!12, !6, i64 112}
!24 = !{!12, !6, i64 120}
!25 = !{!12, !6, i64 128}
!26 = !{!12, !6, i64 136}
!27 = !{!12, !6, i64 144}
!28 = !{!12, !6, i64 152}
!29 = !{!12, !6, i64 160}
!30 = !{!12, !6, i64 72}
!31 = !{!12, !6, i64 200}
!32 = !{!33, !34, i64 0}
!33 = !{!"_ZTS11ggml_tensor", !34, i64 0, !6, i64 8, !7, i64 16, !7, i64 48, !35, i64 80, !7, i64 84, !10, i64 148, !7, i64 152, !6, i64 232, !15, i64 240, !6, i64 248, !7, i64 256, !6, i64 320, !7, i64 328}
!34 = !{!"_ZTS9ggml_type", !7, i64 0}
!35 = !{!"_ZTS7ggml_op", !7, i64 0}
!36 = !{!15, !15, i64 0}
!37 = !{!38, !38, i64 0}
!38 = !{!"float", !7, i64 0}
!39 = distinct !{!39, !40}
!40 = !{!"llvm.loop.mustprogress"}


; 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.mnist_model = type { %"class.std::__cxx11::basic_string", ptr, %"class.std::vector", i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%"class.std::__cxx11::basic_string" = type { %"struct.std::__cxx11::basic_string<char>::_Alloc_hider", i64, %union.anon.0 }
%"struct.std::__cxx11::basic_string<char>::_Alloc_hider" = type { ptr }
%union.anon.0 = type { i64, [8 x i8] }
%"class.std::vector" = type { %"struct.std::_Vector_base" }
%"struct.std::_Vector_base" = type { %"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl" }
%"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ggml_backend *, std::allocator<ggml_backend *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::random_device" = type { %union.anon.4 }
%union.anon.4 = type { %"class.std::mersenne_twister_engine" }
%"class.std::mersenne_twister_engine" = type { [624 x i64], i64 }
%"class.std::normal_distribution" = type <{ %"struct.std::normal_distribution<float>::param_type", float, i8, [3 x i8] }>
%"struct.std::normal_distribution<float>::param_type" = type { float, float }
%"class.std::vector.5" = type { %"struct.std::_Vector_base.6" }
%"struct.std::_Vector_base.6" = type { %"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl" }
%"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl" = type { %"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl_data" }
%"struct.std::_Vector_base<ggml_tensor *, std::allocator<ggml_tensor *>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.__gnu_cxx::__normal_iterator" = type { ptr }
%"class.std::vector.10" = type { %"struct.std::_Vector_base.11" }
%"struct.std::_Vector_base.11" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl" = type { %"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" }
%"struct.std::_Vector_base<float, std::allocator<float>>::_Vector_impl_data" = type { ptr, ptr, ptr }
%"class.std::allocator.12" = type { i8 }

@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [79 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.35 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.36 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.42 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.48 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.54 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.60 = external hidden unnamed_addr constant [13 x i8], align 1
@.str.66 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.72 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.74 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.76 = external hidden unnamed_addr constant [61 x i8], align 1
@__func__._Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii = external hidden unnamed_addr constant [24 x i8], align 1
@.str.77 = external hidden unnamed_addr constant [25 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

declare i32 @__gxx_personality_v0(...)

; Function Attrs: nofree nounwind
declare noundef i32 @fprintf(ptr nocapture noundef, ptr nocapture noundef readonly, ...) local_unnamed_addr #1

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

; Function Attrs: noreturn
declare void @ggml_abort(ptr noundef, i32 noundef, ptr noundef, ...) local_unnamed_addr #3

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

declare i64 @ggml_nbytes(ptr noundef) local_unnamed_addr #4

declare void @ggml_backend_tensor_set(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

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

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

declare ptr @ggml_backend_alloc_ctx_tensors(ptr noundef, ptr noundef) local_unnamed_addr #4

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

declare ptr @ggml_new_tensor_2d(ptr noundef, i32 noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

declare ptr @ggml_set_name(ptr noundef, ptr noundef) local_unnamed_addr #4

declare void @ggml_set_input(ptr noundef) local_unnamed_addr #4

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii(ptr dead_on_unwind noalias nonnull writable sret(%struct.mnist_model) align 8 %0, ptr noundef nonnull align 8 dereferenceable(32) %1, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %3, i32 noundef %4) local_unnamed_addr #5 personality ptr @__gxx_personality_v0 {
  %6 = alloca %"class.std::random_device", align 8
  %7 = alloca %"class.std::mersenne_twister_engine", align 8
  %8 = alloca %"class.std::normal_distribution", align 4
  %9 = alloca %"class.std::vector.5", align 8
  %10 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %11 = alloca %"class.__gnu_cxx::__normal_iterator", align 8
  %12 = alloca %"class.std::vector.10", align 8
  %13 = alloca %"class.std::allocator.12", align 1
  tail call void @_ZN11mnist_modelC2ERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEii(ptr noundef nonnull align 8 dereferenceable(208) %0, ptr noundef nonnull align 8 dereferenceable(32) %2, i32 noundef %3, i32 noundef %4)
  %14 = invoke noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull align 8 dereferenceable(32) %1)
          to label %15 unwind label %57

15:                                               ; preds = %5
  call void @llvm.lifetime.start.p0(i64 5000, ptr nonnull %6) #7
  invoke void @_ZNSt13random_deviceC2Ev(ptr noundef nonnull align 8 dereferenceable(5000) %6)
          to label %16 unwind label %59

16:                                               ; preds = %15
  call void @llvm.lifetime.start.p0(i64 5000, ptr nonnull %7) #7
  %17 = invoke noundef i32 @_ZNSt13random_deviceclEv(ptr noundef nonnull align 8 dereferenceable(5000) %6)
          to label %18 unwind label %61

18:                                               ; preds = %16
  %19 = zext i32 %17 to i64
  invoke void @_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Em(ptr noundef nonnull align 8 dereferenceable(5000) %7, i64 noundef %19)
          to label %20 unwind label %61

20:                                               ; preds = %18
  call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %8) #7
  invoke void @_ZNSt19normal_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(13) %8, float noundef 0.000000e+00, float noundef 0x3F847AE140000000)
          to label %21 unwind label %63

21:                                               ; preds = %20
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %9) #7
  call void @_ZNSt6vectorIP11ggml_tensorSaIS1_EEC2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  %22 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.14)
  br i1 %22, label %23, label %67

23:                                               ; preds = %21
  %24 = load ptr, ptr @stderr, align 8, !tbaa !5
  %25 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %24, ptr noundef nonnull @.str.76, ptr noundef nonnull @__func__._Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii) #8
  %26 = getelementptr inbounds i8, ptr %0, i64 176
  %27 = load ptr, ptr %26, align 8, !tbaa !9
  %28 = invoke ptr @ggml_new_tensor_2d(ptr noundef %27, i32 noundef 0, i64 noundef 784, i64 noundef 500)
          to label %29 unwind label %65

29:                                               ; preds = %23
  %30 = getelementptr inbounds i8, ptr %0, i64 88
  store ptr %28, ptr %30, align 8, !tbaa !19
  %31 = load ptr, ptr %26, align 8, !tbaa !9
  %32 = invoke ptr @ggml_new_tensor_1d(ptr noundef %31, i32 noundef 0, i64 noundef 500)
          to label %33 unwind label %65

33:                                               ; preds = %29
  %34 = getelementptr inbounds i8, ptr %0, i64 96
  store ptr %32, ptr %34, align 8, !tbaa !20
  %35 = load ptr, ptr %26, align 8, !tbaa !9
  %36 = invoke ptr @ggml_new_tensor_2d(ptr noundef %35, i32 noundef 0, i64 noundef 500, i64 noundef 10)
          to label %37 unwind label %65

37:                                               ; preds = %33
  %38 = getelementptr inbounds i8, ptr %0, i64 104
  store ptr %36, ptr %38, align 8, !tbaa !21
  %39 = load ptr, ptr %26, align 8, !tbaa !9
  %40 = invoke ptr @ggml_new_tensor_1d(ptr noundef %39, i32 noundef 0, i64 noundef 10)
          to label %41 unwind label %65

41:                                               ; preds = %37
  %42 = getelementptr inbounds i8, ptr %0, i64 112
  store ptr %40, ptr %42, align 8, !tbaa !22
  %43 = load ptr, ptr %30, align 8, !tbaa !19
  %44 = invoke ptr @ggml_set_name(ptr noundef %43, ptr noundef nonnull @.str.15)
          to label %45 unwind label %65

45:                                               ; preds = %41
  %46 = load ptr, ptr %34, align 8, !tbaa !20
  %47 = invoke ptr @ggml_set_name(ptr noundef %46, ptr noundef nonnull @.str.20)
          to label %48 unwind label %65

48:                                               ; preds = %45
  %49 = load ptr, ptr %38, align 8, !tbaa !21
  %50 = invoke ptr @ggml_set_name(ptr noundef %49, ptr noundef nonnull @.str.25)
          to label %51 unwind label %65

51:                                               ; preds = %48
  %52 = load ptr, ptr %42, align 8, !tbaa !22
  %53 = invoke ptr @ggml_set_name(ptr noundef %52, ptr noundef nonnull @.str.30)
          to label %54 unwind label %65

54:                                               ; preds = %51
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %30)
          to label %55 unwind label %65

55:                                               ; preds = %54
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %34)
          to label %56 unwind label %65

56:                                               ; preds = %55
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %38)
          to label %.invoke unwind label %65

57:                                               ; preds = %5
  %58 = landingpad { ptr, i32 }
          cleanup
  br label %180

59:                                               ; preds = %15
  %60 = landingpad { ptr, i32 }
          cleanup
  br label %179

61:                                               ; preds = %18, %16
  %62 = landingpad { ptr, i32 }
          cleanup
  br label %178

63:                                               ; preds = %20
  %64 = landingpad { ptr, i32 }
          cleanup
  br label %177

65:                                               ; preds = %.invoke, %131, %129, %126, %122, %116, %115, %114, %113, %112, %109, %106, %103, %100, %97, %93, %89, %85, %81, %77, %73, %69, %56, %55, %54, %51, %48, %45, %41, %37, %33, %29, %23
  %66 = landingpad { ptr, i32 }
          cleanup
  br label %176

67:                                               ; preds = %21
  %68 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %0, ptr noundef nonnull @.str.35)
  br i1 %68, label %69, label %118

69:                                               ; preds = %67
  %70 = getelementptr inbounds i8, ptr %0, i64 176
  %71 = load ptr, ptr %70, align 8, !tbaa !9
  %72 = invoke ptr @ggml_new_tensor_4d(ptr noundef %71, i32 noundef 0, i64 noundef 3, i64 noundef 3, i64 noundef 1, i64 noundef 8)
          to label %73 unwind label %65

73:                                               ; preds = %69
  %74 = getelementptr inbounds i8, ptr %0, i64 120
  store ptr %72, ptr %74, align 8, !tbaa !23
  %75 = load ptr, ptr %70, align 8, !tbaa !9
  %76 = invoke ptr @ggml_new_tensor_3d(ptr noundef %75, i32 noundef 0, i64 noundef 1, i64 noundef 1, i64 noundef 8)
          to label %77 unwind label %65

77:                                               ; preds = %73
  %78 = getelementptr inbounds i8, ptr %0, i64 128
  store ptr %76, ptr %78, align 8, !tbaa !24
  %79 = load ptr, ptr %70, align 8, !tbaa !9
  %80 = invoke ptr @ggml_new_tensor_4d(ptr noundef %79, i32 noundef 0, i64 noundef 3, i64 noundef 3, i64 noundef 8, i64 noundef 16)
          to label %81 unwind label %65

81:                                               ; preds = %77
  %82 = getelementptr inbounds i8, ptr %0, i64 136
  store ptr %80, ptr %82, align 8, !tbaa !25
  %83 = load ptr, ptr %70, align 8, !tbaa !9
  %84 = invoke ptr @ggml_new_tensor_3d(ptr noundef %83, i32 noundef 0, i64 noundef 1, i64 noundef 1, i64 noundef 16)
          to label %85 unwind label %65

85:                                               ; preds = %81
  %86 = getelementptr inbounds i8, ptr %0, i64 144
  store ptr %84, ptr %86, align 8, !tbaa !26
  %87 = load ptr, ptr %70, align 8, !tbaa !9
  %88 = invoke ptr @ggml_new_tensor_2d(ptr noundef %87, i32 noundef 0, i64 noundef 784, i64 noundef 10)
          to label %89 unwind label %65

89:                                               ; preds = %85
  %90 = getelementptr inbounds i8, ptr %0, i64 152
  store ptr %88, ptr %90, align 8, !tbaa !27
  %91 = load ptr, ptr %70, align 8, !tbaa !9
  %92 = invoke ptr @ggml_new_tensor_1d(ptr noundef %91, i32 noundef 0, i64 noundef 10)
          to label %93 unwind label %65

93:                                               ; preds = %89
  %94 = getelementptr inbounds i8, ptr %0, i64 160
  store ptr %92, ptr %94, align 8, !tbaa !28
  %95 = load ptr, ptr %74, align 8, !tbaa !23
  %96 = invoke ptr @ggml_set_name(ptr noundef %95, ptr noundef nonnull @.str.36)
          to label %97 unwind label %65

97:                                               ; preds = %93
  %98 = load ptr, ptr %78, align 8, !tbaa !24
  %99 = invoke ptr @ggml_set_name(ptr noundef %98, ptr noundef nonnull @.str.42)
          to label %100 unwind label %65

100:                                              ; preds = %97
  %101 = load ptr, ptr %82, align 8, !tbaa !25
  %102 = invoke ptr @ggml_set_name(ptr noundef %101, ptr noundef nonnull @.str.48)
          to label %103 unwind label %65

103:                                              ; preds = %100
  %104 = load ptr, ptr %86, align 8, !tbaa !26
  %105 = invoke ptr @ggml_set_name(ptr noundef %104, ptr noundef nonnull @.str.54)
          to label %106 unwind label %65

106:                                              ; preds = %103
  %107 = load ptr, ptr %90, align 8, !tbaa !27
  %108 = invoke ptr @ggml_set_name(ptr noundef %107, ptr noundef nonnull @.str.60)
          to label %109 unwind label %65

109:                                              ; preds = %106
  %110 = load ptr, ptr %94, align 8, !tbaa !28
  %111 = invoke ptr @ggml_set_name(ptr noundef %110, ptr noundef nonnull @.str.66)
          to label %112 unwind label %65

112:                                              ; preds = %109
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %74)
          to label %113 unwind label %65

113:                                              ; preds = %112
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %78)
          to label %114 unwind label %65

114:                                              ; preds = %113
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %82)
          to label %115 unwind label %65

115:                                              ; preds = %114
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %86)
          to label %116 unwind label %65

116:                                              ; preds = %115
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %90)
          to label %.invoke unwind label %65

.invoke:                                          ; preds = %56, %116
  %117 = phi ptr [ %94, %116 ], [ %42, %56 ]
  invoke void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24) %9, ptr noundef nonnull align 8 dereferenceable(8) %117)
          to label %122 unwind label %65

118:                                              ; preds = %67
  %119 = load ptr, ptr @stderr, align 8, !tbaa !5
  %120 = call noundef ptr @_ZNKSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE5c_strEv(ptr noundef nonnull align 8 dereferenceable(32) %0) #7
  %121 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %119, ptr noundef nonnull @.str.72, ptr noundef nonnull @__func__._Z23mnist_model_init_randomRKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES6_ii, ptr noundef %120) #8
  br label %122

122:                                              ; preds = %.invoke, %118
  %123 = getelementptr inbounds i8, ptr %0, i64 176
  %124 = load ptr, ptr %123, align 8, !tbaa !9
  %125 = invoke ptr @ggml_new_tensor_2d(ptr noundef %124, i32 noundef 0, i64 noundef 784, i64 noundef 500)
          to label %126 unwind label %65

126:                                              ; preds = %122
  %127 = getelementptr inbounds i8, ptr %0, i64 72
  store ptr %125, ptr %127, align 8, !tbaa !29
  %128 = invoke ptr @ggml_set_name(ptr noundef %125, ptr noundef nonnull @.str.74)
          to label %129 unwind label %65

129:                                              ; preds = %126
  %130 = load ptr, ptr %127, align 8, !tbaa !29
  invoke void @ggml_set_input(ptr noundef %130)
          to label %131 unwind label %65

131:                                              ; preds = %129
  %132 = load ptr, ptr %123, align 8, !tbaa !9
  %133 = getelementptr inbounds i8, ptr %0, i64 40
  %134 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNSt6vectorIP12ggml_backendSaIS1_EEixEm(ptr noundef nonnull align 8 dereferenceable(24) %133, i64 noundef 0) #7
  %135 = load ptr, ptr %134, align 8, !tbaa !5
  %136 = invoke ptr @ggml_backend_alloc_ctx_tensors(ptr noundef %132, ptr noundef %135)
          to label %137 unwind label %65

137:                                              ; preds = %131
  %138 = getelementptr inbounds i8, ptr %0, i64 200
  store ptr %136, ptr %138, align 8, !tbaa !30
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #7
  %139 = call ptr @_ZNSt6vectorIP11ggml_tensorSaIS1_EE5beginEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  store ptr %139, ptr %10, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #7
  %140 = call ptr @_ZNSt6vectorIP11ggml_tensorSaIS1_EE3endEv(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  store ptr %140, ptr %11, align 8
  %141 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  br i1 %141, label %.lr.ph38, label %._crit_edge39

._crit_edge39:                                    ; preds = %168, %137
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  call void @_ZNSt6vectorIP11ggml_tensorSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #7
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %7) #7
  call void @_ZNSt13random_deviceD2Ev(ptr noundef nonnull align 8 dereferenceable(5000) %6) #7
  call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %6) #7
  ret void

.lr.ph38:                                         ; preds = %137, %168
  %142 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK9__gnu_cxx17__normal_iteratorIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEdeEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = load i32, ptr %143, align 8, !tbaa !31
  %145 = icmp eq i32 %144, 0
  br i1 %145, label %150, label %146

146:                                              ; preds = %.lr.ph38
  invoke void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 298, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.77) #9
          to label %147 unwind label %148

147:                                              ; preds = %146
  unreachable

148:                                              ; preds = %146
  %149 = landingpad { ptr, i32 }
          cleanup
  br label %175

150:                                              ; preds = %.lr.ph38
  %151 = invoke i64 @ggml_nelements(ptr noundef nonnull %143)
          to label %152 unwind label %157

152:                                              ; preds = %150
  call void @llvm.lifetime.start.p0(i64 24, ptr nonnull %12) #7
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %13) #7
  call void @_ZNSaIfEC2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  invoke void @_ZNSt6vectorIfSaIfEEC2EmRKS0_(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %151, ptr noundef nonnull align 1 dereferenceable(1) %13)
          to label %153 unwind label %159

153:                                              ; preds = %152
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  %154 = icmp sgt i64 %151, 0
  br i1 %154, label %.lr.ph, label %._crit_edge

._crit_edge:                                      ; preds = %162, %153
  %155 = call noundef ptr @_ZNSt6vectorIfSaIfEE4dataEv(ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  %156 = invoke i64 @ggml_nbytes(ptr noundef nonnull %143)
          to label %167 unwind label %171

157:                                              ; preds = %150
  %158 = landingpad { ptr, i32 }
          cleanup
  br label %175

159:                                              ; preds = %152
  %160 = landingpad { ptr, i32 }
          cleanup
  call void @_ZNSt15__new_allocatorIfED2Ev(ptr noundef nonnull align 1 dereferenceable(1) %13) #7
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %13) #7
  br label %174

.lr.ph:                                           ; preds = %153, %162
  %.036 = phi i64 [ %164, %162 ], [ 0, %153 ]
  %161 = invoke noundef float @_ZNSt19normal_distributionIfEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(13) %8, ptr noundef nonnull align 8 dereferenceable(5000) %7)
          to label %162 unwind label %165

162:                                              ; preds = %.lr.ph
  %163 = call noundef nonnull align 4 dereferenceable(4) ptr @_ZNSt6vectorIfSaIfEEixEm(ptr noundef nonnull align 8 dereferenceable(24) %12, i64 noundef %.036) #7
  store float %161, ptr %163, align 4, !tbaa !35
  %164 = add nuw nsw i64 %.036, 1
  %exitcond.not = icmp eq i64 %164, %151
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !37

165:                                              ; preds = %.lr.ph
  %166 = landingpad { ptr, i32 }
          cleanup
  br label %173

167:                                              ; preds = %._crit_edge
  invoke void @ggml_backend_tensor_set(ptr noundef nonnull %143, ptr noundef %155, i64 noundef 0, i64 noundef %156)
          to label %168 unwind label %171

168:                                              ; preds = %167
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #7
  %169 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZN9__gnu_cxx17__normal_iteratorIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEppEv(ptr noundef nonnull align 8 dereferenceable(8) %10) #7
  %170 = call noundef zeroext i1 @_ZN9__gnu_cxxneIPP11ggml_tensorSt6vectorIS2_SaIS2_EEEEbRKNS_17__normal_iteratorIT_T0_EESC_(ptr noundef nonnull align 8 dereferenceable(8) %10, ptr noundef nonnull align 8 dereferenceable(8) %11) #7
  br i1 %170, label %.lr.ph38, label %._crit_edge39

171:                                              ; preds = %167, %._crit_edge
  %172 = landingpad { ptr, i32 }
          cleanup
  br label %173

173:                                              ; preds = %171, %165
  %.pn = phi { ptr, i32 } [ %166, %165 ], [ %172, %171 ]
  call void @_ZNSt6vectorIfSaIfEED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %12) #7
  br label %174

174:                                              ; preds = %173, %159
  %.pn.pn = phi { ptr, i32 } [ %.pn, %173 ], [ %160, %159 ]
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %12) #7
  br label %175

175:                                              ; preds = %157, %174, %148
  %.pn.pn.pn.pn = phi { ptr, i32 } [ %149, %148 ], [ %.pn.pn, %174 ], [ %158, %157 ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #7
  br label %176

176:                                              ; preds = %175, %65
  %.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn, %175 ], [ %66, %65 ]
  call void @_ZNSt6vectorIP11ggml_tensorSaIS1_EED2Ev(ptr noundef nonnull align 8 dereferenceable(24) %9) #7
  call void @llvm.lifetime.end.p0(i64 24, ptr nonnull %9) #7
  br label %177

177:                                              ; preds = %176, %63
  %.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn, %176 ], [ %64, %63 ]
  call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %8) #7
  br label %178

178:                                              ; preds = %177, %61
  %.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn, %177 ], [ %62, %61 ]
  call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %7) #7
  call void @_ZNSt13random_deviceD2Ev(ptr noundef nonnull align 8 dereferenceable(5000) %6) #7
  br label %179

179:                                              ; preds = %178, %59
  %.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn, %178 ], [ %60, %59 ]
  call void @llvm.lifetime.end.p0(i64 5000, ptr nonnull %6) #7
  br label %180

180:                                              ; preds = %179, %57
  %.pn.pn.pn.pn.pn.pn.pn.pn.pn = phi { ptr, i32 } [ %.pn.pn.pn.pn.pn.pn.pn.pn, %179 ], [ %58, %57 ]
  call void @_ZN11mnist_modelD2Ev(ptr noundef nonnull align 8 dereferenceable(208) %0) #7
  resume { ptr, i32 } %.pn.pn.pn.pn.pn.pn.pn.pn.pn
}

; Function Attrs: mustprogress uwtable
declare noundef nonnull align 8 dereferenceable(32) ptr @_ZNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEaSERKS4_(ptr noundef nonnull align 8 dereferenceable(32), ptr noundef nonnull align 8 dereferenceable(32)) local_unnamed_addr #5 align 2

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef i32 @_ZNSt13random_deviceclEv(ptr noundef nonnull align 8 dereferenceable(5000)) local_unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEC2Em(ptr noundef nonnull align 8 dereferenceable(5000), i64 noundef) unnamed_addr #5 align 2

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt19normal_distributionIfEC2Eff(ptr noundef nonnull align 4 dereferenceable(13), float noundef, float noundef) unnamed_addr #5 align 2

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

declare ptr @ggml_new_tensor_1d(ptr noundef, i32 noundef, i64 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress uwtable
declare dso_local void @_ZNSt6vectorIP11ggml_tensorSaIS1_EE9push_backERKS1_(ptr noundef nonnull align 8 dereferenceable(24), ptr noundef nonnull align 8 dereferenceable(8)) local_unnamed_addr #5 align 2

declare ptr @ggml_new_tensor_4d(ptr noundef, i32 noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

declare ptr @ggml_new_tensor_3d(ptr noundef, i32 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #4

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

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

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

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

declare i64 @ggml_nelements(ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: mustprogress uwtable
declare dso_local noundef float @_ZNSt19normal_distributionIfEclISt23mersenne_twister_engineImLm32ELm624ELm397ELm31ELm2567483615ELm11ELm4294967295ELm7ELm2636928640ELm15ELm4022730752ELm18ELm1812433253EEEEfRT_(ptr noundef nonnull align 4 dereferenceable(13), ptr noundef nonnull align 8 dereferenceable(5000)) local_unnamed_addr #5 align 2

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

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

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

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

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

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

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

attributes #0 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #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 = { noreturn "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 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress 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 #7 = { nounwind }
attributes #8 = { cold nounwind }
attributes #9 = { noreturn }

!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 176}
!10 = !{!"_ZTS11mnist_model", !11, i64 0, !6, i64 32, !14, i64 40, !18, i64 64, !18, i64 68, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !6, i64 168, !6, i64 176, !6, i64 184, !6, i64 192, !6, i64 200}
!11 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !12, i64 0, !13, i64 8, !7, i64 16}
!12 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !6, i64 0}
!13 = !{!"long", !7, i64 0}
!14 = !{!"_ZTSSt6vectorIP12ggml_backendSaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSSt12_Vector_baseIP12ggml_backendSaIS1_EE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIP12ggml_backendSaIS1_EE12_Vector_implE", !17, i64 0}
!17 = !{!"_ZTSNSt12_Vector_baseIP12ggml_backendSaIS1_EE17_Vector_impl_dataE", !6, i64 0, !6, i64 8, !6, i64 16}
!18 = !{!"int", !7, i64 0}
!19 = !{!10, !6, i64 88}
!20 = !{!10, !6, i64 96}
!21 = !{!10, !6, i64 104}
!22 = !{!10, !6, i64 112}
!23 = !{!10, !6, i64 120}
!24 = !{!10, !6, i64 128}
!25 = !{!10, !6, i64 136}
!26 = !{!10, !6, i64 144}
!27 = !{!10, !6, i64 152}
!28 = !{!10, !6, i64 160}
!29 = !{!10, !6, i64 72}
!30 = !{!10, !6, i64 200}
!31 = !{!32, !33, i64 0}
!32 = !{!"_ZTS11ggml_tensor", !33, i64 0, !6, i64 8, !7, i64 16, !7, i64 48, !34, i64 80, !7, i64 84, !18, i64 148, !7, i64 152, !6, i64 232, !13, i64 240, !6, i64 248, !7, i64 256, !6, i64 320, !7, i64 328}
!33 = !{!"_ZTS9ggml_type", !7, i64 0}
!34 = !{!"_ZTS7ggml_op", !7, i64 0}
!35 = !{!36, !36, i64 0}
!36 = !{!"float", !7, i64 0}
!37 = distinct !{!37, !38}
!38 = !{!"llvm.loop.mustprogress"}


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