; LLVM IR from sympiler/nasoq :: src/ldl/ldlt_check.ll (ZN5nasoq10ldlt_checkEiPmPiPdS2_S0_S1_S2_)

; 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.nasoq::sympiler_CSC" = type { i64, i64, i64, ptr, ptr, ptr, ptr, ptr, i32, i32, i32, i32, i32, i32 }

@.str = external hidden unnamed_addr constant [18 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN5nasoq10ldlt_checkEiPmPiPdS2_S0_S1_S2_(i32 noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7) #0 {
  %9 = alloca i1, align 1
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca ptr, align 8
  %22 = alloca i32, align 4
  %23 = alloca ptr, align 8
  %24 = alloca i32, align 4
  %25 = alloca ptr, align 8
  %26 = alloca i32, align 4
  %27 = alloca i32, align 4
  %28 = alloca i32, align 4
  %29 = alloca i32, align 4
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  store i32 %0, ptr %10, align 4, !tbaa !5
  store ptr %1, ptr %11, align 8, !tbaa !9
  store ptr %2, ptr %12, align 8, !tbaa !9
  store ptr %3, ptr %13, align 8, !tbaa !9
  store ptr %4, ptr %14, align 8, !tbaa !9
  store ptr %5, ptr %15, align 8, !tbaa !9
  store ptr %6, ptr %16, align 8, !tbaa !9
  store ptr %7, ptr %17, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #9
  %34 = load i32, ptr %10, align 4, !tbaa !5
  %35 = sext i32 %34 to i64
  %36 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %35, i64 8)
  %37 = extractvalue { i64, i1 } %36, 1
  %38 = extractvalue { i64, i1 } %36, 0
  %39 = select i1 %37, i64 -1, i64 %38
  %40 = call noalias noundef nonnull ptr @_Znam(i64 noundef %39) #10
  call void @llvm.memset.p0.i64(ptr align 8 %40, i8 0, i64 %39, i1 false)
  store ptr %40, ptr %18, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #9
  %41 = load i32, ptr %10, align 4, !tbaa !5
  %42 = sext i32 %41 to i64
  %43 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %42, i64 8)
  %44 = extractvalue { i64, i1 } %43, 1
  %45 = extractvalue { i64, i1 } %43, 0
  %46 = select i1 %44, i64 -1, i64 %45
  %47 = call noalias noundef nonnull ptr @_Znam(i64 noundef %46) #10
  call void @llvm.memset.p0.i64(ptr align 8 %47, i8 0, i64 %46, i1 false)
  store ptr %47, ptr %19, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #9
  %48 = load i32, ptr %10, align 4, !tbaa !5
  %49 = sext i32 %48 to i64
  %50 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %49, i64 8)
  %51 = extractvalue { i64, i1 } %50, 1
  %52 = extractvalue { i64, i1 } %50, 0
  %53 = select i1 %51, i64 -1, i64 %52
  %54 = call noalias noundef nonnull ptr @_Znam(i64 noundef %53) #10
  call void @llvm.memset.p0.i64(ptr align 8 %54, i8 0, i64 %53, i1 false)
  store ptr %54, ptr %20, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #9
  %55 = load ptr, ptr %11, align 8, !tbaa !9
  %56 = load i32, ptr %10, align 4, !tbaa !5
  %57 = sext i32 %56 to i64
  %58 = getelementptr inbounds i64, ptr %55, i64 %57
  %59 = load i64, ptr %58, align 8, !tbaa !11
  %60 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %59, i64 8)
  %61 = extractvalue { i64, i1 } %60, 1
  %62 = extractvalue { i64, i1 } %60, 0
  %63 = select i1 %61, i64 -1, i64 %62
  %64 = call noalias noundef nonnull ptr @_Znam(i64 noundef %63) #10
  store ptr %64, ptr %21, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #9
  store i32 0, ptr %22, align 4, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #9
  %65 = call noalias noundef nonnull ptr @_Znwm(i64 noundef 88) #10
  store ptr %65, ptr %23, align 8, !tbaa !9
  %66 = load ptr, ptr %11, align 8, !tbaa !9
  %67 = load i32, ptr %10, align 4, !tbaa !5
  %68 = sext i32 %67 to i64
  %69 = getelementptr inbounds i64, ptr %66, i64 %68
  %70 = load i64, ptr %69, align 8, !tbaa !11
  %71 = load ptr, ptr %23, align 8, !tbaa !9
  %72 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %71, i32 0, i32 2
  store i64 %70, ptr %72, align 8, !tbaa !13
  %73 = load i32, ptr %10, align 4, !tbaa !5
  %74 = sext i32 %73 to i64
  %75 = load ptr, ptr %23, align 8, !tbaa !9
  %76 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %75, i32 0, i32 0
  store i64 %74, ptr %76, align 8, !tbaa !15
  %77 = load ptr, ptr %23, align 8, !tbaa !9
  %78 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %77, i32 0, i32 1
  store i64 %74, ptr %78, align 8, !tbaa !16
  %79 = load ptr, ptr %23, align 8, !tbaa !9
  %80 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %79, i32 0, i32 8
  store i32 -1, ptr %80, align 8, !tbaa !17
  %81 = load ptr, ptr %23, align 8, !tbaa !9
  %82 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %81, i32 0, i32 10
  store i32 1, ptr %82, align 8, !tbaa !18
  %83 = load ptr, ptr %23, align 8, !tbaa !9
  %84 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %83, i32 0, i32 13
  store i32 1, ptr %84, align 4, !tbaa !19
  %85 = load i32, ptr %10, align 4, !tbaa !5
  %86 = add nsw i32 %85, 1
  %87 = sext i32 %86 to i64
  %88 = call { i64, i1 } @llvm.umul.with.overflow.i64(i64 %87, i64 4)
  %89 = extractvalue { i64, i1 } %88, 1
  %90 = extractvalue { i64, i1 } %88, 0
  %91 = select i1 %89, i64 -1, i64 %90
  %92 = call noalias noundef nonnull ptr @_Znam(i64 noundef %91) #10
  %93 = load ptr, ptr %23, align 8, !tbaa !9
  %94 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %93, i32 0, i32 3
  store ptr %92, ptr %94, align 8, !tbaa !20
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #9
  store i32 0, ptr %24, align 4, !tbaa !5
  br label %95

95:                                               ; preds = %113, %8
  %96 = load i32, ptr %24, align 4, !tbaa !5
  %97 = load i32, ptr %10, align 4, !tbaa !5
  %98 = icmp sle i32 %96, %97
  br i1 %98, label %100, label %99

99:                                               ; preds = %95
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #9
  br label %116

100:                                              ; preds = %95
  %101 = load ptr, ptr %11, align 8, !tbaa !9
  %102 = load i32, ptr %24, align 4, !tbaa !5
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i64, ptr %101, i64 %103
  %105 = load i64, ptr %104, align 8, !tbaa !11
  %106 = trunc i64 %105 to i32
  %107 = load ptr, ptr %23, align 8, !tbaa !9
  %108 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %107, i32 0, i32 3
  %109 = load ptr, ptr %108, align 8, !tbaa !20
  %110 = load i32, ptr %24, align 4, !tbaa !5
  %111 = sext i32 %110 to i64
  %112 = getelementptr inbounds i32, ptr %109, i64 %111
  store i32 %106, ptr %112, align 4, !tbaa !5
  br label %113

113:                                              ; preds = %100
  %114 = load i32, ptr %24, align 4, !tbaa !5
  %115 = add nsw i32 %114, 1
  store i32 %115, ptr %24, align 4, !tbaa !5
  br label %95, !llvm.loop !21

116:                                              ; preds = %99
  %117 = load ptr, ptr %12, align 8, !tbaa !9
  %118 = load ptr, ptr %23, align 8, !tbaa !9
  %119 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %118, i32 0, i32 4
  store ptr %117, ptr %119, align 8, !tbaa !23
  %120 = load ptr, ptr %13, align 8, !tbaa !9
  %121 = load ptr, ptr %23, align 8, !tbaa !9
  %122 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %121, i32 0, i32 6
  store ptr %120, ptr %122, align 8, !tbaa !24
  %123 = load ptr, ptr %23, align 8, !tbaa !9
  %124 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %123, i32 0, i32 5
  store ptr null, ptr %124, align 8, !tbaa !25
  %125 = load ptr, ptr %23, align 8, !tbaa !9
  %126 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %125, i32 0, i32 12
  store i32 1, ptr %126, align 8, !tbaa !26
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #9
  %127 = load ptr, ptr %23, align 8, !tbaa !9
  %128 = load i32, ptr %22, align 4, !tbaa !5
  %129 = call noundef ptr @_ZN5nasoq10ptransposeEPNS_12sympiler_CSCEiPiS2_mi(ptr noundef %127, i32 noundef 2, ptr noundef null, ptr noundef null, i64 noundef 0, i32 noundef %128)
  store ptr %129, ptr %25, align 8, !tbaa !9
  %130 = load i32, ptr %10, align 4, !tbaa !5
  %131 = load ptr, ptr %11, align 8, !tbaa !9
  %132 = load ptr, ptr %12, align 8, !tbaa !9
  %133 = load ptr, ptr %13, align 8, !tbaa !9
  %134 = load ptr, ptr %14, align 8, !tbaa !9
  %135 = load ptr, ptr %21, align 8, !tbaa !9
  call void @_ZN5nasoq5spmdmEiPmPiPdS2_S2_(i32 noundef %130, ptr noundef %131, ptr noundef %132, ptr noundef %133, ptr noundef %134, ptr noundef %135)
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #9
  store i32 0, ptr %26, align 4, !tbaa !5
  br label %136

136:                                              ; preds = %324, %116
  %137 = load i32, ptr %26, align 4, !tbaa !5
  %138 = load i32, ptr %10, align 4, !tbaa !5
  %139 = icmp slt i32 %137, %138
  br i1 %139, label %141, label %140

140:                                              ; preds = %136
  store i32 5, ptr %27, align 4
  br label %327

141:                                              ; preds = %136
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #9
  %142 = load ptr, ptr %25, align 8, !tbaa !9
  %143 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %142, i32 0, i32 3
  %144 = load ptr, ptr %143, align 8, !tbaa !20
  %145 = load i32, ptr %26, align 4, !tbaa !5
  %146 = sext i32 %145 to i64
  %147 = getelementptr inbounds i32, ptr %144, i64 %146
  %148 = load i32, ptr %147, align 4, !tbaa !5
  store i32 %148, ptr %28, align 4, !tbaa !5
  br label %149

149:                                              ; preds = %179, %141
  %150 = load i32, ptr %28, align 4, !tbaa !5
  %151 = load ptr, ptr %25, align 8, !tbaa !9
  %152 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %151, i32 0, i32 3
  %153 = load ptr, ptr %152, align 8, !tbaa !20
  %154 = load i32, ptr %26, align 4, !tbaa !5
  %155 = add nsw i32 %154, 1
  %156 = sext i32 %155 to i64
  %157 = getelementptr inbounds i32, ptr %153, i64 %156
  %158 = load i32, ptr %157, align 4, !tbaa !5
  %159 = icmp slt i32 %150, %158
  br i1 %159, label %161, label %160

160:                                              ; preds = %149
  store i32 8, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #9
  br label %182

161:                                              ; preds = %149
  %162 = load ptr, ptr %25, align 8, !tbaa !9
  %163 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %162, i32 0, i32 6
  %164 = load ptr, ptr %163, align 8, !tbaa !24
  %165 = load i32, ptr %28, align 4, !tbaa !5
  %166 = sext i32 %165 to i64
  %167 = getelementptr inbounds double, ptr %164, i64 %166
  %168 = load double, ptr %167, align 8, !tbaa !27
  %169 = load ptr, ptr %18, align 8, !tbaa !9
  %170 = load ptr, ptr %25, align 8, !tbaa !9
  %171 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %170, i32 0, i32 4
  %172 = load ptr, ptr %171, align 8, !tbaa !23
  %173 = load i32, ptr %28, align 4, !tbaa !5
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds i32, ptr %172, i64 %174
  %176 = load i32, ptr %175, align 4, !tbaa !5
  %177 = sext i32 %176 to i64
  %178 = getelementptr inbounds double, ptr %169, i64 %177
  store double %168, ptr %178, align 8, !tbaa !27
  br label %179

179:                                              ; preds = %161
  %180 = load i32, ptr %28, align 4, !tbaa !5
  %181 = add nsw i32 %180, 1
  store i32 %181, ptr %28, align 4, !tbaa !5
  br label %149, !llvm.loop !29

182:                                              ; preds = %160
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #9
  %183 = load ptr, ptr %15, align 8, !tbaa !9
  %184 = load i32, ptr %26, align 4, !tbaa !5
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds i64, ptr %183, i64 %185
  %187 = load i64, ptr %186, align 8, !tbaa !11
  %188 = trunc i64 %187 to i32
  store i32 %188, ptr %29, align 4, !tbaa !5
  br label %189

189:                                              ; preds = %214, %182
  %190 = load i32, ptr %29, align 4, !tbaa !5
  %191 = sext i32 %190 to i64
  %192 = load ptr, ptr %15, align 8, !tbaa !9
  %193 = load i32, ptr %26, align 4, !tbaa !5
  %194 = add nsw i32 %193, 1
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds i64, ptr %192, i64 %195
  %197 = load i64, ptr %196, align 8, !tbaa !11
  %198 = icmp ult i64 %191, %197
  br i1 %198, label %200, label %199

199:                                              ; preds = %189
  store i32 11, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #9
  br label %217

200:                                              ; preds = %189
  %201 = load ptr, ptr %17, align 8, !tbaa !9
  %202 = load i32, ptr %29, align 4, !tbaa !5
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds double, ptr %201, i64 %203
  %205 = load double, ptr %204, align 8, !tbaa !27
  %206 = load ptr, ptr %19, align 8, !tbaa !9
  %207 = load ptr, ptr %16, align 8, !tbaa !9
  %208 = load i32, ptr %29, align 4, !tbaa !5
  %209 = sext i32 %208 to i64
  %210 = getelementptr inbounds i32, ptr %207, i64 %209
  %211 = load i32, ptr %210, align 4, !tbaa !5
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds double, ptr %206, i64 %212
  store double %205, ptr %213, align 8, !tbaa !27
  br label %214

214:                                              ; preds = %200
  %215 = load i32, ptr %29, align 4, !tbaa !5
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %29, align 4, !tbaa !5
  br label %189, !llvm.loop !30

217:                                              ; preds = %199
  %218 = load i32, ptr %10, align 4, !tbaa !5
  %219 = load ptr, ptr %11, align 8, !tbaa !9
  %220 = load ptr, ptr %12, align 8, !tbaa !9
  %221 = load ptr, ptr %21, align 8, !tbaa !9
  %222 = load ptr, ptr %18, align 8, !tbaa !9
  %223 = load ptr, ptr %20, align 8, !tbaa !9
  %224 = call noundef i32 @_ZN5nasoq8spmv_cscEiPmPiPdS2_S2_(i32 noundef %218, ptr noundef %219, ptr noundef %220, ptr noundef %221, ptr noundef %222, ptr noundef %223)
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #9
  %225 = load i32, ptr %26, align 4, !tbaa !5
  store i32 %225, ptr %30, align 4, !tbaa !5
  br label %226

226:                                              ; preds = %249, %217
  %227 = load i32, ptr %30, align 4, !tbaa !5
  %228 = load i32, ptr %10, align 4, !tbaa !5
  %229 = icmp slt i32 %227, %228
  br i1 %229, label %231, label %230

230:                                              ; preds = %226
  store i32 14, ptr %27, align 4
  br label %252

231:                                              ; preds = %226
  %232 = load ptr, ptr %20, align 8, !tbaa !9
  %233 = load i32, ptr %30, align 4, !tbaa !5
  %234 = sext i32 %233 to i64
  %235 = getelementptr inbounds double, ptr %232, i64 %234
  %236 = load double, ptr %235, align 8, !tbaa !27
  %237 = load ptr, ptr %19, align 8, !tbaa !9
  %238 = load i32, ptr %30, align 4, !tbaa !5
  %239 = sext i32 %238 to i64
  %240 = getelementptr inbounds double, ptr %237, i64 %239
  %241 = load double, ptr %240, align 8, !tbaa !27
  %242 = fsub double %236, %241
  %243 = fcmp ogt double %242, 1.000000e-03
  br i1 %243, label %244, label %248

244:                                              ; preds = %231
  %245 = load i32, ptr %26, align 4, !tbaa !5
  %246 = load i32, ptr %30, align 4, !tbaa !5
  %247 = call i32 (ptr, ...) @printf(ptr noundef @.str, i32 noundef %245, i32 noundef %246)
  store i1 false, ptr %9, align 1
  store i32 1, ptr %27, align 4
  br label %252

248:                                              ; preds = %231
  br label %249

249:                                              ; preds = %248
  %250 = load i32, ptr %30, align 4, !tbaa !5
  %251 = add nsw i32 %250, 1
  store i32 %251, ptr %30, align 4, !tbaa !5
  br label %226, !llvm.loop !31

252:                                              ; preds = %244, %230
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #9
  %253 = load i32, ptr %27, align 4
  switch i32 %253, label %327 [
    i32 14, label %254
  ]

254:                                              ; preds = %252
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #9
  %255 = load ptr, ptr %25, align 8, !tbaa !9
  %256 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %255, i32 0, i32 3
  %257 = load ptr, ptr %256, align 8, !tbaa !20
  %258 = load i32, ptr %26, align 4, !tbaa !5
  %259 = sext i32 %258 to i64
  %260 = getelementptr inbounds i32, ptr %257, i64 %259
  %261 = load i32, ptr %260, align 4, !tbaa !5
  store i32 %261, ptr %31, align 4, !tbaa !5
  br label %262

262:                                              ; preds = %285, %254
  %263 = load i32, ptr %31, align 4, !tbaa !5
  %264 = load ptr, ptr %25, align 8, !tbaa !9
  %265 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %264, i32 0, i32 3
  %266 = load ptr, ptr %265, align 8, !tbaa !20
  %267 = load i32, ptr %26, align 4, !tbaa !5
  %268 = add nsw i32 %267, 1
  %269 = sext i32 %268 to i64
  %270 = getelementptr inbounds i32, ptr %266, i64 %269
  %271 = load i32, ptr %270, align 4, !tbaa !5
  %272 = icmp slt i32 %263, %271
  br i1 %272, label %274, label %273

273:                                              ; preds = %262
  store i32 17, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #9
  br label %288

274:                                              ; preds = %262
  %275 = load ptr, ptr %18, align 8, !tbaa !9
  %276 = load ptr, ptr %25, align 8, !tbaa !9
  %277 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %276, i32 0, i32 4
  %278 = load ptr, ptr %277, align 8, !tbaa !23
  %279 = load i32, ptr %31, align 4, !tbaa !5
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds i32, ptr %278, i64 %280
  %282 = load i32, ptr %281, align 4, !tbaa !5
  %283 = sext i32 %282 to i64
  %284 = getelementptr inbounds double, ptr %275, i64 %283
  store double 0.000000e+00, ptr %284, align 8, !tbaa !27
  br label %285

285:                                              ; preds = %274
  %286 = load i32, ptr %31, align 4, !tbaa !5
  %287 = add nsw i32 %286, 1
  store i32 %287, ptr %31, align 4, !tbaa !5
  br label %262, !llvm.loop !32

288:                                              ; preds = %273
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #9
  %289 = load ptr, ptr %15, align 8, !tbaa !9
  %290 = load i32, ptr %26, align 4, !tbaa !5
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds i64, ptr %289, i64 %291
  %293 = load i64, ptr %292, align 8, !tbaa !11
  %294 = trunc i64 %293 to i32
  store i32 %294, ptr %32, align 4, !tbaa !5
  br label %295

295:                                              ; preds = %315, %288
  %296 = load i32, ptr %32, align 4, !tbaa !5
  %297 = sext i32 %296 to i64
  %298 = load ptr, ptr %15, align 8, !tbaa !9
  %299 = load i32, ptr %26, align 4, !tbaa !5
  %300 = add nsw i32 %299, 1
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds i64, ptr %298, i64 %301
  %303 = load i64, ptr %302, align 8, !tbaa !11
  %304 = icmp ult i64 %297, %303
  br i1 %304, label %306, label %305

305:                                              ; preds = %295
  store i32 20, ptr %27, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #9
  br label %318

306:                                              ; preds = %295
  %307 = load ptr, ptr %19, align 8, !tbaa !9
  %308 = load ptr, ptr %16, align 8, !tbaa !9
  %309 = load i32, ptr %32, align 4, !tbaa !5
  %310 = sext i32 %309 to i64
  %311 = getelementptr inbounds i32, ptr %308, i64 %310
  %312 = load i32, ptr %311, align 4, !tbaa !5
  %313 = sext i32 %312 to i64
  %314 = getelementptr inbounds double, ptr %307, i64 %313
  store double 0.000000e+00, ptr %314, align 8, !tbaa !27
  br label %315

315:                                              ; preds = %306
  %316 = load i32, ptr %32, align 4, !tbaa !5
  %317 = add nsw i32 %316, 1
  store i32 %317, ptr %32, align 4, !tbaa !5
  br label %295, !llvm.loop !33

318:                                              ; preds = %305
  %319 = load ptr, ptr %20, align 8, !tbaa !9
  %320 = load ptr, ptr %20, align 8, !tbaa !9
  %321 = load i32, ptr %10, align 4, !tbaa !5
  %322 = sext i32 %321 to i64
  %323 = getelementptr inbounds double, ptr %320, i64 %322
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #9
  store i32 0, ptr %33, align 4, !tbaa !5
  call void @_ZSt4fillIPdiEvT_S1_RKT0_(ptr noundef %319, ptr noundef %323, ptr noundef nonnull align 4 dereferenceable(4) %33)
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #9
  br label %324

324:                                              ; preds = %318
  %325 = load i32, ptr %26, align 4, !tbaa !5
  %326 = add nsw i32 %325, 1
  store i32 %326, ptr %26, align 4, !tbaa !5
  br label %136, !llvm.loop !34

327:                                              ; preds = %252, %140
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #9
  %328 = load i32, ptr %27, align 4
  switch i32 %328, label %357 [
    i32 5, label %329
  ]

329:                                              ; preds = %327
  %330 = load ptr, ptr %18, align 8, !tbaa !9
  %331 = icmp eq ptr %330, null
  br i1 %331, label %333, label %332

332:                                              ; preds = %329
  call void @_ZdaPv(ptr noundef %330) #11
  br label %333

333:                                              ; preds = %332, %329
  %334 = load ptr, ptr %19, align 8, !tbaa !9
  %335 = icmp eq ptr %334, null
  br i1 %335, label %337, label %336

336:                                              ; preds = %333
  call void @_ZdaPv(ptr noundef %334) #11
  br label %337

337:                                              ; preds = %336, %333
  %338 = load ptr, ptr %20, align 8, !tbaa !9
  %339 = icmp eq ptr %338, null
  br i1 %339, label %341, label %340

340:                                              ; preds = %337
  call void @_ZdaPv(ptr noundef %338) #11
  br label %341

341:                                              ; preds = %340, %337
  %342 = load ptr, ptr %21, align 8, !tbaa !9
  %343 = icmp eq ptr %342, null
  br i1 %343, label %345, label %344

344:                                              ; preds = %341
  call void @_ZdaPv(ptr noundef %342) #11
  br label %345

345:                                              ; preds = %344, %341
  %346 = load ptr, ptr %23, align 8, !tbaa !9
  %347 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %346, i32 0, i32 3
  %348 = load ptr, ptr %347, align 8, !tbaa !20
  %349 = icmp eq ptr %348, null
  br i1 %349, label %351, label %350

350:                                              ; preds = %345
  call void @_ZdaPv(ptr noundef %348) #11
  br label %351

351:                                              ; preds = %350, %345
  %352 = load ptr, ptr %23, align 8, !tbaa !9
  %353 = icmp eq ptr %352, null
  br i1 %353, label %355, label %354

354:                                              ; preds = %351
  call void @_ZN5nasoq12sympiler_CSCD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %352) #9
  call void @_ZdlPvm(ptr noundef %352, i64 noundef 88) #11
  br label %355

355:                                              ; preds = %354, %351
  %356 = load ptr, ptr %25, align 8, !tbaa !9
  call void @_ZN5nasoq10allocateACEPNS_12sympiler_CSCEiiii(ptr noundef %356, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  store i1 true, ptr %9, align 1
  store i32 1, ptr %27, align 4
  br label %357

357:                                              ; preds = %355, %327
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #9
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #9
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #9
  %358 = load i1, ptr %9, align 1
  ret i1 %358
}

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

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare { i64, i1 } @llvm.umul.with.overflow.i64(i64, i64) #2

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) #3

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) #3

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

declare noundef ptr @_ZN5nasoq10ptransposeEPNS_12sympiler_CSCEiPiS2_mi(ptr noundef, i32 noundef, ptr noundef, ptr noundef, i64 noundef, i32 noundef) #5

declare void @_ZN5nasoq5spmdmEiPmPiPdS2_S2_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

declare noundef i32 @_ZN5nasoq8spmv_cscEiPmPiPdS2_S2_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #5

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4fillIPdiEvT_S1_RKT0_(ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4)) #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) #7

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) #7

declare void @_ZN5nasoq10allocateACEPNS_12sympiler_CSCEiiii(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) #5

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nobuiltin 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 #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #5 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #6 = { inlinehint mustprogress 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 = { nobuiltin 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 #8 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { nounwind }
attributes #10 = { builtin allocsize(0) }
attributes #11 = { builtin 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 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"long", !7, i64 0}
!13 = !{!14, !12, i64 16}
!14 = !{!"_ZTSN5nasoq12sympiler_CSCE", !12, i64 0, !12, i64 8, !12, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !6, i64 64, !6, i64 68, !6, i64 72, !6, i64 76, !6, i64 80, !6, i64 84}
!15 = !{!14, !12, i64 0}
!16 = !{!14, !12, i64 8}
!17 = !{!14, !6, i64 64}
!18 = !{!14, !6, i64 72}
!19 = !{!14, !6, i64 84}
!20 = !{!14, !10, i64 24}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!14, !10, i64 32}
!24 = !{!14, !10, i64 48}
!25 = !{!14, !10, i64 40}
!26 = !{!14, !6, i64 80}
!27 = !{!28, !28, i64 0}
!28 = !{!"double", !7, i64 0}
!29 = distinct !{!29, !22}
!30 = distinct !{!30, !22}
!31 = distinct !{!31, !22}
!32 = distinct !{!32, !22}
!33 = distinct !{!33, !22}
!34 = distinct !{!34, !22}


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [18 x i8], align 1

; Function Attrs: mustprogress uwtable
define dso_local noundef zeroext i1 @_ZN5nasoq10ldlt_checkEiPmPiPdS2_S0_S1_S2_(i32 noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr nocapture noundef readonly %5, ptr nocapture noundef readonly %6, ptr nocapture noundef readonly %7) local_unnamed_addr #0 {
  %9 = alloca i32, align 4
  %10 = sext i32 %0 to i64
  %11 = icmp slt i32 %0, 0
  %12 = shl nsw i64 %10, 3
  %13 = select i1 %11, i64 -1, i64 %12
  %14 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %13) #9
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %14, i8 0, i64 %13, i1 false)
  %15 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %13) #9
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %15, i8 0, i64 %13, i1 false)
  %16 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %13) #9
  tail call void @llvm.memset.p0.i64(ptr nonnull align 8 %16, i8 0, i64 %13, i1 false)
  %17 = getelementptr inbounds i64, ptr %1, i64 %10
  %18 = load i64, ptr %17, align 8, !tbaa !5
  %19 = icmp ugt i64 %18, 2305843009213693951
  %20 = shl i64 %18, 3
  %21 = select i1 %19, i64 -1, i64 %20
  %22 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %21) #9
  %23 = tail call noalias noundef nonnull dereferenceable(88) ptr @_Znwm(i64 noundef 88) #9
  %24 = getelementptr inbounds i8, ptr %23, i64 16
  store i64 %18, ptr %24, align 8, !tbaa !9
  store i64 %10, ptr %23, align 8, !tbaa !13
  %25 = getelementptr inbounds i8, ptr %23, i64 8
  store i64 %10, ptr %25, align 8, !tbaa !14
  %26 = getelementptr inbounds i8, ptr %23, i64 64
  store i32 -1, ptr %26, align 8, !tbaa !15
  %27 = getelementptr inbounds i8, ptr %23, i64 72
  store i32 1, ptr %27, align 8, !tbaa !16
  %28 = getelementptr inbounds i8, ptr %23, i64 84
  store i32 1, ptr %28, align 4, !tbaa !17
  %29 = add i32 %0, 1
  %30 = zext i32 %29 to i64
  %31 = icmp slt i32 %0, -1
  %32 = shl nuw nsw i64 %30, 2
  %33 = select i1 %31, i64 -1, i64 %32
  %34 = tail call noalias noundef nonnull ptr @_Znam(i64 noundef %33) #9
  %35 = getelementptr inbounds i8, ptr %23, i64 24
  store ptr %34, ptr %35, align 8, !tbaa !18
  br i1 %11, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %8
  %min.iters.check = icmp ult i32 %29, 4
  br i1 %min.iters.check, label %.lr.ph.preheader204, label %vector.ph

.lr.ph.preheader204:                              ; preds = %middle.block, %.lr.ph.preheader
  %indvars.iv.ph = phi i64 [ 0, %.lr.ph.preheader ], [ %n.vec, %middle.block ]
  br label %.lr.ph

vector.ph:                                        ; preds = %.lr.ph.preheader
  %n.vec = and i64 %30, 4294967292
  br label %vector.body

vector.body:                                      ; preds = %vector.body, %vector.ph
  %index = phi i64 [ 0, %vector.ph ], [ %index.next, %vector.body ]
  %36 = getelementptr inbounds i64, ptr %1, i64 %index
  %37 = getelementptr inbounds i8, ptr %36, i64 16
  %wide.load = load <2 x i64>, ptr %36, align 8, !tbaa !5
  %wide.load199 = load <2 x i64>, ptr %37, align 8, !tbaa !5
  %38 = trunc <2 x i64> %wide.load to <2 x i32>
  %39 = trunc <2 x i64> %wide.load199 to <2 x i32>
  %40 = getelementptr inbounds i32, ptr %34, i64 %index
  %41 = getelementptr inbounds i8, ptr %40, i64 8
  store <2 x i32> %38, ptr %40, align 4, !tbaa !19
  store <2 x i32> %39, ptr %41, align 4, !tbaa !19
  %index.next = add nuw i64 %index, 4
  %42 = icmp eq i64 %index.next, %n.vec
  br i1 %42, label %middle.block, label %vector.body, !llvm.loop !20

middle.block:                                     ; preds = %vector.body
  %cmp.n = icmp eq i64 %n.vec, %30
  br i1 %cmp.n, label %._crit_edge, label %.lr.ph.preheader204

._crit_edge:                                      ; preds = %.lr.ph, %middle.block, %8
  %43 = getelementptr inbounds i8, ptr %23, i64 32
  store ptr %2, ptr %43, align 8, !tbaa !24
  %44 = getelementptr inbounds i8, ptr %23, i64 48
  store ptr %3, ptr %44, align 8, !tbaa !25
  %45 = getelementptr inbounds i8, ptr %23, i64 40
  store ptr null, ptr %45, align 8, !tbaa !26
  %46 = getelementptr inbounds i8, ptr %23, i64 80
  store i32 1, ptr %46, align 8, !tbaa !27
  %47 = tail call noundef ptr @_ZN5nasoq10ptransposeEPNS_12sympiler_CSCEiPiS2_mi(ptr noundef nonnull %23, i32 noundef 2, ptr noundef null, ptr noundef null, i64 noundef 0, i32 noundef 0)
  tail call void @_ZN5nasoq5spmdmEiPmPiPdS2_S2_(i32 noundef %0, ptr noundef nonnull %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef nonnull %22)
  %.not123154 = icmp slt i32 %0, 1
  br i1 %.not123154, label %.critedge125, label %.lr.ph158

.lr.ph158:                                        ; preds = %._crit_edge
  %48 = getelementptr inbounds i8, ptr %47, i64 24
  %49 = getelementptr inbounds i8, ptr %47, i64 48
  %50 = getelementptr inbounds i8, ptr %47, i64 32
  %51 = getelementptr inbounds double, ptr %16, i64 %10
  %wide.trip.count189 = zext nneg i32 %0 to i64
  %invariant.gep224 = getelementptr i8, ptr %6, i64 4
  %invariant.gep226 = getelementptr i8, ptr %6, i64 8
  %invariant.gep228 = getelementptr i8, ptr %6, i64 12
  br label %56

.lr.ph:                                           ; preds = %.lr.ph.preheader204, %.lr.ph
  %indvars.iv = phi i64 [ %indvars.iv.next, %.lr.ph ], [ %indvars.iv.ph, %.lr.ph.preheader204 ]
  %52 = getelementptr inbounds i64, ptr %1, i64 %indvars.iv
  %53 = load i64, ptr %52, align 8, !tbaa !5
  %54 = trunc i64 %53 to i32
  %55 = getelementptr inbounds i32, ptr %34, i64 %indvars.iv
  store i32 %54, ptr %55, align 4, !tbaa !19
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %30
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !28

56:                                               ; preds = %.lr.ph158, %._crit_edge153
  %indvars.iv173 = phi i64 [ 0, %.lr.ph158 ], [ %indvars.iv.next174, %._crit_edge153 ]
  %.not123156 = phi i1 [ false, %.lr.ph158 ], [ %.not123, %._crit_edge153 ]
  %57 = load ptr, ptr %48, align 8, !tbaa !18
  %58 = getelementptr inbounds i32, ptr %57, i64 %indvars.iv173
  %59 = load i32, ptr %58, align 4, !tbaa !19
  %indvars.iv.next174 = add nuw nsw i64 %indvars.iv173, 1
  %60 = getelementptr inbounds i32, ptr %57, i64 %indvars.iv.next174
  %61 = load i32, ptr %60, align 4, !tbaa !19
  %62 = icmp slt i32 %59, %61
  br i1 %62, label %.lr.ph136, label %._crit_edge137

.lr.ph136:                                        ; preds = %56
  %63 = load ptr, ptr %49, align 8, !tbaa !25
  %64 = load ptr, ptr %50, align 8, !tbaa !24
  %65 = sext i32 %59 to i64
  %wide.trip.count168 = sext i32 %61 to i64
  %66 = sub nsw i64 %wide.trip.count168, %65
  %xtraiter = and i64 %66, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.prol.loopexit, label %.prol.preheader

.prol.preheader:                                  ; preds = %.lr.ph136, %.prol.preheader
  %indvars.iv165.prol = phi i64 [ %indvars.iv.next166.prol, %.prol.preheader ], [ %65, %.lr.ph136 ]
  %prol.iter = phi i64 [ %prol.iter.next, %.prol.preheader ], [ 0, %.lr.ph136 ]
  %67 = getelementptr inbounds double, ptr %63, i64 %indvars.iv165.prol
  %68 = load double, ptr %67, align 8, !tbaa !29
  %69 = getelementptr inbounds i32, ptr %64, i64 %indvars.iv165.prol
  %70 = load i32, ptr %69, align 4, !tbaa !19
  %71 = sext i32 %70 to i64
  %72 = getelementptr inbounds double, ptr %14, i64 %71
  store double %68, ptr %72, align 8, !tbaa !29
  %indvars.iv.next166.prol = add nsw i64 %indvars.iv165.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %.prol.loopexit, label %.prol.preheader, !llvm.loop !31

.prol.loopexit:                                   ; preds = %.prol.preheader, %.lr.ph136
  %indvars.iv165.unr = phi i64 [ %65, %.lr.ph136 ], [ %indvars.iv.next166.prol, %.prol.preheader ]
  %73 = sub nsw i64 %65, %wide.trip.count168
  %74 = icmp ugt i64 %73, -4
  br i1 %74, label %._crit_edge137, label %.lr.ph136.new

._crit_edge137:                                   ; preds = %.prol.loopexit, %.lr.ph136.new, %56
  %75 = getelementptr inbounds i64, ptr %5, i64 %indvars.iv173
  %76 = load i64, ptr %75, align 8, !tbaa !5
  %77 = getelementptr inbounds i64, ptr %5, i64 %indvars.iv.next174
  %78 = load i64, ptr %77, align 8, !tbaa !5
  %sext = shl i64 %76, 32
  %79 = ashr exact i64 %sext, 32
  %80 = icmp ugt i64 %78, %79
  br i1 %80, label %.lr.ph141.preheader, label %.lr.ph146.preheader

.lr.ph141.preheader:                              ; preds = %._crit_edge137
  %81 = sub i64 %78, %76
  %xtraiter205 = and i64 %81, 3
  %lcmp.mod206.not = icmp eq i64 %xtraiter205, 0
  br i1 %lcmp.mod206.not, label %.lr.ph141.prol.loopexit, label %.lr.ph141.prol

.lr.ph141.prol:                                   ; preds = %.lr.ph141.preheader, %.lr.ph141.prol
  %indvars.iv170.prol = phi i64 [ %indvars.iv.next171.prol, %.lr.ph141.prol ], [ %79, %.lr.ph141.preheader ]
  %prol.iter207 = phi i64 [ %prol.iter207.next, %.lr.ph141.prol ], [ 0, %.lr.ph141.preheader ]
  %82 = getelementptr inbounds double, ptr %7, i64 %indvars.iv170.prol
  %83 = load double, ptr %82, align 8, !tbaa !29
  %84 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv170.prol
  %85 = load i32, ptr %84, align 4, !tbaa !19
  %86 = sext i32 %85 to i64
  %87 = getelementptr inbounds double, ptr %15, i64 %86
  store double %83, ptr %87, align 8, !tbaa !29
  %indvars.iv.next171.prol = add nuw nsw i64 %indvars.iv170.prol, 1
  %prol.iter207.next = add i64 %prol.iter207, 1
  %prol.iter207.cmp.not = icmp eq i64 %prol.iter207.next, %xtraiter205
  br i1 %prol.iter207.cmp.not, label %.lr.ph141.prol.loopexit, label %.lr.ph141.prol, !llvm.loop !33

.lr.ph141.prol.loopexit:                          ; preds = %.lr.ph141.prol, %.lr.ph141.preheader
  %indvars.iv170.unr = phi i64 [ %79, %.lr.ph141.preheader ], [ %indvars.iv.next171.prol, %.lr.ph141.prol ]
  %88 = sub i64 %79, %78
  %89 = icmp ugt i64 %88, -4
  br i1 %89, label %.lr.ph146.preheader, label %.lr.ph141

.lr.ph136.new:                                    ; preds = %.prol.loopexit, %.lr.ph136.new
  %indvars.iv165 = phi i64 [ %indvars.iv.next166.3, %.lr.ph136.new ], [ %indvars.iv165.unr, %.prol.loopexit ]
  %90 = getelementptr inbounds double, ptr %63, i64 %indvars.iv165
  %91 = load double, ptr %90, align 8, !tbaa !29
  %92 = getelementptr inbounds i32, ptr %64, i64 %indvars.iv165
  %93 = load i32, ptr %92, align 4, !tbaa !19
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds double, ptr %14, i64 %94
  store double %91, ptr %95, align 8, !tbaa !29
  %indvars.iv.next166 = add nsw i64 %indvars.iv165, 1
  %96 = getelementptr inbounds double, ptr %63, i64 %indvars.iv.next166
  %97 = load double, ptr %96, align 8, !tbaa !29
  %98 = getelementptr inbounds i32, ptr %64, i64 %indvars.iv.next166
  %99 = load i32, ptr %98, align 4, !tbaa !19
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds double, ptr %14, i64 %100
  store double %97, ptr %101, align 8, !tbaa !29
  %indvars.iv.next166.1 = add nsw i64 %indvars.iv165, 2
  %102 = getelementptr inbounds double, ptr %63, i64 %indvars.iv.next166.1
  %103 = load double, ptr %102, align 8, !tbaa !29
  %104 = getelementptr inbounds i32, ptr %64, i64 %indvars.iv.next166.1
  %105 = load i32, ptr %104, align 4, !tbaa !19
  %106 = sext i32 %105 to i64
  %107 = getelementptr inbounds double, ptr %14, i64 %106
  store double %103, ptr %107, align 8, !tbaa !29
  %indvars.iv.next166.2 = add nsw i64 %indvars.iv165, 3
  %108 = getelementptr inbounds double, ptr %63, i64 %indvars.iv.next166.2
  %109 = load double, ptr %108, align 8, !tbaa !29
  %110 = getelementptr inbounds i32, ptr %64, i64 %indvars.iv.next166.2
  %111 = load i32, ptr %110, align 4, !tbaa !19
  %112 = sext i32 %111 to i64
  %113 = getelementptr inbounds double, ptr %14, i64 %112
  store double %109, ptr %113, align 8, !tbaa !29
  %indvars.iv.next166.3 = add nsw i64 %indvars.iv165, 4
  %exitcond169.not.3 = icmp eq i64 %indvars.iv.next166.3, %wide.trip.count168
  br i1 %exitcond169.not.3, label %._crit_edge137, label %.lr.ph136.new, !llvm.loop !34

.lr.ph146.preheader:                              ; preds = %.lr.ph141.prol.loopexit, %.lr.ph141, %._crit_edge137
  %114 = call noundef i32 @_ZN5nasoq8spmv_cscEiPmPiPdS2_S2_(i32 noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull %22, ptr noundef nonnull %14, ptr noundef nonnull %16)
  br label %.lr.ph146

.lr.ph141:                                        ; preds = %.lr.ph141.prol.loopexit, %.lr.ph141
  %indvars.iv170 = phi i64 [ %indvars.iv.next171.3, %.lr.ph141 ], [ %indvars.iv170.unr, %.lr.ph141.prol.loopexit ]
  %115 = getelementptr inbounds double, ptr %7, i64 %indvars.iv170
  %116 = load double, ptr %115, align 8, !tbaa !29
  %117 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv170
  %118 = load i32, ptr %117, align 4, !tbaa !19
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds double, ptr %15, i64 %119
  store double %116, ptr %120, align 8, !tbaa !29
  %indvars.iv.next171 = add nuw nsw i64 %indvars.iv170, 1
  %121 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next171
  %122 = load double, ptr %121, align 8, !tbaa !29
  %123 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv.next171
  %124 = load i32, ptr %123, align 4, !tbaa !19
  %125 = sext i32 %124 to i64
  %126 = getelementptr inbounds double, ptr %15, i64 %125
  store double %122, ptr %126, align 8, !tbaa !29
  %indvars.iv.next171.1 = add nuw nsw i64 %indvars.iv170, 2
  %127 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next171.1
  %128 = load double, ptr %127, align 8, !tbaa !29
  %129 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv.next171.1
  %130 = load i32, ptr %129, align 4, !tbaa !19
  %131 = sext i32 %130 to i64
  %132 = getelementptr inbounds double, ptr %15, i64 %131
  store double %128, ptr %132, align 8, !tbaa !29
  %indvars.iv.next171.2 = add nuw nsw i64 %indvars.iv170, 3
  %133 = getelementptr inbounds double, ptr %7, i64 %indvars.iv.next171.2
  %134 = load double, ptr %133, align 8, !tbaa !29
  %135 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv.next171.2
  %136 = load i32, ptr %135, align 4, !tbaa !19
  %137 = sext i32 %136 to i64
  %138 = getelementptr inbounds double, ptr %15, i64 %137
  store double %134, ptr %138, align 8, !tbaa !29
  %indvars.iv.next171.3 = add nuw nsw i64 %indvars.iv170, 4
  %139 = icmp ugt i64 %78, %indvars.iv.next171.3
  br i1 %139, label %.lr.ph141, label %.lr.ph146.preheader, !llvm.loop !35

.lr.ph146:                                        ; preds = %.lr.ph146.preheader, %146
  %indvars.iv175 = phi i64 [ %indvars.iv173, %.lr.ph146.preheader ], [ %indvars.iv.next176, %146 ]
  %140 = getelementptr inbounds double, ptr %16, i64 %indvars.iv175
  %141 = load double, ptr %140, align 8, !tbaa !29
  %142 = getelementptr inbounds double, ptr %15, i64 %indvars.iv175
  %143 = load double, ptr %142, align 8, !tbaa !29
  %144 = fsub double %141, %143
  %145 = fcmp ogt double %144, 1.000000e-03
  br i1 %145, label %201, label %146

146:                                              ; preds = %.lr.ph146
  %indvars.iv.next176 = add nuw nsw i64 %indvars.iv175, 1
  %exitcond180.not = icmp eq i64 %indvars.iv.next176, %wide.trip.count189
  br i1 %exitcond180.not, label %.critedge, label %.lr.ph146, !llvm.loop !36

.critedge:                                        ; preds = %146
  %147 = load ptr, ptr %48, align 8, !tbaa !18
  %148 = getelementptr inbounds i32, ptr %147, i64 %indvars.iv173
  %149 = load i32, ptr %148, align 4, !tbaa !19
  %150 = getelementptr inbounds i32, ptr %147, i64 %indvars.iv.next174
  %151 = load i32, ptr %150, align 4, !tbaa !19
  %152 = icmp slt i32 %149, %151
  br i1 %152, label %.lr.ph148, label %._crit_edge149

.lr.ph148:                                        ; preds = %.critedge
  %153 = load ptr, ptr %50, align 8, !tbaa !24
  %154 = sext i32 %149 to i64
  %wide.trip.count184 = sext i32 %151 to i64
  %155 = sub nsw i64 %wide.trip.count184, %154
  %xtraiter210 = and i64 %155, 3
  %lcmp.mod211.not = icmp eq i64 %xtraiter210, 0
  br i1 %lcmp.mod211.not, label %.prol.loopexit209, label %.prol.preheader208

.prol.preheader208:                               ; preds = %.lr.ph148, %.prol.preheader208
  %indvars.iv181.prol = phi i64 [ %indvars.iv.next182.prol, %.prol.preheader208 ], [ %154, %.lr.ph148 ]
  %prol.iter212 = phi i64 [ %prol.iter212.next, %.prol.preheader208 ], [ 0, %.lr.ph148 ]
  %156 = getelementptr inbounds i32, ptr %153, i64 %indvars.iv181.prol
  %157 = load i32, ptr %156, align 4, !tbaa !19
  %158 = sext i32 %157 to i64
  %159 = getelementptr inbounds double, ptr %14, i64 %158
  store double 0.000000e+00, ptr %159, align 8, !tbaa !29
  %indvars.iv.next182.prol = add nsw i64 %indvars.iv181.prol, 1
  %prol.iter212.next = add i64 %prol.iter212, 1
  %prol.iter212.cmp.not = icmp eq i64 %prol.iter212.next, %xtraiter210
  br i1 %prol.iter212.cmp.not, label %.prol.loopexit209, label %.prol.preheader208, !llvm.loop !37

.prol.loopexit209:                                ; preds = %.prol.preheader208, %.lr.ph148
  %indvars.iv181.unr = phi i64 [ %154, %.lr.ph148 ], [ %indvars.iv.next182.prol, %.prol.preheader208 ]
  %160 = sub nsw i64 %154, %wide.trip.count184
  %161 = icmp ugt i64 %160, -4
  br i1 %161, label %._crit_edge149, label %.lr.ph148.new

.lr.ph148.new:                                    ; preds = %.prol.loopexit209
  %invariant.gep = getelementptr i8, ptr %153, i64 4
  %invariant.gep220 = getelementptr i8, ptr %153, i64 8
  %invariant.gep222 = getelementptr i8, ptr %153, i64 12
  br label %173

._crit_edge149:                                   ; preds = %.prol.loopexit209, %173, %.critedge
  %162 = load i64, ptr %75, align 8, !tbaa !5
  %163 = load i64, ptr %77, align 8, !tbaa !5
  %sext159 = shl i64 %162, 32
  %164 = ashr exact i64 %sext159, 32
  %165 = icmp ugt i64 %163, %164
  br i1 %165, label %.lr.ph152.preheader, label %._crit_edge153

.lr.ph152.preheader:                              ; preds = %._crit_edge149
  %166 = sub i64 %163, %162
  %xtraiter213 = and i64 %166, 3
  %lcmp.mod214.not = icmp eq i64 %xtraiter213, 0
  br i1 %lcmp.mod214.not, label %.lr.ph152.prol.loopexit, label %.lr.ph152.prol

.lr.ph152.prol:                                   ; preds = %.lr.ph152.preheader, %.lr.ph152.prol
  %indvars.iv186.prol = phi i64 [ %indvars.iv.next187.prol, %.lr.ph152.prol ], [ %164, %.lr.ph152.preheader ]
  %prol.iter215 = phi i64 [ %prol.iter215.next, %.lr.ph152.prol ], [ 0, %.lr.ph152.preheader ]
  %167 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv186.prol
  %168 = load i32, ptr %167, align 4, !tbaa !19
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds double, ptr %15, i64 %169
  store double 0.000000e+00, ptr %170, align 8, !tbaa !29
  %indvars.iv.next187.prol = add nuw nsw i64 %indvars.iv186.prol, 1
  %prol.iter215.next = add i64 %prol.iter215, 1
  %prol.iter215.cmp.not = icmp eq i64 %prol.iter215.next, %xtraiter213
  br i1 %prol.iter215.cmp.not, label %.lr.ph152.prol.loopexit, label %.lr.ph152.prol, !llvm.loop !38

.lr.ph152.prol.loopexit:                          ; preds = %.lr.ph152.prol, %.lr.ph152.preheader
  %indvars.iv186.unr = phi i64 [ %164, %.lr.ph152.preheader ], [ %indvars.iv.next187.prol, %.lr.ph152.prol ]
  %171 = sub i64 %164, %163
  %172 = icmp ugt i64 %171, -4
  br i1 %172, label %._crit_edge153, label %.lr.ph152

173:                                              ; preds = %173, %.lr.ph148.new
  %indvars.iv181 = phi i64 [ %indvars.iv181.unr, %.lr.ph148.new ], [ %indvars.iv.next182.3, %173 ]
  %174 = getelementptr inbounds i32, ptr %153, i64 %indvars.iv181
  %175 = load i32, ptr %174, align 4, !tbaa !19
  %176 = sext i32 %175 to i64
  %177 = getelementptr inbounds double, ptr %14, i64 %176
  store double 0.000000e+00, ptr %177, align 8, !tbaa !29
  %gep = getelementptr i32, ptr %invariant.gep, i64 %indvars.iv181
  %178 = load i32, ptr %gep, align 4, !tbaa !19
  %179 = sext i32 %178 to i64
  %180 = getelementptr inbounds double, ptr %14, i64 %179
  store double 0.000000e+00, ptr %180, align 8, !tbaa !29
  %gep221 = getelementptr i32, ptr %invariant.gep220, i64 %indvars.iv181
  %181 = load i32, ptr %gep221, align 4, !tbaa !19
  %182 = sext i32 %181 to i64
  %183 = getelementptr inbounds double, ptr %14, i64 %182
  store double 0.000000e+00, ptr %183, align 8, !tbaa !29
  %gep223 = getelementptr i32, ptr %invariant.gep222, i64 %indvars.iv181
  %184 = load i32, ptr %gep223, align 4, !tbaa !19
  %185 = sext i32 %184 to i64
  %186 = getelementptr inbounds double, ptr %14, i64 %185
  store double 0.000000e+00, ptr %186, align 8, !tbaa !29
  %indvars.iv.next182.3 = add nsw i64 %indvars.iv181, 4
  %exitcond185.not.3 = icmp eq i64 %indvars.iv.next182.3, %wide.trip.count184
  br i1 %exitcond185.not.3, label %._crit_edge149, label %173, !llvm.loop !39

._crit_edge153:                                   ; preds = %.lr.ph152.prol.loopexit, %.lr.ph152, %._crit_edge149
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #10
  store i32 0, ptr %9, align 4, !tbaa !19
  call void @_ZSt4fillIPdiEvT_S1_RKT0_(ptr noundef nonnull %16, ptr noundef nonnull %51, ptr noundef nonnull align 4 dereferenceable(4) %9)
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #10
  %.not123 = icmp sge i64 %indvars.iv.next174, %10
  %exitcond190 = icmp eq i64 %indvars.iv.next174, %wide.trip.count189
  br i1 %exitcond190, label %.critedge125, label %56, !llvm.loop !40

.lr.ph152:                                        ; preds = %.lr.ph152.prol.loopexit, %.lr.ph152
  %indvars.iv186 = phi i64 [ %indvars.iv.next187.3, %.lr.ph152 ], [ %indvars.iv186.unr, %.lr.ph152.prol.loopexit ]
  %187 = getelementptr inbounds i32, ptr %6, i64 %indvars.iv186
  %188 = load i32, ptr %187, align 4, !tbaa !19
  %189 = sext i32 %188 to i64
  %190 = getelementptr inbounds double, ptr %15, i64 %189
  store double 0.000000e+00, ptr %190, align 8, !tbaa !29
  %gep225 = getelementptr i32, ptr %invariant.gep224, i64 %indvars.iv186
  %191 = load i32, ptr %gep225, align 4, !tbaa !19
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds double, ptr %15, i64 %192
  store double 0.000000e+00, ptr %193, align 8, !tbaa !29
  %gep227 = getelementptr i32, ptr %invariant.gep226, i64 %indvars.iv186
  %194 = load i32, ptr %gep227, align 4, !tbaa !19
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds double, ptr %15, i64 %195
  store double 0.000000e+00, ptr %196, align 8, !tbaa !29
  %gep229 = getelementptr i32, ptr %invariant.gep228, i64 %indvars.iv186
  %197 = load i32, ptr %gep229, align 4, !tbaa !19
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds double, ptr %15, i64 %198
  store double 0.000000e+00, ptr %199, align 8, !tbaa !29
  %indvars.iv.next187.3 = add nuw nsw i64 %indvars.iv186, 4
  %200 = icmp ugt i64 %163, %indvars.iv.next187.3
  br i1 %200, label %.lr.ph152, label %._crit_edge153, !llvm.loop !41

201:                                              ; preds = %.lr.ph146
  %202 = trunc nuw nsw i64 %indvars.iv173 to i32
  %203 = trunc nuw nsw i64 %indvars.iv175 to i32
  %204 = call i32 (ptr, ...) @printf(ptr noundef nonnull dereferenceable(1) @.str, i32 noundef %202, i32 noundef %203)
  br label %209

.critedge125:                                     ; preds = %._crit_edge153, %._crit_edge
  %.not123.lcssa = phi i1 [ true, %._crit_edge ], [ %.not123, %._crit_edge153 ]
  call void @_ZdaPv(ptr noundef nonnull %14) #11
  call void @_ZdaPv(ptr noundef nonnull %15) #11
  call void @_ZdaPv(ptr noundef nonnull %16) #11
  call void @_ZdaPv(ptr noundef nonnull %22) #11
  %205 = load ptr, ptr %35, align 8, !tbaa !18
  %206 = icmp eq ptr %205, null
  br i1 %206, label %208, label %207

207:                                              ; preds = %.critedge125
  call void @_ZdaPv(ptr noundef nonnull %205) #11
  br label %208

208:                                              ; preds = %.critedge125, %207
  call void @_ZN5nasoq12sympiler_CSCD2Ev(ptr noundef nonnull align 8 dereferenceable(88) %23) #10
  call void @_ZdlPvm(ptr noundef nonnull %23, i64 noundef 88) #11
  call void @_ZN5nasoq10allocateACEPNS_12sympiler_CSCEiiii(ptr noundef %47, i32 noundef 0, i32 noundef 0, i32 noundef 0, i32 noundef 0)
  br label %209

209:                                              ; preds = %201, %208
  %.not123130 = phi i1 [ %.not123156, %201 ], [ %.not123.lcssa, %208 ]
  ret i1 %.not123130
}

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znam(i64 noundef) local_unnamed_addr #2

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

; Function Attrs: nobuiltin allocsize(0)
declare noundef nonnull ptr @_Znwm(i64 noundef) local_unnamed_addr #2

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

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

declare void @_ZN5nasoq5spmdmEiPmPiPdS2_S2_(i32 noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #4

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

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local void @_ZSt4fillIPdiEvT_S1_RKT0_(ptr noundef, ptr noundef, ptr noundef nonnull align 4 dereferenceable(4)) local_unnamed_addr #6

; Function Attrs: nobuiltin nounwind
declare void @_ZdaPv(ptr noundef) local_unnamed_addr #7

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

; Function Attrs: nobuiltin nounwind
declare void @_ZdlPvm(ptr noundef, i64 noundef) local_unnamed_addr #7

declare void @_ZN5nasoq10allocateACEPNS_12sympiler_CSCEiiii(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef) local_unnamed_addr #4

attributes #0 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nobuiltin 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 #3 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
attributes #4 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { 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 #6 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #7 = { nobuiltin 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 #8 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #9 = { builtin allocsize(0) }
attributes #10 = { nounwind }
attributes #11 = { builtin 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 = !{!"long", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !6, i64 16}
!10 = !{!"_ZTSN5nasoq12sympiler_CSCE", !6, i64 0, !6, i64 8, !6, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !12, i64 64, !12, i64 68, !12, i64 72, !12, i64 76, !12, i64 80, !12, i64 84}
!11 = !{!"any pointer", !7, i64 0}
!12 = !{!"int", !7, i64 0}
!13 = !{!10, !6, i64 0}
!14 = !{!10, !6, i64 8}
!15 = !{!10, !12, i64 64}
!16 = !{!10, !12, i64 72}
!17 = !{!10, !12, i64 84}
!18 = !{!10, !11, i64 24}
!19 = !{!12, !12, i64 0}
!20 = distinct !{!20, !21, !22, !23}
!21 = !{!"llvm.loop.mustprogress"}
!22 = !{!"llvm.loop.isvectorized", i32 1}
!23 = !{!"llvm.loop.unroll.runtime.disable"}
!24 = !{!10, !11, i64 32}
!25 = !{!10, !11, i64 48}
!26 = !{!10, !11, i64 40}
!27 = !{!10, !12, i64 80}
!28 = distinct !{!28, !21, !23, !22}
!29 = !{!30, !30, i64 0}
!30 = !{!"double", !7, i64 0}
!31 = distinct !{!31, !32}
!32 = !{!"llvm.loop.unroll.disable"}
!33 = distinct !{!33, !32}
!34 = distinct !{!34, !21}
!35 = distinct !{!35, !21}
!36 = distinct !{!36, !21}
!37 = distinct !{!37, !32}
!38 = distinct !{!38, !32}
!39 = distinct !{!39, !21}
!40 = distinct !{!40, !21}
!41 = distinct !{!41, !21}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GVNPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,InstSimplifyPass,JumpThreadingPass,LCSSAPass,LICMPass,LoopInstSimplifyPass,LoopLoadEliminationPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,LoopVectorizePass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass