; LLVM IR from InsightSoftwareConsortium/ITK :: Modules/ThirdParty/VNL/src/vxl/v3p/netlib/sparse (spOutput)

; 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.MatrixFrame = type { double, i32, i32, i32, i32, ptr, ptr, ptr, i32, i32, i32, ptr, ptr, i32, i32, ptr, ptr, i64, ptr, i32, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32, i8, i32, double, i32, i32, i32, i32, i32, i32, %struct.MatrixElement, ptr, i32, ptr, i32, ptr, i32, ptr, ptr }
%struct.MatrixElement = type { double, i32, i32, ptr, ptr, ptr }

@stdout = external global ptr, align 8
@stderr = external global ptr, align 8
@.str = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [123 x i8], align 1
@spcMatrixIsNotValid = external global [0 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [27 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @spPrint(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) #0 {
  %5 = alloca ptr, align 8
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca i32, align 4
  %20 = alloca double, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca ptr, align 8
  %26 = alloca [9 x ptr], align 16
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  store ptr %0, ptr %5, align 8, !tbaa !5
  store i32 %1, ptr %6, align 4, !tbaa !9
  store i32 %2, ptr %7, align 4, !tbaa !9
  store i32 %3, ptr %8, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #7
  %32 = load ptr, ptr %5, align 8, !tbaa !5
  store ptr %32, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #7
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #7
  store i32 1, ptr %16, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #7
  store i32 0, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #7
  store double 0x7FEFFFFFFFFFFFFF, ptr %21, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #7
  store double 0x7FEFFFFFFFFFFFFF, ptr %22, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #7
  store double 0.000000e+00, ptr %23, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #7
  store double 0.000000e+00, ptr %24, align 8, !tbaa !11
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.start.p0(i64 72, ptr %26) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #7
  %33 = load ptr, ptr %9, align 8, !tbaa !5
  %34 = icmp ne ptr %33, null
  br i1 %34, label %35, label %40

35:                                               ; preds = %4
  %36 = load ptr, ptr %9, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.MatrixFrame, ptr %36, i32 0, i32 17
  %38 = load i64, ptr %37, align 8, !tbaa !13
  %39 = icmp eq i64 %38, 3735928559
  br i1 %39, label %47, label %40

40:                                               ; preds = %35, %4
  %41 = load ptr, ptr @stdout, align 8, !tbaa !5
  %42 = call i32 @fflush(ptr noundef %41)
  %43 = load ptr, ptr @stderr, align 8, !tbaa !5
  %44 = call i32 (ptr, ptr, ...) @fprintf(ptr noundef %43, ptr noundef @.str, ptr noundef @.str.1, i32 noundef 144, ptr noundef @spcMatrixIsNotValid) #7
  %45 = load ptr, ptr @stderr, align 8, !tbaa !5
  %46 = call i32 @fflush(ptr noundef %45)
  call void @abort() #8
  unreachable

47:                                               ; preds = %35
  %48 = load ptr, ptr %9, align 8, !tbaa !5
  %49 = getelementptr inbounds %struct.MatrixFrame, ptr %48, i32 0, i32 39
  %50 = load i32, ptr %49, align 4, !tbaa !17
  store i32 %50, ptr %14, align 4, !tbaa !9
  %51 = load ptr, ptr %9, align 8, !tbaa !5
  %52 = getelementptr inbounds %struct.MatrixFrame, ptr %51, i32 0, i32 2
  %53 = load i32, ptr %52, align 4, !tbaa !18
  store i32 %53, ptr %15, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #7
  %54 = load i32, ptr %15, align 4, !tbaa !9
  %55 = add nsw i32 %54, 1
  %56 = sext i32 %55 to i64
  %57 = mul i64 4, %56
  %58 = trunc i64 %57 to i32
  %59 = zext i32 %58 to i64
  %60 = call ptr @malloc(i64 noundef %59) #9
  store ptr %60, ptr %27, align 8, !tbaa !5
  %61 = load ptr, ptr %27, align 8, !tbaa !5
  %62 = icmp ne ptr %61, null
  br i1 %62, label %63, label %79

63:                                               ; preds = %47
  %64 = load i32, ptr %15, align 4, !tbaa !9
  %65 = add nsw i32 %64, 1
  %66 = sub nsw i32 %65, 1
  store i32 %66, ptr %29, align 4, !tbaa !9
  br label %67

67:                                               ; preds = %75, %63
  %68 = load i32, ptr %29, align 4, !tbaa !9
  %69 = icmp sge i32 %68, 0
  br i1 %69, label %70, label %78

70:                                               ; preds = %67
  %71 = load ptr, ptr %27, align 8, !tbaa !5
  %72 = load i32, ptr %29, align 4, !tbaa !9
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds i32, ptr %71, i64 %73
  store i32 0, ptr %74, align 4, !tbaa !9
  br label %75

75:                                               ; preds = %70
  %76 = load i32, ptr %29, align 4, !tbaa !9
  %77 = add nsw i32 %76, -1
  store i32 %77, ptr %29, align 4, !tbaa !9
  br label %67, !llvm.loop !19

78:                                               ; preds = %67
  br label %79

79:                                               ; preds = %78, %47
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #7
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #7
  %80 = load i32, ptr %15, align 4, !tbaa !9
  %81 = add nsw i32 %80, 1
  %82 = sext i32 %81 to i64
  %83 = mul i64 4, %82
  %84 = trunc i64 %83 to i32
  %85 = zext i32 %84 to i64
  %86 = call ptr @malloc(i64 noundef %85) #9
  store ptr %86, ptr %28, align 8, !tbaa !5
  %87 = load ptr, ptr %28, align 8, !tbaa !5
  %88 = icmp ne ptr %87, null
  br i1 %88, label %89, label %105

89:                                               ; preds = %79
  %90 = load i32, ptr %15, align 4, !tbaa !9
  %91 = add nsw i32 %90, 1
  %92 = sub nsw i32 %91, 1
  store i32 %92, ptr %30, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %101, %89
  %94 = load i32, ptr %30, align 4, !tbaa !9
  %95 = icmp sge i32 %94, 0
  br i1 %95, label %96, label %104

96:                                               ; preds = %93
  %97 = load ptr, ptr %28, align 8, !tbaa !5
  %98 = load i32, ptr %30, align 4, !tbaa !9
  %99 = sext i32 %98 to i64
  %100 = getelementptr inbounds i32, ptr %97, i64 %99
  store i32 0, ptr %100, align 4, !tbaa !9
  br label %101

101:                                              ; preds = %96
  %102 = load i32, ptr %30, align 4, !tbaa !9
  %103 = add nsw i32 %102, -1
  store i32 %103, ptr %30, align 4, !tbaa !9
  br label %93, !llvm.loop !21

104:                                              ; preds = %93
  br label %105

105:                                              ; preds = %104, %79
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #7
  %106 = load ptr, ptr %27, align 8, !tbaa !5
  %107 = icmp eq ptr %106, null
  br i1 %107, label %111, label %108

108:                                              ; preds = %105
  %109 = load ptr, ptr %28, align 8, !tbaa !5
  %110 = icmp eq ptr %109, null
  br i1 %110, label %111, label %114

111:                                              ; preds = %108, %105
  %112 = load ptr, ptr %9, align 8, !tbaa !5
  %113 = getelementptr inbounds %struct.MatrixFrame, ptr %112, i32 0, i32 9
  store i32 5, ptr %113, align 4, !tbaa !22
  store i32 1, ptr %31, align 4
  br label %611

114:                                              ; preds = %108
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %115

115:                                              ; preds = %142, %114
  %116 = load i32, ptr %11, align 4, !tbaa !9
  %117 = load i32, ptr %14, align 4, !tbaa !9
  %118 = icmp sle i32 %116, %117
  br i1 %118, label %119, label %145

119:                                              ; preds = %115
  %120 = load i32, ptr %11, align 4, !tbaa !9
  %121 = load ptr, ptr %27, align 8, !tbaa !5
  %122 = load ptr, ptr %9, align 8, !tbaa !5
  %123 = getelementptr inbounds %struct.MatrixFrame, ptr %122, i32 0, i32 21
  %124 = load ptr, ptr %123, align 8, !tbaa !23
  %125 = load i32, ptr %11, align 4, !tbaa !9
  %126 = sext i32 %125 to i64
  %127 = getelementptr inbounds i32, ptr %124, i64 %126
  %128 = load i32, ptr %127, align 4, !tbaa !9
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds i32, ptr %121, i64 %129
  store i32 %120, ptr %130, align 4, !tbaa !9
  %131 = load i32, ptr %11, align 4, !tbaa !9
  %132 = load ptr, ptr %28, align 8, !tbaa !5
  %133 = load ptr, ptr %9, align 8, !tbaa !5
  %134 = getelementptr inbounds %struct.MatrixFrame, ptr %133, i32 0, i32 20
  %135 = load ptr, ptr %134, align 8, !tbaa !24
  %136 = load i32, ptr %11, align 4, !tbaa !9
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds i32, ptr %135, i64 %137
  %139 = load i32, ptr %138, align 4, !tbaa !9
  %140 = sext i32 %139 to i64
  %141 = getelementptr inbounds i32, ptr %132, i64 %140
  store i32 %131, ptr %141, align 4, !tbaa !9
  br label %142

142:                                              ; preds = %119
  %143 = load i32, ptr %11, align 4, !tbaa !9
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %11, align 4, !tbaa !9
  br label %115, !llvm.loop !25

145:                                              ; preds = %115
  store i32 1, ptr %10, align 4, !tbaa !9
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %146

146:                                              ; preds = %169, %145
  %147 = load i32, ptr %11, align 4, !tbaa !9
  %148 = load i32, ptr %15, align 4, !tbaa !9
  %149 = icmp sle i32 %147, %148
  br i1 %149, label %150, label %172

150:                                              ; preds = %146
  %151 = load ptr, ptr %27, align 8, !tbaa !5
  %152 = load i32, ptr %11, align 4, !tbaa !9
  %153 = sext i32 %152 to i64
  %154 = getelementptr inbounds i32, ptr %151, i64 %153
  %155 = load i32, ptr %154, align 4, !tbaa !9
  %156 = icmp ne i32 %155, 0
  br i1 %156, label %157, label %168

157:                                              ; preds = %150
  %158 = load ptr, ptr %27, align 8, !tbaa !5
  %159 = load i32, ptr %11, align 4, !tbaa !9
  %160 = sext i32 %159 to i64
  %161 = getelementptr inbounds i32, ptr %158, i64 %160
  %162 = load i32, ptr %161, align 4, !tbaa !9
  %163 = load ptr, ptr %27, align 8, !tbaa !5
  %164 = load i32, ptr %10, align 4, !tbaa !9
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %10, align 4, !tbaa !9
  %166 = sext i32 %164 to i64
  %167 = getelementptr inbounds i32, ptr %163, i64 %166
  store i32 %162, ptr %167, align 4, !tbaa !9
  br label %168

168:                                              ; preds = %157, %150
  br label %169

169:                                              ; preds = %168
  %170 = load i32, ptr %11, align 4, !tbaa !9
  %171 = add nsw i32 %170, 1
  store i32 %171, ptr %11, align 4, !tbaa !9
  br label %146, !llvm.loop !26

172:                                              ; preds = %146
  store i32 1, ptr %10, align 4, !tbaa !9
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %173

173:                                              ; preds = %196, %172
  %174 = load i32, ptr %11, align 4, !tbaa !9
  %175 = load i32, ptr %15, align 4, !tbaa !9
  %176 = icmp sle i32 %174, %175
  br i1 %176, label %177, label %199

177:                                              ; preds = %173
  %178 = load ptr, ptr %28, align 8, !tbaa !5
  %179 = load i32, ptr %11, align 4, !tbaa !9
  %180 = sext i32 %179 to i64
  %181 = getelementptr inbounds i32, ptr %178, i64 %180
  %182 = load i32, ptr %181, align 4, !tbaa !9
  %183 = icmp ne i32 %182, 0
  br i1 %183, label %184, label %195

184:                                              ; preds = %177
  %185 = load ptr, ptr %28, align 8, !tbaa !5
  %186 = load i32, ptr %11, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds i32, ptr %185, i64 %187
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = load ptr, ptr %28, align 8, !tbaa !5
  %191 = load i32, ptr %10, align 4, !tbaa !9
  %192 = add nsw i32 %191, 1
  store i32 %192, ptr %10, align 4, !tbaa !9
  %193 = sext i32 %191 to i64
  %194 = getelementptr inbounds i32, ptr %190, i64 %193
  store i32 %189, ptr %194, align 4, !tbaa !9
  br label %195

195:                                              ; preds = %184, %177
  br label %196

196:                                              ; preds = %195
  %197 = load i32, ptr %11, align 4, !tbaa !9
  %198 = add nsw i32 %197, 1
  store i32 %198, ptr %11, align 4, !tbaa !9
  br label %173, !llvm.loop !27

199:                                              ; preds = %173
  %200 = load i32, ptr %8, align 4, !tbaa !9
  %201 = icmp ne i32 %200, 0
  br i1 %201, label %202, label %227

202:                                              ; preds = %199
  %203 = call i32 (ptr, ...) @printf(ptr noundef @.str.2)
  %204 = load i32, ptr %14, align 4, !tbaa !9
  %205 = load i32, ptr %14, align 4, !tbaa !9
  %206 = call i32 (ptr, ...) @printf(ptr noundef @.str.3, i32 noundef %204, i32 noundef %205)
  %207 = load ptr, ptr %9, align 8, !tbaa !5
  %208 = getelementptr inbounds %struct.MatrixFrame, ptr %207, i32 0, i32 34
  %209 = load i32, ptr %208, align 8, !tbaa !28
  %210 = icmp ne i32 %209, 0
  br i1 %210, label %211, label %216

211:                                              ; preds = %202
  %212 = load i32, ptr %6, align 4, !tbaa !9
  %213 = icmp ne i32 %212, 0
  br i1 %213, label %214, label %216

214:                                              ; preds = %211
  %215 = call i32 (ptr, ...) @printf(ptr noundef @.str.4)
  br label %216

216:                                              ; preds = %214, %211, %202
  %217 = call i32 @putchar(i32 noundef 10)
  %218 = load ptr, ptr %9, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.MatrixFrame, ptr %218, i32 0, i32 13
  %220 = load i32, ptr %219, align 8, !tbaa !29
  %221 = icmp ne i32 %220, 0
  br i1 %221, label %222, label %224

222:                                              ; preds = %216
  %223 = call i32 (ptr, ...) @printf(ptr noundef @.str.5)
  br label %226

224:                                              ; preds = %216
  %225 = call i32 (ptr, ...) @printf(ptr noundef @.str.6)
  br label %226

226:                                              ; preds = %224, %222
  br label %227

227:                                              ; preds = %226, %199
  %228 = load i32, ptr %14, align 4, !tbaa !9
  %229 = icmp eq i32 %228, 0
  br i1 %229, label %230, label %231

230:                                              ; preds = %227
  store i32 1, ptr %31, align 4
  br label %611

231:                                              ; preds = %227
  store i32 80, ptr %18, align 4, !tbaa !9
  %232 = load i32, ptr %8, align 4, !tbaa !9
  %233 = icmp ne i32 %232, 0
  br i1 %233, label %234, label %237

234:                                              ; preds = %231
  %235 = load i32, ptr %18, align 4, !tbaa !9
  %236 = sub nsw i32 %235, 5
  store i32 %236, ptr %18, align 4, !tbaa !9
  br label %237

237:                                              ; preds = %234, %231
  %238 = load i32, ptr %7, align 4, !tbaa !9
  %239 = icmp ne i32 %238, 0
  br i1 %239, label %240, label %244

240:                                              ; preds = %237
  %241 = load i32, ptr %18, align 4, !tbaa !9
  %242 = add nsw i32 %241, 1
  %243 = sdiv i32 %242, 10
  store i32 %243, ptr %18, align 4, !tbaa !9
  br label %244

244:                                              ; preds = %240, %237
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %245

245:                                              ; preds = %485, %244
  %246 = load i32, ptr %10, align 4, !tbaa !9
  %247 = load i32, ptr %14, align 4, !tbaa !9
  %248 = icmp sle i32 %246, %247
  br i1 %248, label %249, label %490

249:                                              ; preds = %245
  %250 = load i32, ptr %16, align 4, !tbaa !9
  %251 = load i32, ptr %18, align 4, !tbaa !9
  %252 = add nsw i32 %250, %251
  %253 = sub nsw i32 %252, 1
  store i32 %253, ptr %17, align 4, !tbaa !9
  %254 = load i32, ptr %17, align 4, !tbaa !9
  %255 = load i32, ptr %14, align 4, !tbaa !9
  %256 = icmp sgt i32 %254, %255
  br i1 %256, label %257, label %259

257:                                              ; preds = %249
  %258 = load i32, ptr %14, align 4, !tbaa !9
  store i32 %258, ptr %17, align 4, !tbaa !9
  br label %259

259:                                              ; preds = %257, %249
  %260 = load i32, ptr %8, align 4, !tbaa !9
  %261 = icmp ne i32 %260, 0
  br i1 %261, label %262, label %330

262:                                              ; preds = %259
  %263 = load i32, ptr %7, align 4, !tbaa !9
  %264 = icmp ne i32 %263, 0
  br i1 %264, label %265, label %297

265:                                              ; preds = %262
  %266 = call i32 (ptr, ...) @printf(ptr noundef @.str.7)
  %267 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %267, ptr %11, align 4, !tbaa !9
  br label %268

268:                                              ; preds = %292, %265
  %269 = load i32, ptr %11, align 4, !tbaa !9
  %270 = load i32, ptr %17, align 4, !tbaa !9
  %271 = icmp sle i32 %269, %270
  br i1 %271, label %272, label %295

272:                                              ; preds = %268
  %273 = load i32, ptr %6, align 4, !tbaa !9
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %277

275:                                              ; preds = %272
  %276 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %276, ptr %13, align 4, !tbaa !9
  br label %283

277:                                              ; preds = %272
  %278 = load ptr, ptr %28, align 8, !tbaa !5
  %279 = load i32, ptr %11, align 4, !tbaa !9
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %278, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !9
  store i32 %282, ptr %13, align 4, !tbaa !9
  br label %283

283:                                              ; preds = %277, %275
  %284 = load ptr, ptr %9, align 8, !tbaa !5
  %285 = getelementptr inbounds %struct.MatrixFrame, ptr %284, i32 0, i32 20
  %286 = load ptr, ptr %285, align 8, !tbaa !24
  %287 = load i32, ptr %13, align 4, !tbaa !9
  %288 = sext i32 %287 to i64
  %289 = getelementptr inbounds i32, ptr %286, i64 %288
  %290 = load i32, ptr %289, align 4, !tbaa !9
  %291 = call i32 (ptr, ...) @printf(ptr noundef @.str.8, i32 noundef %290)
  br label %292

292:                                              ; preds = %283
  %293 = load i32, ptr %11, align 4, !tbaa !9
  %294 = add nsw i32 %293, 1
  store i32 %294, ptr %11, align 4, !tbaa !9
  br label %268, !llvm.loop !30

295:                                              ; preds = %268
  %296 = call i32 (ptr, ...) @printf(ptr noundef @.str.9)
  br label %329

297:                                              ; preds = %262
  %298 = load i32, ptr %6, align 4, !tbaa !9
  %299 = icmp ne i32 %298, 0
  br i1 %299, label %300, label %304

300:                                              ; preds = %297
  %301 = load i32, ptr %16, align 4, !tbaa !9
  %302 = load i32, ptr %17, align 4, !tbaa !9
  %303 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef %301, i32 noundef %302)
  br label %328

304:                                              ; preds = %297
  %305 = load ptr, ptr %9, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.MatrixFrame, ptr %305, i32 0, i32 20
  %307 = load ptr, ptr %306, align 8, !tbaa !24
  %308 = load ptr, ptr %28, align 8, !tbaa !5
  %309 = load i32, ptr %16, align 4, !tbaa !9
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %308, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !9
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds i32, ptr %307, i64 %313
  %315 = load i32, ptr %314, align 4, !tbaa !9
  %316 = load ptr, ptr %9, align 8, !tbaa !5
  %317 = getelementptr inbounds %struct.MatrixFrame, ptr %316, i32 0, i32 20
  %318 = load ptr, ptr %317, align 8, !tbaa !24
  %319 = load ptr, ptr %28, align 8, !tbaa !5
  %320 = load i32, ptr %17, align 4, !tbaa !9
  %321 = sext i32 %320 to i64
  %322 = getelementptr inbounds i32, ptr %319, i64 %321
  %323 = load i32, ptr %322, align 4, !tbaa !9
  %324 = sext i32 %323 to i64
  %325 = getelementptr inbounds i32, ptr %318, i64 %324
  %326 = load i32, ptr %325, align 4, !tbaa !9
  %327 = call i32 (ptr, ...) @printf(ptr noundef @.str.10, i32 noundef %315, i32 noundef %326)
  br label %328

328:                                              ; preds = %304, %300
  br label %329

329:                                              ; preds = %328, %295
  br label %330

330:                                              ; preds = %329, %259
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %331

331:                                              ; preds = %482, %330
  %332 = load i32, ptr %11, align 4, !tbaa !9
  %333 = load i32, ptr %14, align 4, !tbaa !9
  %334 = icmp sle i32 %332, %333
  br i1 %334, label %335, label %485

335:                                              ; preds = %331
  %336 = load i32, ptr %6, align 4, !tbaa !9
  %337 = icmp ne i32 %336, 0
  br i1 %337, label %338, label %340

338:                                              ; preds = %335
  %339 = load i32, ptr %11, align 4, !tbaa !9
  store i32 %339, ptr %12, align 4, !tbaa !9
  br label %346

340:                                              ; preds = %335
  %341 = load ptr, ptr %27, align 8, !tbaa !5
  %342 = load i32, ptr %11, align 4, !tbaa !9
  %343 = sext i32 %342 to i64
  %344 = getelementptr inbounds i32, ptr %341, i64 %343
  %345 = load i32, ptr %344, align 4, !tbaa !9
  store i32 %345, ptr %12, align 4, !tbaa !9
  br label %346

346:                                              ; preds = %340, %338
  %347 = load i32, ptr %8, align 4, !tbaa !9
  %348 = icmp ne i32 %347, 0
  br i1 %348, label %349, label %373

349:                                              ; preds = %346
  %350 = load i32, ptr %6, align 4, !tbaa !9
  %351 = icmp ne i32 %350, 0
  br i1 %351, label %352, label %358

352:                                              ; preds = %349
  %353 = load i32, ptr %7, align 4, !tbaa !9
  %354 = icmp ne i32 %353, 0
  br i1 %354, label %358, label %355

355:                                              ; preds = %352
  %356 = load i32, ptr %11, align 4, !tbaa !9
  %357 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %356)
  br label %367

358:                                              ; preds = %352, %349
  %359 = load ptr, ptr %9, align 8, !tbaa !5
  %360 = getelementptr inbounds %struct.MatrixFrame, ptr %359, i32 0, i32 21
  %361 = load ptr, ptr %360, align 8, !tbaa !23
  %362 = load i32, ptr %12, align 4, !tbaa !9
  %363 = sext i32 %362 to i64
  %364 = getelementptr inbounds i32, ptr %361, i64 %363
  %365 = load i32, ptr %364, align 4, !tbaa !9
  %366 = call i32 (ptr, ...) @printf(ptr noundef @.str.11, i32 noundef %365)
  br label %367

367:                                              ; preds = %358, %355
  %368 = load i32, ptr %7, align 4, !tbaa !9
  %369 = icmp ne i32 %368, 0
  br i1 %369, label %372, label %370

370:                                              ; preds = %367
  %371 = call i32 @putchar(i32 noundef 32)
  br label %372

372:                                              ; preds = %370, %367
  br label %373

373:                                              ; preds = %372, %346
  %374 = load i32, ptr %16, align 4, !tbaa !9
  store i32 %374, ptr %10, align 4, !tbaa !9
  br label %375

375:                                              ; preds = %477, %373
  %376 = load i32, ptr %10, align 4, !tbaa !9
  %377 = load i32, ptr %17, align 4, !tbaa !9
  %378 = icmp sle i32 %376, %377
  br i1 %378, label %379, label %480

379:                                              ; preds = %375
  %380 = load i32, ptr %6, align 4, !tbaa !9
  %381 = icmp ne i32 %380, 0
  br i1 %381, label %382, label %384

382:                                              ; preds = %379
  %383 = load i32, ptr %10, align 4, !tbaa !9
  store i32 %383, ptr %13, align 4, !tbaa !9
  br label %390

384:                                              ; preds = %379
  %385 = load ptr, ptr %28, align 8, !tbaa !5
  %386 = load i32, ptr %10, align 4, !tbaa !9
  %387 = sext i32 %386 to i64
  %388 = getelementptr inbounds i32, ptr %385, i64 %387
  %389 = load i32, ptr %388, align 4, !tbaa !9
  store i32 %389, ptr %13, align 4, !tbaa !9
  br label %390

390:                                              ; preds = %384, %382
  %391 = load ptr, ptr %9, align 8, !tbaa !5
  %392 = getelementptr inbounds %struct.MatrixFrame, ptr %391, i32 0, i32 15
  %393 = load ptr, ptr %392, align 8, !tbaa !31
  %394 = load i32, ptr %13, align 4, !tbaa !9
  %395 = sext i32 %394 to i64
  %396 = getelementptr inbounds ptr, ptr %393, i64 %395
  %397 = load ptr, ptr %396, align 8, !tbaa !5
  store ptr %397, ptr %25, align 8, !tbaa !5
  br label %398

398:                                              ; preds = %409, %390
  %399 = load ptr, ptr %25, align 8, !tbaa !5
  %400 = icmp ne ptr %399, null
  br i1 %400, label %401, label %407

401:                                              ; preds = %398
  %402 = load ptr, ptr %25, align 8, !tbaa !5
  %403 = getelementptr inbounds %struct.MatrixElement, ptr %402, i32 0, i32 1
  %404 = load i32, ptr %403, align 8, !tbaa !32
  %405 = load i32, ptr %12, align 4, !tbaa !9
  %406 = icmp ne i32 %404, %405
  br label %407

407:                                              ; preds = %401, %398
  %408 = phi i1 [ false, %398 ], [ %406, %401 ]
  br i1 %408, label %409, label %413

409:                                              ; preds = %407
  %410 = load ptr, ptr %25, align 8, !tbaa !5
  %411 = getelementptr inbounds %struct.MatrixElement, ptr %410, i32 0, i32 4
  %412 = load ptr, ptr %411, align 8, !tbaa !33
  store ptr %412, ptr %25, align 8, !tbaa !5
  br label %398, !llvm.loop !34

413:                                              ; preds = %407
  %414 = load i32, ptr %7, align 4, !tbaa !9
  %415 = icmp ne i32 %414, 0
  br i1 %415, label %416, label %423

416:                                              ; preds = %413
  %417 = load ptr, ptr %25, align 8, !tbaa !5
  %418 = load i32, ptr %10, align 4, !tbaa !9
  %419 = load i32, ptr %16, align 4, !tbaa !9
  %420 = sub nsw i32 %418, %419
  %421 = sext i32 %420 to i64
  %422 = getelementptr inbounds [9 x ptr], ptr %26, i64 0, i64 %421
  store ptr %417, ptr %422, align 8, !tbaa !5
  br label %423

423:                                              ; preds = %416, %413
  %424 = load ptr, ptr %25, align 8, !tbaa !5
  %425 = icmp ne ptr %424, null
  br i1 %425, label %426, label %468

426:                                              ; preds = %423
  %427 = load i32, ptr %7, align 4, !tbaa !9
  %428 = icmp ne i32 %427, 0
  br i1 %428, label %429, label %434

429:                                              ; preds = %426
  %430 = load ptr, ptr %25, align 8, !tbaa !5
  %431 = getelementptr inbounds %struct.MatrixElement, ptr %430, i32 0, i32 0
  %432 = load double, ptr %431, align 8, !tbaa !35
  %433 = call i32 (ptr, ...) @printf(ptr noundef @.str.12, double noundef %432)
  br label %436

434:                                              ; preds = %426
  %435 = call i32 @putchar(i32 noundef 120)
  br label %436

436:                                              ; preds = %434, %429
  %437 = load ptr, ptr %25, align 8, !tbaa !5
  %438 = getelementptr inbounds %struct.MatrixElement, ptr %437, i32 0, i32 0
  %439 = load double, ptr %438, align 8, !tbaa !35
  %440 = fcmp olt double %439, 0.000000e+00
  br i1 %440, label %441, label %446

441:                                              ; preds = %436
  %442 = load ptr, ptr %25, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.MatrixElement, ptr %442, i32 0, i32 0
  %444 = load double, ptr %443, align 8, !tbaa !35
  %445 = fneg double %444
  br label %450

446:                                              ; preds = %436
  %447 = load ptr, ptr %25, align 8, !tbaa !5
  %448 = getelementptr inbounds %struct.MatrixElement, ptr %447, i32 0, i32 0
  %449 = load double, ptr %448, align 8, !tbaa !35
  br label %450

450:                                              ; preds = %446, %441
  %451 = phi double [ %445, %441 ], [ %449, %446 ]
  store double %451, ptr %20, align 8, !tbaa !11
  %452 = load double, ptr %23, align 8, !tbaa !11
  %453 = fcmp ogt double %451, %452
  br i1 %453, label %454, label %456

454:                                              ; preds = %450
  %455 = load double, ptr %20, align 8, !tbaa !11
  store double %455, ptr %23, align 8, !tbaa !11
  br label %456

456:                                              ; preds = %454, %450
  %457 = load double, ptr %20, align 8, !tbaa !11
  %458 = load double, ptr %22, align 8, !tbaa !11
  %459 = fcmp olt double %457, %458
  br i1 %459, label %460, label %465

460:                                              ; preds = %456
  %461 = load double, ptr %20, align 8, !tbaa !11
  %462 = fcmp une double %461, 0.000000e+00
  br i1 %462, label %463, label %465

463:                                              ; preds = %460
  %464 = load double, ptr %20, align 8, !tbaa !11
  store double %464, ptr %22, align 8, !tbaa !11
  br label %465

465:                                              ; preds = %463, %460, %456
  %466 = load i32, ptr %19, align 4, !tbaa !9
  %467 = add nsw i32 %466, 1
  store i32 %467, ptr %19, align 4, !tbaa !9
  br label %476

468:                                              ; preds = %423
  %469 = load i32, ptr %7, align 4, !tbaa !9
  %470 = icmp ne i32 %469, 0
  br i1 %470, label %471, label %473

471:                                              ; preds = %468
  %472 = call i32 (ptr, ...) @printf(ptr noundef @.str.13)
  br label %475

473:                                              ; preds = %468
  %474 = call i32 @putchar(i32 noundef 46)
  br label %475

475:                                              ; preds = %473, %471
  br label %476

476:                                              ; preds = %475, %465
  br label %477

477:                                              ; preds = %476
  %478 = load i32, ptr %10, align 4, !tbaa !9
  %479 = add nsw i32 %478, 1
  store i32 %479, ptr %10, align 4, !tbaa !9
  br label %375, !llvm.loop !36

480:                                              ; preds = %375
  %481 = call i32 @putchar(i32 noundef 10)
  br label %482

482:                                              ; preds = %480
  %483 = load i32, ptr %11, align 4, !tbaa !9
  %484 = add nsw i32 %483, 1
  store i32 %484, ptr %11, align 4, !tbaa !9
  br label %331, !llvm.loop !37

485:                                              ; preds = %331
  %486 = load i32, ptr %17, align 4, !tbaa !9
  store i32 %486, ptr %16, align 4, !tbaa !9
  %487 = load i32, ptr %16, align 4, !tbaa !9
  %488 = add nsw i32 %487, 1
  store i32 %488, ptr %16, align 4, !tbaa !9
  %489 = call i32 @putchar(i32 noundef 10)
  br label %245, !llvm.loop !38

490:                                              ; preds = %245
  %491 = load i32, ptr %8, align 4, !tbaa !9
  %492 = icmp ne i32 %491, 0
  br i1 %492, label %493, label %597

493:                                              ; preds = %490
  %494 = load double, ptr %23, align 8, !tbaa !11
  %495 = call i32 (ptr, ...) @printf(ptr noundef @.str.14, double noundef %494)
  %496 = load double, ptr %22, align 8, !tbaa !11
  %497 = call i32 (ptr, ...) @printf(ptr noundef @.str.15, double noundef %496)
  store i32 1, ptr %11, align 4, !tbaa !9
  br label %498

498:                                              ; preds = %558, %493
  %499 = load i32, ptr %11, align 4, !tbaa !9
  %500 = load i32, ptr %14, align 4, !tbaa !9
  %501 = icmp sle i32 %499, %500
  br i1 %501, label %502, label %561

502:                                              ; preds = %498
  %503 = load ptr, ptr %9, align 8, !tbaa !5
  %504 = getelementptr inbounds %struct.MatrixFrame, ptr %503, i32 0, i32 5
  %505 = load ptr, ptr %504, align 8, !tbaa !39
  %506 = load i32, ptr %11, align 4, !tbaa !9
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds ptr, ptr %505, i64 %507
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  %510 = icmp ne ptr %509, null
  br i1 %510, label %511, label %557

511:                                              ; preds = %502
  %512 = load ptr, ptr %9, align 8, !tbaa !5
  %513 = getelementptr inbounds %struct.MatrixFrame, ptr %512, i32 0, i32 5
  %514 = load ptr, ptr %513, align 8, !tbaa !39
  %515 = load i32, ptr %11, align 4, !tbaa !9
  %516 = sext i32 %515 to i64
  %517 = getelementptr inbounds ptr, ptr %514, i64 %516
  %518 = load ptr, ptr %517, align 8, !tbaa !5
  %519 = getelementptr inbounds %struct.MatrixElement, ptr %518, i32 0, i32 0
  %520 = load double, ptr %519, align 8, !tbaa !35
  %521 = fcmp olt double %520, 0.000000e+00
  br i1 %521, label %522, label %533

522:                                              ; preds = %511
  %523 = load ptr, ptr %9, align 8, !tbaa !5
  %524 = getelementptr inbounds %struct.MatrixFrame, ptr %523, i32 0, i32 5
  %525 = load ptr, ptr %524, align 8, !tbaa !39
  %526 = load i32, ptr %11, align 4, !tbaa !9
  %527 = sext i32 %526 to i64
  %528 = getelementptr inbounds ptr, ptr %525, i64 %527
  %529 = load ptr, ptr %528, align 8, !tbaa !5
  %530 = getelementptr inbounds %struct.MatrixElement, ptr %529, i32 0, i32 0
  %531 = load double, ptr %530, align 8, !tbaa !35
  %532 = fneg double %531
  br label %543

533:                                              ; preds = %511
  %534 = load ptr, ptr %9, align 8, !tbaa !5
  %535 = getelementptr inbounds %struct.MatrixFrame, ptr %534, i32 0, i32 5
  %536 = load ptr, ptr %535, align 8, !tbaa !39
  %537 = load i32, ptr %11, align 4, !tbaa !9
  %538 = sext i32 %537 to i64
  %539 = getelementptr inbounds ptr, ptr %536, i64 %538
  %540 = load ptr, ptr %539, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.MatrixElement, ptr %540, i32 0, i32 0
  %542 = load double, ptr %541, align 8, !tbaa !35
  br label %543

543:                                              ; preds = %533, %522
  %544 = phi double [ %532, %522 ], [ %542, %533 ]
  store double %544, ptr %20, align 8, !tbaa !11
  %545 = load double, ptr %20, align 8, !tbaa !11
  %546 = load double, ptr %24, align 8, !tbaa !11
  %547 = fcmp ogt double %545, %546
  br i1 %547, label %548, label %550

548:                                              ; preds = %543
  %549 = load double, ptr %20, align 8, !tbaa !11
  store double %549, ptr %24, align 8, !tbaa !11
  br label %550

550:                                              ; preds = %548, %543
  %551 = load double, ptr %20, align 8, !tbaa !11
  %552 = load double, ptr %21, align 8, !tbaa !11
  %553 = fcmp olt double %551, %552
  br i1 %553, label %554, label %556

554:                                              ; preds = %550
  %555 = load double, ptr %20, align 8, !tbaa !11
  store double %555, ptr %21, align 8, !tbaa !11
  br label %556

556:                                              ; preds = %554, %550
  br label %557

557:                                              ; preds = %556, %502
  br label %558

558:                                              ; preds = %557
  %559 = load i32, ptr %11, align 4, !tbaa !9
  %560 = add nsw i32 %559, 1
  store i32 %560, ptr %11, align 4, !tbaa !9
  br label %498, !llvm.loop !40

561:                                              ; preds = %498
  %562 = load ptr, ptr %9, align 8, !tbaa !5
  %563 = getelementptr inbounds %struct.MatrixFrame, ptr %562, i32 0, i32 13
  %564 = load i32, ptr %563, align 8, !tbaa !29
  %565 = icmp ne i32 %564, 0
  br i1 %565, label %566, label %571

566:                                              ; preds = %561
  %567 = load double, ptr %24, align 8, !tbaa !11
  %568 = call i32 (ptr, ...) @printf(ptr noundef @.str.16, double noundef %567)
  %569 = load double, ptr %21, align 8, !tbaa !11
  %570 = call i32 (ptr, ...) @printf(ptr noundef @.str.17, double noundef %569)
  br label %576

571:                                              ; preds = %561
  %572 = load double, ptr %24, align 8, !tbaa !11
  %573 = call i32 (ptr, ...) @printf(ptr noundef @.str.18, double noundef %572)
  %574 = load double, ptr %21, align 8, !tbaa !11
  %575 = call i32 (ptr, ...) @printf(ptr noundef @.str.19, double noundef %574)
  br label %576

576:                                              ; preds = %571, %566
  %577 = load i32, ptr %19, align 4, !tbaa !9
  %578 = sitofp i32 %577 to double
  %579 = fmul double %578, 1.000000e+02
  %580 = load i32, ptr %14, align 4, !tbaa !9
  %581 = sitofp i32 %580 to double
  %582 = load i32, ptr %14, align 4, !tbaa !9
  %583 = sitofp i32 %582 to double
  %584 = fmul double %581, %583
  %585 = fdiv double %579, %584
  %586 = call i32 (ptr, ...) @printf(ptr noundef @.str.20, double noundef %585)
  %587 = load ptr, ptr %9, align 8, !tbaa !5
  %588 = getelementptr inbounds %struct.MatrixFrame, ptr %587, i32 0, i32 26
  %589 = load i32, ptr %588, align 4, !tbaa !41
  %590 = icmp ne i32 %589, 0
  br i1 %590, label %596, label %591

591:                                              ; preds = %576
  %592 = load ptr, ptr %9, align 8, !tbaa !5
  %593 = getelementptr inbounds %struct.MatrixFrame, ptr %592, i32 0, i32 14
  %594 = load i32, ptr %593, align 4, !tbaa !42
  %595 = call i32 (ptr, ...) @printf(ptr noundef @.str.21, i32 noundef %594)
  br label %596

596:                                              ; preds = %591, %576
  br label %597

597:                                              ; preds = %596, %490
  %598 = call i32 @putchar(i32 noundef 10)
  %599 = load ptr, ptr @stdout, align 8, !tbaa !5
  %600 = call i32 @fflush(ptr noundef %599)
  %601 = load ptr, ptr %28, align 8, !tbaa !5
  %602 = icmp ne ptr %601, null
  br i1 %602, label %603, label %605

603:                                              ; preds = %597
  %604 = load ptr, ptr %28, align 8, !tbaa !5
  call void @free(ptr noundef %604)
  br label %605

605:                                              ; preds = %603, %597
  store ptr null, ptr %28, align 8, !tbaa !5
  %606 = load ptr, ptr %27, align 8, !tbaa !5
  %607 = icmp ne ptr %606, null
  br i1 %607, label %608, label %610

608:                                              ; preds = %605
  %609 = load ptr, ptr %27, align 8, !tbaa !5
  call void @free(ptr noundef %609)
  br label %610

610:                                              ; preds = %608, %605
  store ptr null, ptr %27, align 8, !tbaa !5
  store i32 1, ptr %31, align 4
  br label %611

611:                                              ; preds = %610, %230, %111
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #7
  call void @llvm.lifetime.end.p0(i64 72, ptr %26) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #7
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #7
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #7
  ret void
}

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

declare i32 @fflush(ptr noundef) #2

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

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

; Function Attrs: allocsize(0)
declare ptr @malloc(i64 noundef) #5

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

declare i32 @printf(ptr noundef, ...) #2

; Function Attrs: inlinehint nounwind uwtable
declare i32 @putchar(i32 noundef) #6

declare void @free(ptr noundef) #2

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

!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 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !15, i64 104}
!14 = !{!"MatrixFrame", !12, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !6, i64 24, !6, i64 32, !6, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !6, i64 64, !6, i64 72, !10, i64 80, !10, i64 84, !6, i64 88, !6, i64 96, !15, i64 104, !6, i64 112, !10, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152, !6, i64 160, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !7, i64 192, !10, i64 196, !12, i64 200, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !16, i64 232, !6, i64 272, !10, i64 280, !6, i64 288, !10, i64 296, !6, i64 304, !10, i64 312, !6, i64 320, !6, i64 328}
!15 = !{!"long", !7, i64 0}
!16 = !{!"MatrixElement", !12, i64 0, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32}
!17 = !{!14, !10, i64 228}
!18 = !{!14, !10, i64 12}
!19 = distinct !{!19, !20}
!20 = !{!"llvm.loop.mustprogress"}
!21 = distinct !{!21, !20}
!22 = !{!14, !10, i64 52}
!23 = !{!14, !6, i64 136}
!24 = !{!14, !6, i64 128}
!25 = distinct !{!25, !20}
!26 = distinct !{!26, !20}
!27 = distinct !{!27, !20}
!28 = !{!14, !10, i64 208}
!29 = !{!14, !10, i64 80}
!30 = distinct !{!30, !20}
!31 = !{!14, !6, i64 88}
!32 = !{!16, !10, i64 8}
!33 = !{!16, !6, i64 24}
!34 = distinct !{!34, !20}
!35 = !{!16, !12, i64 0}
!36 = distinct !{!36, !20}
!37 = distinct !{!37, !20}
!38 = distinct !{!38, !20}
!39 = !{!14, !6, i64 24}
!40 = distinct !{!40, !20}
!41 = !{!14, !10, i64 172}
!42 = !{!14, !10, i64 84}


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

@stdout = external local_unnamed_addr global ptr, align 8
@stderr = external local_unnamed_addr global ptr, align 8
@.str = external hidden unnamed_addr constant [66 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [123 x i8], align 1
@spcMatrixIsNotValid = external global [0 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [17 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [28 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [29 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [30 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [11 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [38 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [37 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [34 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [21 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [27 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @spPrint(ptr noundef %0, i32 noundef %1, i32 noundef %2, i32 noundef %3) local_unnamed_addr #0 {
  %.not = icmp eq ptr %0, null
  br i1 %.not, label %9, label %5

5:                                                ; preds = %4
  %6 = getelementptr inbounds i8, ptr %0, i64 104
  %7 = load i64, ptr %6, align 8, !tbaa !5
  %8 = icmp eq i64 %7, 3735928559
  br i1 %8, label %16, label %9

9:                                                ; preds = %5, %4
  %10 = load ptr, ptr @stdout, align 8, !tbaa !14
  %11 = tail call i32 @fflush(ptr noundef %10)
  %12 = load ptr, ptr @stderr, align 8, !tbaa !14
  %13 = tail call i32 (ptr, ptr, ...) @fprintf(ptr noundef %12, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, i32 noundef 144, ptr noundef nonnull @spcMatrixIsNotValid) #8
  %14 = load ptr, ptr @stderr, align 8, !tbaa !14
  %15 = tail call i32 @fflush(ptr noundef %14)
  tail call void @abort() #9
  unreachable

16:                                               ; preds = %5
  %17 = getelementptr inbounds i8, ptr %0, i64 228
  %18 = load i32, ptr %17, align 4, !tbaa !15
  %19 = getelementptr inbounds i8, ptr %0, i64 12
  %20 = load i32, ptr %19, align 4, !tbaa !16
  %21 = shl i32 %20, 2
  %22 = add i32 %21, 4
  %23 = zext i32 %22 to i64
  %24 = tail call ptr @malloc(i64 noundef %23) #10
  %.not232 = icmp eq ptr %24, null
  %25 = icmp slt i32 %20, 0
  %or.cond336.not = or i1 %25, %.not232
  br i1 %or.cond336.not, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %16
  %26 = add nuw i32 %20, 1
  %27 = zext i32 %26 to i64
  %28 = shl nuw nsw i64 %27, 2
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %24, i8 0, i64 %28, i1 false), !tbaa !17
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph.preheader, %16
  %29 = tail call ptr @malloc(i64 noundef %23) #10
  %.not233 = icmp eq ptr %29, null
  br i1 %.not233, label %.thread, label %.preheader260

.preheader260:                                    ; preds = %.loopexit
  %30 = icmp sgt i32 %20, -1
  br i1 %30, label %.lr.ph265.preheader, label %._crit_edge

.lr.ph265.preheader:                              ; preds = %.preheader260
  %31 = add nuw i32 %20, 1
  %32 = zext i32 %31 to i64
  %33 = shl nuw nsw i64 %32, 2
  tail call void @llvm.memset.p0.i64(ptr noundef nonnull align 4 dereferenceable(1) %29, i8 0, i64 %33, i1 false), !tbaa !17
  br label %._crit_edge

._crit_edge:                                      ; preds = %.lr.ph265.preheader, %.preheader260
  br i1 %.not232, label %.thread, label %.preheader259

.preheader259:                                    ; preds = %._crit_edge
  %.not234266 = icmp slt i32 %18, 1
  br i1 %.not234266, label %.preheader258, label %.lr.ph268

.lr.ph268:                                        ; preds = %.preheader259
  %34 = getelementptr inbounds i8, ptr %0, i64 136
  %35 = load ptr, ptr %34, align 8, !tbaa !18
  %36 = getelementptr inbounds i8, ptr %0, i64 128
  %37 = load ptr, ptr %36, align 8, !tbaa !19
  %38 = zext nneg i32 %18 to i64
  %xtraiter = and i64 %38, 1
  %39 = icmp eq i32 %18, 1
  br i1 %39, label %.preheader258.loopexit.unr-lcssa, label %.lr.ph268.new

.lr.ph268.new:                                    ; preds = %.lr.ph268
  %unroll_iter = and i64 %38, 2147483646
  br label %54

.thread:                                          ; preds = %.loopexit, %._crit_edge
  %40 = getelementptr inbounds i8, ptr %0, i64 52
  store i32 5, ptr %40, align 4, !tbaa !20
  br label %276

.preheader258.loopexit.unr-lcssa:                 ; preds = %54, %.lr.ph268
  %indvars.iv.unr = phi i64 [ 1, %.lr.ph268 ], [ %indvars.iv.next.1, %54 ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.preheader258, label %.preheader258.loopexit.epilog-lcssa

.preheader258.loopexit.epilog-lcssa:              ; preds = %.preheader258.loopexit.unr-lcssa
  %41 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.unr
  %42 = load i32, ptr %41, align 4, !tbaa !17
  %43 = sext i32 %42 to i64
  %44 = getelementptr inbounds i32, ptr %24, i64 %43
  %45 = trunc nuw nsw i64 %indvars.iv.unr to i32
  store i32 %45, ptr %44, align 4, !tbaa !17
  %46 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.unr
  %47 = load i32, ptr %46, align 4, !tbaa !17
  %48 = sext i32 %47 to i64
  %49 = getelementptr inbounds i32, ptr %29, i64 %48
  store i32 %45, ptr %49, align 4, !tbaa !17
  br label %.preheader258

.preheader258:                                    ; preds = %.preheader258.loopexit.epilog-lcssa, %.preheader258.loopexit.unr-lcssa, %.preheader259
  %.not235269 = icmp slt i32 %20, 1
  br i1 %.not235269, label %._crit_edge277, label %.lr.ph272.preheader

.lr.ph272.preheader:                              ; preds = %.preheader258
  %50 = zext nneg i32 %20 to i64
  %51 = zext nneg i32 %20 to i64
  %52 = add nsw i64 %51, -1
  %xtraiter410 = and i64 %50, 1
  %53 = icmp eq i64 %52, 0
  br i1 %53, label %.preheader.unr-lcssa, label %.lr.ph272.preheader.new

.lr.ph272.preheader.new:                          ; preds = %.lr.ph272.preheader
  %unroll_iter412 = and i64 %50, 2147483646
  %invariant.gep = getelementptr inbounds i8, ptr %24, i64 4
  br label %.lr.ph272

54:                                               ; preds = %54, %.lr.ph268.new
  %indvars.iv = phi i64 [ 1, %.lr.ph268.new ], [ %indvars.iv.next.1, %54 ]
  %niter = phi i64 [ 0, %.lr.ph268.new ], [ %niter.next.1, %54 ]
  %55 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv
  %56 = load i32, ptr %55, align 4, !tbaa !17
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds i32, ptr %24, i64 %57
  %59 = trunc nuw nsw i64 %indvars.iv to i32
  store i32 %59, ptr %58, align 4, !tbaa !17
  %60 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv
  %61 = load i32, ptr %60, align 4, !tbaa !17
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds i32, ptr %29, i64 %62
  store i32 %59, ptr %63, align 4, !tbaa !17
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %64 = getelementptr inbounds i32, ptr %35, i64 %indvars.iv.next
  %65 = load i32, ptr %64, align 4, !tbaa !17
  %66 = sext i32 %65 to i64
  %67 = getelementptr inbounds i32, ptr %24, i64 %66
  %68 = trunc nuw nsw i64 %indvars.iv.next to i32
  store i32 %68, ptr %67, align 4, !tbaa !17
  %69 = getelementptr inbounds i32, ptr %37, i64 %indvars.iv.next
  %70 = load i32, ptr %69, align 4, !tbaa !17
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds i32, ptr %29, i64 %71
  store i32 %68, ptr %72, align 4, !tbaa !17
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %.preheader258.loopexit.unr-lcssa, label %54, !llvm.loop !21

.preheader.unr-lcssa:                             ; preds = %90, %.lr.ph272.preheader
  %indvars.iv346.unr = phi i64 [ 1, %.lr.ph272.preheader ], [ %indvars.iv.next347.1, %90 ]
  %.0199271.unr = phi i32 [ 1, %.lr.ph272.preheader ], [ %.1200.1, %90 ]
  %lcmp.mod411.not = icmp eq i64 %xtraiter410, 0
  br i1 %lcmp.mod411.not, label %.preheader, label %.lr.ph272.epil

.lr.ph272.epil:                                   ; preds = %.preheader.unr-lcssa
  %73 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv346.unr
  %74 = load i32, ptr %73, align 4, !tbaa !17
  %.not253.epil = icmp eq i32 %74, 0
  br i1 %.not253.epil, label %.preheader, label %75

75:                                               ; preds = %.lr.ph272.epil
  %76 = sext i32 %.0199271.unr to i64
  %77 = getelementptr inbounds i32, ptr %24, i64 %76
  store i32 %74, ptr %77, align 4, !tbaa !17
  br label %.preheader

.preheader:                                       ; preds = %.lr.ph272.epil, %75, %.preheader.unr-lcssa
  br i1 %.not235269, label %._crit_edge277, label %.lr.ph276.preheader

.lr.ph276.preheader:                              ; preds = %.preheader
  %xtraiter414 = and i64 %50, 1
  %78 = icmp eq i64 %52, 0
  br i1 %78, label %._crit_edge277.loopexit.unr-lcssa, label %.lr.ph276.preheader.new

.lr.ph276.preheader.new:                          ; preds = %.lr.ph276.preheader
  %unroll_iter416 = and i64 %50, 2147483646
  %invariant.gep420 = getelementptr inbounds i8, ptr %29, i64 4
  br label %.lr.ph276

.lr.ph272:                                        ; preds = %90, %.lr.ph272.preheader.new
  %indvars.iv346 = phi i64 [ 1, %.lr.ph272.preheader.new ], [ %indvars.iv.next347.1, %90 ]
  %.0199271 = phi i32 [ 1, %.lr.ph272.preheader.new ], [ %.1200.1, %90 ]
  %niter413 = phi i64 [ 0, %.lr.ph272.preheader.new ], [ %niter413.next.1, %90 ]
  %79 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv346
  %80 = load i32, ptr %79, align 4, !tbaa !17
  %.not253 = icmp eq i32 %80, 0
  br i1 %.not253, label %.lr.ph272.1, label %81

81:                                               ; preds = %.lr.ph272
  %82 = add nsw i32 %.0199271, 1
  %83 = sext i32 %.0199271 to i64
  %84 = getelementptr inbounds i32, ptr %24, i64 %83
  store i32 %80, ptr %84, align 4, !tbaa !17
  br label %.lr.ph272.1

.lr.ph272.1:                                      ; preds = %.lr.ph272, %81
  %.1200 = phi i32 [ %82, %81 ], [ %.0199271, %.lr.ph272 ]
  %gep = getelementptr inbounds i32, ptr %invariant.gep, i64 %indvars.iv346
  %85 = load i32, ptr %gep, align 4, !tbaa !17
  %.not253.1 = icmp eq i32 %85, 0
  br i1 %.not253.1, label %90, label %86

86:                                               ; preds = %.lr.ph272.1
  %87 = add nsw i32 %.1200, 1
  %88 = sext i32 %.1200 to i64
  %89 = getelementptr inbounds i32, ptr %24, i64 %88
  store i32 %85, ptr %89, align 4, !tbaa !17
  br label %90

90:                                               ; preds = %86, %.lr.ph272.1
  %.1200.1 = phi i32 [ %87, %86 ], [ %.1200, %.lr.ph272.1 ]
  %indvars.iv.next347.1 = add nuw nsw i64 %indvars.iv346, 2
  %niter413.next.1 = add i64 %niter413, 2
  %niter413.ncmp.1 = icmp eq i64 %niter413.next.1, %unroll_iter412
  br i1 %niter413.ncmp.1, label %.preheader.unr-lcssa, label %.lr.ph272, !llvm.loop !23

.lr.ph276:                                        ; preds = %102, %.lr.ph276.preheader.new
  %indvars.iv351 = phi i64 [ 1, %.lr.ph276.preheader.new ], [ %indvars.iv.next352.1, %102 ]
  %.2201275 = phi i32 [ 1, %.lr.ph276.preheader.new ], [ %.3202.1, %102 ]
  %niter417 = phi i64 [ 0, %.lr.ph276.preheader.new ], [ %niter417.next.1, %102 ]
  %91 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv351
  %92 = load i32, ptr %91, align 4, !tbaa !17
  %.not252 = icmp eq i32 %92, 0
  br i1 %.not252, label %.lr.ph276.1, label %93

93:                                               ; preds = %.lr.ph276
  %94 = add nsw i32 %.2201275, 1
  %95 = sext i32 %.2201275 to i64
  %96 = getelementptr inbounds i32, ptr %29, i64 %95
  store i32 %92, ptr %96, align 4, !tbaa !17
  br label %.lr.ph276.1

.lr.ph276.1:                                      ; preds = %.lr.ph276, %93
  %.3202 = phi i32 [ %94, %93 ], [ %.2201275, %.lr.ph276 ]
  %gep421 = getelementptr inbounds i32, ptr %invariant.gep420, i64 %indvars.iv351
  %97 = load i32, ptr %gep421, align 4, !tbaa !17
  %.not252.1 = icmp eq i32 %97, 0
  br i1 %.not252.1, label %102, label %98

98:                                               ; preds = %.lr.ph276.1
  %99 = add nsw i32 %.3202, 1
  %100 = sext i32 %.3202 to i64
  %101 = getelementptr inbounds i32, ptr %29, i64 %100
  store i32 %97, ptr %101, align 4, !tbaa !17
  br label %102

102:                                              ; preds = %98, %.lr.ph276.1
  %.3202.1 = phi i32 [ %99, %98 ], [ %.3202, %.lr.ph276.1 ]
  %indvars.iv.next352.1 = add nuw nsw i64 %indvars.iv351, 2
  %niter417.next.1 = add i64 %niter417, 2
  %niter417.ncmp.1 = icmp eq i64 %niter417.next.1, %unroll_iter416
  br i1 %niter417.ncmp.1, label %._crit_edge277.loopexit.unr-lcssa.loopexit, label %.lr.ph276, !llvm.loop !24

._crit_edge277.loopexit.unr-lcssa.loopexit:       ; preds = %102
  %103 = sext i32 %.3202.1 to i64
  br label %._crit_edge277.loopexit.unr-lcssa

._crit_edge277.loopexit.unr-lcssa:                ; preds = %._crit_edge277.loopexit.unr-lcssa.loopexit, %.lr.ph276.preheader
  %indvars.iv351.unr = phi i64 [ 1, %.lr.ph276.preheader ], [ %indvars.iv.next352.1, %._crit_edge277.loopexit.unr-lcssa.loopexit ]
  %.2201275.unr = phi i64 [ 1, %.lr.ph276.preheader ], [ %103, %._crit_edge277.loopexit.unr-lcssa.loopexit ]
  %lcmp.mod415.not = icmp eq i64 %xtraiter414, 0
  br i1 %lcmp.mod415.not, label %._crit_edge277, label %.lr.ph276.epil

.lr.ph276.epil:                                   ; preds = %._crit_edge277.loopexit.unr-lcssa
  %104 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv351.unr
  %105 = load i32, ptr %104, align 4, !tbaa !17
  %.not252.epil = icmp eq i32 %105, 0
  br i1 %.not252.epil, label %._crit_edge277, label %106

106:                                              ; preds = %.lr.ph276.epil
  %107 = getelementptr inbounds i32, ptr %29, i64 %.2201275.unr
  store i32 %105, ptr %107, align 4, !tbaa !17
  br label %._crit_edge277

._crit_edge277:                                   ; preds = %._crit_edge277.loopexit.unr-lcssa, %106, %.lr.ph276.epil, %.preheader258, %.preheader
  %.not237 = icmp eq i32 %3, 0
  br i1 %.not237, label %121, label %108

108:                                              ; preds = %._crit_edge277
  %109 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.2)
  %110 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.3, i32 noundef %18, i32 noundef %18)
  %111 = getelementptr inbounds i8, ptr %0, i64 208
  %112 = load i32, ptr %111, align 8, !tbaa !25
  %113 = icmp ne i32 %112, 0
  %114 = icmp ne i32 %1, 0
  %or.cond3 = and i1 %114, %113
  br i1 %or.cond3, label %115, label %.sink.split

115:                                              ; preds = %108
  %116 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.4)
  br label %.sink.split

.sink.split:                                      ; preds = %115, %108
  %117 = tail call i32 @putchar(i32 noundef 10)
  %118 = getelementptr inbounds i8, ptr %0, i64 80
  %119 = load i32, ptr %118, align 8, !tbaa !26
  %.not238 = icmp eq i32 %119, 0
  %.str.6..str.5 = select i1 %.not238, ptr @.str.6, ptr @.str.5
  %120 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.6..str.5)
  br label %121

121:                                              ; preds = %.sink.split, %._crit_edge277
  %122 = icmp eq i32 %18, 0
  br i1 %122, label %276, label %123

123:                                              ; preds = %121
  %spec.select = select i1 %.not237, i32 80, i32 75
  %124 = icmp ne i32 %2, 0
  br i1 %124, label %125, label %128

125:                                              ; preds = %123
  %126 = trunc nuw nsw i32 %spec.select to i8
  %.lhs.trunc = add nuw nsw i8 %126, 1
  %127 = udiv i8 %.lhs.trunc, 10
  %.zext = zext nneg i8 %127 to i32
  br label %128

128:                                              ; preds = %125, %123
  %.1196 = phi i32 [ %.zext, %125 ], [ %spec.select, %123 ]
  %.not239315 = icmp slt i32 %18, 0
  br i1 %.not239315, label %._crit_edge323, label %.lr.ph322

.lr.ph322:                                        ; preds = %128
  %129 = add nsw i32 %.1196, -1
  %.not244 = icmp eq i32 %1, 0
  %130 = getelementptr inbounds i8, ptr %0, i64 128
  %or.cond5 = or i1 %.not244, %124
  %131 = getelementptr inbounds i8, ptr %0, i64 136
  %132 = getelementptr inbounds i8, ptr %0, i64 88
  %133 = add nuw i32 %18, 1
  %wide.trip.count378 = zext i32 %133 to i64
  br label %134

134:                                              ; preds = %.lr.ph322, %._crit_edge310
  %.0181320 = phi double [ 0.000000e+00, %.lr.ph322 ], [ %.2183.lcssa, %._crit_edge310 ]
  %.0184319 = phi double [ 0x7FEFFFFFFFFFFFFF, %.lr.ph322 ], [ %.2186.lcssa, %._crit_edge310 ]
  %.0191318 = phi i32 [ 0, %.lr.ph322 ], [ %.2193.lcssa, %._crit_edge310 ]
  %.0198317 = phi i32 [ 1, %.lr.ph322 ], [ %173, %._crit_edge310 ]
  %135 = add i32 %129, %.0198317
  %spec.select254 = tail call i32 @llvm.smin.i32(i32 %135, i32 %18)
  br i1 %.not237, label %.lr.ph309, label %136

136:                                              ; preds = %134
  br i1 %124, label %137, label %153

137:                                              ; preds = %136
  %138 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.7)
  %.not245278 = icmp sgt i32 %.0198317, %spec.select254
  br i1 %.not245278, label %._crit_edge282, label %.lr.ph281

.lr.ph281:                                        ; preds = %137
  %139 = sext i32 %.0198317 to i64
  %140 = add i32 %spec.select254, 1
  br i1 %.not244, label %.lr.ph281.split.us, label %.lr.ph281.split

.lr.ph281.split.us:                               ; preds = %.lr.ph281, %.lr.ph281.split.us
  %indvars.iv360 = phi i64 [ %indvars.iv.next361, %.lr.ph281.split.us ], [ %139, %.lr.ph281 ]
  %141 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv360
  %142 = load i32, ptr %141, align 4, !tbaa !17
  %143 = load ptr, ptr %130, align 8, !tbaa !19
  %144 = sext i32 %142 to i64
  %145 = getelementptr inbounds i32, ptr %143, i64 %144
  %146 = load i32, ptr %145, align 4, !tbaa !17
  %147 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %146)
  %indvars.iv.next361 = add nsw i64 %indvars.iv360, 1
  %lftr.wideiv363 = trunc i64 %indvars.iv.next361 to i32
  %exitcond364.not = icmp eq i32 %140, %lftr.wideiv363
  br i1 %exitcond364.not, label %._crit_edge282, label %.lr.ph281.split.us, !llvm.loop !27

.lr.ph281.split:                                  ; preds = %.lr.ph281, %.lr.ph281.split
  %indvars.iv356 = phi i64 [ %indvars.iv.next357, %.lr.ph281.split ], [ %139, %.lr.ph281 ]
  %148 = load ptr, ptr %130, align 8, !tbaa !19
  %149 = getelementptr inbounds i32, ptr %148, i64 %indvars.iv356
  %150 = load i32, ptr %149, align 4, !tbaa !17
  %151 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.8, i32 noundef %150)
  %indvars.iv.next357 = add nsw i64 %indvars.iv356, 1
  %lftr.wideiv = trunc i64 %indvars.iv.next357 to i32
  %exitcond359.not = icmp eq i32 %140, %lftr.wideiv
  br i1 %exitcond359.not, label %._crit_edge282, label %.lr.ph281.split, !llvm.loop !27

._crit_edge282:                                   ; preds = %.lr.ph281.split, %.lr.ph281.split.us, %137
  %152 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.9)
  br label %.lr.ph309

153:                                              ; preds = %136
  br i1 %.not244, label %156, label %154

154:                                              ; preds = %153
  %155 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %.0198317, i32 noundef %spec.select254)
  br label %.lr.ph309

156:                                              ; preds = %153
  %157 = load ptr, ptr %130, align 8, !tbaa !19
  %158 = sext i32 %.0198317 to i64
  %159 = getelementptr inbounds i32, ptr %29, i64 %158
  %160 = load i32, ptr %159, align 4, !tbaa !17
  %161 = sext i32 %160 to i64
  %162 = getelementptr inbounds i32, ptr %157, i64 %161
  %163 = load i32, ptr %162, align 4, !tbaa !17
  %164 = sext i32 %spec.select254 to i64
  %165 = getelementptr inbounds i32, ptr %29, i64 %164
  %166 = load i32, ptr %165, align 4, !tbaa !17
  %167 = sext i32 %166 to i64
  %168 = getelementptr inbounds i32, ptr %157, i64 %167
  %169 = load i32, ptr %168, align 4, !tbaa !17
  %170 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.10, i32 noundef %163, i32 noundef %169)
  br label %.lr.ph309

.lr.ph309:                                        ; preds = %134, %154, %156, %._crit_edge282
  %.not248288 = icmp sgt i32 %.0198317, %spec.select254
  %171 = sext i32 %.0198317 to i64
  %172 = add i32 %spec.select254, 1
  %173 = add i32 %spec.select254, 1
  br label %174

174:                                              ; preds = %.lr.ph309, %._crit_edge295
  %indvars.iv375 = phi i64 [ 1, %.lr.ph309 ], [ %indvars.iv.next376, %._crit_edge295 ]
  %.1182307 = phi double [ %.0181320, %.lr.ph309 ], [ %.2183.lcssa, %._crit_edge295 ]
  %.1185306 = phi double [ %.0184319, %.lr.ph309 ], [ %.2186.lcssa, %._crit_edge295 ]
  %.1192305 = phi i32 [ %.0191318, %.lr.ph309 ], [ %.2193.lcssa, %._crit_edge295 ]
  %175 = trunc nuw nsw i64 %indvars.iv375 to i32
  br i1 %.not244, label %.thread385, label %176

176:                                              ; preds = %174
  br i1 %.not237, label %188, label %179

.thread385:                                       ; preds = %174
  %177 = getelementptr inbounds i32, ptr %24, i64 %indvars.iv375
  %178 = load i32, ptr %177, align 4, !tbaa !17
  br i1 %.not237, label %188, label %.thread389

179:                                              ; preds = %176
  br i1 %or.cond5, label %.thread389, label %.thread257

.thread257:                                       ; preds = %179
  %180 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %175)
  br label %186

.thread389:                                       ; preds = %.thread385, %179
  %.0212387391 = phi i32 [ %175, %179 ], [ %178, %.thread385 ]
  %181 = load ptr, ptr %131, align 8, !tbaa !18
  %182 = sext i32 %.0212387391 to i64
  %183 = getelementptr inbounds i32, ptr %181, i64 %182
  %184 = load i32, ptr %183, align 4, !tbaa !17
  %185 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.11, i32 noundef %184)
  br i1 %124, label %.thread393, label %186

186:                                              ; preds = %.thread257, %.thread389
  %.0212387392 = phi i32 [ %175, %.thread257 ], [ %.0212387391, %.thread389 ]
  %187 = tail call i32 @putchar(i32 noundef 32)
  br label %188

188:                                              ; preds = %.thread385, %186, %176
  %.0212388 = phi i32 [ %178, %.thread385 ], [ %.0212387392, %186 ], [ %175, %176 ]
  br i1 %.not248288, label %._crit_edge295, label %.lr.ph294

.thread393:                                       ; preds = %.thread389
  br i1 %.not248288, label %._crit_edge295, label %.lr.ph294.split.us.preheader

.lr.ph294:                                        ; preds = %188
  br i1 %124, label %.lr.ph294.split.us.preheader, label %.lr.ph294.split

.lr.ph294.split.us.preheader:                     ; preds = %.thread393, %.lr.ph294
  %.0212388395397 = phi i32 [ %.0212388, %.lr.ph294 ], [ %.0212387391, %.thread393 ]
  br label %.lr.ph294.split.us

.lr.ph294.split.us:                               ; preds = %.lr.ph294.split.us.preheader, %212
  %indvars.iv370 = phi i64 [ %171, %.lr.ph294.split.us.preheader ], [ %indvars.iv.next371, %212 ]
  %.2183292.us = phi double [ %.1182307, %.lr.ph294.split.us.preheader ], [ %.4.us, %212 ]
  %.2186291.us = phi double [ %.1185306, %.lr.ph294.split.us.preheader ], [ %.4188.us, %212 ]
  %.2193290.us = phi i32 [ %.1192305, %.lr.ph294.split.us.preheader ], [ %.3194.us, %212 ]
  %189 = trunc nsw i64 %indvars.iv370 to i32
  br i1 %.not244, label %190, label %193

190:                                              ; preds = %.lr.ph294.split.us
  %191 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv370
  %192 = load i32, ptr %191, align 4, !tbaa !17
  br label %193

193:                                              ; preds = %190, %.lr.ph294.split.us
  %.1211.us = phi i32 [ %192, %190 ], [ %189, %.lr.ph294.split.us ]
  %194 = load ptr, ptr %132, align 8, !tbaa !28
  %195 = sext i32 %.1211.us to i64
  %196 = getelementptr inbounds ptr, ptr %194, i64 %195
  %.0179283.us = load ptr, ptr %196, align 8, !tbaa !14
  %.not249284.us = icmp eq ptr %.0179283.us, null
  br i1 %.not249284.us, label %.critedge255.us, label %.lr.ph287.us

.lr.ph287.us:                                     ; preds = %193, %199
  %.0179285.us = phi ptr [ %.0179.us, %199 ], [ %.0179283.us, %193 ]
  %197 = getelementptr inbounds i8, ptr %.0179285.us, i64 8
  %198 = load i32, ptr %197, align 8, !tbaa !29
  %.not250.us = icmp eq i32 %198, %.0212388395397
  br i1 %.not250.us, label %.critedge.us, label %199

199:                                              ; preds = %.lr.ph287.us
  %200 = getelementptr inbounds i8, ptr %.0179285.us, i64 24
  %.0179.us = load ptr, ptr %200, align 8, !tbaa !14
  %.not249.us = icmp eq ptr %.0179.us, null
  br i1 %.not249.us, label %.critedge255.us, label %.lr.ph287.us, !llvm.loop !30

.critedge.us:                                     ; preds = %.lr.ph287.us
  %201 = load double, ptr %.0179285.us, align 8, !tbaa !31
  %202 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.12, double noundef %201)
  %203 = load double, ptr %.0179285.us, align 8, !tbaa !31
  %204 = fcmp olt double %203, 0.000000e+00
  %205 = fneg double %203
  %206 = select i1 %204, double %205, double %203
  %207 = fcmp ogt double %206, %.2183292.us
  %.3.us = select i1 %207, double %206, double %.2183292.us
  %208 = fcmp olt double %206, %.2186291.us
  %209 = fcmp une double %203, 0.000000e+00
  %or.cond7.us = and i1 %209, %208
  %.3187.us = select i1 %or.cond7.us, double %206, double %.2186291.us
  %210 = add nsw i32 %.2193290.us, 1
  br label %212

.critedge255.us:                                  ; preds = %199, %193
  %211 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.13)
  br label %212

212:                                              ; preds = %.critedge255.us, %.critedge.us
  %.3194.us = phi i32 [ %210, %.critedge.us ], [ %.2193290.us, %.critedge255.us ]
  %.4188.us = phi double [ %.3187.us, %.critedge.us ], [ %.2186291.us, %.critedge255.us ]
  %.4.us = phi double [ %.3.us, %.critedge.us ], [ %.2183292.us, %.critedge255.us ]
  %indvars.iv.next371 = add nsw i64 %indvars.iv370, 1
  %lftr.wideiv373 = trunc i64 %indvars.iv.next371 to i32
  %exitcond374.not = icmp eq i32 %173, %lftr.wideiv373
  br i1 %exitcond374.not, label %._crit_edge295, label %.lr.ph294.split.us, !llvm.loop !32

.lr.ph294.split:                                  ; preds = %.lr.ph294, %235
  %indvars.iv365 = phi i64 [ %indvars.iv.next366, %235 ], [ %171, %.lr.ph294 ]
  %.2183292 = phi double [ %.4, %235 ], [ %.1182307, %.lr.ph294 ]
  %.2186291 = phi double [ %.4188, %235 ], [ %.1185306, %.lr.ph294 ]
  %.2193290 = phi i32 [ %.3194, %235 ], [ %.1192305, %.lr.ph294 ]
  %213 = trunc nsw i64 %indvars.iv365 to i32
  br i1 %.not244, label %214, label %217

214:                                              ; preds = %.lr.ph294.split
  %215 = getelementptr inbounds i32, ptr %29, i64 %indvars.iv365
  %216 = load i32, ptr %215, align 4, !tbaa !17
  br label %217

217:                                              ; preds = %.lr.ph294.split, %214
  %.1211 = phi i32 [ %216, %214 ], [ %213, %.lr.ph294.split ]
  %218 = load ptr, ptr %132, align 8, !tbaa !28
  %219 = sext i32 %.1211 to i64
  %220 = getelementptr inbounds ptr, ptr %218, i64 %219
  %.0179283 = load ptr, ptr %220, align 8, !tbaa !14
  %.not249284 = icmp eq ptr %.0179283, null
  br i1 %.not249284, label %.critedge255, label %.lr.ph287

.lr.ph287:                                        ; preds = %217, %223
  %.0179285 = phi ptr [ %.0179, %223 ], [ %.0179283, %217 ]
  %221 = getelementptr inbounds i8, ptr %.0179285, i64 8
  %222 = load i32, ptr %221, align 8, !tbaa !29
  %.not250 = icmp eq i32 %222, %.0212388
  br i1 %.not250, label %.critedge, label %223

223:                                              ; preds = %.lr.ph287
  %224 = getelementptr inbounds i8, ptr %.0179285, i64 24
  %.0179 = load ptr, ptr %224, align 8, !tbaa !14
  %.not249 = icmp eq ptr %.0179, null
  br i1 %.not249, label %.critedge255, label %.lr.ph287, !llvm.loop !30

.critedge:                                        ; preds = %.lr.ph287
  %225 = tail call i32 @putchar(i32 noundef 120)
  %226 = load double, ptr %.0179285, align 8, !tbaa !31
  %227 = fcmp olt double %226, 0.000000e+00
  %228 = fneg double %226
  %229 = select i1 %227, double %228, double %226
  %230 = fcmp ogt double %229, %.2183292
  %.3 = select i1 %230, double %229, double %.2183292
  %231 = fcmp olt double %229, %.2186291
  %232 = fcmp une double %226, 0.000000e+00
  %or.cond7 = and i1 %232, %231
  %.3187 = select i1 %or.cond7, double %229, double %.2186291
  %233 = add nsw i32 %.2193290, 1
  br label %235

.critedge255:                                     ; preds = %223, %217
  %234 = tail call i32 @putchar(i32 noundef 46)
  br label %235

235:                                              ; preds = %.critedge, %.critedge255
  %.3194 = phi i32 [ %233, %.critedge ], [ %.2193290, %.critedge255 ]
  %.4188 = phi double [ %.3187, %.critedge ], [ %.2186291, %.critedge255 ]
  %.4 = phi double [ %.3, %.critedge ], [ %.2183292, %.critedge255 ]
  %indvars.iv.next366 = add nsw i64 %indvars.iv365, 1
  %lftr.wideiv368 = trunc i64 %indvars.iv.next366 to i32
  %exitcond369.not = icmp eq i32 %173, %lftr.wideiv368
  br i1 %exitcond369.not, label %._crit_edge295, label %.lr.ph294.split, !llvm.loop !32

._crit_edge295:                                   ; preds = %235, %212, %.thread393, %188
  %.6.lcssa = phi i32 [ %.0198317, %188 ], [ %.0198317, %.thread393 ], [ %173, %212 ], [ %172, %235 ]
  %.2193.lcssa = phi i32 [ %.1192305, %188 ], [ %.1192305, %.thread393 ], [ %.3194.us, %212 ], [ %.3194, %235 ]
  %.2186.lcssa = phi double [ %.1185306, %188 ], [ %.1185306, %.thread393 ], [ %.4188.us, %212 ], [ %.4188, %235 ]
  %.2183.lcssa = phi double [ %.1182307, %188 ], [ %.1182307, %.thread393 ], [ %.4.us, %212 ], [ %.4, %235 ]
  %236 = tail call i32 @putchar(i32 noundef 10)
  %indvars.iv.next376 = add nuw nsw i64 %indvars.iv375, 1
  %exitcond379.not = icmp eq i64 %indvars.iv.next376, %wide.trip.count378
  br i1 %exitcond379.not, label %._crit_edge310, label %174, !llvm.loop !33

._crit_edge310:                                   ; preds = %._crit_edge295
  %237 = tail call i32 @putchar(i32 noundef 10)
  %.not239 = icmp sgt i32 %.6.lcssa, %18
  br i1 %.not239, label %._crit_edge323.loopexit, label %134, !llvm.loop !34

._crit_edge323.loopexit:                          ; preds = %._crit_edge310
  %238 = sitofp i32 %.2193.lcssa to double
  %239 = fmul double %238, 1.000000e+02
  br label %._crit_edge323

._crit_edge323:                                   ; preds = %._crit_edge323.loopexit, %128
  %.0191.lcssa = phi double [ 0.000000e+00, %128 ], [ %239, %._crit_edge323.loopexit ]
  %.0184.lcssa = phi double [ 0x7FEFFFFFFFFFFFFF, %128 ], [ %.2186.lcssa, %._crit_edge323.loopexit ]
  %.0181.lcssa = phi double [ 0.000000e+00, %128 ], [ %.2183.lcssa, %._crit_edge323.loopexit ]
  br i1 %.not237, label %272, label %240

240:                                              ; preds = %._crit_edge323
  %241 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.14, double noundef %.0181.lcssa)
  %242 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.15, double noundef %.0184.lcssa)
  br i1 %.not234266, label %._crit_edge333, label %.lr.ph332

.lr.ph332:                                        ; preds = %240
  %243 = getelementptr inbounds i8, ptr %0, i64 24
  %244 = load ptr, ptr %243, align 8, !tbaa !35
  %245 = add nuw nsw i32 %18, 1
  %wide.trip.count383 = zext nneg i32 %245 to i64
  br label %246

246:                                              ; preds = %.lr.ph332, %257
  %indvars.iv380 = phi i64 [ 1, %.lr.ph332 ], [ %indvars.iv.next381, %257 ]
  %.0180330 = phi double [ 0.000000e+00, %.lr.ph332 ], [ %.2, %257 ]
  %.0189329 = phi double [ 0x7FEFFFFFFFFFFFFF, %.lr.ph332 ], [ %.1190, %257 ]
  %247 = getelementptr inbounds ptr, ptr %244, i64 %indvars.iv380
  %248 = load ptr, ptr %247, align 8, !tbaa !14
  %.not243 = icmp eq ptr %248, null
  br i1 %.not243, label %257, label %249

249:                                              ; preds = %246
  %250 = load double, ptr %248, align 8, !tbaa !31
  %251 = fcmp olt double %250, 0.000000e+00
  %252 = fneg double %250
  %253 = select i1 %251, double %252, double %250
  %254 = fcmp ogt double %253, %.0180330
  %.1 = select i1 %254, double %253, double %.0180330
  %255 = fcmp olt double %253, %.0189329
  br i1 %255, label %256, label %257

256:                                              ; preds = %249
  br label %257

257:                                              ; preds = %246, %256, %249
  %.1190 = phi double [ %253, %256 ], [ %.0189329, %249 ], [ %.0189329, %246 ]
  %.2 = phi double [ %.1, %256 ], [ %.1, %249 ], [ %.0180330, %246 ]
  %indvars.iv.next381 = add nuw nsw i64 %indvars.iv380, 1
  %exitcond384.not = icmp eq i64 %indvars.iv.next381, %wide.trip.count383
  br i1 %exitcond384.not, label %._crit_edge333, label %246, !llvm.loop !36

._crit_edge333:                                   ; preds = %257, %240
  %.0189.lcssa = phi double [ 0x7FEFFFFFFFFFFFFF, %240 ], [ %.1190, %257 ]
  %.0180.lcssa = phi double [ 0.000000e+00, %240 ], [ %.2, %257 ]
  %258 = getelementptr inbounds i8, ptr %0, i64 80
  %259 = load i32, ptr %258, align 8, !tbaa !26
  %.not241 = icmp eq i32 %259, 0
  %.str.18..str.16 = select i1 %.not241, ptr @.str.18, ptr @.str.16
  %.str.19..str.17 = select i1 %.not241, ptr @.str.19, ptr @.str.17
  %260 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.18..str.16, double noundef %.0180.lcssa)
  %261 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) %.str.19..str.17, double noundef %.0189.lcssa)
  %262 = sitofp i32 %18 to double
  %263 = fmul double %262, %262
  %264 = fdiv double %.0191.lcssa, %263
  %265 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.20, double noundef %264)
  %266 = getelementptr inbounds i8, ptr %0, i64 172
  %267 = load i32, ptr %266, align 4, !tbaa !37
  %.not242 = icmp eq i32 %267, 0
  br i1 %.not242, label %268, label %272

268:                                              ; preds = %._crit_edge333
  %269 = getelementptr inbounds i8, ptr %0, i64 84
  %270 = load i32, ptr %269, align 4, !tbaa !38
  %271 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str.21, i32 noundef %270)
  br label %272

272:                                              ; preds = %._crit_edge333, %268, %._crit_edge323
  %273 = tail call i32 @putchar(i32 noundef 10)
  %274 = load ptr, ptr @stdout, align 8, !tbaa !14
  %275 = tail call i32 @fflush(ptr noundef %274)
  tail call void @free(ptr noundef nonnull %29)
  tail call void @free(ptr noundef nonnull %24)
  br label %276

276:                                              ; preds = %272, %121, %.thread
  ret void
}

; Function Attrs: nofree nounwind
declare noundef i32 @fflush(ptr nocapture noundef) local_unnamed_addr #1

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

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

; Function Attrs: mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #3

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

; Function Attrs: inlinehint nofree nounwind uwtable
declare noundef i32 @putchar(i32 noundef) local_unnamed_addr #4

; Function Attrs: mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite)
declare void @free(ptr allocptr nocapture noundef) local_unnamed_addr #5

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.smin.i32(i32, i32) #6

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #7

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 = { nofree nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { 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 #3 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "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 = { inlinehint nofree 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 #5 = { mustprogress nounwind willreturn allockind("free") memory(argmem: readwrite, inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #7 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #8 = { cold nounwind }
attributes #9 = { noreturn nounwind }
attributes #10 = { allocsize(0) }

!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, !12, i64 104}
!6 = !{!"MatrixFrame", !7, i64 0, !10, i64 8, !10, i64 12, !10, i64 16, !10, i64 20, !11, i64 24, !11, i64 32, !11, i64 40, !10, i64 48, !10, i64 52, !10, i64 56, !11, i64 64, !11, i64 72, !10, i64 80, !10, i64 84, !11, i64 88, !11, i64 96, !12, i64 104, !11, i64 112, !10, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152, !11, i64 160, !10, i64 168, !10, i64 172, !10, i64 176, !10, i64 180, !10, i64 184, !10, i64 188, !8, i64 192, !10, i64 196, !7, i64 200, !10, i64 208, !10, i64 212, !10, i64 216, !10, i64 220, !10, i64 224, !10, i64 228, !13, i64 232, !11, i64 272, !10, i64 280, !11, i64 288, !10, i64 296, !11, i64 304, !10, i64 312, !11, i64 320, !11, i64 328}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"int", !8, i64 0}
!11 = !{!"any pointer", !8, i64 0}
!12 = !{!"long", !8, i64 0}
!13 = !{!"MatrixElement", !7, i64 0, !10, i64 8, !10, i64 12, !11, i64 16, !11, i64 24, !11, i64 32}
!14 = !{!11, !11, i64 0}
!15 = !{!6, !10, i64 228}
!16 = !{!6, !10, i64 12}
!17 = !{!10, !10, i64 0}
!18 = !{!6, !11, i64 136}
!19 = !{!6, !11, i64 128}
!20 = !{!6, !10, i64 52}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = !{!6, !10, i64 208}
!26 = !{!6, !10, i64 80}
!27 = distinct !{!27, !22}
!28 = !{!6, !11, i64 88}
!29 = !{!13, !10, i64 8}
!30 = distinct !{!30, !22}
!31 = !{!13, !7, i64 0}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}
!35 = !{!6, !11, i64 24}
!36 = distinct !{!36, !22}
!37 = !{!6, !10, i64 172}
!38 = !{!6, !10, i64 84}


; Effective O3 passes: ConstraintEliminationPass,CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopIdiomRecognizePass,LoopInstSimplifyPass,LoopRotatePass,LoopSimplifyCFGPass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass