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

; 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 }
%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] }

@.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.35 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.104 = 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

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

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z17mnist_model_buildR11mnist_model(ptr noundef nonnull align 8 dereferenceable(208) %0) #4 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %9 = load ptr, ptr %2, align 8, !tbaa !5
  %10 = getelementptr inbounds %struct.mnist_model, ptr %9, i32 0, i32 0
  %11 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %10, ptr noundef @.str.14)
  br i1 %11, label %12, label %75

12:                                               ; preds = %1
  %13 = load ptr, ptr %2, align 8, !tbaa !5
  %14 = getelementptr inbounds %struct.mnist_model, ptr %13, i32 0, i32 19
  %15 = load ptr, ptr %14, align 8, !tbaa !9
  %16 = load ptr, ptr %2, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.mnist_model, ptr %16, i32 0, i32 7
  %18 = load ptr, ptr %17, align 8, !tbaa !19
  call void @ggml_set_param(ptr noundef %15, ptr noundef %18)
  %19 = load ptr, ptr %2, align 8, !tbaa !5
  %20 = getelementptr inbounds %struct.mnist_model, ptr %19, i32 0, i32 19
  %21 = load ptr, ptr %20, align 8, !tbaa !9
  %22 = load ptr, ptr %2, align 8, !tbaa !5
  %23 = getelementptr inbounds %struct.mnist_model, ptr %22, i32 0, i32 8
  %24 = load ptr, ptr %23, align 8, !tbaa !20
  call void @ggml_set_param(ptr noundef %21, ptr noundef %24)
  %25 = load ptr, ptr %2, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.mnist_model, ptr %25, i32 0, i32 19
  %27 = load ptr, ptr %26, align 8, !tbaa !9
  %28 = load ptr, ptr %2, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.mnist_model, ptr %28, i32 0, i32 9
  %30 = load ptr, ptr %29, align 8, !tbaa !21
  call void @ggml_set_param(ptr noundef %27, ptr noundef %30)
  %31 = load ptr, ptr %2, align 8, !tbaa !5
  %32 = getelementptr inbounds %struct.mnist_model, ptr %31, i32 0, i32 19
  %33 = load ptr, ptr %32, align 8, !tbaa !9
  %34 = load ptr, ptr %2, align 8, !tbaa !5
  %35 = getelementptr inbounds %struct.mnist_model, ptr %34, i32 0, i32 10
  %36 = load ptr, ptr %35, align 8, !tbaa !22
  call void @ggml_set_param(ptr noundef %33, ptr noundef %36)
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %37 = load ptr, ptr %2, align 8, !tbaa !5
  %38 = getelementptr inbounds %struct.mnist_model, ptr %37, i32 0, i32 19
  %39 = load ptr, ptr %38, align 8, !tbaa !9
  %40 = load ptr, ptr %2, align 8, !tbaa !5
  %41 = getelementptr inbounds %struct.mnist_model, ptr %40, i32 0, i32 19
  %42 = load ptr, ptr %41, align 8, !tbaa !9
  %43 = load ptr, ptr %2, align 8, !tbaa !5
  %44 = getelementptr inbounds %struct.mnist_model, ptr %43, i32 0, i32 19
  %45 = load ptr, ptr %44, align 8, !tbaa !9
  %46 = load ptr, ptr %2, align 8, !tbaa !5
  %47 = getelementptr inbounds %struct.mnist_model, ptr %46, i32 0, i32 7
  %48 = load ptr, ptr %47, align 8, !tbaa !19
  %49 = load ptr, ptr %2, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.mnist_model, ptr %49, i32 0, i32 5
  %51 = load ptr, ptr %50, align 8, !tbaa !23
  %52 = call ptr @ggml_mul_mat(ptr noundef %45, ptr noundef %48, ptr noundef %51)
  %53 = load ptr, ptr %2, align 8, !tbaa !5
  %54 = getelementptr inbounds %struct.mnist_model, ptr %53, i32 0, i32 8
  %55 = load ptr, ptr %54, align 8, !tbaa !20
  %56 = call ptr @ggml_add(ptr noundef %42, ptr noundef %52, ptr noundef %55)
  %57 = call ptr @ggml_relu(ptr noundef %39, ptr noundef %56)
  store ptr %57, ptr %3, align 8, !tbaa !5
  %58 = load ptr, ptr %2, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.mnist_model, ptr %58, i32 0, i32 19
  %60 = load ptr, ptr %59, align 8, !tbaa !9
  %61 = load ptr, ptr %2, align 8, !tbaa !5
  %62 = getelementptr inbounds %struct.mnist_model, ptr %61, i32 0, i32 19
  %63 = load ptr, ptr %62, align 8, !tbaa !9
  %64 = load ptr, ptr %2, align 8, !tbaa !5
  %65 = getelementptr inbounds %struct.mnist_model, ptr %64, i32 0, i32 9
  %66 = load ptr, ptr %65, align 8, !tbaa !21
  %67 = load ptr, ptr %3, align 8, !tbaa !5
  %68 = call ptr @ggml_mul_mat(ptr noundef %63, ptr noundef %66, ptr noundef %67)
  %69 = load ptr, ptr %2, align 8, !tbaa !5
  %70 = getelementptr inbounds %struct.mnist_model, ptr %69, i32 0, i32 10
  %71 = load ptr, ptr %70, align 8, !tbaa !22
  %72 = call ptr @ggml_add(ptr noundef %60, ptr noundef %68, ptr noundef %71)
  %73 = load ptr, ptr %2, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.mnist_model, ptr %73, i32 0, i32 6
  store ptr %72, ptr %74, align 8, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  br label %373

75:                                               ; preds = %1
  %76 = load ptr, ptr %2, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.mnist_model, ptr %76, i32 0, i32 0
  %78 = call noundef zeroext i1 @_ZSteqIcSt11char_traitsIcESaIcEEbRKNSt7__cxx1112basic_stringIT_T0_T1_EEPKS5_(ptr noundef nonnull align 8 dereferenceable(32) %77, ptr noundef @.str.35)
  br i1 %78, label %79, label %371

79:                                               ; preds = %75
  %80 = load ptr, ptr %2, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.mnist_model, ptr %80, i32 0, i32 19
  %82 = load ptr, ptr %81, align 8, !tbaa !9
  %83 = load ptr, ptr %2, align 8, !tbaa !5
  %84 = getelementptr inbounds %struct.mnist_model, ptr %83, i32 0, i32 11
  %85 = load ptr, ptr %84, align 8, !tbaa !25
  call void @ggml_set_param(ptr noundef %82, ptr noundef %85)
  %86 = load ptr, ptr %2, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.mnist_model, ptr %86, i32 0, i32 19
  %88 = load ptr, ptr %87, align 8, !tbaa !9
  %89 = load ptr, ptr %2, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.mnist_model, ptr %89, i32 0, i32 12
  %91 = load ptr, ptr %90, align 8, !tbaa !26
  call void @ggml_set_param(ptr noundef %88, ptr noundef %91)
  %92 = load ptr, ptr %2, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.mnist_model, ptr %92, i32 0, i32 19
  %94 = load ptr, ptr %93, align 8, !tbaa !9
  %95 = load ptr, ptr %2, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.mnist_model, ptr %95, i32 0, i32 13
  %97 = load ptr, ptr %96, align 8, !tbaa !27
  call void @ggml_set_param(ptr noundef %94, ptr noundef %97)
  %98 = load ptr, ptr %2, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.mnist_model, ptr %98, i32 0, i32 19
  %100 = load ptr, ptr %99, align 8, !tbaa !9
  %101 = load ptr, ptr %2, align 8, !tbaa !5
  %102 = getelementptr inbounds %struct.mnist_model, ptr %101, i32 0, i32 14
  %103 = load ptr, ptr %102, align 8, !tbaa !28
  call void @ggml_set_param(ptr noundef %100, ptr noundef %103)
  %104 = load ptr, ptr %2, align 8, !tbaa !5
  %105 = getelementptr inbounds %struct.mnist_model, ptr %104, i32 0, i32 19
  %106 = load ptr, ptr %105, align 8, !tbaa !9
  %107 = load ptr, ptr %2, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.mnist_model, ptr %107, i32 0, i32 15
  %109 = load ptr, ptr %108, align 8, !tbaa !29
  call void @ggml_set_param(ptr noundef %106, ptr noundef %109)
  %110 = load ptr, ptr %2, align 8, !tbaa !5
  %111 = getelementptr inbounds %struct.mnist_model, ptr %110, i32 0, i32 19
  %112 = load ptr, ptr %111, align 8, !tbaa !9
  %113 = load ptr, ptr %2, align 8, !tbaa !5
  %114 = getelementptr inbounds %struct.mnist_model, ptr %113, i32 0, i32 16
  %115 = load ptr, ptr %114, align 8, !tbaa !30
  call void @ggml_set_param(ptr noundef %112, ptr noundef %115)
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #5
  %116 = load ptr, ptr %2, align 8, !tbaa !5
  %117 = getelementptr inbounds %struct.mnist_model, ptr %116, i32 0, i32 19
  %118 = load ptr, ptr %117, align 8, !tbaa !9
  %119 = load ptr, ptr %2, align 8, !tbaa !5
  %120 = getelementptr inbounds %struct.mnist_model, ptr %119, i32 0, i32 5
  %121 = load ptr, ptr %120, align 8, !tbaa !23
  %122 = load ptr, ptr %2, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.mnist_model, ptr %122, i32 0, i32 5
  %124 = load ptr, ptr %123, align 8, !tbaa !23
  %125 = getelementptr inbounds %struct.ggml_tensor, ptr %124, i32 0, i32 2
  %126 = getelementptr inbounds [4 x i64], ptr %125, i64 0, i64 1
  %127 = load i64, ptr %126, align 8, !tbaa !31
  %128 = call ptr @ggml_reshape_4d(ptr noundef %118, ptr noundef %121, i64 noundef 28, i64 noundef 28, i64 noundef 1, i64 noundef %127)
  store ptr %128, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %129 = load ptr, ptr %2, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.mnist_model, ptr %129, i32 0, i32 19
  %131 = load ptr, ptr %130, align 8, !tbaa !9
  %132 = load ptr, ptr %2, align 8, !tbaa !5
  %133 = getelementptr inbounds %struct.mnist_model, ptr %132, i32 0, i32 19
  %134 = load ptr, ptr %133, align 8, !tbaa !9
  %135 = load ptr, ptr %2, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.mnist_model, ptr %135, i32 0, i32 19
  %137 = load ptr, ptr %136, align 8, !tbaa !9
  %138 = load ptr, ptr %2, align 8, !tbaa !5
  %139 = getelementptr inbounds %struct.mnist_model, ptr %138, i32 0, i32 11
  %140 = load ptr, ptr %139, align 8, !tbaa !25
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = call ptr @ggml_conv_2d(ptr noundef %137, ptr noundef %140, ptr noundef %141, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1)
  %143 = load ptr, ptr %2, align 8, !tbaa !5
  %144 = getelementptr inbounds %struct.mnist_model, ptr %143, i32 0, i32 12
  %145 = load ptr, ptr %144, align 8, !tbaa !26
  %146 = call ptr @ggml_add(ptr noundef %134, ptr noundef %142, ptr noundef %145)
  %147 = call ptr @ggml_relu(ptr noundef %131, ptr noundef %146)
  store ptr %147, ptr %5, align 8, !tbaa !5
  %148 = load ptr, ptr %5, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.ggml_tensor, ptr %148, i32 0, i32 2
  %150 = getelementptr inbounds [4 x i64], ptr %149, i64 0, i64 0
  %151 = load i64, ptr %150, align 8, !tbaa !31
  %152 = icmp eq i64 %151, 28
  br i1 %152, label %154, label %153

153:                                              ; preds = %79
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 337, ptr noundef @.str.2, ptr noundef @.str.78) #6
  unreachable

154:                                              ; preds = %79
  %155 = load ptr, ptr %5, align 8, !tbaa !5
  %156 = getelementptr inbounds %struct.ggml_tensor, ptr %155, i32 0, i32 2
  %157 = getelementptr inbounds [4 x i64], ptr %156, i64 0, i64 1
  %158 = load i64, ptr %157, align 8, !tbaa !31
  %159 = icmp eq i64 %158, 28
  br i1 %159, label %161, label %160

160:                                              ; preds = %154
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 338, ptr noundef @.str.2, ptr noundef @.str.79) #6
  unreachable

161:                                              ; preds = %154
  %162 = load ptr, ptr %5, align 8, !tbaa !5
  %163 = getelementptr inbounds %struct.ggml_tensor, ptr %162, i32 0, i32 2
  %164 = getelementptr inbounds [4 x i64], ptr %163, i64 0, i64 2
  %165 = load i64, ptr %164, align 8, !tbaa !31
  %166 = icmp eq i64 %165, 8
  br i1 %166, label %168, label %167

167:                                              ; preds = %161
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 339, ptr noundef @.str.2, ptr noundef @.str.80) #6
  unreachable

168:                                              ; preds = %161
  %169 = load ptr, ptr %5, align 8, !tbaa !5
  %170 = getelementptr inbounds %struct.ggml_tensor, ptr %169, i32 0, i32 2
  %171 = getelementptr inbounds [4 x i64], ptr %170, i64 0, i64 3
  %172 = load i64, ptr %171, align 8, !tbaa !31
  %173 = load ptr, ptr %2, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.mnist_model, ptr %173, i32 0, i32 4
  %175 = load i32, ptr %174, align 4, !tbaa !32
  %176 = sext i32 %175 to i64
  %177 = icmp eq i64 %172, %176
  br i1 %177, label %179, label %178

178:                                              ; preds = %168
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 340, ptr noundef @.str.2, ptr noundef @.str.81) #6
  unreachable

179:                                              ; preds = %168
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %180 = load ptr, ptr %2, align 8, !tbaa !5
  %181 = getelementptr inbounds %struct.mnist_model, ptr %180, i32 0, i32 19
  %182 = load ptr, ptr %181, align 8, !tbaa !9
  %183 = load ptr, ptr %5, align 8, !tbaa !5
  %184 = call ptr @ggml_pool_2d(ptr noundef %182, ptr noundef %183, i32 noundef 0, i32 noundef 2, i32 noundef 2, i32 noundef 2, i32 noundef 2, float noundef 0.000000e+00, float noundef 0.000000e+00)
  store ptr %184, ptr %6, align 8, !tbaa !5
  %185 = load ptr, ptr %6, align 8, !tbaa !5
  %186 = getelementptr inbounds %struct.ggml_tensor, ptr %185, i32 0, i32 2
  %187 = getelementptr inbounds [4 x i64], ptr %186, i64 0, i64 0
  %188 = load i64, ptr %187, align 8, !tbaa !31
  %189 = icmp eq i64 %188, 14
  br i1 %189, label %191, label %190

190:                                              ; preds = %179
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 343, ptr noundef @.str.2, ptr noundef @.str.82) #6
  unreachable

191:                                              ; preds = %179
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  %193 = getelementptr inbounds %struct.ggml_tensor, ptr %192, i32 0, i32 2
  %194 = getelementptr inbounds [4 x i64], ptr %193, i64 0, i64 1
  %195 = load i64, ptr %194, align 8, !tbaa !31
  %196 = icmp eq i64 %195, 14
  br i1 %196, label %198, label %197

197:                                              ; preds = %191
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 344, ptr noundef @.str.2, ptr noundef @.str.83) #6
  unreachable

198:                                              ; preds = %191
  %199 = load ptr, ptr %6, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.ggml_tensor, ptr %199, i32 0, i32 2
  %201 = getelementptr inbounds [4 x i64], ptr %200, i64 0, i64 2
  %202 = load i64, ptr %201, align 8, !tbaa !31
  %203 = icmp eq i64 %202, 8
  br i1 %203, label %205, label %204

204:                                              ; preds = %198
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 345, ptr noundef @.str.2, ptr noundef @.str.84) #6
  unreachable

205:                                              ; preds = %198
  %206 = load ptr, ptr %6, align 8, !tbaa !5
  %207 = getelementptr inbounds %struct.ggml_tensor, ptr %206, i32 0, i32 2
  %208 = getelementptr inbounds [4 x i64], ptr %207, i64 0, i64 3
  %209 = load i64, ptr %208, align 8, !tbaa !31
  %210 = load ptr, ptr %2, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.mnist_model, ptr %210, i32 0, i32 4
  %212 = load i32, ptr %211, align 4, !tbaa !32
  %213 = sext i32 %212 to i64
  %214 = icmp eq i64 %209, %213
  br i1 %214, label %216, label %215

215:                                              ; preds = %205
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 346, ptr noundef @.str.2, ptr noundef @.str.85) #6
  unreachable

216:                                              ; preds = %205
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %217 = load ptr, ptr %2, align 8, !tbaa !5
  %218 = getelementptr inbounds %struct.mnist_model, ptr %217, i32 0, i32 19
  %219 = load ptr, ptr %218, align 8, !tbaa !9
  %220 = load ptr, ptr %2, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.mnist_model, ptr %220, i32 0, i32 19
  %222 = load ptr, ptr %221, align 8, !tbaa !9
  %223 = load ptr, ptr %2, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.mnist_model, ptr %223, i32 0, i32 19
  %225 = load ptr, ptr %224, align 8, !tbaa !9
  %226 = load ptr, ptr %2, align 8, !tbaa !5
  %227 = getelementptr inbounds %struct.mnist_model, ptr %226, i32 0, i32 13
  %228 = load ptr, ptr %227, align 8, !tbaa !27
  %229 = load ptr, ptr %6, align 8, !tbaa !5
  %230 = call ptr @ggml_conv_2d(ptr noundef %225, ptr noundef %228, ptr noundef %229, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1)
  %231 = load ptr, ptr %2, align 8, !tbaa !5
  %232 = getelementptr inbounds %struct.mnist_model, ptr %231, i32 0, i32 14
  %233 = load ptr, ptr %232, align 8, !tbaa !28
  %234 = call ptr @ggml_add(ptr noundef %222, ptr noundef %230, ptr noundef %233)
  %235 = call ptr @ggml_relu(ptr noundef %219, ptr noundef %234)
  store ptr %235, ptr %7, align 8, !tbaa !5
  %236 = load ptr, ptr %7, align 8, !tbaa !5
  %237 = getelementptr inbounds %struct.ggml_tensor, ptr %236, i32 0, i32 2
  %238 = getelementptr inbounds [4 x i64], ptr %237, i64 0, i64 0
  %239 = load i64, ptr %238, align 8, !tbaa !31
  %240 = icmp eq i64 %239, 14
  br i1 %240, label %242, label %241

241:                                              ; preds = %216
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 351, ptr noundef @.str.2, ptr noundef @.str.86) #6
  unreachable

242:                                              ; preds = %216
  %243 = load ptr, ptr %7, align 8, !tbaa !5
  %244 = getelementptr inbounds %struct.ggml_tensor, ptr %243, i32 0, i32 2
  %245 = getelementptr inbounds [4 x i64], ptr %244, i64 0, i64 1
  %246 = load i64, ptr %245, align 8, !tbaa !31
  %247 = icmp eq i64 %246, 14
  br i1 %247, label %249, label %248

248:                                              ; preds = %242
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 352, ptr noundef @.str.2, ptr noundef @.str.87) #6
  unreachable

249:                                              ; preds = %242
  %250 = load ptr, ptr %7, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.ggml_tensor, ptr %250, i32 0, i32 2
  %252 = getelementptr inbounds [4 x i64], ptr %251, i64 0, i64 2
  %253 = load i64, ptr %252, align 8, !tbaa !31
  %254 = icmp eq i64 %253, 16
  br i1 %254, label %256, label %255

255:                                              ; preds = %249
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 353, ptr noundef @.str.2, ptr noundef @.str.88) #6
  unreachable

256:                                              ; preds = %249
  %257 = load ptr, ptr %7, align 8, !tbaa !5
  %258 = getelementptr inbounds %struct.ggml_tensor, ptr %257, i32 0, i32 2
  %259 = getelementptr inbounds [4 x i64], ptr %258, i64 0, i64 3
  %260 = load i64, ptr %259, align 8, !tbaa !31
  %261 = load ptr, ptr %2, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.mnist_model, ptr %261, i32 0, i32 4
  %263 = load i32, ptr %262, align 4, !tbaa !32
  %264 = sext i32 %263 to i64
  %265 = icmp eq i64 %260, %264
  br i1 %265, label %267, label %266

266:                                              ; preds = %256
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 354, ptr noundef @.str.2, ptr noundef @.str.89) #6
  unreachable

267:                                              ; preds = %256
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %268 = load ptr, ptr %2, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.mnist_model, ptr %268, i32 0, i32 19
  %270 = load ptr, ptr %269, align 8, !tbaa !9
  %271 = load ptr, ptr %7, align 8, !tbaa !5
  %272 = call ptr @ggml_pool_2d(ptr noundef %270, ptr noundef %271, i32 noundef 0, i32 noundef 2, i32 noundef 2, i32 noundef 2, i32 noundef 2, float noundef 0.000000e+00, float noundef 0.000000e+00)
  store ptr %272, ptr %8, align 8, !tbaa !5
  %273 = load ptr, ptr %8, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.ggml_tensor, ptr %273, i32 0, i32 2
  %275 = getelementptr inbounds [4 x i64], ptr %274, i64 0, i64 0
  %276 = load i64, ptr %275, align 8, !tbaa !31
  %277 = icmp eq i64 %276, 7
  br i1 %277, label %279, label %278

278:                                              ; preds = %267
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 357, ptr noundef @.str.2, ptr noundef @.str.90) #6
  unreachable

279:                                              ; preds = %267
  %280 = load ptr, ptr %8, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.ggml_tensor, ptr %280, i32 0, i32 2
  %282 = getelementptr inbounds [4 x i64], ptr %281, i64 0, i64 1
  %283 = load i64, ptr %282, align 8, !tbaa !31
  %284 = icmp eq i64 %283, 7
  br i1 %284, label %286, label %285

285:                                              ; preds = %279
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 358, ptr noundef @.str.2, ptr noundef @.str.91) #6
  unreachable

286:                                              ; preds = %279
  %287 = load ptr, ptr %8, align 8, !tbaa !5
  %288 = getelementptr inbounds %struct.ggml_tensor, ptr %287, i32 0, i32 2
  %289 = getelementptr inbounds [4 x i64], ptr %288, i64 0, i64 2
  %290 = load i64, ptr %289, align 8, !tbaa !31
  %291 = icmp eq i64 %290, 16
  br i1 %291, label %293, label %292

292:                                              ; preds = %286
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 359, ptr noundef @.str.2, ptr noundef @.str.92) #6
  unreachable

293:                                              ; preds = %286
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = getelementptr inbounds %struct.ggml_tensor, ptr %294, i32 0, i32 2
  %296 = getelementptr inbounds [4 x i64], ptr %295, i64 0, i64 3
  %297 = load i64, ptr %296, align 8, !tbaa !31
  %298 = load ptr, ptr %2, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.mnist_model, ptr %298, i32 0, i32 4
  %300 = load i32, ptr %299, align 4, !tbaa !32
  %301 = sext i32 %300 to i64
  %302 = icmp eq i64 %297, %301
  br i1 %302, label %304, label %303

303:                                              ; preds = %293
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 360, ptr noundef @.str.2, ptr noundef @.str.93) #6
  unreachable

304:                                              ; preds = %293
  %305 = load ptr, ptr %2, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.mnist_model, ptr %305, i32 0, i32 19
  %307 = load ptr, ptr %306, align 8, !tbaa !9
  %308 = load ptr, ptr %2, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.mnist_model, ptr %308, i32 0, i32 19
  %310 = load ptr, ptr %309, align 8, !tbaa !9
  %311 = load ptr, ptr %2, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.mnist_model, ptr %311, i32 0, i32 19
  %313 = load ptr, ptr %312, align 8, !tbaa !9
  %314 = load ptr, ptr %8, align 8, !tbaa !5
  %315 = call ptr @ggml_permute(ptr noundef %313, ptr noundef %314, i32 noundef 1, i32 noundef 2, i32 noundef 0, i32 noundef 3)
  %316 = call ptr @ggml_cont(ptr noundef %310, ptr noundef %315)
  %317 = load ptr, ptr %2, align 8, !tbaa !5
  %318 = getelementptr inbounds %struct.mnist_model, ptr %317, i32 0, i32 4
  %319 = load i32, ptr %318, align 4, !tbaa !32
  %320 = sext i32 %319 to i64
  %321 = call ptr @ggml_reshape_2d(ptr noundef %307, ptr noundef %316, i64 noundef 784, i64 noundef %320)
  store ptr %321, ptr %8, align 8, !tbaa !5
  %322 = load ptr, ptr %8, align 8, !tbaa !5
  %323 = getelementptr inbounds %struct.ggml_tensor, ptr %322, i32 0, i32 2
  %324 = getelementptr inbounds [4 x i64], ptr %323, i64 0, i64 0
  %325 = load i64, ptr %324, align 8, !tbaa !31
  %326 = icmp eq i64 %325, 784
  br i1 %326, label %328, label %327

327:                                              ; preds = %304
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 365, ptr noundef @.str.2, ptr noundef @.str.94) #6
  unreachable

328:                                              ; preds = %304
  %329 = load ptr, ptr %8, align 8, !tbaa !5
  %330 = getelementptr inbounds %struct.ggml_tensor, ptr %329, i32 0, i32 2
  %331 = getelementptr inbounds [4 x i64], ptr %330, i64 0, i64 1
  %332 = load i64, ptr %331, align 8, !tbaa !31
  %333 = load ptr, ptr %2, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.mnist_model, ptr %333, i32 0, i32 4
  %335 = load i32, ptr %334, align 4, !tbaa !32
  %336 = sext i32 %335 to i64
  %337 = icmp eq i64 %332, %336
  br i1 %337, label %339, label %338

338:                                              ; preds = %328
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 366, ptr noundef @.str.2, ptr noundef @.str.95) #6
  unreachable

339:                                              ; preds = %328
  %340 = load ptr, ptr %8, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.ggml_tensor, ptr %340, i32 0, i32 2
  %342 = getelementptr inbounds [4 x i64], ptr %341, i64 0, i64 2
  %343 = load i64, ptr %342, align 8, !tbaa !31
  %344 = icmp eq i64 %343, 1
  br i1 %344, label %346, label %345

345:                                              ; preds = %339
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 367, ptr noundef @.str.2, ptr noundef @.str.96) #6
  unreachable

346:                                              ; preds = %339
  %347 = load ptr, ptr %8, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.ggml_tensor, ptr %347, i32 0, i32 2
  %349 = getelementptr inbounds [4 x i64], ptr %348, i64 0, i64 3
  %350 = load i64, ptr %349, align 8, !tbaa !31
  %351 = icmp eq i64 %350, 1
  br i1 %351, label %353, label %352

352:                                              ; preds = %346
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 368, ptr noundef @.str.2, ptr noundef @.str.97) #6
  unreachable

353:                                              ; preds = %346
  %354 = load ptr, ptr %2, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.mnist_model, ptr %354, i32 0, i32 19
  %356 = load ptr, ptr %355, align 8, !tbaa !9
  %357 = load ptr, ptr %2, align 8, !tbaa !5
  %358 = getelementptr inbounds %struct.mnist_model, ptr %357, i32 0, i32 19
  %359 = load ptr, ptr %358, align 8, !tbaa !9
  %360 = load ptr, ptr %2, align 8, !tbaa !5
  %361 = getelementptr inbounds %struct.mnist_model, ptr %360, i32 0, i32 15
  %362 = load ptr, ptr %361, align 8, !tbaa !29
  %363 = load ptr, ptr %8, align 8, !tbaa !5
  %364 = call ptr @ggml_mul_mat(ptr noundef %359, ptr noundef %362, ptr noundef %363)
  %365 = load ptr, ptr %2, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.mnist_model, ptr %365, i32 0, i32 16
  %367 = load ptr, ptr %366, align 8, !tbaa !30
  %368 = call ptr @ggml_add(ptr noundef %356, ptr noundef %364, ptr noundef %367)
  %369 = load ptr, ptr %2, align 8, !tbaa !5
  %370 = getelementptr inbounds %struct.mnist_model, ptr %369, i32 0, i32 6
  store ptr %368, ptr %370, align 8, !tbaa !24
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #5
  br label %372

371:                                              ; preds = %75
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 372, ptr noundef @.str.2, ptr noundef @.str.98) #6
  unreachable

372:                                              ; preds = %353
  br label %373

373:                                              ; preds = %372, %12
  %374 = load ptr, ptr %2, align 8, !tbaa !5
  %375 = getelementptr inbounds %struct.mnist_model, ptr %374, i32 0, i32 6
  %376 = load ptr, ptr %375, align 8, !tbaa !24
  %377 = call ptr @ggml_set_name(ptr noundef %376, ptr noundef @.str.99)
  %378 = load ptr, ptr %2, align 8, !tbaa !5
  %379 = getelementptr inbounds %struct.mnist_model, ptr %378, i32 0, i32 6
  %380 = load ptr, ptr %379, align 8, !tbaa !24
  call void @ggml_set_output(ptr noundef %380)
  %381 = load ptr, ptr %2, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.mnist_model, ptr %381, i32 0, i32 6
  %383 = load ptr, ptr %382, align 8, !tbaa !24
  %384 = getelementptr inbounds %struct.ggml_tensor, ptr %383, i32 0, i32 0
  %385 = load i32, ptr %384, align 8, !tbaa !33
  %386 = icmp eq i32 %385, 0
  br i1 %386, label %388, label %387

387:                                              ; preds = %373
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 377, ptr noundef @.str.2, ptr noundef @.str.100) #6
  unreachable

388:                                              ; preds = %373
  %389 = load ptr, ptr %2, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.mnist_model, ptr %389, i32 0, i32 6
  %391 = load ptr, ptr %390, align 8, !tbaa !24
  %392 = getelementptr inbounds %struct.ggml_tensor, ptr %391, i32 0, i32 2
  %393 = getelementptr inbounds [4 x i64], ptr %392, i64 0, i64 0
  %394 = load i64, ptr %393, align 8, !tbaa !31
  %395 = icmp eq i64 %394, 10
  br i1 %395, label %397, label %396

396:                                              ; preds = %388
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 378, ptr noundef @.str.2, ptr noundef @.str.101) #6
  unreachable

397:                                              ; preds = %388
  %398 = load ptr, ptr %2, align 8, !tbaa !5
  %399 = getelementptr inbounds %struct.mnist_model, ptr %398, i32 0, i32 6
  %400 = load ptr, ptr %399, align 8, !tbaa !24
  %401 = getelementptr inbounds %struct.ggml_tensor, ptr %400, i32 0, i32 2
  %402 = getelementptr inbounds [4 x i64], ptr %401, i64 0, i64 1
  %403 = load i64, ptr %402, align 8, !tbaa !31
  %404 = load ptr, ptr %2, align 8, !tbaa !5
  %405 = getelementptr inbounds %struct.mnist_model, ptr %404, i32 0, i32 4
  %406 = load i32, ptr %405, align 4, !tbaa !32
  %407 = sext i32 %406 to i64
  %408 = icmp eq i64 %403, %407
  br i1 %408, label %410, label %409

409:                                              ; preds = %397
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 379, ptr noundef @.str.2, ptr noundef @.str.102) #6
  unreachable

410:                                              ; preds = %397
  %411 = load ptr, ptr %2, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.mnist_model, ptr %411, i32 0, i32 6
  %413 = load ptr, ptr %412, align 8, !tbaa !24
  %414 = getelementptr inbounds %struct.ggml_tensor, ptr %413, i32 0, i32 2
  %415 = getelementptr inbounds [4 x i64], ptr %414, i64 0, i64 2
  %416 = load i64, ptr %415, align 8, !tbaa !31
  %417 = icmp eq i64 %416, 1
  br i1 %417, label %419, label %418

418:                                              ; preds = %410
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 380, ptr noundef @.str.2, ptr noundef @.str.103) #6
  unreachable

419:                                              ; preds = %410
  %420 = load ptr, ptr %2, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.mnist_model, ptr %420, i32 0, i32 6
  %422 = load ptr, ptr %421, align 8, !tbaa !24
  %423 = getelementptr inbounds %struct.ggml_tensor, ptr %422, i32 0, i32 2
  %424 = getelementptr inbounds [4 x i64], ptr %423, i64 0, i64 3
  %425 = load i64, ptr %424, align 8, !tbaa !31
  %426 = icmp eq i64 %425, 1
  br i1 %426, label %428, label %427

427:                                              ; preds = %419
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str.1, i32 noundef 381, ptr noundef @.str.2, ptr noundef @.str.104) #6
  unreachable

428:                                              ; preds = %419
  ret void
}

declare void @ggml_set_param(ptr noundef, ptr noundef) #3

declare ptr @ggml_relu(ptr noundef, ptr noundef) #3

declare ptr @ggml_add(ptr noundef, ptr noundef, ptr noundef) #3

declare ptr @ggml_mul_mat(ptr noundef, ptr noundef, ptr noundef) #3

declare ptr @ggml_reshape_4d(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) #3

declare ptr @ggml_conv_2d(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare ptr @ggml_pool_2d(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef, float noundef) #3

declare ptr @ggml_reshape_2d(ptr noundef, ptr noundef, i64 noundef, i64 noundef) #3

declare ptr @ggml_cont(ptr noundef, ptr noundef) #3

declare ptr @ggml_permute(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #3

declare void @ggml_set_output(ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #2 = { 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 #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 = { 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 #5 = { nounwind }
attributes #6 = { 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 184}
!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 72}
!24 = !{!10, !6, i64 80}
!25 = !{!10, !6, i64 120}
!26 = !{!10, !6, i64 128}
!27 = !{!10, !6, i64 136}
!28 = !{!10, !6, i64 144}
!29 = !{!10, !6, i64 152}
!30 = !{!10, !6, i64 160}
!31 = !{!13, !13, i64 0}
!32 = !{!10, !18, i64 68}
!33 = !{!34, !35, i64 0}
!34 = !{!"_ZTS11ggml_tensor", !35, i64 0, !6, i64 8, !7, i64 16, !7, i64 48, !36, 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}
!35 = !{!"_ZTS9ggml_type", !7, i64 0}
!36 = !{!"_ZTS7ggml_op", !7, i64 0}


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

@.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.35 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.78 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.79 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.80 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.81 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.82 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.83 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.84 = external hidden unnamed_addr constant [33 x i8], align 1
@.str.85 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.86 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.87 = external hidden unnamed_addr constant [31 x i8], align 1
@.str.88 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.89 = external hidden unnamed_addr constant [42 x i8], align 1
@.str.90 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.91 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.92 = external hidden unnamed_addr constant [35 x i8], align 1
@.str.93 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.94 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.95 = external hidden unnamed_addr constant [41 x i8], align 1
@.str.96 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.97 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.98 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.99 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.100 = external hidden unnamed_addr constant [36 x i8], align 1
@.str.101 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.102 = external hidden unnamed_addr constant [45 x i8], align 1
@.str.103 = external hidden unnamed_addr constant [25 x i8], align 1
@.str.104 = external hidden unnamed_addr constant [25 x i8], align 1

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

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

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

; Function Attrs: mustprogress uwtable
define dso_local void @_Z17mnist_model_buildR11mnist_model(ptr noundef nonnull align 8 dereferenceable(208) %0) local_unnamed_addr #3 {
  %2 = tail 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 %2, label %3, label %30

3:                                                ; preds = %1
  %4 = getelementptr inbounds i8, ptr %0, i64 184
  %5 = load ptr, ptr %4, align 8, !tbaa !5
  %6 = getelementptr inbounds i8, ptr %0, i64 88
  %7 = load ptr, ptr %6, align 8, !tbaa !18
  tail call void @ggml_set_param(ptr noundef %5, ptr noundef %7)
  %8 = load ptr, ptr %4, align 8, !tbaa !5
  %9 = getelementptr inbounds i8, ptr %0, i64 96
  %10 = load ptr, ptr %9, align 8, !tbaa !19
  tail call void @ggml_set_param(ptr noundef %8, ptr noundef %10)
  %11 = load ptr, ptr %4, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 104
  %13 = load ptr, ptr %12, align 8, !tbaa !20
  tail call void @ggml_set_param(ptr noundef %11, ptr noundef %13)
  %14 = load ptr, ptr %4, align 8, !tbaa !5
  %15 = getelementptr inbounds i8, ptr %0, i64 112
  %16 = load ptr, ptr %15, align 8, !tbaa !21
  tail call void @ggml_set_param(ptr noundef %14, ptr noundef %16)
  %17 = load ptr, ptr %4, align 8, !tbaa !5
  %18 = load ptr, ptr %6, align 8, !tbaa !18
  %19 = getelementptr inbounds i8, ptr %0, i64 72
  %20 = load ptr, ptr %19, align 8, !tbaa !22
  %21 = tail call ptr @ggml_mul_mat(ptr noundef %17, ptr noundef %18, ptr noundef %20)
  %22 = load ptr, ptr %9, align 8, !tbaa !19
  %23 = tail call ptr @ggml_add(ptr noundef %17, ptr noundef %21, ptr noundef %22)
  %24 = tail call ptr @ggml_relu(ptr noundef %17, ptr noundef %23)
  %25 = load ptr, ptr %4, align 8, !tbaa !5
  %26 = load ptr, ptr %12, align 8, !tbaa !20
  %27 = tail call ptr @ggml_mul_mat(ptr noundef %25, ptr noundef %26, ptr noundef %24)
  %28 = load ptr, ptr %15, align 8, !tbaa !21
  %29 = tail call ptr @ggml_add(ptr noundef %25, ptr noundef %27, ptr noundef %28)
  br label %197

30:                                               ; preds = %1
  %31 = tail 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 %31, label %32, label %196

32:                                               ; preds = %30
  %33 = getelementptr inbounds i8, ptr %0, i64 184
  %34 = load ptr, ptr %33, align 8, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %0, i64 120
  %36 = load ptr, ptr %35, align 8, !tbaa !23
  tail call void @ggml_set_param(ptr noundef %34, ptr noundef %36)
  %37 = load ptr, ptr %33, align 8, !tbaa !5
  %38 = getelementptr inbounds i8, ptr %0, i64 128
  %39 = load ptr, ptr %38, align 8, !tbaa !24
  tail call void @ggml_set_param(ptr noundef %37, ptr noundef %39)
  %40 = load ptr, ptr %33, align 8, !tbaa !5
  %41 = getelementptr inbounds i8, ptr %0, i64 136
  %42 = load ptr, ptr %41, align 8, !tbaa !25
  tail call void @ggml_set_param(ptr noundef %40, ptr noundef %42)
  %43 = load ptr, ptr %33, align 8, !tbaa !5
  %44 = getelementptr inbounds i8, ptr %0, i64 144
  %45 = load ptr, ptr %44, align 8, !tbaa !26
  tail call void @ggml_set_param(ptr noundef %43, ptr noundef %45)
  %46 = load ptr, ptr %33, align 8, !tbaa !5
  %47 = getelementptr inbounds i8, ptr %0, i64 152
  %48 = load ptr, ptr %47, align 8, !tbaa !27
  tail call void @ggml_set_param(ptr noundef %46, ptr noundef %48)
  %49 = load ptr, ptr %33, align 8, !tbaa !5
  %50 = getelementptr inbounds i8, ptr %0, i64 160
  %51 = load ptr, ptr %50, align 8, !tbaa !28
  tail call void @ggml_set_param(ptr noundef %49, ptr noundef %51)
  %52 = load ptr, ptr %33, align 8, !tbaa !5
  %53 = getelementptr inbounds i8, ptr %0, i64 72
  %54 = load ptr, ptr %53, align 8, !tbaa !22
  %55 = getelementptr inbounds i8, ptr %54, i64 24
  %56 = load i64, ptr %55, align 8, !tbaa !29
  %57 = tail call ptr @ggml_reshape_4d(ptr noundef %52, ptr noundef %54, i64 noundef 28, i64 noundef 28, i64 noundef 1, i64 noundef %56)
  %58 = load ptr, ptr %33, align 8, !tbaa !5
  %59 = load ptr, ptr %35, align 8, !tbaa !23
  %60 = tail call ptr @ggml_conv_2d(ptr noundef %58, ptr noundef %59, ptr noundef %57, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1)
  %61 = load ptr, ptr %38, align 8, !tbaa !24
  %62 = tail call ptr @ggml_add(ptr noundef %58, ptr noundef %60, ptr noundef %61)
  %63 = tail call ptr @ggml_relu(ptr noundef %58, ptr noundef %62)
  %64 = getelementptr inbounds i8, ptr %63, i64 16
  %65 = load i64, ptr %64, align 8, !tbaa !29
  %66 = icmp eq i64 %65, 28
  br i1 %66, label %68, label %67

67:                                               ; preds = %32
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 337, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.78) #4
  unreachable

68:                                               ; preds = %32
  %69 = getelementptr inbounds i8, ptr %63, i64 24
  %70 = load i64, ptr %69, align 8, !tbaa !29
  %71 = icmp eq i64 %70, 28
  br i1 %71, label %73, label %72

72:                                               ; preds = %68
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 338, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.79) #4
  unreachable

73:                                               ; preds = %68
  %74 = getelementptr inbounds i8, ptr %63, i64 32
  %75 = load i64, ptr %74, align 8, !tbaa !29
  %76 = icmp eq i64 %75, 8
  br i1 %76, label %78, label %77

77:                                               ; preds = %73
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 339, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.80) #4
  unreachable

78:                                               ; preds = %73
  %79 = getelementptr inbounds i8, ptr %63, i64 40
  %80 = load i64, ptr %79, align 8, !tbaa !29
  %81 = getelementptr inbounds i8, ptr %0, i64 68
  %82 = load i32, ptr %81, align 4, !tbaa !30
  %83 = sext i32 %82 to i64
  %84 = icmp eq i64 %80, %83
  br i1 %84, label %86, label %85

85:                                               ; preds = %78
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 340, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.81) #4
  unreachable

86:                                               ; preds = %78
  %87 = load ptr, ptr %33, align 8, !tbaa !5
  %88 = tail call ptr @ggml_pool_2d(ptr noundef %87, ptr noundef nonnull %63, i32 noundef 0, i32 noundef 2, i32 noundef 2, i32 noundef 2, i32 noundef 2, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %89 = getelementptr inbounds i8, ptr %88, i64 16
  %90 = load i64, ptr %89, align 8, !tbaa !29
  %91 = icmp eq i64 %90, 14
  br i1 %91, label %93, label %92

92:                                               ; preds = %86
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 343, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.82) #4
  unreachable

93:                                               ; preds = %86
  %94 = getelementptr inbounds i8, ptr %88, i64 24
  %95 = load i64, ptr %94, align 8, !tbaa !29
  %96 = icmp eq i64 %95, 14
  br i1 %96, label %98, label %97

97:                                               ; preds = %93
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 344, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.83) #4
  unreachable

98:                                               ; preds = %93
  %99 = getelementptr inbounds i8, ptr %88, i64 32
  %100 = load i64, ptr %99, align 8, !tbaa !29
  %101 = icmp eq i64 %100, 8
  br i1 %101, label %103, label %102

102:                                              ; preds = %98
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 345, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.84) #4
  unreachable

103:                                              ; preds = %98
  %104 = getelementptr inbounds i8, ptr %88, i64 40
  %105 = load i64, ptr %104, align 8, !tbaa !29
  %106 = load i32, ptr %81, align 4, !tbaa !30
  %107 = sext i32 %106 to i64
  %108 = icmp eq i64 %105, %107
  br i1 %108, label %110, label %109

109:                                              ; preds = %103
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 346, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.85) #4
  unreachable

110:                                              ; preds = %103
  %111 = load ptr, ptr %33, align 8, !tbaa !5
  %112 = load ptr, ptr %41, align 8, !tbaa !25
  %113 = tail call ptr @ggml_conv_2d(ptr noundef %111, ptr noundef %112, ptr noundef nonnull %88, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1, i32 noundef 1)
  %114 = load ptr, ptr %44, align 8, !tbaa !26
  %115 = tail call ptr @ggml_add(ptr noundef %111, ptr noundef %113, ptr noundef %114)
  %116 = tail call ptr @ggml_relu(ptr noundef %111, ptr noundef %115)
  %117 = getelementptr inbounds i8, ptr %116, i64 16
  %118 = load i64, ptr %117, align 8, !tbaa !29
  %119 = icmp eq i64 %118, 14
  br i1 %119, label %121, label %120

120:                                              ; preds = %110
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 351, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.86) #4
  unreachable

121:                                              ; preds = %110
  %122 = getelementptr inbounds i8, ptr %116, i64 24
  %123 = load i64, ptr %122, align 8, !tbaa !29
  %124 = icmp eq i64 %123, 14
  br i1 %124, label %126, label %125

125:                                              ; preds = %121
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 352, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.87) #4
  unreachable

126:                                              ; preds = %121
  %127 = getelementptr inbounds i8, ptr %116, i64 32
  %128 = load i64, ptr %127, align 8, !tbaa !29
  %129 = icmp eq i64 %128, 16
  br i1 %129, label %131, label %130

130:                                              ; preds = %126
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 353, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.88) #4
  unreachable

131:                                              ; preds = %126
  %132 = getelementptr inbounds i8, ptr %116, i64 40
  %133 = load i64, ptr %132, align 8, !tbaa !29
  %134 = load i32, ptr %81, align 4, !tbaa !30
  %135 = sext i32 %134 to i64
  %136 = icmp eq i64 %133, %135
  br i1 %136, label %138, label %137

137:                                              ; preds = %131
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 354, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.89) #4
  unreachable

138:                                              ; preds = %131
  %139 = load ptr, ptr %33, align 8, !tbaa !5
  %140 = tail call ptr @ggml_pool_2d(ptr noundef %139, ptr noundef nonnull %116, i32 noundef 0, i32 noundef 2, i32 noundef 2, i32 noundef 2, i32 noundef 2, float noundef 0.000000e+00, float noundef 0.000000e+00)
  %141 = getelementptr inbounds i8, ptr %140, i64 16
  %142 = load i64, ptr %141, align 8, !tbaa !29
  %143 = icmp eq i64 %142, 7
  br i1 %143, label %145, label %144

144:                                              ; preds = %138
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 357, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.90) #4
  unreachable

145:                                              ; preds = %138
  %146 = getelementptr inbounds i8, ptr %140, i64 24
  %147 = load i64, ptr %146, align 8, !tbaa !29
  %148 = icmp eq i64 %147, 7
  br i1 %148, label %150, label %149

149:                                              ; preds = %145
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 358, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.91) #4
  unreachable

150:                                              ; preds = %145
  %151 = getelementptr inbounds i8, ptr %140, i64 32
  %152 = load i64, ptr %151, align 8, !tbaa !29
  %153 = icmp eq i64 %152, 16
  br i1 %153, label %155, label %154

154:                                              ; preds = %150
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 359, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.92) #4
  unreachable

155:                                              ; preds = %150
  %156 = getelementptr inbounds i8, ptr %140, i64 40
  %157 = load i64, ptr %156, align 8, !tbaa !29
  %158 = load i32, ptr %81, align 4, !tbaa !30
  %159 = sext i32 %158 to i64
  %160 = icmp eq i64 %157, %159
  br i1 %160, label %162, label %161

161:                                              ; preds = %155
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 360, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.93) #4
  unreachable

162:                                              ; preds = %155
  %163 = load ptr, ptr %33, align 8, !tbaa !5
  %164 = tail call ptr @ggml_permute(ptr noundef %163, ptr noundef nonnull %140, i32 noundef 1, i32 noundef 2, i32 noundef 0, i32 noundef 3)
  %165 = tail call ptr @ggml_cont(ptr noundef %163, ptr noundef %164)
  %166 = load i32, ptr %81, align 4, !tbaa !30
  %167 = sext i32 %166 to i64
  %168 = tail call ptr @ggml_reshape_2d(ptr noundef %163, ptr noundef %165, i64 noundef 784, i64 noundef %167)
  %169 = getelementptr inbounds i8, ptr %168, i64 16
  %170 = load i64, ptr %169, align 8, !tbaa !29
  %171 = icmp eq i64 %170, 784
  br i1 %171, label %173, label %172

172:                                              ; preds = %162
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 365, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.94) #4
  unreachable

173:                                              ; preds = %162
  %174 = getelementptr inbounds i8, ptr %168, i64 24
  %175 = load i64, ptr %174, align 8, !tbaa !29
  %176 = load i32, ptr %81, align 4, !tbaa !30
  %177 = sext i32 %176 to i64
  %178 = icmp eq i64 %175, %177
  br i1 %178, label %180, label %179

179:                                              ; preds = %173
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 366, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.95) #4
  unreachable

180:                                              ; preds = %173
  %181 = getelementptr inbounds i8, ptr %168, i64 32
  %182 = load i64, ptr %181, align 8, !tbaa !29
  %183 = icmp eq i64 %182, 1
  br i1 %183, label %185, label %184

184:                                              ; preds = %180
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 367, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.96) #4
  unreachable

185:                                              ; preds = %180
  %186 = getelementptr inbounds i8, ptr %168, i64 40
  %187 = load i64, ptr %186, align 8, !tbaa !29
  %188 = icmp eq i64 %187, 1
  br i1 %188, label %190, label %189

189:                                              ; preds = %185
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 368, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.97) #4
  unreachable

190:                                              ; preds = %185
  %191 = load ptr, ptr %33, align 8, !tbaa !5
  %192 = load ptr, ptr %47, align 8, !tbaa !27
  %193 = tail call ptr @ggml_mul_mat(ptr noundef %191, ptr noundef %192, ptr noundef nonnull %168)
  %194 = load ptr, ptr %50, align 8, !tbaa !28
  %195 = tail call ptr @ggml_add(ptr noundef %191, ptr noundef %193, ptr noundef %194)
  br label %197

196:                                              ; preds = %30
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 372, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.98) #4
  unreachable

197:                                              ; preds = %190, %3
  %.sink = phi ptr [ %195, %190 ], [ %29, %3 ]
  %198 = getelementptr inbounds i8, ptr %0, i64 80
  store ptr %.sink, ptr %198, align 8, !tbaa !31
  %199 = getelementptr inbounds i8, ptr %0, i64 80
  %200 = tail call ptr @ggml_set_name(ptr noundef %.sink, ptr noundef nonnull @.str.99)
  %201 = load ptr, ptr %199, align 8, !tbaa !31
  tail call void @ggml_set_output(ptr noundef %201)
  %202 = load ptr, ptr %199, align 8, !tbaa !31
  %203 = load i32, ptr %202, align 8, !tbaa !32
  %204 = icmp eq i32 %203, 0
  br i1 %204, label %206, label %205

205:                                              ; preds = %197
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 377, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.100) #4
  unreachable

206:                                              ; preds = %197
  %207 = getelementptr inbounds i8, ptr %202, i64 16
  %208 = load i64, ptr %207, align 8, !tbaa !29
  %209 = icmp eq i64 %208, 10
  br i1 %209, label %211, label %210

210:                                              ; preds = %206
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 378, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.101) #4
  unreachable

211:                                              ; preds = %206
  %212 = getelementptr inbounds i8, ptr %202, i64 24
  %213 = load i64, ptr %212, align 8, !tbaa !29
  %214 = getelementptr inbounds i8, ptr %0, i64 68
  %215 = load i32, ptr %214, align 4, !tbaa !30
  %216 = sext i32 %215 to i64
  %217 = icmp eq i64 %213, %216
  br i1 %217, label %219, label %218

218:                                              ; preds = %211
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 379, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.102) #4
  unreachable

219:                                              ; preds = %211
  %220 = getelementptr inbounds i8, ptr %202, i64 32
  %221 = load i64, ptr %220, align 8, !tbaa !29
  %222 = icmp eq i64 %221, 1
  br i1 %222, label %224, label %223

223:                                              ; preds = %219
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 380, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.103) #4
  unreachable

224:                                              ; preds = %219
  %225 = getelementptr inbounds i8, ptr %202, i64 40
  %226 = load i64, ptr %225, align 8, !tbaa !29
  %227 = icmp eq i64 %226, 1
  br i1 %227, label %229, label %228

228:                                              ; preds = %224
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str.1, i32 noundef 381, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.104) #4
  unreachable

229:                                              ; preds = %224
  ret void
}

declare void @ggml_set_param(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @ggml_relu(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @ggml_add(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @ggml_mul_mat(ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @ggml_reshape_4d(ptr noundef, ptr noundef, i64 noundef, i64 noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare ptr @ggml_conv_2d(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare ptr @ggml_pool_2d(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, float noundef, float noundef) local_unnamed_addr #2

declare ptr @ggml_reshape_2d(ptr noundef, ptr noundef, i64 noundef, i64 noundef) local_unnamed_addr #2

declare ptr @ggml_cont(ptr noundef, ptr noundef) local_unnamed_addr #2

declare ptr @ggml_permute(ptr noundef, ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #2

declare void @ggml_set_output(ptr noundef) local_unnamed_addr #2

attributes #0 = { 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 #1 = { 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 #2 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { 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, !9, i64 184}
!6 = !{!"_ZTS11mnist_model", !7, i64 0, !9, i64 32, !13, i64 40, !17, i64 64, !17, i64 68, !9, i64 72, !9, i64 80, !9, i64 88, !9, i64 96, !9, i64 104, !9, i64 112, !9, i64 120, !9, i64 128, !9, i64 136, !9, i64 144, !9, i64 152, !9, i64 160, !9, i64 168, !9, i64 176, !9, i64 184, !9, i64 192, !9, i64 200}
!7 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE", !8, i64 0, !12, i64 8, !10, i64 16}
!8 = !{!"_ZTSNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEE12_Alloc_hiderE", !9, i64 0}
!9 = !{!"any pointer", !10, i64 0}
!10 = !{!"omnipotent char", !11, i64 0}
!11 = !{!"Simple C++ TBAA"}
!12 = !{!"long", !10, i64 0}
!13 = !{!"_ZTSSt6vectorIP12ggml_backendSaIS1_EE", !14, i64 0}
!14 = !{!"_ZTSSt12_Vector_baseIP12ggml_backendSaIS1_EE", !15, i64 0}
!15 = !{!"_ZTSNSt12_Vector_baseIP12ggml_backendSaIS1_EE12_Vector_implE", !16, i64 0}
!16 = !{!"_ZTSNSt12_Vector_baseIP12ggml_backendSaIS1_EE17_Vector_impl_dataE", !9, i64 0, !9, i64 8, !9, i64 16}
!17 = !{!"int", !10, i64 0}
!18 = !{!6, !9, i64 88}
!19 = !{!6, !9, i64 96}
!20 = !{!6, !9, i64 104}
!21 = !{!6, !9, i64 112}
!22 = !{!6, !9, i64 72}
!23 = !{!6, !9, i64 120}
!24 = !{!6, !9, i64 128}
!25 = !{!6, !9, i64 136}
!26 = !{!6, !9, i64 144}
!27 = !{!6, !9, i64 152}
!28 = !{!6, !9, i64 160}
!29 = !{!12, !12, i64 0}
!30 = !{!6, !17, i64 68}
!31 = !{!6, !9, i64 80}
!32 = !{!33, !34, i64 0}
!33 = !{!"_ZTS11ggml_tensor", !34, i64 0, !9, i64 8, !10, i64 16, !10, i64 48, !35, i64 80, !10, i64 84, !17, i64 148, !10, i64 152, !9, i64 232, !12, i64 240, !9, i64 248, !10, i64 256, !9, i64 320, !10, i64 328}
!34 = !{!"_ZTS9ggml_type", !10, i64 0}
!35 = !{!"_ZTS7ggml_op", !10, i64 0}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,SROAPass,SimplifyCFGPass,TailCallElimPass