; LLVM IR from InsightSoftwareConsortium/ITK :: Modules/Numerics/FEM/src (dsrc2c)

; 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.anon = type { i64, i64, i64, i64, i64, i64 }
%struct.anon.0 = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }

@itcom1_ = external hidden global %struct.anon, align 8
@itcom3_ = external hidden global %struct.anon.0, align 8
@omgchg_.del1 = external hidden global double, align 8
@omgchg_.del2 = external hidden global double, align 8

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #1

; 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 i64 @omgchg_(ptr noundef %0) #2 {
  %2 = alloca i64, align 8
  %3 = alloca ptr, align 8
  %4 = alloca double, align 8
  %5 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #3
  %6 = load ptr, ptr %3, align 8, !tbaa !5
  %7 = load i64, ptr @itcom1_, align 8, !tbaa !9
  %8 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !12
  %9 = sub nsw i64 %7, %8
  %10 = icmp slt i64 %9, 3
  br i1 %10, label %11, label %12

11:                                               ; preds = %1
  store i64 0, ptr %2, align 8
  store i32 1, ptr %5, align 4
  br label %296

12:                                               ; preds = %1
  %13 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %14 = fcmp oeq double %13, 0.000000e+00
  br i1 %14, label %15, label %16

15:                                               ; preds = %12
  br label %295

16:                                               ; preds = %12
  %17 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %18 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %19 = fcmp oge double %17, %18
  br i1 %19, label %20, label %21

20:                                               ; preds = %16
  store i64 0, ptr %2, align 8
  store i32 1, ptr %5, align 4
  br label %296

21:                                               ; preds = %16
  %22 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %23 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %24 = fdiv double %22, %23
  %25 = fsub double 1.000000e+00, %24
  store double %25, ptr %4, align 8, !tbaa !17
  %26 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %27 = fsub double 1.000000e+00, %26
  %28 = fcmp oge double %27, 0.000000e+00
  br i1 %28, label %29, label %32

29:                                               ; preds = %21
  %30 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %31 = fsub double 1.000000e+00, %30
  br label %36

32:                                               ; preds = %21
  %33 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %34 = fsub double 1.000000e+00, %33
  %35 = fneg double %34
  br label %36

36:                                               ; preds = %32, %29
  %37 = phi double [ %31, %29 ], [ %35, %32 ]
  %38 = call double @sqrt(double noundef %37) #3
  %39 = fsub double 1.000000e+00, %38
  %40 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %41 = fsub double 1.000000e+00, %40
  %42 = fcmp oge double %41, 0.000000e+00
  br i1 %42, label %43, label %46

43:                                               ; preds = %36
  %44 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %45 = fsub double 1.000000e+00, %44
  br label %50

46:                                               ; preds = %36
  %47 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %48 = fsub double 1.000000e+00, %47
  %49 = fneg double %48
  br label %50

50:                                               ; preds = %46, %43
  %51 = phi double [ %45, %43 ], [ %49, %46 ]
  %52 = call double @sqrt(double noundef %51) #3
  %53 = fadd double 1.000000e+00, %52
  %54 = fdiv double %39, %53
  %55 = load double, ptr %4, align 8, !tbaa !17
  %56 = fcmp oge double %55, 0.000000e+00
  br i1 %56, label %57, label %59

57:                                               ; preds = %50
  %58 = load double, ptr %4, align 8, !tbaa !17
  br label %62

59:                                               ; preds = %50
  %60 = load double, ptr %4, align 8, !tbaa !17
  %61 = fneg double %60
  br label %62

62:                                               ; preds = %59, %57
  %63 = phi double [ %58, %57 ], [ %61, %59 ]
  %64 = call double @sqrt(double noundef %63) #3
  %65 = fsub double 1.000000e+00, %64
  %66 = load double, ptr %4, align 8, !tbaa !17
  %67 = fcmp oge double %66, 0.000000e+00
  br i1 %67, label %68, label %70

68:                                               ; preds = %62
  %69 = load double, ptr %4, align 8, !tbaa !17
  br label %73

70:                                               ; preds = %62
  %71 = load double, ptr %4, align 8, !tbaa !17
  %72 = fneg double %71
  br label %73

73:                                               ; preds = %70, %68
  %74 = phi double [ %69, %68 ], [ %72, %70 ]
  %75 = call double @sqrt(double noundef %74) #3
  %76 = fadd double 1.000000e+00, %75
  %77 = fdiv double %65, %76
  %78 = fdiv double %54, %77
  %79 = fcmp oge double %78, 0.000000e+00
  br i1 %79, label %80, label %134

80:                                               ; preds = %73
  %81 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %82 = fsub double 1.000000e+00, %81
  %83 = fcmp oge double %82, 0.000000e+00
  br i1 %83, label %84, label %87

84:                                               ; preds = %80
  %85 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %86 = fsub double 1.000000e+00, %85
  br label %91

87:                                               ; preds = %80
  %88 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %89 = fsub double 1.000000e+00, %88
  %90 = fneg double %89
  br label %91

91:                                               ; preds = %87, %84
  %92 = phi double [ %86, %84 ], [ %90, %87 ]
  %93 = call double @sqrt(double noundef %92) #3
  %94 = fsub double 1.000000e+00, %93
  %95 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %96 = fsub double 1.000000e+00, %95
  %97 = fcmp oge double %96, 0.000000e+00
  br i1 %97, label %98, label %101

98:                                               ; preds = %91
  %99 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %100 = fsub double 1.000000e+00, %99
  br label %105

101:                                              ; preds = %91
  %102 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %103 = fsub double 1.000000e+00, %102
  %104 = fneg double %103
  br label %105

105:                                              ; preds = %101, %98
  %106 = phi double [ %100, %98 ], [ %104, %101 ]
  %107 = call double @sqrt(double noundef %106) #3
  %108 = fadd double 1.000000e+00, %107
  %109 = fdiv double %94, %108
  %110 = load double, ptr %4, align 8, !tbaa !17
  %111 = fcmp oge double %110, 0.000000e+00
  br i1 %111, label %112, label %114

112:                                              ; preds = %105
  %113 = load double, ptr %4, align 8, !tbaa !17
  br label %117

114:                                              ; preds = %105
  %115 = load double, ptr %4, align 8, !tbaa !17
  %116 = fneg double %115
  br label %117

117:                                              ; preds = %114, %112
  %118 = phi double [ %113, %112 ], [ %116, %114 ]
  %119 = call double @sqrt(double noundef %118) #3
  %120 = fsub double 1.000000e+00, %119
  %121 = load double, ptr %4, align 8, !tbaa !17
  %122 = fcmp oge double %121, 0.000000e+00
  br i1 %122, label %123, label %125

123:                                              ; preds = %117
  %124 = load double, ptr %4, align 8, !tbaa !17
  br label %128

125:                                              ; preds = %117
  %126 = load double, ptr %4, align 8, !tbaa !17
  %127 = fneg double %126
  br label %128

128:                                              ; preds = %125, %123
  %129 = phi double [ %124, %123 ], [ %127, %125 ]
  %130 = call double @sqrt(double noundef %129) #3
  %131 = fadd double 1.000000e+00, %130
  %132 = fdiv double %120, %131
  %133 = fdiv double %109, %132
  br label %189

134:                                              ; preds = %73
  %135 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %136 = fsub double 1.000000e+00, %135
  %137 = fcmp oge double %136, 0.000000e+00
  br i1 %137, label %138, label %141

138:                                              ; preds = %134
  %139 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %140 = fsub double 1.000000e+00, %139
  br label %145

141:                                              ; preds = %134
  %142 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %143 = fsub double 1.000000e+00, %142
  %144 = fneg double %143
  br label %145

145:                                              ; preds = %141, %138
  %146 = phi double [ %140, %138 ], [ %144, %141 ]
  %147 = call double @sqrt(double noundef %146) #3
  %148 = fsub double 1.000000e+00, %147
  %149 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %150 = fsub double 1.000000e+00, %149
  %151 = fcmp oge double %150, 0.000000e+00
  br i1 %151, label %152, label %155

152:                                              ; preds = %145
  %153 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %154 = fsub double 1.000000e+00, %153
  br label %159

155:                                              ; preds = %145
  %156 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !13
  %157 = fsub double 1.000000e+00, %156
  %158 = fneg double %157
  br label %159

159:                                              ; preds = %155, %152
  %160 = phi double [ %154, %152 ], [ %158, %155 ]
  %161 = call double @sqrt(double noundef %160) #3
  %162 = fadd double 1.000000e+00, %161
  %163 = fdiv double %148, %162
  %164 = load double, ptr %4, align 8, !tbaa !17
  %165 = fcmp oge double %164, 0.000000e+00
  br i1 %165, label %166, label %168

166:                                              ; preds = %159
  %167 = load double, ptr %4, align 8, !tbaa !17
  br label %171

168:                                              ; preds = %159
  %169 = load double, ptr %4, align 8, !tbaa !17
  %170 = fneg double %169
  br label %171

171:                                              ; preds = %168, %166
  %172 = phi double [ %167, %166 ], [ %170, %168 ]
  %173 = call double @sqrt(double noundef %172) #3
  %174 = fsub double 1.000000e+00, %173
  %175 = load double, ptr %4, align 8, !tbaa !17
  %176 = fcmp oge double %175, 0.000000e+00
  br i1 %176, label %177, label %179

177:                                              ; preds = %171
  %178 = load double, ptr %4, align 8, !tbaa !17
  br label %182

179:                                              ; preds = %171
  %180 = load double, ptr %4, align 8, !tbaa !17
  %181 = fneg double %180
  br label %182

182:                                              ; preds = %179, %177
  %183 = phi double [ %178, %177 ], [ %181, %179 ]
  %184 = call double @sqrt(double noundef %183) #3
  %185 = fadd double 1.000000e+00, %184
  %186 = fdiv double %174, %185
  %187 = fdiv double %163, %186
  %188 = fneg double %187
  br label %189

189:                                              ; preds = %182, %128
  %190 = phi double [ %133, %128 ], [ %188, %182 ]
  %191 = call double @log(double noundef %190) #3
  %192 = fneg double %191
  store double %192, ptr @omgchg_.del1, align 8, !tbaa !17
  %193 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %194 = fsub double 1.000000e+00, %193
  %195 = fcmp oge double %194, 0.000000e+00
  br i1 %195, label %196, label %199

196:                                              ; preds = %189
  %197 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %198 = fsub double 1.000000e+00, %197
  br label %203

199:                                              ; preds = %189
  %200 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %201 = fsub double 1.000000e+00, %200
  %202 = fneg double %201
  br label %203

203:                                              ; preds = %199, %196
  %204 = phi double [ %198, %196 ], [ %202, %199 ]
  %205 = call double @sqrt(double noundef %204) #3
  %206 = fsub double 1.000000e+00, %205
  %207 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %208 = fsub double 1.000000e+00, %207
  %209 = fcmp oge double %208, 0.000000e+00
  br i1 %209, label %210, label %213

210:                                              ; preds = %203
  %211 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %212 = fsub double 1.000000e+00, %211
  br label %217

213:                                              ; preds = %203
  %214 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %215 = fsub double 1.000000e+00, %214
  %216 = fneg double %215
  br label %217

217:                                              ; preds = %213, %210
  %218 = phi double [ %212, %210 ], [ %216, %213 ]
  %219 = call double @sqrt(double noundef %218) #3
  %220 = fadd double 1.000000e+00, %219
  %221 = fdiv double %206, %220
  %222 = fcmp oge double %221, 0.000000e+00
  br i1 %222, label %223, label %253

223:                                              ; preds = %217
  %224 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %225 = fsub double 1.000000e+00, %224
  %226 = fcmp oge double %225, 0.000000e+00
  br i1 %226, label %227, label %230

227:                                              ; preds = %223
  %228 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %229 = fsub double 1.000000e+00, %228
  br label %234

230:                                              ; preds = %223
  %231 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %232 = fsub double 1.000000e+00, %231
  %233 = fneg double %232
  br label %234

234:                                              ; preds = %230, %227
  %235 = phi double [ %229, %227 ], [ %233, %230 ]
  %236 = call double @sqrt(double noundef %235) #3
  %237 = fsub double 1.000000e+00, %236
  %238 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %239 = fsub double 1.000000e+00, %238
  %240 = fcmp oge double %239, 0.000000e+00
  br i1 %240, label %241, label %244

241:                                              ; preds = %234
  %242 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %243 = fsub double 1.000000e+00, %242
  br label %248

244:                                              ; preds = %234
  %245 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %246 = fsub double 1.000000e+00, %245
  %247 = fneg double %246
  br label %248

248:                                              ; preds = %244, %241
  %249 = phi double [ %243, %241 ], [ %247, %244 ]
  %250 = call double @sqrt(double noundef %249) #3
  %251 = fadd double 1.000000e+00, %250
  %252 = fdiv double %237, %251
  br label %284

253:                                              ; preds = %217
  %254 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %255 = fsub double 1.000000e+00, %254
  %256 = fcmp oge double %255, 0.000000e+00
  br i1 %256, label %257, label %260

257:                                              ; preds = %253
  %258 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %259 = fsub double 1.000000e+00, %258
  br label %264

260:                                              ; preds = %253
  %261 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %262 = fsub double 1.000000e+00, %261
  %263 = fneg double %262
  br label %264

264:                                              ; preds = %260, %257
  %265 = phi double [ %259, %257 ], [ %263, %260 ]
  %266 = call double @sqrt(double noundef %265) #3
  %267 = fsub double 1.000000e+00, %266
  %268 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %269 = fsub double 1.000000e+00, %268
  %270 = fcmp oge double %269, 0.000000e+00
  br i1 %270, label %271, label %274

271:                                              ; preds = %264
  %272 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %273 = fsub double 1.000000e+00, %272
  br label %278

274:                                              ; preds = %264
  %275 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !16
  %276 = fsub double 1.000000e+00, %275
  %277 = fneg double %276
  br label %278

278:                                              ; preds = %274, %271
  %279 = phi double [ %273, %271 ], [ %277, %274 ]
  %280 = call double @sqrt(double noundef %279) #3
  %281 = fadd double 1.000000e+00, %280
  %282 = fdiv double %267, %281
  %283 = fneg double %282
  br label %284

284:                                              ; preds = %278, %248
  %285 = phi double [ %252, %248 ], [ %283, %278 ]
  %286 = call double @log(double noundef %285) #3
  %287 = fneg double %286
  store double %287, ptr @omgchg_.del2, align 8, !tbaa !17
  %288 = load double, ptr @omgchg_.del1, align 8, !tbaa !17
  %289 = load double, ptr @omgchg_.del2, align 8, !tbaa !17
  %290 = fdiv double %288, %289
  %291 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 5), align 8, !tbaa !18
  %292 = fcmp oge double %290, %291
  br i1 %292, label %293, label %294

293:                                              ; preds = %284
  store i64 0, ptr %2, align 8
  store i32 1, ptr %5, align 4
  br label %296

294:                                              ; preds = %284
  br label %295

295:                                              ; preds = %294, %15
  store i64 1, ptr %2, align 8
  store i32 1, ptr %5, align 4
  br label %296

296:                                              ; preds = %295, %293, %20, %11
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #3
  %297 = load i64, ptr %2, align 8
  ret i64 %297
}

; Function Attrs: nounwind
declare double @log(double noundef) #1

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nounwind "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { 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, !11, i64 0}
!10 = !{!"", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40}
!11 = !{!"long", !7, i64 0}
!12 = !{!10, !11, i64 8}
!13 = !{!14, !15, i64 112}
!14 = !{!"", !15, i64 0, !15, i64 8, !15, i64 16, !15, i64 24, !15, i64 32, !15, i64 40, !15, i64 48, !15, i64 56, !15, i64 64, !15, i64 72, !15, i64 80, !15, i64 88, !15, i64 96, !15, i64 104, !15, i64 112, !15, i64 120, !15, i64 128, !15, i64 136, !15, i64 144, !15, i64 152}
!15 = !{!"double", !7, i64 0}
!16 = !{!14, !15, i64 120}
!17 = !{!15, !15, i64 0}
!18 = !{!14, !15, i64 40}


; 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.anon = type { i64, i64, i64, i64, i64, i64 }
%struct.anon.0 = type { double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double, double }

@itcom1_ = external hidden local_unnamed_addr global %struct.anon, align 8
@itcom3_ = external hidden local_unnamed_addr global %struct.anon.0, align 8
@omgchg_.del1 = external hidden local_unnamed_addr global double, align 8
@omgchg_.del2 = external hidden local_unnamed_addr global double, align 8

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @sqrt(double noundef) local_unnamed_addr #0

; Function Attrs: mustprogress nofree nounwind willreturn memory(readwrite, argmem: write, inaccessiblemem: write) uwtable
define dso_local range(i64 0, 2) i64 @omgchg_(ptr nocapture noundef readnone %0) local_unnamed_addr #1 {
  %2 = load i64, ptr @itcom1_, align 8, !tbaa !5
  %3 = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !10
  %4 = sub nsw i64 %2, %3
  %5 = icmp slt i64 %4, 3
  br i1 %5, label %126, label %6

6:                                                ; preds = %1
  %7 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %8 = fcmp oeq double %7, 0.000000e+00
  br i1 %8, label %125, label %9

9:                                                ; preds = %6
  %10 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !14
  %11 = fcmp ult double %7, %10
  br i1 %11, label %12, label %126

12:                                               ; preds = %9
  %13 = fdiv double %7, %10
  %14 = fsub double 1.000000e+00, %13
  %15 = fsub double 1.000000e+00, %7
  %16 = fcmp ult double %15, 0.000000e+00
  %17 = fneg double %15
  %18 = select i1 %16, double %17, double %15
  %19 = tail call double @sqrt(double noundef %18) #2
  %20 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %21 = fsub double 1.000000e+00, %20
  %22 = fcmp ult double %21, 0.000000e+00
  %23 = fneg double %21
  %24 = select i1 %22, double %23, double %21
  %25 = tail call double @sqrt(double noundef %24) #2
  %26 = fcmp oge double %14, 0.000000e+00
  %27 = fneg double %14
  %28 = select i1 %26, double %14, double %27
  %29 = tail call double @sqrt(double noundef %28) #2
  %30 = tail call double @sqrt(double noundef %28) #2
  %31 = insertelement <2 x double> poison, double %19, i64 0
  %32 = insertelement <2 x double> %31, double %29, i64 1
  %33 = fsub <2 x double> <double 1.000000e+00, double 1.000000e+00>, %32
  %34 = insertelement <2 x double> poison, double %25, i64 0
  %35 = insertelement <2 x double> %34, double %30, i64 1
  %36 = fadd <2 x double> %35, <double 1.000000e+00, double 1.000000e+00>
  %37 = fdiv <2 x double> %33, %36
  %38 = extractelement <2 x double> %37, i64 0
  %39 = extractelement <2 x double> %37, i64 1
  %40 = fdiv double %38, %39
  %41 = fcmp ult double %40, 0.000000e+00
  %42 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %43 = fsub double 1.000000e+00, %42
  %44 = fcmp ult double %43, 0.000000e+00
  %45 = fneg double %43
  %46 = select i1 %44, double %45, double %43
  %47 = tail call double @sqrt(double noundef %46) #2
  %48 = fsub double 1.000000e+00, %47
  %49 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %50 = fsub double 1.000000e+00, %49
  %51 = fcmp ult double %50, 0.000000e+00
  %52 = fneg double %50
  %53 = select i1 %51, double %52, double %50
  %54 = tail call double @sqrt(double noundef %53) #2
  %55 = fadd double %54, 1.000000e+00
  br i1 %41, label %69, label %56

56:                                               ; preds = %12
  %57 = tail call double @sqrt(double noundef %28) #2
  %58 = fsub double 1.000000e+00, %57
  %59 = tail call double @sqrt(double noundef %28) #2
  %60 = fadd double %59, 1.000000e+00
  %61 = insertelement <2 x double> poison, double %48, i64 0
  %62 = insertelement <2 x double> %61, double %58, i64 1
  %63 = insertelement <2 x double> poison, double %55, i64 0
  %64 = insertelement <2 x double> %63, double %60, i64 1
  %65 = fdiv <2 x double> %62, %64
  %66 = extractelement <2 x double> %65, i64 0
  %67 = extractelement <2 x double> %65, i64 1
  %68 = fdiv double %66, %67
  br label %83

69:                                               ; preds = %12
  %70 = tail call double @sqrt(double noundef %28) #2
  %71 = fsub double 1.000000e+00, %70
  %72 = tail call double @sqrt(double noundef %28) #2
  %73 = fadd double %72, 1.000000e+00
  %74 = fneg double %48
  %75 = insertelement <2 x double> poison, double %74, i64 0
  %76 = insertelement <2 x double> %75, double %71, i64 1
  %77 = insertelement <2 x double> poison, double %55, i64 0
  %78 = insertelement <2 x double> %77, double %73, i64 1
  %79 = fdiv <2 x double> %76, %78
  %80 = extractelement <2 x double> %79, i64 0
  %81 = extractelement <2 x double> %79, i64 1
  %82 = fdiv double %80, %81
  br label %83

83:                                               ; preds = %69, %56
  %84 = phi double [ %68, %56 ], [ %82, %69 ]
  %85 = tail call double @log(double noundef %84) #2
  %86 = fneg double %85
  store double %86, ptr @omgchg_.del1, align 8, !tbaa !15
  %87 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !14
  %88 = fsub double 1.000000e+00, %87
  %89 = fcmp ult double %88, 0.000000e+00
  %90 = fneg double %88
  %91 = select i1 %89, double %90, double %88
  %92 = tail call double @sqrt(double noundef %91) #2
  %93 = fsub double 1.000000e+00, %92
  %94 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !14
  %95 = fsub double 1.000000e+00, %94
  %96 = fcmp ult double %95, 0.000000e+00
  %97 = fneg double %95
  %98 = select i1 %96, double %97, double %95
  %99 = tail call double @sqrt(double noundef %98) #2
  %100 = fadd double %99, 1.000000e+00
  %101 = fdiv double %93, %100
  %102 = fcmp ult double %101, 0.000000e+00
  %103 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !14
  %104 = fsub double 1.000000e+00, %103
  %105 = fcmp ult double %104, 0.000000e+00
  %106 = fneg double %104
  %107 = select i1 %105, double %106, double %104
  %108 = tail call double @sqrt(double noundef %107) #2
  %109 = fsub double 1.000000e+00, %108
  %110 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !14
  %111 = fsub double 1.000000e+00, %110
  %112 = fcmp ult double %111, 0.000000e+00
  %113 = fneg double %111
  %114 = select i1 %112, double %113, double %111
  %115 = tail call double @sqrt(double noundef %114) #2
  %116 = fadd double %115, 1.000000e+00
  %117 = fneg double %109
  %.sink = select i1 %102, double %117, double %109
  %118 = fdiv double %.sink, %116
  %119 = tail call double @log(double noundef %118) #2
  %120 = fneg double %119
  store double %120, ptr @omgchg_.del2, align 8, !tbaa !15
  %121 = load double, ptr @omgchg_.del1, align 8, !tbaa !15
  %122 = fdiv double %121, %120
  %123 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 40), align 8, !tbaa !16
  %124 = fcmp ult double %122, %123
  br i1 %124, label %125, label %126

125:                                              ; preds = %83, %6
  br label %126

126:                                              ; preds = %83, %9, %1, %125
  %.0 = phi i64 [ 1, %125 ], [ 0, %1 ], [ 0, %9 ], [ 0, %83 ]
  ret i64 %.0
}

; Function Attrs: mustprogress nofree nounwind willreturn memory(write)
declare double @log(double noundef) local_unnamed_addr #0

attributes #0 = { mustprogress nofree nounwind willreturn memory(write) "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nofree nounwind willreturn memory(readwrite, argmem: write, inaccessiblemem: write) 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 = { 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 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40}
!7 = !{!"long", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!6, !7, i64 8}
!11 = !{!12, !13, i64 112}
!12 = !{!"", !13, i64 0, !13, i64 8, !13, i64 16, !13, i64 24, !13, i64 32, !13, i64 40, !13, i64 48, !13, i64 56, !13, i64 64, !13, i64 72, !13, i64 80, !13, i64 88, !13, i64 96, !13, i64 104, !13, i64 112, !13, i64 120, !13, i64 128, !13, i64 136, !13, i64 144, !13, i64 152}
!13 = !{!"double", !8, i64 0}
!14 = !{!12, !13, i64 120}
!15 = !{!13, !13, i64 0}
!16 = !{!12, !13, i64 40}


; Effective O3 passes: EarlyCSEPass,GlobalOptPass,IPSCCPPass,InferFunctionAttrsPass,InstCombinePass,PostOrderFunctionAttrsPass,SLPVectorizerPass,SROAPass,SimplifyCFGPass,TailCallElimPass