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

@itcom1_ = external hidden global %struct.anon, align 8
@itcom3_ = external hidden global %struct.anon.0, align 8
@itcom2_ = external hidden global %struct.anon.1, align 8
@omgstr_.temp = external hidden global double, align 8
@omgstr_.temp1 = external hidden global double, align 8
@omgstr_.omstar = 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 speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #2

; 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 @omgstr_(ptr noundef %0) #3 {
  %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) #4
  %6 = load ptr, ptr %3, align 8, !tbaa !5
  %7 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  %8 = fcmp oge double %7, 2.500000e-01
  br i1 %8, label %12, label %9

9:                                                ; preds = %1
  %10 = load i64, ptr @itcom2_, align 8, !tbaa !12
  %11 = icmp ne i64 %10, 0
  br i1 %11, label %13, label %12

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

13:                                               ; preds = %9
  %14 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  %15 = fneg double %14
  %16 = call double @llvm.fmuladd.f64(double %15, double 4.000000e+00, double 1.000000e+00)
  %17 = fcmp oge double %16, 0.000000e+00
  br i1 %17, label %18, label %22

18:                                               ; preds = %13
  %19 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  %20 = fneg double %19
  %21 = call double @llvm.fmuladd.f64(double %20, double 4.000000e+00, double 1.000000e+00)
  br label %27

22:                                               ; preds = %13
  %23 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  %24 = fneg double %23
  %25 = call double @llvm.fmuladd.f64(double %24, double 4.000000e+00, double 1.000000e+00)
  %26 = fneg double %25
  br label %27

27:                                               ; preds = %22, %18
  %28 = phi double [ %21, %18 ], [ %26, %22 ]
  %29 = call double @sqrt(double noundef %28) #4
  %30 = fadd double %29, 1.000000e+00
  %31 = fdiv double 2.000000e+00, %30
  store double %31, ptr @omgstr_.omstar, align 8, !tbaa !15
  %32 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %33 = fcmp ogt double %32, 1.000000e+00
  br i1 %33, label %34, label %233

34:                                               ; preds = %27
  %35 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %36 = fcmp ogt double %35, 0.000000e+00
  br i1 %36, label %37, label %233

37:                                               ; preds = %34
  %38 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %39 = fsub double 2.000000e+00, %38
  %40 = fcmp oge double %39, 0.000000e+00
  br i1 %40, label %41, label %44

41:                                               ; preds = %37
  %42 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %43 = fsub double 2.000000e+00, %42
  br label %48

44:                                               ; preds = %37
  %45 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %46 = fsub double 2.000000e+00, %45
  %47 = fneg double %46
  br label %48

48:                                               ; preds = %44, %41
  %49 = phi double [ %43, %41 ], [ %47, %44 ]
  %50 = call double @sqrt(double noundef %49) #4
  %51 = fsub double 1.000000e+00, %50
  %52 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %53 = fsub double 2.000000e+00, %52
  %54 = fcmp oge double %53, 0.000000e+00
  br i1 %54, label %55, label %58

55:                                               ; preds = %48
  %56 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %57 = fsub double 2.000000e+00, %56
  br label %62

58:                                               ; preds = %48
  %59 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %60 = fsub double 2.000000e+00, %59
  %61 = fneg double %60
  br label %62

62:                                               ; preds = %58, %55
  %63 = phi double [ %57, %55 ], [ %61, %58 ]
  %64 = call double @sqrt(double noundef %63) #4
  %65 = fadd double 1.000000e+00, %64
  %66 = fdiv double %51, %65
  %67 = fcmp oge double %66, 0.000000e+00
  br i1 %67, label %68, label %98

68:                                               ; preds = %62
  %69 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %70 = fsub double 2.000000e+00, %69
  %71 = fcmp oge double %70, 0.000000e+00
  br i1 %71, label %72, label %75

72:                                               ; preds = %68
  %73 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %74 = fsub double 2.000000e+00, %73
  br label %79

75:                                               ; preds = %68
  %76 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %77 = fsub double 2.000000e+00, %76
  %78 = fneg double %77
  br label %79

79:                                               ; preds = %75, %72
  %80 = phi double [ %74, %72 ], [ %78, %75 ]
  %81 = call double @sqrt(double noundef %80) #4
  %82 = fsub double 1.000000e+00, %81
  %83 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %84 = fsub double 2.000000e+00, %83
  %85 = fcmp oge double %84, 0.000000e+00
  br i1 %85, label %86, label %89

86:                                               ; preds = %79
  %87 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %88 = fsub double 2.000000e+00, %87
  br label %93

89:                                               ; preds = %79
  %90 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %91 = fsub double 2.000000e+00, %90
  %92 = fneg double %91
  br label %93

93:                                               ; preds = %89, %86
  %94 = phi double [ %88, %86 ], [ %92, %89 ]
  %95 = call double @sqrt(double noundef %94) #4
  %96 = fadd double 1.000000e+00, %95
  %97 = fdiv double %82, %96
  br label %129

98:                                               ; preds = %62
  %99 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %100 = fsub double 2.000000e+00, %99
  %101 = fcmp oge double %100, 0.000000e+00
  br i1 %101, label %102, label %105

102:                                              ; preds = %98
  %103 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %104 = fsub double 2.000000e+00, %103
  br label %109

105:                                              ; preds = %98
  %106 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %107 = fsub double 2.000000e+00, %106
  %108 = fneg double %107
  br label %109

109:                                              ; preds = %105, %102
  %110 = phi double [ %104, %102 ], [ %108, %105 ]
  %111 = call double @sqrt(double noundef %110) #4
  %112 = fsub double 1.000000e+00, %111
  %113 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %114 = fsub double 2.000000e+00, %113
  %115 = fcmp oge double %114, 0.000000e+00
  br i1 %115, label %116, label %119

116:                                              ; preds = %109
  %117 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %118 = fsub double 2.000000e+00, %117
  br label %123

119:                                              ; preds = %109
  %120 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  %121 = fsub double 2.000000e+00, %120
  %122 = fneg double %121
  br label %123

123:                                              ; preds = %119, %116
  %124 = phi double [ %118, %116 ], [ %122, %119 ]
  %125 = call double @sqrt(double noundef %124) #4
  %126 = fadd double 1.000000e+00, %125
  %127 = fdiv double %112, %126
  %128 = fneg double %127
  br label %129

129:                                              ; preds = %123, %93
  %130 = phi double [ %97, %93 ], [ %128, %123 ]
  %131 = call double @log(double noundef %130) #4
  store double %131, ptr @omgstr_.temp, align 8, !tbaa !15
  %132 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %133 = fsub double 1.000000e+00, %132
  %134 = fcmp oge double %133, 0.000000e+00
  br i1 %134, label %135, label %138

135:                                              ; preds = %129
  %136 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %137 = fsub double 1.000000e+00, %136
  br label %142

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

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

149:                                              ; preds = %142
  %150 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %151 = fsub double 1.000000e+00, %150
  br label %156

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

156:                                              ; preds = %152, %149
  %157 = phi double [ %151, %149 ], [ %155, %152 ]
  %158 = call double @sqrt(double noundef %157) #4
  %159 = fadd double 1.000000e+00, %158
  %160 = fdiv double %145, %159
  %161 = fcmp oge double %160, 0.000000e+00
  br i1 %161, label %162, label %192

162:                                              ; preds = %156
  %163 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %164 = fsub double 1.000000e+00, %163
  %165 = fcmp oge double %164, 0.000000e+00
  br i1 %165, label %166, label %169

166:                                              ; preds = %162
  %167 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %168 = fsub double 1.000000e+00, %167
  br label %173

169:                                              ; preds = %162
  %170 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %171 = fsub double 1.000000e+00, %170
  %172 = fneg double %171
  br label %173

173:                                              ; preds = %169, %166
  %174 = phi double [ %168, %166 ], [ %172, %169 ]
  %175 = call double @sqrt(double noundef %174) #4
  %176 = fsub double 1.000000e+00, %175
  %177 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %178 = fsub double 1.000000e+00, %177
  %179 = fcmp oge double %178, 0.000000e+00
  br i1 %179, label %180, label %183

180:                                              ; preds = %173
  %181 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %182 = fsub double 1.000000e+00, %181
  br label %187

183:                                              ; preds = %173
  %184 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %185 = fsub double 1.000000e+00, %184
  %186 = fneg double %185
  br label %187

187:                                              ; preds = %183, %180
  %188 = phi double [ %182, %180 ], [ %186, %183 ]
  %189 = call double @sqrt(double noundef %188) #4
  %190 = fadd double 1.000000e+00, %189
  %191 = fdiv double %176, %190
  br label %223

192:                                              ; preds = %156
  %193 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), 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 = %192
  %197 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %198 = fsub double 1.000000e+00, %197
  br label %203

199:                                              ; preds = %192
  %200 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), 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) #4
  %206 = fsub double 1.000000e+00, %205
  %207 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), 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 14), 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 14), 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) #4
  %220 = fadd double 1.000000e+00, %219
  %221 = fdiv double %206, %220
  %222 = fneg double %221
  br label %223

223:                                              ; preds = %217, %187
  %224 = phi double [ %191, %187 ], [ %222, %217 ]
  %225 = call double @log(double noundef %224) #4
  store double %225, ptr @omgstr_.temp1, align 8, !tbaa !15
  %226 = load double, ptr @omgstr_.temp, align 8, !tbaa !15
  %227 = load double, ptr @omgstr_.temp1, align 8, !tbaa !15
  %228 = fdiv double %226, %227
  %229 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 5), align 8, !tbaa !17
  %230 = fcmp olt double %228, %229
  br i1 %230, label %231, label %232

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

232:                                              ; preds = %223
  br label %233

233:                                              ; preds = %232, %34, %27
  %234 = load double, ptr @omgstr_.omstar, align 8, !tbaa !15
  store double %234, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !18
  %235 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !18
  %236 = fsub double %235, 1.000000e+00
  store double %236, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  store i64 0, ptr @itcom2_, align 8, !tbaa !12
  store i64 0, ptr getelementptr inbounds (%struct.anon.1, ptr @itcom2_, i32 0, i32 4), align 8, !tbaa !19
  %237 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  %238 = fcmp oge double %237, 0.000000e+00
  br i1 %238, label %239, label %241

239:                                              ; preds = %233
  %240 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  br label %244

241:                                              ; preds = %233
  %242 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !9
  %243 = fneg double %242
  br label %244

244:                                              ; preds = %241, %239
  %245 = phi double [ %240, %239 ], [ %243, %241 ]
  %246 = call double @sqrt(double noundef %245) #4
  %247 = fmul double %246, 2.000000e+00
  store double %247, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %248 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %249 = fcmp oge double %248, 0.000000e+00
  br i1 %249, label %250, label %252

250:                                              ; preds = %244
  %251 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  br label %255

252:                                              ; preds = %244
  %253 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %254 = fneg double %253
  br label %255

255:                                              ; preds = %252, %250
  %256 = phi double [ %251, %250 ], [ %254, %252 ]
  %257 = call double @sqrt(double noundef %256) #4
  %258 = fsub double 1.000000e+00, %257
  %259 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %260 = fcmp oge double %259, 0.000000e+00
  br i1 %260, label %261, label %263

261:                                              ; preds = %255
  %262 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  br label %266

263:                                              ; preds = %255
  %264 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %265 = fneg double %264
  br label %266

266:                                              ; preds = %263, %261
  %267 = phi double [ %262, %261 ], [ %265, %263 ]
  %268 = call double @sqrt(double noundef %267) #4
  %269 = fadd double 1.000000e+00, %268
  %270 = fdiv double %258, %269
  store double %270, ptr %4, align 8, !tbaa !15
  %271 = load double, ptr %4, align 8, !tbaa !15
  %272 = load double, ptr %4, align 8, !tbaa !15
  %273 = fmul double %271, %272
  store double %273, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 11), align 8, !tbaa !21
  %274 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %275 = fsub double 2.000000e+00, %274
  %276 = fdiv double 2.000000e+00, %275
  store double %276, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 6), align 8, !tbaa !22
  %277 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %278 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !16
  %279 = fsub double 2.000000e+00, %278
  %280 = fdiv double %277, %279
  store double %280, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !23
  store double 1.000000e+00, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 10), align 8, !tbaa !24
  %281 = load i64, ptr @itcom1_, align 8, !tbaa !25
  %282 = add nsw i64 %281, 1
  store i64 %282, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !27
  %283 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !28
  store double %283, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 4), align 8, !tbaa !29
  store i64 1, ptr %2, align 8
  store i32 1, ptr %5, align 4
  br label %284

284:                                              ; preds = %266, %231, %12
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #4
  %285 = load i64, ptr %2, align 8
  ret i64 %285
}

; 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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #3 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

!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 8}
!10 = !{!"", !11, i64 0, !11, i64 8, !11, i64 16, !11, i64 24, !11, i64 32, !11, i64 40, !11, i64 48, !11, i64 56, !11, i64 64, !11, i64 72, !11, i64 80, !11, i64 88, !11, i64 96, !11, i64 104, !11, i64 112, !11, i64 120, !11, i64 128, !11, i64 136, !11, i64 144, !11, i64 152}
!11 = !{!"double", !7, i64 0}
!12 = !{!13, !14, i64 0}
!13 = !{!"", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32}
!14 = !{!"long", !7, i64 0}
!15 = !{!11, !11, i64 0}
!16 = !{!10, !11, i64 112}
!17 = !{!10, !11, i64 40}
!18 = !{!10, !11, i64 56}
!19 = !{!13, !14, i64 32}
!20 = !{!10, !11, i64 16}
!21 = !{!10, !11, i64 88}
!22 = !{!10, !11, i64 48}
!23 = !{!10, !11, i64 96}
!24 = !{!10, !11, i64 80}
!25 = !{!26, !14, i64 0}
!26 = !{!"", !14, i64 0, !14, i64 8, !14, i64 16, !14, i64 24, !14, i64 32, !14, i64 40}
!27 = !{!26, !14, i64 8}
!28 = !{!10, !11, i64 24}
!29 = !{!10, !11, i64 32}


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

@itcom1_ = external hidden local_unnamed_addr global %struct.anon, align 8
@itcom3_ = external hidden local_unnamed_addr global %struct.anon.0, align 8
@itcom2_ = external hidden local_unnamed_addr global %struct.anon.1, align 8
@omgstr_.temp = external hidden local_unnamed_addr global double, align 8
@omgstr_.temp1 = external hidden local_unnamed_addr global double, align 8
@omgstr_.omstar = 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 nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare double @llvm.fmuladd.f64(double, double, double) #1

; Function Attrs: mustprogress nofree nounwind willreturn memory(readwrite, argmem: write, inaccessiblemem: write) uwtable
define dso_local range(i64 0, 2) i64 @omgstr_(ptr nocapture noundef readnone %0) local_unnamed_addr #2 {
  %2 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 8), align 8, !tbaa !5
  %3 = fcmp ult double %2, 2.500000e-01
  %4 = load i64, ptr @itcom2_, align 8
  %5 = icmp ne i64 %4, 0
  %or.cond = select i1 %3, i1 %5, i1 false
  br i1 %or.cond, label %6, label %118

6:                                                ; preds = %1
  %7 = fneg double %2
  %8 = tail call double @llvm.fmuladd.f64(double %7, double 4.000000e+00, double 1.000000e+00)
  %9 = fcmp ult double %8, 0.000000e+00
  %10 = fneg double %8
  %11 = select i1 %9, double %10, double %8
  %12 = tail call double @sqrt(double noundef %11) #3
  %13 = fadd double %12, 1.000000e+00
  %14 = fdiv double 2.000000e+00, %13
  store double %14, ptr @omgstr_.omstar, align 8, !tbaa !10
  %15 = fcmp ogt double %14, 1.000000e+00
  %16 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8
  %17 = fcmp ogt double %16, 0.000000e+00
  %or.cond3 = select i1 %15, i1 %17, i1 false
  br i1 %or.cond3, label %18, label %88

18:                                               ; preds = %6
  %19 = fsub double 2.000000e+00, %14
  %20 = fcmp ult double %19, 0.000000e+00
  %21 = fneg double %19
  %22 = select i1 %20, double %21, double %19
  %23 = tail call double @sqrt(double noundef %22) #3
  %24 = fsub double 1.000000e+00, %23
  %25 = load double, ptr @omgstr_.omstar, align 8, !tbaa !10
  %26 = fsub double 2.000000e+00, %25
  %27 = fcmp ult double %26, 0.000000e+00
  %28 = fneg double %26
  %29 = select i1 %27, double %28, double %26
  %30 = tail call double @sqrt(double noundef %29) #3
  %31 = fadd double %30, 1.000000e+00
  %32 = fdiv double %24, %31
  %33 = fcmp ult double %32, 0.000000e+00
  %34 = load double, ptr @omgstr_.omstar, align 8, !tbaa !10
  %35 = fsub double 2.000000e+00, %34
  %36 = fcmp ult double %35, 0.000000e+00
  %37 = fneg double %35
  %38 = select i1 %36, double %37, double %35
  %39 = tail call double @sqrt(double noundef %38) #3
  %40 = fsub double 1.000000e+00, %39
  %41 = load double, ptr @omgstr_.omstar, align 8, !tbaa !10
  %42 = fsub double 2.000000e+00, %41
  %43 = fcmp ult double %42, 0.000000e+00
  %44 = fneg double %42
  %45 = select i1 %43, double %44, double %42
  %46 = tail call double @sqrt(double noundef %45) #3
  %47 = fadd double %46, 1.000000e+00
  %48 = fneg double %40
  %.sink = select i1 %33, double %48, double %40
  %49 = fdiv double %.sink, %47
  %50 = tail call double @log(double noundef %49) #3
  store double %50, ptr @omgstr_.temp, align 8, !tbaa !10
  %51 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %52 = fsub double 1.000000e+00, %51
  %53 = fcmp ult double %52, 0.000000e+00
  %54 = fneg double %52
  %55 = select i1 %53, double %54, double %52
  %56 = tail call double @sqrt(double noundef %55) #3
  %57 = fsub double 1.000000e+00, %56
  %58 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %59 = fsub double 1.000000e+00, %58
  %60 = fcmp ult double %59, 0.000000e+00
  %61 = fneg double %59
  %62 = select i1 %60, double %61, double %59
  %63 = tail call double @sqrt(double noundef %62) #3
  %64 = fadd double %63, 1.000000e+00
  %65 = fdiv double %57, %64
  %66 = fcmp ult double %65, 0.000000e+00
  %67 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %68 = fsub double 1.000000e+00, %67
  %69 = fcmp ult double %68, 0.000000e+00
  %70 = fneg double %68
  %71 = select i1 %69, double %70, double %68
  %72 = tail call double @sqrt(double noundef %71) #3
  %73 = fsub double 1.000000e+00, %72
  %74 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %75 = fsub double 1.000000e+00, %74
  %76 = fcmp ult double %75, 0.000000e+00
  %77 = fneg double %75
  %78 = select i1 %76, double %77, double %75
  %79 = tail call double @sqrt(double noundef %78) #3
  %80 = fadd double %79, 1.000000e+00
  %81 = fneg double %73
  %.sink33 = select i1 %66, double %81, double %73
  %82 = fdiv double %.sink33, %80
  %83 = tail call double @log(double noundef %82) #3
  store double %83, ptr @omgstr_.temp1, align 8, !tbaa !10
  %84 = load double, ptr @omgstr_.temp, align 8, !tbaa !10
  %85 = fdiv double %84, %83
  %86 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 40), align 8, !tbaa !12
  %87 = fcmp olt double %85, %86
  br i1 %87, label %118, label %._crit_edge

._crit_edge:                                      ; preds = %18
  %.pre = load double, ptr @omgstr_.omstar, align 8, !tbaa !10
  br label %88

88:                                               ; preds = %._crit_edge, %6
  %89 = phi double [ %.pre, %._crit_edge ], [ %14, %6 ]
  store double %89, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 56), align 8, !tbaa !13
  %90 = fadd double %89, -1.000000e+00
  store double %90, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  store i64 0, ptr @itcom2_, align 8, !tbaa !14
  store i64 0, ptr getelementptr inbounds (i8, ptr @itcom2_, i64 32), align 8, !tbaa !17
  %91 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 8), align 8
  %92 = fcmp oge double %91, 0.000000e+00
  %93 = fneg double %91
  %94 = select i1 %92, double %91, double %93
  %95 = tail call double @sqrt(double noundef %94) #3
  %96 = fmul double %95, 2.000000e+00
  store double %96, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !18
  %97 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8
  %98 = fcmp oge double %97, 0.000000e+00
  %99 = fneg double %97
  %100 = select i1 %98, double %97, double %99
  %101 = tail call double @sqrt(double noundef %100) #3
  %102 = fsub double 1.000000e+00, %101
  %103 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8
  %104 = fcmp oge double %103, 0.000000e+00
  %105 = fneg double %103
  %106 = select i1 %104, double %103, double %105
  %107 = tail call double @sqrt(double noundef %106) #3
  %108 = fadd double %107, 1.000000e+00
  %109 = fdiv double %102, %108
  %110 = fmul double %109, %109
  store double %110, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 88), align 8, !tbaa !19
  %111 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !11
  %112 = fsub double 2.000000e+00, %111
  %113 = fdiv double 2.000000e+00, %112
  store double %113, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 48), align 8, !tbaa !20
  %114 = fdiv double %111, %112
  store double %114, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 96), align 8, !tbaa !21
  store double 1.000000e+00, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 80), align 8, !tbaa !22
  %115 = load i64, ptr @itcom1_, align 8, !tbaa !23
  %116 = add nsw i64 %115, 1
  store i64 %116, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !25
  %117 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !26
  store double %117, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 32), align 8, !tbaa !27
  br label %118

118:                                              ; preds = %18, %1, %88
  %.0 = phi i64 [ 1, %88 ], [ 0, %1 ], [ 0, %18 ]
  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 nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { 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 #3 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !7, i64 8}
!6 = !{!"", !7, i64 0, !7, i64 8, !7, i64 16, !7, i64 24, !7, i64 32, !7, i64 40, !7, i64 48, !7, i64 56, !7, i64 64, !7, i64 72, !7, i64 80, !7, i64 88, !7, i64 96, !7, i64 104, !7, i64 112, !7, i64 120, !7, i64 128, !7, i64 136, !7, i64 144, !7, i64 152}
!7 = !{!"double", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!7, !7, i64 0}
!11 = !{!6, !7, i64 112}
!12 = !{!6, !7, i64 40}
!13 = !{!6, !7, i64 56}
!14 = !{!15, !16, i64 0}
!15 = !{!"", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32}
!16 = !{!"long", !8, i64 0}
!17 = !{!15, !16, i64 32}
!18 = !{!6, !7, i64 16}
!19 = !{!6, !7, i64 88}
!20 = !{!6, !7, i64 48}
!21 = !{!6, !7, i64 96}
!22 = !{!6, !7, i64 80}
!23 = !{!24, !16, i64 0}
!24 = !{!"", !16, i64 0, !16, i64 8, !16, i64 16, !16, i64 24, !16, i64 32, !16, i64 40}
!25 = !{!24, !16, i64 8}
!26 = !{!6, !7, i64 24}
!27 = !{!6, !7, i64 32}


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