; LLVM IR from ggml-org/ggml :: tests (test-customop)

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

@g_userdata = external dso_local global [5 x i8], align 1
@g_custom1_count = external dso_local global i32, align 4
@g_custom2_count = external dso_local global i32, align 4
@g_custom3_count = external dso_local global i32, align 4
@.str = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [81 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @make_ctx() #0

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @custom1(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

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

declare ptr @ggml_get_data_f32(ptr noundef) #4

declare i64 @ggml_nelements(ptr noundef) #4

; Function Attrs: nounwind uwtable
declare dso_local void @custom2(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @custom3(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @custom(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

declare ptr @ggml_get_data(ptr noundef) #4

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: nounwind uwtable
define dso_local i32 @main(i32 noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca [1024 x float], align 16
  %7 = alloca i32, align 4
  %8 = alloca [1024 x float], align 16
  %9 = alloca i32, align 4
  %10 = alloca [1024 x float], align 16
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca i32, align 4
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca [5 x ptr], align 16
  %40 = alloca ptr, align 8
  %41 = alloca ptr, align 8
  %42 = alloca ptr, align 8
  %43 = alloca i32, align 4
  store i32 0, ptr %3, align 4
  store i32 %0, ptr %4, align 4, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4096, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %7) #6
  store i32 0, ptr %7, align 4, !tbaa !5
  br label %44

44:                                               ; preds = %55, %2
  %45 = load i32, ptr %7, align 4, !tbaa !5
  %46 = icmp slt i32 %45, 1024
  br i1 %46, label %48, label %47

47:                                               ; preds = %44
  call void @llvm.lifetime.end.p0(i64 4, ptr %7) #6
  br label %58

48:                                               ; preds = %44
  %49 = load i32, ptr %7, align 4, !tbaa !5
  %50 = add nsw i32 %49, 1
  %51 = sitofp i32 %50 to float
  %52 = load i32, ptr %7, align 4, !tbaa !5
  %53 = sext i32 %52 to i64
  %54 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 %53
  store float %51, ptr %54, align 4, !tbaa !11
  br label %55

55:                                               ; preds = %48
  %56 = load i32, ptr %7, align 4, !tbaa !5
  %57 = add nsw i32 %56, 1
  store i32 %57, ptr %7, align 4, !tbaa !5
  br label %44, !llvm.loop !13

58:                                               ; preds = %47
  call void @llvm.lifetime.start.p0(i64 4096, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #6
  store i32 0, ptr %9, align 4, !tbaa !5
  br label %59

59:                                               ; preds = %71, %58
  %60 = load i32, ptr %9, align 4, !tbaa !5
  %61 = icmp slt i32 %60, 1024
  br i1 %61, label %63, label %62

62:                                               ; preds = %59
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #6
  br label %74

63:                                               ; preds = %59
  %64 = load i32, ptr %9, align 4, !tbaa !5
  %65 = add nsw i32 %64, 1
  %66 = sitofp i32 %65 to float
  %67 = fmul float %66, 2.000000e+00
  %68 = load i32, ptr %9, align 4, !tbaa !5
  %69 = sext i32 %68 to i64
  %70 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 %69
  store float %67, ptr %70, align 4, !tbaa !11
  br label %71

71:                                               ; preds = %63
  %72 = load i32, ptr %9, align 4, !tbaa !5
  %73 = add nsw i32 %72, 1
  store i32 %73, ptr %9, align 4, !tbaa !5
  br label %59, !llvm.loop !15

74:                                               ; preds = %62
  call void @llvm.lifetime.start.p0(i64 4096, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #6
  store i32 0, ptr %11, align 4, !tbaa !5
  br label %75

75:                                               ; preds = %87, %74
  %76 = load i32, ptr %11, align 4, !tbaa !5
  %77 = icmp slt i32 %76, 1024
  br i1 %77, label %79, label %78

78:                                               ; preds = %75
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #6
  br label %90

79:                                               ; preds = %75
  %80 = load i32, ptr %11, align 4, !tbaa !5
  %81 = add nsw i32 %80, 1
  %82 = sitofp i32 %81 to float
  %83 = fmul float %82, 3.000000e+00
  %84 = load i32, ptr %11, align 4, !tbaa !5
  %85 = sext i32 %84 to i64
  %86 = getelementptr inbounds [1024 x float], ptr %10, i64 0, i64 %85
  store float %83, ptr %86, align 4, !tbaa !11
  br label %87

87:                                               ; preds = %79
  %88 = load i32, ptr %11, align 4, !tbaa !5
  %89 = add nsw i32 %88, 1
  store i32 %89, ptr %11, align 4, !tbaa !5
  br label %75, !llvm.loop !16

90:                                               ; preds = %78
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  %91 = call ptr @make_ctx()
  store ptr %91, ptr %12, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  %92 = load ptr, ptr %12, align 8, !tbaa !9
  %93 = call ptr @ggml_new_tensor_2d(ptr noundef %92, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %93, ptr %13, align 8, !tbaa !9
  %94 = load ptr, ptr %13, align 8, !tbaa !9
  %95 = getelementptr inbounds %struct.ggml_tensor, ptr %94, i32 0, i32 10
  %96 = load ptr, ptr %95, align 8, !tbaa !17
  %97 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 0
  %98 = load ptr, ptr %13, align 8, !tbaa !9
  %99 = call i64 @ggml_nbytes(ptr noundef %98)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %96, ptr align 16 %97, i64 %99, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #6
  %100 = load ptr, ptr %12, align 8, !tbaa !9
  %101 = load ptr, ptr %13, align 8, !tbaa !9
  %102 = call ptr @ggml_map_custom1(ptr noundef %100, ptr noundef %101, ptr noundef @custom1, i32 noundef 2, ptr noundef null)
  store ptr %102, ptr %14, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %103 = load ptr, ptr %12, align 8, !tbaa !9
  %104 = call ptr @ggml_new_graph(ptr noundef %103)
  store ptr %104, ptr %15, align 8, !tbaa !9
  %105 = load ptr, ptr %15, align 8, !tbaa !9
  %106 = load ptr, ptr %14, align 8, !tbaa !9
  call void @ggml_build_forward_expand(ptr noundef %105, ptr noundef %106)
  %107 = load ptr, ptr %12, align 8, !tbaa !9
  %108 = load ptr, ptr %15, align 8, !tbaa !9
  %109 = call i32 @ggml_graph_compute_with_ctx(ptr noundef %107, ptr noundef %108, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #6
  %110 = load ptr, ptr %14, align 8, !tbaa !9
  %111 = call ptr @ggml_get_data_f32(ptr noundef %110)
  store ptr %111, ptr %16, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !5
  br label %112

112:                                              ; preds = %133, %90
  %113 = load i32, ptr %17, align 4, !tbaa !5
  %114 = sext i32 %113 to i64
  %115 = load ptr, ptr %14, align 8, !tbaa !9
  %116 = call i64 @ggml_nelements(ptr noundef %115)
  %117 = icmp slt i64 %114, %116
  br i1 %117, label %119, label %118

118:                                              ; preds = %112
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  br label %136

119:                                              ; preds = %112
  %120 = load ptr, ptr %16, align 8, !tbaa !9
  %121 = load i32, ptr %17, align 4, !tbaa !5
  %122 = sext i32 %121 to i64
  %123 = getelementptr inbounds float, ptr %120, i64 %122
  %124 = load float, ptr %123, align 4, !tbaa !11
  %125 = load i32, ptr %17, align 4, !tbaa !5
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 %126
  %128 = load float, ptr %127, align 4, !tbaa !11
  %129 = fmul float %128, 2.000000e+00
  %130 = fcmp oeq float %124, %129
  br i1 %130, label %132, label %131

131:                                              ; preds = %119
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 201, ptr noundef @.str.1, ptr noundef @.str.24) #7
  unreachable

132:                                              ; preds = %119
  br label %133

133:                                              ; preds = %132
  %134 = load i32, ptr %17, align 4, !tbaa !5
  %135 = add nsw i32 %134, 1
  store i32 %135, ptr %17, align 4, !tbaa !5
  br label %112, !llvm.loop !20

136:                                              ; preds = %118
  %137 = load atomic i32, ptr @g_custom1_count seq_cst, align 4, !tbaa !21
  %138 = icmp eq i32 %137, 2
  br i1 %138, label %140, label %139

139:                                              ; preds = %136
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 203, ptr noundef @.str.1, ptr noundef @.str.25) #7
  unreachable

140:                                              ; preds = %136
  %141 = load ptr, ptr %12, align 8, !tbaa !9
  call void @ggml_free(ptr noundef %141)
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #6
  %142 = call ptr @make_ctx()
  store ptr %142, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #6
  %143 = load ptr, ptr %18, align 8, !tbaa !9
  %144 = call ptr @ggml_new_tensor_2d(ptr noundef %143, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %144, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #6
  %145 = load ptr, ptr %18, align 8, !tbaa !9
  %146 = call ptr @ggml_new_tensor_2d(ptr noundef %145, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %146, ptr %20, align 8, !tbaa !9
  %147 = load ptr, ptr %19, align 8, !tbaa !9
  %148 = getelementptr inbounds %struct.ggml_tensor, ptr %147, i32 0, i32 10
  %149 = load ptr, ptr %148, align 8, !tbaa !17
  %150 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 0
  %151 = load ptr, ptr %19, align 8, !tbaa !9
  %152 = call i64 @ggml_nbytes(ptr noundef %151)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %149, ptr align 16 %150, i64 %152, i1 false)
  %153 = load ptr, ptr %20, align 8, !tbaa !9
  %154 = getelementptr inbounds %struct.ggml_tensor, ptr %153, i32 0, i32 10
  %155 = load ptr, ptr %154, align 8, !tbaa !17
  %156 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 0
  %157 = load ptr, ptr %20, align 8, !tbaa !9
  %158 = call i64 @ggml_nbytes(ptr noundef %157)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %155, ptr align 16 %156, i64 %158, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #6
  %159 = load ptr, ptr %18, align 8, !tbaa !9
  %160 = load ptr, ptr %19, align 8, !tbaa !9
  %161 = load ptr, ptr %20, align 8, !tbaa !9
  %162 = call ptr @ggml_map_custom2(ptr noundef %159, ptr noundef %160, ptr noundef %161, ptr noundef @custom2, i32 noundef -1, ptr noundef @g_userdata)
  store ptr %162, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #6
  %163 = load ptr, ptr %18, align 8, !tbaa !9
  %164 = call ptr @ggml_new_graph(ptr noundef %163)
  store ptr %164, ptr %22, align 8, !tbaa !9
  %165 = load ptr, ptr %22, align 8, !tbaa !9
  %166 = load ptr, ptr %21, align 8, !tbaa !9
  call void @ggml_build_forward_expand(ptr noundef %165, ptr noundef %166)
  %167 = load ptr, ptr %18, align 8, !tbaa !9
  %168 = load ptr, ptr %22, align 8, !tbaa !9
  %169 = call i32 @ggml_graph_compute_with_ctx(ptr noundef %167, ptr noundef %168, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #6
  %170 = load ptr, ptr %21, align 8, !tbaa !9
  %171 = call ptr @ggml_get_data_f32(ptr noundef %170)
  store ptr %171, ptr %23, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #6
  store i32 0, ptr %24, align 4, !tbaa !5
  br label %172

172:                                              ; preds = %197, %140
  %173 = load i32, ptr %24, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = load ptr, ptr %21, align 8, !tbaa !9
  %176 = call i64 @ggml_nelements(ptr noundef %175)
  %177 = icmp slt i64 %174, %176
  br i1 %177, label %179, label %178

178:                                              ; preds = %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #6
  br label %200

179:                                              ; preds = %172
  %180 = load ptr, ptr %23, align 8, !tbaa !9
  %181 = load i32, ptr %24, align 4, !tbaa !5
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds float, ptr %180, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !11
  %185 = load i32, ptr %24, align 4, !tbaa !5
  %186 = sext i32 %185 to i64
  %187 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 %186
  %188 = load float, ptr %187, align 4, !tbaa !11
  %189 = load i32, ptr %24, align 4, !tbaa !5
  %190 = sext i32 %189 to i64
  %191 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 %190
  %192 = load float, ptr %191, align 4, !tbaa !11
  %193 = fadd float %188, %192
  %194 = fcmp oeq float %184, %193
  br i1 %194, label %196, label %195

195:                                              ; preds = %179
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 227, ptr noundef @.str.1, ptr noundef @.str.26) #7
  unreachable

196:                                              ; preds = %179
  br label %197

197:                                              ; preds = %196
  %198 = load i32, ptr %24, align 4, !tbaa !5
  %199 = add nsw i32 %198, 1
  store i32 %199, ptr %24, align 4, !tbaa !5
  br label %172, !llvm.loop !22

200:                                              ; preds = %178
  %201 = load atomic i32, ptr @g_custom2_count seq_cst, align 4, !tbaa !21
  %202 = icmp eq i32 %201, 4
  br i1 %202, label %204, label %203

203:                                              ; preds = %200
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 230, ptr noundef @.str.1, ptr noundef @.str.27) #7
  unreachable

204:                                              ; preds = %200
  %205 = load ptr, ptr %18, align 8, !tbaa !9
  call void @ggml_free(ptr noundef %205)
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #6
  %206 = call ptr @make_ctx()
  store ptr %206, ptr %25, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #6
  %207 = load ptr, ptr %25, align 8, !tbaa !9
  %208 = call ptr @ggml_new_tensor_2d(ptr noundef %207, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %208, ptr %26, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #6
  %209 = load ptr, ptr %25, align 8, !tbaa !9
  %210 = call ptr @ggml_new_tensor_2d(ptr noundef %209, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %210, ptr %27, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #6
  %211 = load ptr, ptr %25, align 8, !tbaa !9
  %212 = call ptr @ggml_new_tensor_2d(ptr noundef %211, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %212, ptr %28, align 8, !tbaa !9
  %213 = load ptr, ptr %26, align 8, !tbaa !9
  %214 = getelementptr inbounds %struct.ggml_tensor, ptr %213, i32 0, i32 10
  %215 = load ptr, ptr %214, align 8, !tbaa !17
  %216 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 0
  %217 = load ptr, ptr %26, align 8, !tbaa !9
  %218 = call i64 @ggml_nbytes(ptr noundef %217)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %215, ptr align 16 %216, i64 %218, i1 false)
  %219 = load ptr, ptr %27, align 8, !tbaa !9
  %220 = getelementptr inbounds %struct.ggml_tensor, ptr %219, i32 0, i32 10
  %221 = load ptr, ptr %220, align 8, !tbaa !17
  %222 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 0
  %223 = load ptr, ptr %27, align 8, !tbaa !9
  %224 = call i64 @ggml_nbytes(ptr noundef %223)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %221, ptr align 16 %222, i64 %224, i1 false)
  %225 = load ptr, ptr %28, align 8, !tbaa !9
  %226 = getelementptr inbounds %struct.ggml_tensor, ptr %225, i32 0, i32 10
  %227 = load ptr, ptr %226, align 8, !tbaa !17
  %228 = getelementptr inbounds [1024 x float], ptr %10, i64 0, i64 0
  %229 = load ptr, ptr %28, align 8, !tbaa !9
  %230 = call i64 @ggml_nbytes(ptr noundef %229)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %227, ptr align 16 %228, i64 %230, i1 false)
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #6
  %231 = load ptr, ptr %25, align 8, !tbaa !9
  %232 = load ptr, ptr %26, align 8, !tbaa !9
  %233 = load ptr, ptr %27, align 8, !tbaa !9
  %234 = load ptr, ptr %28, align 8, !tbaa !9
  %235 = call ptr @ggml_map_custom3(ptr noundef %231, ptr noundef %232, ptr noundef %233, ptr noundef %234, ptr noundef @custom3, i32 noundef 1, ptr noundef @g_userdata)
  store ptr %235, ptr %29, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #6
  %236 = load ptr, ptr %25, align 8, !tbaa !9
  %237 = call ptr @ggml_new_graph(ptr noundef %236)
  store ptr %237, ptr %30, align 8, !tbaa !9
  %238 = load ptr, ptr %30, align 8, !tbaa !9
  %239 = load ptr, ptr %29, align 8, !tbaa !9
  call void @ggml_build_forward_expand(ptr noundef %238, ptr noundef %239)
  %240 = load ptr, ptr %25, align 8, !tbaa !9
  %241 = load ptr, ptr %30, align 8, !tbaa !9
  %242 = call i32 @ggml_graph_compute_with_ctx(ptr noundef %240, ptr noundef %241, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #6
  %243 = load ptr, ptr %29, align 8, !tbaa !9
  %244 = call ptr @ggml_get_data_f32(ptr noundef %243)
  store ptr %244, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #6
  store i32 0, ptr %32, align 4, !tbaa !5
  br label %245

245:                                              ; preds = %275, %204
  %246 = load i32, ptr %32, align 4, !tbaa !5
  %247 = sext i32 %246 to i64
  %248 = load ptr, ptr %29, align 8, !tbaa !9
  %249 = call i64 @ggml_nelements(ptr noundef %248)
  %250 = icmp slt i64 %247, %249
  br i1 %250, label %252, label %251

251:                                              ; preds = %245
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #6
  br label %278

252:                                              ; preds = %245
  %253 = load ptr, ptr %31, align 8, !tbaa !9
  %254 = load i32, ptr %32, align 4, !tbaa !5
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds float, ptr %253, i64 %255
  %257 = load float, ptr %256, align 4, !tbaa !11
  %258 = load i32, ptr %32, align 4, !tbaa !5
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 %259
  %261 = load float, ptr %260, align 4, !tbaa !11
  %262 = load i32, ptr %32, align 4, !tbaa !5
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 %263
  %265 = load float, ptr %264, align 4, !tbaa !11
  %266 = fadd float %261, %265
  %267 = load i32, ptr %32, align 4, !tbaa !5
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds [1024 x float], ptr %10, i64 0, i64 %268
  %270 = load float, ptr %269, align 4, !tbaa !11
  %271 = fadd float %266, %270
  %272 = fcmp oeq float %257, %271
  br i1 %272, label %274, label %273

273:                                              ; preds = %252
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 257, ptr noundef @.str.1, ptr noundef @.str.28) #7
  unreachable

274:                                              ; preds = %252
  br label %275

275:                                              ; preds = %274
  %276 = load i32, ptr %32, align 4, !tbaa !5
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %32, align 4, !tbaa !5
  br label %245, !llvm.loop !23

278:                                              ; preds = %251
  %279 = load atomic i32, ptr @g_custom3_count seq_cst, align 4, !tbaa !21
  %280 = icmp eq i32 %279, 1
  br i1 %280, label %282, label %281

281:                                              ; preds = %278
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 260, ptr noundef @.str.1, ptr noundef @.str.29) #7
  unreachable

282:                                              ; preds = %278
  %283 = load ptr, ptr %25, align 8, !tbaa !9
  call void @ggml_free(ptr noundef %283)
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #6
  %284 = call ptr @make_ctx()
  store ptr %284, ptr %33, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #6
  %285 = load ptr, ptr %33, align 8, !tbaa !9
  %286 = call ptr @ggml_new_tensor_2d(ptr noundef %285, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %286, ptr %34, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #6
  %287 = load ptr, ptr %33, align 8, !tbaa !9
  %288 = call ptr @ggml_new_tensor_2d(ptr noundef %287, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %288, ptr %35, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #6
  %289 = load ptr, ptr %33, align 8, !tbaa !9
  %290 = call ptr @ggml_new_tensor_2d(ptr noundef %289, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %290, ptr %36, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #6
  %291 = load ptr, ptr %33, align 8, !tbaa !9
  %292 = call ptr @ggml_new_tensor_2d(ptr noundef %291, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %292, ptr %37, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #6
  %293 = load ptr, ptr %33, align 8, !tbaa !9
  %294 = call ptr @ggml_new_tensor_2d(ptr noundef %293, i32 noundef 0, i64 noundef 10, i64 noundef 2)
  store ptr %294, ptr %38, align 8, !tbaa !9
  %295 = load ptr, ptr %34, align 8, !tbaa !9
  %296 = getelementptr inbounds %struct.ggml_tensor, ptr %295, i32 0, i32 10
  %297 = load ptr, ptr %296, align 8, !tbaa !17
  %298 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 0
  %299 = load ptr, ptr %34, align 8, !tbaa !9
  %300 = call i64 @ggml_nbytes(ptr noundef %299)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %297, ptr align 16 %298, i64 %300, i1 false)
  %301 = load ptr, ptr %35, align 8, !tbaa !9
  %302 = getelementptr inbounds %struct.ggml_tensor, ptr %301, i32 0, i32 10
  %303 = load ptr, ptr %302, align 8, !tbaa !17
  %304 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 0
  %305 = load ptr, ptr %35, align 8, !tbaa !9
  %306 = call i64 @ggml_nbytes(ptr noundef %305)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %303, ptr align 16 %304, i64 %306, i1 false)
  %307 = load ptr, ptr %36, align 8, !tbaa !9
  %308 = getelementptr inbounds %struct.ggml_tensor, ptr %307, i32 0, i32 10
  %309 = load ptr, ptr %308, align 8, !tbaa !17
  %310 = getelementptr inbounds [1024 x float], ptr %10, i64 0, i64 0
  %311 = load ptr, ptr %36, align 8, !tbaa !9
  %312 = call i64 @ggml_nbytes(ptr noundef %311)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %309, ptr align 16 %310, i64 %312, i1 false)
  %313 = load ptr, ptr %37, align 8, !tbaa !9
  %314 = getelementptr inbounds %struct.ggml_tensor, ptr %313, i32 0, i32 10
  %315 = load ptr, ptr %314, align 8, !tbaa !17
  %316 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 0
  %317 = load ptr, ptr %37, align 8, !tbaa !9
  %318 = call i64 @ggml_nbytes(ptr noundef %317)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %315, ptr align 16 %316, i64 %318, i1 false)
  %319 = load ptr, ptr %38, align 8, !tbaa !9
  %320 = getelementptr inbounds %struct.ggml_tensor, ptr %319, i32 0, i32 10
  %321 = load ptr, ptr %320, align 8, !tbaa !17
  %322 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 0
  %323 = load ptr, ptr %38, align 8, !tbaa !9
  %324 = call i64 @ggml_nbytes(ptr noundef %323)
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %321, ptr align 16 %322, i64 %324, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr %39) #6
  %325 = load ptr, ptr %34, align 8, !tbaa !9
  store ptr %325, ptr %39, align 8, !tbaa !9
  %326 = getelementptr inbounds ptr, ptr %39, i64 1
  %327 = load ptr, ptr %35, align 8, !tbaa !9
  store ptr %327, ptr %326, align 8, !tbaa !9
  %328 = getelementptr inbounds ptr, ptr %39, i64 2
  %329 = load ptr, ptr %36, align 8, !tbaa !9
  store ptr %329, ptr %328, align 8, !tbaa !9
  %330 = getelementptr inbounds ptr, ptr %39, i64 3
  %331 = load ptr, ptr %37, align 8, !tbaa !9
  store ptr %331, ptr %330, align 8, !tbaa !9
  %332 = getelementptr inbounds ptr, ptr %39, i64 4
  %333 = load ptr, ptr %38, align 8, !tbaa !9
  store ptr %333, ptr %332, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #6
  %334 = load ptr, ptr %33, align 8, !tbaa !9
  %335 = getelementptr inbounds [5 x ptr], ptr %39, i64 0, i64 0
  %336 = call ptr @ggml_custom_4d(ptr noundef %334, i32 noundef 26, i64 noundef 10, i64 noundef 2, i64 noundef 1, i64 noundef 1, ptr noundef %335, i32 noundef 5, ptr noundef @custom, i32 noundef -1, ptr noundef @g_userdata)
  store ptr %336, ptr %40, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #6
  %337 = load ptr, ptr %33, align 8, !tbaa !9
  %338 = call ptr @ggml_new_graph(ptr noundef %337)
  store ptr %338, ptr %41, align 8, !tbaa !9
  %339 = load ptr, ptr %41, align 8, !tbaa !9
  %340 = load ptr, ptr %40, align 8, !tbaa !9
  call void @ggml_build_forward_expand(ptr noundef %339, ptr noundef %340)
  %341 = load ptr, ptr %33, align 8, !tbaa !9
  %342 = load ptr, ptr %41, align 8, !tbaa !9
  %343 = call i32 @ggml_graph_compute_with_ctx(ptr noundef %341, ptr noundef %342, i32 noundef 4)
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #6
  %344 = load ptr, ptr %40, align 8, !tbaa !9
  %345 = call ptr @ggml_get_data(ptr noundef %344)
  store ptr %345, ptr %42, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #6
  store i32 0, ptr %43, align 4, !tbaa !5
  br label %346

346:                                              ; preds = %386, %282
  %347 = load i32, ptr %43, align 4, !tbaa !5
  %348 = sext i32 %347 to i64
  %349 = load ptr, ptr %40, align 8, !tbaa !9
  %350 = call i64 @ggml_nelements(ptr noundef %349)
  %351 = icmp slt i64 %348, %350
  br i1 %351, label %353, label %352

352:                                              ; preds = %346
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #6
  br label %389

353:                                              ; preds = %346
  %354 = load ptr, ptr %42, align 8, !tbaa !9
  %355 = load i32, ptr %43, align 4, !tbaa !5
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  %358 = load i32, ptr %357, align 4, !tbaa !5
  %359 = sitofp i32 %358 to float
  %360 = load i32, ptr %43, align 4, !tbaa !5
  %361 = sext i32 %360 to i64
  %362 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 %361
  %363 = load float, ptr %362, align 4, !tbaa !11
  %364 = load i32, ptr %43, align 4, !tbaa !5
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 %365
  %367 = load float, ptr %366, align 4, !tbaa !11
  %368 = load i32, ptr %43, align 4, !tbaa !5
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds [1024 x float], ptr %10, i64 0, i64 %369
  %371 = load float, ptr %370, align 4, !tbaa !11
  %372 = call float @llvm.fmuladd.f32(float %367, float %371, float %363)
  %373 = load i32, ptr %43, align 4, !tbaa !5
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds [1024 x float], ptr %6, i64 0, i64 %374
  %376 = load float, ptr %375, align 4, !tbaa !11
  %377 = load i32, ptr %43, align 4, !tbaa !5
  %378 = sext i32 %377 to i64
  %379 = getelementptr inbounds [1024 x float], ptr %8, i64 0, i64 %378
  %380 = load float, ptr %379, align 4, !tbaa !11
  %381 = fneg float %376
  %382 = call float @llvm.fmuladd.f32(float %381, float %380, float %372)
  %383 = fcmp oeq float %359, %382
  br i1 %383, label %385, label %384

384:                                              ; preds = %353
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef @.str, i32 noundef 293, ptr noundef @.str.1, ptr noundef @.str.30) #7
  unreachable

385:                                              ; preds = %353
  br label %386

386:                                              ; preds = %385
  %387 = load i32, ptr %43, align 4, !tbaa !5
  %388 = add nsw i32 %387, 1
  store i32 %388, ptr %43, align 4, !tbaa !5
  br label %346, !llvm.loop !24

389:                                              ; preds = %352
  %390 = load ptr, ptr %33, align 8, !tbaa !9
  call void @ggml_free(ptr noundef %390)
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr %39) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #6
  call void @llvm.lifetime.end.p0(i64 4096, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 4096, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 4096, ptr %6) #6
  ret i32 0
}

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

declare i64 @ggml_nbytes(ptr noundef) #4

declare ptr @ggml_map_custom1(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

declare ptr @ggml_new_graph(ptr noundef) #4

declare void @ggml_build_forward_expand(ptr noundef, ptr noundef) #4

declare i32 @ggml_graph_compute_with_ctx(ptr noundef, ptr noundef, i32 noundef) #4

declare void @ggml_free(ptr noundef) #4

declare ptr @ggml_map_custom2(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

declare ptr @ggml_map_custom3(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) #4

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

attributes #0 = { 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 #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = !{!18, !10, i64 248}
!18 = !{!"ggml_tensor", !6, i64 0, !10, i64 8, !7, i64 16, !7, i64 48, !6, i64 80, !7, i64 84, !6, i64 148, !7, i64 152, !10, i64 232, !19, i64 240, !10, i64 248, !7, i64 256, !10, i64 320, !7, i64 328}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !14}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !14}
!23 = distinct !{!23, !14}
!24 = distinct !{!24, !14}


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

@g_userdata = external dso_local global [5 x i8], align 1
@g_custom1_count = external dso_local local_unnamed_addr global i32, align 4
@g_custom2_count = external dso_local local_unnamed_addr global i32, align 4
@g_custom3_count = external dso_local local_unnamed_addr global i32, align 4
@.str = external hidden unnamed_addr constant [69 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [23 x i8], align 1
@.str.24 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.25 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.26 = external hidden unnamed_addr constant [39 x i8], align 1
@.str.27 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.28 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.29 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.30 = external hidden unnamed_addr constant [81 x i8], align 1

; Function Attrs: nounwind uwtable
declare dso_local ptr @make_ctx() local_unnamed_addr #0

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @custom1(ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

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

declare ptr @ggml_get_data_f32(ptr noundef) local_unnamed_addr #4

declare i64 @ggml_nelements(ptr noundef) local_unnamed_addr #4

; Function Attrs: nounwind uwtable
declare dso_local void @custom2(ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @custom3(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

; Function Attrs: nounwind uwtable
declare dso_local void @custom(ptr noundef, i32 noundef, i32 noundef, ptr noundef) #0

declare ptr @ggml_get_data(ptr noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare float @llvm.fmuladd.f32(float, float, float) #5

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @main(i32 noundef %0, ptr nocapture noundef readnone %1) local_unnamed_addr #0 {
vector.ph:
  %2 = alloca [1024 x float], align 16
  %3 = alloca [1024 x float], align 16
  %4 = alloca [1024 x float], align 16
  %5 = alloca [5 x ptr], align 16
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %2) #6
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %vec.ind = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %vector.ph ], [ %vec.ind.next, %vector.body ]
  %6 = trunc <4 x i64> %vec.ind to <4 x i32>
  %7 = add <4 x i32> %6, <i32 1, i32 1, i32 1, i32 1>
  %8 = trunc <4 x i64> %vec.ind to <4 x i32>
  %9 = add <4 x i32> %8, <i32 5, i32 5, i32 5, i32 5>
  %10 = uitofp <4 x i32> %7 to <4 x float>
  %11 = uitofp <4 x i32> %9 to <4 x float>
  %12 = getelementptr inbounds [1024 x float], ptr %2, i64 0, i64 %index
  %13 = getelementptr inbounds i8, ptr %12, i64 16
  store <4 x float> %10, ptr %12, align 16, !tbaa !5
  store <4 x float> %11, ptr %13, align 16, !tbaa !5
  %index.next = add nuw i64 %index, 8
  %vec.ind.next = add <4 x i64> %vec.ind, <i64 8, i64 8, i64 8, i64 8>
  %14 = icmp eq i64 %index.next, 1024
  br i1 %14, label %middle.block, label %vector.body, !llvm.loop !9

middle.block:                                     ; preds = %vector.body
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %3) #6
  br label %vector.body170

vector.body170:                                   ; preds = %vector.body170, %middle.block
  %index171 = phi i64 [ 0, %middle.block ], [ %index.next176, %vector.body170 ]
  %vec.ind172 = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %middle.block ], [ %vec.ind.next175, %vector.body170 ]
  %15 = trunc <4 x i64> %vec.ind172 to <4 x i32>
  %16 = add <4 x i32> %15, <i32 1, i32 1, i32 1, i32 1>
  %17 = trunc <4 x i64> %vec.ind172 to <4 x i32>
  %18 = add <4 x i32> %17, <i32 5, i32 5, i32 5, i32 5>
  %19 = uitofp <4 x i32> %16 to <4 x float>
  %20 = uitofp <4 x i32> %18 to <4 x float>
  %21 = fmul <4 x float> %19, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %22 = fmul <4 x float> %20, <float 2.000000e+00, float 2.000000e+00, float 2.000000e+00, float 2.000000e+00>
  %23 = getelementptr inbounds [1024 x float], ptr %3, i64 0, i64 %index171
  %24 = getelementptr inbounds i8, ptr %23, i64 16
  store <4 x float> %21, ptr %23, align 16, !tbaa !5
  store <4 x float> %22, ptr %24, align 16, !tbaa !5
  %index.next176 = add nuw i64 %index171, 8
  %vec.ind.next175 = add <4 x i64> %vec.ind172, <i64 8, i64 8, i64 8, i64 8>
  %25 = icmp eq i64 %index.next176, 1024
  br i1 %25, label %middle.block166, label %vector.body170, !llvm.loop !13

middle.block166:                                  ; preds = %vector.body170
  call void @llvm.lifetime.start.p0(i64 4096, ptr nonnull %4) #6
  br label %vector.body181

vector.body181:                                   ; preds = %vector.body181, %middle.block166
  %index182 = phi i64 [ 0, %middle.block166 ], [ %index.next187, %vector.body181 ]
  %vec.ind183 = phi <4 x i64> [ <i64 0, i64 1, i64 2, i64 3>, %middle.block166 ], [ %vec.ind.next186, %vector.body181 ]
  %26 = trunc <4 x i64> %vec.ind183 to <4 x i32>
  %27 = add <4 x i32> %26, <i32 1, i32 1, i32 1, i32 1>
  %28 = trunc <4 x i64> %vec.ind183 to <4 x i32>
  %29 = add <4 x i32> %28, <i32 5, i32 5, i32 5, i32 5>
  %30 = uitofp <4 x i32> %27 to <4 x float>
  %31 = uitofp <4 x i32> %29 to <4 x float>
  %32 = fmul <4 x float> %30, <float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00>
  %33 = fmul <4 x float> %31, <float 3.000000e+00, float 3.000000e+00, float 3.000000e+00, float 3.000000e+00>
  %34 = getelementptr inbounds [1024 x float], ptr %4, i64 0, i64 %index182
  %35 = getelementptr inbounds i8, ptr %34, i64 16
  store <4 x float> %32, ptr %34, align 16, !tbaa !5
  store <4 x float> %33, ptr %35, align 16, !tbaa !5
  %index.next187 = add nuw i64 %index182, 8
  %vec.ind.next186 = add <4 x i64> %vec.ind183, <i64 8, i64 8, i64 8, i64 8>
  %36 = icmp eq i64 %index.next187, 1024
  br i1 %36, label %middle.block177, label %vector.body181, !llvm.loop !14

middle.block177:                                  ; preds = %vector.body181
  %37 = tail call ptr @make_ctx()
  %38 = tail call ptr @ggml_new_tensor_2d(ptr noundef %37, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %39 = getelementptr inbounds i8, ptr %38, i64 248
  %40 = load ptr, ptr %39, align 8, !tbaa !15
  %41 = tail call i64 @ggml_nbytes(ptr noundef %38) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %40, ptr nonnull align 16 %2, i64 %41, i1 false)
  %42 = tail call ptr @ggml_map_custom1(ptr noundef %37, ptr noundef %38, ptr noundef nonnull @custom1, i32 noundef 2, ptr noundef null) #6
  %43 = tail call ptr @ggml_new_graph(ptr noundef %37) #6
  tail call void @ggml_build_forward_expand(ptr noundef %43, ptr noundef %42) #6
  %44 = tail call i32 @ggml_graph_compute_with_ctx(ptr noundef %37, ptr noundef %43, i32 noundef 4) #6
  %45 = tail call ptr @ggml_get_data_f32(ptr noundef %42) #6
  %46 = tail call i64 @ggml_nelements(ptr noundef %42) #6
  %47 = icmp sgt i64 %46, 0
  br i1 %47, label %.lr.ph, label %._crit_edge

48:                                               ; preds = %.lr.ph
  %indvars.iv.next154 = add nuw nsw i64 %indvars.iv153, 1
  %49 = tail call i64 @ggml_nelements(ptr noundef %42) #6
  %50 = icmp sgt i64 %49, %indvars.iv.next154
  br i1 %50, label %.lr.ph, label %._crit_edge, !llvm.loop !20

._crit_edge:                                      ; preds = %48, %middle.block177
  %51 = load atomic i32, ptr @g_custom1_count seq_cst, align 4, !tbaa !21
  %52 = icmp eq i32 %51, 2
  br i1 %52, label %61, label %60

.lr.ph:                                           ; preds = %middle.block177, %48
  %indvars.iv153 = phi i64 [ %indvars.iv.next154, %48 ], [ 0, %middle.block177 ]
  %53 = getelementptr inbounds float, ptr %45, i64 %indvars.iv153
  %54 = load float, ptr %53, align 4, !tbaa !5
  %55 = getelementptr inbounds [1024 x float], ptr %2, i64 0, i64 %indvars.iv153
  %56 = load float, ptr %55, align 4, !tbaa !5
  %57 = fmul float %56, 2.000000e+00
  %58 = fcmp oeq float %54, %57
  br i1 %58, label %48, label %59

59:                                               ; preds = %.lr.ph
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 201, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.24) #7
  unreachable

60:                                               ; preds = %._crit_edge
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 203, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.25) #7
  unreachable

61:                                               ; preds = %._crit_edge
  tail call void @ggml_free(ptr noundef %37) #6
  %62 = tail call ptr @make_ctx()
  %63 = tail call ptr @ggml_new_tensor_2d(ptr noundef %62, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %64 = tail call ptr @ggml_new_tensor_2d(ptr noundef %62, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %65 = getelementptr inbounds i8, ptr %63, i64 248
  %66 = load ptr, ptr %65, align 8, !tbaa !15
  %67 = tail call i64 @ggml_nbytes(ptr noundef %63) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %66, ptr nonnull align 16 %2, i64 %67, i1 false)
  %68 = getelementptr inbounds i8, ptr %64, i64 248
  %69 = load ptr, ptr %68, align 8, !tbaa !15
  %70 = tail call i64 @ggml_nbytes(ptr noundef %64) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %69, ptr nonnull align 16 %3, i64 %70, i1 false)
  %71 = tail call ptr @ggml_map_custom2(ptr noundef %62, ptr noundef %63, ptr noundef %64, ptr noundef nonnull @custom2, i32 noundef -1, ptr noundef nonnull @g_userdata) #6
  %72 = tail call ptr @ggml_new_graph(ptr noundef %62) #6
  tail call void @ggml_build_forward_expand(ptr noundef %72, ptr noundef %71) #6
  %73 = tail call i32 @ggml_graph_compute_with_ctx(ptr noundef %62, ptr noundef %72, i32 noundef 4) #6
  %74 = tail call ptr @ggml_get_data_f32(ptr noundef %71) #6
  %75 = tail call i64 @ggml_nelements(ptr noundef %71) #6
  %76 = icmp sgt i64 %75, 0
  br i1 %76, label %.lr.ph134, label %._crit_edge135

77:                                               ; preds = %.lr.ph134
  %indvars.iv.next157 = add nuw nsw i64 %indvars.iv156, 1
  %78 = tail call i64 @ggml_nelements(ptr noundef %71) #6
  %79 = icmp sgt i64 %78, %indvars.iv.next157
  br i1 %79, label %.lr.ph134, label %._crit_edge135, !llvm.loop !22

._crit_edge135:                                   ; preds = %77, %61
  %80 = load atomic i32, ptr @g_custom2_count seq_cst, align 4, !tbaa !21
  %81 = icmp eq i32 %80, 4
  br i1 %81, label %92, label %91

.lr.ph134:                                        ; preds = %61, %77
  %indvars.iv156 = phi i64 [ %indvars.iv.next157, %77 ], [ 0, %61 ]
  %82 = getelementptr inbounds float, ptr %74, i64 %indvars.iv156
  %83 = load float, ptr %82, align 4, !tbaa !5
  %84 = getelementptr inbounds [1024 x float], ptr %2, i64 0, i64 %indvars.iv156
  %85 = load float, ptr %84, align 4, !tbaa !5
  %86 = getelementptr inbounds [1024 x float], ptr %3, i64 0, i64 %indvars.iv156
  %87 = load float, ptr %86, align 4, !tbaa !5
  %88 = fadd float %85, %87
  %89 = fcmp oeq float %83, %88
  br i1 %89, label %77, label %90

90:                                               ; preds = %.lr.ph134
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 227, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.26) #7
  unreachable

91:                                               ; preds = %._crit_edge135
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 230, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.27) #7
  unreachable

92:                                               ; preds = %._crit_edge135
  tail call void @ggml_free(ptr noundef %62) #6
  %93 = tail call ptr @make_ctx()
  %94 = tail call ptr @ggml_new_tensor_2d(ptr noundef %93, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %95 = tail call ptr @ggml_new_tensor_2d(ptr noundef %93, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %96 = tail call ptr @ggml_new_tensor_2d(ptr noundef %93, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %97 = getelementptr inbounds i8, ptr %94, i64 248
  %98 = load ptr, ptr %97, align 8, !tbaa !15
  %99 = tail call i64 @ggml_nbytes(ptr noundef %94) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %98, ptr nonnull align 16 %2, i64 %99, i1 false)
  %100 = getelementptr inbounds i8, ptr %95, i64 248
  %101 = load ptr, ptr %100, align 8, !tbaa !15
  %102 = tail call i64 @ggml_nbytes(ptr noundef %95) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %101, ptr nonnull align 16 %3, i64 %102, i1 false)
  %103 = getelementptr inbounds i8, ptr %96, i64 248
  %104 = load ptr, ptr %103, align 8, !tbaa !15
  %105 = tail call i64 @ggml_nbytes(ptr noundef %96) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %104, ptr nonnull align 16 %4, i64 %105, i1 false)
  %106 = tail call ptr @ggml_map_custom3(ptr noundef %93, ptr noundef %94, ptr noundef %95, ptr noundef %96, ptr noundef nonnull @custom3, i32 noundef 1, ptr noundef nonnull @g_userdata) #6
  %107 = tail call ptr @ggml_new_graph(ptr noundef %93) #6
  tail call void @ggml_build_forward_expand(ptr noundef %107, ptr noundef %106) #6
  %108 = tail call i32 @ggml_graph_compute_with_ctx(ptr noundef %93, ptr noundef %107, i32 noundef 4) #6
  %109 = tail call ptr @ggml_get_data_f32(ptr noundef %106) #6
  %110 = tail call i64 @ggml_nelements(ptr noundef %106) #6
  %111 = icmp sgt i64 %110, 0
  br i1 %111, label %.lr.ph138, label %._crit_edge139

112:                                              ; preds = %.lr.ph138
  %indvars.iv.next160 = add nuw nsw i64 %indvars.iv159, 1
  %113 = tail call i64 @ggml_nelements(ptr noundef %106) #6
  %114 = icmp sgt i64 %113, %indvars.iv.next160
  br i1 %114, label %.lr.ph138, label %._crit_edge139, !llvm.loop !23

._crit_edge139:                                   ; preds = %112, %92
  %115 = load atomic i32, ptr @g_custom3_count seq_cst, align 4, !tbaa !21
  %116 = icmp eq i32 %115, 1
  br i1 %116, label %130, label %129

.lr.ph138:                                        ; preds = %92, %112
  %indvars.iv159 = phi i64 [ %indvars.iv.next160, %112 ], [ 0, %92 ]
  %117 = getelementptr inbounds float, ptr %109, i64 %indvars.iv159
  %118 = load float, ptr %117, align 4, !tbaa !5
  %119 = getelementptr inbounds [1024 x float], ptr %2, i64 0, i64 %indvars.iv159
  %120 = load float, ptr %119, align 4, !tbaa !5
  %121 = getelementptr inbounds [1024 x float], ptr %3, i64 0, i64 %indvars.iv159
  %122 = load float, ptr %121, align 4, !tbaa !5
  %123 = fadd float %120, %122
  %124 = getelementptr inbounds [1024 x float], ptr %4, i64 0, i64 %indvars.iv159
  %125 = load float, ptr %124, align 4, !tbaa !5
  %126 = fadd float %123, %125
  %127 = fcmp oeq float %118, %126
  br i1 %127, label %112, label %128

128:                                              ; preds = %.lr.ph138
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 257, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.28) #7
  unreachable

129:                                              ; preds = %._crit_edge139
  tail call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 260, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.29) #7
  unreachable

130:                                              ; preds = %._crit_edge139
  tail call void @ggml_free(ptr noundef %93) #6
  %131 = tail call ptr @make_ctx()
  %132 = tail call ptr @ggml_new_tensor_2d(ptr noundef %131, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %133 = tail call ptr @ggml_new_tensor_2d(ptr noundef %131, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %134 = tail call ptr @ggml_new_tensor_2d(ptr noundef %131, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %135 = tail call ptr @ggml_new_tensor_2d(ptr noundef %131, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %136 = tail call ptr @ggml_new_tensor_2d(ptr noundef %131, i32 noundef 0, i64 noundef 10, i64 noundef 2) #6
  %137 = getelementptr inbounds i8, ptr %132, i64 248
  %138 = load ptr, ptr %137, align 8, !tbaa !15
  %139 = tail call i64 @ggml_nbytes(ptr noundef %132) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %138, ptr nonnull align 16 %2, i64 %139, i1 false)
  %140 = getelementptr inbounds i8, ptr %133, i64 248
  %141 = load ptr, ptr %140, align 8, !tbaa !15
  %142 = tail call i64 @ggml_nbytes(ptr noundef %133) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %141, ptr nonnull align 16 %3, i64 %142, i1 false)
  %143 = getelementptr inbounds i8, ptr %134, i64 248
  %144 = load ptr, ptr %143, align 8, !tbaa !15
  %145 = tail call i64 @ggml_nbytes(ptr noundef %134) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %144, ptr nonnull align 16 %4, i64 %145, i1 false)
  %146 = getelementptr inbounds i8, ptr %135, i64 248
  %147 = load ptr, ptr %146, align 8, !tbaa !15
  %148 = tail call i64 @ggml_nbytes(ptr noundef %135) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %147, ptr nonnull align 16 %2, i64 %148, i1 false)
  %149 = getelementptr inbounds i8, ptr %136, i64 248
  %150 = load ptr, ptr %149, align 8, !tbaa !15
  %151 = tail call i64 @ggml_nbytes(ptr noundef %136) #6
  call void @llvm.memcpy.p0.p0.i64(ptr align 1 %150, ptr nonnull align 16 %3, i64 %151, i1 false)
  call void @llvm.lifetime.start.p0(i64 40, ptr nonnull %5) #6
  store ptr %132, ptr %5, align 16, !tbaa !24
  %152 = getelementptr inbounds i8, ptr %5, i64 8
  store ptr %133, ptr %152, align 8, !tbaa !24
  %153 = getelementptr inbounds i8, ptr %5, i64 16
  store ptr %134, ptr %153, align 16, !tbaa !24
  %154 = getelementptr inbounds i8, ptr %5, i64 24
  store ptr %135, ptr %154, align 8, !tbaa !24
  %155 = getelementptr inbounds i8, ptr %5, i64 32
  store ptr %136, ptr %155, align 16, !tbaa !24
  %156 = call ptr @ggml_custom_4d(ptr noundef %131, i32 noundef 26, i64 noundef 10, i64 noundef 2, i64 noundef 1, i64 noundef 1, ptr noundef nonnull %5, i32 noundef 5, ptr noundef nonnull @custom, i32 noundef -1, ptr noundef nonnull @g_userdata) #6
  %157 = call ptr @ggml_new_graph(ptr noundef %131) #6
  call void @ggml_build_forward_expand(ptr noundef %157, ptr noundef %156) #6
  %158 = call i32 @ggml_graph_compute_with_ctx(ptr noundef %131, ptr noundef %157, i32 noundef 4) #6
  %159 = call ptr @ggml_get_data(ptr noundef %156) #6
  %160 = call i64 @ggml_nelements(ptr noundef %156) #6
  %161 = icmp sgt i64 %160, 0
  br i1 %161, label %.lr.ph142, label %._crit_edge143

162:                                              ; preds = %.lr.ph142
  %indvars.iv.next163 = add nuw nsw i64 %indvars.iv162, 1
  %163 = call i64 @ggml_nelements(ptr noundef %156) #6
  %164 = icmp sgt i64 %163, %indvars.iv.next163
  br i1 %164, label %.lr.ph142, label %._crit_edge143, !llvm.loop !25

._crit_edge143:                                   ; preds = %162, %130
  call void @ggml_free(ptr noundef %131) #6
  call void @llvm.lifetime.end.p0(i64 40, ptr nonnull %5) #6
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %4) #6
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %3) #6
  call void @llvm.lifetime.end.p0(i64 4096, ptr nonnull %2) #6
  ret i32 0

.lr.ph142:                                        ; preds = %130, %162
  %indvars.iv162 = phi i64 [ %indvars.iv.next163, %162 ], [ 0, %130 ]
  %165 = getelementptr inbounds i32, ptr %159, i64 %indvars.iv162
  %166 = load i32, ptr %165, align 4, !tbaa !26
  %167 = sitofp i32 %166 to float
  %168 = getelementptr inbounds [1024 x float], ptr %2, i64 0, i64 %indvars.iv162
  %169 = load float, ptr %168, align 4, !tbaa !5
  %170 = getelementptr inbounds [1024 x float], ptr %3, i64 0, i64 %indvars.iv162
  %171 = load float, ptr %170, align 4, !tbaa !5
  %172 = getelementptr inbounds [1024 x float], ptr %4, i64 0, i64 %indvars.iv162
  %173 = load float, ptr %172, align 4, !tbaa !5
  %174 = call float @llvm.fmuladd.f32(float %171, float %173, float %169)
  %175 = fneg float %169
  %176 = call float @llvm.fmuladd.f32(float %175, float %171, float %174)
  %177 = fcmp oeq float %176, %167
  br i1 %177, label %162, label %178

178:                                              ; preds = %.lr.ph142
  call void (ptr, i32, ptr, ...) @ggml_abort(ptr noundef nonnull @.str, i32 noundef 293, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.30) #7
  unreachable
}

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

declare i64 @ggml_nbytes(ptr noundef) local_unnamed_addr #4

declare ptr @ggml_map_custom1(ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare ptr @ggml_new_graph(ptr noundef) local_unnamed_addr #4

declare void @ggml_build_forward_expand(ptr noundef, ptr noundef) local_unnamed_addr #4

declare i32 @ggml_graph_compute_with_ctx(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #4

declare void @ggml_free(ptr noundef) local_unnamed_addr #4

declare ptr @ggml_map_custom2(ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

declare ptr @ggml_map_custom3(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef) local_unnamed_addr #4

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

attributes #0 = { 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 #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind }
attributes #7 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"float", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = distinct !{!9, !10, !11, !12}
!10 = !{!"llvm.loop.mustprogress"}
!11 = !{!"llvm.loop.isvectorized", i32 1}
!12 = !{!"llvm.loop.unroll.runtime.disable"}
!13 = distinct !{!13, !10, !11, !12}
!14 = distinct !{!14, !10, !11, !12}
!15 = !{!16, !18, i64 248}
!16 = !{!"ggml_tensor", !17, i64 0, !18, i64 8, !7, i64 16, !7, i64 48, !17, i64 80, !7, i64 84, !17, i64 148, !7, i64 152, !18, i64 232, !19, i64 240, !18, i64 248, !7, i64 256, !18, i64 320, !7, i64 328}
!17 = !{!"int", !7, i64 0}
!18 = !{!"any pointer", !7, i64 0}
!19 = !{!"long", !7, i64 0}
!20 = distinct !{!20, !10}
!21 = !{!7, !7, i64 0}
!22 = distinct !{!22, !10}
!23 = distinct !{!23, !10}
!24 = !{!18, !18, i64 0}
!25 = distinct !{!25, !10}
!26 = !{!17, !17, i64 0}


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