; LLVM IR from QUILL-PIC/Quill :: src/maxwell.ll (ZN11fdtd_solver9advance_eEv)

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

%class.maxwell_solver = type { ptr, ptr, ptr, ptr, double, double, double, double, double, double }
%struct.cellb = type { double, double, double }
%struct.cellj = type { double, double, double }
%struct.celle = type { double, double, double }

; 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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

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

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7field3dI5celleE6get_nxEv(ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7field3dI5celleE6get_nyEv(ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7field3dI5celleE6get_nzEv(ptr noundef nonnull align 8 dereferenceable(40)) #3 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) #2 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11fdtd_solver9advance_eEv(ptr noundef nonnull align 8 dereferenceable(80) %0) unnamed_addr #4 align 2 {
  %2 = alloca ptr, align 8
  %3 = alloca i32, align 4
  %4 = alloca i32, align 4
  %5 = alloca i32, align 4
  %6 = alloca i32, align 4
  %7 = alloca i32, align 4
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %15 = alloca i32, align 4
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  store ptr %0, ptr %2, align 8, !tbaa !5
  %19 = load ptr, ptr %2, align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr %3) #5
  %20 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %21 = load ptr, ptr %20, align 8, !tbaa !9
  %22 = call noundef i32 @_ZN7field3dI5celleE6get_nxEv(ptr noundef nonnull align 8 dereferenceable(40) %21)
  store i32 %22, ptr %3, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %4) #5
  %23 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %24 = load ptr, ptr %23, align 8, !tbaa !9
  %25 = call noundef i32 @_ZN7field3dI5celleE6get_nyEv(ptr noundef nonnull align 8 dereferenceable(40) %24)
  store i32 %25, ptr %4, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %5) #5
  %26 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %27 = load ptr, ptr %26, align 8, !tbaa !9
  %28 = call noundef i32 @_ZN7field3dI5celleE6get_nzEv(ptr noundef nonnull align 8 dereferenceable(40) %27)
  store i32 %28, ptr %5, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %6) #5
  store i32 1, ptr %6, align 4, !tbaa !12
  br label %29

29:                                               ; preds = %358, %1
  %30 = load i32, ptr %6, align 4, !tbaa !12
  %31 = load i32, ptr %3, align 4, !tbaa !12
  %32 = sub nsw i32 %31, 1
  %33 = icmp slt i32 %30, %32
  br i1 %33, label %35, label %34

34:                                               ; preds = %29
  store i32 2, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %6) #5
  br label %361

35:                                               ; preds = %29
  call void @llvm.lifetime.start.p0(i64 4, ptr %8) #5
  store i32 1, ptr %8, align 4, !tbaa !12
  br label %36

36:                                               ; preds = %354, %35
  %37 = load i32, ptr %8, align 4, !tbaa !12
  %38 = load i32, ptr %4, align 4, !tbaa !12
  %39 = sub nsw i32 %38, 1
  %40 = icmp slt i32 %37, %39
  br i1 %40, label %42, label %41

41:                                               ; preds = %36
  store i32 5, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %8) #5
  br label %357

42:                                               ; preds = %36
  call void @llvm.lifetime.start.p0(i64 4, ptr %9) #5
  store i32 1, ptr %9, align 4, !tbaa !12
  br label %43

43:                                               ; preds = %350, %42
  %44 = load i32, ptr %9, align 4, !tbaa !12
  %45 = load i32, ptr %5, align 4, !tbaa !12
  %46 = sub nsw i32 %45, 1
  %47 = icmp slt i32 %44, %46
  br i1 %47, label %49, label %48

48:                                               ; preds = %43
  store i32 8, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %9) #5
  br label %353

49:                                               ; preds = %43
  %50 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 8
  %51 = load double, ptr %50, align 8, !tbaa !14
  %52 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %53 = load ptr, ptr %52, align 8, !tbaa !15
  %54 = load i32, ptr %6, align 4, !tbaa !12
  %55 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %53, i32 noundef %54)
  %56 = load ptr, ptr %55, align 8, !tbaa !5
  %57 = load i32, ptr %8, align 4, !tbaa !12
  %58 = sext i32 %57 to i64
  %59 = getelementptr inbounds ptr, ptr %56, i64 %58
  %60 = load ptr, ptr %59, align 8, !tbaa !5
  %61 = load i32, ptr %9, align 4, !tbaa !12
  %62 = sext i32 %61 to i64
  %63 = getelementptr inbounds %struct.cellb, ptr %60, i64 %62
  %64 = getelementptr inbounds %struct.cellb, ptr %63, i32 0, i32 2
  %65 = load double, ptr %64, align 8, !tbaa !16
  %66 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %67 = load ptr, ptr %66, align 8, !tbaa !15
  %68 = load i32, ptr %6, align 4, !tbaa !12
  %69 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %67, i32 noundef %68)
  %70 = load ptr, ptr %69, align 8, !tbaa !5
  %71 = load i32, ptr %8, align 4, !tbaa !12
  %72 = sub nsw i32 %71, 1
  %73 = sext i32 %72 to i64
  %74 = getelementptr inbounds ptr, ptr %70, i64 %73
  %75 = load ptr, ptr %74, align 8, !tbaa !5
  %76 = load i32, ptr %9, align 4, !tbaa !12
  %77 = sext i32 %76 to i64
  %78 = getelementptr inbounds %struct.cellb, ptr %75, i64 %77
  %79 = getelementptr inbounds %struct.cellb, ptr %78, i32 0, i32 2
  %80 = load double, ptr %79, align 8, !tbaa !16
  %81 = fsub double %65, %80
  %82 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 9
  %83 = load double, ptr %82, align 8, !tbaa !18
  %84 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %85 = load ptr, ptr %84, align 8, !tbaa !15
  %86 = load i32, ptr %6, align 4, !tbaa !12
  %87 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %85, i32 noundef %86)
  %88 = load ptr, ptr %87, align 8, !tbaa !5
  %89 = load i32, ptr %8, align 4, !tbaa !12
  %90 = sext i32 %89 to i64
  %91 = getelementptr inbounds ptr, ptr %88, i64 %90
  %92 = load ptr, ptr %91, align 8, !tbaa !5
  %93 = load i32, ptr %9, align 4, !tbaa !12
  %94 = sext i32 %93 to i64
  %95 = getelementptr inbounds %struct.cellb, ptr %92, i64 %94
  %96 = getelementptr inbounds %struct.cellb, ptr %95, i32 0, i32 1
  %97 = load double, ptr %96, align 8, !tbaa !19
  %98 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %99 = load ptr, ptr %98, align 8, !tbaa !15
  %100 = load i32, ptr %6, align 4, !tbaa !12
  %101 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %99, i32 noundef %100)
  %102 = load ptr, ptr %101, align 8, !tbaa !5
  %103 = load i32, ptr %8, align 4, !tbaa !12
  %104 = sext i32 %103 to i64
  %105 = getelementptr inbounds ptr, ptr %102, i64 %104
  %106 = load ptr, ptr %105, align 8, !tbaa !5
  %107 = load i32, ptr %9, align 4, !tbaa !12
  %108 = sub nsw i32 %107, 1
  %109 = sext i32 %108 to i64
  %110 = getelementptr inbounds %struct.cellb, ptr %106, i64 %109
  %111 = getelementptr inbounds %struct.cellb, ptr %110, i32 0, i32 1
  %112 = load double, ptr %111, align 8, !tbaa !19
  %113 = fsub double %97, %112
  %114 = fmul double %83, %113
  %115 = fneg double %114
  %116 = call double @llvm.fmuladd.f64(double %51, double %81, double %115)
  %117 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 3
  %118 = load ptr, ptr %117, align 8, !tbaa !20
  %119 = load i32, ptr %6, align 4, !tbaa !12
  %120 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %118, i32 noundef %119)
  %121 = load ptr, ptr %120, align 8, !tbaa !5
  %122 = load i32, ptr %8, align 4, !tbaa !12
  %123 = sext i32 %122 to i64
  %124 = getelementptr inbounds ptr, ptr %121, i64 %123
  %125 = load ptr, ptr %124, align 8, !tbaa !5
  %126 = load i32, ptr %9, align 4, !tbaa !12
  %127 = sext i32 %126 to i64
  %128 = getelementptr inbounds %struct.cellj, ptr %125, i64 %127
  %129 = getelementptr inbounds %struct.cellj, ptr %128, i32 0, i32 0
  %130 = load double, ptr %129, align 8, !tbaa !21
  %131 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 4
  %132 = load double, ptr %131, align 8, !tbaa !23
  %133 = fneg double %130
  %134 = call double @llvm.fmuladd.f64(double %133, double %132, double %116)
  %135 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %136 = load ptr, ptr %135, align 8, !tbaa !9
  %137 = load i32, ptr %6, align 4, !tbaa !12
  %138 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %136, i32 noundef %137)
  %139 = load ptr, ptr %138, align 8, !tbaa !5
  %140 = load i32, ptr %8, align 4, !tbaa !12
  %141 = sext i32 %140 to i64
  %142 = getelementptr inbounds ptr, ptr %139, i64 %141
  %143 = load ptr, ptr %142, align 8, !tbaa !5
  %144 = load i32, ptr %9, align 4, !tbaa !12
  %145 = sext i32 %144 to i64
  %146 = getelementptr inbounds %struct.celle, ptr %143, i64 %145
  %147 = getelementptr inbounds %struct.celle, ptr %146, i32 0, i32 0
  %148 = load double, ptr %147, align 8, !tbaa !24
  %149 = fadd double %148, %134
  store double %149, ptr %147, align 8, !tbaa !24
  %150 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 7
  %151 = load double, ptr %150, align 8, !tbaa !26
  %152 = fneg double %151
  %153 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %154 = load ptr, ptr %153, align 8, !tbaa !15
  %155 = load i32, ptr %6, align 4, !tbaa !12
  %156 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %154, i32 noundef %155)
  %157 = load ptr, ptr %156, align 8, !tbaa !5
  %158 = load i32, ptr %8, align 4, !tbaa !12
  %159 = sext i32 %158 to i64
  %160 = getelementptr inbounds ptr, ptr %157, i64 %159
  %161 = load ptr, ptr %160, align 8, !tbaa !5
  %162 = load i32, ptr %9, align 4, !tbaa !12
  %163 = sext i32 %162 to i64
  %164 = getelementptr inbounds %struct.cellb, ptr %161, i64 %163
  %165 = getelementptr inbounds %struct.cellb, ptr %164, i32 0, i32 2
  %166 = load double, ptr %165, align 8, !tbaa !16
  %167 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %168 = load ptr, ptr %167, align 8, !tbaa !15
  %169 = load i32, ptr %6, align 4, !tbaa !12
  %170 = sub nsw i32 %169, 1
  %171 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %168, i32 noundef %170)
  %172 = load ptr, ptr %171, align 8, !tbaa !5
  %173 = load i32, ptr %8, align 4, !tbaa !12
  %174 = sext i32 %173 to i64
  %175 = getelementptr inbounds ptr, ptr %172, i64 %174
  %176 = load ptr, ptr %175, align 8, !tbaa !5
  %177 = load i32, ptr %9, align 4, !tbaa !12
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds %struct.cellb, ptr %176, i64 %178
  %180 = getelementptr inbounds %struct.cellb, ptr %179, i32 0, i32 2
  %181 = load double, ptr %180, align 8, !tbaa !16
  %182 = fsub double %166, %181
  %183 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 9
  %184 = load double, ptr %183, align 8, !tbaa !18
  %185 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %186 = load ptr, ptr %185, align 8, !tbaa !15
  %187 = load i32, ptr %6, align 4, !tbaa !12
  %188 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %186, i32 noundef %187)
  %189 = load ptr, ptr %188, align 8, !tbaa !5
  %190 = load i32, ptr %8, align 4, !tbaa !12
  %191 = sext i32 %190 to i64
  %192 = getelementptr inbounds ptr, ptr %189, i64 %191
  %193 = load ptr, ptr %192, align 8, !tbaa !5
  %194 = load i32, ptr %9, align 4, !tbaa !12
  %195 = sext i32 %194 to i64
  %196 = getelementptr inbounds %struct.cellb, ptr %193, i64 %195
  %197 = getelementptr inbounds %struct.cellb, ptr %196, i32 0, i32 0
  %198 = load double, ptr %197, align 8, !tbaa !27
  %199 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %200 = load ptr, ptr %199, align 8, !tbaa !15
  %201 = load i32, ptr %6, align 4, !tbaa !12
  %202 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %200, i32 noundef %201)
  %203 = load ptr, ptr %202, align 8, !tbaa !5
  %204 = load i32, ptr %8, align 4, !tbaa !12
  %205 = sext i32 %204 to i64
  %206 = getelementptr inbounds ptr, ptr %203, i64 %205
  %207 = load ptr, ptr %206, align 8, !tbaa !5
  %208 = load i32, ptr %9, align 4, !tbaa !12
  %209 = sub nsw i32 %208, 1
  %210 = sext i32 %209 to i64
  %211 = getelementptr inbounds %struct.cellb, ptr %207, i64 %210
  %212 = getelementptr inbounds %struct.cellb, ptr %211, i32 0, i32 0
  %213 = load double, ptr %212, align 8, !tbaa !27
  %214 = fsub double %198, %213
  %215 = fmul double %184, %214
  %216 = call double @llvm.fmuladd.f64(double %152, double %182, double %215)
  %217 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 3
  %218 = load ptr, ptr %217, align 8, !tbaa !20
  %219 = load i32, ptr %6, align 4, !tbaa !12
  %220 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %218, i32 noundef %219)
  %221 = load ptr, ptr %220, align 8, !tbaa !5
  %222 = load i32, ptr %8, align 4, !tbaa !12
  %223 = sext i32 %222 to i64
  %224 = getelementptr inbounds ptr, ptr %221, i64 %223
  %225 = load ptr, ptr %224, align 8, !tbaa !5
  %226 = load i32, ptr %9, align 4, !tbaa !12
  %227 = sext i32 %226 to i64
  %228 = getelementptr inbounds %struct.cellj, ptr %225, i64 %227
  %229 = getelementptr inbounds %struct.cellj, ptr %228, i32 0, i32 1
  %230 = load double, ptr %229, align 8, !tbaa !28
  %231 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 5
  %232 = load double, ptr %231, align 8, !tbaa !29
  %233 = fneg double %230
  %234 = call double @llvm.fmuladd.f64(double %233, double %232, double %216)
  %235 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %236 = load ptr, ptr %235, align 8, !tbaa !9
  %237 = load i32, ptr %6, align 4, !tbaa !12
  %238 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %236, i32 noundef %237)
  %239 = load ptr, ptr %238, align 8, !tbaa !5
  %240 = load i32, ptr %8, align 4, !tbaa !12
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds ptr, ptr %239, i64 %241
  %243 = load ptr, ptr %242, align 8, !tbaa !5
  %244 = load i32, ptr %9, align 4, !tbaa !12
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds %struct.celle, ptr %243, i64 %245
  %247 = getelementptr inbounds %struct.celle, ptr %246, i32 0, i32 1
  %248 = load double, ptr %247, align 8, !tbaa !30
  %249 = fadd double %248, %234
  store double %249, ptr %247, align 8, !tbaa !30
  %250 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 7
  %251 = load double, ptr %250, align 8, !tbaa !26
  %252 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %253 = load ptr, ptr %252, align 8, !tbaa !15
  %254 = load i32, ptr %6, align 4, !tbaa !12
  %255 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %253, i32 noundef %254)
  %256 = load ptr, ptr %255, align 8, !tbaa !5
  %257 = load i32, ptr %8, align 4, !tbaa !12
  %258 = sext i32 %257 to i64
  %259 = getelementptr inbounds ptr, ptr %256, i64 %258
  %260 = load ptr, ptr %259, align 8, !tbaa !5
  %261 = load i32, ptr %9, align 4, !tbaa !12
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds %struct.cellb, ptr %260, i64 %262
  %264 = getelementptr inbounds %struct.cellb, ptr %263, i32 0, i32 1
  %265 = load double, ptr %264, align 8, !tbaa !19
  %266 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %267 = load ptr, ptr %266, align 8, !tbaa !15
  %268 = load i32, ptr %6, align 4, !tbaa !12
  %269 = sub nsw i32 %268, 1
  %270 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %267, i32 noundef %269)
  %271 = load ptr, ptr %270, align 8, !tbaa !5
  %272 = load i32, ptr %8, align 4, !tbaa !12
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds ptr, ptr %271, i64 %273
  %275 = load ptr, ptr %274, align 8, !tbaa !5
  %276 = load i32, ptr %9, align 4, !tbaa !12
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds %struct.cellb, ptr %275, i64 %277
  %279 = getelementptr inbounds %struct.cellb, ptr %278, i32 0, i32 1
  %280 = load double, ptr %279, align 8, !tbaa !19
  %281 = fsub double %265, %280
  %282 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 8
  %283 = load double, ptr %282, align 8, !tbaa !14
  %284 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %285 = load ptr, ptr %284, align 8, !tbaa !15
  %286 = load i32, ptr %6, align 4, !tbaa !12
  %287 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %285, i32 noundef %286)
  %288 = load ptr, ptr %287, align 8, !tbaa !5
  %289 = load i32, ptr %8, align 4, !tbaa !12
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds ptr, ptr %288, i64 %290
  %292 = load ptr, ptr %291, align 8, !tbaa !5
  %293 = load i32, ptr %9, align 4, !tbaa !12
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds %struct.cellb, ptr %292, i64 %294
  %296 = getelementptr inbounds %struct.cellb, ptr %295, i32 0, i32 0
  %297 = load double, ptr %296, align 8, !tbaa !27
  %298 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %299 = load ptr, ptr %298, align 8, !tbaa !15
  %300 = load i32, ptr %6, align 4, !tbaa !12
  %301 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %299, i32 noundef %300)
  %302 = load ptr, ptr %301, align 8, !tbaa !5
  %303 = load i32, ptr %8, align 4, !tbaa !12
  %304 = sub nsw i32 %303, 1
  %305 = sext i32 %304 to i64
  %306 = getelementptr inbounds ptr, ptr %302, i64 %305
  %307 = load ptr, ptr %306, align 8, !tbaa !5
  %308 = load i32, ptr %9, align 4, !tbaa !12
  %309 = sext i32 %308 to i64
  %310 = getelementptr inbounds %struct.cellb, ptr %307, i64 %309
  %311 = getelementptr inbounds %struct.cellb, ptr %310, i32 0, i32 0
  %312 = load double, ptr %311, align 8, !tbaa !27
  %313 = fsub double %297, %312
  %314 = fmul double %283, %313
  %315 = fneg double %314
  %316 = call double @llvm.fmuladd.f64(double %251, double %281, double %315)
  %317 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 3
  %318 = load ptr, ptr %317, align 8, !tbaa !20
  %319 = load i32, ptr %6, align 4, !tbaa !12
  %320 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %318, i32 noundef %319)
  %321 = load ptr, ptr %320, align 8, !tbaa !5
  %322 = load i32, ptr %8, align 4, !tbaa !12
  %323 = sext i32 %322 to i64
  %324 = getelementptr inbounds ptr, ptr %321, i64 %323
  %325 = load ptr, ptr %324, align 8, !tbaa !5
  %326 = load i32, ptr %9, align 4, !tbaa !12
  %327 = sext i32 %326 to i64
  %328 = getelementptr inbounds %struct.cellj, ptr %325, i64 %327
  %329 = getelementptr inbounds %struct.cellj, ptr %328, i32 0, i32 2
  %330 = load double, ptr %329, align 8, !tbaa !31
  %331 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 6
  %332 = load double, ptr %331, align 8, !tbaa !32
  %333 = fneg double %330
  %334 = call double @llvm.fmuladd.f64(double %333, double %332, double %316)
  %335 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %336 = load ptr, ptr %335, align 8, !tbaa !9
  %337 = load i32, ptr %6, align 4, !tbaa !12
  %338 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %336, i32 noundef %337)
  %339 = load ptr, ptr %338, align 8, !tbaa !5
  %340 = load i32, ptr %8, align 4, !tbaa !12
  %341 = sext i32 %340 to i64
  %342 = getelementptr inbounds ptr, ptr %339, i64 %341
  %343 = load ptr, ptr %342, align 8, !tbaa !5
  %344 = load i32, ptr %9, align 4, !tbaa !12
  %345 = sext i32 %344 to i64
  %346 = getelementptr inbounds %struct.celle, ptr %343, i64 %345
  %347 = getelementptr inbounds %struct.celle, ptr %346, i32 0, i32 2
  %348 = load double, ptr %347, align 8, !tbaa !33
  %349 = fadd double %348, %334
  store double %349, ptr %347, align 8, !tbaa !33
  br label %350

350:                                              ; preds = %49
  %351 = load i32, ptr %9, align 4, !tbaa !12
  %352 = add nsw i32 %351, 1
  store i32 %352, ptr %9, align 4, !tbaa !12
  br label %43, !llvm.loop !34

353:                                              ; preds = %48
  br label %354

354:                                              ; preds = %353
  %355 = load i32, ptr %8, align 4, !tbaa !12
  %356 = add nsw i32 %355, 1
  store i32 %356, ptr %8, align 4, !tbaa !12
  br label %36, !llvm.loop !36

357:                                              ; preds = %41
  br label %358

358:                                              ; preds = %357
  %359 = load i32, ptr %6, align 4, !tbaa !12
  %360 = add nsw i32 %359, 1
  store i32 %360, ptr %6, align 4, !tbaa !12
  br label %29, !llvm.loop !37

361:                                              ; preds = %34
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  store i32 0, ptr %10, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  store i32 1, ptr %11, align 4, !tbaa !12
  br label %362

362:                                              ; preds = %480, %361
  %363 = load i32, ptr %11, align 4, !tbaa !12
  %364 = load i32, ptr %4, align 4, !tbaa !12
  %365 = sub nsw i32 %364, 1
  %366 = icmp slt i32 %363, %365
  br i1 %366, label %368, label %367

367:                                              ; preds = %362
  store i32 11, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  br label %483

368:                                              ; preds = %362
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  store i32 1, ptr %12, align 4, !tbaa !12
  br label %369

369:                                              ; preds = %476, %368
  %370 = load i32, ptr %12, align 4, !tbaa !12
  %371 = load i32, ptr %5, align 4, !tbaa !12
  %372 = sub nsw i32 %371, 1
  %373 = icmp slt i32 %370, %372
  br i1 %373, label %375, label %374

374:                                              ; preds = %369
  store i32 14, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  br label %479

375:                                              ; preds = %369
  %376 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 8
  %377 = load double, ptr %376, align 8, !tbaa !14
  %378 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %379 = load ptr, ptr %378, align 8, !tbaa !15
  %380 = load i32, ptr %10, align 4, !tbaa !12
  %381 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %379, i32 noundef %380)
  %382 = load ptr, ptr %381, align 8, !tbaa !5
  %383 = load i32, ptr %11, align 4, !tbaa !12
  %384 = sext i32 %383 to i64
  %385 = getelementptr inbounds ptr, ptr %382, i64 %384
  %386 = load ptr, ptr %385, align 8, !tbaa !5
  %387 = load i32, ptr %12, align 4, !tbaa !12
  %388 = sext i32 %387 to i64
  %389 = getelementptr inbounds %struct.cellb, ptr %386, i64 %388
  %390 = getelementptr inbounds %struct.cellb, ptr %389, i32 0, i32 2
  %391 = load double, ptr %390, align 8, !tbaa !16
  %392 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %393 = load ptr, ptr %392, align 8, !tbaa !15
  %394 = load i32, ptr %10, align 4, !tbaa !12
  %395 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %393, i32 noundef %394)
  %396 = load ptr, ptr %395, align 8, !tbaa !5
  %397 = load i32, ptr %11, align 4, !tbaa !12
  %398 = sub nsw i32 %397, 1
  %399 = sext i32 %398 to i64
  %400 = getelementptr inbounds ptr, ptr %396, i64 %399
  %401 = load ptr, ptr %400, align 8, !tbaa !5
  %402 = load i32, ptr %12, align 4, !tbaa !12
  %403 = sext i32 %402 to i64
  %404 = getelementptr inbounds %struct.cellb, ptr %401, i64 %403
  %405 = getelementptr inbounds %struct.cellb, ptr %404, i32 0, i32 2
  %406 = load double, ptr %405, align 8, !tbaa !16
  %407 = fsub double %391, %406
  %408 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 9
  %409 = load double, ptr %408, align 8, !tbaa !18
  %410 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %411 = load ptr, ptr %410, align 8, !tbaa !15
  %412 = load i32, ptr %10, align 4, !tbaa !12
  %413 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %411, i32 noundef %412)
  %414 = load ptr, ptr %413, align 8, !tbaa !5
  %415 = load i32, ptr %11, align 4, !tbaa !12
  %416 = sext i32 %415 to i64
  %417 = getelementptr inbounds ptr, ptr %414, i64 %416
  %418 = load ptr, ptr %417, align 8, !tbaa !5
  %419 = load i32, ptr %12, align 4, !tbaa !12
  %420 = sext i32 %419 to i64
  %421 = getelementptr inbounds %struct.cellb, ptr %418, i64 %420
  %422 = getelementptr inbounds %struct.cellb, ptr %421, i32 0, i32 1
  %423 = load double, ptr %422, align 8, !tbaa !19
  %424 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %425 = load ptr, ptr %424, align 8, !tbaa !15
  %426 = load i32, ptr %10, align 4, !tbaa !12
  %427 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %425, i32 noundef %426)
  %428 = load ptr, ptr %427, align 8, !tbaa !5
  %429 = load i32, ptr %11, align 4, !tbaa !12
  %430 = sext i32 %429 to i64
  %431 = getelementptr inbounds ptr, ptr %428, i64 %430
  %432 = load ptr, ptr %431, align 8, !tbaa !5
  %433 = load i32, ptr %12, align 4, !tbaa !12
  %434 = sub nsw i32 %433, 1
  %435 = sext i32 %434 to i64
  %436 = getelementptr inbounds %struct.cellb, ptr %432, i64 %435
  %437 = getelementptr inbounds %struct.cellb, ptr %436, i32 0, i32 1
  %438 = load double, ptr %437, align 8, !tbaa !19
  %439 = fsub double %423, %438
  %440 = fmul double %409, %439
  %441 = fneg double %440
  %442 = call double @llvm.fmuladd.f64(double %377, double %407, double %441)
  %443 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 3
  %444 = load ptr, ptr %443, align 8, !tbaa !20
  %445 = load i32, ptr %10, align 4, !tbaa !12
  %446 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %444, i32 noundef %445)
  %447 = load ptr, ptr %446, align 8, !tbaa !5
  %448 = load i32, ptr %11, align 4, !tbaa !12
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds ptr, ptr %447, i64 %449
  %451 = load ptr, ptr %450, align 8, !tbaa !5
  %452 = load i32, ptr %12, align 4, !tbaa !12
  %453 = sext i32 %452 to i64
  %454 = getelementptr inbounds %struct.cellj, ptr %451, i64 %453
  %455 = getelementptr inbounds %struct.cellj, ptr %454, i32 0, i32 0
  %456 = load double, ptr %455, align 8, !tbaa !21
  %457 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 4
  %458 = load double, ptr %457, align 8, !tbaa !23
  %459 = fneg double %456
  %460 = call double @llvm.fmuladd.f64(double %459, double %458, double %442)
  %461 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %462 = load ptr, ptr %461, align 8, !tbaa !9
  %463 = load i32, ptr %10, align 4, !tbaa !12
  %464 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %462, i32 noundef %463)
  %465 = load ptr, ptr %464, align 8, !tbaa !5
  %466 = load i32, ptr %11, align 4, !tbaa !12
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds ptr, ptr %465, i64 %467
  %469 = load ptr, ptr %468, align 8, !tbaa !5
  %470 = load i32, ptr %12, align 4, !tbaa !12
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds %struct.celle, ptr %469, i64 %471
  %473 = getelementptr inbounds %struct.celle, ptr %472, i32 0, i32 0
  %474 = load double, ptr %473, align 8, !tbaa !24
  %475 = fadd double %474, %460
  store double %475, ptr %473, align 8, !tbaa !24
  br label %476

476:                                              ; preds = %375
  %477 = load i32, ptr %12, align 4, !tbaa !12
  %478 = add nsw i32 %477, 1
  store i32 %478, ptr %12, align 4, !tbaa !12
  br label %369, !llvm.loop !38

479:                                              ; preds = %374
  br label %480

480:                                              ; preds = %479
  %481 = load i32, ptr %11, align 4, !tbaa !12
  %482 = add nsw i32 %481, 1
  store i32 %482, ptr %11, align 4, !tbaa !12
  br label %362, !llvm.loop !39

483:                                              ; preds = %367
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  store i32 1, ptr %13, align 4, !tbaa !12
  br label %484

484:                                              ; preds = %602, %483
  %485 = load i32, ptr %13, align 4, !tbaa !12
  %486 = load i32, ptr %3, align 4, !tbaa !12
  %487 = sub nsw i32 %486, 1
  %488 = icmp slt i32 %485, %487
  br i1 %488, label %490, label %489

489:                                              ; preds = %484
  store i32 17, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  br label %605

490:                                              ; preds = %484
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  store i32 0, ptr %14, align 4, !tbaa !12
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  store i32 1, ptr %15, align 4, !tbaa !12
  br label %491

491:                                              ; preds = %598, %490
  %492 = load i32, ptr %15, align 4, !tbaa !12
  %493 = load i32, ptr %5, align 4, !tbaa !12
  %494 = sub nsw i32 %493, 1
  %495 = icmp slt i32 %492, %494
  br i1 %495, label %497, label %496

496:                                              ; preds = %491
  store i32 20, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  br label %601

497:                                              ; preds = %491
  %498 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 7
  %499 = load double, ptr %498, align 8, !tbaa !26
  %500 = fneg double %499
  %501 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %502 = load ptr, ptr %501, align 8, !tbaa !15
  %503 = load i32, ptr %13, align 4, !tbaa !12
  %504 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %502, i32 noundef %503)
  %505 = load ptr, ptr %504, align 8, !tbaa !5
  %506 = load i32, ptr %14, align 4, !tbaa !12
  %507 = sext i32 %506 to i64
  %508 = getelementptr inbounds ptr, ptr %505, i64 %507
  %509 = load ptr, ptr %508, align 8, !tbaa !5
  %510 = load i32, ptr %15, align 4, !tbaa !12
  %511 = sext i32 %510 to i64
  %512 = getelementptr inbounds %struct.cellb, ptr %509, i64 %511
  %513 = getelementptr inbounds %struct.cellb, ptr %512, i32 0, i32 2
  %514 = load double, ptr %513, align 8, !tbaa !16
  %515 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %516 = load ptr, ptr %515, align 8, !tbaa !15
  %517 = load i32, ptr %13, align 4, !tbaa !12
  %518 = sub nsw i32 %517, 1
  %519 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %516, i32 noundef %518)
  %520 = load ptr, ptr %519, align 8, !tbaa !5
  %521 = load i32, ptr %14, align 4, !tbaa !12
  %522 = sext i32 %521 to i64
  %523 = getelementptr inbounds ptr, ptr %520, i64 %522
  %524 = load ptr, ptr %523, align 8, !tbaa !5
  %525 = load i32, ptr %15, align 4, !tbaa !12
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds %struct.cellb, ptr %524, i64 %526
  %528 = getelementptr inbounds %struct.cellb, ptr %527, i32 0, i32 2
  %529 = load double, ptr %528, align 8, !tbaa !16
  %530 = fsub double %514, %529
  %531 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 9
  %532 = load double, ptr %531, align 8, !tbaa !18
  %533 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %534 = load ptr, ptr %533, align 8, !tbaa !15
  %535 = load i32, ptr %13, align 4, !tbaa !12
  %536 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %534, i32 noundef %535)
  %537 = load ptr, ptr %536, align 8, !tbaa !5
  %538 = load i32, ptr %14, align 4, !tbaa !12
  %539 = sext i32 %538 to i64
  %540 = getelementptr inbounds ptr, ptr %537, i64 %539
  %541 = load ptr, ptr %540, align 8, !tbaa !5
  %542 = load i32, ptr %15, align 4, !tbaa !12
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds %struct.cellb, ptr %541, i64 %543
  %545 = getelementptr inbounds %struct.cellb, ptr %544, i32 0, i32 0
  %546 = load double, ptr %545, align 8, !tbaa !27
  %547 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %548 = load ptr, ptr %547, align 8, !tbaa !15
  %549 = load i32, ptr %13, align 4, !tbaa !12
  %550 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %548, i32 noundef %549)
  %551 = load ptr, ptr %550, align 8, !tbaa !5
  %552 = load i32, ptr %14, align 4, !tbaa !12
  %553 = sext i32 %552 to i64
  %554 = getelementptr inbounds ptr, ptr %551, i64 %553
  %555 = load ptr, ptr %554, align 8, !tbaa !5
  %556 = load i32, ptr %15, align 4, !tbaa !12
  %557 = sub nsw i32 %556, 1
  %558 = sext i32 %557 to i64
  %559 = getelementptr inbounds %struct.cellb, ptr %555, i64 %558
  %560 = getelementptr inbounds %struct.cellb, ptr %559, i32 0, i32 0
  %561 = load double, ptr %560, align 8, !tbaa !27
  %562 = fsub double %546, %561
  %563 = fmul double %532, %562
  %564 = call double @llvm.fmuladd.f64(double %500, double %530, double %563)
  %565 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 3
  %566 = load ptr, ptr %565, align 8, !tbaa !20
  %567 = load i32, ptr %13, align 4, !tbaa !12
  %568 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %566, i32 noundef %567)
  %569 = load ptr, ptr %568, align 8, !tbaa !5
  %570 = load i32, ptr %14, align 4, !tbaa !12
  %571 = sext i32 %570 to i64
  %572 = getelementptr inbounds ptr, ptr %569, i64 %571
  %573 = load ptr, ptr %572, align 8, !tbaa !5
  %574 = load i32, ptr %15, align 4, !tbaa !12
  %575 = sext i32 %574 to i64
  %576 = getelementptr inbounds %struct.cellj, ptr %573, i64 %575
  %577 = getelementptr inbounds %struct.cellj, ptr %576, i32 0, i32 1
  %578 = load double, ptr %577, align 8, !tbaa !28
  %579 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 5
  %580 = load double, ptr %579, align 8, !tbaa !29
  %581 = fneg double %578
  %582 = call double @llvm.fmuladd.f64(double %581, double %580, double %564)
  %583 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %584 = load ptr, ptr %583, align 8, !tbaa !9
  %585 = load i32, ptr %13, align 4, !tbaa !12
  %586 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %584, i32 noundef %585)
  %587 = load ptr, ptr %586, align 8, !tbaa !5
  %588 = load i32, ptr %14, align 4, !tbaa !12
  %589 = sext i32 %588 to i64
  %590 = getelementptr inbounds ptr, ptr %587, i64 %589
  %591 = load ptr, ptr %590, align 8, !tbaa !5
  %592 = load i32, ptr %15, align 4, !tbaa !12
  %593 = sext i32 %592 to i64
  %594 = getelementptr inbounds %struct.celle, ptr %591, i64 %593
  %595 = getelementptr inbounds %struct.celle, ptr %594, i32 0, i32 1
  %596 = load double, ptr %595, align 8, !tbaa !30
  %597 = fadd double %596, %582
  store double %597, ptr %595, align 8, !tbaa !30
  br label %598

598:                                              ; preds = %497
  %599 = load i32, ptr %15, align 4, !tbaa !12
  %600 = add nsw i32 %599, 1
  store i32 %600, ptr %15, align 4, !tbaa !12
  br label %491, !llvm.loop !40

601:                                              ; preds = %496
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  br label %602

602:                                              ; preds = %601
  %603 = load i32, ptr %13, align 4, !tbaa !12
  %604 = add nsw i32 %603, 1
  store i32 %604, ptr %13, align 4, !tbaa !12
  br label %484, !llvm.loop !41

605:                                              ; preds = %489
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 1, ptr %16, align 4, !tbaa !12
  br label %606

606:                                              ; preds = %724, %605
  %607 = load i32, ptr %16, align 4, !tbaa !12
  %608 = load i32, ptr %3, align 4, !tbaa !12
  %609 = sub nsw i32 %608, 1
  %610 = icmp slt i32 %607, %609
  br i1 %610, label %612, label %611

611:                                              ; preds = %606
  store i32 23, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %727

612:                                              ; preds = %606
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 1, ptr %17, align 4, !tbaa !12
  br label %613

613:                                              ; preds = %720, %612
  %614 = load i32, ptr %17, align 4, !tbaa !12
  %615 = load i32, ptr %4, align 4, !tbaa !12
  %616 = sub nsw i32 %615, 1
  %617 = icmp slt i32 %614, %616
  br i1 %617, label %619, label %618

618:                                              ; preds = %613
  store i32 26, ptr %7, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %723

619:                                              ; preds = %613
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 0, ptr %18, align 4, !tbaa !12
  %620 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 7
  %621 = load double, ptr %620, align 8, !tbaa !26
  %622 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %623 = load ptr, ptr %622, align 8, !tbaa !15
  %624 = load i32, ptr %16, align 4, !tbaa !12
  %625 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %623, i32 noundef %624)
  %626 = load ptr, ptr %625, align 8, !tbaa !5
  %627 = load i32, ptr %17, align 4, !tbaa !12
  %628 = sext i32 %627 to i64
  %629 = getelementptr inbounds ptr, ptr %626, i64 %628
  %630 = load ptr, ptr %629, align 8, !tbaa !5
  %631 = load i32, ptr %18, align 4, !tbaa !12
  %632 = sext i32 %631 to i64
  %633 = getelementptr inbounds %struct.cellb, ptr %630, i64 %632
  %634 = getelementptr inbounds %struct.cellb, ptr %633, i32 0, i32 1
  %635 = load double, ptr %634, align 8, !tbaa !19
  %636 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %637 = load ptr, ptr %636, align 8, !tbaa !15
  %638 = load i32, ptr %16, align 4, !tbaa !12
  %639 = sub nsw i32 %638, 1
  %640 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %637, i32 noundef %639)
  %641 = load ptr, ptr %640, align 8, !tbaa !5
  %642 = load i32, ptr %17, align 4, !tbaa !12
  %643 = sext i32 %642 to i64
  %644 = getelementptr inbounds ptr, ptr %641, i64 %643
  %645 = load ptr, ptr %644, align 8, !tbaa !5
  %646 = load i32, ptr %18, align 4, !tbaa !12
  %647 = sext i32 %646 to i64
  %648 = getelementptr inbounds %struct.cellb, ptr %645, i64 %647
  %649 = getelementptr inbounds %struct.cellb, ptr %648, i32 0, i32 1
  %650 = load double, ptr %649, align 8, !tbaa !19
  %651 = fsub double %635, %650
  %652 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 8
  %653 = load double, ptr %652, align 8, !tbaa !14
  %654 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %655 = load ptr, ptr %654, align 8, !tbaa !15
  %656 = load i32, ptr %16, align 4, !tbaa !12
  %657 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %655, i32 noundef %656)
  %658 = load ptr, ptr %657, align 8, !tbaa !5
  %659 = load i32, ptr %17, align 4, !tbaa !12
  %660 = sext i32 %659 to i64
  %661 = getelementptr inbounds ptr, ptr %658, i64 %660
  %662 = load ptr, ptr %661, align 8, !tbaa !5
  %663 = load i32, ptr %18, align 4, !tbaa !12
  %664 = sext i32 %663 to i64
  %665 = getelementptr inbounds %struct.cellb, ptr %662, i64 %664
  %666 = getelementptr inbounds %struct.cellb, ptr %665, i32 0, i32 0
  %667 = load double, ptr %666, align 8, !tbaa !27
  %668 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 2
  %669 = load ptr, ptr %668, align 8, !tbaa !15
  %670 = load i32, ptr %16, align 4, !tbaa !12
  %671 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %669, i32 noundef %670)
  %672 = load ptr, ptr %671, align 8, !tbaa !5
  %673 = load i32, ptr %17, align 4, !tbaa !12
  %674 = sub nsw i32 %673, 1
  %675 = sext i32 %674 to i64
  %676 = getelementptr inbounds ptr, ptr %672, i64 %675
  %677 = load ptr, ptr %676, align 8, !tbaa !5
  %678 = load i32, ptr %18, align 4, !tbaa !12
  %679 = sext i32 %678 to i64
  %680 = getelementptr inbounds %struct.cellb, ptr %677, i64 %679
  %681 = getelementptr inbounds %struct.cellb, ptr %680, i32 0, i32 0
  %682 = load double, ptr %681, align 8, !tbaa !27
  %683 = fsub double %667, %682
  %684 = fmul double %653, %683
  %685 = fneg double %684
  %686 = call double @llvm.fmuladd.f64(double %621, double %651, double %685)
  %687 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 3
  %688 = load ptr, ptr %687, align 8, !tbaa !20
  %689 = load i32, ptr %16, align 4, !tbaa !12
  %690 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %688, i32 noundef %689)
  %691 = load ptr, ptr %690, align 8, !tbaa !5
  %692 = load i32, ptr %17, align 4, !tbaa !12
  %693 = sext i32 %692 to i64
  %694 = getelementptr inbounds ptr, ptr %691, i64 %693
  %695 = load ptr, ptr %694, align 8, !tbaa !5
  %696 = load i32, ptr %18, align 4, !tbaa !12
  %697 = sext i32 %696 to i64
  %698 = getelementptr inbounds %struct.cellj, ptr %695, i64 %697
  %699 = getelementptr inbounds %struct.cellj, ptr %698, i32 0, i32 2
  %700 = load double, ptr %699, align 8, !tbaa !31
  %701 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 6
  %702 = load double, ptr %701, align 8, !tbaa !32
  %703 = fneg double %700
  %704 = call double @llvm.fmuladd.f64(double %703, double %702, double %686)
  %705 = getelementptr inbounds %class.maxwell_solver, ptr %19, i32 0, i32 1
  %706 = load ptr, ptr %705, align 8, !tbaa !9
  %707 = load i32, ptr %16, align 4, !tbaa !12
  %708 = call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %706, i32 noundef %707)
  %709 = load ptr, ptr %708, align 8, !tbaa !5
  %710 = load i32, ptr %17, align 4, !tbaa !12
  %711 = sext i32 %710 to i64
  %712 = getelementptr inbounds ptr, ptr %709, i64 %711
  %713 = load ptr, ptr %712, align 8, !tbaa !5
  %714 = load i32, ptr %18, align 4, !tbaa !12
  %715 = sext i32 %714 to i64
  %716 = getelementptr inbounds %struct.celle, ptr %713, i64 %715
  %717 = getelementptr inbounds %struct.celle, ptr %716, i32 0, i32 2
  %718 = load double, ptr %717, align 8, !tbaa !33
  %719 = fadd double %718, %704
  store double %719, ptr %717, align 8, !tbaa !33
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %720

720:                                              ; preds = %619
  %721 = load i32, ptr %17, align 4, !tbaa !12
  %722 = add nsw i32 %721, 1
  store i32 %722, ptr %17, align 4, !tbaa !12
  br label %613, !llvm.loop !42

723:                                              ; preds = %618
  br label %724

724:                                              ; preds = %723
  %725 = load i32, ptr %16, align 4, !tbaa !12
  %726 = add nsw i32 %725, 1
  store i32 %726, ptr %16, align 4, !tbaa !12
  br label %606, !llvm.loop !43

727:                                              ; preds = %611
  call void @llvm.lifetime.end.p0(i64 4, ptr %5) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %4) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %3) #5
  ret void
}

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nounwind }

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

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


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

%struct.cellb = type { double, double, double }
%struct.cellj = type { double, double, double }
%struct.celle = type { double, double, double }

; Function Attrs: mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #0

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7field3dI5celleE6get_nxEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7field3dI5celleE6get_nyEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

; Function Attrs: mustprogress nounwind uwtable
declare dso_local noundef i32 @_ZN7field3dI5celleE6get_nzEv(ptr noundef nonnull align 8 dereferenceable(40)) local_unnamed_addr #2 align 2

; Function Attrs: inlinehint mustprogress uwtable
declare dso_local noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40), i32 noundef) local_unnamed_addr #1 align 2

; Function Attrs: mustprogress uwtable
define dso_local void @_ZN11fdtd_solver9advance_eEv(ptr nocapture noundef nonnull readonly align 8 dereferenceable(80) %0) unnamed_addr #3 align 2 {
  %2 = getelementptr inbounds i8, ptr %0, i64 8
  %3 = load ptr, ptr %2, align 8, !tbaa !5
  %4 = tail call noundef i32 @_ZN7field3dI5celleE6get_nxEv(ptr noundef nonnull align 8 dereferenceable(40) %3)
  %5 = load ptr, ptr %2, align 8, !tbaa !5
  %6 = tail call noundef i32 @_ZN7field3dI5celleE6get_nyEv(ptr noundef nonnull align 8 dereferenceable(40) %5)
  %7 = load ptr, ptr %2, align 8, !tbaa !5
  %8 = tail call noundef i32 @_ZN7field3dI5celleE6get_nzEv(ptr noundef nonnull align 8 dereferenceable(40) %7)
  %9 = add i32 %4, -1
  %10 = icmp sgt i32 %4, 2
  %11 = add i32 %6, -1
  br i1 %10, label %.preheader151.lr.ph, label %.preheader149

.preheader151.lr.ph:                              ; preds = %1
  %12 = icmp sgt i32 %6, 2
  %13 = add i32 %8, -1
  %14 = getelementptr inbounds i8, ptr %0, i64 64
  %15 = getelementptr inbounds i8, ptr %0, i64 16
  %16 = getelementptr inbounds i8, ptr %0, i64 72
  %17 = getelementptr inbounds i8, ptr %0, i64 24
  %18 = getelementptr inbounds i8, ptr %0, i64 32
  %19 = getelementptr inbounds i8, ptr %0, i64 56
  %20 = getelementptr inbounds i8, ptr %0, i64 40
  %21 = getelementptr inbounds i8, ptr %0, i64 48
  br i1 %12, label %.preheader151.lr.ph.split.us, label %.preheader146.lr.ph

.preheader151.lr.ph.split.us:                     ; preds = %.preheader151.lr.ph
  %22 = icmp sgt i32 %8, 2
  br i1 %22, label %.preheader151.us.us.preheader, label %.preheader.us.preheader

.preheader151.us.us.preheader:                    ; preds = %.preheader151.lr.ph.split.us
  %wide.trip.count183 = zext i32 %11 to i64
  %wide.trip.count = zext i32 %13 to i64
  br label %.preheader151.us.us

.preheader151.us.us:                              ; preds = %.preheader151.us.us.preheader, %._crit_edge155.split.us.us.us
  %.0156.us.us = phi i32 [ %186, %._crit_edge155.split.us.us.us ], [ 1, %.preheader151.us.us.preheader ]
  %23 = add nsw i32 %.0156.us.us, -1
  br label %.preheader150.us.us.us

.preheader150.us.us.us:                           ; preds = %._crit_edge.us.us.us, %.preheader151.us.us
  %indvars.iv180 = phi i64 [ %indvars.iv.next181, %._crit_edge.us.us.us ], [ 1, %.preheader151.us.us ]
  %24 = add nsw i64 %indvars.iv180, -1
  br label %25

25:                                               ; preds = %25, %.preheader150.us.us.us
  %indvars.iv = phi i64 [ %indvars.iv.next, %25 ], [ 1, %.preheader150.us.us.us ]
  %26 = load double, ptr %14, align 8, !tbaa !11
  %27 = load ptr, ptr %15, align 8, !tbaa !12
  %28 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %27, i32 noundef %.0156.us.us)
  %29 = load ptr, ptr %28, align 8, !tbaa !13
  %30 = getelementptr inbounds ptr, ptr %29, i64 %indvars.iv180
  %31 = load ptr, ptr %30, align 8, !tbaa !13
  %32 = getelementptr inbounds %struct.cellb, ptr %31, i64 %indvars.iv, i32 2
  %33 = load double, ptr %32, align 8, !tbaa !14
  %34 = load ptr, ptr %15, align 8, !tbaa !12
  %35 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %34, i32 noundef %.0156.us.us)
  %36 = load ptr, ptr %35, align 8, !tbaa !13
  %37 = getelementptr inbounds ptr, ptr %36, i64 %24
  %38 = load ptr, ptr %37, align 8, !tbaa !13
  %39 = getelementptr inbounds %struct.cellb, ptr %38, i64 %indvars.iv, i32 2
  %40 = load double, ptr %39, align 8, !tbaa !14
  %41 = fsub double %33, %40
  %42 = load double, ptr %16, align 8, !tbaa !16
  %43 = load ptr, ptr %15, align 8, !tbaa !12
  %44 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %43, i32 noundef %.0156.us.us)
  %45 = load ptr, ptr %44, align 8, !tbaa !13
  %46 = getelementptr inbounds ptr, ptr %45, i64 %indvars.iv180
  %47 = load ptr, ptr %46, align 8, !tbaa !13
  %48 = getelementptr inbounds %struct.cellb, ptr %47, i64 %indvars.iv, i32 1
  %49 = load double, ptr %48, align 8, !tbaa !17
  %50 = load ptr, ptr %15, align 8, !tbaa !12
  %51 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %50, i32 noundef %.0156.us.us)
  %52 = load ptr, ptr %51, align 8, !tbaa !13
  %53 = getelementptr inbounds ptr, ptr %52, i64 %indvars.iv180
  %54 = load ptr, ptr %53, align 8, !tbaa !13
  %55 = add nsw i64 %indvars.iv, -1
  %56 = getelementptr inbounds %struct.cellb, ptr %54, i64 %55, i32 1
  %57 = load double, ptr %56, align 8, !tbaa !17
  %58 = fsub double %49, %57
  %59 = fneg double %42
  %60 = fmul double %58, %59
  %61 = tail call double @llvm.fmuladd.f64(double %26, double %41, double %60)
  %62 = load ptr, ptr %17, align 8, !tbaa !18
  %63 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %62, i32 noundef %.0156.us.us)
  %64 = load ptr, ptr %63, align 8, !tbaa !13
  %65 = getelementptr inbounds ptr, ptr %64, i64 %indvars.iv180
  %66 = load ptr, ptr %65, align 8, !tbaa !13
  %67 = getelementptr inbounds %struct.cellj, ptr %66, i64 %indvars.iv
  %68 = load double, ptr %67, align 8, !tbaa !19
  %69 = load double, ptr %18, align 8, !tbaa !21
  %70 = fneg double %68
  %71 = tail call double @llvm.fmuladd.f64(double %70, double %69, double %61)
  %72 = load ptr, ptr %2, align 8, !tbaa !5
  %73 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %72, i32 noundef %.0156.us.us)
  %74 = load ptr, ptr %73, align 8, !tbaa !13
  %75 = getelementptr inbounds ptr, ptr %74, i64 %indvars.iv180
  %76 = load ptr, ptr %75, align 8, !tbaa !13
  %77 = getelementptr inbounds %struct.celle, ptr %76, i64 %indvars.iv
  %78 = load double, ptr %77, align 8, !tbaa !22
  %79 = fadd double %71, %78
  store double %79, ptr %77, align 8, !tbaa !22
  %80 = load double, ptr %19, align 8, !tbaa !24
  %81 = fneg double %80
  %82 = load ptr, ptr %15, align 8, !tbaa !12
  %83 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %82, i32 noundef %.0156.us.us)
  %84 = load ptr, ptr %83, align 8, !tbaa !13
  %85 = getelementptr inbounds ptr, ptr %84, i64 %indvars.iv180
  %86 = load ptr, ptr %85, align 8, !tbaa !13
  %87 = getelementptr inbounds %struct.cellb, ptr %86, i64 %indvars.iv, i32 2
  %88 = load double, ptr %87, align 8, !tbaa !14
  %89 = load ptr, ptr %15, align 8, !tbaa !12
  %90 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %89, i32 noundef %23)
  %91 = load ptr, ptr %90, align 8, !tbaa !13
  %92 = getelementptr inbounds ptr, ptr %91, i64 %indvars.iv180
  %93 = load ptr, ptr %92, align 8, !tbaa !13
  %94 = getelementptr inbounds %struct.cellb, ptr %93, i64 %indvars.iv, i32 2
  %95 = load double, ptr %94, align 8, !tbaa !14
  %96 = fsub double %88, %95
  %97 = load double, ptr %16, align 8, !tbaa !16
  %98 = load ptr, ptr %15, align 8, !tbaa !12
  %99 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %98, i32 noundef %.0156.us.us)
  %100 = load ptr, ptr %99, align 8, !tbaa !13
  %101 = getelementptr inbounds ptr, ptr %100, i64 %indvars.iv180
  %102 = load ptr, ptr %101, align 8, !tbaa !13
  %103 = getelementptr inbounds %struct.cellb, ptr %102, i64 %indvars.iv
  %104 = load double, ptr %103, align 8, !tbaa !25
  %105 = load ptr, ptr %15, align 8, !tbaa !12
  %106 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %105, i32 noundef %.0156.us.us)
  %107 = load ptr, ptr %106, align 8, !tbaa !13
  %108 = getelementptr inbounds ptr, ptr %107, i64 %indvars.iv180
  %109 = load ptr, ptr %108, align 8, !tbaa !13
  %110 = getelementptr inbounds %struct.cellb, ptr %109, i64 %55
  %111 = load double, ptr %110, align 8, !tbaa !25
  %112 = fsub double %104, %111
  %113 = fmul double %97, %112
  %114 = tail call double @llvm.fmuladd.f64(double %81, double %96, double %113)
  %115 = load ptr, ptr %17, align 8, !tbaa !18
  %116 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %115, i32 noundef %.0156.us.us)
  %117 = load ptr, ptr %116, align 8, !tbaa !13
  %118 = getelementptr inbounds ptr, ptr %117, i64 %indvars.iv180
  %119 = load ptr, ptr %118, align 8, !tbaa !13
  %120 = getelementptr inbounds %struct.cellj, ptr %119, i64 %indvars.iv, i32 1
  %121 = load double, ptr %120, align 8, !tbaa !26
  %122 = load double, ptr %20, align 8, !tbaa !27
  %123 = fneg double %121
  %124 = tail call double @llvm.fmuladd.f64(double %123, double %122, double %114)
  %125 = load ptr, ptr %2, align 8, !tbaa !5
  %126 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %125, i32 noundef %.0156.us.us)
  %127 = load ptr, ptr %126, align 8, !tbaa !13
  %128 = getelementptr inbounds ptr, ptr %127, i64 %indvars.iv180
  %129 = load ptr, ptr %128, align 8, !tbaa !13
  %130 = getelementptr inbounds %struct.celle, ptr %129, i64 %indvars.iv, i32 1
  %131 = load double, ptr %130, align 8, !tbaa !28
  %132 = fadd double %124, %131
  store double %132, ptr %130, align 8, !tbaa !28
  %133 = load double, ptr %19, align 8, !tbaa !24
  %134 = load ptr, ptr %15, align 8, !tbaa !12
  %135 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %134, i32 noundef %.0156.us.us)
  %136 = load ptr, ptr %135, align 8, !tbaa !13
  %137 = getelementptr inbounds ptr, ptr %136, i64 %indvars.iv180
  %138 = load ptr, ptr %137, align 8, !tbaa !13
  %139 = getelementptr inbounds %struct.cellb, ptr %138, i64 %indvars.iv, i32 1
  %140 = load double, ptr %139, align 8, !tbaa !17
  %141 = load ptr, ptr %15, align 8, !tbaa !12
  %142 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %141, i32 noundef %23)
  %143 = load ptr, ptr %142, align 8, !tbaa !13
  %144 = getelementptr inbounds ptr, ptr %143, i64 %indvars.iv180
  %145 = load ptr, ptr %144, align 8, !tbaa !13
  %146 = getelementptr inbounds %struct.cellb, ptr %145, i64 %indvars.iv, i32 1
  %147 = load double, ptr %146, align 8, !tbaa !17
  %148 = fsub double %140, %147
  %149 = load double, ptr %14, align 8, !tbaa !11
  %150 = load ptr, ptr %15, align 8, !tbaa !12
  %151 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %150, i32 noundef %.0156.us.us)
  %152 = load ptr, ptr %151, align 8, !tbaa !13
  %153 = getelementptr inbounds ptr, ptr %152, i64 %indvars.iv180
  %154 = load ptr, ptr %153, align 8, !tbaa !13
  %155 = getelementptr inbounds %struct.cellb, ptr %154, i64 %indvars.iv
  %156 = load double, ptr %155, align 8, !tbaa !25
  %157 = load ptr, ptr %15, align 8, !tbaa !12
  %158 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %157, i32 noundef %.0156.us.us)
  %159 = load ptr, ptr %158, align 8, !tbaa !13
  %160 = getelementptr inbounds ptr, ptr %159, i64 %24
  %161 = load ptr, ptr %160, align 8, !tbaa !13
  %162 = getelementptr inbounds %struct.cellb, ptr %161, i64 %indvars.iv
  %163 = load double, ptr %162, align 8, !tbaa !25
  %164 = fsub double %156, %163
  %165 = fneg double %149
  %166 = fmul double %164, %165
  %167 = tail call double @llvm.fmuladd.f64(double %133, double %148, double %166)
  %168 = load ptr, ptr %17, align 8, !tbaa !18
  %169 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %168, i32 noundef %.0156.us.us)
  %170 = load ptr, ptr %169, align 8, !tbaa !13
  %171 = getelementptr inbounds ptr, ptr %170, i64 %indvars.iv180
  %172 = load ptr, ptr %171, align 8, !tbaa !13
  %173 = getelementptr inbounds %struct.cellj, ptr %172, i64 %indvars.iv, i32 2
  %174 = load double, ptr %173, align 8, !tbaa !29
  %175 = load double, ptr %21, align 8, !tbaa !30
  %176 = fneg double %174
  %177 = tail call double @llvm.fmuladd.f64(double %176, double %175, double %167)
  %178 = load ptr, ptr %2, align 8, !tbaa !5
  %179 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %178, i32 noundef %.0156.us.us)
  %180 = load ptr, ptr %179, align 8, !tbaa !13
  %181 = getelementptr inbounds ptr, ptr %180, i64 %indvars.iv180
  %182 = load ptr, ptr %181, align 8, !tbaa !13
  %183 = getelementptr inbounds %struct.celle, ptr %182, i64 %indvars.iv, i32 2
  %184 = load double, ptr %183, align 8, !tbaa !31
  %185 = fadd double %177, %184
  store double %185, ptr %183, align 8, !tbaa !31
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge.us.us.us, label %25, !llvm.loop !32

._crit_edge.us.us.us:                             ; preds = %25
  %indvars.iv.next181 = add nuw nsw i64 %indvars.iv180, 1
  %exitcond184.not = icmp eq i64 %indvars.iv.next181, %wide.trip.count183
  br i1 %exitcond184.not, label %._crit_edge155.split.us.us.us, label %.preheader150.us.us.us, !llvm.loop !34

._crit_edge155.split.us.us.us:                    ; preds = %._crit_edge.us.us.us
  %186 = add nuw nsw i32 %.0156.us.us, 1
  %exitcond185.not = icmp eq i32 %186, %9
  br i1 %exitcond185.not, label %.preheader149, label %.preheader151.us.us, !llvm.loop !35

.preheader149:                                    ; preds = %._crit_edge155.split.us.us.us, %1
  %187 = icmp sgt i32 %6, 2
  br i1 %187, label %.preheader148.lr.ph, label %.preheader147

.preheader148.lr.ph:                              ; preds = %.preheader149
  %188 = icmp sgt i32 %8, 2
  %189 = getelementptr inbounds i8, ptr %0, i64 64
  %190 = getelementptr inbounds i8, ptr %0, i64 16
  %191 = getelementptr inbounds i8, ptr %0, i64 72
  %192 = getelementptr inbounds i8, ptr %0, i64 24
  %193 = getelementptr inbounds i8, ptr %0, i64 32
  br i1 %188, label %.preheader148.us.preheader, label %.preheader147

.preheader148.us.preheader:                       ; preds = %.preheader148.lr.ph
  %194 = add nsw i32 %8, -1
  %wide.trip.count194 = zext i32 %11 to i64
  %wide.trip.count189 = zext i32 %194 to i64
  br label %.preheader148.us

.preheader148.us:                                 ; preds = %.preheader148.us.preheader, %._crit_edge.us
  %indvars.iv191 = phi i64 [ 1, %.preheader148.us.preheader ], [ %indvars.iv.next192, %._crit_edge.us ]
  br label %195

195:                                              ; preds = %.preheader148.us, %195
  %indvars.iv186 = phi i64 [ 1, %.preheader148.us ], [ %indvars.iv.next187, %195 ]
  %196 = load double, ptr %189, align 8, !tbaa !11
  %197 = load ptr, ptr %190, align 8, !tbaa !12
  %198 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %197, i32 noundef 0)
  %199 = load ptr, ptr %198, align 8, !tbaa !13
  %200 = getelementptr inbounds ptr, ptr %199, i64 %indvars.iv191
  %201 = load ptr, ptr %200, align 8, !tbaa !13
  %202 = getelementptr inbounds %struct.cellb, ptr %201, i64 %indvars.iv186, i32 2
  %203 = load double, ptr %202, align 8, !tbaa !14
  %204 = load ptr, ptr %190, align 8, !tbaa !12
  %205 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %204, i32 noundef 0)
  %206 = load ptr, ptr %205, align 8, !tbaa !13
  %207 = getelementptr ptr, ptr %206, i64 %indvars.iv191
  %208 = getelementptr i8, ptr %207, i64 -8
  %209 = load ptr, ptr %208, align 8, !tbaa !13
  %210 = getelementptr inbounds %struct.cellb, ptr %209, i64 %indvars.iv186, i32 2
  %211 = load double, ptr %210, align 8, !tbaa !14
  %212 = fsub double %203, %211
  %213 = load double, ptr %191, align 8, !tbaa !16
  %214 = load ptr, ptr %190, align 8, !tbaa !12
  %215 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %214, i32 noundef 0)
  %216 = load ptr, ptr %215, align 8, !tbaa !13
  %217 = getelementptr inbounds ptr, ptr %216, i64 %indvars.iv191
  %218 = load ptr, ptr %217, align 8, !tbaa !13
  %219 = getelementptr inbounds %struct.cellb, ptr %218, i64 %indvars.iv186, i32 1
  %220 = load double, ptr %219, align 8, !tbaa !17
  %221 = load ptr, ptr %190, align 8, !tbaa !12
  %222 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %221, i32 noundef 0)
  %223 = load ptr, ptr %222, align 8, !tbaa !13
  %224 = getelementptr inbounds ptr, ptr %223, i64 %indvars.iv191
  %225 = load ptr, ptr %224, align 8, !tbaa !13
  %226 = getelementptr %struct.cellb, ptr %225, i64 %indvars.iv186
  %227 = getelementptr i8, ptr %226, i64 -16
  %228 = load double, ptr %227, align 8, !tbaa !17
  %229 = fsub double %220, %228
  %230 = fneg double %213
  %231 = fmul double %229, %230
  %232 = tail call double @llvm.fmuladd.f64(double %196, double %212, double %231)
  %233 = load ptr, ptr %192, align 8, !tbaa !18
  %234 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %233, i32 noundef 0)
  %235 = load ptr, ptr %234, align 8, !tbaa !13
  %236 = getelementptr inbounds ptr, ptr %235, i64 %indvars.iv191
  %237 = load ptr, ptr %236, align 8, !tbaa !13
  %238 = getelementptr inbounds %struct.cellj, ptr %237, i64 %indvars.iv186
  %239 = load double, ptr %238, align 8, !tbaa !19
  %240 = load double, ptr %193, align 8, !tbaa !21
  %241 = fneg double %239
  %242 = tail call double @llvm.fmuladd.f64(double %241, double %240, double %232)
  %243 = load ptr, ptr %2, align 8, !tbaa !5
  %244 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %243, i32 noundef 0)
  %245 = load ptr, ptr %244, align 8, !tbaa !13
  %246 = getelementptr inbounds ptr, ptr %245, i64 %indvars.iv191
  %247 = load ptr, ptr %246, align 8, !tbaa !13
  %248 = getelementptr inbounds %struct.celle, ptr %247, i64 %indvars.iv186
  %249 = load double, ptr %248, align 8, !tbaa !22
  %250 = fadd double %242, %249
  store double %250, ptr %248, align 8, !tbaa !22
  %indvars.iv.next187 = add nuw nsw i64 %indvars.iv186, 1
  %exitcond190.not = icmp eq i64 %indvars.iv.next187, %wide.trip.count189
  br i1 %exitcond190.not, label %._crit_edge.us, label %195, !llvm.loop !36

._crit_edge.us:                                   ; preds = %195
  %indvars.iv.next192 = add nuw nsw i64 %indvars.iv191, 1
  %exitcond195.not = icmp eq i64 %indvars.iv.next192, %wide.trip.count194
  br i1 %exitcond195.not, label %.preheader147, label %.preheader148.us, !llvm.loop !37

.preheader147:                                    ; preds = %._crit_edge.us, %.preheader148.lr.ph, %.preheader149
  br i1 %10, label %.preheader146.lr.ph, label %._crit_edge172

.preheader146.lr.ph:                              ; preds = %.preheader151.lr.ph, %.preheader147
  %251 = phi i1 [ %187, %.preheader147 ], [ false, %.preheader151.lr.ph ]
  %252 = icmp sgt i32 %8, 2
  %253 = getelementptr inbounds i8, ptr %0, i64 56
  %254 = getelementptr inbounds i8, ptr %0, i64 16
  %255 = getelementptr inbounds i8, ptr %0, i64 72
  %256 = getelementptr inbounds i8, ptr %0, i64 24
  %257 = getelementptr inbounds i8, ptr %0, i64 40
  br i1 %252, label %.preheader146.us.preheader, label %.preheader145.thread

.preheader145.thread:                             ; preds = %.preheader146.lr.ph
  br i1 %251, label %.preheader.us.preheader, label %._crit_edge172

.preheader146.us.preheader:                       ; preds = %.preheader146.lr.ph
  %258 = add nsw i32 %8, -1
  %wide.trip.count199 = zext i32 %258 to i64
  br label %.preheader146.us

.preheader146.us:                                 ; preds = %.preheader146.us.preheader, %._crit_edge.us169
  %.0138168.us = phi i32 [ %309, %._crit_edge.us169 ], [ 1, %.preheader146.us.preheader ]
  %259 = add nsw i32 %.0138168.us, -1
  br label %260

260:                                              ; preds = %.preheader146.us, %260
  %indvars.iv196 = phi i64 [ 1, %.preheader146.us ], [ %indvars.iv.next197, %260 ]
  %261 = load double, ptr %253, align 8, !tbaa !24
  %262 = fneg double %261
  %263 = load ptr, ptr %254, align 8, !tbaa !12
  %264 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %263, i32 noundef %.0138168.us)
  %265 = load ptr, ptr %264, align 8, !tbaa !13
  %266 = load ptr, ptr %265, align 8, !tbaa !13
  %267 = getelementptr inbounds %struct.cellb, ptr %266, i64 %indvars.iv196, i32 2
  %268 = load double, ptr %267, align 8, !tbaa !14
  %269 = load ptr, ptr %254, align 8, !tbaa !12
  %270 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %269, i32 noundef %259)
  %271 = load ptr, ptr %270, align 8, !tbaa !13
  %272 = load ptr, ptr %271, align 8, !tbaa !13
  %273 = getelementptr inbounds %struct.cellb, ptr %272, i64 %indvars.iv196, i32 2
  %274 = load double, ptr %273, align 8, !tbaa !14
  %275 = fsub double %268, %274
  %276 = load double, ptr %255, align 8, !tbaa !16
  %277 = load ptr, ptr %254, align 8, !tbaa !12
  %278 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %277, i32 noundef %.0138168.us)
  %279 = load ptr, ptr %278, align 8, !tbaa !13
  %280 = load ptr, ptr %279, align 8, !tbaa !13
  %281 = getelementptr inbounds %struct.cellb, ptr %280, i64 %indvars.iv196
  %282 = load double, ptr %281, align 8, !tbaa !25
  %283 = load ptr, ptr %254, align 8, !tbaa !12
  %284 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %283, i32 noundef %.0138168.us)
  %285 = load ptr, ptr %284, align 8, !tbaa !13
  %286 = load ptr, ptr %285, align 8, !tbaa !13
  %287 = getelementptr %struct.cellb, ptr %286, i64 %indvars.iv196
  %288 = getelementptr i8, ptr %287, i64 -24
  %289 = load double, ptr %288, align 8, !tbaa !25
  %290 = fsub double %282, %289
  %291 = fmul double %276, %290
  %292 = tail call double @llvm.fmuladd.f64(double %262, double %275, double %291)
  %293 = load ptr, ptr %256, align 8, !tbaa !18
  %294 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %293, i32 noundef %.0138168.us)
  %295 = load ptr, ptr %294, align 8, !tbaa !13
  %296 = load ptr, ptr %295, align 8, !tbaa !13
  %297 = getelementptr inbounds %struct.cellj, ptr %296, i64 %indvars.iv196, i32 1
  %298 = load double, ptr %297, align 8, !tbaa !26
  %299 = load double, ptr %257, align 8, !tbaa !27
  %300 = fneg double %298
  %301 = tail call double @llvm.fmuladd.f64(double %300, double %299, double %292)
  %302 = load ptr, ptr %2, align 8, !tbaa !5
  %303 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %302, i32 noundef %.0138168.us)
  %304 = load ptr, ptr %303, align 8, !tbaa !13
  %305 = load ptr, ptr %304, align 8, !tbaa !13
  %306 = getelementptr inbounds %struct.celle, ptr %305, i64 %indvars.iv196, i32 1
  %307 = load double, ptr %306, align 8, !tbaa !28
  %308 = fadd double %301, %307
  store double %308, ptr %306, align 8, !tbaa !28
  %indvars.iv.next197 = add nuw nsw i64 %indvars.iv196, 1
  %exitcond200.not = icmp eq i64 %indvars.iv.next197, %wide.trip.count199
  br i1 %exitcond200.not, label %._crit_edge.us169, label %260, !llvm.loop !38

._crit_edge.us169:                                ; preds = %260
  %309 = add nuw nsw i32 %.0138168.us, 1
  %exitcond201.not = icmp eq i32 %309, %9
  br i1 %exitcond201.not, label %.preheader145, label %.preheader146.us, !llvm.loop !39

.preheader145:                                    ; preds = %._crit_edge.us169
  %brmerge.not = and i1 %10, %251
  br i1 %brmerge.not, label %.preheader.us.preheader, label %._crit_edge172

.preheader.us.preheader:                          ; preds = %.preheader145, %.preheader151.lr.ph.split.us, %.preheader145.thread
  %310 = getelementptr inbounds i8, ptr %0, i64 56
  %311 = getelementptr inbounds i8, ptr %0, i64 16
  %312 = getelementptr inbounds i8, ptr %0, i64 64
  %313 = getelementptr inbounds i8, ptr %0, i64 24
  %314 = getelementptr inbounds i8, ptr %0, i64 48
  %wide.trip.count205 = zext i32 %11 to i64
  br label %.preheader.us

.preheader.us:                                    ; preds = %.preheader.us.preheader, %._crit_edge.us173
  %.0136171.us = phi i32 [ %369, %._crit_edge.us173 ], [ 1, %.preheader.us.preheader ]
  %315 = add nsw i32 %.0136171.us, -1
  br label %316

316:                                              ; preds = %.preheader.us, %316
  %indvars.iv202 = phi i64 [ 1, %.preheader.us ], [ %indvars.iv.next203, %316 ]
  %317 = load double, ptr %310, align 8, !tbaa !24
  %318 = load ptr, ptr %311, align 8, !tbaa !12
  %319 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %318, i32 noundef %.0136171.us)
  %320 = load ptr, ptr %319, align 8, !tbaa !13
  %321 = getelementptr inbounds ptr, ptr %320, i64 %indvars.iv202
  %322 = load ptr, ptr %321, align 8, !tbaa !13
  %323 = getelementptr inbounds i8, ptr %322, i64 8
  %324 = load double, ptr %323, align 8, !tbaa !17
  %325 = load ptr, ptr %311, align 8, !tbaa !12
  %326 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %325, i32 noundef %315)
  %327 = load ptr, ptr %326, align 8, !tbaa !13
  %328 = getelementptr inbounds ptr, ptr %327, i64 %indvars.iv202
  %329 = load ptr, ptr %328, align 8, !tbaa !13
  %330 = getelementptr inbounds i8, ptr %329, i64 8
  %331 = load double, ptr %330, align 8, !tbaa !17
  %332 = fsub double %324, %331
  %333 = load double, ptr %312, align 8, !tbaa !11
  %334 = load ptr, ptr %311, align 8, !tbaa !12
  %335 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %334, i32 noundef %.0136171.us)
  %336 = load ptr, ptr %335, align 8, !tbaa !13
  %337 = getelementptr inbounds ptr, ptr %336, i64 %indvars.iv202
  %338 = load ptr, ptr %337, align 8, !tbaa !13
  %339 = load double, ptr %338, align 8, !tbaa !25
  %340 = load ptr, ptr %311, align 8, !tbaa !12
  %341 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5cellbEixEi(ptr noundef nonnull align 8 dereferenceable(40) %340, i32 noundef %.0136171.us)
  %342 = load ptr, ptr %341, align 8, !tbaa !13
  %343 = getelementptr ptr, ptr %342, i64 %indvars.iv202
  %344 = getelementptr i8, ptr %343, i64 -8
  %345 = load ptr, ptr %344, align 8, !tbaa !13
  %346 = load double, ptr %345, align 8, !tbaa !25
  %347 = fsub double %339, %346
  %348 = fneg double %333
  %349 = fmul double %347, %348
  %350 = tail call double @llvm.fmuladd.f64(double %317, double %332, double %349)
  %351 = load ptr, ptr %313, align 8, !tbaa !18
  %352 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celljEixEi(ptr noundef nonnull align 8 dereferenceable(40) %351, i32 noundef %.0136171.us)
  %353 = load ptr, ptr %352, align 8, !tbaa !13
  %354 = getelementptr inbounds ptr, ptr %353, i64 %indvars.iv202
  %355 = load ptr, ptr %354, align 8, !tbaa !13
  %356 = getelementptr inbounds i8, ptr %355, i64 16
  %357 = load double, ptr %356, align 8, !tbaa !29
  %358 = load double, ptr %314, align 8, !tbaa !30
  %359 = fneg double %357
  %360 = tail call double @llvm.fmuladd.f64(double %359, double %358, double %350)
  %361 = load ptr, ptr %2, align 8, !tbaa !5
  %362 = tail call noundef nonnull align 8 dereferenceable(8) ptr @_ZNK7field3dI5celleEixEi(ptr noundef nonnull align 8 dereferenceable(40) %361, i32 noundef %.0136171.us)
  %363 = load ptr, ptr %362, align 8, !tbaa !13
  %364 = getelementptr inbounds ptr, ptr %363, i64 %indvars.iv202
  %365 = load ptr, ptr %364, align 8, !tbaa !13
  %366 = getelementptr inbounds i8, ptr %365, i64 16
  %367 = load double, ptr %366, align 8, !tbaa !31
  %368 = fadd double %360, %367
  store double %368, ptr %366, align 8, !tbaa !31
  %indvars.iv.next203 = add nuw nsw i64 %indvars.iv202, 1
  %exitcond206.not = icmp eq i64 %indvars.iv.next203, %wide.trip.count205
  br i1 %exitcond206.not, label %._crit_edge.us173, label %316, !llvm.loop !40

._crit_edge.us173:                                ; preds = %316
  %369 = add nuw nsw i32 %.0136171.us, 1
  %exitcond207.not = icmp eq i32 %369, %9
  br i1 %exitcond207.not, label %._crit_edge172, label %.preheader.us, !llvm.loop !41

._crit_edge172:                                   ; preds = %._crit_edge.us173, %.preheader145, %.preheader147, %.preheader145.thread
  ret void
}

attributes #0 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #1 = { inlinehint mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { mustprogress nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { mustprogress uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }

!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 8}
!6 = !{!"_ZTS14maxwell_solver", !7, i64 8, !7, i64 16, !7, i64 24, !10, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !10, i64 64, !10, i64 72}
!7 = !{!"any pointer", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = !{!"double", !8, i64 0}
!11 = !{!6, !10, i64 64}
!12 = !{!6, !7, i64 16}
!13 = !{!7, !7, i64 0}
!14 = !{!15, !10, i64 16}
!15 = !{!"_ZTS5cellb", !10, i64 0, !10, i64 8, !10, i64 16}
!16 = !{!6, !10, i64 72}
!17 = !{!15, !10, i64 8}
!18 = !{!6, !7, i64 24}
!19 = !{!20, !10, i64 0}
!20 = !{!"_ZTS5cellj", !10, i64 0, !10, i64 8, !10, i64 16}
!21 = !{!6, !10, i64 32}
!22 = !{!23, !10, i64 0}
!23 = !{!"_ZTS5celle", !10, i64 0, !10, i64 8, !10, i64 16}
!24 = !{!6, !10, i64 56}
!25 = !{!15, !10, i64 0}
!26 = !{!20, !10, i64 8}
!27 = !{!6, !10, i64 40}
!28 = !{!23, !10, i64 8}
!29 = !{!20, !10, i64 16}
!30 = !{!6, !10, i64 48}
!31 = !{!23, !10, i64 16}
!32 = distinct !{!32, !33}
!33 = !{!"llvm.loop.mustprogress"}
!34 = distinct !{!34, !33}
!35 = distinct !{!35, !33}
!36 = distinct !{!36, !33}
!37 = distinct !{!37, !33}
!38 = distinct !{!38, !33}
!39 = distinct !{!39, !33}
!40 = distinct !{!40, !33}
!41 = distinct !{!41, !33}


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