; LLVM IR from harharkh/sb_desc :: src (matrix)

; 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.sb_mat = type { i64, i64, i64, ptr }

@sb_error_log = external global ptr, align 8
@stderr = external global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.160 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.161 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.162 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.163 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.164 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.165 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.166 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.167 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.168 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.169 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.170 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.171 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.172 = external hidden unnamed_addr constant [35 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @abort() #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @sb_mat_is_finite(ptr noundef) #2

; Function Attrs: nounwind uwtable
define dso_local ptr @sb_mat_mm_mul(ptr noalias noundef %0, ptr noalias noundef %1, ptr noalias noundef %2, ptr noalias noundef %3) #2 {
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  store ptr %0, ptr %5, align 8, !tbaa !5
  store ptr %1, ptr %6, align 8, !tbaa !5
  store ptr %2, ptr %7, align 8, !tbaa !5
  store ptr %3, ptr %8, align 8, !tbaa !5
  br label %9

9:                                                ; preds = %4
  %10 = load ptr, ptr %5, align 8, !tbaa !5
  %11 = icmp ne ptr %10, null
  br i1 %11, label %31, label %12

12:                                               ; preds = %9
  %13 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %14 = icmp ne ptr %13, null
  br i1 %14, label %15, label %17

15:                                               ; preds = %12
  %16 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %19

17:                                               ; preds = %12
  %18 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %19

19:                                               ; preds = %17, %15
  %20 = phi ptr [ %16, %15 ], [ %18, %17 ]
  %21 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %20, ptr noundef @.str.160) #4
  %22 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %23 = icmp ne ptr %22, null
  br i1 %23, label %24, label %26

24:                                               ; preds = %19
  %25 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %28

26:                                               ; preds = %19
  %27 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %28

28:                                               ; preds = %26, %24
  %29 = phi ptr [ %25, %24 ], [ %27, %26 ]
  %30 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %29, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

31:                                               ; preds = %9
  br label %32

32:                                               ; preds = %31
  br label %33

33:                                               ; preds = %32
  %34 = load ptr, ptr %6, align 8, !tbaa !5
  %35 = icmp ne ptr %34, null
  br i1 %35, label %55, label %36

36:                                               ; preds = %33
  %37 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %38 = icmp ne ptr %37, null
  br i1 %38, label %39, label %41

39:                                               ; preds = %36
  %40 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %43

41:                                               ; preds = %36
  %42 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %43

43:                                               ; preds = %41, %39
  %44 = phi ptr [ %40, %39 ], [ %42, %41 ]
  %45 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %44, ptr noundef @.str.161) #4
  %46 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %47 = icmp ne ptr %46, null
  br i1 %47, label %48, label %50

48:                                               ; preds = %43
  %49 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %52

50:                                               ; preds = %43
  %51 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %52

52:                                               ; preds = %50, %48
  %53 = phi ptr [ %49, %48 ], [ %51, %50 ]
  %54 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %53, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

55:                                               ; preds = %33
  br label %56

56:                                               ; preds = %55
  br label %57

57:                                               ; preds = %56
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  %59 = icmp ne ptr %58, null
  br i1 %59, label %79, label %60

60:                                               ; preds = %57
  %61 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %62 = icmp ne ptr %61, null
  br i1 %62, label %63, label %65

63:                                               ; preds = %60
  %64 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %67

65:                                               ; preds = %60
  %66 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %67

67:                                               ; preds = %65, %63
  %68 = phi ptr [ %64, %63 ], [ %66, %65 ]
  %69 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %68, ptr noundef @.str.162) #4
  %70 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %71 = icmp ne ptr %70, null
  br i1 %71, label %72, label %74

72:                                               ; preds = %67
  %73 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %76

74:                                               ; preds = %67
  %75 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %76

76:                                               ; preds = %74, %72
  %77 = phi ptr [ %73, %72 ], [ %75, %74 ]
  %78 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %77, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

79:                                               ; preds = %57
  br label %80

80:                                               ; preds = %79
  %81 = load ptr, ptr %8, align 8, !tbaa !5
  %82 = load i8, ptr %81, align 1, !tbaa !9
  %83 = sext i8 %82 to i32
  %84 = shl i32 %83, 8
  %85 = load ptr, ptr %8, align 8, !tbaa !5
  %86 = getelementptr inbounds i8, ptr %85, i64 1
  %87 = load i8, ptr %86, align 1, !tbaa !9
  %88 = sext i8 %87 to i32
  %89 = add nsw i32 %84, %88
  switch i32 %89, label %574 [
    i32 28270, label %90
    i32 28276, label %211
    i32 29806, label %332
    i32 29812, label %453
  ]

90:                                               ; preds = %80
  br label %91

91:                                               ; preds = %90
  %92 = load ptr, ptr %5, align 8, !tbaa !5
  %93 = getelementptr inbounds %struct.sb_mat, ptr %92, i32 0, i32 0
  %94 = load i64, ptr %93, align 8, !tbaa !10
  %95 = load ptr, ptr %6, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.sb_mat, ptr %95, i32 0, i32 0
  %97 = load i64, ptr %96, align 8, !tbaa !10
  %98 = icmp ne i64 %94, %97
  br i1 %98, label %99, label %118

99:                                               ; preds = %91
  %100 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %101 = icmp ne ptr %100, null
  br i1 %101, label %102, label %104

102:                                              ; preds = %99
  %103 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %106

104:                                              ; preds = %99
  %105 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %106

106:                                              ; preds = %104, %102
  %107 = phi ptr [ %103, %102 ], [ %105, %104 ]
  %108 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %107, ptr noundef @.str.163) #4
  %109 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %110 = icmp ne ptr %109, null
  br i1 %110, label %111, label %113

111:                                              ; preds = %106
  %112 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %115

113:                                              ; preds = %106
  %114 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %115

115:                                              ; preds = %113, %111
  %116 = phi ptr [ %112, %111 ], [ %114, %113 ]
  %117 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %116, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

118:                                              ; preds = %91
  br label %119

119:                                              ; preds = %118
  br label %120

120:                                              ; preds = %119
  %121 = load ptr, ptr %5, align 8, !tbaa !5
  %122 = getelementptr inbounds %struct.sb_mat, ptr %121, i32 0, i32 1
  %123 = load i64, ptr %122, align 8, !tbaa !13
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = getelementptr inbounds %struct.sb_mat, ptr %124, i32 0, i32 1
  %126 = load i64, ptr %125, align 8, !tbaa !13
  %127 = icmp ne i64 %123, %126
  br i1 %127, label %128, label %147

128:                                              ; preds = %120
  %129 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %130 = icmp ne ptr %129, null
  br i1 %130, label %131, label %133

131:                                              ; preds = %128
  %132 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %135

133:                                              ; preds = %128
  %134 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %135

135:                                              ; preds = %133, %131
  %136 = phi ptr [ %132, %131 ], [ %134, %133 ]
  %137 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %136, ptr noundef @.str.164) #4
  %138 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %139 = icmp ne ptr %138, null
  br i1 %139, label %140, label %142

140:                                              ; preds = %135
  %141 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %144

142:                                              ; preds = %135
  %143 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %144

144:                                              ; preds = %142, %140
  %145 = phi ptr [ %141, %140 ], [ %143, %142 ]
  %146 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %145, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

147:                                              ; preds = %120
  br label %148

148:                                              ; preds = %147
  br label %149

149:                                              ; preds = %148
  %150 = load ptr, ptr %6, align 8, !tbaa !5
  %151 = getelementptr inbounds %struct.sb_mat, ptr %150, i32 0, i32 1
  %152 = load i64, ptr %151, align 8, !tbaa !13
  %153 = load ptr, ptr %7, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.sb_mat, ptr %153, i32 0, i32 0
  %155 = load i64, ptr %154, align 8, !tbaa !10
  %156 = icmp ne i64 %152, %155
  br i1 %156, label %157, label %176

157:                                              ; preds = %149
  %158 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %159 = icmp ne ptr %158, null
  br i1 %159, label %160, label %162

160:                                              ; preds = %157
  %161 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %164

162:                                              ; preds = %157
  %163 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %164

164:                                              ; preds = %162, %160
  %165 = phi ptr [ %161, %160 ], [ %163, %162 ]
  %166 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %165, ptr noundef @.str.165) #4
  %167 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %168 = icmp ne ptr %167, null
  br i1 %168, label %169, label %171

169:                                              ; preds = %164
  %170 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %173

171:                                              ; preds = %164
  %172 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %173

173:                                              ; preds = %171, %169
  %174 = phi ptr [ %170, %169 ], [ %172, %171 ]
  %175 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %174, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

176:                                              ; preds = %149
  br label %177

177:                                              ; preds = %176
  %178 = load ptr, ptr %5, align 8, !tbaa !5
  %179 = getelementptr inbounds %struct.sb_mat, ptr %178, i32 0, i32 0
  %180 = load i64, ptr %179, align 8, !tbaa !10
  %181 = trunc i64 %180 to i32
  %182 = load ptr, ptr %5, align 8, !tbaa !5
  %183 = getelementptr inbounds %struct.sb_mat, ptr %182, i32 0, i32 1
  %184 = load i64, ptr %183, align 8, !tbaa !13
  %185 = trunc i64 %184 to i32
  %186 = load ptr, ptr %6, align 8, !tbaa !5
  %187 = getelementptr inbounds %struct.sb_mat, ptr %186, i32 0, i32 1
  %188 = load i64, ptr %187, align 8, !tbaa !13
  %189 = trunc i64 %188 to i32
  %190 = load ptr, ptr %6, align 8, !tbaa !5
  %191 = getelementptr inbounds %struct.sb_mat, ptr %190, i32 0, i32 3
  %192 = load ptr, ptr %191, align 8, !tbaa !14
  %193 = load ptr, ptr %6, align 8, !tbaa !5
  %194 = getelementptr inbounds %struct.sb_mat, ptr %193, i32 0, i32 0
  %195 = load i64, ptr %194, align 8, !tbaa !10
  %196 = trunc i64 %195 to i32
  %197 = load ptr, ptr %7, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.sb_mat, ptr %197, i32 0, i32 3
  %199 = load ptr, ptr %198, align 8, !tbaa !14
  %200 = load ptr, ptr %7, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.sb_mat, ptr %200, i32 0, i32 0
  %202 = load i64, ptr %201, align 8, !tbaa !10
  %203 = trunc i64 %202 to i32
  %204 = load ptr, ptr %5, align 8, !tbaa !5
  %205 = getelementptr inbounds %struct.sb_mat, ptr %204, i32 0, i32 3
  %206 = load ptr, ptr %205, align 8, !tbaa !14
  %207 = load ptr, ptr %5, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.sb_mat, ptr %207, i32 0, i32 0
  %209 = load i64, ptr %208, align 8, !tbaa !10
  %210 = trunc i64 %209 to i32
  call void @cblas_dgemm(i32 noundef 102, i32 noundef 111, i32 noundef 111, i32 noundef %181, i32 noundef %185, i32 noundef %189, double noundef 1.000000e+00, ptr noundef %192, i32 noundef %196, ptr noundef %199, i32 noundef %203, double noundef 0.000000e+00, ptr noundef %206, i32 noundef %210)
  br label %595

211:                                              ; preds = %80
  br label %212

212:                                              ; preds = %211
  %213 = load ptr, ptr %5, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.sb_mat, ptr %213, i32 0, i32 0
  %215 = load i64, ptr %214, align 8, !tbaa !10
  %216 = load ptr, ptr %6, align 8, !tbaa !5
  %217 = getelementptr inbounds %struct.sb_mat, ptr %216, i32 0, i32 0
  %218 = load i64, ptr %217, align 8, !tbaa !10
  %219 = icmp ne i64 %215, %218
  br i1 %219, label %220, label %239

220:                                              ; preds = %212
  %221 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %222 = icmp ne ptr %221, null
  br i1 %222, label %223, label %225

223:                                              ; preds = %220
  %224 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %227

225:                                              ; preds = %220
  %226 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %227

227:                                              ; preds = %225, %223
  %228 = phi ptr [ %224, %223 ], [ %226, %225 ]
  %229 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %228, ptr noundef @.str.163) #4
  %230 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %231 = icmp ne ptr %230, null
  br i1 %231, label %232, label %234

232:                                              ; preds = %227
  %233 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %236

234:                                              ; preds = %227
  %235 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %236

236:                                              ; preds = %234, %232
  %237 = phi ptr [ %233, %232 ], [ %235, %234 ]
  %238 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %237, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

239:                                              ; preds = %212
  br label %240

240:                                              ; preds = %239
  br label %241

241:                                              ; preds = %240
  %242 = load ptr, ptr %5, align 8, !tbaa !5
  %243 = getelementptr inbounds %struct.sb_mat, ptr %242, i32 0, i32 1
  %244 = load i64, ptr %243, align 8, !tbaa !13
  %245 = load ptr, ptr %7, align 8, !tbaa !5
  %246 = getelementptr inbounds %struct.sb_mat, ptr %245, i32 0, i32 0
  %247 = load i64, ptr %246, align 8, !tbaa !10
  %248 = icmp ne i64 %244, %247
  br i1 %248, label %249, label %268

249:                                              ; preds = %241
  %250 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %251 = icmp ne ptr %250, null
  br i1 %251, label %252, label %254

252:                                              ; preds = %249
  %253 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %256

254:                                              ; preds = %249
  %255 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %256

256:                                              ; preds = %254, %252
  %257 = phi ptr [ %253, %252 ], [ %255, %254 ]
  %258 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %257, ptr noundef @.str.166) #4
  %259 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %260 = icmp ne ptr %259, null
  br i1 %260, label %261, label %263

261:                                              ; preds = %256
  %262 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %265

263:                                              ; preds = %256
  %264 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %265

265:                                              ; preds = %263, %261
  %266 = phi ptr [ %262, %261 ], [ %264, %263 ]
  %267 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %266, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

268:                                              ; preds = %241
  br label %269

269:                                              ; preds = %268
  br label %270

270:                                              ; preds = %269
  %271 = load ptr, ptr %6, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.sb_mat, ptr %271, i32 0, i32 1
  %273 = load i64, ptr %272, align 8, !tbaa !13
  %274 = load ptr, ptr %7, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.sb_mat, ptr %274, i32 0, i32 1
  %276 = load i64, ptr %275, align 8, !tbaa !13
  %277 = icmp ne i64 %273, %276
  br i1 %277, label %278, label %297

278:                                              ; preds = %270
  %279 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %280 = icmp ne ptr %279, null
  br i1 %280, label %281, label %283

281:                                              ; preds = %278
  %282 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %285

283:                                              ; preds = %278
  %284 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %285

285:                                              ; preds = %283, %281
  %286 = phi ptr [ %282, %281 ], [ %284, %283 ]
  %287 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %286, ptr noundef @.str.167) #4
  %288 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %289 = icmp ne ptr %288, null
  br i1 %289, label %290, label %292

290:                                              ; preds = %285
  %291 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %294

292:                                              ; preds = %285
  %293 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %294

294:                                              ; preds = %292, %290
  %295 = phi ptr [ %291, %290 ], [ %293, %292 ]
  %296 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %295, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

297:                                              ; preds = %270
  br label %298

298:                                              ; preds = %297
  %299 = load ptr, ptr %5, align 8, !tbaa !5
  %300 = getelementptr inbounds %struct.sb_mat, ptr %299, i32 0, i32 0
  %301 = load i64, ptr %300, align 8, !tbaa !10
  %302 = trunc i64 %301 to i32
  %303 = load ptr, ptr %5, align 8, !tbaa !5
  %304 = getelementptr inbounds %struct.sb_mat, ptr %303, i32 0, i32 1
  %305 = load i64, ptr %304, align 8, !tbaa !13
  %306 = trunc i64 %305 to i32
  %307 = load ptr, ptr %6, align 8, !tbaa !5
  %308 = getelementptr inbounds %struct.sb_mat, ptr %307, i32 0, i32 1
  %309 = load i64, ptr %308, align 8, !tbaa !13
  %310 = trunc i64 %309 to i32
  %311 = load ptr, ptr %6, align 8, !tbaa !5
  %312 = getelementptr inbounds %struct.sb_mat, ptr %311, i32 0, i32 3
  %313 = load ptr, ptr %312, align 8, !tbaa !14
  %314 = load ptr, ptr %6, align 8, !tbaa !5
  %315 = getelementptr inbounds %struct.sb_mat, ptr %314, i32 0, i32 0
  %316 = load i64, ptr %315, align 8, !tbaa !10
  %317 = trunc i64 %316 to i32
  %318 = load ptr, ptr %7, align 8, !tbaa !5
  %319 = getelementptr inbounds %struct.sb_mat, ptr %318, i32 0, i32 3
  %320 = load ptr, ptr %319, align 8, !tbaa !14
  %321 = load ptr, ptr %7, align 8, !tbaa !5
  %322 = getelementptr inbounds %struct.sb_mat, ptr %321, i32 0, i32 0
  %323 = load i64, ptr %322, align 8, !tbaa !10
  %324 = trunc i64 %323 to i32
  %325 = load ptr, ptr %5, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.sb_mat, ptr %325, i32 0, i32 3
  %327 = load ptr, ptr %326, align 8, !tbaa !14
  %328 = load ptr, ptr %5, align 8, !tbaa !5
  %329 = getelementptr inbounds %struct.sb_mat, ptr %328, i32 0, i32 0
  %330 = load i64, ptr %329, align 8, !tbaa !10
  %331 = trunc i64 %330 to i32
  call void @cblas_dgemm(i32 noundef 102, i32 noundef 111, i32 noundef 112, i32 noundef %302, i32 noundef %306, i32 noundef %310, double noundef 1.000000e+00, ptr noundef %313, i32 noundef %317, ptr noundef %320, i32 noundef %324, double noundef 0.000000e+00, ptr noundef %327, i32 noundef %331)
  br label %595

332:                                              ; preds = %80
  br label %333

333:                                              ; preds = %332
  %334 = load ptr, ptr %5, align 8, !tbaa !5
  %335 = getelementptr inbounds %struct.sb_mat, ptr %334, i32 0, i32 0
  %336 = load i64, ptr %335, align 8, !tbaa !10
  %337 = load ptr, ptr %6, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.sb_mat, ptr %337, i32 0, i32 1
  %339 = load i64, ptr %338, align 8, !tbaa !13
  %340 = icmp ne i64 %336, %339
  br i1 %340, label %341, label %360

341:                                              ; preds = %333
  %342 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %343 = icmp ne ptr %342, null
  br i1 %343, label %344, label %346

344:                                              ; preds = %341
  %345 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %348

346:                                              ; preds = %341
  %347 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %348

348:                                              ; preds = %346, %344
  %349 = phi ptr [ %345, %344 ], [ %347, %346 ]
  %350 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %349, ptr noundef @.str.168) #4
  %351 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %352 = icmp ne ptr %351, null
  br i1 %352, label %353, label %355

353:                                              ; preds = %348
  %354 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %357

355:                                              ; preds = %348
  %356 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %357

357:                                              ; preds = %355, %353
  %358 = phi ptr [ %354, %353 ], [ %356, %355 ]
  %359 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %358, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

360:                                              ; preds = %333
  br label %361

361:                                              ; preds = %360
  br label %362

362:                                              ; preds = %361
  %363 = load ptr, ptr %5, align 8, !tbaa !5
  %364 = getelementptr inbounds %struct.sb_mat, ptr %363, i32 0, i32 1
  %365 = load i64, ptr %364, align 8, !tbaa !13
  %366 = load ptr, ptr %7, align 8, !tbaa !5
  %367 = getelementptr inbounds %struct.sb_mat, ptr %366, i32 0, i32 1
  %368 = load i64, ptr %367, align 8, !tbaa !13
  %369 = icmp ne i64 %365, %368
  br i1 %369, label %370, label %389

370:                                              ; preds = %362
  %371 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %372 = icmp ne ptr %371, null
  br i1 %372, label %373, label %375

373:                                              ; preds = %370
  %374 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %377

375:                                              ; preds = %370
  %376 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %377

377:                                              ; preds = %375, %373
  %378 = phi ptr [ %374, %373 ], [ %376, %375 ]
  %379 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %378, ptr noundef @.str.164) #4
  %380 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %381 = icmp ne ptr %380, null
  br i1 %381, label %382, label %384

382:                                              ; preds = %377
  %383 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %386

384:                                              ; preds = %377
  %385 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %386

386:                                              ; preds = %384, %382
  %387 = phi ptr [ %383, %382 ], [ %385, %384 ]
  %388 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %387, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

389:                                              ; preds = %362
  br label %390

390:                                              ; preds = %389
  br label %391

391:                                              ; preds = %390
  %392 = load ptr, ptr %6, align 8, !tbaa !5
  %393 = getelementptr inbounds %struct.sb_mat, ptr %392, i32 0, i32 0
  %394 = load i64, ptr %393, align 8, !tbaa !10
  %395 = load ptr, ptr %7, align 8, !tbaa !5
  %396 = getelementptr inbounds %struct.sb_mat, ptr %395, i32 0, i32 0
  %397 = load i64, ptr %396, align 8, !tbaa !10
  %398 = icmp ne i64 %394, %397
  br i1 %398, label %399, label %418

399:                                              ; preds = %391
  %400 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %401 = icmp ne ptr %400, null
  br i1 %401, label %402, label %404

402:                                              ; preds = %399
  %403 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %406

404:                                              ; preds = %399
  %405 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %406

406:                                              ; preds = %404, %402
  %407 = phi ptr [ %403, %402 ], [ %405, %404 ]
  %408 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %407, ptr noundef @.str.169) #4
  %409 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %410 = icmp ne ptr %409, null
  br i1 %410, label %411, label %413

411:                                              ; preds = %406
  %412 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %415

413:                                              ; preds = %406
  %414 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %415

415:                                              ; preds = %413, %411
  %416 = phi ptr [ %412, %411 ], [ %414, %413 ]
  %417 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %416, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

418:                                              ; preds = %391
  br label %419

419:                                              ; preds = %418
  %420 = load ptr, ptr %5, align 8, !tbaa !5
  %421 = getelementptr inbounds %struct.sb_mat, ptr %420, i32 0, i32 0
  %422 = load i64, ptr %421, align 8, !tbaa !10
  %423 = trunc i64 %422 to i32
  %424 = load ptr, ptr %5, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.sb_mat, ptr %424, i32 0, i32 1
  %426 = load i64, ptr %425, align 8, !tbaa !13
  %427 = trunc i64 %426 to i32
  %428 = load ptr, ptr %6, align 8, !tbaa !5
  %429 = getelementptr inbounds %struct.sb_mat, ptr %428, i32 0, i32 0
  %430 = load i64, ptr %429, align 8, !tbaa !10
  %431 = trunc i64 %430 to i32
  %432 = load ptr, ptr %6, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.sb_mat, ptr %432, i32 0, i32 3
  %434 = load ptr, ptr %433, align 8, !tbaa !14
  %435 = load ptr, ptr %6, align 8, !tbaa !5
  %436 = getelementptr inbounds %struct.sb_mat, ptr %435, i32 0, i32 0
  %437 = load i64, ptr %436, align 8, !tbaa !10
  %438 = trunc i64 %437 to i32
  %439 = load ptr, ptr %7, align 8, !tbaa !5
  %440 = getelementptr inbounds %struct.sb_mat, ptr %439, i32 0, i32 3
  %441 = load ptr, ptr %440, align 8, !tbaa !14
  %442 = load ptr, ptr %7, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.sb_mat, ptr %442, i32 0, i32 0
  %444 = load i64, ptr %443, align 8, !tbaa !10
  %445 = trunc i64 %444 to i32
  %446 = load ptr, ptr %5, align 8, !tbaa !5
  %447 = getelementptr inbounds %struct.sb_mat, ptr %446, i32 0, i32 3
  %448 = load ptr, ptr %447, align 8, !tbaa !14
  %449 = load ptr, ptr %5, align 8, !tbaa !5
  %450 = getelementptr inbounds %struct.sb_mat, ptr %449, i32 0, i32 0
  %451 = load i64, ptr %450, align 8, !tbaa !10
  %452 = trunc i64 %451 to i32
  call void @cblas_dgemm(i32 noundef 102, i32 noundef 112, i32 noundef 111, i32 noundef %423, i32 noundef %427, i32 noundef %431, double noundef 1.000000e+00, ptr noundef %434, i32 noundef %438, ptr noundef %441, i32 noundef %445, double noundef 0.000000e+00, ptr noundef %448, i32 noundef %452)
  br label %595

453:                                              ; preds = %80
  br label %454

454:                                              ; preds = %453
  %455 = load ptr, ptr %5, align 8, !tbaa !5
  %456 = getelementptr inbounds %struct.sb_mat, ptr %455, i32 0, i32 0
  %457 = load i64, ptr %456, align 8, !tbaa !10
  %458 = load ptr, ptr %6, align 8, !tbaa !5
  %459 = getelementptr inbounds %struct.sb_mat, ptr %458, i32 0, i32 1
  %460 = load i64, ptr %459, align 8, !tbaa !13
  %461 = icmp ne i64 %457, %460
  br i1 %461, label %462, label %481

462:                                              ; preds = %454
  %463 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %464 = icmp ne ptr %463, null
  br i1 %464, label %465, label %467

465:                                              ; preds = %462
  %466 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %469

467:                                              ; preds = %462
  %468 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %469

469:                                              ; preds = %467, %465
  %470 = phi ptr [ %466, %465 ], [ %468, %467 ]
  %471 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %470, ptr noundef @.str.168) #4
  %472 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %473 = icmp ne ptr %472, null
  br i1 %473, label %474, label %476

474:                                              ; preds = %469
  %475 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %478

476:                                              ; preds = %469
  %477 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %478

478:                                              ; preds = %476, %474
  %479 = phi ptr [ %475, %474 ], [ %477, %476 ]
  %480 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %479, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

481:                                              ; preds = %454
  br label %482

482:                                              ; preds = %481
  br label %483

483:                                              ; preds = %482
  %484 = load ptr, ptr %5, align 8, !tbaa !5
  %485 = getelementptr inbounds %struct.sb_mat, ptr %484, i32 0, i32 1
  %486 = load i64, ptr %485, align 8, !tbaa !13
  %487 = load ptr, ptr %7, align 8, !tbaa !5
  %488 = getelementptr inbounds %struct.sb_mat, ptr %487, i32 0, i32 0
  %489 = load i64, ptr %488, align 8, !tbaa !10
  %490 = icmp ne i64 %486, %489
  br i1 %490, label %491, label %510

491:                                              ; preds = %483
  %492 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %493 = icmp ne ptr %492, null
  br i1 %493, label %494, label %496

494:                                              ; preds = %491
  %495 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %498

496:                                              ; preds = %491
  %497 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %498

498:                                              ; preds = %496, %494
  %499 = phi ptr [ %495, %494 ], [ %497, %496 ]
  %500 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %499, ptr noundef @.str.166) #4
  %501 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %502 = icmp ne ptr %501, null
  br i1 %502, label %503, label %505

503:                                              ; preds = %498
  %504 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %507

505:                                              ; preds = %498
  %506 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %507

507:                                              ; preds = %505, %503
  %508 = phi ptr [ %504, %503 ], [ %506, %505 ]
  %509 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %508, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

510:                                              ; preds = %483
  br label %511

511:                                              ; preds = %510
  br label %512

512:                                              ; preds = %511
  %513 = load ptr, ptr %6, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.sb_mat, ptr %513, i32 0, i32 0
  %515 = load i64, ptr %514, align 8, !tbaa !10
  %516 = load ptr, ptr %7, align 8, !tbaa !5
  %517 = getelementptr inbounds %struct.sb_mat, ptr %516, i32 0, i32 1
  %518 = load i64, ptr %517, align 8, !tbaa !13
  %519 = icmp ne i64 %515, %518
  br i1 %519, label %520, label %539

520:                                              ; preds = %512
  %521 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %522 = icmp ne ptr %521, null
  br i1 %522, label %523, label %525

523:                                              ; preds = %520
  %524 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %527

525:                                              ; preds = %520
  %526 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %527

527:                                              ; preds = %525, %523
  %528 = phi ptr [ %524, %523 ], [ %526, %525 ]
  %529 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %528, ptr noundef @.str.170) #4
  %530 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %531 = icmp ne ptr %530, null
  br i1 %531, label %532, label %534

532:                                              ; preds = %527
  %533 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %536

534:                                              ; preds = %527
  %535 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %536

536:                                              ; preds = %534, %532
  %537 = phi ptr [ %533, %532 ], [ %535, %534 ]
  %538 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %537, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

539:                                              ; preds = %512
  br label %540

540:                                              ; preds = %539
  %541 = load ptr, ptr %5, align 8, !tbaa !5
  %542 = getelementptr inbounds %struct.sb_mat, ptr %541, i32 0, i32 0
  %543 = load i64, ptr %542, align 8, !tbaa !10
  %544 = trunc i64 %543 to i32
  %545 = load ptr, ptr %5, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.sb_mat, ptr %545, i32 0, i32 1
  %547 = load i64, ptr %546, align 8, !tbaa !13
  %548 = trunc i64 %547 to i32
  %549 = load ptr, ptr %6, align 8, !tbaa !5
  %550 = getelementptr inbounds %struct.sb_mat, ptr %549, i32 0, i32 0
  %551 = load i64, ptr %550, align 8, !tbaa !10
  %552 = trunc i64 %551 to i32
  %553 = load ptr, ptr %6, align 8, !tbaa !5
  %554 = getelementptr inbounds %struct.sb_mat, ptr %553, i32 0, i32 3
  %555 = load ptr, ptr %554, align 8, !tbaa !14
  %556 = load ptr, ptr %6, align 8, !tbaa !5
  %557 = getelementptr inbounds %struct.sb_mat, ptr %556, i32 0, i32 0
  %558 = load i64, ptr %557, align 8, !tbaa !10
  %559 = trunc i64 %558 to i32
  %560 = load ptr, ptr %7, align 8, !tbaa !5
  %561 = getelementptr inbounds %struct.sb_mat, ptr %560, i32 0, i32 3
  %562 = load ptr, ptr %561, align 8, !tbaa !14
  %563 = load ptr, ptr %7, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.sb_mat, ptr %563, i32 0, i32 0
  %565 = load i64, ptr %564, align 8, !tbaa !10
  %566 = trunc i64 %565 to i32
  %567 = load ptr, ptr %5, align 8, !tbaa !5
  %568 = getelementptr inbounds %struct.sb_mat, ptr %567, i32 0, i32 3
  %569 = load ptr, ptr %568, align 8, !tbaa !14
  %570 = load ptr, ptr %5, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.sb_mat, ptr %570, i32 0, i32 0
  %572 = load i64, ptr %571, align 8, !tbaa !10
  %573 = trunc i64 %572 to i32
  call void @cblas_dgemm(i32 noundef 102, i32 noundef 112, i32 noundef 112, i32 noundef %544, i32 noundef %548, i32 noundef %552, double noundef 1.000000e+00, ptr noundef %555, i32 noundef %559, ptr noundef %562, i32 noundef %566, double noundef 0.000000e+00, ptr noundef %569, i32 noundef %573)
  br label %595

574:                                              ; preds = %80
  br label %575

575:                                              ; preds = %574
  %576 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %577 = icmp ne ptr %576, null
  br i1 %577, label %578, label %580

578:                                              ; preds = %575
  %579 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %582

580:                                              ; preds = %575
  %581 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %582

582:                                              ; preds = %580, %578
  %583 = phi ptr [ %579, %578 ], [ %581, %580 ]
  %584 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %583, ptr noundef @.str.171) #4
  %585 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %586 = icmp ne ptr %585, null
  br i1 %586, label %587, label %589

587:                                              ; preds = %582
  %588 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %591

589:                                              ; preds = %582
  %590 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %591

591:                                              ; preds = %589, %587
  %592 = phi ptr [ %588, %587 ], [ %590, %589 ]
  %593 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %592, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

594:                                              ; No predecessors!
  br label %595

595:                                              ; preds = %594, %540, %419, %298, %177
  br label %596

596:                                              ; preds = %595
  %597 = load ptr, ptr %5, align 8, !tbaa !5
  %598 = call i32 @sb_mat_is_finite(ptr noundef %597)
  %599 = icmp ne i32 %598, 0
  br i1 %599, label %619, label %600

600:                                              ; preds = %596
  %601 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %602 = icmp ne ptr %601, null
  br i1 %602, label %603, label %605

603:                                              ; preds = %600
  %604 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %607

605:                                              ; preds = %600
  %606 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %607

607:                                              ; preds = %605, %603
  %608 = phi ptr [ %604, %603 ], [ %606, %605 ]
  %609 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %608, ptr noundef @.str.172) #4
  %610 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  %611 = icmp ne ptr %610, null
  br i1 %611, label %612, label %614

612:                                              ; preds = %607
  %613 = load ptr, ptr @sb_error_log, align 8, !tbaa !5
  br label %616

614:                                              ; preds = %607
  %615 = load ptr, ptr @stderr, align 8, !tbaa !5
  br label %616

616:                                              ; preds = %614, %612
  %617 = phi ptr [ %613, %612 ], [ %615, %614 ]
  %618 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %617, ptr noundef @.str.1) #4
  call void @abort() #5
  unreachable

619:                                              ; preds = %596
  br label %620

620:                                              ; preds = %619
  %621 = load ptr, ptr %5, align 8, !tbaa !5
  ret ptr %621
}

declare void @cblas_dgemm(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, double noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, double noundef, ptr noundef, i32 noundef) #3

attributes #0 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { nounwind }
attributes #5 = { noreturn nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!7, !7, i64 0}
!10 = !{!11, !12, i64 0}
!11 = !{!"", !12, i64 0, !12, i64 8, !12, i64 16, !6, i64 24}
!12 = !{!"long", !7, i64 0}
!13 = !{!11, !12, i64 8}
!14 = !{!11, !6, i64 24}


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

@sb_error_log = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.160 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.161 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.162 = external hidden unnamed_addr constant [32 x i8], align 1
@.str.163 = external hidden unnamed_addr constant [53 x i8], align 1
@.str.164 = external hidden unnamed_addr constant [56 x i8], align 1
@.str.165 = external hidden unnamed_addr constant [61 x i8], align 1
@.str.166 = external hidden unnamed_addr constant [58 x i8], align 1
@.str.167 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.168 = external hidden unnamed_addr constant [55 x i8], align 1
@.str.169 = external hidden unnamed_addr constant [63 x i8], align 1
@.str.170 = external hidden unnamed_addr constant [65 x i8], align 1
@.str.171 = external hidden unnamed_addr constant [60 x i8], align 1
@.str.172 = external hidden unnamed_addr constant [35 x i8], align 1

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

; Function Attrs: noreturn nounwind
declare void @abort() local_unnamed_addr #1

; Function Attrs: nounwind uwtable
declare dso_local i32 @sb_mat_is_finite(ptr noundef) local_unnamed_addr #2

; Function Attrs: nounwind uwtable
define dso_local noundef ptr @sb_mat_mm_mul(ptr noalias noundef returned %0, ptr noalias noundef readonly %1, ptr noalias noundef readonly %2, ptr noalias nocapture noundef readonly %3) local_unnamed_addr #2 {
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %5, label %14

5:                                                ; preds = %4
  %6 = load ptr, ptr @sb_error_log, align 8
  %.not87 = icmp eq ptr %6, null
  %7 = load ptr, ptr @stderr, align 8
  %8 = select i1 %.not87, ptr %7, ptr %6
  %9 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %8, ptr noundef nonnull @.str.160) #4
  %10 = load ptr, ptr @sb_error_log, align 8
  %.not88 = icmp eq ptr %10, null
  %11 = load ptr, ptr @stderr, align 8
  %12 = select i1 %.not88, ptr %11, ptr %10
  %13 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %12, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

14:                                               ; preds = %4
  %.not89 = icmp eq ptr %1, null
  br i1 %.not89, label %15, label %24

15:                                               ; preds = %14
  %16 = load ptr, ptr @sb_error_log, align 8
  %.not90 = icmp eq ptr %16, null
  %17 = load ptr, ptr @stderr, align 8
  %18 = select i1 %.not90, ptr %17, ptr %16
  %19 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %18, ptr noundef nonnull @.str.161) #4
  %20 = load ptr, ptr @sb_error_log, align 8
  %.not91 = icmp eq ptr %20, null
  %21 = load ptr, ptr @stderr, align 8
  %22 = select i1 %.not91, ptr %21, ptr %20
  %23 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %22, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

24:                                               ; preds = %14
  %.not92 = icmp eq ptr %2, null
  br i1 %.not92, label %25, label %34

25:                                               ; preds = %24
  %26 = load ptr, ptr @sb_error_log, align 8
  %.not93 = icmp eq ptr %26, null
  %27 = load ptr, ptr @stderr, align 8
  %28 = select i1 %.not93, ptr %27, ptr %26
  %29 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %28, ptr noundef nonnull @.str.162) #4
  %30 = load ptr, ptr @sb_error_log, align 8
  %.not94 = icmp eq ptr %30, null
  %31 = load ptr, ptr @stderr, align 8
  %32 = select i1 %.not94, ptr %31, ptr %30
  %33 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %32, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

34:                                               ; preds = %24
  %35 = load i8, ptr %3, align 1, !tbaa !5
  %36 = sext i8 %35 to i32
  %37 = shl nsw i32 %36, 8
  %38 = getelementptr inbounds i8, ptr %3, i64 1
  %39 = load i8, ptr %38, align 1, !tbaa !5
  %40 = sext i8 %39 to i32
  %41 = add nsw i32 %37, %40
  switch i32 %41, label %238 [
    i32 28270, label %42
    i32 28276, label %91
    i32 29806, label %140
    i32 29812, label %189
  ]

42:                                               ; preds = %34
  %43 = load i64, ptr %0, align 8, !tbaa !8
  %44 = load i64, ptr %1, align 8, !tbaa !8
  %.not122 = icmp eq i64 %43, %44
  br i1 %.not122, label %54, label %45

45:                                               ; preds = %42
  %46 = load ptr, ptr @sb_error_log, align 8
  %.not132 = icmp eq ptr %46, null
  %47 = load ptr, ptr @stderr, align 8
  %48 = select i1 %.not132, ptr %47, ptr %46
  %49 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %48, ptr noundef nonnull @.str.163) #4
  %50 = load ptr, ptr @sb_error_log, align 8
  %.not133 = icmp eq ptr %50, null
  %51 = load ptr, ptr @stderr, align 8
  %52 = select i1 %.not133, ptr %51, ptr %50
  %53 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %52, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

54:                                               ; preds = %42
  %55 = getelementptr inbounds i8, ptr %0, i64 8
  %56 = load i64, ptr %55, align 8, !tbaa !12
  %57 = getelementptr inbounds i8, ptr %2, i64 8
  %58 = load i64, ptr %57, align 8, !tbaa !12
  %.not123 = icmp eq i64 %56, %58
  br i1 %.not123, label %68, label %59

59:                                               ; preds = %54
  %60 = load ptr, ptr @sb_error_log, align 8
  %.not130 = icmp eq ptr %60, null
  %61 = load ptr, ptr @stderr, align 8
  %62 = select i1 %.not130, ptr %61, ptr %60
  %63 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %62, ptr noundef nonnull @.str.164) #4
  %64 = load ptr, ptr @sb_error_log, align 8
  %.not131 = icmp eq ptr %64, null
  %65 = load ptr, ptr @stderr, align 8
  %66 = select i1 %.not131, ptr %65, ptr %64
  %67 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %66, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

68:                                               ; preds = %54
  %69 = getelementptr inbounds i8, ptr %1, i64 8
  %70 = load i64, ptr %69, align 8, !tbaa !12
  %71 = load i64, ptr %2, align 8, !tbaa !8
  %.not124 = icmp eq i64 %70, %71
  br i1 %.not124, label %81, label %72

72:                                               ; preds = %68
  %73 = load ptr, ptr @sb_error_log, align 8
  %.not128 = icmp eq ptr %73, null
  %74 = load ptr, ptr @stderr, align 8
  %75 = select i1 %.not128, ptr %74, ptr %73
  %76 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %75, ptr noundef nonnull @.str.165) #4
  %77 = load ptr, ptr @sb_error_log, align 8
  %.not129 = icmp eq ptr %77, null
  %78 = load ptr, ptr @stderr, align 8
  %79 = select i1 %.not129, ptr %78, ptr %77
  %80 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %79, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

81:                                               ; preds = %68
  %82 = trunc i64 %43 to i32
  %83 = trunc i64 %56 to i32
  %84 = trunc i64 %70 to i32
  %85 = getelementptr inbounds i8, ptr %1, i64 24
  %86 = load ptr, ptr %85, align 8, !tbaa !13
  %87 = getelementptr inbounds i8, ptr %2, i64 24
  %88 = load ptr, ptr %87, align 8, !tbaa !13
  %89 = getelementptr inbounds i8, ptr %0, i64 24
  %90 = load ptr, ptr %89, align 8, !tbaa !13
  tail call void @cblas_dgemm(i32 noundef 102, i32 noundef 111, i32 noundef 111, i32 noundef %82, i32 noundef %83, i32 noundef %84, double noundef 1.000000e+00, ptr noundef %86, i32 noundef %82, ptr noundef %88, i32 noundef %84, double noundef 0.000000e+00, ptr noundef %90, i32 noundef %82) #4
  br label %247

91:                                               ; preds = %34
  %92 = load i64, ptr %0, align 8, !tbaa !8
  %93 = load i64, ptr %1, align 8, !tbaa !8
  %.not113 = icmp eq i64 %92, %93
  br i1 %.not113, label %103, label %94

94:                                               ; preds = %91
  %95 = load ptr, ptr @sb_error_log, align 8
  %.not120 = icmp eq ptr %95, null
  %96 = load ptr, ptr @stderr, align 8
  %97 = select i1 %.not120, ptr %96, ptr %95
  %98 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %97, ptr noundef nonnull @.str.163) #4
  %99 = load ptr, ptr @sb_error_log, align 8
  %.not121 = icmp eq ptr %99, null
  %100 = load ptr, ptr @stderr, align 8
  %101 = select i1 %.not121, ptr %100, ptr %99
  %102 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %101, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

103:                                              ; preds = %91
  %104 = getelementptr inbounds i8, ptr %0, i64 8
  %105 = load i64, ptr %104, align 8, !tbaa !12
  %106 = load i64, ptr %2, align 8, !tbaa !8
  %.not114 = icmp eq i64 %105, %106
  br i1 %.not114, label %116, label %107

107:                                              ; preds = %103
  %108 = load ptr, ptr @sb_error_log, align 8
  %.not118 = icmp eq ptr %108, null
  %109 = load ptr, ptr @stderr, align 8
  %110 = select i1 %.not118, ptr %109, ptr %108
  %111 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %110, ptr noundef nonnull @.str.166) #4
  %112 = load ptr, ptr @sb_error_log, align 8
  %.not119 = icmp eq ptr %112, null
  %113 = load ptr, ptr @stderr, align 8
  %114 = select i1 %.not119, ptr %113, ptr %112
  %115 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %114, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

116:                                              ; preds = %103
  %117 = getelementptr inbounds i8, ptr %1, i64 8
  %118 = load i64, ptr %117, align 8, !tbaa !12
  %119 = getelementptr inbounds i8, ptr %2, i64 8
  %120 = load i64, ptr %119, align 8, !tbaa !12
  %.not115 = icmp eq i64 %118, %120
  br i1 %.not115, label %130, label %121

121:                                              ; preds = %116
  %122 = load ptr, ptr @sb_error_log, align 8
  %.not116 = icmp eq ptr %122, null
  %123 = load ptr, ptr @stderr, align 8
  %124 = select i1 %.not116, ptr %123, ptr %122
  %125 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %124, ptr noundef nonnull @.str.167) #4
  %126 = load ptr, ptr @sb_error_log, align 8
  %.not117 = icmp eq ptr %126, null
  %127 = load ptr, ptr @stderr, align 8
  %128 = select i1 %.not117, ptr %127, ptr %126
  %129 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %128, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

130:                                              ; preds = %116
  %131 = trunc i64 %92 to i32
  %132 = trunc i64 %105 to i32
  %133 = trunc i64 %118 to i32
  %134 = getelementptr inbounds i8, ptr %1, i64 24
  %135 = load ptr, ptr %134, align 8, !tbaa !13
  %136 = getelementptr inbounds i8, ptr %2, i64 24
  %137 = load ptr, ptr %136, align 8, !tbaa !13
  %138 = getelementptr inbounds i8, ptr %0, i64 24
  %139 = load ptr, ptr %138, align 8, !tbaa !13
  tail call void @cblas_dgemm(i32 noundef 102, i32 noundef 111, i32 noundef 112, i32 noundef %131, i32 noundef %132, i32 noundef %133, double noundef 1.000000e+00, ptr noundef %135, i32 noundef %131, ptr noundef %137, i32 noundef %132, double noundef 0.000000e+00, ptr noundef %139, i32 noundef %131) #4
  br label %247

140:                                              ; preds = %34
  %141 = load i64, ptr %0, align 8, !tbaa !8
  %142 = getelementptr inbounds i8, ptr %1, i64 8
  %143 = load i64, ptr %142, align 8, !tbaa !12
  %.not104 = icmp eq i64 %141, %143
  br i1 %.not104, label %153, label %144

144:                                              ; preds = %140
  %145 = load ptr, ptr @sb_error_log, align 8
  %.not111 = icmp eq ptr %145, null
  %146 = load ptr, ptr @stderr, align 8
  %147 = select i1 %.not111, ptr %146, ptr %145
  %148 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %147, ptr noundef nonnull @.str.168) #4
  %149 = load ptr, ptr @sb_error_log, align 8
  %.not112 = icmp eq ptr %149, null
  %150 = load ptr, ptr @stderr, align 8
  %151 = select i1 %.not112, ptr %150, ptr %149
  %152 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %151, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

153:                                              ; preds = %140
  %154 = getelementptr inbounds i8, ptr %0, i64 8
  %155 = load i64, ptr %154, align 8, !tbaa !12
  %156 = getelementptr inbounds i8, ptr %2, i64 8
  %157 = load i64, ptr %156, align 8, !tbaa !12
  %.not105 = icmp eq i64 %155, %157
  br i1 %.not105, label %167, label %158

158:                                              ; preds = %153
  %159 = load ptr, ptr @sb_error_log, align 8
  %.not109 = icmp eq ptr %159, null
  %160 = load ptr, ptr @stderr, align 8
  %161 = select i1 %.not109, ptr %160, ptr %159
  %162 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %161, ptr noundef nonnull @.str.164) #4
  %163 = load ptr, ptr @sb_error_log, align 8
  %.not110 = icmp eq ptr %163, null
  %164 = load ptr, ptr @stderr, align 8
  %165 = select i1 %.not110, ptr %164, ptr %163
  %166 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %165, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

167:                                              ; preds = %153
  %168 = load i64, ptr %1, align 8, !tbaa !8
  %169 = load i64, ptr %2, align 8, !tbaa !8
  %.not106 = icmp eq i64 %168, %169
  br i1 %.not106, label %179, label %170

170:                                              ; preds = %167
  %171 = load ptr, ptr @sb_error_log, align 8
  %.not107 = icmp eq ptr %171, null
  %172 = load ptr, ptr @stderr, align 8
  %173 = select i1 %.not107, ptr %172, ptr %171
  %174 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %173, ptr noundef nonnull @.str.169) #4
  %175 = load ptr, ptr @sb_error_log, align 8
  %.not108 = icmp eq ptr %175, null
  %176 = load ptr, ptr @stderr, align 8
  %177 = select i1 %.not108, ptr %176, ptr %175
  %178 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %177, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

179:                                              ; preds = %167
  %180 = trunc i64 %141 to i32
  %181 = trunc i64 %155 to i32
  %182 = trunc i64 %168 to i32
  %183 = getelementptr inbounds i8, ptr %1, i64 24
  %184 = load ptr, ptr %183, align 8, !tbaa !13
  %185 = getelementptr inbounds i8, ptr %2, i64 24
  %186 = load ptr, ptr %185, align 8, !tbaa !13
  %187 = getelementptr inbounds i8, ptr %0, i64 24
  %188 = load ptr, ptr %187, align 8, !tbaa !13
  tail call void @cblas_dgemm(i32 noundef 102, i32 noundef 112, i32 noundef 111, i32 noundef %180, i32 noundef %181, i32 noundef %182, double noundef 1.000000e+00, ptr noundef %184, i32 noundef %182, ptr noundef %186, i32 noundef %182, double noundef 0.000000e+00, ptr noundef %188, i32 noundef %180) #4
  br label %247

189:                                              ; preds = %34
  %190 = load i64, ptr %0, align 8, !tbaa !8
  %191 = getelementptr inbounds i8, ptr %1, i64 8
  %192 = load i64, ptr %191, align 8, !tbaa !12
  %.not95 = icmp eq i64 %190, %192
  br i1 %.not95, label %202, label %193

193:                                              ; preds = %189
  %194 = load ptr, ptr @sb_error_log, align 8
  %.not102 = icmp eq ptr %194, null
  %195 = load ptr, ptr @stderr, align 8
  %196 = select i1 %.not102, ptr %195, ptr %194
  %197 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %196, ptr noundef nonnull @.str.168) #4
  %198 = load ptr, ptr @sb_error_log, align 8
  %.not103 = icmp eq ptr %198, null
  %199 = load ptr, ptr @stderr, align 8
  %200 = select i1 %.not103, ptr %199, ptr %198
  %201 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %200, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

202:                                              ; preds = %189
  %203 = getelementptr inbounds i8, ptr %0, i64 8
  %204 = load i64, ptr %203, align 8, !tbaa !12
  %205 = load i64, ptr %2, align 8, !tbaa !8
  %.not96 = icmp eq i64 %204, %205
  br i1 %.not96, label %215, label %206

206:                                              ; preds = %202
  %207 = load ptr, ptr @sb_error_log, align 8
  %.not100 = icmp eq ptr %207, null
  %208 = load ptr, ptr @stderr, align 8
  %209 = select i1 %.not100, ptr %208, ptr %207
  %210 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %209, ptr noundef nonnull @.str.166) #4
  %211 = load ptr, ptr @sb_error_log, align 8
  %.not101 = icmp eq ptr %211, null
  %212 = load ptr, ptr @stderr, align 8
  %213 = select i1 %.not101, ptr %212, ptr %211
  %214 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %213, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

215:                                              ; preds = %202
  %216 = load i64, ptr %1, align 8, !tbaa !8
  %217 = getelementptr inbounds i8, ptr %2, i64 8
  %218 = load i64, ptr %217, align 8, !tbaa !12
  %.not97 = icmp eq i64 %216, %218
  br i1 %.not97, label %228, label %219

219:                                              ; preds = %215
  %220 = load ptr, ptr @sb_error_log, align 8
  %.not98 = icmp eq ptr %220, null
  %221 = load ptr, ptr @stderr, align 8
  %222 = select i1 %.not98, ptr %221, ptr %220
  %223 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %222, ptr noundef nonnull @.str.170) #4
  %224 = load ptr, ptr @sb_error_log, align 8
  %.not99 = icmp eq ptr %224, null
  %225 = load ptr, ptr @stderr, align 8
  %226 = select i1 %.not99, ptr %225, ptr %224
  %227 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %226, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

228:                                              ; preds = %215
  %229 = trunc i64 %190 to i32
  %230 = trunc i64 %204 to i32
  %231 = trunc i64 %216 to i32
  %232 = getelementptr inbounds i8, ptr %1, i64 24
  %233 = load ptr, ptr %232, align 8, !tbaa !13
  %234 = getelementptr inbounds i8, ptr %2, i64 24
  %235 = load ptr, ptr %234, align 8, !tbaa !13
  %236 = getelementptr inbounds i8, ptr %0, i64 24
  %237 = load ptr, ptr %236, align 8, !tbaa !13
  tail call void @cblas_dgemm(i32 noundef 102, i32 noundef 112, i32 noundef 112, i32 noundef %229, i32 noundef %230, i32 noundef %231, double noundef 1.000000e+00, ptr noundef %233, i32 noundef %231, ptr noundef %235, i32 noundef %230, double noundef 0.000000e+00, ptr noundef %237, i32 noundef %229) #4
  br label %247

238:                                              ; preds = %34
  %239 = load ptr, ptr @sb_error_log, align 8
  %.not134 = icmp eq ptr %239, null
  %240 = load ptr, ptr @stderr, align 8
  %241 = select i1 %.not134, ptr %240, ptr %239
  %242 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %241, ptr noundef nonnull @.str.171) #4
  %243 = load ptr, ptr @sb_error_log, align 8
  %.not135 = icmp eq ptr %243, null
  %244 = load ptr, ptr @stderr, align 8
  %245 = select i1 %.not135, ptr %244, ptr %243
  %246 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %245, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

247:                                              ; preds = %81, %130, %179, %228
  %248 = tail call i32 @sb_mat_is_finite(ptr noundef nonnull %0)
  %.not125 = icmp eq i32 %248, 0
  br i1 %.not125, label %249, label %258

249:                                              ; preds = %247
  %250 = load ptr, ptr @sb_error_log, align 8
  %.not126 = icmp eq ptr %250, null
  %251 = load ptr, ptr @stderr, align 8
  %252 = select i1 %.not126, ptr %251, ptr %250
  %253 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %252, ptr noundef nonnull @.str.172) #4
  %254 = load ptr, ptr @sb_error_log, align 8
  %.not127 = icmp eq ptr %254, null
  %255 = load ptr, ptr @stderr, align 8
  %256 = select i1 %.not127, ptr %255, ptr %254
  %257 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %256, ptr noundef nonnull @.str.1) #4
  tail call void @abort() #5
  unreachable

258:                                              ; preds = %247
  ret ptr %0
}

declare void @cblas_dgemm(i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, double noundef, ptr noundef, i32 noundef, ptr noundef, i32 noundef, double noundef, ptr noundef, i32 noundef) local_unnamed_addr #3

attributes #0 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { noreturn nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 = { nounwind }
attributes #5 = { 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 = !{!"omnipotent char", !7, i64 0}
!7 = !{!"Simple C/C++ TBAA"}
!8 = !{!9, !10, i64 0}
!9 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !11, i64 24}
!10 = !{!"long", !6, i64 0}
!11 = !{!"any pointer", !6, i64 0}
!12 = !{!9, !10, i64 8}
!13 = !{!9, !11, i64 24}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass