; LLVM IR from sympiler/nasoq :: src/common/Transpose.ll (ZN5nasoq18transpose_sym_realEPNS_12sympiler_CSCEPiS1_S2_S2_Ri)

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

; Function Attrs: mustprogress nounwind uwtable
define dso_local noundef i32 @_ZN5nasoq18transpose_sym_realEPNS_12sympiler_CSCEPiS1_S2_S2_Ri(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef nonnull align 4 dereferenceable(4) %5) #0 {
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %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 ptr, align 8
  %23 = alloca i32, align 4
  %24 = alloca i32, align 4
  %25 = alloca i32, align 4
  %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 ptr %0, ptr %7, align 8, !tbaa !5
  store ptr %1, ptr %8, align 8, !tbaa !5
  store ptr %2, ptr %9, align 8, !tbaa !5
  store ptr %3, ptr %10, align 8, !tbaa !5
  store ptr %4, ptr %11, align 8, !tbaa !5
  store ptr %5, ptr %12, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #2
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #2
  %34 = load ptr, ptr %8, align 8, !tbaa !5
  %35 = icmp ne ptr %34, null
  %36 = zext i1 %35 to i32
  store i32 %36, ptr %28, align 4, !tbaa !9
  %37 = load ptr, ptr %7, align 8, !tbaa !5
  %38 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %37, i32 0, i32 0
  %39 = load i64, ptr %38, align 8, !tbaa !11
  %40 = trunc i64 %39 to i32
  store i32 %40, ptr %30, align 4, !tbaa !9
  %41 = load ptr, ptr %7, align 8, !tbaa !5
  %42 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %41, i32 0, i32 3
  %43 = load ptr, ptr %42, align 8, !tbaa !14
  store ptr %43, ptr %17, align 8, !tbaa !5
  %44 = load ptr, ptr %7, align 8, !tbaa !5
  %45 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %44, i32 0, i32 4
  %46 = load ptr, ptr %45, align 8, !tbaa !15
  store ptr %46, ptr %19, align 8, !tbaa !5
  %47 = load ptr, ptr %7, align 8, !tbaa !5
  %48 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %47, i32 0, i32 6
  %49 = load ptr, ptr %48, align 8, !tbaa !16
  store ptr %49, ptr %13, align 8, !tbaa !5
  %50 = load ptr, ptr %7, align 8, !tbaa !5
  %51 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %50, i32 0, i32 7
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  store ptr %52, ptr %14, align 8, !tbaa !5
  %53 = load ptr, ptr %7, align 8, !tbaa !5
  %54 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %53, i32 0, i32 5
  %55 = load ptr, ptr %54, align 8, !tbaa !18
  store ptr %55, ptr %18, align 8, !tbaa !5
  %56 = load ptr, ptr %7, align 8, !tbaa !5
  %57 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %56, i32 0, i32 13
  %58 = load i32, ptr %57, align 4, !tbaa !19
  store i32 %58, ptr %25, align 4, !tbaa !9
  %59 = load ptr, ptr %7, align 8, !tbaa !5
  %60 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %59, i32 0, i32 8
  %61 = load i32, ptr %60, align 8, !tbaa !20
  %62 = icmp sgt i32 %61, 0
  %63 = zext i1 %62 to i32
  store i32 %63, ptr %27, align 4, !tbaa !9
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  %65 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %64, i32 0, i32 3
  %66 = load ptr, ptr %65, align 8, !tbaa !14
  store ptr %66, ptr %20, align 8, !tbaa !5
  %67 = load ptr, ptr %9, align 8, !tbaa !5
  %68 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %67, i32 0, i32 4
  %69 = load ptr, ptr %68, align 8, !tbaa !15
  store ptr %69, ptr %21, align 8, !tbaa !5
  %70 = load ptr, ptr %9, align 8, !tbaa !5
  %71 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %70, i32 0, i32 6
  %72 = load ptr, ptr %71, align 8, !tbaa !16
  store ptr %72, ptr %15, align 8, !tbaa !5
  %73 = load ptr, ptr %9, align 8, !tbaa !5
  %74 = getelementptr inbounds %"struct.nasoq::sympiler_CSC", ptr %73, i32 0, i32 7
  %75 = load ptr, ptr %74, align 8, !tbaa !17
  store ptr %75, ptr %16, align 8, !tbaa !5
  %76 = load i32, ptr %28, align 4, !tbaa !9
  %77 = icmp ne i32 %76, 0
  br i1 %77, label %78, label %300

78:                                               ; preds = %6
  %79 = load i32, ptr %27, align 4, !tbaa !9
  %80 = icmp ne i32 %79, 0
  br i1 %80, label %81, label %190

81:                                               ; preds = %78
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %82

82:                                               ; preds = %186, %81
  %83 = load i32, ptr %32, align 4, !tbaa !9
  %84 = load i32, ptr %30, align 4, !tbaa !9
  %85 = icmp slt i32 %83, %84
  br i1 %85, label %86, label %189

86:                                               ; preds = %82
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = load i32, ptr %32, align 4, !tbaa !9
  %89 = sext i32 %88 to i64
  %90 = getelementptr inbounds i32, ptr %87, i64 %89
  %91 = load i32, ptr %90, align 4, !tbaa !9
  store i32 %91, ptr %29, align 4, !tbaa !9
  %92 = load ptr, ptr %17, align 8, !tbaa !5
  %93 = load i32, ptr %29, align 4, !tbaa !9
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds i32, ptr %92, i64 %94
  %96 = load i32, ptr %95, align 4, !tbaa !9
  store i32 %96, ptr %23, align 4, !tbaa !9
  %97 = load i32, ptr %25, align 4, !tbaa !9
  %98 = icmp ne i32 %97, 0
  br i1 %98, label %99, label %106

99:                                               ; preds = %86
  %100 = load ptr, ptr %17, align 8, !tbaa !5
  %101 = load i32, ptr %29, align 4, !tbaa !9
  %102 = add nsw i32 %101, 1
  %103 = sext i32 %102 to i64
  %104 = getelementptr inbounds i32, ptr %100, i64 %103
  %105 = load i32, ptr %104, align 4, !tbaa !9
  br label %114

106:                                              ; preds = %86
  %107 = load i32, ptr %23, align 4, !tbaa !9
  %108 = load ptr, ptr %18, align 8, !tbaa !5
  %109 = load i32, ptr %29, align 4, !tbaa !9
  %110 = sext i32 %109 to i64
  %111 = getelementptr inbounds i32, ptr %108, i64 %110
  %112 = load i32, ptr %111, align 4, !tbaa !9
  %113 = add nsw i32 %107, %112
  br label %114

114:                                              ; preds = %106, %99
  %115 = phi i32 [ %105, %99 ], [ %113, %106 ]
  store i32 %115, ptr %24, align 4, !tbaa !9
  br label %116

116:                                              ; preds = %182, %114
  %117 = load i32, ptr %23, align 4, !tbaa !9
  %118 = load i32, ptr %24, align 4, !tbaa !9
  %119 = icmp slt i32 %117, %118
  br i1 %119, label %120, label %185

120:                                              ; preds = %116
  %121 = load ptr, ptr %19, align 8, !tbaa !5
  %122 = load i32, ptr %23, align 4, !tbaa !9
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds i32, ptr %121, i64 %123
  %125 = load i32, ptr %124, align 4, !tbaa !9
  store i32 %125, ptr %33, align 4, !tbaa !9
  %126 = load i32, ptr %33, align 4, !tbaa !9
  %127 = load i32, ptr %29, align 4, !tbaa !9
  %128 = icmp sle i32 %126, %127
  br i1 %128, label %129, label %181

129:                                              ; preds = %120
  %130 = load ptr, ptr %11, align 8, !tbaa !5
  %131 = load i32, ptr %33, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = getelementptr inbounds i32, ptr %130, i64 %132
  %134 = load i32, ptr %133, align 4, !tbaa !9
  store i32 %134, ptr %31, align 4, !tbaa !9
  %135 = load i32, ptr %31, align 4, !tbaa !9
  %136 = load i32, ptr %32, align 4, !tbaa !9
  %137 = icmp slt i32 %135, %136
  br i1 %137, label %138, label %159

138:                                              ; preds = %129
  %139 = load ptr, ptr %10, align 8, !tbaa !5
  %140 = load i32, ptr %31, align 4, !tbaa !9
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds i32, ptr %139, i64 %141
  %143 = load i32, ptr %142, align 4, !tbaa !9
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %142, align 4, !tbaa !9
  store i32 %143, ptr %26, align 4, !tbaa !9
  %145 = load i32, ptr %32, align 4, !tbaa !9
  %146 = load ptr, ptr %21, align 8, !tbaa !5
  %147 = load i32, ptr %26, align 4, !tbaa !9
  %148 = sext i32 %147 to i64
  %149 = getelementptr inbounds i32, ptr %146, i64 %148
  store i32 %145, ptr %149, align 4, !tbaa !9
  %150 = load ptr, ptr %13, align 8, !tbaa !5
  %151 = load i32, ptr %23, align 4, !tbaa !9
  %152 = sext i32 %151 to i64
  %153 = getelementptr inbounds double, ptr %150, i64 %152
  %154 = load double, ptr %153, align 8, !tbaa !21
  %155 = load ptr, ptr %15, align 8, !tbaa !5
  %156 = load i32, ptr %26, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds double, ptr %155, i64 %157
  store double %154, ptr %158, align 8, !tbaa !21
  br label %180

159:                                              ; preds = %129
  %160 = load ptr, ptr %10, align 8, !tbaa !5
  %161 = load i32, ptr %32, align 4, !tbaa !9
  %162 = sext i32 %161 to i64
  %163 = getelementptr inbounds i32, ptr %160, i64 %162
  %164 = load i32, ptr %163, align 4, !tbaa !9
  %165 = add nsw i32 %164, 1
  store i32 %165, ptr %163, align 4, !tbaa !9
  store i32 %164, ptr %26, align 4, !tbaa !9
  %166 = load i32, ptr %31, align 4, !tbaa !9
  %167 = load ptr, ptr %21, align 8, !tbaa !5
  %168 = load i32, ptr %26, align 4, !tbaa !9
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds i32, ptr %167, i64 %169
  store i32 %166, ptr %170, align 4, !tbaa !9
  %171 = load ptr, ptr %13, align 8, !tbaa !5
  %172 = load i32, ptr %23, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %171, i64 %173
  %175 = load double, ptr %174, align 8, !tbaa !21
  %176 = load ptr, ptr %15, align 8, !tbaa !5
  %177 = load i32, ptr %26, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds double, ptr %176, i64 %178
  store double %175, ptr %179, align 8, !tbaa !21
  br label %180

180:                                              ; preds = %159, %138
  br label %181

181:                                              ; preds = %180, %120
  br label %182

182:                                              ; preds = %181
  %183 = load i32, ptr %23, align 4, !tbaa !9
  %184 = add nsw i32 %183, 1
  store i32 %184, ptr %23, align 4, !tbaa !9
  br label %116, !llvm.loop !23

185:                                              ; preds = %116
  br label %186

186:                                              ; preds = %185
  %187 = load i32, ptr %32, align 4, !tbaa !9
  %188 = add nsw i32 %187, 1
  store i32 %188, ptr %32, align 4, !tbaa !9
  br label %82, !llvm.loop !25

189:                                              ; preds = %82
  br label %299

190:                                              ; preds = %78
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %191

191:                                              ; preds = %295, %190
  %192 = load i32, ptr %32, align 4, !tbaa !9
  %193 = load i32, ptr %30, align 4, !tbaa !9
  %194 = icmp slt i32 %192, %193
  br i1 %194, label %195, label %298

195:                                              ; preds = %191
  %196 = load ptr, ptr %8, align 8, !tbaa !5
  %197 = load i32, ptr %32, align 4, !tbaa !9
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds i32, ptr %196, i64 %198
  %200 = load i32, ptr %199, align 4, !tbaa !9
  store i32 %200, ptr %29, align 4, !tbaa !9
  %201 = load ptr, ptr %17, align 8, !tbaa !5
  %202 = load i32, ptr %29, align 4, !tbaa !9
  %203 = sext i32 %202 to i64
  %204 = getelementptr inbounds i32, ptr %201, i64 %203
  %205 = load i32, ptr %204, align 4, !tbaa !9
  store i32 %205, ptr %23, align 4, !tbaa !9
  %206 = load i32, ptr %25, align 4, !tbaa !9
  %207 = icmp ne i32 %206, 0
  br i1 %207, label %208, label %215

208:                                              ; preds = %195
  %209 = load ptr, ptr %17, align 8, !tbaa !5
  %210 = load i32, ptr %29, align 4, !tbaa !9
  %211 = add nsw i32 %210, 1
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds i32, ptr %209, i64 %212
  %214 = load i32, ptr %213, align 4, !tbaa !9
  br label %223

215:                                              ; preds = %195
  %216 = load i32, ptr %23, align 4, !tbaa !9
  %217 = load ptr, ptr %18, align 8, !tbaa !5
  %218 = load i32, ptr %29, align 4, !tbaa !9
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds i32, ptr %217, i64 %219
  %221 = load i32, ptr %220, align 4, !tbaa !9
  %222 = add nsw i32 %216, %221
  br label %223

223:                                              ; preds = %215, %208
  %224 = phi i32 [ %214, %208 ], [ %222, %215 ]
  store i32 %224, ptr %24, align 4, !tbaa !9
  br label %225

225:                                              ; preds = %291, %223
  %226 = load i32, ptr %23, align 4, !tbaa !9
  %227 = load i32, ptr %24, align 4, !tbaa !9
  %228 = icmp slt i32 %226, %227
  br i1 %228, label %229, label %294

229:                                              ; preds = %225
  %230 = load ptr, ptr %19, align 8, !tbaa !5
  %231 = load i32, ptr %23, align 4, !tbaa !9
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds i32, ptr %230, i64 %232
  %234 = load i32, ptr %233, align 4, !tbaa !9
  store i32 %234, ptr %33, align 4, !tbaa !9
  %235 = load i32, ptr %33, align 4, !tbaa !9
  %236 = load i32, ptr %29, align 4, !tbaa !9
  %237 = icmp sge i32 %235, %236
  br i1 %237, label %238, label %290

238:                                              ; preds = %229
  %239 = load ptr, ptr %11, align 8, !tbaa !5
  %240 = load i32, ptr %33, align 4, !tbaa !9
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds i32, ptr %239, i64 %241
  %243 = load i32, ptr %242, align 4, !tbaa !9
  store i32 %243, ptr %31, align 4, !tbaa !9
  %244 = load i32, ptr %31, align 4, !tbaa !9
  %245 = load i32, ptr %32, align 4, !tbaa !9
  %246 = icmp sgt i32 %244, %245
  br i1 %246, label %247, label %268

247:                                              ; preds = %238
  %248 = load ptr, ptr %10, align 8, !tbaa !5
  %249 = load i32, ptr %31, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = getelementptr inbounds i32, ptr %248, i64 %250
  %252 = load i32, ptr %251, align 4, !tbaa !9
  %253 = add nsw i32 %252, 1
  store i32 %253, ptr %251, align 4, !tbaa !9
  store i32 %252, ptr %26, align 4, !tbaa !9
  %254 = load i32, ptr %32, align 4, !tbaa !9
  %255 = load ptr, ptr %21, align 8, !tbaa !5
  %256 = load i32, ptr %26, align 4, !tbaa !9
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds i32, ptr %255, i64 %257
  store i32 %254, ptr %258, align 4, !tbaa !9
  %259 = load ptr, ptr %13, align 8, !tbaa !5
  %260 = load i32, ptr %23, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds double, ptr %259, i64 %261
  %263 = load double, ptr %262, align 8, !tbaa !21
  %264 = load ptr, ptr %15, align 8, !tbaa !5
  %265 = load i32, ptr %26, align 4, !tbaa !9
  %266 = sext i32 %265 to i64
  %267 = getelementptr inbounds double, ptr %264, i64 %266
  store double %263, ptr %267, align 8, !tbaa !21
  br label %289

268:                                              ; preds = %238
  %269 = load ptr, ptr %10, align 8, !tbaa !5
  %270 = load i32, ptr %32, align 4, !tbaa !9
  %271 = sext i32 %270 to i64
  %272 = getelementptr inbounds i32, ptr %269, i64 %271
  %273 = load i32, ptr %272, align 4, !tbaa !9
  %274 = add nsw i32 %273, 1
  store i32 %274, ptr %272, align 4, !tbaa !9
  store i32 %273, ptr %26, align 4, !tbaa !9
  %275 = load i32, ptr %31, align 4, !tbaa !9
  %276 = load ptr, ptr %21, align 8, !tbaa !5
  %277 = load i32, ptr %26, align 4, !tbaa !9
  %278 = sext i32 %277 to i64
  %279 = getelementptr inbounds i32, ptr %276, i64 %278
  store i32 %275, ptr %279, align 4, !tbaa !9
  %280 = load ptr, ptr %13, align 8, !tbaa !5
  %281 = load i32, ptr %23, align 4, !tbaa !9
  %282 = sext i32 %281 to i64
  %283 = getelementptr inbounds double, ptr %280, i64 %282
  %284 = load double, ptr %283, align 8, !tbaa !21
  %285 = load ptr, ptr %15, align 8, !tbaa !5
  %286 = load i32, ptr %26, align 4, !tbaa !9
  %287 = sext i32 %286 to i64
  %288 = getelementptr inbounds double, ptr %285, i64 %287
  store double %284, ptr %288, align 8, !tbaa !21
  br label %289

289:                                              ; preds = %268, %247
  br label %290

290:                                              ; preds = %289, %229
  br label %291

291:                                              ; preds = %290
  %292 = load i32, ptr %23, align 4, !tbaa !9
  %293 = add nsw i32 %292, 1
  store i32 %293, ptr %23, align 4, !tbaa !9
  br label %225, !llvm.loop !26

294:                                              ; preds = %225
  br label %295

295:                                              ; preds = %294
  %296 = load i32, ptr %32, align 4, !tbaa !9
  %297 = add nsw i32 %296, 1
  store i32 %297, ptr %32, align 4, !tbaa !9
  br label %191, !llvm.loop !27

298:                                              ; preds = %191
  br label %299

299:                                              ; preds = %298, %189
  br label %450

300:                                              ; preds = %6
  %301 = load i32, ptr %27, align 4, !tbaa !9
  %302 = icmp ne i32 %301, 0
  br i1 %302, label %303, label %376

303:                                              ; preds = %300
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %304

304:                                              ; preds = %372, %303
  %305 = load i32, ptr %32, align 4, !tbaa !9
  %306 = load i32, ptr %30, align 4, !tbaa !9
  %307 = icmp slt i32 %305, %306
  br i1 %307, label %308, label %375

308:                                              ; preds = %304
  %309 = load ptr, ptr %17, align 8, !tbaa !5
  %310 = load i32, ptr %32, align 4, !tbaa !9
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds i32, ptr %309, i64 %311
  %313 = load i32, ptr %312, align 4, !tbaa !9
  store i32 %313, ptr %23, align 4, !tbaa !9
  %314 = load i32, ptr %25, align 4, !tbaa !9
  %315 = icmp ne i32 %314, 0
  br i1 %315, label %316, label %323

316:                                              ; preds = %308
  %317 = load ptr, ptr %17, align 8, !tbaa !5
  %318 = load i32, ptr %32, align 4, !tbaa !9
  %319 = add nsw i32 %318, 1
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds i32, ptr %317, i64 %320
  %322 = load i32, ptr %321, align 4, !tbaa !9
  br label %331

323:                                              ; preds = %308
  %324 = load i32, ptr %23, align 4, !tbaa !9
  %325 = load ptr, ptr %18, align 8, !tbaa !5
  %326 = load i32, ptr %32, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds i32, ptr %325, i64 %327
  %329 = load i32, ptr %328, align 4, !tbaa !9
  %330 = add nsw i32 %324, %329
  br label %331

331:                                              ; preds = %323, %316
  %332 = phi i32 [ %322, %316 ], [ %330, %323 ]
  store i32 %332, ptr %24, align 4, !tbaa !9
  br label %333

333:                                              ; preds = %368, %331
  %334 = load i32, ptr %23, align 4, !tbaa !9
  %335 = load i32, ptr %24, align 4, !tbaa !9
  %336 = icmp slt i32 %334, %335
  br i1 %336, label %337, label %371

337:                                              ; preds = %333
  %338 = load ptr, ptr %19, align 8, !tbaa !5
  %339 = load i32, ptr %23, align 4, !tbaa !9
  %340 = sext i32 %339 to i64
  %341 = getelementptr inbounds i32, ptr %338, i64 %340
  %342 = load i32, ptr %341, align 4, !tbaa !9
  store i32 %342, ptr %31, align 4, !tbaa !9
  %343 = load i32, ptr %31, align 4, !tbaa !9
  %344 = load i32, ptr %32, align 4, !tbaa !9
  %345 = icmp sle i32 %343, %344
  br i1 %345, label %346, label %367

346:                                              ; preds = %337
  %347 = load ptr, ptr %10, align 8, !tbaa !5
  %348 = load i32, ptr %31, align 4, !tbaa !9
  %349 = sext i32 %348 to i64
  %350 = getelementptr inbounds i32, ptr %347, i64 %349
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %350, align 4, !tbaa !9
  store i32 %351, ptr %26, align 4, !tbaa !9
  %353 = load i32, ptr %32, align 4, !tbaa !9
  %354 = load ptr, ptr %21, align 8, !tbaa !5
  %355 = load i32, ptr %26, align 4, !tbaa !9
  %356 = sext i32 %355 to i64
  %357 = getelementptr inbounds i32, ptr %354, i64 %356
  store i32 %353, ptr %357, align 4, !tbaa !9
  %358 = load ptr, ptr %13, align 8, !tbaa !5
  %359 = load i32, ptr %23, align 4, !tbaa !9
  %360 = sext i32 %359 to i64
  %361 = getelementptr inbounds double, ptr %358, i64 %360
  %362 = load double, ptr %361, align 8, !tbaa !21
  %363 = load ptr, ptr %15, align 8, !tbaa !5
  %364 = load i32, ptr %26, align 4, !tbaa !9
  %365 = sext i32 %364 to i64
  %366 = getelementptr inbounds double, ptr %363, i64 %365
  store double %362, ptr %366, align 8, !tbaa !21
  br label %367

367:                                              ; preds = %346, %337
  br label %368

368:                                              ; preds = %367
  %369 = load i32, ptr %23, align 4, !tbaa !9
  %370 = add nsw i32 %369, 1
  store i32 %370, ptr %23, align 4, !tbaa !9
  br label %333, !llvm.loop !28

371:                                              ; preds = %333
  br label %372

372:                                              ; preds = %371
  %373 = load i32, ptr %32, align 4, !tbaa !9
  %374 = add nsw i32 %373, 1
  store i32 %374, ptr %32, align 4, !tbaa !9
  br label %304, !llvm.loop !29

375:                                              ; preds = %304
  br label %449

376:                                              ; preds = %300
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %377

377:                                              ; preds = %445, %376
  %378 = load i32, ptr %32, align 4, !tbaa !9
  %379 = load i32, ptr %30, align 4, !tbaa !9
  %380 = icmp slt i32 %378, %379
  br i1 %380, label %381, label %448

381:                                              ; preds = %377
  %382 = load ptr, ptr %17, align 8, !tbaa !5
  %383 = load i32, ptr %32, align 4, !tbaa !9
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds i32, ptr %382, i64 %384
  %386 = load i32, ptr %385, align 4, !tbaa !9
  store i32 %386, ptr %23, align 4, !tbaa !9
  %387 = load i32, ptr %25, align 4, !tbaa !9
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %396

389:                                              ; preds = %381
  %390 = load ptr, ptr %17, align 8, !tbaa !5
  %391 = load i32, ptr %32, align 4, !tbaa !9
  %392 = add nsw i32 %391, 1
  %393 = sext i32 %392 to i64
  %394 = getelementptr inbounds i32, ptr %390, i64 %393
  %395 = load i32, ptr %394, align 4, !tbaa !9
  br label %404

396:                                              ; preds = %381
  %397 = load i32, ptr %23, align 4, !tbaa !9
  %398 = load ptr, ptr %18, align 8, !tbaa !5
  %399 = load i32, ptr %32, align 4, !tbaa !9
  %400 = sext i32 %399 to i64
  %401 = getelementptr inbounds i32, ptr %398, i64 %400
  %402 = load i32, ptr %401, align 4, !tbaa !9
  %403 = add nsw i32 %397, %402
  br label %404

404:                                              ; preds = %396, %389
  %405 = phi i32 [ %395, %389 ], [ %403, %396 ]
  store i32 %405, ptr %24, align 4, !tbaa !9
  br label %406

406:                                              ; preds = %441, %404
  %407 = load i32, ptr %23, align 4, !tbaa !9
  %408 = load i32, ptr %24, align 4, !tbaa !9
  %409 = icmp slt i32 %407, %408
  br i1 %409, label %410, label %444

410:                                              ; preds = %406
  %411 = load ptr, ptr %19, align 8, !tbaa !5
  %412 = load i32, ptr %23, align 4, !tbaa !9
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds i32, ptr %411, i64 %413
  %415 = load i32, ptr %414, align 4, !tbaa !9
  store i32 %415, ptr %31, align 4, !tbaa !9
  %416 = load i32, ptr %31, align 4, !tbaa !9
  %417 = load i32, ptr %32, align 4, !tbaa !9
  %418 = icmp sge i32 %416, %417
  br i1 %418, label %419, label %440

419:                                              ; preds = %410
  %420 = load ptr, ptr %10, align 8, !tbaa !5
  %421 = load i32, ptr %31, align 4, !tbaa !9
  %422 = sext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %420, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !9
  %425 = add nsw i32 %424, 1
  store i32 %425, ptr %423, align 4, !tbaa !9
  store i32 %424, ptr %26, align 4, !tbaa !9
  %426 = load i32, ptr %32, align 4, !tbaa !9
  %427 = load ptr, ptr %21, align 8, !tbaa !5
  %428 = load i32, ptr %26, align 4, !tbaa !9
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds i32, ptr %427, i64 %429
  store i32 %426, ptr %430, align 4, !tbaa !9
  %431 = load ptr, ptr %13, align 8, !tbaa !5
  %432 = load i32, ptr %23, align 4, !tbaa !9
  %433 = sext i32 %432 to i64
  %434 = getelementptr inbounds double, ptr %431, i64 %433
  %435 = load double, ptr %434, align 8, !tbaa !21
  %436 = load ptr, ptr %15, align 8, !tbaa !5
  %437 = load i32, ptr %26, align 4, !tbaa !9
  %438 = sext i32 %437 to i64
  %439 = getelementptr inbounds double, ptr %436, i64 %438
  store double %435, ptr %439, align 8, !tbaa !21
  br label %440

440:                                              ; preds = %419, %410
  br label %441

441:                                              ; preds = %440
  %442 = load i32, ptr %23, align 4, !tbaa !9
  %443 = add nsw i32 %442, 1
  store i32 %443, ptr %23, align 4, !tbaa !9
  br label %406, !llvm.loop !30

444:                                              ; preds = %406
  br label %445

445:                                              ; preds = %444
  %446 = load i32, ptr %32, align 4, !tbaa !9
  %447 = add nsw i32 %446, 1
  store i32 %447, ptr %32, align 4, !tbaa !9
  br label %377, !llvm.loop !31

448:                                              ; preds = %377
  br label %449

449:                                              ; preds = %448, %375
  br label %450

450:                                              ; preds = %449, %299
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %29) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #2
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %19) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %18) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %17) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %16) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %14) #2
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #2
  ret i32 1
}

; 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 willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !13, i64 0}
!12 = !{!"_ZTSN5nasoq12sympiler_CSCE", !13, i64 0, !13, i64 8, !13, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !10, i64 64, !10, i64 68, !10, i64 72, !10, i64 76, !10, i64 80, !10, i64 84}
!13 = !{!"long", !7, i64 0}
!14 = !{!12, !6, i64 24}
!15 = !{!12, !6, i64 32}
!16 = !{!12, !6, i64 48}
!17 = !{!12, !6, i64 56}
!18 = !{!12, !6, i64 40}
!19 = !{!12, !10, i64 84}
!20 = !{!12, !10, i64 64}
!21 = !{!22, !22, i64 0}
!22 = !{!"double", !7, i64 0}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = distinct !{!25, !24}
!26 = distinct !{!26, !24}
!27 = distinct !{!27, !24}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = distinct !{!30, !24}
!31 = distinct !{!31, !24}


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

; Function Attrs: mustprogress nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) uwtable
define dso_local noundef i32 @_ZN5nasoq18transpose_sym_realEPNS_12sympiler_CSCEPiS1_S2_S2_Ri(ptr nocapture noundef readonly %0, ptr noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef %3, ptr nocapture noundef readonly %4, ptr nocapture noundef nonnull readnone align 4 dereferenceable(4) %5) local_unnamed_addr #0 {
  %.not = icmp eq ptr %1, null
  %7 = load i64, ptr %0, align 8, !tbaa !5
  %8 = trunc i64 %7 to i32
  %9 = getelementptr inbounds i8, ptr %0, i64 24
  %10 = load ptr, ptr %9, align 8, !tbaa !12
  %11 = getelementptr inbounds i8, ptr %0, i64 32
  %12 = load ptr, ptr %11, align 8, !tbaa !13
  %13 = getelementptr inbounds i8, ptr %0, i64 48
  %14 = load ptr, ptr %13, align 8, !tbaa !14
  %15 = getelementptr inbounds i8, ptr %0, i64 40
  %16 = load ptr, ptr %15, align 8, !tbaa !15
  %17 = getelementptr inbounds i8, ptr %0, i64 84
  %18 = load i32, ptr %17, align 4, !tbaa !16
  %19 = getelementptr inbounds i8, ptr %0, i64 64
  %20 = load i32, ptr %19, align 8, !tbaa !17
  %21 = icmp sgt i32 %20, 0
  %22 = getelementptr inbounds i8, ptr %2, i64 32
  %23 = load ptr, ptr %22, align 8, !tbaa !13
  %24 = getelementptr inbounds i8, ptr %2, i64 48
  %25 = load ptr, ptr %24, align 8, !tbaa !14
  %26 = icmp sgt i32 %8, 0
  br i1 %.not, label %96, label %27

27:                                               ; preds = %6
  br i1 %21, label %.preheader176, label %.preheader178

.preheader178:                                    ; preds = %27
  br i1 %26, label %.lr.ph182, label %.loopexit

.lr.ph182:                                        ; preds = %.preheader178
  %.not170 = icmp eq i32 %18, 0
  %wide.trip.count208 = and i64 %7, 2147483647
  br label %62

.preheader176:                                    ; preds = %27
  br i1 %26, label %.lr.ph188, label %.loopexit

.lr.ph188:                                        ; preds = %.preheader176
  %.not172 = icmp eq i32 %18, 0
  %wide.trip.count218 = and i64 %7, 2147483647
  br label %28

28:                                               ; preds = %.lr.ph188, %._crit_edge186
  %indvars.iv215 = phi i64 [ 0, %.lr.ph188 ], [ %indvars.iv.next216, %._crit_edge186 ]
  %29 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv215
  %30 = load i32, ptr %29, align 4, !tbaa !18
  %31 = sext i32 %30 to i64
  %32 = getelementptr inbounds i32, ptr %10, i64 %31
  %33 = load i32, ptr %32, align 4, !tbaa !18
  br i1 %.not172, label %37, label %34

34:                                               ; preds = %28
  %35 = getelementptr i8, ptr %32, i64 4
  %36 = load i32, ptr %35, align 4, !tbaa !18
  br label %41

37:                                               ; preds = %28
  %38 = getelementptr inbounds i32, ptr %16, i64 %31
  %39 = load i32, ptr %38, align 4, !tbaa !18
  %40 = add nsw i32 %39, %33
  br label %41

41:                                               ; preds = %37, %34
  %42 = phi i32 [ %36, %34 ], [ %40, %37 ]
  %43 = icmp slt i32 %33, %42
  br i1 %43, label %.lr.ph185, label %._crit_edge186

.lr.ph185:                                        ; preds = %41
  %44 = sext i32 %33 to i64
  %wide.trip.count213 = sext i32 %42 to i64
  %45 = trunc nuw nsw i64 %indvars.iv215 to i32
  br label %46

46:                                               ; preds = %.lr.ph185, %61
  %indvars.iv210 = phi i64 [ %44, %.lr.ph185 ], [ %indvars.iv.next211, %61 ]
  %47 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv210
  %48 = load i32, ptr %47, align 4, !tbaa !18
  %.not173 = icmp sgt i32 %48, %30
  br i1 %.not173, label %61, label %.sink.split

.sink.split:                                      ; preds = %46
  %49 = sext i32 %48 to i64
  %50 = getelementptr inbounds i32, ptr %4, i64 %49
  %51 = load i32, ptr %50, align 4, !tbaa !18
  %52 = sext i32 %51 to i64
  %53 = icmp sgt i64 %indvars.iv215, %52
  %.sink252.v = tail call i64 @llvm.smin.i64(i64 %indvars.iv215, i64 %52)
  %.sink252 = getelementptr inbounds i32, ptr %3, i64 %.sink252.v
  %.sink = select i1 %53, i32 %45, i32 %51
  %54 = load i32, ptr %.sink252, align 4, !tbaa !18
  %55 = add nsw i32 %54, 1
  store i32 %55, ptr %.sink252, align 4, !tbaa !18
  %56 = sext i32 %54 to i64
  %57 = getelementptr inbounds i32, ptr %23, i64 %56
  store i32 %.sink, ptr %57, align 4, !tbaa !18
  %58 = getelementptr inbounds double, ptr %14, i64 %indvars.iv210
  %59 = load double, ptr %58, align 8, !tbaa !19
  %60 = getelementptr inbounds double, ptr %25, i64 %56
  store double %59, ptr %60, align 8, !tbaa !19
  br label %61

61:                                               ; preds = %.sink.split, %46
  %indvars.iv.next211 = add nsw i64 %indvars.iv210, 1
  %exitcond214.not = icmp eq i64 %indvars.iv.next211, %wide.trip.count213
  br i1 %exitcond214.not, label %._crit_edge186, label %46, !llvm.loop !21

._crit_edge186:                                   ; preds = %61, %41
  %indvars.iv.next216 = add nuw nsw i64 %indvars.iv215, 1
  %exitcond219.not = icmp eq i64 %indvars.iv.next216, %wide.trip.count218
  br i1 %exitcond219.not, label %.loopexit, label %28, !llvm.loop !23

62:                                               ; preds = %.lr.ph182, %._crit_edge
  %indvars.iv205 = phi i64 [ 0, %.lr.ph182 ], [ %indvars.iv.next206, %._crit_edge ]
  %63 = getelementptr inbounds i32, ptr %1, i64 %indvars.iv205
  %64 = load i32, ptr %63, align 4, !tbaa !18
  %65 = sext i32 %64 to i64
  %66 = getelementptr inbounds i32, ptr %10, i64 %65
  %67 = load i32, ptr %66, align 4, !tbaa !18
  br i1 %.not170, label %71, label %68

68:                                               ; preds = %62
  %69 = getelementptr i8, ptr %66, i64 4
  %70 = load i32, ptr %69, align 4, !tbaa !18
  br label %75

71:                                               ; preds = %62
  %72 = getelementptr inbounds i32, ptr %16, i64 %65
  %73 = load i32, ptr %72, align 4, !tbaa !18
  %74 = add nsw i32 %73, %67
  br label %75

75:                                               ; preds = %71, %68
  %76 = phi i32 [ %70, %68 ], [ %74, %71 ]
  %77 = icmp slt i32 %67, %76
  br i1 %77, label %.lr.ph, label %._crit_edge

.lr.ph:                                           ; preds = %75
  %78 = sext i32 %67 to i64
  %wide.trip.count = sext i32 %76 to i64
  %79 = trunc nuw nsw i64 %indvars.iv205 to i32
  br label %80

80:                                               ; preds = %.lr.ph, %95
  %indvars.iv = phi i64 [ %78, %.lr.ph ], [ %indvars.iv.next, %95 ]
  %81 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv
  %82 = load i32, ptr %81, align 4, !tbaa !18
  %.not171 = icmp slt i32 %82, %64
  br i1 %.not171, label %95, label %.sink.split253

.sink.split253:                                   ; preds = %80
  %83 = sext i32 %82 to i64
  %84 = getelementptr inbounds i32, ptr %4, i64 %83
  %85 = load i32, ptr %84, align 4, !tbaa !18
  %86 = sext i32 %85 to i64
  %87 = icmp slt i64 %indvars.iv205, %86
  %.sink265.v = tail call i64 @llvm.smax.i64(i64 %indvars.iv205, i64 %86)
  %.sink265 = getelementptr inbounds i32, ptr %3, i64 %.sink265.v
  %.sink258 = select i1 %87, i32 %79, i32 %85
  %88 = load i32, ptr %.sink265, align 4, !tbaa !18
  %89 = add nsw i32 %88, 1
  store i32 %89, ptr %.sink265, align 4, !tbaa !18
  %90 = sext i32 %88 to i64
  %91 = getelementptr inbounds i32, ptr %23, i64 %90
  store i32 %.sink258, ptr %91, align 4, !tbaa !18
  %92 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  %93 = load double, ptr %92, align 8, !tbaa !19
  %94 = getelementptr inbounds double, ptr %25, i64 %90
  store double %93, ptr %94, align 8, !tbaa !19
  br label %95

95:                                               ; preds = %.sink.split253, %80
  %indvars.iv.next = add nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %80, !llvm.loop !24

._crit_edge:                                      ; preds = %95, %75
  %indvars.iv.next206 = add nuw nsw i64 %indvars.iv205, 1
  %exitcond209.not = icmp eq i64 %indvars.iv.next206, %wide.trip.count208
  br i1 %exitcond209.not, label %.loopexit, label %62, !llvm.loop !25

96:                                               ; preds = %6
  br i1 %21, label %.preheader, label %.preheader174

.preheader174:                                    ; preds = %96
  br i1 %26, label %.lr.ph194, label %.loopexit

.lr.ph194:                                        ; preds = %.preheader174
  %.not166 = icmp eq i32 %18, 0
  %wide.trip.count228 = and i64 %7, 2147483647
  br label %125

.preheader:                                       ; preds = %96
  br i1 %26, label %.lr.ph200, label %.loopexit

.lr.ph200:                                        ; preds = %.preheader
  %.not168 = icmp eq i32 %18, 0
  %wide.trip.count238 = and i64 %7, 2147483647
  br label %97

97:                                               ; preds = %.lr.ph200, %._crit_edge198
  %indvars.iv235 = phi i64 [ 0, %.lr.ph200 ], [ %indvars.iv.next236, %._crit_edge198 ]
  %98 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv235
  %99 = load i32, ptr %98, align 4, !tbaa !18
  br i1 %.not168, label %103, label %100

100:                                              ; preds = %97
  %101 = getelementptr inbounds i8, ptr %98, i64 4
  %102 = load i32, ptr %101, align 4, !tbaa !18
  br label %107

103:                                              ; preds = %97
  %104 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv235
  %105 = load i32, ptr %104, align 4, !tbaa !18
  %106 = add nsw i32 %105, %99
  br label %107

107:                                              ; preds = %103, %100
  %108 = phi i32 [ %102, %100 ], [ %106, %103 ]
  %109 = icmp slt i32 %99, %108
  br i1 %109, label %.lr.ph197.preheader, label %._crit_edge198

.lr.ph197.preheader:                              ; preds = %107
  %110 = sext i32 %99 to i64
  %wide.trip.count233 = sext i32 %108 to i64
  %111 = trunc nuw nsw i64 %indvars.iv235 to i32
  br label %.lr.ph197

.lr.ph197:                                        ; preds = %.lr.ph197.preheader, %124
  %indvars.iv230 = phi i64 [ %110, %.lr.ph197.preheader ], [ %indvars.iv.next231, %124 ]
  %112 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv230
  %113 = load i32, ptr %112, align 4, !tbaa !18
  %114 = sext i32 %113 to i64
  %.not169 = icmp slt i64 %indvars.iv235, %114
  br i1 %.not169, label %124, label %115

115:                                              ; preds = %.lr.ph197
  %116 = getelementptr inbounds i32, ptr %3, i64 %114
  %117 = load i32, ptr %116, align 4, !tbaa !18
  %118 = add nsw i32 %117, 1
  store i32 %118, ptr %116, align 4, !tbaa !18
  %119 = sext i32 %117 to i64
  %120 = getelementptr inbounds i32, ptr %23, i64 %119
  store i32 %111, ptr %120, align 4, !tbaa !18
  %121 = getelementptr inbounds double, ptr %14, i64 %indvars.iv230
  %122 = load double, ptr %121, align 8, !tbaa !19
  %123 = getelementptr inbounds double, ptr %25, i64 %119
  store double %122, ptr %123, align 8, !tbaa !19
  br label %124

124:                                              ; preds = %.lr.ph197, %115
  %indvars.iv.next231 = add nsw i64 %indvars.iv230, 1
  %exitcond234.not = icmp eq i64 %indvars.iv.next231, %wide.trip.count233
  br i1 %exitcond234.not, label %._crit_edge198, label %.lr.ph197, !llvm.loop !26

._crit_edge198:                                   ; preds = %124, %107
  %indvars.iv.next236 = add nuw nsw i64 %indvars.iv235, 1
  %exitcond239.not = icmp eq i64 %indvars.iv.next236, %wide.trip.count238
  br i1 %exitcond239.not, label %.loopexit, label %97, !llvm.loop !27

125:                                              ; preds = %.lr.ph194, %._crit_edge192
  %indvars.iv225 = phi i64 [ 0, %.lr.ph194 ], [ %indvars.iv.next226, %._crit_edge192 ]
  %126 = getelementptr inbounds i32, ptr %10, i64 %indvars.iv225
  %127 = load i32, ptr %126, align 4, !tbaa !18
  br i1 %.not166, label %131, label %128

128:                                              ; preds = %125
  %129 = getelementptr inbounds i8, ptr %126, i64 4
  %130 = load i32, ptr %129, align 4, !tbaa !18
  br label %135

131:                                              ; preds = %125
  %132 = getelementptr inbounds i32, ptr %16, i64 %indvars.iv225
  %133 = load i32, ptr %132, align 4, !tbaa !18
  %134 = add nsw i32 %133, %127
  br label %135

135:                                              ; preds = %131, %128
  %136 = phi i32 [ %130, %128 ], [ %134, %131 ]
  %137 = icmp slt i32 %127, %136
  br i1 %137, label %.lr.ph191.preheader, label %._crit_edge192

.lr.ph191.preheader:                              ; preds = %135
  %138 = sext i32 %127 to i64
  %wide.trip.count223 = sext i32 %136 to i64
  %139 = trunc nuw nsw i64 %indvars.iv225 to i32
  br label %.lr.ph191

.lr.ph191:                                        ; preds = %.lr.ph191.preheader, %152
  %indvars.iv220 = phi i64 [ %138, %.lr.ph191.preheader ], [ %indvars.iv.next221, %152 ]
  %140 = getelementptr inbounds i32, ptr %12, i64 %indvars.iv220
  %141 = load i32, ptr %140, align 4, !tbaa !18
  %142 = sext i32 %141 to i64
  %.not167 = icmp sgt i64 %indvars.iv225, %142
  br i1 %.not167, label %152, label %143

143:                                              ; preds = %.lr.ph191
  %144 = getelementptr inbounds i32, ptr %3, i64 %142
  %145 = load i32, ptr %144, align 4, !tbaa !18
  %146 = add nsw i32 %145, 1
  store i32 %146, ptr %144, align 4, !tbaa !18
  %147 = sext i32 %145 to i64
  %148 = getelementptr inbounds i32, ptr %23, i64 %147
  store i32 %139, ptr %148, align 4, !tbaa !18
  %149 = getelementptr inbounds double, ptr %14, i64 %indvars.iv220
  %150 = load double, ptr %149, align 8, !tbaa !19
  %151 = getelementptr inbounds double, ptr %25, i64 %147
  store double %150, ptr %151, align 8, !tbaa !19
  br label %152

152:                                              ; preds = %.lr.ph191, %143
  %indvars.iv.next221 = add nsw i64 %indvars.iv220, 1
  %exitcond224.not = icmp eq i64 %indvars.iv.next221, %wide.trip.count223
  br i1 %exitcond224.not, label %._crit_edge192, label %.lr.ph191, !llvm.loop !28

._crit_edge192:                                   ; preds = %152, %135
  %indvars.iv.next226 = add nuw nsw i64 %indvars.iv225, 1
  %exitcond229.not = icmp eq i64 %indvars.iv.next226, %wide.trip.count228
  br i1 %exitcond229.not, label %.loopexit, label %125, !llvm.loop !29

.loopexit:                                        ; preds = %._crit_edge, %._crit_edge186, %._crit_edge192, %._crit_edge198, %.preheader178, %.preheader176, %.preheader174, %.preheader
  ret i32 1
}

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i64 @llvm.smax.i64(i64, i64) #1

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

attributes #0 = { mustprogress nofree norecurse nosync nounwind memory(readwrite, inaccessiblemem: none) 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 speculatable willreturn memory(none) }

!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, !7, i64 0}
!6 = !{!"_ZTSN5nasoq12sympiler_CSCE", !7, i64 0, !7, i64 8, !7, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !11, i64 64, !11, i64 68, !11, i64 72, !11, i64 76, !11, i64 80, !11, i64 84}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"int", !8, i64 0}
!12 = !{!6, !10, i64 24}
!13 = !{!6, !10, i64 32}
!14 = !{!6, !10, i64 48}
!15 = !{!6, !10, i64 40}
!16 = !{!6, !11, i64 84}
!17 = !{!6, !11, i64 64}
!18 = !{!11, !11, i64 0}
!19 = !{!20, !20, i64 0}
!20 = !{!"double", !8, i64 0}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.mustprogress"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !22}
!25 = distinct !{!25, !22}
!26 = distinct !{!26, !22}
!27 = distinct !{!27, !22}
!28 = distinct !{!28, !22}
!29 = distinct !{!29, !22}


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass