; LLVM IR from introlab/odas :: src/system (mixture2mixture)

; 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.mixture_obj = type { i32, i32, i32, i32, ptr, ptr, ptr, ptr, ptr, ptr, ptr }
%struct.mixture2mixture_obj = type { ptr, ptr, float, float, float, float, float }
%struct.pots_obj = type { i32, ptr }
%struct.coherences_obj = type { i32, i32, ptr }
%struct.assignations_obj = type { i32, i32, ptr }
%struct.postprobs_obj = type { i32, i32, ptr, ptr, ptr }

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

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

; Function Attrs: nounwind uwtable
define dso_local void @mixture2mixture_process(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4) #1 {
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca float, align 4
  %17 = alloca i8, align 1
  store ptr %0, ptr %6, align 8, !tbaa !5
  store ptr %1, ptr %7, align 8, !tbaa !5
  store ptr %2, ptr %8, align 8, !tbaa !5
  store ptr %3, ptr %9, align 8, !tbaa !5
  store ptr %4, ptr %10, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %17) #3
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %18

18:                                               ; preds = %87, %5
  %19 = load i32, ptr %11, align 4, !tbaa !9
  %20 = load ptr, ptr %7, align 8, !tbaa !5
  %21 = getelementptr inbounds %struct.mixture_obj, ptr %20, i32 0, i32 0
  %22 = load i32, ptr %21, align 8, !tbaa !11
  %23 = icmp ult i32 %19, %22
  br i1 %23, label %24, label %90

24:                                               ; preds = %18
  %25 = load ptr, ptr %6, align 8, !tbaa !5
  %26 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %25, i32 0, i32 0
  %27 = load ptr, ptr %26, align 8, !tbaa !13
  %28 = load ptr, ptr %8, align 8, !tbaa !5
  %29 = getelementptr inbounds %struct.pots_obj, ptr %28, i32 0, i32 1
  %30 = load ptr, ptr %29, align 8, !tbaa !16
  %31 = load i32, ptr %11, align 4, !tbaa !9
  %32 = mul i32 %31, 4
  %33 = add i32 %32, 3
  %34 = zext i32 %33 to i64
  %35 = getelementptr inbounds float, ptr %30, i64 %34
  %36 = load float, ptr %35, align 4, !tbaa !18
  %37 = call float @gaussians_1d_eval(ptr noundef %27, float noundef %36)
  %38 = load ptr, ptr %7, align 8, !tbaa !5
  %39 = getelementptr inbounds %struct.mixture_obj, ptr %38, i32 0, i32 5
  %40 = load ptr, ptr %39, align 8, !tbaa !19
  %41 = load ptr, ptr %8, align 8, !tbaa !5
  %42 = getelementptr inbounds %struct.pots_obj, ptr %41, i32 0, i32 0
  %43 = load i32, ptr %42, align 8, !tbaa !20
  %44 = mul i32 0, %43
  %45 = load i32, ptr %11, align 4, !tbaa !9
  %46 = add i32 %44, %45
  %47 = zext i32 %46 to i64
  %48 = getelementptr inbounds float, ptr %40, i64 %47
  store float %37, ptr %48, align 4, !tbaa !18
  %49 = load ptr, ptr %6, align 8, !tbaa !5
  %50 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %49, i32 0, i32 1
  %51 = load ptr, ptr %50, align 8, !tbaa !21
  %52 = load ptr, ptr %8, align 8, !tbaa !5
  %53 = getelementptr inbounds %struct.pots_obj, ptr %52, i32 0, i32 1
  %54 = load ptr, ptr %53, align 8, !tbaa !16
  %55 = load i32, ptr %11, align 4, !tbaa !9
  %56 = mul i32 %55, 4
  %57 = add i32 %56, 3
  %58 = zext i32 %57 to i64
  %59 = getelementptr inbounds float, ptr %54, i64 %58
  %60 = load float, ptr %59, align 4, !tbaa !18
  %61 = call float @gaussians_1d_eval(ptr noundef %51, float noundef %60)
  %62 = load ptr, ptr %7, align 8, !tbaa !5
  %63 = getelementptr inbounds %struct.mixture_obj, ptr %62, i32 0, i32 5
  %64 = load ptr, ptr %63, align 8, !tbaa !19
  %65 = load ptr, ptr %8, align 8, !tbaa !5
  %66 = getelementptr inbounds %struct.pots_obj, ptr %65, i32 0, i32 0
  %67 = load i32, ptr %66, align 8, !tbaa !20
  %68 = mul i32 1, %67
  %69 = load i32, ptr %11, align 4, !tbaa !9
  %70 = add i32 %68, %69
  %71 = zext i32 %70 to i64
  %72 = getelementptr inbounds float, ptr %64, i64 %71
  store float %61, ptr %72, align 4, !tbaa !18
  %73 = load ptr, ptr %6, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %73, i32 0, i32 2
  %75 = load float, ptr %74, align 8, !tbaa !22
  %76 = load ptr, ptr %7, align 8, !tbaa !5
  %77 = getelementptr inbounds %struct.mixture_obj, ptr %76, i32 0, i32 5
  %78 = load ptr, ptr %77, align 8, !tbaa !19
  %79 = load ptr, ptr %8, align 8, !tbaa !5
  %80 = getelementptr inbounds %struct.pots_obj, ptr %79, i32 0, i32 0
  %81 = load i32, ptr %80, align 8, !tbaa !20
  %82 = mul i32 2, %81
  %83 = load i32, ptr %11, align 4, !tbaa !9
  %84 = add i32 %82, %83
  %85 = zext i32 %84 to i64
  %86 = getelementptr inbounds float, ptr %78, i64 %85
  store float %75, ptr %86, align 4, !tbaa !18
  br label %87

87:                                               ; preds = %24
  %88 = load i32, ptr %11, align 4, !tbaa !9
  %89 = add i32 %88, 1
  store i32 %89, ptr %11, align 4, !tbaa !9
  br label %18, !llvm.loop !23

90:                                               ; preds = %18
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %91

91:                                               ; preds = %135, %90
  %92 = load i32, ptr %12, align 4, !tbaa !9
  %93 = load ptr, ptr %7, align 8, !tbaa !5
  %94 = getelementptr inbounds %struct.mixture_obj, ptr %93, i32 0, i32 1
  %95 = load i32, ptr %94, align 4, !tbaa !25
  %96 = icmp ult i32 %92, %95
  br i1 %96, label %97, label %138

97:                                               ; preds = %91
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %98

98:                                               ; preds = %131, %97
  %99 = load i32, ptr %11, align 4, !tbaa !9
  %100 = load ptr, ptr %7, align 8, !tbaa !5
  %101 = getelementptr inbounds %struct.mixture_obj, ptr %100, i32 0, i32 0
  %102 = load i32, ptr %101, align 8, !tbaa !11
  %103 = icmp ult i32 %99, %102
  br i1 %103, label %104, label %134

104:                                              ; preds = %98
  %105 = load ptr, ptr %9, align 8, !tbaa !5
  %106 = getelementptr inbounds %struct.coherences_obj, ptr %105, i32 0, i32 2
  %107 = load ptr, ptr %106, align 8, !tbaa !26
  %108 = load i32, ptr %12, align 4, !tbaa !9
  %109 = load ptr, ptr %7, align 8, !tbaa !5
  %110 = getelementptr inbounds %struct.mixture_obj, ptr %109, i32 0, i32 0
  %111 = load i32, ptr %110, align 8, !tbaa !11
  %112 = mul i32 %108, %111
  %113 = load i32, ptr %11, align 4, !tbaa !9
  %114 = add i32 %112, %113
  %115 = zext i32 %114 to i64
  %116 = getelementptr inbounds float, ptr %107, i64 %115
  %117 = load float, ptr %116, align 4, !tbaa !18
  %118 = load ptr, ptr %7, align 8, !tbaa !5
  %119 = getelementptr inbounds %struct.mixture_obj, ptr %118, i32 0, i32 5
  %120 = load ptr, ptr %119, align 8, !tbaa !19
  %121 = load i32, ptr %12, align 4, !tbaa !9
  %122 = add i32 3, %121
  %123 = load ptr, ptr %8, align 8, !tbaa !5
  %124 = getelementptr inbounds %struct.pots_obj, ptr %123, i32 0, i32 0
  %125 = load i32, ptr %124, align 8, !tbaa !20
  %126 = mul i32 %122, %125
  %127 = load i32, ptr %11, align 4, !tbaa !9
  %128 = add i32 %126, %127
  %129 = zext i32 %128 to i64
  %130 = getelementptr inbounds float, ptr %120, i64 %129
  store float %117, ptr %130, align 4, !tbaa !18
  br label %131

131:                                              ; preds = %104
  %132 = load i32, ptr %11, align 4, !tbaa !9
  %133 = add i32 %132, 1
  store i32 %133, ptr %11, align 4, !tbaa !9
  br label %98, !llvm.loop !28

134:                                              ; preds = %98
  br label %135

135:                                              ; preds = %134
  %136 = load i32, ptr %12, align 4, !tbaa !9
  %137 = add i32 %136, 1
  store i32 %137, ptr %12, align 4, !tbaa !9
  br label %91, !llvm.loop !29

138:                                              ; preds = %91
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %139

139:                                              ; preds = %282, %138
  %140 = load i32, ptr %11, align 4, !tbaa !9
  %141 = load ptr, ptr %7, align 8, !tbaa !5
  %142 = getelementptr inbounds %struct.mixture_obj, ptr %141, i32 0, i32 0
  %143 = load i32, ptr %142, align 8, !tbaa !11
  %144 = icmp ult i32 %140, %143
  br i1 %144, label %145, label %285

145:                                              ; preds = %139
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %146

146:                                              ; preds = %278, %145
  %147 = load i32, ptr %13, align 4, !tbaa !9
  %148 = load ptr, ptr %7, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.mixture_obj, ptr %148, i32 0, i32 2
  %150 = load i32, ptr %149, align 8, !tbaa !30
  %151 = icmp ult i32 %147, %150
  br i1 %151, label %152, label %281

152:                                              ; preds = %146
  %153 = load i32, ptr %13, align 4, !tbaa !9
  %154 = sub nsw i32 %153, 2
  store i32 %154, ptr %15, align 4, !tbaa !9
  %155 = load i32, ptr %15, align 4, !tbaa !9
  %156 = icmp eq i32 %155, -2
  br i1 %156, label %157, label %195

157:                                              ; preds = %152
  %158 = load ptr, ptr %7, align 8, !tbaa !5
  %159 = getelementptr inbounds %struct.mixture_obj, ptr %158, i32 0, i32 5
  %160 = load ptr, ptr %159, align 8, !tbaa !19
  %161 = load ptr, ptr %8, align 8, !tbaa !5
  %162 = getelementptr inbounds %struct.pots_obj, ptr %161, i32 0, i32 0
  %163 = load i32, ptr %162, align 8, !tbaa !20
  %164 = mul i32 1, %163
  %165 = load i32, ptr %11, align 4, !tbaa !9
  %166 = add i32 %164, %165
  %167 = zext i32 %166 to i64
  %168 = getelementptr inbounds float, ptr %160, i64 %167
  %169 = load float, ptr %168, align 4, !tbaa !18
  %170 = load ptr, ptr %7, align 8, !tbaa !5
  %171 = getelementptr inbounds %struct.mixture_obj, ptr %170, i32 0, i32 5
  %172 = load ptr, ptr %171, align 8, !tbaa !19
  %173 = load ptr, ptr %8, align 8, !tbaa !5
  %174 = getelementptr inbounds %struct.pots_obj, ptr %173, i32 0, i32 0
  %175 = load i32, ptr %174, align 8, !tbaa !20
  %176 = mul i32 2, %175
  %177 = load i32, ptr %11, align 4, !tbaa !9
  %178 = add i32 %176, %177
  %179 = zext i32 %178 to i64
  %180 = getelementptr inbounds float, ptr %172, i64 %179
  %181 = load float, ptr %180, align 4, !tbaa !18
  %182 = fmul float %169, %181
  %183 = load ptr, ptr %7, align 8, !tbaa !5
  %184 = getelementptr inbounds %struct.mixture_obj, ptr %183, i32 0, i32 6
  %185 = load ptr, ptr %184, align 8, !tbaa !31
  %186 = load i32, ptr %13, align 4, !tbaa !9
  %187 = load ptr, ptr %7, align 8, !tbaa !5
  %188 = getelementptr inbounds %struct.mixture_obj, ptr %187, i32 0, i32 0
  %189 = load i32, ptr %188, align 8, !tbaa !11
  %190 = mul i32 %186, %189
  %191 = load i32, ptr %11, align 4, !tbaa !9
  %192 = add i32 %190, %191
  %193 = zext i32 %192 to i64
  %194 = getelementptr inbounds float, ptr %185, i64 %193
  store float %182, ptr %194, align 4, !tbaa !18
  br label %277

195:                                              ; preds = %152
  %196 = load i32, ptr %15, align 4, !tbaa !9
  %197 = icmp eq i32 %196, -1
  br i1 %197, label %198, label %236

198:                                              ; preds = %195
  %199 = load ptr, ptr %7, align 8, !tbaa !5
  %200 = getelementptr inbounds %struct.mixture_obj, ptr %199, i32 0, i32 5
  %201 = load ptr, ptr %200, align 8, !tbaa !19
  %202 = load ptr, ptr %8, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.pots_obj, ptr %202, i32 0, i32 0
  %204 = load i32, ptr %203, align 8, !tbaa !20
  %205 = mul i32 0, %204
  %206 = load i32, ptr %11, align 4, !tbaa !9
  %207 = add i32 %205, %206
  %208 = zext i32 %207 to i64
  %209 = getelementptr inbounds float, ptr %201, i64 %208
  %210 = load float, ptr %209, align 4, !tbaa !18
  %211 = load ptr, ptr %7, align 8, !tbaa !5
  %212 = getelementptr inbounds %struct.mixture_obj, ptr %211, i32 0, i32 5
  %213 = load ptr, ptr %212, align 8, !tbaa !19
  %214 = load ptr, ptr %8, align 8, !tbaa !5
  %215 = getelementptr inbounds %struct.pots_obj, ptr %214, i32 0, i32 0
  %216 = load i32, ptr %215, align 8, !tbaa !20
  %217 = mul i32 2, %216
  %218 = load i32, ptr %11, align 4, !tbaa !9
  %219 = add i32 %217, %218
  %220 = zext i32 %219 to i64
  %221 = getelementptr inbounds float, ptr %213, i64 %220
  %222 = load float, ptr %221, align 4, !tbaa !18
  %223 = fmul float %210, %222
  %224 = load ptr, ptr %7, align 8, !tbaa !5
  %225 = getelementptr inbounds %struct.mixture_obj, ptr %224, i32 0, i32 6
  %226 = load ptr, ptr %225, align 8, !tbaa !31
  %227 = load i32, ptr %13, align 4, !tbaa !9
  %228 = load ptr, ptr %7, align 8, !tbaa !5
  %229 = getelementptr inbounds %struct.mixture_obj, ptr %228, i32 0, i32 0
  %230 = load i32, ptr %229, align 8, !tbaa !11
  %231 = mul i32 %227, %230
  %232 = load i32, ptr %11, align 4, !tbaa !9
  %233 = add i32 %231, %232
  %234 = zext i32 %233 to i64
  %235 = getelementptr inbounds float, ptr %226, i64 %234
  store float %223, ptr %235, align 4, !tbaa !18
  br label %276

236:                                              ; preds = %195
  %237 = load ptr, ptr %7, align 8, !tbaa !5
  %238 = getelementptr inbounds %struct.mixture_obj, ptr %237, i32 0, i32 5
  %239 = load ptr, ptr %238, align 8, !tbaa !19
  %240 = load ptr, ptr %8, align 8, !tbaa !5
  %241 = getelementptr inbounds %struct.pots_obj, ptr %240, i32 0, i32 0
  %242 = load i32, ptr %241, align 8, !tbaa !20
  %243 = mul i32 0, %242
  %244 = load i32, ptr %11, align 4, !tbaa !9
  %245 = add i32 %243, %244
  %246 = zext i32 %245 to i64
  %247 = getelementptr inbounds float, ptr %239, i64 %246
  %248 = load float, ptr %247, align 4, !tbaa !18
  %249 = load ptr, ptr %7, align 8, !tbaa !5
  %250 = getelementptr inbounds %struct.mixture_obj, ptr %249, i32 0, i32 5
  %251 = load ptr, ptr %250, align 8, !tbaa !19
  %252 = load i32, ptr %15, align 4, !tbaa !9
  %253 = add nsw i32 %252, 3
  %254 = load ptr, ptr %8, align 8, !tbaa !5
  %255 = getelementptr inbounds %struct.pots_obj, ptr %254, i32 0, i32 0
  %256 = load i32, ptr %255, align 8, !tbaa !20
  %257 = mul i32 %253, %256
  %258 = load i32, ptr %11, align 4, !tbaa !9
  %259 = add i32 %257, %258
  %260 = zext i32 %259 to i64
  %261 = getelementptr inbounds float, ptr %251, i64 %260
  %262 = load float, ptr %261, align 4, !tbaa !18
  %263 = fmul float %248, %262
  %264 = load ptr, ptr %7, align 8, !tbaa !5
  %265 = getelementptr inbounds %struct.mixture_obj, ptr %264, i32 0, i32 6
  %266 = load ptr, ptr %265, align 8, !tbaa !31
  %267 = load i32, ptr %13, align 4, !tbaa !9
  %268 = load ptr, ptr %7, align 8, !tbaa !5
  %269 = getelementptr inbounds %struct.mixture_obj, ptr %268, i32 0, i32 0
  %270 = load i32, ptr %269, align 8, !tbaa !11
  %271 = mul i32 %267, %270
  %272 = load i32, ptr %11, align 4, !tbaa !9
  %273 = add i32 %271, %272
  %274 = zext i32 %273 to i64
  %275 = getelementptr inbounds float, ptr %266, i64 %274
  store float %263, ptr %275, align 4, !tbaa !18
  br label %276

276:                                              ; preds = %236, %198
  br label %277

277:                                              ; preds = %276, %157
  br label %278

278:                                              ; preds = %277
  %279 = load i32, ptr %13, align 4, !tbaa !9
  %280 = add i32 %279, 1
  store i32 %280, ptr %13, align 4, !tbaa !9
  br label %146, !llvm.loop !32

281:                                              ; preds = %146
  br label %282

282:                                              ; preds = %281
  %283 = load i32, ptr %11, align 4, !tbaa !9
  %284 = add i32 %283, 1
  store i32 %284, ptr %11, align 4, !tbaa !9
  br label %139, !llvm.loop !33

285:                                              ; preds = %139
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %286

286:                                              ; preds = %361, %285
  %287 = load i32, ptr %11, align 4, !tbaa !9
  %288 = load ptr, ptr %7, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.mixture_obj, ptr %288, i32 0, i32 0
  %290 = load i32, ptr %289, align 8, !tbaa !11
  %291 = icmp ult i32 %287, %290
  br i1 %291, label %292, label %364

292:                                              ; preds = %286
  store i32 0, ptr %13, align 4, !tbaa !9
  br label %293

293:                                              ; preds = %357, %292
  %294 = load i32, ptr %13, align 4, !tbaa !9
  %295 = load ptr, ptr %7, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.mixture_obj, ptr %295, i32 0, i32 2
  %297 = load i32, ptr %296, align 8, !tbaa !30
  %298 = icmp ult i32 %294, %297
  br i1 %298, label %299, label %360

299:                                              ; preds = %293
  %300 = load i32, ptr %13, align 4, !tbaa !9
  %301 = sub nsw i32 %300, 2
  store i32 %301, ptr %15, align 4, !tbaa !9
  %302 = load i32, ptr %15, align 4, !tbaa !9
  %303 = icmp eq i32 %302, -2
  br i1 %303, label %304, label %320

304:                                              ; preds = %299
  %305 = load ptr, ptr %6, align 8, !tbaa !5
  %306 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %305, i32 0, i32 3
  %307 = load float, ptr %306, align 4, !tbaa !34
  %308 = load ptr, ptr %7, align 8, !tbaa !5
  %309 = getelementptr inbounds %struct.mixture_obj, ptr %308, i32 0, i32 7
  %310 = load ptr, ptr %309, align 8, !tbaa !35
  %311 = load i32, ptr %13, align 4, !tbaa !9
  %312 = load ptr, ptr %7, align 8, !tbaa !5
  %313 = getelementptr inbounds %struct.mixture_obj, ptr %312, i32 0, i32 0
  %314 = load i32, ptr %313, align 8, !tbaa !11
  %315 = mul i32 %311, %314
  %316 = load i32, ptr %11, align 4, !tbaa !9
  %317 = add i32 %315, %316
  %318 = zext i32 %317 to i64
  %319 = getelementptr inbounds float, ptr %310, i64 %318
  store float %307, ptr %319, align 4, !tbaa !18
  br label %356

320:                                              ; preds = %299
  %321 = load i32, ptr %15, align 4, !tbaa !9
  %322 = icmp eq i32 %321, -1
  br i1 %322, label %323, label %339

323:                                              ; preds = %320
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %324, i32 0, i32 4
  %326 = load float, ptr %325, align 8, !tbaa !36
  %327 = load ptr, ptr %7, align 8, !tbaa !5
  %328 = getelementptr inbounds %struct.mixture_obj, ptr %327, i32 0, i32 7
  %329 = load ptr, ptr %328, align 8, !tbaa !35
  %330 = load i32, ptr %13, align 4, !tbaa !9
  %331 = load ptr, ptr %7, align 8, !tbaa !5
  %332 = getelementptr inbounds %struct.mixture_obj, ptr %331, i32 0, i32 0
  %333 = load i32, ptr %332, align 8, !tbaa !11
  %334 = mul i32 %330, %333
  %335 = load i32, ptr %11, align 4, !tbaa !9
  %336 = add i32 %334, %335
  %337 = zext i32 %336 to i64
  %338 = getelementptr inbounds float, ptr %329, i64 %337
  store float %326, ptr %338, align 4, !tbaa !18
  br label %355

339:                                              ; preds = %320
  %340 = load ptr, ptr %6, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %340, i32 0, i32 5
  %342 = load float, ptr %341, align 4, !tbaa !37
  %343 = load ptr, ptr %7, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.mixture_obj, ptr %343, i32 0, i32 7
  %345 = load ptr, ptr %344, align 8, !tbaa !35
  %346 = load i32, ptr %13, align 4, !tbaa !9
  %347 = load ptr, ptr %7, align 8, !tbaa !5
  %348 = getelementptr inbounds %struct.mixture_obj, ptr %347, i32 0, i32 0
  %349 = load i32, ptr %348, align 8, !tbaa !11
  %350 = mul i32 %346, %349
  %351 = load i32, ptr %11, align 4, !tbaa !9
  %352 = add i32 %350, %351
  %353 = zext i32 %352 to i64
  %354 = getelementptr inbounds float, ptr %345, i64 %353
  store float %342, ptr %354, align 4, !tbaa !18
  br label %355

355:                                              ; preds = %339, %323
  br label %356

356:                                              ; preds = %355, %304
  br label %357

357:                                              ; preds = %356
  %358 = load i32, ptr %13, align 4, !tbaa !9
  %359 = add i32 %358, 1
  store i32 %359, ptr %13, align 4, !tbaa !9
  br label %293, !llvm.loop !38

360:                                              ; preds = %293
  br label %361

361:                                              ; preds = %360
  %362 = load i32, ptr %11, align 4, !tbaa !9
  %363 = add i32 %362, 1
  store i32 %363, ptr %11, align 4, !tbaa !9
  br label %286, !llvm.loop !39

364:                                              ; preds = %286
  %365 = load ptr, ptr %6, align 8, !tbaa !5
  %366 = getelementptr inbounds %struct.mixture2mixture_obj, ptr %365, i32 0, i32 6
  %367 = load float, ptr %366, align 8, !tbaa !40
  store float %367, ptr %16, align 4, !tbaa !18
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %368

368:                                              ; preds = %487, %364
  %369 = load i32, ptr %14, align 4, !tbaa !9
  %370 = load ptr, ptr %7, align 8, !tbaa !5
  %371 = getelementptr inbounds %struct.mixture_obj, ptr %370, i32 0, i32 3
  %372 = load i32, ptr %371, align 4, !tbaa !41
  %373 = icmp ult i32 %369, %372
  br i1 %373, label %374, label %490

374:                                              ; preds = %368
  %375 = load ptr, ptr %7, align 8, !tbaa !5
  %376 = getelementptr inbounds %struct.mixture_obj, ptr %375, i32 0, i32 8
  %377 = load ptr, ptr %376, align 8, !tbaa !42
  %378 = load i32, ptr %14, align 4, !tbaa !9
  %379 = zext i32 %378 to i64
  %380 = getelementptr inbounds float, ptr %377, i64 %379
  store float 1.000000e+00, ptr %380, align 4, !tbaa !18
  %381 = load ptr, ptr %7, align 8, !tbaa !5
  %382 = getelementptr inbounds %struct.mixture_obj, ptr %381, i32 0, i32 9
  %383 = load ptr, ptr %382, align 8, !tbaa !43
  %384 = load i32, ptr %14, align 4, !tbaa !9
  %385 = zext i32 %384 to i64
  %386 = getelementptr inbounds float, ptr %383, i64 %385
  store float 1.000000e+00, ptr %386, align 4, !tbaa !18
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %387

387:                                              ; preds = %453, %374
  %388 = load i32, ptr %11, align 4, !tbaa !9
  %389 = load ptr, ptr %7, align 8, !tbaa !5
  %390 = getelementptr inbounds %struct.mixture_obj, ptr %389, i32 0, i32 0
  %391 = load i32, ptr %390, align 8, !tbaa !11
  %392 = icmp ult i32 %388, %391
  br i1 %392, label %393, label %456

393:                                              ; preds = %387
  %394 = load ptr, ptr %7, align 8, !tbaa !5
  %395 = getelementptr inbounds %struct.mixture_obj, ptr %394, i32 0, i32 4
  %396 = load ptr, ptr %395, align 8, !tbaa !44
  %397 = getelementptr inbounds %struct.assignations_obj, ptr %396, i32 0, i32 2
  %398 = load ptr, ptr %397, align 8, !tbaa !45
  %399 = load i32, ptr %14, align 4, !tbaa !9
  %400 = load ptr, ptr %7, align 8, !tbaa !5
  %401 = getelementptr inbounds %struct.mixture_obj, ptr %400, i32 0, i32 0
  %402 = load i32, ptr %401, align 8, !tbaa !11
  %403 = mul i32 %399, %402
  %404 = load i32, ptr %11, align 4, !tbaa !9
  %405 = add i32 %403, %404
  %406 = zext i32 %405 to i64
  %407 = getelementptr inbounds i32, ptr %398, i64 %406
  %408 = load i32, ptr %407, align 4, !tbaa !9
  store i32 %408, ptr %15, align 4, !tbaa !9
  %409 = load i32, ptr %15, align 4, !tbaa !9
  %410 = add nsw i32 %409, 2
  store i32 %410, ptr %13, align 4, !tbaa !9
  %411 = load ptr, ptr %7, align 8, !tbaa !5
  %412 = getelementptr inbounds %struct.mixture_obj, ptr %411, i32 0, i32 6
  %413 = load ptr, ptr %412, align 8, !tbaa !31
  %414 = load i32, ptr %13, align 4, !tbaa !9
  %415 = load ptr, ptr %7, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.mixture_obj, ptr %415, i32 0, i32 0
  %417 = load i32, ptr %416, align 8, !tbaa !11
  %418 = mul i32 %414, %417
  %419 = load i32, ptr %11, align 4, !tbaa !9
  %420 = add i32 %418, %419
  %421 = zext i32 %420 to i64
  %422 = getelementptr inbounds float, ptr %413, i64 %421
  %423 = load float, ptr %422, align 4, !tbaa !18
  %424 = load ptr, ptr %7, align 8, !tbaa !5
  %425 = getelementptr inbounds %struct.mixture_obj, ptr %424, i32 0, i32 8
  %426 = load ptr, ptr %425, align 8, !tbaa !42
  %427 = load i32, ptr %14, align 4, !tbaa !9
  %428 = zext i32 %427 to i64
  %429 = getelementptr inbounds float, ptr %426, i64 %428
  %430 = load float, ptr %429, align 4, !tbaa !18
  %431 = fmul float %430, %423
  store float %431, ptr %429, align 4, !tbaa !18
  %432 = load ptr, ptr %7, align 8, !tbaa !5
  %433 = getelementptr inbounds %struct.mixture_obj, ptr %432, i32 0, i32 7
  %434 = load ptr, ptr %433, align 8, !tbaa !35
  %435 = load i32, ptr %13, align 4, !tbaa !9
  %436 = load ptr, ptr %7, align 8, !tbaa !5
  %437 = getelementptr inbounds %struct.mixture_obj, ptr %436, i32 0, i32 0
  %438 = load i32, ptr %437, align 8, !tbaa !11
  %439 = mul i32 %435, %438
  %440 = load i32, ptr %11, align 4, !tbaa !9
  %441 = add i32 %439, %440
  %442 = zext i32 %441 to i64
  %443 = getelementptr inbounds float, ptr %434, i64 %442
  %444 = load float, ptr %443, align 4, !tbaa !18
  %445 = load ptr, ptr %7, align 8, !tbaa !5
  %446 = getelementptr inbounds %struct.mixture_obj, ptr %445, i32 0, i32 9
  %447 = load ptr, ptr %446, align 8, !tbaa !43
  %448 = load i32, ptr %14, align 4, !tbaa !9
  %449 = zext i32 %448 to i64
  %450 = getelementptr inbounds float, ptr %447, i64 %449
  %451 = load float, ptr %450, align 4, !tbaa !18
  %452 = fmul float %451, %444
  store float %452, ptr %450, align 4, !tbaa !18
  br label %453

453:                                              ; preds = %393
  %454 = load i32, ptr %11, align 4, !tbaa !9
  %455 = add i32 %454, 1
  store i32 %455, ptr %11, align 4, !tbaa !9
  br label %387, !llvm.loop !47

456:                                              ; preds = %387
  %457 = load ptr, ptr %7, align 8, !tbaa !5
  %458 = getelementptr inbounds %struct.mixture_obj, ptr %457, i32 0, i32 8
  %459 = load ptr, ptr %458, align 8, !tbaa !42
  %460 = load i32, ptr %14, align 4, !tbaa !9
  %461 = zext i32 %460 to i64
  %462 = getelementptr inbounds float, ptr %459, i64 %461
  %463 = load float, ptr %462, align 4, !tbaa !18
  %464 = load ptr, ptr %7, align 8, !tbaa !5
  %465 = getelementptr inbounds %struct.mixture_obj, ptr %464, i32 0, i32 9
  %466 = load ptr, ptr %465, align 8, !tbaa !43
  %467 = load i32, ptr %14, align 4, !tbaa !9
  %468 = zext i32 %467 to i64
  %469 = getelementptr inbounds float, ptr %466, i64 %468
  %470 = load float, ptr %469, align 4, !tbaa !18
  %471 = fmul float %463, %470
  %472 = load ptr, ptr %7, align 8, !tbaa !5
  %473 = getelementptr inbounds %struct.mixture_obj, ptr %472, i32 0, i32 10
  %474 = load ptr, ptr %473, align 8, !tbaa !48
  %475 = load i32, ptr %14, align 4, !tbaa !9
  %476 = zext i32 %475 to i64
  %477 = getelementptr inbounds float, ptr %474, i64 %476
  store float %471, ptr %477, align 4, !tbaa !18
  %478 = load ptr, ptr %7, align 8, !tbaa !5
  %479 = getelementptr inbounds %struct.mixture_obj, ptr %478, i32 0, i32 10
  %480 = load ptr, ptr %479, align 8, !tbaa !48
  %481 = load i32, ptr %14, align 4, !tbaa !9
  %482 = zext i32 %481 to i64
  %483 = getelementptr inbounds float, ptr %480, i64 %482
  %484 = load float, ptr %483, align 4, !tbaa !18
  %485 = load float, ptr %16, align 4, !tbaa !18
  %486 = fadd float %485, %484
  store float %486, ptr %16, align 4, !tbaa !18
  br label %487

487:                                              ; preds = %456
  %488 = load i32, ptr %14, align 4, !tbaa !9
  %489 = add i32 %488, 1
  store i32 %489, ptr %14, align 4, !tbaa !9
  br label %368, !llvm.loop !49

490:                                              ; preds = %368
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %491

491:                                              ; preds = %507, %490
  %492 = load i32, ptr %14, align 4, !tbaa !9
  %493 = load ptr, ptr %7, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.mixture_obj, ptr %493, i32 0, i32 3
  %495 = load i32, ptr %494, align 4, !tbaa !41
  %496 = icmp ult i32 %492, %495
  br i1 %496, label %497, label %510

497:                                              ; preds = %491
  %498 = load float, ptr %16, align 4, !tbaa !18
  %499 = load ptr, ptr %7, align 8, !tbaa !5
  %500 = getelementptr inbounds %struct.mixture_obj, ptr %499, i32 0, i32 10
  %501 = load ptr, ptr %500, align 8, !tbaa !48
  %502 = load i32, ptr %14, align 4, !tbaa !9
  %503 = zext i32 %502 to i64
  %504 = getelementptr inbounds float, ptr %501, i64 %503
  %505 = load float, ptr %504, align 4, !tbaa !18
  %506 = fdiv float %505, %498
  store float %506, ptr %504, align 4, !tbaa !18
  br label %507

507:                                              ; preds = %497
  %508 = load i32, ptr %14, align 4, !tbaa !9
  %509 = add i32 %508, 1
  store i32 %509, ptr %14, align 4, !tbaa !9
  br label %491, !llvm.loop !50

510:                                              ; preds = %491
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %511

511:                                              ; preds = %593, %510
  %512 = load i32, ptr %12, align 4, !tbaa !9
  %513 = load ptr, ptr %7, align 8, !tbaa !5
  %514 = getelementptr inbounds %struct.mixture_obj, ptr %513, i32 0, i32 1
  %515 = load i32, ptr %514, align 4, !tbaa !25
  %516 = icmp ult i32 %512, %515
  br i1 %516, label %517, label %596

517:                                              ; preds = %511
  %518 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %518, ptr %15, align 4, !tbaa !9
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %519

519:                                              ; preds = %589, %517
  %520 = load i32, ptr %11, align 4, !tbaa !9
  %521 = load ptr, ptr %7, align 8, !tbaa !5
  %522 = getelementptr inbounds %struct.mixture_obj, ptr %521, i32 0, i32 0
  %523 = load i32, ptr %522, align 8, !tbaa !11
  %524 = icmp ult i32 %520, %523
  br i1 %524, label %525, label %592

525:                                              ; preds = %519
  %526 = load ptr, ptr %10, align 8, !tbaa !5
  %527 = getelementptr inbounds %struct.postprobs_obj, ptr %526, i32 0, i32 3
  %528 = load ptr, ptr %527, align 8, !tbaa !51
  %529 = load i32, ptr %12, align 4, !tbaa !9
  %530 = load ptr, ptr %7, align 8, !tbaa !5
  %531 = getelementptr inbounds %struct.mixture_obj, ptr %530, i32 0, i32 0
  %532 = load i32, ptr %531, align 8, !tbaa !11
  %533 = mul i32 %529, %532
  %534 = load i32, ptr %11, align 4, !tbaa !9
  %535 = add i32 %533, %534
  %536 = zext i32 %535 to i64
  %537 = getelementptr inbounds float, ptr %528, i64 %536
  store float 0.000000e+00, ptr %537, align 4, !tbaa !18
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %538

538:                                              ; preds = %585, %525
  %539 = load i32, ptr %14, align 4, !tbaa !9
  %540 = load ptr, ptr %7, align 8, !tbaa !5
  %541 = getelementptr inbounds %struct.mixture_obj, ptr %540, i32 0, i32 3
  %542 = load i32, ptr %541, align 4, !tbaa !41
  %543 = icmp ult i32 %539, %542
  br i1 %543, label %544, label %588

544:                                              ; preds = %538
  %545 = load ptr, ptr %7, align 8, !tbaa !5
  %546 = getelementptr inbounds %struct.mixture_obj, ptr %545, i32 0, i32 4
  %547 = load ptr, ptr %546, align 8, !tbaa !44
  %548 = getelementptr inbounds %struct.assignations_obj, ptr %547, i32 0, i32 2
  %549 = load ptr, ptr %548, align 8, !tbaa !45
  %550 = load i32, ptr %14, align 4, !tbaa !9
  %551 = load ptr, ptr %7, align 8, !tbaa !5
  %552 = getelementptr inbounds %struct.mixture_obj, ptr %551, i32 0, i32 0
  %553 = load i32, ptr %552, align 8, !tbaa !11
  %554 = mul i32 %550, %553
  %555 = load i32, ptr %11, align 4, !tbaa !9
  %556 = add i32 %554, %555
  %557 = zext i32 %556 to i64
  %558 = getelementptr inbounds i32, ptr %549, i64 %557
  %559 = load i32, ptr %558, align 4, !tbaa !9
  %560 = load i32, ptr %15, align 4, !tbaa !9
  %561 = icmp eq i32 %559, %560
  br i1 %561, label %562, label %584

562:                                              ; preds = %544
  %563 = load ptr, ptr %7, align 8, !tbaa !5
  %564 = getelementptr inbounds %struct.mixture_obj, ptr %563, i32 0, i32 10
  %565 = load ptr, ptr %564, align 8, !tbaa !48
  %566 = load i32, ptr %14, align 4, !tbaa !9
  %567 = zext i32 %566 to i64
  %568 = getelementptr inbounds float, ptr %565, i64 %567
  %569 = load float, ptr %568, align 4, !tbaa !18
  %570 = load ptr, ptr %10, align 8, !tbaa !5
  %571 = getelementptr inbounds %struct.postprobs_obj, ptr %570, i32 0, i32 3
  %572 = load ptr, ptr %571, align 8, !tbaa !51
  %573 = load i32, ptr %12, align 4, !tbaa !9
  %574 = load ptr, ptr %7, align 8, !tbaa !5
  %575 = getelementptr inbounds %struct.mixture_obj, ptr %574, i32 0, i32 0
  %576 = load i32, ptr %575, align 8, !tbaa !11
  %577 = mul i32 %573, %576
  %578 = load i32, ptr %11, align 4, !tbaa !9
  %579 = add i32 %577, %578
  %580 = zext i32 %579 to i64
  %581 = getelementptr inbounds float, ptr %572, i64 %580
  %582 = load float, ptr %581, align 4, !tbaa !18
  %583 = fadd float %582, %569
  store float %583, ptr %581, align 4, !tbaa !18
  br label %584

584:                                              ; preds = %562, %544
  br label %585

585:                                              ; preds = %584
  %586 = load i32, ptr %14, align 4, !tbaa !9
  %587 = add i32 %586, 1
  store i32 %587, ptr %14, align 4, !tbaa !9
  br label %538, !llvm.loop !53

588:                                              ; preds = %538
  br label %589

589:                                              ; preds = %588
  %590 = load i32, ptr %11, align 4, !tbaa !9
  %591 = add i32 %590, 1
  store i32 %591, ptr %11, align 4, !tbaa !9
  br label %519, !llvm.loop !54

592:                                              ; preds = %519
  br label %593

593:                                              ; preds = %592
  %594 = load i32, ptr %12, align 4, !tbaa !9
  %595 = add i32 %594, 1
  store i32 %595, ptr %12, align 4, !tbaa !9
  br label %511, !llvm.loop !55

596:                                              ; preds = %511
  %597 = load ptr, ptr %10, align 8, !tbaa !5
  %598 = getelementptr inbounds %struct.postprobs_obj, ptr %597, i32 0, i32 2
  %599 = load ptr, ptr %598, align 8, !tbaa !56
  %600 = getelementptr inbounds float, ptr %599, i64 0
  store float 0.000000e+00, ptr %600, align 4, !tbaa !18
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %601

601:                                              ; preds = %658, %596
  %602 = load i32, ptr %11, align 4, !tbaa !9
  %603 = load ptr, ptr %7, align 8, !tbaa !5
  %604 = getelementptr inbounds %struct.mixture_obj, ptr %603, i32 0, i32 0
  %605 = load i32, ptr %604, align 8, !tbaa !11
  %606 = icmp ult i32 %602, %605
  br i1 %606, label %607, label %661

607:                                              ; preds = %601
  %608 = load ptr, ptr %10, align 8, !tbaa !5
  %609 = getelementptr inbounds %struct.postprobs_obj, ptr %608, i32 0, i32 2
  %610 = load ptr, ptr %609, align 8, !tbaa !56
  %611 = load i32, ptr %11, align 4, !tbaa !9
  %612 = zext i32 %611 to i64
  %613 = getelementptr inbounds float, ptr %610, i64 %612
  store float 0.000000e+00, ptr %613, align 4, !tbaa !18
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %614

614:                                              ; preds = %654, %607
  %615 = load i32, ptr %14, align 4, !tbaa !9
  %616 = load ptr, ptr %7, align 8, !tbaa !5
  %617 = getelementptr inbounds %struct.mixture_obj, ptr %616, i32 0, i32 3
  %618 = load i32, ptr %617, align 4, !tbaa !41
  %619 = icmp ult i32 %615, %618
  br i1 %619, label %620, label %657

620:                                              ; preds = %614
  %621 = load ptr, ptr %7, align 8, !tbaa !5
  %622 = getelementptr inbounds %struct.mixture_obj, ptr %621, i32 0, i32 4
  %623 = load ptr, ptr %622, align 8, !tbaa !44
  %624 = getelementptr inbounds %struct.assignations_obj, ptr %623, i32 0, i32 2
  %625 = load ptr, ptr %624, align 8, !tbaa !45
  %626 = load i32, ptr %14, align 4, !tbaa !9
  %627 = load ptr, ptr %7, align 8, !tbaa !5
  %628 = getelementptr inbounds %struct.mixture_obj, ptr %627, i32 0, i32 0
  %629 = load i32, ptr %628, align 8, !tbaa !11
  %630 = mul i32 %626, %629
  %631 = load i32, ptr %11, align 4, !tbaa !9
  %632 = add i32 %630, %631
  %633 = zext i32 %632 to i64
  %634 = getelementptr inbounds i32, ptr %625, i64 %633
  %635 = load i32, ptr %634, align 4, !tbaa !9
  %636 = icmp eq i32 %635, -1
  br i1 %636, label %637, label %653

637:                                              ; preds = %620
  %638 = load ptr, ptr %7, align 8, !tbaa !5
  %639 = getelementptr inbounds %struct.mixture_obj, ptr %638, i32 0, i32 10
  %640 = load ptr, ptr %639, align 8, !tbaa !48
  %641 = load i32, ptr %14, align 4, !tbaa !9
  %642 = zext i32 %641 to i64
  %643 = getelementptr inbounds float, ptr %640, i64 %642
  %644 = load float, ptr %643, align 4, !tbaa !18
  %645 = load ptr, ptr %10, align 8, !tbaa !5
  %646 = getelementptr inbounds %struct.postprobs_obj, ptr %645, i32 0, i32 2
  %647 = load ptr, ptr %646, align 8, !tbaa !56
  %648 = load i32, ptr %11, align 4, !tbaa !9
  %649 = zext i32 %648 to i64
  %650 = getelementptr inbounds float, ptr %647, i64 %649
  %651 = load float, ptr %650, align 4, !tbaa !18
  %652 = fadd float %651, %644
  store float %652, ptr %650, align 4, !tbaa !18
  br label %653

653:                                              ; preds = %637, %620
  br label %654

654:                                              ; preds = %653
  %655 = load i32, ptr %14, align 4, !tbaa !9
  %656 = add i32 %655, 1
  store i32 %656, ptr %14, align 4, !tbaa !9
  br label %614, !llvm.loop !57

657:                                              ; preds = %614
  br label %658

658:                                              ; preds = %657
  %659 = load i32, ptr %11, align 4, !tbaa !9
  %660 = add i32 %659, 1
  store i32 %660, ptr %11, align 4, !tbaa !9
  br label %601, !llvm.loop !58

661:                                              ; preds = %601
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %662

662:                                              ; preds = %737, %661
  %663 = load i32, ptr %12, align 4, !tbaa !9
  %664 = load ptr, ptr %7, align 8, !tbaa !5
  %665 = getelementptr inbounds %struct.mixture_obj, ptr %664, i32 0, i32 1
  %666 = load i32, ptr %665, align 4, !tbaa !25
  %667 = icmp ult i32 %663, %666
  br i1 %667, label %668, label %740

668:                                              ; preds = %662
  %669 = load i32, ptr %12, align 4, !tbaa !9
  store i32 %669, ptr %15, align 4, !tbaa !9
  %670 = load ptr, ptr %10, align 8, !tbaa !5
  %671 = getelementptr inbounds %struct.postprobs_obj, ptr %670, i32 0, i32 4
  %672 = load ptr, ptr %671, align 8, !tbaa !59
  %673 = load i32, ptr %12, align 4, !tbaa !9
  %674 = zext i32 %673 to i64
  %675 = getelementptr inbounds float, ptr %672, i64 %674
  store float 0.000000e+00, ptr %675, align 4, !tbaa !18
  store i32 0, ptr %14, align 4, !tbaa !9
  br label %676

676:                                              ; preds = %733, %668
  %677 = load i32, ptr %14, align 4, !tbaa !9
  %678 = load ptr, ptr %7, align 8, !tbaa !5
  %679 = getelementptr inbounds %struct.mixture_obj, ptr %678, i32 0, i32 3
  %680 = load i32, ptr %679, align 4, !tbaa !41
  %681 = icmp ult i32 %677, %680
  br i1 %681, label %682, label %736

682:                                              ; preds = %676
  store i8 0, ptr %17, align 1, !tbaa !60
  store i32 0, ptr %11, align 4, !tbaa !9
  br label %683

683:                                              ; preds = %709, %682
  %684 = load i32, ptr %11, align 4, !tbaa !9
  %685 = load ptr, ptr %7, align 8, !tbaa !5
  %686 = getelementptr inbounds %struct.mixture_obj, ptr %685, i32 0, i32 0
  %687 = load i32, ptr %686, align 8, !tbaa !11
  %688 = icmp ult i32 %684, %687
  br i1 %688, label %689, label %712

689:                                              ; preds = %683
  %690 = load ptr, ptr %7, align 8, !tbaa !5
  %691 = getelementptr inbounds %struct.mixture_obj, ptr %690, i32 0, i32 4
  %692 = load ptr, ptr %691, align 8, !tbaa !44
  %693 = getelementptr inbounds %struct.assignations_obj, ptr %692, i32 0, i32 2
  %694 = load ptr, ptr %693, align 8, !tbaa !45
  %695 = load i32, ptr %14, align 4, !tbaa !9
  %696 = load ptr, ptr %7, align 8, !tbaa !5
  %697 = getelementptr inbounds %struct.mixture_obj, ptr %696, i32 0, i32 0
  %698 = load i32, ptr %697, align 8, !tbaa !11
  %699 = mul i32 %695, %698
  %700 = load i32, ptr %11, align 4, !tbaa !9
  %701 = add i32 %699, %700
  %702 = zext i32 %701 to i64
  %703 = getelementptr inbounds i32, ptr %694, i64 %702
  %704 = load i32, ptr %703, align 4, !tbaa !9
  %705 = load i32, ptr %15, align 4, !tbaa !9
  %706 = icmp eq i32 %704, %705
  br i1 %706, label %707, label %708

707:                                              ; preds = %689
  store i8 1, ptr %17, align 1, !tbaa !60
  br label %712

708:                                              ; preds = %689
  br label %709

709:                                              ; preds = %708
  %710 = load i32, ptr %11, align 4, !tbaa !9
  %711 = add i32 %710, 1
  store i32 %711, ptr %11, align 4, !tbaa !9
  br label %683, !llvm.loop !61

712:                                              ; preds = %707, %683
  %713 = load i8, ptr %17, align 1, !tbaa !60
  %714 = zext i8 %713 to i32
  %715 = icmp eq i32 %714, 1
  br i1 %715, label %716, label %732

716:                                              ; preds = %712
  %717 = load ptr, ptr %7, align 8, !tbaa !5
  %718 = getelementptr inbounds %struct.mixture_obj, ptr %717, i32 0, i32 10
  %719 = load ptr, ptr %718, align 8, !tbaa !48
  %720 = load i32, ptr %14, align 4, !tbaa !9
  %721 = zext i32 %720 to i64
  %722 = getelementptr inbounds float, ptr %719, i64 %721
  %723 = load float, ptr %722, align 4, !tbaa !18
  %724 = load ptr, ptr %10, align 8, !tbaa !5
  %725 = getelementptr inbounds %struct.postprobs_obj, ptr %724, i32 0, i32 4
  %726 = load ptr, ptr %725, align 8, !tbaa !59
  %727 = load i32, ptr %12, align 4, !tbaa !9
  %728 = zext i32 %727 to i64
  %729 = getelementptr inbounds float, ptr %726, i64 %728
  %730 = load float, ptr %729, align 4, !tbaa !18
  %731 = fadd float %730, %723
  store float %731, ptr %729, align 4, !tbaa !18
  br label %732

732:                                              ; preds = %716, %712
  br label %733

733:                                              ; preds = %732
  %734 = load i32, ptr %14, align 4, !tbaa !9
  %735 = add i32 %734, 1
  store i32 %735, ptr %14, align 4, !tbaa !9
  br label %676, !llvm.loop !62

736:                                              ; preds = %676
  br label %737

737:                                              ; preds = %736
  %738 = load i32, ptr %12, align 4, !tbaa !9
  %739 = add i32 %738, 1
  store i32 %739, ptr %12, align 4, !tbaa !9
  br label %662, !llvm.loop !63

740:                                              ; preds = %662
  call void @llvm.lifetime.end.p0(i64 1, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #3
  ret void
}

declare float @gaussians_1d_eval(ptr noundef, float noundef) #2

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

!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 0}
!12 = !{!"mixture_obj", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64}
!13 = !{!14, !6, i64 0}
!14 = !{!"mixture2mixture_obj", !6, i64 0, !6, i64 8, !15, i64 16, !15, i64 20, !15, i64 24, !15, i64 28, !15, i64 32}
!15 = !{!"float", !7, i64 0}
!16 = !{!17, !6, i64 8}
!17 = !{!"pots_obj", !10, i64 0, !6, i64 8}
!18 = !{!15, !15, i64 0}
!19 = !{!12, !6, i64 24}
!20 = !{!17, !10, i64 0}
!21 = !{!14, !6, i64 8}
!22 = !{!14, !15, i64 16}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.mustprogress"}
!25 = !{!12, !10, i64 4}
!26 = !{!27, !6, i64 8}
!27 = !{!"coherences_obj", !10, i64 0, !10, i64 4, !6, i64 8}
!28 = distinct !{!28, !24}
!29 = distinct !{!29, !24}
!30 = !{!12, !10, i64 8}
!31 = !{!12, !6, i64 32}
!32 = distinct !{!32, !24}
!33 = distinct !{!33, !24}
!34 = !{!14, !15, i64 20}
!35 = !{!12, !6, i64 40}
!36 = !{!14, !15, i64 24}
!37 = !{!14, !15, i64 28}
!38 = distinct !{!38, !24}
!39 = distinct !{!39, !24}
!40 = !{!14, !15, i64 32}
!41 = !{!12, !10, i64 12}
!42 = !{!12, !6, i64 48}
!43 = !{!12, !6, i64 56}
!44 = !{!12, !6, i64 16}
!45 = !{!46, !6, i64 8}
!46 = !{!"assignations_obj", !10, i64 0, !10, i64 4, !6, i64 8}
!47 = distinct !{!47, !24}
!48 = !{!12, !6, i64 64}
!49 = distinct !{!49, !24}
!50 = distinct !{!50, !24}
!51 = !{!52, !6, i64 16}
!52 = !{!"postprobs_obj", !10, i64 0, !10, i64 4, !6, i64 8, !6, i64 16, !6, i64 24}
!53 = distinct !{!53, !24}
!54 = distinct !{!54, !24}
!55 = distinct !{!55, !24}
!56 = !{!52, !6, i64 8}
!57 = distinct !{!57, !24}
!58 = distinct !{!58, !24}
!59 = !{!52, !6, i64 24}
!60 = !{!7, !7, i64 0}
!61 = distinct !{!61, !24}
!62 = distinct !{!62, !24}
!63 = distinct !{!63, !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: nounwind uwtable
define dso_local void @mixture2mixture_process(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1, ptr nocapture noundef readonly %2, ptr nocapture noundef readonly %3, ptr nocapture noundef readonly %4) local_unnamed_addr #0 {
  %6 = load i32, ptr %1, align 8, !tbaa !5
  %.not = icmp eq i32 %6, 0
  br i1 %.not, label %.preheader230.thread, label %.lr.ph

.lr.ph:                                           ; preds = %5
  %7 = getelementptr inbounds i8, ptr %2, i64 8
  %8 = getelementptr inbounds i8, ptr %1, i64 24
  %9 = getelementptr inbounds i8, ptr %0, i64 8
  %10 = getelementptr inbounds i8, ptr %0, i64 16
  br label %104

.preheader230:                                    ; preds = %104
  %11 = getelementptr inbounds i8, ptr %1, i64 4
  %12 = load i32, ptr %11, align 4, !tbaa !11
  %.not290 = icmp eq i32 %12, 0
  br i1 %.not290, label %.preheader228, label %.preheader229.lr.ph

.preheader230.thread:                             ; preds = %5
  %13 = getelementptr inbounds i8, ptr %1, i64 4
  %14 = load i32, ptr %13, align 4, !tbaa !11
  %.not290408 = icmp eq i32 %14, 0
  br label %._crit_edge245

.preheader229.lr.ph:                              ; preds = %.preheader230
  %.not291 = icmp eq i32 %131, 0
  br i1 %.not291, label %._crit_edge245, label %.preheader229.lr.ph.split.us

.preheader229.lr.ph.split.us:                     ; preds = %.preheader229.lr.ph
  %15 = getelementptr inbounds i8, ptr %1, i64 24
  %16 = getelementptr inbounds i8, ptr %3, i64 8
  %17 = load ptr, ptr %16, align 8, !tbaa !12
  %18 = ptrtoint ptr %17 to i64
  %19 = load ptr, ptr %15, align 8, !tbaa !14
  %20 = ptrtoint ptr %19 to i64
  %21 = load i32, ptr %2, align 8, !tbaa !15
  %wide.trip.count = zext i32 %131 to i64
  %22 = add nsw i64 %wide.trip.count, -1
  %min.iters.check = icmp ult i32 %131, 20
  %23 = trunc i64 %22 to i32
  %24 = trunc i64 %22 to i32
  %25 = icmp ugt i64 %22, 4294967295
  %n.vec = and i64 %wide.trip.count, 4294967288
  %cmp.n = icmp eq i64 %n.vec, %wide.trip.count
  %xtraiter = and i64 %wide.trip.count, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br label %.preheader229.us

.preheader229.us:                                 ; preds = %._crit_edge.us, %.preheader229.lr.ph.split.us
  %.0207236.us = phi i32 [ 0, %.preheader229.lr.ph.split.us ], [ %103, %._crit_edge.us ]
  %26 = mul i32 %.0207236.us, %131
  %27 = add i32 %.0207236.us, 3
  %28 = mul i32 %21, %27
  br i1 %min.iters.check, label %scalar.ph.preheader, label %vector.scevcheck

vector.scevcheck:                                 ; preds = %.preheader229.us
  %29 = add i32 %.0207236.us, 3
  %30 = mul i32 %21, %29
  %31 = zext i32 %30 to i64
  %32 = shl nuw nsw i64 %31, 2
  %33 = add i64 %32, %20
  %34 = mul i32 %131, %.0207236.us
  %35 = zext i32 %34 to i64
  %36 = shl nuw nsw i64 %35, 2
  %37 = add i64 %36, %18
  %38 = sub i64 %33, %37
  %39 = mul i32 %131, %.0207236.us
  %40 = add i32 %.0207236.us, 3
  %41 = mul i32 %21, %40
  %42 = xor i32 %41, -1
  %43 = icmp ult i32 %42, %23
  %44 = xor i32 %39, -1
  %45 = icmp ult i32 %44, %24
  %46 = or i1 %45, %25
  %47 = or i1 %43, %46
  %diff.check = icmp ult i64 %38, 32
  %or.cond = select i1 %47, i1 true, i1 %diff.check
  br i1 %or.cond, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %vector.scevcheck, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %vector.scevcheck ]
  %48 = trunc i64 %index to i32
  %49 = add i32 %26, %48
  %50 = zext i32 %49 to i64
  %51 = getelementptr inbounds float, ptr %17, i64 %50
  %52 = getelementptr inbounds i8, ptr %51, i64 16
  %wide.load = load <4 x float>, ptr %51, align 4, !tbaa !17
  %wide.load452 = load <4 x float>, ptr %52, align 4, !tbaa !17
  %53 = add i32 %28, %48
  %54 = zext i32 %53 to i64
  %55 = getelementptr inbounds float, ptr %19, i64 %54
  %56 = getelementptr inbounds i8, ptr %55, i64 16
  store <4 x float> %wide.load, ptr %55, align 4, !tbaa !17
  store <4 x float> %wide.load452, ptr %56, align 4, !tbaa !17
  %index.next = add nuw i64 %index, 8
  %57 = icmp eq i64 %index.next, %n.vec
  br i1 %57, label %middle.block, label %vector.body, !llvm.loop !19

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge.us, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %middle.block, %vector.scevcheck, %.preheader229.us
  %indvars.iv317.ph = phi i64 [ 0, %vector.scevcheck ], [ 0, %.preheader229.us ], [ %n.vec, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv317.prol = phi i64 [ %indvars.iv.next318.prol, %scalar.ph.prol ], [ %indvars.iv317.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %58 = trunc nuw i64 %indvars.iv317.prol to i32
  %59 = add i32 %26, %58
  %60 = zext i32 %59 to i64
  %61 = getelementptr inbounds float, ptr %17, i64 %60
  %62 = load float, ptr %61, align 4, !tbaa !17
  %63 = add i32 %28, %58
  %64 = zext i32 %63 to i64
  %65 = getelementptr inbounds float, ptr %19, i64 %64
  store float %62, ptr %65, align 4, !tbaa !17
  %indvars.iv.next318.prol = add nuw nsw i64 %indvars.iv317.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !23

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv317.unr = phi i64 [ %indvars.iv317.ph, %scalar.ph.preheader ], [ %indvars.iv.next318.prol, %scalar.ph.prol ]
  %66 = sub nsw i64 %indvars.iv317.ph, %wide.trip.count
  %67 = icmp ugt i64 %66, -4
  br i1 %67, label %._crit_edge.us, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv317 = phi i64 [ %indvars.iv.next318.3, %scalar.ph ], [ %indvars.iv317.unr, %scalar.ph.prol.loopexit ]
  %68 = trunc nuw i64 %indvars.iv317 to i32
  %69 = add i32 %26, %68
  %70 = zext i32 %69 to i64
  %71 = getelementptr inbounds float, ptr %17, i64 %70
  %72 = load float, ptr %71, align 4, !tbaa !17
  %73 = add i32 %28, %68
  %74 = zext i32 %73 to i64
  %75 = getelementptr inbounds float, ptr %19, i64 %74
  store float %72, ptr %75, align 4, !tbaa !17
  %76 = trunc i64 %indvars.iv317 to i32
  %77 = add i32 %76, 1
  %78 = add i32 %26, %77
  %79 = zext i32 %78 to i64
  %80 = getelementptr inbounds float, ptr %17, i64 %79
  %81 = load float, ptr %80, align 4, !tbaa !17
  %82 = add i32 %28, %77
  %83 = zext i32 %82 to i64
  %84 = getelementptr inbounds float, ptr %19, i64 %83
  store float %81, ptr %84, align 4, !tbaa !17
  %85 = trunc i64 %indvars.iv317 to i32
  %86 = add i32 %85, 2
  %87 = add i32 %26, %86
  %88 = zext i32 %87 to i64
  %89 = getelementptr inbounds float, ptr %17, i64 %88
  %90 = load float, ptr %89, align 4, !tbaa !17
  %91 = add i32 %28, %86
  %92 = zext i32 %91 to i64
  %93 = getelementptr inbounds float, ptr %19, i64 %92
  store float %90, ptr %93, align 4, !tbaa !17
  %94 = trunc i64 %indvars.iv317 to i32
  %95 = add i32 %94, 3
  %96 = add i32 %26, %95
  %97 = zext i32 %96 to i64
  %98 = getelementptr inbounds float, ptr %17, i64 %97
  %99 = load float, ptr %98, align 4, !tbaa !17
  %100 = add i32 %28, %95
  %101 = zext i32 %100 to i64
  %102 = getelementptr inbounds float, ptr %19, i64 %101
  store float %99, ptr %102, align 4, !tbaa !17
  %indvars.iv.next318.3 = add nuw nsw i64 %indvars.iv317, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next318.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge.us, label %scalar.ph, !llvm.loop !25

._crit_edge.us:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %103 = add nuw i32 %.0207236.us, 1
  %exitcond320.not = icmp eq i32 %103, %12
  br i1 %exitcond320.not, label %.preheader228, label %.preheader229.us, !llvm.loop !26

104:                                              ; preds = %.lr.ph, %104
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %104 ]
  %105 = load ptr, ptr %0, align 8, !tbaa !27
  %106 = load ptr, ptr %7, align 8, !tbaa !29
  %107 = trunc nuw i64 %indvars.iv to i32
  %108 = shl nuw nsw i64 %indvars.iv, 2
  %109 = and i64 %108, 4294967292
  %110 = or disjoint i64 %109, 3
  %111 = getelementptr inbounds float, ptr %106, i64 %110
  %112 = load float, ptr %111, align 4, !tbaa !17
  %113 = tail call float @gaussians_1d_eval(ptr noundef %105, float noundef %112) #3
  %114 = load ptr, ptr %8, align 8, !tbaa !14
  %115 = getelementptr inbounds float, ptr %114, i64 %indvars.iv
  store float %113, ptr %115, align 4, !tbaa !17
  %116 = load ptr, ptr %9, align 8, !tbaa !30
  %117 = load ptr, ptr %7, align 8, !tbaa !29
  %118 = getelementptr inbounds float, ptr %117, i64 %110
  %119 = load float, ptr %118, align 4, !tbaa !17
  %120 = tail call float @gaussians_1d_eval(ptr noundef %116, float noundef %119) #3
  %121 = load ptr, ptr %8, align 8, !tbaa !14
  %122 = load i32, ptr %2, align 8, !tbaa !15
  %123 = add i32 %122, %107
  %124 = zext i32 %123 to i64
  %125 = getelementptr inbounds float, ptr %121, i64 %124
  store float %120, ptr %125, align 4, !tbaa !17
  %126 = load float, ptr %10, align 8, !tbaa !31
  %127 = shl i32 %122, 1
  %128 = add i32 %127, %107
  %129 = zext i32 %128 to i64
  %130 = getelementptr inbounds float, ptr %121, i64 %129
  store float %126, ptr %130, align 4, !tbaa !17
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %131 = load i32, ptr %1, align 8, !tbaa !5
  %132 = zext i32 %131 to i64
  %133 = icmp ult i64 %indvars.iv.next, %132
  br i1 %133, label %104, label %.preheader230, !llvm.loop !32

.preheader228:                                    ; preds = %._crit_edge.us, %.preheader230
  %134 = phi i32 [ 0, %.preheader230 ], [ %12, %._crit_edge.us ]
  %.not292 = icmp eq i32 %131, 0
  br i1 %.not292, label %._crit_edge245, label %.preheader227.lr.ph

.preheader227.lr.ph:                              ; preds = %.preheader228
  %135 = getelementptr inbounds i8, ptr %1, i64 8
  %136 = load i32, ptr %135, align 8, !tbaa !33
  %.not293 = icmp eq i32 %136, 0
  %137 = getelementptr inbounds i8, ptr %1, i64 24
  %138 = getelementptr inbounds i8, ptr %1, i64 32
  br i1 %.not293, label %.preheader225.lr.ph, label %.preheader227.us.preheader

.preheader227.us.preheader:                       ; preds = %.preheader227.lr.ph
  %139 = zext i32 %131 to i64
  %wide.trip.count324 = zext i32 %136 to i64
  %140 = load ptr, ptr %137, align 8, !tbaa !14
  %141 = load i32, ptr %2, align 8, !tbaa !15
  %142 = shl i32 %141, 1
  %143 = shl i32 %141, 1
  br label %.preheader227.us

.preheader227.us:                                 ; preds = %.preheader227.us.preheader, %._crit_edge.us241
  %indvars.iv326 = phi i64 [ 0, %.preheader227.us.preheader ], [ %indvars.iv.next327, %._crit_edge.us241 ]
  %144 = trunc nuw i64 %indvars.iv326 to i32
  %145 = trunc nuw i64 %indvars.iv326 to i32
  %146 = trunc nuw i64 %indvars.iv326 to i32
  %147 = getelementptr inbounds float, ptr %140, i64 %indvars.iv326
  %148 = add i32 %142, %144
  %149 = zext i32 %148 to i64
  %150 = getelementptr inbounds float, ptr %140, i64 %149
  %151 = add i32 %141, %145
  %152 = zext i32 %151 to i64
  %153 = getelementptr inbounds float, ptr %140, i64 %152
  %154 = add i32 %143, %145
  %155 = zext i32 %154 to i64
  %156 = getelementptr inbounds float, ptr %140, i64 %155
  %157 = getelementptr inbounds float, ptr %140, i64 %indvars.iv326
  br label %158

158:                                              ; preds = %.preheader227.us, %191
  %indvars.iv321 = phi i64 [ 0, %.preheader227.us ], [ %indvars.iv.next322, %191 ]
  %159 = trunc nuw i64 %indvars.iv321 to i32
  switch i32 %159, label %176 [
    i32 0, label %170
    i32 1, label %160
  ]

160:                                              ; preds = %158
  %161 = load float, ptr %147, align 4, !tbaa !17
  %162 = load float, ptr %150, align 4, !tbaa !17
  %163 = fmul float %161, %162
  %164 = load ptr, ptr %138, align 8, !tbaa !34
  %165 = trunc i64 %indvars.iv321 to i32
  %166 = mul i32 %131, %165
  %167 = add i32 %166, %144
  %168 = zext i32 %167 to i64
  %169 = getelementptr inbounds float, ptr %164, i64 %168
  store float %163, ptr %169, align 4, !tbaa !17
  br label %191

170:                                              ; preds = %158
  %171 = load float, ptr %153, align 4, !tbaa !17
  %172 = load float, ptr %156, align 4, !tbaa !17
  %173 = fmul float %171, %172
  %174 = load ptr, ptr %138, align 8, !tbaa !34
  %175 = getelementptr inbounds float, ptr %174, i64 %indvars.iv326
  store float %173, ptr %175, align 4, !tbaa !17
  br label %191

176:                                              ; preds = %158
  %177 = load float, ptr %157, align 4, !tbaa !17
  %178 = trunc i64 %indvars.iv321 to i32
  %179 = add i32 %178, 1
  %180 = mul i32 %141, %179
  %181 = add i32 %180, %146
  %182 = zext i32 %181 to i64
  %183 = getelementptr inbounds float, ptr %140, i64 %182
  %184 = load float, ptr %183, align 4, !tbaa !17
  %185 = fmul float %177, %184
  %186 = load ptr, ptr %138, align 8, !tbaa !34
  %187 = mul i32 %131, %159
  %188 = add i32 %187, %146
  %189 = zext i32 %188 to i64
  %190 = getelementptr inbounds float, ptr %186, i64 %189
  store float %185, ptr %190, align 4, !tbaa !17
  br label %191

191:                                              ; preds = %176, %170, %160
  %indvars.iv.next322 = add nuw nsw i64 %indvars.iv321, 1
  %exitcond325.not = icmp eq i64 %indvars.iv.next322, %wide.trip.count324
  br i1 %exitcond325.not, label %._crit_edge.us241, label %158, !llvm.loop !35

._crit_edge.us241:                                ; preds = %191
  %indvars.iv.next327 = add nuw nsw i64 %indvars.iv326, 1
  %exitcond330.not = icmp eq i64 %indvars.iv.next327, %139
  br i1 %exitcond330.not, label %.preheader226, label %.preheader227.us, !llvm.loop !36

.preheader226:                                    ; preds = %._crit_edge.us241
  br i1 %.not292, label %._crit_edge245, label %.preheader225.lr.ph

.preheader225.lr.ph:                              ; preds = %.preheader227.lr.ph, %.preheader226
  %192 = getelementptr inbounds i8, ptr %1, i64 8
  %193 = load i32, ptr %192, align 8, !tbaa !33
  %.not295 = icmp eq i32 %193, 0
  %194 = getelementptr inbounds i8, ptr %0, i64 24
  %195 = getelementptr inbounds i8, ptr %1, i64 40
  %196 = getelementptr inbounds i8, ptr %0, i64 20
  %197 = getelementptr inbounds i8, ptr %0, i64 28
  br i1 %.not295, label %._crit_edge245, label %.preheader225.us.preheader

.preheader225.us.preheader:                       ; preds = %.preheader225.lr.ph
  %198 = zext i32 %131 to i64
  %wide.trip.count334 = zext i32 %193 to i64
  %xtraiter480 = and i64 %wide.trip.count334, 1
  %199 = icmp eq i32 %193, 1
  %unroll_iter = and i64 %wide.trip.count334, 4294967294
  %lcmp.mod481.not = icmp eq i64 %xtraiter480, 0
  br label %.preheader225.us

.preheader225.us:                                 ; preds = %.preheader225.us.preheader, %._crit_edge.us246
  %indvars.iv336 = phi i64 [ 0, %.preheader225.us.preheader ], [ %indvars.iv.next337, %._crit_edge.us246 ]
  %200 = trunc nuw i64 %indvars.iv336 to i32
  %201 = trunc nuw i64 %indvars.iv336 to i32
  br i1 %199, label %._crit_edge.us246.unr-lcssa, label %.preheader225.us.new

.preheader225.us.new:                             ; preds = %.preheader225.us
  %202 = load ptr, ptr %195, align 8, !tbaa !37
  br label %203

203:                                              ; preds = %203, %.preheader225.us.new
  %indvars.iv331 = phi i64 [ 0, %.preheader225.us.new ], [ %indvars.iv.next332.1, %203 ]
  %niter = phi i64 [ 0, %.preheader225.us.new ], [ %niter.next.1, %203 ]
  %204 = trunc nuw i64 %indvars.iv331 to i32
  %cond = icmp eq i32 %204, 0
  %205 = mul i32 %131, %204
  %206 = add i32 %205, %201
  %207 = zext i32 %206 to i64
  %.sink444 = select i1 %cond, i64 %indvars.iv336, i64 %207
  %.sink.in = select i1 %cond, ptr %196, ptr %197
  %.sink = load float, ptr %.sink.in, align 4, !tbaa !17
  %208 = getelementptr inbounds float, ptr %202, i64 %.sink444
  store float %.sink, ptr %208, align 4, !tbaa !17
  %indvars.iv.next332 = or disjoint i64 %indvars.iv331, 1
  %209 = trunc nuw i64 %indvars.iv.next332 to i32
  %cond500 = icmp eq i32 %209, 1
  %210 = mul i32 %131, %209
  %211 = add i32 %210, %201
  %212 = zext i32 %211 to i64
  %213 = trunc i64 %indvars.iv.next332 to i32
  %214 = mul i32 %131, %213
  %215 = add i32 %214, %200
  %216 = zext i32 %215 to i64
  %.sink444.1 = select i1 %cond500, i64 %216, i64 %212
  %.sink.in.1 = select i1 %cond500, ptr %194, ptr %197
  %.sink.1 = load float, ptr %.sink.in.1, align 4, !tbaa !17
  %217 = getelementptr inbounds float, ptr %202, i64 %.sink444.1
  store float %.sink.1, ptr %217, align 4, !tbaa !17
  %indvars.iv.next332.1 = add nuw nsw i64 %indvars.iv331, 2
  %niter.next.1 = add i64 %niter, 2
  %niter.ncmp.1 = icmp eq i64 %niter.next.1, %unroll_iter
  br i1 %niter.ncmp.1, label %._crit_edge.us246.unr-lcssa, label %203, !llvm.loop !38

._crit_edge.us246.unr-lcssa:                      ; preds = %203, %.preheader225.us
  %indvars.iv331.unr = phi i64 [ 0, %.preheader225.us ], [ %indvars.iv.next332.1, %203 ]
  br i1 %lcmp.mod481.not, label %._crit_edge.us246, label %.epil.preheader

.epil.preheader:                                  ; preds = %._crit_edge.us246.unr-lcssa
  %218 = trunc nuw i64 %indvars.iv331.unr to i32
  %219 = load ptr, ptr %195, align 8, !tbaa !37
  switch i32 %218, label %225 [
    i32 0, label %._crit_edge.us246.epilog-lcssa
    i32 1, label %220
  ]

220:                                              ; preds = %.epil.preheader
  %221 = trunc i64 %indvars.iv331.unr to i32
  %222 = mul i32 %131, %221
  %223 = add i32 %222, %200
  %224 = zext i32 %223 to i64
  br label %._crit_edge.us246.epilog-lcssa

225:                                              ; preds = %.epil.preheader
  %226 = mul i32 %131, %218
  %227 = add i32 %226, %201
  %228 = zext i32 %227 to i64
  br label %._crit_edge.us246.epilog-lcssa

._crit_edge.us246.epilog-lcssa:                   ; preds = %225, %220, %.epil.preheader
  %.sink444.epil = phi i64 [ %228, %225 ], [ %224, %220 ], [ %indvars.iv336, %.epil.preheader ]
  %.sink.in.epil = phi ptr [ %197, %225 ], [ %194, %220 ], [ %196, %.epil.preheader ]
  %.sink.epil = load float, ptr %.sink.in.epil, align 4, !tbaa !17
  %229 = getelementptr inbounds float, ptr %219, i64 %.sink444.epil
  store float %.sink.epil, ptr %229, align 4, !tbaa !17
  br label %._crit_edge.us246

._crit_edge.us246:                                ; preds = %._crit_edge.us246.unr-lcssa, %._crit_edge.us246.epilog-lcssa
  %indvars.iv.next337 = add nuw nsw i64 %indvars.iv336, 1
  %exitcond340.not = icmp eq i64 %indvars.iv.next337, %198
  br i1 %exitcond340.not, label %._crit_edge245, label %.preheader225.us, !llvm.loop !39

._crit_edge245:                                   ; preds = %._crit_edge.us246, %.preheader230.thread, %.preheader228, %.preheader229.lr.ph, %.preheader225.lr.ph, %.preheader226
  %.not290412421429 = phi i1 [ %.not290, %.preheader226 ], [ %.not290, %.preheader225.lr.ph ], [ false, %.preheader229.lr.ph ], [ %.not290408, %.preheader230.thread ], [ %.not290, %.preheader228 ], [ %.not290, %._crit_edge.us246 ]
  %230 = phi i32 [ %134, %.preheader226 ], [ %134, %.preheader225.lr.ph ], [ %12, %.preheader229.lr.ph ], [ %14, %.preheader230.thread ], [ %134, %.preheader228 ], [ %134, %._crit_edge.us246 ]
  %.lcssa232410422428 = phi i32 [ %131, %.preheader226 ], [ %131, %.preheader225.lr.ph ], [ 0, %.preheader229.lr.ph ], [ 0, %.preheader230.thread ], [ 0, %.preheader228 ], [ %131, %._crit_edge.us246 ]
  %.not292423427 = phi i1 [ true, %.preheader226 ], [ false, %.preheader225.lr.ph ], [ true, %.preheader229.lr.ph ], [ true, %.preheader230.thread ], [ true, %.preheader228 ], [ false, %._crit_edge.us246 ]
  %231 = getelementptr inbounds i8, ptr %1, i64 12
  %232 = load i32, ptr %231, align 4, !tbaa !40
  %.not296 = icmp eq i32 %232, 0
  br i1 %.not296, label %.preheader223, label %.lr.ph252

.lr.ph252:                                        ; preds = %._crit_edge245
  %233 = getelementptr inbounds i8, ptr %0, i64 32
  %234 = load float, ptr %233, align 8, !tbaa !41
  %235 = getelementptr inbounds i8, ptr %1, i64 48
  %236 = load ptr, ptr %235, align 8, !tbaa !42
  %237 = getelementptr inbounds i8, ptr %1, i64 56
  %238 = load ptr, ptr %237, align 8, !tbaa !43
  %239 = getelementptr inbounds i8, ptr %1, i64 16
  %240 = getelementptr inbounds i8, ptr %1, i64 32
  %241 = getelementptr inbounds i8, ptr %1, i64 40
  %242 = getelementptr inbounds i8, ptr %1, i64 64
  %243 = load ptr, ptr %242, align 8, !tbaa !44
  %wide.trip.count349 = zext i32 %232 to i64
  %wide.trip.count344 = zext i32 %.lcssa232410422428 to i64
  br label %249

.preheader224:                                    ; preds = %._crit_edge
  br i1 %.not296, label %.preheader223, label %.lr.ph256

.lr.ph256:                                        ; preds = %.preheader224
  %244 = getelementptr inbounds i8, ptr %1, i64 64
  %245 = load ptr, ptr %244, align 8, !tbaa !44
  %wide.trip.count354 = zext i32 %232 to i64
  %min.iters.check455 = icmp ult i32 %232, 4
  br i1 %min.iters.check455, label %scalar.ph454.preheader, label %vector.ph456

scalar.ph454.preheader:                           ; preds = %middle.block453, %.lr.ph256
  %indvars.iv351.ph = phi i64 [ 0, %.lr.ph256 ], [ %n.vec458, %middle.block453 ]
  br label %scalar.ph454

vector.ph456:                                     ; preds = %.lr.ph256
  %n.vec458 = and i64 %wide.trip.count349, 4294967292
  %broadcast.splatinsert = insertelement <4 x float> poison, float %281, i64 0
  %broadcast.splat = shufflevector <4 x float> %broadcast.splatinsert, <4 x float> poison, <4 x i32> zeroinitializer
  br label %vector.body460

vector.body460:                                   ; preds = %vector.body460, %vector.ph456
  %index461 = phi i64 [ 0, %vector.ph456 ], [ %index.next463, %vector.body460 ]
  %246 = getelementptr inbounds float, ptr %245, i64 %index461
  %wide.load462 = load <4 x float>, ptr %246, align 4, !tbaa !17
  %247 = fdiv <4 x float> %wide.load462, %broadcast.splat
  store <4 x float> %247, ptr %246, align 4, !tbaa !17
  %index.next463 = add nuw i64 %index461, 4
  %248 = icmp eq i64 %index.next463, %n.vec458
  br i1 %248, label %middle.block453, label %vector.body460, !llvm.loop !45

middle.block453:                                  ; preds = %vector.body460
  %cmp.n464 = icmp eq i64 %n.vec458, %wide.trip.count349
  br i1 %cmp.n464, label %.preheader223, label %scalar.ph454.preheader

249:                                              ; preds = %.lr.ph252, %._crit_edge
  %indvars.iv346 = phi i64 [ 0, %.lr.ph252 ], [ %indvars.iv.next347, %._crit_edge ]
  %.0203250 = phi float [ %234, %.lr.ph252 ], [ %281, %._crit_edge ]
  %250 = getelementptr inbounds float, ptr %236, i64 %indvars.iv346
  store float 1.000000e+00, ptr %250, align 4, !tbaa !17
  %251 = getelementptr inbounds float, ptr %238, i64 %indvars.iv346
  store float 1.000000e+00, ptr %251, align 4, !tbaa !17
  br i1 %.not292423427, label %._crit_edge, label %.lr.ph248

.lr.ph248:                                        ; preds = %249
  %252 = load ptr, ptr %239, align 8, !tbaa !46
  %253 = getelementptr inbounds i8, ptr %252, i64 8
  %254 = load ptr, ptr %253, align 8, !tbaa !47
  %255 = trunc nuw i64 %indvars.iv346 to i32
  %256 = mul i32 %.lcssa232410422428, %255
  %257 = load ptr, ptr %240, align 8, !tbaa !34
  %258 = load ptr, ptr %241, align 8, !tbaa !37
  br label %259

259:                                              ; preds = %.lr.ph248, %259
  %indvars.iv341 = phi i64 [ 0, %.lr.ph248 ], [ %indvars.iv.next342, %259 ]
  %260 = trunc nuw i64 %indvars.iv341 to i32
  %261 = add i32 %256, %260
  %262 = zext i32 %261 to i64
  %263 = getelementptr inbounds i32, ptr %254, i64 %262
  %264 = load i32, ptr %263, align 4, !tbaa !49
  %265 = add nsw i32 %264, 2
  %266 = mul i32 %265, %.lcssa232410422428
  %267 = add i32 %266, %260
  %268 = zext i32 %267 to i64
  %269 = getelementptr inbounds float, ptr %257, i64 %268
  %270 = load float, ptr %269, align 4, !tbaa !17
  %271 = load float, ptr %250, align 4, !tbaa !17
  %272 = fmul float %270, %271
  store float %272, ptr %250, align 4, !tbaa !17
  %273 = getelementptr inbounds float, ptr %258, i64 %268
  %274 = load float, ptr %273, align 4, !tbaa !17
  %275 = load float, ptr %251, align 4, !tbaa !17
  %276 = fmul float %274, %275
  store float %276, ptr %251, align 4, !tbaa !17
  %indvars.iv.next342 = add nuw nsw i64 %indvars.iv341, 1
  %exitcond345.not = icmp eq i64 %indvars.iv.next342, %wide.trip.count344
  br i1 %exitcond345.not, label %._crit_edge, label %259, !llvm.loop !50

._crit_edge:                                      ; preds = %259, %249
  %277 = phi float [ 1.000000e+00, %249 ], [ %276, %259 ]
  %278 = load float, ptr %250, align 4, !tbaa !17
  %279 = fmul float %278, %277
  %280 = getelementptr inbounds float, ptr %243, i64 %indvars.iv346
  store float %279, ptr %280, align 4, !tbaa !17
  %281 = fadd float %.0203250, %279
  %indvars.iv.next347 = add nuw nsw i64 %indvars.iv346, 1
  %exitcond350.not = icmp eq i64 %indvars.iv.next347, %wide.trip.count349
  br i1 %exitcond350.not, label %.preheader224, label %249, !llvm.loop !51

.preheader223:                                    ; preds = %scalar.ph454, %middle.block453, %._crit_edge245, %.preheader224
  br i1 %.not290412421429, label %._crit_edge266, label %.preheader222.lr.ph

.preheader222.lr.ph:                              ; preds = %.preheader223
  %282 = getelementptr inbounds i8, ptr %1, i64 16
  %283 = getelementptr inbounds i8, ptr %1, i64 64
  br i1 %.not292423427, label %.lr.ph284.thread, label %.preheader222.lr.ph.split.us

.preheader222.lr.ph.split.us:                     ; preds = %.preheader222.lr.ph
  %284 = getelementptr inbounds i8, ptr %4, i64 16
  %285 = load ptr, ptr %284, align 8, !tbaa !52
  br i1 %.not296, label %.preheader222.us.preheader, label %.preheader222.lr.ph.split.us.split.us

.preheader222.us.preheader:                       ; preds = %.preheader222.lr.ph.split.us
  %wide.trip.count370 = zext i32 %.lcssa232410422428 to i64
  %286 = add nsw i64 %wide.trip.count370, -1
  %min.iters.check468 = icmp ult i32 %.lcssa232410422428, 8
  %287 = trunc i64 %286 to i32
  %288 = icmp ugt i64 %286, 4294967295
  %n.vec471 = and i64 %wide.trip.count370, 4294967288
  %cmp.n476 = icmp eq i64 %n.vec471, %wide.trip.count370
  %xtraiter487 = and i64 %wide.trip.count370, 3
  %lcmp.mod488.not = icmp eq i64 %xtraiter487, 0
  br label %.preheader222.us

.preheader222.lr.ph.split.us.split.us:            ; preds = %.preheader222.lr.ph.split.us
  %289 = load ptr, ptr %282, align 8, !tbaa !46
  %290 = getelementptr inbounds i8, ptr %289, i64 8
  %291 = load ptr, ptr %290, align 8, !tbaa !47
  %wide.trip.count364 = zext i32 %.lcssa232410422428 to i64
  %wide.trip.count359 = zext i32 %232 to i64
  %xtraiter483 = and i64 %wide.trip.count359, 1
  %292 = icmp eq i32 %232, 1
  %unroll_iter485 = and i64 %wide.trip.count359, 4294967294
  %lcmp.mod484.not = icmp eq i64 %xtraiter483, 0
  br label %.preheader222.us.us

.preheader222.us.us:                              ; preds = %._crit_edge263.split.us.us.us, %.preheader222.lr.ph.split.us.split.us
  %.1208264.us.us = phi i32 [ 0, %.preheader222.lr.ph.split.us.split.us ], [ %339, %._crit_edge263.split.us.us.us ]
  %293 = mul i32 %.1208264.us.us, %.lcssa232410422428
  br label %.lr.ph259.us.us.us

.lr.ph259.us.us.us:                               ; preds = %._crit_edge260.us.us.us, %.preheader222.us.us
  %indvars.iv361 = phi i64 [ %indvars.iv.next362, %._crit_edge260.us.us.us ], [ 0, %.preheader222.us.us ]
  %294 = trunc nuw i64 %indvars.iv361 to i32
  %295 = add i32 %293, %294
  %296 = zext i32 %295 to i64
  %297 = getelementptr inbounds float, ptr %285, i64 %296
  store float 0.000000e+00, ptr %297, align 4, !tbaa !17
  br i1 %292, label %._crit_edge260.us.us.us.unr-lcssa, label %.lr.ph259.us.us.us.new

.lr.ph259.us.us.us.new:                           ; preds = %.lr.ph259.us.us.us, %325
  %298 = phi float [ %326, %325 ], [ 0.000000e+00, %.lr.ph259.us.us.us ]
  %indvars.iv356 = phi i64 [ %indvars.iv.next357.1, %325 ], [ 0, %.lr.ph259.us.us.us ]
  %niter486 = phi i64 [ %niter486.next.1, %325 ], [ 0, %.lr.ph259.us.us.us ]
  %299 = trunc nuw i64 %indvars.iv356 to i32
  %300 = mul i32 %.lcssa232410422428, %299
  %301 = add i32 %300, %294
  %302 = zext i32 %301 to i64
  %303 = getelementptr inbounds i32, ptr %291, i64 %302
  %304 = load i32, ptr %303, align 4, !tbaa !49
  %305 = icmp eq i32 %304, %.1208264.us.us
  br i1 %305, label %306, label %311

306:                                              ; preds = %.lr.ph259.us.us.us.new
  %307 = load ptr, ptr %283, align 8, !tbaa !44
  %308 = getelementptr inbounds float, ptr %307, i64 %indvars.iv356
  %309 = load float, ptr %308, align 4, !tbaa !17
  %310 = fadd float %309, %298
  store float %310, ptr %297, align 4, !tbaa !17
  br label %311

311:                                              ; preds = %306, %.lr.ph259.us.us.us.new
  %312 = phi float [ %310, %306 ], [ %298, %.lr.ph259.us.us.us.new ]
  %indvars.iv.next357 = or disjoint i64 %indvars.iv356, 1
  %313 = trunc nuw i64 %indvars.iv.next357 to i32
  %314 = mul i32 %.lcssa232410422428, %313
  %315 = add i32 %314, %294
  %316 = zext i32 %315 to i64
  %317 = getelementptr inbounds i32, ptr %291, i64 %316
  %318 = load i32, ptr %317, align 4, !tbaa !49
  %319 = icmp eq i32 %318, %.1208264.us.us
  br i1 %319, label %320, label %325

320:                                              ; preds = %311
  %321 = load ptr, ptr %283, align 8, !tbaa !44
  %322 = getelementptr inbounds float, ptr %321, i64 %indvars.iv.next357
  %323 = load float, ptr %322, align 4, !tbaa !17
  %324 = fadd float %323, %312
  store float %324, ptr %297, align 4, !tbaa !17
  br label %325

325:                                              ; preds = %320, %311
  %326 = phi float [ %324, %320 ], [ %312, %311 ]
  %indvars.iv.next357.1 = add nuw nsw i64 %indvars.iv356, 2
  %niter486.next.1 = add i64 %niter486, 2
  %niter486.ncmp.1 = icmp eq i64 %niter486.next.1, %unroll_iter485
  br i1 %niter486.ncmp.1, label %._crit_edge260.us.us.us.unr-lcssa, label %.lr.ph259.us.us.us.new, !llvm.loop !54

._crit_edge260.us.us.us.unr-lcssa:                ; preds = %325, %.lr.ph259.us.us.us
  %.unr = phi float [ 0.000000e+00, %.lr.ph259.us.us.us ], [ %326, %325 ]
  %indvars.iv356.unr = phi i64 [ 0, %.lr.ph259.us.us.us ], [ %indvars.iv.next357.1, %325 ]
  br i1 %lcmp.mod484.not, label %._crit_edge260.us.us.us, label %.epil.preheader482

.epil.preheader482:                               ; preds = %._crit_edge260.us.us.us.unr-lcssa
  %327 = trunc nuw i64 %indvars.iv356.unr to i32
  %328 = mul i32 %.lcssa232410422428, %327
  %329 = add i32 %328, %294
  %330 = zext i32 %329 to i64
  %331 = getelementptr inbounds i32, ptr %291, i64 %330
  %332 = load i32, ptr %331, align 4, !tbaa !49
  %333 = icmp eq i32 %332, %.1208264.us.us
  br i1 %333, label %334, label %._crit_edge260.us.us.us

334:                                              ; preds = %.epil.preheader482
  %335 = load ptr, ptr %283, align 8, !tbaa !44
  %336 = getelementptr inbounds float, ptr %335, i64 %indvars.iv356.unr
  %337 = load float, ptr %336, align 4, !tbaa !17
  %338 = fadd float %337, %.unr
  store float %338, ptr %297, align 4, !tbaa !17
  br label %._crit_edge260.us.us.us

._crit_edge260.us.us.us:                          ; preds = %.epil.preheader482, %334, %._crit_edge260.us.us.us.unr-lcssa
  %indvars.iv.next362 = add nuw nsw i64 %indvars.iv361, 1
  %exitcond365.not = icmp eq i64 %indvars.iv.next362, %wide.trip.count364
  br i1 %exitcond365.not, label %._crit_edge263.split.us.us.us, label %.lr.ph259.us.us.us, !llvm.loop !55

._crit_edge263.split.us.us.us:                    ; preds = %._crit_edge260.us.us.us
  %339 = add nuw i32 %.1208264.us.us, 1
  %exitcond366.not = icmp eq i32 %339, %230
  br i1 %exitcond366.not, label %._crit_edge266, label %.preheader222.us.us, !llvm.loop !56

.preheader222.us:                                 ; preds = %.preheader222.us.preheader, %._crit_edge263.split.us268
  %.1208264.us = phi i32 [ %376, %._crit_edge263.split.us268 ], [ 0, %.preheader222.us.preheader ]
  %340 = mul i32 %.1208264.us, %.lcssa232410422428
  br i1 %min.iters.check468, label %scalar.ph467.preheader, label %vector.scevcheck465

vector.scevcheck465:                              ; preds = %.preheader222.us
  %341 = mul i32 %.lcssa232410422428, %.1208264.us
  %342 = xor i32 %341, -1
  %343 = icmp ult i32 %342, %287
  %344 = or i1 %343, %288
  br i1 %344, label %scalar.ph467.preheader, label %vector.body473

vector.body473:                                   ; preds = %vector.scevcheck465, %vector.body473
  %index474 = phi i64 [ %index.next475, %vector.body473 ], [ 0, %vector.scevcheck465 ]
  %345 = trunc i64 %index474 to i32
  %346 = add i32 %340, %345
  %347 = zext i32 %346 to i64
  %348 = getelementptr inbounds float, ptr %285, i64 %347
  %349 = getelementptr inbounds i8, ptr %348, i64 16
  store <4 x float> zeroinitializer, ptr %348, align 4, !tbaa !17
  store <4 x float> zeroinitializer, ptr %349, align 4, !tbaa !17
  %index.next475 = add nuw i64 %index474, 8
  %350 = icmp eq i64 %index.next475, %n.vec471
  br i1 %350, label %middle.block466, label %vector.body473, !llvm.loop !57

middle.block466:                                  ; preds = %vector.body473
  br i1 %cmp.n476, label %._crit_edge263.split.us268, label %scalar.ph467.preheader

scalar.ph467.preheader:                           ; preds = %middle.block466, %vector.scevcheck465, %.preheader222.us
  %indvars.iv367.ph = phi i64 [ 0, %vector.scevcheck465 ], [ 0, %.preheader222.us ], [ %n.vec471, %middle.block466 ]
  br i1 %lcmp.mod488.not, label %scalar.ph467.prol.loopexit, label %scalar.ph467.prol

scalar.ph467.prol:                                ; preds = %scalar.ph467.preheader, %scalar.ph467.prol
  %indvars.iv367.prol = phi i64 [ %indvars.iv.next368.prol, %scalar.ph467.prol ], [ %indvars.iv367.ph, %scalar.ph467.preheader ]
  %prol.iter489 = phi i64 [ %prol.iter489.next, %scalar.ph467.prol ], [ 0, %scalar.ph467.preheader ]
  %351 = trunc nuw i64 %indvars.iv367.prol to i32
  %352 = add i32 %340, %351
  %353 = zext i32 %352 to i64
  %354 = getelementptr inbounds float, ptr %285, i64 %353
  store float 0.000000e+00, ptr %354, align 4, !tbaa !17
  %indvars.iv.next368.prol = add nuw nsw i64 %indvars.iv367.prol, 1
  %prol.iter489.next = add i64 %prol.iter489, 1
  %prol.iter489.cmp.not = icmp eq i64 %prol.iter489.next, %xtraiter487
  br i1 %prol.iter489.cmp.not, label %scalar.ph467.prol.loopexit, label %scalar.ph467.prol, !llvm.loop !58

scalar.ph467.prol.loopexit:                       ; preds = %scalar.ph467.prol, %scalar.ph467.preheader
  %indvars.iv367.unr = phi i64 [ %indvars.iv367.ph, %scalar.ph467.preheader ], [ %indvars.iv.next368.prol, %scalar.ph467.prol ]
  %355 = sub nsw i64 %indvars.iv367.ph, %wide.trip.count370
  %356 = icmp ugt i64 %355, -4
  br i1 %356, label %._crit_edge263.split.us268, label %scalar.ph467

scalar.ph467:                                     ; preds = %scalar.ph467.prol.loopexit, %scalar.ph467
  %indvars.iv367 = phi i64 [ %indvars.iv.next368.3, %scalar.ph467 ], [ %indvars.iv367.unr, %scalar.ph467.prol.loopexit ]
  %357 = trunc nuw i64 %indvars.iv367 to i32
  %358 = add i32 %340, %357
  %359 = zext i32 %358 to i64
  %360 = getelementptr inbounds float, ptr %285, i64 %359
  store float 0.000000e+00, ptr %360, align 4, !tbaa !17
  %361 = trunc i64 %indvars.iv367 to i32
  %362 = add i32 %361, 1
  %363 = add i32 %340, %362
  %364 = zext i32 %363 to i64
  %365 = getelementptr inbounds float, ptr %285, i64 %364
  store float 0.000000e+00, ptr %365, align 4, !tbaa !17
  %366 = trunc i64 %indvars.iv367 to i32
  %367 = add i32 %366, 2
  %368 = add i32 %340, %367
  %369 = zext i32 %368 to i64
  %370 = getelementptr inbounds float, ptr %285, i64 %369
  store float 0.000000e+00, ptr %370, align 4, !tbaa !17
  %371 = trunc i64 %indvars.iv367 to i32
  %372 = add i32 %371, 3
  %373 = add i32 %340, %372
  %374 = zext i32 %373 to i64
  %375 = getelementptr inbounds float, ptr %285, i64 %374
  store float 0.000000e+00, ptr %375, align 4, !tbaa !17
  %indvars.iv.next368.3 = add nuw nsw i64 %indvars.iv367, 4
  %exitcond371.not.3 = icmp eq i64 %indvars.iv.next368.3, %wide.trip.count370
  br i1 %exitcond371.not.3, label %._crit_edge263.split.us268, label %scalar.ph467, !llvm.loop !59

._crit_edge263.split.us268:                       ; preds = %scalar.ph467.prol.loopexit, %scalar.ph467, %middle.block466
  %376 = add nuw i32 %.1208264.us, 1
  %exitcond372.not = icmp eq i32 %376, %230
  br i1 %exitcond372.not, label %._crit_edge266, label %.preheader222.us, !llvm.loop !56

scalar.ph454:                                     ; preds = %scalar.ph454.preheader, %scalar.ph454
  %indvars.iv351 = phi i64 [ %indvars.iv.next352, %scalar.ph454 ], [ %indvars.iv351.ph, %scalar.ph454.preheader ]
  %377 = getelementptr inbounds float, ptr %245, i64 %indvars.iv351
  %378 = load float, ptr %377, align 4, !tbaa !17
  %379 = fdiv float %378, %281
  store float %379, ptr %377, align 4, !tbaa !17
  %indvars.iv.next352 = add nuw nsw i64 %indvars.iv351, 1
  %exitcond355.not = icmp eq i64 %indvars.iv.next352, %wide.trip.count354
  br i1 %exitcond355.not, label %.preheader223, label %scalar.ph454, !llvm.loop !60

._crit_edge266:                                   ; preds = %._crit_edge263.split.us.us.us, %._crit_edge263.split.us268, %.preheader223
  %380 = getelementptr inbounds i8, ptr %4, i64 8
  %381 = load ptr, ptr %380, align 8, !tbaa !61
  store float 0.000000e+00, ptr %381, align 4, !tbaa !17
  br i1 %.not292423427, label %.preheader221, label %.lr.ph276

.lr.ph276:                                        ; preds = %._crit_edge266
  %382 = getelementptr inbounds i8, ptr %1, i64 64
  br i1 %.not296, label %.preheader221.thread438, label %.lr.ph276.split.us

.lr.ph276.split.us:                               ; preds = %.lr.ph276
  %383 = getelementptr inbounds i8, ptr %1, i64 16
  %384 = load ptr, ptr %383, align 8, !tbaa !46
  %385 = getelementptr inbounds i8, ptr %384, i64 8
  %386 = load ptr, ptr %385, align 8, !tbaa !47
  %wide.trip.count381 = zext i32 %.lcssa232410422428 to i64
  %wide.trip.count376 = zext i32 %232 to i64
  %xtraiter491 = and i64 %wide.trip.count376, 1
  %387 = icmp eq i32 %232, 1
  %unroll_iter494 = and i64 %wide.trip.count376, 4294967294
  %lcmp.mod493.not = icmp eq i64 %xtraiter491, 0
  br label %.lr.ph272.us

.lr.ph272.us:                                     ; preds = %._crit_edge273.us, %.lr.ph276.split.us
  %indvars.iv378 = phi i64 [ %indvars.iv.next379, %._crit_edge273.us ], [ 0, %.lr.ph276.split.us ]
  %388 = getelementptr inbounds float, ptr %381, i64 %indvars.iv378
  store float 0.000000e+00, ptr %388, align 4, !tbaa !17
  %389 = trunc nuw i64 %indvars.iv378 to i32
  br i1 %387, label %._crit_edge273.us.unr-lcssa, label %.lr.ph272.us.new

.lr.ph272.us.new:                                 ; preds = %.lr.ph272.us, %417
  %390 = phi float [ %418, %417 ], [ 0.000000e+00, %.lr.ph272.us ]
  %indvars.iv373 = phi i64 [ %indvars.iv.next374.1, %417 ], [ 0, %.lr.ph272.us ]
  %niter495 = phi i64 [ %niter495.next.1, %417 ], [ 0, %.lr.ph272.us ]
  %391 = trunc nuw i64 %indvars.iv373 to i32
  %392 = mul i32 %.lcssa232410422428, %391
  %393 = add i32 %392, %389
  %394 = zext i32 %393 to i64
  %395 = getelementptr inbounds i32, ptr %386, i64 %394
  %396 = load i32, ptr %395, align 4, !tbaa !49
  %397 = icmp eq i32 %396, -1
  br i1 %397, label %398, label %403

398:                                              ; preds = %.lr.ph272.us.new
  %399 = load ptr, ptr %382, align 8, !tbaa !44
  %400 = getelementptr inbounds float, ptr %399, i64 %indvars.iv373
  %401 = load float, ptr %400, align 4, !tbaa !17
  %402 = fadd float %401, %390
  store float %402, ptr %388, align 4, !tbaa !17
  br label %403

403:                                              ; preds = %398, %.lr.ph272.us.new
  %404 = phi float [ %402, %398 ], [ %390, %.lr.ph272.us.new ]
  %indvars.iv.next374 = or disjoint i64 %indvars.iv373, 1
  %405 = trunc nuw i64 %indvars.iv.next374 to i32
  %406 = mul i32 %.lcssa232410422428, %405
  %407 = add i32 %406, %389
  %408 = zext i32 %407 to i64
  %409 = getelementptr inbounds i32, ptr %386, i64 %408
  %410 = load i32, ptr %409, align 4, !tbaa !49
  %411 = icmp eq i32 %410, -1
  br i1 %411, label %412, label %417

412:                                              ; preds = %403
  %413 = load ptr, ptr %382, align 8, !tbaa !44
  %414 = getelementptr inbounds float, ptr %413, i64 %indvars.iv.next374
  %415 = load float, ptr %414, align 4, !tbaa !17
  %416 = fadd float %415, %404
  store float %416, ptr %388, align 4, !tbaa !17
  br label %417

417:                                              ; preds = %412, %403
  %418 = phi float [ %416, %412 ], [ %404, %403 ]
  %indvars.iv.next374.1 = add nuw nsw i64 %indvars.iv373, 2
  %niter495.next.1 = add i64 %niter495, 2
  %niter495.ncmp.1 = icmp eq i64 %niter495.next.1, %unroll_iter494
  br i1 %niter495.ncmp.1, label %._crit_edge273.us.unr-lcssa, label %.lr.ph272.us.new, !llvm.loop !62

._crit_edge273.us.unr-lcssa:                      ; preds = %417, %.lr.ph272.us
  %.unr492 = phi float [ 0.000000e+00, %.lr.ph272.us ], [ %418, %417 ]
  %indvars.iv373.unr = phi i64 [ 0, %.lr.ph272.us ], [ %indvars.iv.next374.1, %417 ]
  br i1 %lcmp.mod493.not, label %._crit_edge273.us, label %.epil.preheader490

.epil.preheader490:                               ; preds = %._crit_edge273.us.unr-lcssa
  %419 = trunc nuw i64 %indvars.iv373.unr to i32
  %420 = mul i32 %.lcssa232410422428, %419
  %421 = add i32 %420, %389
  %422 = zext i32 %421 to i64
  %423 = getelementptr inbounds i32, ptr %386, i64 %422
  %424 = load i32, ptr %423, align 4, !tbaa !49
  %425 = icmp eq i32 %424, -1
  br i1 %425, label %426, label %._crit_edge273.us

426:                                              ; preds = %.epil.preheader490
  %427 = load ptr, ptr %382, align 8, !tbaa !44
  %428 = getelementptr inbounds float, ptr %427, i64 %indvars.iv373.unr
  %429 = load float, ptr %428, align 4, !tbaa !17
  %430 = fadd float %429, %.unr492
  store float %430, ptr %388, align 4, !tbaa !17
  br label %._crit_edge273.us

._crit_edge273.us:                                ; preds = %.epil.preheader490, %426, %._crit_edge273.us.unr-lcssa
  %indvars.iv.next379 = add nuw nsw i64 %indvars.iv378, 1
  %exitcond382.not = icmp eq i64 %indvars.iv.next379, %wide.trip.count381
  br i1 %exitcond382.not, label %.preheader221, label %.lr.ph272.us, !llvm.loop !63

.preheader221:                                    ; preds = %._crit_edge273.us, %._crit_edge266
  br i1 %.not290412421429, label %._crit_edge285, label %.lr.ph284

.preheader221.thread438:                          ; preds = %.lr.ph276
  %431 = zext i32 %.lcssa232410422428 to i64
  %432 = shl nuw nsw i64 %431, 2
  tail call void @llvm.memset.p0.i64(ptr nonnull align 4 %381, i8 0, i64 %432, i1 false), !tbaa !17
  br i1 %.not290412421429, label %._crit_edge285, label %._crit_edge285.sink.split.sink.split

.lr.ph284:                                        ; preds = %.preheader221
  %433 = getelementptr inbounds i8, ptr %4, i64 24
  %434 = load ptr, ptr %433, align 8, !tbaa !64
  %435 = getelementptr inbounds i8, ptr %1, i64 64
  %brmerge = or i1 %.not296, %.not292423427
  br i1 %brmerge, label %._crit_edge285.sink.split, label %.lr.ph284.split.us.split.us

.lr.ph284.thread:                                 ; preds = %.preheader222.lr.ph
  %436 = getelementptr inbounds i8, ptr %4, i64 8
  %437 = load ptr, ptr %436, align 8, !tbaa !61
  store float 0.000000e+00, ptr %437, align 4, !tbaa !17
  br label %._crit_edge285.sink.split.sink.split

.lr.ph284.split.us.split.us:                      ; preds = %.lr.ph284
  %438 = getelementptr inbounds i8, ptr %1, i64 16
  %439 = load ptr, ptr %438, align 8, !tbaa !46
  %440 = getelementptr inbounds i8, ptr %439, i64 8
  %441 = load ptr, ptr %440, align 8, !tbaa !47
  %wide.trip.count399 = zext i32 %230 to i64
  %wide.trip.count394 = zext i32 %232 to i64
  %wide.trip.count389 = zext i32 %.lcssa232410422428 to i64
  br label %.preheader.lr.ph.us.us

.preheader.lr.ph.us.us:                           ; preds = %._crit_edge281.split.us.us.us, %.lr.ph284.split.us.split.us
  %indvars.iv396 = phi i64 [ %indvars.iv.next397, %._crit_edge281.split.us.us.us ], [ 0, %.lr.ph284.split.us.split.us ]
  %442 = getelementptr inbounds float, ptr %434, i64 %indvars.iv396
  store float 0.000000e+00, ptr %442, align 4, !tbaa !17
  br label %.preheader.us.us.us

.preheader.us.us.us:                              ; preds = %.critedge.us.us.us, %.preheader.lr.ph.us.us
  %443 = phi float [ %460, %.critedge.us.us.us ], [ 0.000000e+00, %.preheader.lr.ph.us.us ]
  %indvars.iv391 = phi i64 [ %indvars.iv.next392, %.critedge.us.us.us ], [ 0, %.preheader.lr.ph.us.us ]
  %444 = trunc nuw i64 %indvars.iv391 to i32
  %445 = mul i32 %.lcssa232410422428, %444
  br label %447

446:                                              ; preds = %447
  %indvars.iv.next387 = add nuw nsw i64 %indvars.iv386, 1
  %exitcond390.not = icmp eq i64 %indvars.iv.next387, %wide.trip.count389
  br i1 %exitcond390.not, label %.critedge.us.us.us, label %447, !llvm.loop !65

447:                                              ; preds = %446, %.preheader.us.us.us
  %indvars.iv386 = phi i64 [ %indvars.iv.next387, %446 ], [ 0, %.preheader.us.us.us ]
  %448 = trunc nuw i64 %indvars.iv386 to i32
  %449 = add i32 %445, %448
  %450 = zext i32 %449 to i64
  %451 = getelementptr inbounds i32, ptr %441, i64 %450
  %452 = load i32, ptr %451, align 4, !tbaa !49
  %453 = zext i32 %452 to i64
  %454 = icmp eq i64 %indvars.iv396, %453
  br i1 %454, label %455, label %446

455:                                              ; preds = %447
  %456 = load ptr, ptr %435, align 8, !tbaa !44
  %457 = getelementptr inbounds float, ptr %456, i64 %indvars.iv391
  %458 = load float, ptr %457, align 4, !tbaa !17
  %459 = fadd float %458, %443
  store float %459, ptr %442, align 4, !tbaa !17
  br label %.critedge.us.us.us

.critedge.us.us.us:                               ; preds = %446, %455
  %460 = phi float [ %459, %455 ], [ %443, %446 ]
  %indvars.iv.next392 = add nuw nsw i64 %indvars.iv391, 1
  %exitcond395.not = icmp eq i64 %indvars.iv.next392, %wide.trip.count394
  br i1 %exitcond395.not, label %._crit_edge281.split.us.us.us, label %.preheader.us.us.us, !llvm.loop !66

._crit_edge281.split.us.us.us:                    ; preds = %.critedge.us.us.us
  %indvars.iv.next397 = add nuw nsw i64 %indvars.iv396, 1
  %exitcond400.not = icmp eq i64 %indvars.iv.next397, %wide.trip.count399
  br i1 %exitcond400.not, label %._crit_edge285, label %.preheader.lr.ph.us.us, !llvm.loop !67

._crit_edge285.sink.split.sink.split:             ; preds = %.preheader221.thread438, %.lr.ph284.thread
  %461 = getelementptr inbounds i8, ptr %4, i64 24
  %462 = load ptr, ptr %461, align 8, !tbaa !64
  br label %._crit_edge285.sink.split

._crit_edge285.sink.split:                        ; preds = %._crit_edge285.sink.split.sink.split, %.lr.ph284
  %.sink445 = phi ptr [ %434, %.lr.ph284 ], [ %462, %._crit_edge285.sink.split.sink.split ]
  %463 = zext i32 %230 to i64
  %464 = shl nuw nsw i64 %463, 2
  tail call void @llvm.memset.p0.i64(ptr align 4 %.sink445, i8 0, i64 %464, i1 false), !tbaa !17
  br label %._crit_edge285

._crit_edge285:                                   ; preds = %._crit_edge281.split.us.us.us, %._crit_edge285.sink.split, %.preheader221.thread438, %.preheader221
  ret void
}

declare float @gaussians_1d_eval(ptr noundef, float noundef) local_unnamed_addr #1

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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { "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 nounwind willreturn memory(argmem: write) }
attributes #3 = { 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 0}
!6 = !{!"mixture_obj", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 4}
!12 = !{!13, !10, i64 8}
!13 = !{!"coherences_obj", !7, i64 0, !7, i64 4, !10, i64 8}
!14 = !{!6, !10, i64 24}
!15 = !{!16, !7, i64 0}
!16 = !{!"pots_obj", !7, i64 0, !10, i64 8}
!17 = !{!18, !18, i64 0}
!18 = !{!"float", !8, i64 0}
!19 = distinct !{!19, !20, !21, !22}
!20 = !{!"llvm.loop.mustprogress"}
!21 = !{!"llvm.loop.isvectorized", i32 1}
!22 = !{!"llvm.loop.unroll.runtime.disable"}
!23 = distinct !{!23, !24}
!24 = !{!"llvm.loop.unroll.disable"}
!25 = distinct !{!25, !20, !21}
!26 = distinct !{!26, !20}
!27 = !{!28, !10, i64 0}
!28 = !{!"mixture2mixture_obj", !10, i64 0, !10, i64 8, !18, i64 16, !18, i64 20, !18, i64 24, !18, i64 28, !18, i64 32}
!29 = !{!16, !10, i64 8}
!30 = !{!28, !10, i64 8}
!31 = !{!28, !18, i64 16}
!32 = distinct !{!32, !20}
!33 = !{!6, !7, i64 8}
!34 = !{!6, !10, i64 32}
!35 = distinct !{!35, !20}
!36 = distinct !{!36, !20}
!37 = !{!6, !10, i64 40}
!38 = distinct !{!38, !20}
!39 = distinct !{!39, !20}
!40 = !{!6, !7, i64 12}
!41 = !{!28, !18, i64 32}
!42 = !{!6, !10, i64 48}
!43 = !{!6, !10, i64 56}
!44 = !{!6, !10, i64 64}
!45 = distinct !{!45, !20, !21, !22}
!46 = !{!6, !10, i64 16}
!47 = !{!48, !10, i64 8}
!48 = !{!"assignations_obj", !7, i64 0, !7, i64 4, !10, i64 8}
!49 = !{!7, !7, i64 0}
!50 = distinct !{!50, !20}
!51 = distinct !{!51, !20}
!52 = !{!53, !10, i64 16}
!53 = !{!"postprobs_obj", !7, i64 0, !7, i64 4, !10, i64 8, !10, i64 16, !10, i64 24}
!54 = distinct !{!54, !20}
!55 = distinct !{!55, !20}
!56 = distinct !{!56, !20}
!57 = distinct !{!57, !20, !21, !22}
!58 = distinct !{!58, !24}
!59 = distinct !{!59, !20, !21}
!60 = distinct !{!60, !20, !22, !21}
!61 = !{!53, !10, i64 8}
!62 = distinct !{!62, !20}
!63 = distinct !{!63, !20}
!64 = !{!53, !10, i64 24}
!65 = distinct !{!65, !20}
!66 = distinct !{!66, !20}
!67 = distinct !{!67, !20}


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