; LLVM IR from OpenFAST/openfast :: modules/map/src (mapinit)

; 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.OuterSolveAttributes_t = type { i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, ptr, double, double, double, double, double, double, i8, i8, i8, i32, i32, i32 }

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

declare void @set_universal_error(ptr noundef, ptr noundef, i32 noundef) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @allocate_outer_solve_data(ptr noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3) #3 {
  %5 = alloca i32, align 4
  %6 = alloca ptr, align 8
  %7 = alloca i32, align 4
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  store ptr %0, ptr %6, align 8, !tbaa !5
  store i32 %1, ptr %7, align 4, !tbaa !9
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #4
  store i32 0, ptr %10, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #4
  store i32 0, ptr %11, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #4
  store i32 3, ptr %12, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #4
  %16 = load ptr, ptr %6, align 8, !tbaa !5
  %17 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %16, i32 0, i32 22
  %18 = load i32, ptr %17, align 4, !tbaa !11
  %19 = add nsw i32 %18, 1
  store i32 %19, ptr %13, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #4
  %20 = load i32, ptr %7, align 4, !tbaa !9
  %21 = mul nsw i32 3, %20
  store i32 %21, ptr %14, align 4, !tbaa !9
  %22 = load i32, ptr %14, align 4, !tbaa !9
  %23 = sext i32 %22 to i64
  %24 = mul i64 %23, 8
  %25 = call noalias ptr @malloc(i64 noundef %24) #5
  %26 = load ptr, ptr %6, align 8, !tbaa !5
  %27 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %26, i32 0, i32 4
  store ptr %25, ptr %27, align 8, !tbaa !15
  %28 = load i32, ptr %14, align 4, !tbaa !9
  %29 = sext i32 %28 to i64
  %30 = mul i64 %29, 8
  %31 = call noalias ptr @malloc(i64 noundef %30) #5
  %32 = load ptr, ptr %6, align 8, !tbaa !5
  %33 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %32, i32 0, i32 5
  store ptr %31, ptr %33, align 8, !tbaa !16
  %34 = load i32, ptr %14, align 4, !tbaa !9
  %35 = sext i32 %34 to i64
  %36 = mul i64 %35, 8
  %37 = call noalias ptr @malloc(i64 noundef %36) #5
  %38 = load ptr, ptr %6, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %38, i32 0, i32 6
  store ptr %37, ptr %39, align 8, !tbaa !17
  %40 = load i32, ptr %14, align 4, !tbaa !9
  %41 = sext i32 %40 to i64
  %42 = mul i64 %41, 8
  %43 = call noalias ptr @malloc(i64 noundef %42) #5
  %44 = load ptr, ptr %6, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %44, i32 0, i32 11
  store ptr %43, ptr %45, align 8, !tbaa !18
  %46 = load i32, ptr %14, align 4, !tbaa !9
  %47 = sext i32 %46 to i64
  %48 = mul i64 %47, 8
  %49 = call noalias ptr @malloc(i64 noundef %48) #5
  %50 = load ptr, ptr %6, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %50, i32 0, i32 7
  store ptr %49, ptr %51, align 8, !tbaa !19
  %52 = load i32, ptr %14, align 4, !tbaa !9
  %53 = sext i32 %52 to i64
  %54 = mul i64 %53, 8
  %55 = call noalias ptr @malloc(i64 noundef %54) #5
  %56 = load ptr, ptr %6, align 8, !tbaa !5
  %57 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %56, i32 0, i32 12
  store ptr %55, ptr %57, align 8, !tbaa !20
  %58 = load ptr, ptr %6, align 8, !tbaa !5
  %59 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %58, i32 0, i32 4
  %60 = load ptr, ptr %59, align 8, !tbaa !15
  %61 = icmp eq ptr %60, null
  br i1 %61, label %62, label %65

62:                                               ; preds = %4
  %63 = load ptr, ptr %8, align 8, !tbaa !5
  %64 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %63, ptr noundef %64, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

65:                                               ; preds = %4
  %66 = load ptr, ptr %6, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %66, i32 0, i32 11
  %68 = load ptr, ptr %67, align 8, !tbaa !18
  %69 = icmp eq ptr %68, null
  br i1 %69, label %70, label %73

70:                                               ; preds = %65
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %71, ptr noundef %72, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

73:                                               ; preds = %65
  %74 = load ptr, ptr %6, align 8, !tbaa !5
  %75 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %74, i32 0, i32 7
  %76 = load ptr, ptr %75, align 8, !tbaa !19
  %77 = icmp eq ptr %76, null
  br i1 %77, label %78, label %81

78:                                               ; preds = %73
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %79, ptr noundef %80, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

81:                                               ; preds = %73
  %82 = load ptr, ptr %6, align 8, !tbaa !5
  %83 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %82, i32 0, i32 5
  %84 = load ptr, ptr %83, align 8, !tbaa !16
  %85 = icmp eq ptr %84, null
  br i1 %85, label %86, label %89

86:                                               ; preds = %81
  %87 = load ptr, ptr %8, align 8, !tbaa !5
  %88 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %87, ptr noundef %88, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

89:                                               ; preds = %81
  %90 = load ptr, ptr %6, align 8, !tbaa !5
  %91 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %90, i32 0, i32 6
  %92 = load ptr, ptr %91, align 8, !tbaa !17
  %93 = icmp eq ptr %92, null
  br i1 %93, label %94, label %97

94:                                               ; preds = %89
  %95 = load ptr, ptr %8, align 8, !tbaa !5
  %96 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %95, ptr noundef %96, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

97:                                               ; preds = %89
  %98 = load ptr, ptr %6, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %98, i32 0, i32 12
  %100 = load ptr, ptr %99, align 8, !tbaa !20
  %101 = icmp eq ptr %100, null
  br i1 %101, label %102, label %105

102:                                              ; preds = %97
  %103 = load ptr, ptr %8, align 8, !tbaa !5
  %104 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %103, ptr noundef %104, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

105:                                              ; preds = %97
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %106

106:                                              ; preds = %234, %105
  %107 = load i32, ptr %10, align 4, !tbaa !9
  %108 = load i32, ptr %14, align 4, !tbaa !9
  %109 = icmp slt i32 %107, %108
  br i1 %109, label %110, label %237

110:                                              ; preds = %106
  %111 = load i32, ptr %14, align 4, !tbaa !9
  %112 = sext i32 %111 to i64
  %113 = mul i64 %112, 8
  %114 = call noalias ptr @malloc(i64 noundef %113) #5
  %115 = load ptr, ptr %6, align 8, !tbaa !5
  %116 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %115, i32 0, i32 4
  %117 = load ptr, ptr %116, align 8, !tbaa !15
  %118 = load i32, ptr %10, align 4, !tbaa !9
  %119 = sext i32 %118 to i64
  %120 = getelementptr inbounds ptr, ptr %117, i64 %119
  store ptr %114, ptr %120, align 8, !tbaa !5
  %121 = load i32, ptr %14, align 4, !tbaa !9
  %122 = sext i32 %121 to i64
  %123 = mul i64 %122, 8
  %124 = call noalias ptr @malloc(i64 noundef %123) #5
  %125 = load ptr, ptr %6, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %125, i32 0, i32 5
  %127 = load ptr, ptr %126, align 8, !tbaa !16
  %128 = load i32, ptr %10, align 4, !tbaa !9
  %129 = sext i32 %128 to i64
  %130 = getelementptr inbounds ptr, ptr %127, i64 %129
  store ptr %124, ptr %130, align 8, !tbaa !5
  %131 = load i32, ptr %14, align 4, !tbaa !9
  %132 = sext i32 %131 to i64
  %133 = mul i64 %132, 8
  %134 = call noalias ptr @malloc(i64 noundef %133) #5
  %135 = load ptr, ptr %6, align 8, !tbaa !5
  %136 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %135, i32 0, i32 6
  %137 = load ptr, ptr %136, align 8, !tbaa !17
  %138 = load i32, ptr %10, align 4, !tbaa !9
  %139 = sext i32 %138 to i64
  %140 = getelementptr inbounds ptr, ptr %137, i64 %139
  store ptr %134, ptr %140, align 8, !tbaa !5
  %141 = load ptr, ptr %6, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %141, i32 0, i32 11
  %143 = load ptr, ptr %142, align 8, !tbaa !18
  %144 = load i32, ptr %10, align 4, !tbaa !9
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds double, ptr %143, i64 %145
  store double 0xC08F3F3333333333, ptr %146, align 8, !tbaa !21
  %147 = load ptr, ptr %6, align 8, !tbaa !5
  %148 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %147, i32 0, i32 7
  %149 = load ptr, ptr %148, align 8, !tbaa !19
  %150 = load i32, ptr %10, align 4, !tbaa !9
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds double, ptr %149, i64 %151
  store double 0xC08F3F3333333333, ptr %152, align 8, !tbaa !21
  %153 = load ptr, ptr %6, align 8, !tbaa !5
  %154 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %153, i32 0, i32 12
  %155 = load ptr, ptr %154, align 8, !tbaa !20
  %156 = load i32, ptr %10, align 4, !tbaa !9
  %157 = sext i32 %156 to i64
  %158 = getelementptr inbounds double, ptr %155, i64 %157
  store double 0xC08F3F3333333333, ptr %158, align 8, !tbaa !21
  %159 = load ptr, ptr %6, align 8, !tbaa !5
  %160 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %159, i32 0, i32 4
  %161 = load ptr, ptr %160, align 8, !tbaa !15
  %162 = load i32, ptr %10, align 4, !tbaa !9
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds ptr, ptr %161, i64 %163
  %165 = load ptr, ptr %164, align 8, !tbaa !5
  %166 = icmp eq ptr %165, null
  br i1 %166, label %167, label %170

167:                                              ; preds = %110
  %168 = load ptr, ptr %8, align 8, !tbaa !5
  %169 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %168, ptr noundef %169, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

170:                                              ; preds = %110
  %171 = load ptr, ptr %6, align 8, !tbaa !5
  %172 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %171, i32 0, i32 5
  %173 = load ptr, ptr %172, align 8, !tbaa !16
  %174 = load i32, ptr %10, align 4, !tbaa !9
  %175 = sext i32 %174 to i64
  %176 = getelementptr inbounds ptr, ptr %173, i64 %175
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  %178 = icmp eq ptr %177, null
  br i1 %178, label %179, label %182

179:                                              ; preds = %170
  %180 = load ptr, ptr %8, align 8, !tbaa !5
  %181 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %180, ptr noundef %181, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

182:                                              ; preds = %170
  %183 = load ptr, ptr %6, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %183, i32 0, i32 6
  %185 = load ptr, ptr %184, align 8, !tbaa !17
  %186 = load i32, ptr %10, align 4, !tbaa !9
  %187 = sext i32 %186 to i64
  %188 = getelementptr inbounds ptr, ptr %185, i64 %187
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = icmp eq ptr %189, null
  br i1 %190, label %191, label %194

191:                                              ; preds = %182
  %192 = load ptr, ptr %8, align 8, !tbaa !5
  %193 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %192, ptr noundef %193, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

194:                                              ; preds = %182
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %195

195:                                              ; preds = %230, %194
  %196 = load i32, ptr %11, align 4, !tbaa !9
  %197 = load i32, ptr %14, align 4, !tbaa !9
  %198 = icmp slt i32 %196, %197
  br i1 %198, label %199, label %233

199:                                              ; preds = %195
  %200 = load ptr, ptr %6, align 8, !tbaa !5
  %201 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %200, i32 0, i32 4
  %202 = load ptr, ptr %201, align 8, !tbaa !15
  %203 = load i32, ptr %10, align 4, !tbaa !9
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds ptr, ptr %202, i64 %204
  %206 = load ptr, ptr %205, align 8, !tbaa !5
  %207 = load i32, ptr %11, align 4, !tbaa !9
  %208 = sext i32 %207 to i64
  %209 = getelementptr inbounds double, ptr %206, i64 %208
  store double 0xC08F3F3333333333, ptr %209, align 8, !tbaa !21
  %210 = load ptr, ptr %6, align 8, !tbaa !5
  %211 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %210, i32 0, i32 5
  %212 = load ptr, ptr %211, align 8, !tbaa !16
  %213 = load i32, ptr %10, align 4, !tbaa !9
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds ptr, ptr %212, i64 %214
  %216 = load ptr, ptr %215, align 8, !tbaa !5
  %217 = load i32, ptr %11, align 4, !tbaa !9
  %218 = sext i32 %217 to i64
  %219 = getelementptr inbounds double, ptr %216, i64 %218
  store double 0xC08F3F3333333333, ptr %219, align 8, !tbaa !21
  %220 = load ptr, ptr %6, align 8, !tbaa !5
  %221 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %220, i32 0, i32 6
  %222 = load ptr, ptr %221, align 8, !tbaa !17
  %223 = load i32, ptr %10, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds ptr, ptr %222, i64 %224
  %226 = load ptr, ptr %225, align 8, !tbaa !5
  %227 = load i32, ptr %11, align 4, !tbaa !9
  %228 = sext i32 %227 to i64
  %229 = getelementptr inbounds double, ptr %226, i64 %228
  store double 0xC08F3F3333333333, ptr %229, align 8, !tbaa !21
  br label %230

230:                                              ; preds = %199
  %231 = load i32, ptr %11, align 4, !tbaa !9
  %232 = add nsw i32 %231, 1
  store i32 %232, ptr %11, align 4, !tbaa !9
  br label %195, !llvm.loop !22

233:                                              ; preds = %195
  br label %234

234:                                              ; preds = %233
  %235 = load i32, ptr %10, align 4, !tbaa !9
  %236 = add nsw i32 %235, 1
  store i32 %236, ptr %10, align 4, !tbaa !9
  br label %106, !llvm.loop !24

237:                                              ; preds = %106
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %238, i32 0, i32 20
  %240 = load i8, ptr %239, align 1, !tbaa !25, !range !26, !noundef !27
  %241 = trunc i8 %240 to i1
  br i1 %241, label %242, label %421

242:                                              ; preds = %237
  %243 = load i32, ptr %14, align 4, !tbaa !9
  %244 = sext i32 %243 to i64
  %245 = mul i64 %244, 8
  %246 = call noalias ptr @malloc(i64 noundef %245) #5
  %247 = load ptr, ptr %6, align 8, !tbaa !5
  %248 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %247, i32 0, i32 1
  store ptr %246, ptr %248, align 8, !tbaa !28
  %249 = load i32, ptr %14, align 4, !tbaa !9
  %250 = sext i32 %249 to i64
  %251 = mul i64 %250, 8
  %252 = call noalias ptr @malloc(i64 noundef %251) #5
  %253 = load ptr, ptr %6, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %253, i32 0, i32 2
  store ptr %252, ptr %254, align 8, !tbaa !29
  %255 = load i32, ptr %14, align 4, !tbaa !9
  %256 = load i32, ptr %13, align 4, !tbaa !9
  %257 = mul nsw i32 %255, %256
  %258 = sext i32 %257 to i64
  %259 = mul i64 %258, 8
  %260 = call noalias ptr @malloc(i64 noundef %259) #5
  %261 = load ptr, ptr %6, align 8, !tbaa !5
  %262 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %261, i32 0, i32 3
  store ptr %260, ptr %262, align 8, !tbaa !30
  %263 = load i32, ptr %14, align 4, !tbaa !9
  %264 = sext i32 %263 to i64
  %265 = mul i64 %264, 8
  %266 = call noalias ptr @malloc(i64 noundef %265) #5
  %267 = load ptr, ptr %6, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %267, i32 0, i32 8
  store ptr %266, ptr %268, align 8, !tbaa !31
  %269 = load i32, ptr %14, align 4, !tbaa !9
  %270 = sext i32 %269 to i64
  %271 = mul i64 %270, 8
  %272 = call noalias ptr @malloc(i64 noundef %271) #5
  %273 = load ptr, ptr %6, align 8, !tbaa !5
  %274 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %273, i32 0, i32 10
  store ptr %272, ptr %274, align 8, !tbaa !32
  %275 = load i32, ptr %14, align 4, !tbaa !9
  %276 = sext i32 %275 to i64
  %277 = mul i64 %276, 8
  %278 = call noalias ptr @malloc(i64 noundef %277) #5
  %279 = load ptr, ptr %6, align 8, !tbaa !5
  %280 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %279, i32 0, i32 9
  store ptr %278, ptr %280, align 8, !tbaa !33
  %281 = load ptr, ptr %6, align 8, !tbaa !5
  %282 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %281, i32 0, i32 1
  %283 = load ptr, ptr %282, align 8, !tbaa !28
  %284 = icmp eq ptr %283, null
  br i1 %284, label %285, label %288

285:                                              ; preds = %242
  %286 = load ptr, ptr %8, align 8, !tbaa !5
  %287 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %286, ptr noundef %287, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

288:                                              ; preds = %242
  %289 = load ptr, ptr %6, align 8, !tbaa !5
  %290 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %289, i32 0, i32 2
  %291 = load ptr, ptr %290, align 8, !tbaa !29
  %292 = icmp eq ptr %291, null
  br i1 %292, label %293, label %296

293:                                              ; preds = %288
  %294 = load ptr, ptr %8, align 8, !tbaa !5
  %295 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %294, ptr noundef %295, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

296:                                              ; preds = %288
  %297 = load ptr, ptr %6, align 8, !tbaa !5
  %298 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %297, i32 0, i32 8
  %299 = load ptr, ptr %298, align 8, !tbaa !31
  %300 = icmp eq ptr %299, null
  br i1 %300, label %301, label %304

301:                                              ; preds = %296
  %302 = load ptr, ptr %8, align 8, !tbaa !5
  %303 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %302, ptr noundef %303, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

304:                                              ; preds = %296
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %305, i32 0, i32 10
  %307 = load ptr, ptr %306, align 8, !tbaa !32
  %308 = icmp eq ptr %307, null
  br i1 %308, label %309, label %312

309:                                              ; preds = %304
  %310 = load ptr, ptr %8, align 8, !tbaa !5
  %311 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %310, ptr noundef %311, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

312:                                              ; preds = %304
  %313 = load ptr, ptr %6, align 8, !tbaa !5
  %314 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %313, i32 0, i32 9
  %315 = load ptr, ptr %314, align 8, !tbaa !33
  %316 = icmp eq ptr %315, null
  br i1 %316, label %317, label %320

317:                                              ; preds = %312
  %318 = load ptr, ptr %8, align 8, !tbaa !5
  %319 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %318, ptr noundef %319, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

320:                                              ; preds = %312
  store i32 0, ptr %10, align 4, !tbaa !9
  br label %321

321:                                              ; preds = %417, %320
  %322 = load i32, ptr %10, align 4, !tbaa !9
  %323 = load i32, ptr %14, align 4, !tbaa !9
  %324 = icmp slt i32 %322, %323
  br i1 %324, label %325, label %420

325:                                              ; preds = %321
  %326 = load i32, ptr %13, align 4, !tbaa !9
  %327 = sext i32 %326 to i64
  %328 = mul i64 %327, 8
  %329 = call noalias ptr @malloc(i64 noundef %328) #5
  %330 = load ptr, ptr %6, align 8, !tbaa !5
  %331 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %330, i32 0, i32 1
  %332 = load ptr, ptr %331, align 8, !tbaa !28
  %333 = load i32, ptr %10, align 4, !tbaa !9
  %334 = sext i32 %333 to i64
  %335 = getelementptr inbounds ptr, ptr %332, i64 %334
  store ptr %329, ptr %335, align 8, !tbaa !5
  %336 = load i32, ptr %13, align 4, !tbaa !9
  %337 = sext i32 %336 to i64
  %338 = mul i64 %337, 8
  %339 = call noalias ptr @malloc(i64 noundef %338) #5
  %340 = load ptr, ptr %6, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %340, i32 0, i32 2
  %342 = load ptr, ptr %341, align 8, !tbaa !29
  %343 = load i32, ptr %10, align 4, !tbaa !9
  %344 = sext i32 %343 to i64
  %345 = getelementptr inbounds ptr, ptr %342, i64 %344
  store ptr %339, ptr %345, align 8, !tbaa !5
  %346 = load ptr, ptr %6, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %346, i32 0, i32 1
  %348 = load ptr, ptr %347, align 8, !tbaa !28
  %349 = load i32, ptr %10, align 4, !tbaa !9
  %350 = sext i32 %349 to i64
  %351 = getelementptr inbounds ptr, ptr %348, i64 %350
  %352 = load ptr, ptr %351, align 8, !tbaa !5
  %353 = icmp eq ptr %352, null
  br i1 %353, label %354, label %357

354:                                              ; preds = %325
  %355 = load ptr, ptr %8, align 8, !tbaa !5
  %356 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %355, ptr noundef %356, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

357:                                              ; preds = %325
  %358 = load ptr, ptr %6, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %358, i32 0, i32 2
  %360 = load ptr, ptr %359, align 8, !tbaa !29
  %361 = load i32, ptr %10, align 4, !tbaa !9
  %362 = sext i32 %361 to i64
  %363 = getelementptr inbounds ptr, ptr %360, i64 %362
  %364 = load ptr, ptr %363, align 8, !tbaa !5
  %365 = icmp eq ptr %364, null
  br i1 %365, label %366, label %369

366:                                              ; preds = %357
  %367 = load ptr, ptr %8, align 8, !tbaa !5
  %368 = load ptr, ptr %9, align 8, !tbaa !5
  call void @set_universal_error(ptr noundef %367, ptr noundef %368, i32 noundef 8)
  store i32 3, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

369:                                              ; preds = %357
  %370 = load ptr, ptr %6, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %370, i32 0, i32 8
  %372 = load ptr, ptr %371, align 8, !tbaa !31
  %373 = load i32, ptr %10, align 4, !tbaa !9
  %374 = sext i32 %373 to i64
  %375 = getelementptr inbounds double, ptr %372, i64 %374
  store double 0xC08F3F3333333333, ptr %375, align 8, !tbaa !21
  %376 = load ptr, ptr %6, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %376, i32 0, i32 10
  %378 = load ptr, ptr %377, align 8, !tbaa !32
  %379 = load i32, ptr %10, align 4, !tbaa !9
  %380 = sext i32 %379 to i64
  %381 = getelementptr inbounds double, ptr %378, i64 %380
  store double 0xC08F3F3333333333, ptr %381, align 8, !tbaa !21
  %382 = load ptr, ptr %6, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %382, i32 0, i32 9
  %384 = load ptr, ptr %383, align 8, !tbaa !33
  %385 = load i32, ptr %10, align 4, !tbaa !9
  %386 = sext i32 %385 to i64
  %387 = getelementptr inbounds double, ptr %384, i64 %386
  store double 0xC08F3F3333333333, ptr %387, align 8, !tbaa !21
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %388

388:                                              ; preds = %413, %369
  %389 = load i32, ptr %11, align 4, !tbaa !9
  %390 = load i32, ptr %13, align 4, !tbaa !9
  %391 = icmp slt i32 %389, %390
  br i1 %391, label %392, label %416

392:                                              ; preds = %388
  %393 = load ptr, ptr %6, align 8, !tbaa !5
  %394 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %393, i32 0, i32 1
  %395 = load ptr, ptr %394, align 8, !tbaa !28
  %396 = load i32, ptr %10, align 4, !tbaa !9
  %397 = sext i32 %396 to i64
  %398 = getelementptr inbounds ptr, ptr %395, i64 %397
  %399 = load ptr, ptr %398, align 8, !tbaa !5
  %400 = load i32, ptr %11, align 4, !tbaa !9
  %401 = sext i32 %400 to i64
  %402 = getelementptr inbounds double, ptr %399, i64 %401
  store double 0xC08F3F3333333333, ptr %402, align 8, !tbaa !21
  %403 = load ptr, ptr %6, align 8, !tbaa !5
  %404 = getelementptr inbounds %struct.OuterSolveAttributes_t, ptr %403, i32 0, i32 2
  %405 = load ptr, ptr %404, align 8, !tbaa !29
  %406 = load i32, ptr %10, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds ptr, ptr %405, i64 %407
  %409 = load ptr, ptr %408, align 8, !tbaa !5
  %410 = load i32, ptr %11, align 4, !tbaa !9
  %411 = sext i32 %410 to i64
  %412 = getelementptr inbounds double, ptr %409, i64 %411
  store double 0xC08F3F3333333333, ptr %412, align 8, !tbaa !21
  br label %413

413:                                              ; preds = %392
  %414 = load i32, ptr %11, align 4, !tbaa !9
  %415 = add nsw i32 %414, 1
  store i32 %415, ptr %11, align 4, !tbaa !9
  br label %388, !llvm.loop !34

416:                                              ; preds = %388
  br label %417

417:                                              ; preds = %416
  %418 = load i32, ptr %10, align 4, !tbaa !9
  %419 = add nsw i32 %418, 1
  store i32 %419, ptr %10, align 4, !tbaa !9
  br label %321, !llvm.loop !35

420:                                              ; preds = %321
  br label %421

421:                                              ; preds = %420, %237
  store i32 0, ptr %5, align 4
  store i32 1, ptr %15, align 4
  br label %422

422:                                              ; preds = %421, %366, %354, %317, %309, %301, %293, %285, %191, %179, %167, %102, %94, %86, %78, %70, %62
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #4
  %423 = load i32, ptr %5, align 4
  ret i32 %423
}

attributes #0 = { nounwind 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 #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #3 = { 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 #4 = { nounwind }
attributes #5 = { nounwind allocsize(0) }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !10, i64 156}
!12 = !{!"OuterSolveAttributes_t", !10, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !14, i64 152, !14, i64 153, !14, i64 154, !10, i64 156, !10, i64 160, !10, i64 164}
!13 = !{!"double", !7, i64 0}
!14 = !{!"_Bool", !7, i64 0}
!15 = !{!12, !6, i64 32}
!16 = !{!12, !6, i64 40}
!17 = !{!12, !6, i64 48}
!18 = !{!12, !6, i64 88}
!19 = !{!12, !6, i64 56}
!20 = !{!12, !6, i64 96}
!21 = !{!13, !13, i64 0}
!22 = distinct !{!22, !23}
!23 = !{!"llvm.loop.mustprogress"}
!24 = distinct !{!24, !23}
!25 = !{!12, !14, i64 153}
!26 = !{i8 0, i8 2}
!27 = !{}
!28 = !{!12, !6, i64 8}
!29 = !{!12, !6, i64 16}
!30 = !{!12, !6, i64 24}
!31 = !{!12, !6, i64 64}
!32 = !{!12, !6, i64 80}
!33 = !{!12, !6, i64 72}
!34 = distinct !{!34, !23}
!35 = distinct !{!35, !23}


; 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 nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite)
declare noalias noundef ptr @malloc(i64 noundef) local_unnamed_addr #0

declare void @set_universal_error(ptr noundef, ptr noundef, i32 noundef) local_unnamed_addr #1

; Function Attrs: nounwind uwtable
define dso_local range(i32 0, 4) i32 @allocate_outer_solve_data(ptr nocapture noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3) local_unnamed_addr #2 {
  %5 = getelementptr inbounds i8, ptr %0, i64 156
  %6 = load i32, ptr %5, align 4, !tbaa !5
  %.fr = freeze i32 %6
  %7 = add i32 %.fr, 1
  %8 = mul nsw i32 %1, 3
  %9 = sext i32 %8 to i64
  %10 = shl nsw i64 %9, 3
  %11 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %12 = getelementptr inbounds i8, ptr %0, i64 32
  store ptr %11, ptr %12, align 8, !tbaa !13
  %13 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %14 = getelementptr inbounds i8, ptr %0, i64 40
  store ptr %13, ptr %14, align 8, !tbaa !14
  %15 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %16 = getelementptr inbounds i8, ptr %0, i64 48
  store ptr %15, ptr %16, align 8, !tbaa !15
  %17 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %18 = getelementptr inbounds i8, ptr %0, i64 88
  store ptr %17, ptr %18, align 8, !tbaa !16
  %19 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %20 = getelementptr inbounds i8, ptr %0, i64 56
  store ptr %19, ptr %20, align 8, !tbaa !17
  %21 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %22 = getelementptr inbounds i8, ptr %0, i64 96
  store ptr %21, ptr %22, align 8, !tbaa !18
  %23 = insertelement <4 x ptr> poison, ptr %11, i64 0
  %24 = insertelement <4 x ptr> %23, ptr %17, i64 1
  %25 = insertelement <4 x ptr> %24, ptr %19, i64 2
  %26 = insertelement <4 x ptr> %25, ptr %13, i64 3
  %27 = icmp eq <4 x ptr> %26, zeroinitializer
  %28 = icmp eq ptr %15, null
  %29 = icmp eq ptr %21, null
  %30 = bitcast <4 x i1> %27 to i4
  %31 = icmp ne i4 %30, 0
  %op.rdx219 = or i1 %31, %28
  %op.rdx220 = or i1 %op.rdx219, %29
  br i1 %op.rdx220, label %.loopexit.sink.split, label %.preheader141

.preheader141:                                    ; preds = %4
  %32 = icmp sgt i32 %1, 0
  br i1 %32, label %.lr.ph144.split.us.preheader, label %._crit_edge145

.lr.ph144.split.us.preheader:                     ; preds = %.preheader141
  %smax = tail call i32 @llvm.smax.i32(i32 %8, i32 1)
  %wide.trip.count169 = zext nneg i32 %smax to i64
  %min.iters.check = icmp eq i32 %1, 1
  %n.vec = and i64 %wide.trip.count169, 2147483644
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count169
  %xtraiter = and i64 %wide.trip.count169, 1
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %33 = add nsw i64 %wide.trip.count169, -1
  br label %.lr.ph144.split.us

.lr.ph144.split.us:                               ; preds = %.lr.ph144.split.us.preheader, %._crit_edge.us
  %34 = phi ptr [ %11, %.lr.ph144.split.us.preheader ], [ %49, %._crit_edge.us ]
  %indvars.iv166 = phi i64 [ 0, %.lr.ph144.split.us.preheader ], [ %indvars.iv.next167, %._crit_edge.us ]
  %35 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %36 = getelementptr inbounds ptr, ptr %34, i64 %indvars.iv166
  store ptr %35, ptr %36, align 8, !tbaa !19
  %37 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %38 = load ptr, ptr %14, align 8, !tbaa !14
  %39 = getelementptr inbounds ptr, ptr %38, i64 %indvars.iv166
  store ptr %37, ptr %39, align 8, !tbaa !19
  %40 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %41 = load ptr, ptr %16, align 8, !tbaa !15
  %42 = getelementptr inbounds ptr, ptr %41, i64 %indvars.iv166
  store ptr %40, ptr %42, align 8, !tbaa !19
  %43 = load ptr, ptr %18, align 8, !tbaa !16
  %44 = getelementptr inbounds double, ptr %43, i64 %indvars.iv166
  store double 0xC08F3F3333333333, ptr %44, align 8, !tbaa !20
  %45 = load ptr, ptr %20, align 8, !tbaa !17
  %46 = getelementptr inbounds double, ptr %45, i64 %indvars.iv166
  store double 0xC08F3F3333333333, ptr %46, align 8, !tbaa !20
  %47 = load ptr, ptr %22, align 8, !tbaa !18
  %48 = getelementptr inbounds double, ptr %47, i64 %indvars.iv166
  store double 0xC08F3F3333333333, ptr %48, align 8, !tbaa !20
  %49 = load ptr, ptr %12, align 8, !tbaa !13
  %50 = getelementptr inbounds ptr, ptr %49, i64 %indvars.iv166
  %51 = load ptr, ptr %50, align 8, !tbaa !19
  %52 = ptrtoint ptr %51 to i64
  %53 = icmp eq ptr %51, null
  br i1 %53, label %.loopexit.sink.split, label %54

54:                                               ; preds = %.lr.ph144.split.us
  %55 = load ptr, ptr %14, align 8, !tbaa !14
  %56 = getelementptr inbounds ptr, ptr %55, i64 %indvars.iv166
  %57 = load ptr, ptr %56, align 8, !tbaa !19
  %58 = ptrtoint ptr %57 to i64
  %59 = icmp eq ptr %57, null
  br i1 %59, label %.loopexit.sink.split, label %60

60:                                               ; preds = %54
  %61 = load ptr, ptr %16, align 8, !tbaa !15
  %62 = getelementptr inbounds ptr, ptr %61, i64 %indvars.iv166
  %63 = load ptr, ptr %62, align 8, !tbaa !19
  %64 = ptrtoint ptr %63 to i64
  %65 = icmp eq ptr %63, null
  br i1 %65, label %.loopexit.sink.split, label %.preheader140.us.preheader

.preheader140.us.preheader:                       ; preds = %60
  br i1 %min.iters.check, label %.preheader140.us.preheader223, label %vector.memcheck

vector.memcheck:                                  ; preds = %.preheader140.us.preheader
  %66 = sub i64 %58, %52
  %diff.check = icmp ult i64 %66, 32
  %67 = sub i64 %64, %52
  %diff.check202 = icmp ult i64 %67, 32
  %conflict.rdx = or i1 %diff.check, %diff.check202
  %68 = sub i64 %64, %58
  %diff.check203 = icmp ult i64 %68, 32
  %conflict.rdx204 = or i1 %conflict.rdx, %diff.check203
  br i1 %conflict.rdx204, label %.preheader140.us.preheader223, label %vector.body

vector.body:                                      ; preds = %vector.memcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.memcheck ]
  %69 = getelementptr inbounds double, ptr %51, i64 %index
  %70 = getelementptr inbounds i8, ptr %69, i64 16
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %69, align 8, !tbaa !20
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %70, align 8, !tbaa !20
  %71 = getelementptr inbounds double, ptr %57, i64 %index
  %72 = getelementptr inbounds i8, ptr %71, i64 16
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %71, align 8, !tbaa !20
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %72, align 8, !tbaa !20
  %73 = getelementptr inbounds double, ptr %63, i64 %index
  %74 = getelementptr inbounds i8, ptr %73, i64 16
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %73, align 8, !tbaa !20
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %74, align 8, !tbaa !20
  %index.next = add nuw i64 %index, 4
  %75 = icmp eq i64 %index.next, %n.vec
  br i1 %75, label %middle.block, label %vector.body, !llvm.loop !21

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us, label %.preheader140.us.preheader223

.preheader140.us.preheader223:                    ; preds = %middle.block, %vector.memcheck, %.preheader140.us.preheader
  %indvars.iv.ph = phi i64 [ 0, %vector.memcheck ], [ 0, %.preheader140.us.preheader ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %.preheader140.us.prol.loopexit, label %.preheader140.us.prol

.preheader140.us.prol:                            ; preds = %.preheader140.us.preheader223
  %76 = getelementptr inbounds double, ptr %51, i64 %indvars.iv.ph
  store double 0xC08F3F3333333333, ptr %76, align 8, !tbaa !20
  %77 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.ph
  store double 0xC08F3F3333333333, ptr %77, align 8, !tbaa !20
  %78 = getelementptr inbounds double, ptr %63, i64 %indvars.iv.ph
  store double 0xC08F3F3333333333, ptr %78, align 8, !tbaa !20
  %indvars.iv.next.prol = or disjoint i64 %indvars.iv.ph, 1
  br label %.preheader140.us.prol.loopexit

.preheader140.us.prol.loopexit:                   ; preds = %.preheader140.us.prol, %.preheader140.us.preheader223
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %.preheader140.us.preheader223 ], [ %indvars.iv.next.prol, %.preheader140.us.prol ]
  %79 = icmp eq i64 %indvars.iv.ph, %33
  br i1 %79, label %._crit_edge.us, label %.preheader140.us

.preheader140.us:                                 ; preds = %.preheader140.us.prol.loopexit, %.preheader140.us
  %indvars.iv = phi i64 [ %indvars.iv.next.1, %.preheader140.us ], [ %indvars.iv.unr, %.preheader140.us.prol.loopexit ]
  %80 = getelementptr inbounds double, ptr %51, i64 %indvars.iv
  store double 0xC08F3F3333333333, ptr %80, align 8, !tbaa !20
  %81 = getelementptr inbounds double, ptr %57, i64 %indvars.iv
  store double 0xC08F3F3333333333, ptr %81, align 8, !tbaa !20
  %82 = getelementptr inbounds double, ptr %63, i64 %indvars.iv
  store double 0xC08F3F3333333333, ptr %82, align 8, !tbaa !20
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %83 = getelementptr inbounds double, ptr %51, i64 %indvars.iv.next
  store double 0xC08F3F3333333333, ptr %83, align 8, !tbaa !20
  %84 = getelementptr inbounds double, ptr %57, i64 %indvars.iv.next
  store double 0xC08F3F3333333333, ptr %84, align 8, !tbaa !20
  %85 = getelementptr inbounds double, ptr %63, i64 %indvars.iv.next
  store double 0xC08F3F3333333333, ptr %85, align 8, !tbaa !20
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %exitcond.not.1 = icmp eq i64 %indvars.iv.next.1, %wide.trip.count169
  br i1 %exitcond.not.1, label %._crit_edge.us, label %.preheader140.us, !llvm.loop !25

._crit_edge.us:                                   ; preds = %.preheader140.us.prol.loopexit, %.preheader140.us, %middle.block
  %indvars.iv.next167 = add nuw nsw i64 %indvars.iv166, 1
  %exitcond170.not = icmp eq i64 %indvars.iv.next167, %wide.trip.count169
  br i1 %exitcond170.not, label %._crit_edge145, label %.lr.ph144.split.us, !llvm.loop !26

._crit_edge145:                                   ; preds = %._crit_edge.us, %.preheader141
  %86 = getelementptr inbounds i8, ptr %0, i64 153
  %87 = load i8, ptr %86, align 1, !tbaa !27, !range !28, !noundef !29
  %88 = trunc nuw i8 %87 to i1
  br i1 %88, label %89, label %.loopexit

89:                                               ; preds = %._crit_edge145
  %90 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %91 = getelementptr inbounds i8, ptr %0, i64 8
  store ptr %90, ptr %91, align 8, !tbaa !30
  %92 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %93 = getelementptr inbounds i8, ptr %0, i64 16
  store ptr %92, ptr %93, align 8, !tbaa !31
  %94 = mul nsw i32 %7, %8
  %95 = sext i32 %94 to i64
  %96 = shl nsw i64 %95, 3
  %97 = tail call noalias ptr @malloc(i64 noundef %96) #4
  %98 = getelementptr inbounds i8, ptr %0, i64 24
  store ptr %97, ptr %98, align 8, !tbaa !32
  %99 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %100 = getelementptr inbounds i8, ptr %0, i64 64
  store ptr %99, ptr %100, align 8, !tbaa !33
  %101 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %102 = getelementptr inbounds i8, ptr %0, i64 80
  store ptr %101, ptr %102, align 8, !tbaa !34
  %103 = tail call noalias ptr @malloc(i64 noundef %10) #4
  %104 = getelementptr inbounds i8, ptr %0, i64 72
  store ptr %103, ptr %104, align 8, !tbaa !35
  %105 = insertelement <4 x ptr> poison, ptr %90, i64 0
  %106 = insertelement <4 x ptr> %105, ptr %92, i64 1
  %107 = insertelement <4 x ptr> %106, ptr %99, i64 2
  %108 = insertelement <4 x ptr> %107, ptr %101, i64 3
  %109 = icmp eq <4 x ptr> %108, zeroinitializer
  %110 = icmp eq ptr %103, null
  %111 = bitcast <4 x i1> %109 to i4
  %112 = icmp ne i4 %111, 0
  %op.rdx = or i1 %112, %110
  br i1 %op.rdx, label %.loopexit.sink.split, label %.preheader

.preheader:                                       ; preds = %89
  br i1 %32, label %.lr.ph153, label %.loopexit

.lr.ph153:                                        ; preds = %.preheader
  %113 = sext i32 %7 to i64
  %114 = shl nsw i64 %113, 3
  %.not150 = icmp slt i32 %.fr, 0
  %smax185 = tail call i32 @llvm.smax.i32(i32 %8, i32 1)
  %wide.trip.count186 = zext nneg i32 %smax185 to i64
  br i1 %.not150, label %.lr.ph153.split.us, label %.lr.ph153.split.preheader

.lr.ph153.split.preheader:                        ; preds = %.lr.ph153
  %wide.trip.count174 = zext i32 %7 to i64
  %min.iters.check209 = icmp ult i32 %7, 4
  %n.vec212 = and i64 %wide.trip.count174, 4294967292
  %cmp.n217 = icmp eq i64 %n.vec212, %wide.trip.count174
  %xtraiter225 = and i64 %wide.trip.count174, 3
  %lcmp.mod226.not = icmp eq i64 %xtraiter225, 0
  br label %.lr.ph153.split

.lr.ph153.split.us:                               ; preds = %.lr.ph153, %130
  %115 = phi ptr [ %121, %130 ], [ %90, %.lr.ph153 ]
  %indvars.iv182 = phi i64 [ %indvars.iv.next183, %130 ], [ 0, %.lr.ph153 ]
  %116 = tail call noalias ptr @malloc(i64 noundef %114) #4
  %117 = getelementptr inbounds ptr, ptr %115, i64 %indvars.iv182
  store ptr %116, ptr %117, align 8, !tbaa !19
  %118 = tail call noalias ptr @malloc(i64 noundef %114) #4
  %119 = load ptr, ptr %93, align 8, !tbaa !31
  %120 = getelementptr inbounds ptr, ptr %119, i64 %indvars.iv182
  store ptr %118, ptr %120, align 8, !tbaa !19
  %121 = load ptr, ptr %91, align 8, !tbaa !30
  %122 = getelementptr inbounds ptr, ptr %121, i64 %indvars.iv182
  %123 = load ptr, ptr %122, align 8, !tbaa !19
  %124 = icmp eq ptr %123, null
  br i1 %124, label %.loopexit.sink.split, label %125

125:                                              ; preds = %.lr.ph153.split.us
  %126 = load ptr, ptr %93, align 8, !tbaa !31
  %127 = getelementptr inbounds ptr, ptr %126, i64 %indvars.iv182
  %128 = load ptr, ptr %127, align 8, !tbaa !19
  %129 = icmp eq ptr %128, null
  br i1 %129, label %.loopexit.sink.split, label %130

130:                                              ; preds = %125
  %131 = load ptr, ptr %100, align 8, !tbaa !33
  %132 = getelementptr inbounds double, ptr %131, i64 %indvars.iv182
  store double 0xC08F3F3333333333, ptr %132, align 8, !tbaa !20
  %133 = load ptr, ptr %102, align 8, !tbaa !34
  %134 = getelementptr inbounds double, ptr %133, i64 %indvars.iv182
  store double 0xC08F3F3333333333, ptr %134, align 8, !tbaa !20
  %135 = load ptr, ptr %104, align 8, !tbaa !35
  %136 = getelementptr inbounds double, ptr %135, i64 %indvars.iv182
  store double 0xC08F3F3333333333, ptr %136, align 8, !tbaa !20
  %indvars.iv.next183 = add nuw nsw i64 %indvars.iv182, 1
  %exitcond187.not = icmp eq i64 %indvars.iv.next183, %wide.trip.count186
  br i1 %exitcond187.not, label %.loopexit, label %.lr.ph153.split.us, !llvm.loop !36

.lr.ph153.split:                                  ; preds = %.lr.ph153.split.preheader, %._crit_edge
  %137 = phi ptr [ %90, %.lr.ph153.split.preheader ], [ %143, %._crit_edge ]
  %indvars.iv176 = phi i64 [ 0, %.lr.ph153.split.preheader ], [ %indvars.iv.next177, %._crit_edge ]
  %138 = tail call noalias ptr @malloc(i64 noundef %114) #4
  %139 = getelementptr inbounds ptr, ptr %137, i64 %indvars.iv176
  store ptr %138, ptr %139, align 8, !tbaa !19
  %140 = tail call noalias ptr @malloc(i64 noundef %114) #4
  %141 = load ptr, ptr %93, align 8, !tbaa !31
  %142 = getelementptr inbounds ptr, ptr %141, i64 %indvars.iv176
  store ptr %140, ptr %142, align 8, !tbaa !19
  %143 = load ptr, ptr %91, align 8, !tbaa !30
  %144 = getelementptr inbounds ptr, ptr %143, i64 %indvars.iv176
  %145 = load ptr, ptr %144, align 8, !tbaa !19
  %146 = ptrtoint ptr %145 to i64
  %147 = icmp eq ptr %145, null
  br i1 %147, label %.loopexit.sink.split, label %148

148:                                              ; preds = %.lr.ph153.split
  %149 = load ptr, ptr %93, align 8, !tbaa !31
  %150 = getelementptr inbounds ptr, ptr %149, i64 %indvars.iv176
  %151 = load ptr, ptr %150, align 8, !tbaa !19
  %152 = icmp eq ptr %151, null
  br i1 %152, label %.loopexit.sink.split, label %.lr.ph

.lr.ph:                                           ; preds = %148
  %153 = ptrtoint ptr %151 to i64
  %154 = load ptr, ptr %100, align 8, !tbaa !33
  %155 = getelementptr inbounds double, ptr %154, i64 %indvars.iv176
  store double 0xC08F3F3333333333, ptr %155, align 8, !tbaa !20
  %156 = load ptr, ptr %102, align 8, !tbaa !34
  %157 = getelementptr inbounds double, ptr %156, i64 %indvars.iv176
  store double 0xC08F3F3333333333, ptr %157, align 8, !tbaa !20
  %158 = load ptr, ptr %104, align 8, !tbaa !35
  %159 = getelementptr inbounds double, ptr %158, i64 %indvars.iv176
  store double 0xC08F3F3333333333, ptr %159, align 8, !tbaa !20
  %160 = sub i64 %153, %146
  %diff.check206 = icmp ult i64 %160, 32
  %or.cond218 = or i1 %min.iters.check209, %diff.check206
  br i1 %or.cond218, label %scalar.ph208.preheader, label %vector.body214

vector.body214:                                   ; preds = %.lr.ph, %vector.body214
  %index215 = phi i64 [ %index.next216, %vector.body214 ], [ 0, %.lr.ph ]
  %161 = getelementptr inbounds double, ptr %145, i64 %index215
  %162 = getelementptr inbounds i8, ptr %161, i64 16
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %161, align 8, !tbaa !20
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %162, align 8, !tbaa !20
  %163 = getelementptr inbounds double, ptr %151, i64 %index215
  %164 = getelementptr inbounds i8, ptr %163, i64 16
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %163, align 8, !tbaa !20
  store <2 x double> <double 0xC08F3F3333333333, double 0xC08F3F3333333333>, ptr %164, align 8, !tbaa !20
  %index.next216 = add nuw i64 %index215, 4
  %165 = icmp eq i64 %index.next216, %n.vec212
  br i1 %165, label %middle.block207, label %vector.body214, !llvm.loop !37

middle.block207:                                  ; preds = %vector.body214
  br i1 %cmp.n217, label %._crit_edge, label %scalar.ph208.preheader

scalar.ph208.preheader:                           ; preds = %middle.block207, %.lr.ph
  %indvars.iv171.ph = phi i64 [ 0, %.lr.ph ], [ %n.vec212, %middle.block207 ]
  br i1 %lcmp.mod226.not, label %scalar.ph208.prol.loopexit, label %scalar.ph208.prol

scalar.ph208.prol:                                ; preds = %scalar.ph208.preheader, %scalar.ph208.prol
  %indvars.iv171.prol = phi i64 [ %indvars.iv.next172.prol, %scalar.ph208.prol ], [ %indvars.iv171.ph, %scalar.ph208.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph208.prol ], [ 0, %scalar.ph208.preheader ]
  %166 = getelementptr inbounds double, ptr %145, i64 %indvars.iv171.prol
  store double 0xC08F3F3333333333, ptr %166, align 8, !tbaa !20
  %167 = getelementptr inbounds double, ptr %151, i64 %indvars.iv171.prol
  store double 0xC08F3F3333333333, ptr %167, align 8, !tbaa !20
  %indvars.iv.next172.prol = add nuw nsw i64 %indvars.iv171.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter225
  br i1 %prol.iter.cmp.not, label %scalar.ph208.prol.loopexit, label %scalar.ph208.prol, !llvm.loop !38

scalar.ph208.prol.loopexit:                       ; preds = %scalar.ph208.prol, %scalar.ph208.preheader
  %indvars.iv171.unr = phi i64 [ %indvars.iv171.ph, %scalar.ph208.preheader ], [ %indvars.iv.next172.prol, %scalar.ph208.prol ]
  %168 = sub nsw i64 %indvars.iv171.ph, %wide.trip.count174
  %169 = icmp ugt i64 %168, -4
  br i1 %169, label %._crit_edge, label %scalar.ph208

scalar.ph208:                                     ; preds = %scalar.ph208.prol.loopexit, %scalar.ph208
  %indvars.iv171 = phi i64 [ %indvars.iv.next172.3, %scalar.ph208 ], [ %indvars.iv171.unr, %scalar.ph208.prol.loopexit ]
  %170 = getelementptr inbounds double, ptr %145, i64 %indvars.iv171
  store double 0xC08F3F3333333333, ptr %170, align 8, !tbaa !20
  %171 = getelementptr inbounds double, ptr %151, i64 %indvars.iv171
  store double 0xC08F3F3333333333, ptr %171, align 8, !tbaa !20
  %indvars.iv.next172 = add nuw nsw i64 %indvars.iv171, 1
  %172 = getelementptr inbounds double, ptr %145, i64 %indvars.iv.next172
  store double 0xC08F3F3333333333, ptr %172, align 8, !tbaa !20
  %173 = getelementptr inbounds double, ptr %151, i64 %indvars.iv.next172
  store double 0xC08F3F3333333333, ptr %173, align 8, !tbaa !20
  %indvars.iv.next172.1 = add nuw nsw i64 %indvars.iv171, 2
  %174 = getelementptr inbounds double, ptr %145, i64 %indvars.iv.next172.1
  store double 0xC08F3F3333333333, ptr %174, align 8, !tbaa !20
  %175 = getelementptr inbounds double, ptr %151, i64 %indvars.iv.next172.1
  store double 0xC08F3F3333333333, ptr %175, align 8, !tbaa !20
  %indvars.iv.next172.2 = add nuw nsw i64 %indvars.iv171, 3
  %176 = getelementptr inbounds double, ptr %145, i64 %indvars.iv.next172.2
  store double 0xC08F3F3333333333, ptr %176, align 8, !tbaa !20
  %177 = getelementptr inbounds double, ptr %151, i64 %indvars.iv.next172.2
  store double 0xC08F3F3333333333, ptr %177, align 8, !tbaa !20
  %indvars.iv.next172.3 = add nuw nsw i64 %indvars.iv171, 4
  %exitcond175.not.3 = icmp eq i64 %indvars.iv.next172.3, %wide.trip.count174
  br i1 %exitcond175.not.3, label %._crit_edge, label %scalar.ph208, !llvm.loop !40

._crit_edge:                                      ; preds = %scalar.ph208.prol.loopexit, %scalar.ph208, %middle.block207
  %indvars.iv.next177 = add nuw nsw i64 %indvars.iv176, 1
  %exitcond181.not = icmp eq i64 %indvars.iv.next177, %wide.trip.count186
  br i1 %exitcond181.not, label %.loopexit, label %.lr.ph153.split, !llvm.loop !36

.loopexit.sink.split:                             ; preds = %60, %54, %.lr.ph144.split.us, %148, %.lr.ph153.split, %125, %.lr.ph153.split.us, %89, %4
  tail call void @set_universal_error(ptr noundef %2, ptr noundef %3, i32 noundef 8) #5
  br label %.loopexit

.loopexit:                                        ; preds = %._crit_edge, %130, %.loopexit.sink.split, %.preheader, %._crit_edge145
  %.0 = phi i32 [ 0, %._crit_edge145 ], [ 0, %.preheader ], [ 3, %.loopexit.sink.split ], [ 0, %130 ], [ 0, %._crit_edge ]
  ret i32 %.0
}

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

attributes #0 = { mustprogress nofree nounwind willreturn allockind("alloc,uninitialized") allocsize(0) memory(inaccessiblemem: readwrite) "alloc-family"="malloc" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nounwind allocsize(0) }
attributes #5 = { 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, !7, i64 156}
!6 = !{!"OuterSolveAttributes_t", !7, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72, !10, i64 80, !10, i64 88, !10, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !12, i64 152, !12, i64 153, !12, i64 154, !7, i64 156, !7, i64 160, !7, i64 164}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!"double", !8, i64 0}
!12 = !{!"_Bool", !8, i64 0}
!13 = !{!6, !10, i64 32}
!14 = !{!6, !10, i64 40}
!15 = !{!6, !10, i64 48}
!16 = !{!6, !10, i64 88}
!17 = !{!6, !10, i64 56}
!18 = !{!6, !10, i64 96}
!19 = !{!10, !10, i64 0}
!20 = !{!11, !11, i64 0}
!21 = distinct !{!21, !22, !23, !24}
!22 = !{!"llvm.loop.mustprogress"}
!23 = !{!"llvm.loop.isvectorized", i32 1}
!24 = !{!"llvm.loop.unroll.runtime.disable"}
!25 = distinct !{!25, !22, !23}
!26 = distinct !{!26, !22}
!27 = !{!6, !12, i64 153}
!28 = !{i8 0, i8 2}
!29 = !{}
!30 = !{!6, !10, i64 8}
!31 = !{!6, !10, i64 16}
!32 = !{!6, !10, i64 24}
!33 = !{!6, !10, i64 64}
!34 = !{!6, !10, i64 80}
!35 = !{!6, !10, i64 72}
!36 = distinct !{!36, !22}
!37 = distinct !{!37, !22, !23, !24}
!38 = distinct !{!38, !39}
!39 = !{!"llvm.loop.unroll.disable"}
!40 = distinct !{!40, !22, !23}


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