; 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
@omeg_.zm1 = external hidden global double, align 8
@omeg_.zm2 = external hidden global double, align 8
@omeg_.temp = external hidden global double, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @omeg_(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  store double 0.000000e+00, ptr @omeg_.zm1, align 8, !tbaa !9
  store double 0.000000e+00, ptr @omeg_.zm2, align 8, !tbaa !9
  %6 = load ptr, ptr %5, align 8, !tbaa !5
  %7 = load i64, ptr %6, align 8, !tbaa !11
  %8 = icmp eq i64 %7, 1
  br i1 %8, label %9, label %10

9:                                                ; preds = %2
  br label %87

10:                                               ; preds = %2
  %11 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !13
  %12 = fsub double 1.000000e+00, %11
  %13 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %14 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %15 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %16 = fmul double %14, %15
  %17 = call double @llvm.fmuladd.f64(double %13, double %16, double 1.000000e+00)
  %18 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %19 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %20 = fsub double 2.000000e+00, %19
  %21 = fmul double %18, %20
  %22 = fneg double %21
  %23 = call double @llvm.fmuladd.f64(double %12, double %17, double %22)
  %24 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %25 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %26 = fsub double %25, 1.000000e+00
  %27 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !13
  %28 = fsub double %26, %27
  %29 = fmul double %24, %28
  %30 = fdiv double %23, %29
  store double %30, ptr @omeg_.zm1, align 8, !tbaa !9
  %31 = load i64, ptr getelementptr inbounds (%struct.anon.1, ptr @itcom2_, i32 0, i32 2), align 8, !tbaa !17
  %32 = icmp ne i64 %31, 0
  br i1 %32, label %38, label %33

33:                                               ; preds = %10
  %34 = load ptr, ptr %4, align 8, !tbaa !5
  %35 = load double, ptr %34, align 8, !tbaa !9
  %36 = load double, ptr @itcom3_, align 8, !tbaa !19
  %37 = fdiv double %35, %36
  store double %37, ptr @omeg_.zm2, align 8, !tbaa !9
  br label %38

38:                                               ; preds = %33, %10
  %39 = load i64, ptr getelementptr inbounds (%struct.anon.1, ptr @itcom2_, i32 0, i32 2), align 8, !tbaa !17
  %40 = icmp ne i64 %39, 0
  br i1 %40, label %41, label %61

41:                                               ; preds = %38
  %42 = load ptr, ptr %4, align 8, !tbaa !5
  %43 = load double, ptr %42, align 8, !tbaa !9
  %44 = load double, ptr @itcom3_, align 8, !tbaa !19
  %45 = fdiv double %43, %44
  %46 = fcmp oge double %45, 0.000000e+00
  br i1 %46, label %47, label %52

47:                                               ; preds = %41
  %48 = load ptr, ptr %4, align 8, !tbaa !5
  %49 = load double, ptr %48, align 8, !tbaa !9
  %50 = load double, ptr @itcom3_, align 8, !tbaa !19
  %51 = fdiv double %49, %50
  br label %58

52:                                               ; preds = %41
  %53 = load ptr, ptr %4, align 8, !tbaa !5
  %54 = load double, ptr %53, align 8, !tbaa !9
  %55 = load double, ptr @itcom3_, align 8, !tbaa !19
  %56 = fdiv double %54, %55
  %57 = fneg double %56
  br label %58

58:                                               ; preds = %52, %47
  %59 = phi double [ %51, %47 ], [ %57, %52 ]
  %60 = call double @sqrt(double noundef %59) #3
  store double %60, ptr @omeg_.zm2, align 8, !tbaa !9
  br label %61

61:                                               ; preds = %58, %38
  %62 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %63 = load double, ptr @omeg_.zm1, align 8, !tbaa !9
  %64 = fcmp oge double %62, %63
  br i1 %64, label %65, label %67

65:                                               ; preds = %61
  %66 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  br label %69

67:                                               ; preds = %61
  %68 = load double, ptr @omeg_.zm1, align 8, !tbaa !9
  br label %69

69:                                               ; preds = %67, %65
  %70 = phi double [ %66, %65 ], [ %68, %67 ]
  %71 = load double, ptr @omeg_.zm2, align 8, !tbaa !9
  %72 = fcmp oge double %70, %71
  br i1 %72, label %73, label %83

73:                                               ; preds = %69
  %74 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %75 = load double, ptr @omeg_.zm1, align 8, !tbaa !9
  %76 = fcmp oge double %74, %75
  br i1 %76, label %77, label %79

77:                                               ; preds = %73
  %78 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  br label %81

79:                                               ; preds = %73
  %80 = load double, ptr @omeg_.zm1, align 8, !tbaa !9
  br label %81

81:                                               ; preds = %79, %77
  %82 = phi double [ %78, %77 ], [ %80, %79 ]
  br label %85

83:                                               ; preds = %69
  %84 = load double, ptr @omeg_.zm2, align 8, !tbaa !9
  br label %85

85:                                               ; preds = %83, %81
  %86 = phi double [ %82, %81 ], [ %84, %83 ]
  store double %86, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  br label %87

87:                                               ; preds = %85, %9
  %88 = load i64, ptr @itcom1_, align 8, !tbaa !21
  %89 = add nsw i64 %88, 1
  store i64 %89, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !23
  %90 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !24
  store double %90, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 4), align 8, !tbaa !25
  %91 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %92 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %93 = fmul double %92, 4.000000e+00
  %94 = fcmp oge double %91, %93
  br i1 %94, label %95, label %96

95:                                               ; preds = %87
  br label %155

96:                                               ; preds = %87
  %97 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %98 = fneg double %97
  %99 = call double @llvm.fmuladd.f64(double %98, double 2.000000e+00, double 1.000000e+00)
  %100 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %101 = call double @llvm.fmuladd.f64(double %100, double 4.000000e+00, double %99)
  %102 = fcmp oge double %101, 0.000000e+00
  br i1 %102, label %103, label %109

103:                                              ; preds = %96
  %104 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %105 = fneg double %104
  %106 = call double @llvm.fmuladd.f64(double %105, double 2.000000e+00, double 1.000000e+00)
  %107 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %108 = call double @llvm.fmuladd.f64(double %107, double 4.000000e+00, double %106)
  br label %116

109:                                              ; preds = %96
  %110 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %111 = fneg double %110
  %112 = call double @llvm.fmuladd.f64(double %111, double 2.000000e+00, double 1.000000e+00)
  %113 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %114 = call double @llvm.fmuladd.f64(double %113, double 4.000000e+00, double %112)
  %115 = fneg double %114
  br label %116

116:                                              ; preds = %109, %103
  %117 = phi double [ %108, %103 ], [ %115, %109 ]
  %118 = call double @sqrt(double noundef %117) #3
  store double %118, ptr @omeg_.temp, align 8, !tbaa !9
  %119 = load double, ptr @omeg_.temp, align 8, !tbaa !9
  %120 = fadd double %119, 1.000000e+00
  %121 = fdiv double 2.000000e+00, %120
  %122 = fcmp oge double %121, 1.000000e+00
  br i1 %122, label %123, label %127

123:                                              ; preds = %116
  %124 = load double, ptr @omeg_.temp, align 8, !tbaa !9
  %125 = fadd double %124, 1.000000e+00
  %126 = fdiv double 2.000000e+00, %125
  br label %128

127:                                              ; preds = %116
  br label %128

128:                                              ; preds = %127, %123
  %129 = phi double [ %126, %123 ], [ 1.000000e+00, %127 ]
  store double %129, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %130 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %131 = fsub double 1.000000e+00, %130
  %132 = load double, ptr @omeg_.temp, align 8, !tbaa !9
  %133 = fdiv double %131, %132
  store double %133, ptr @omeg_.temp, align 8, !tbaa !9
  %134 = load double, ptr @omeg_.temp, align 8, !tbaa !9
  %135 = fsub double 1.000000e+00, %134
  %136 = load double, ptr @omeg_.temp, align 8, !tbaa !9
  %137 = fadd double %136, 1.000000e+00
  %138 = fdiv double %135, %137
  store double %138, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !26
  %139 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %140 = fsub double %139, 1.000000e+00
  %141 = fcmp oge double %140, 0.000000e+00
  br i1 %141, label %142, label %145

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

145:                                              ; preds = %128
  %146 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %147 = fsub double %146, 1.000000e+00
  %148 = fneg double %147
  br label %149

149:                                              ; preds = %145, %142
  %150 = phi double [ %144, %142 ], [ %148, %145 ]
  %151 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 16), align 8, !tbaa !27
  %152 = fcmp olt double %150, %151
  br i1 %152, label %153, label %154

153:                                              ; preds = %149
  store double 0.000000e+00, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !26
  br label %154

154:                                              ; preds = %153, %149
  store i32 0, ptr %3, align 4
  br label %187

155:                                              ; preds = %95
  %156 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %157 = fcmp oge double %156, 0.000000e+00
  br i1 %157, label %158, label %160

158:                                              ; preds = %155
  %159 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  br label %163

160:                                              ; preds = %155
  %161 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %162 = fneg double %161
  br label %163

163:                                              ; preds = %160, %158
  %164 = phi double [ %159, %158 ], [ %162, %160 ]
  %165 = call double @sqrt(double noundef %164) #3
  %166 = fmul double %165, 2.000000e+00
  store double %166, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !20
  %167 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %168 = fneg double %167
  %169 = call double @llvm.fmuladd.f64(double %168, double 4.000000e+00, double 1.000000e+00)
  %170 = fcmp oge double %169, 0.000000e+00
  br i1 %170, label %171, label %175

171:                                              ; preds = %163
  %172 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %173 = fneg double %172
  %174 = call double @llvm.fmuladd.f64(double %173, double 4.000000e+00, double 1.000000e+00)
  br label %180

175:                                              ; preds = %163
  %176 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 1), align 8, !tbaa !15
  %177 = fneg double %176
  %178 = call double @llvm.fmuladd.f64(double %177, double 4.000000e+00, double 1.000000e+00)
  %179 = fneg double %178
  br label %180

180:                                              ; preds = %175, %171
  %181 = phi double [ %174, %171 ], [ %179, %175 ]
  %182 = call double @sqrt(double noundef %181) #3
  %183 = fadd double %182, 1.000000e+00
  %184 = fdiv double 2.000000e+00, %183
  store double %184, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %185 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 7), align 8, !tbaa !16
  %186 = fsub double %185, 1.000000e+00
  store double %186, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !26
  store i64 0, ptr @itcom2_, align 8, !tbaa !28
  store i64 0, ptr getelementptr inbounds (%struct.anon.1, ptr @itcom2_, i32 0, i32 4), align 8, !tbaa !29
  store i32 0, ptr %3, align 4
  br label %187

187:                                              ; preds = %180, %154
  %188 = load i32, ptr %3, align 4
  ret i32 %188
}

; 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

attributes #0 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { 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 }

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

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(readwrite, inaccessiblemem: write) uwtable
define dso_local noundef i32 @omeg_(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  store double 0.000000e+00, ptr @omeg_.zm1, align 8, !tbaa !5
  store double 0.000000e+00, ptr @omeg_.zm2, align 8, !tbaa !5
  %3 = load i64, ptr %1, align 8, !tbaa !9
  %4 = icmp eq i64 %3, 1
  br i1 %4, label %._crit_edge, label %5

._crit_edge:                                      ; preds = %2
  %.pre15 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  br label %33

5:                                                ; preds = %2
  %6 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !13
  %7 = fsub double 1.000000e+00, %6
  %8 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 8), align 8, !tbaa !14
  %9 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 56), align 8, !tbaa !15
  %10 = fmul double %9, %9
  %11 = tail call double @llvm.fmuladd.f64(double %8, double %10, double 1.000000e+00)
  %12 = fsub double 2.000000e+00, %9
  %13 = fneg double %9
  %14 = fmul double %12, %13
  %15 = tail call double @llvm.fmuladd.f64(double %7, double %11, double %14)
  %16 = fadd double %9, -1.000000e+00
  %17 = fsub double %16, %6
  %18 = fmul double %9, %17
  %19 = fdiv double %15, %18
  store double %19, ptr @omeg_.zm1, align 8, !tbaa !5
  %20 = load i64, ptr getelementptr inbounds (i8, ptr @itcom2_, i64 16), align 8, !tbaa !16
  %.not = icmp eq i64 %20, 0
  %21 = load double, ptr %0, align 8, !tbaa !5
  %22 = load double, ptr @itcom3_, align 8, !tbaa !18
  %23 = fdiv double %21, %22
  br i1 %.not, label %.thread, label %24

24:                                               ; preds = %5
  %25 = fcmp ult double %23, 0.000000e+00
  %26 = fneg double %23
  %27 = select i1 %25, double %26, double %23
  %28 = tail call double @sqrt(double noundef %27) #3
  %.pre = load double, ptr @omeg_.zm1, align 8
  br label %.thread

.thread:                                          ; preds = %5, %24
  %29 = phi double [ %.pre, %24 ], [ %19, %5 ]
  %storemerge = phi double [ %28, %24 ], [ %23, %5 ]
  store double %storemerge, ptr @omeg_.zm2, align 8, !tbaa !5
  %30 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8
  %31 = fcmp oge double %30, %29
  %32 = select i1 %31, double %30, double %29
  %.inv = fcmp oge double %32, %storemerge
  %. = select i1 %.inv, double %32, double %storemerge
  store double %., ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  br label %33

33:                                               ; preds = %._crit_edge, %.thread
  %34 = phi double [ %.pre15, %._crit_edge ], [ %., %.thread ]
  %35 = load i64, ptr @itcom1_, align 8, !tbaa !19
  %36 = add nsw i64 %35, 1
  store i64 %36, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !21
  %37 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !22
  store double %37, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 32), align 8, !tbaa !23
  %38 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 8), align 8
  %39 = fmul double %38, 4.000000e+00
  %40 = fcmp ult double %34, %39
  br i1 %40, label %41, label %66

41:                                               ; preds = %33
  %42 = fneg double %34
  %43 = tail call double @llvm.fmuladd.f64(double %42, double 2.000000e+00, double 1.000000e+00)
  %44 = tail call double @llvm.fmuladd.f64(double %38, double 4.000000e+00, double %43)
  %45 = fcmp ult double %44, 0.000000e+00
  %46 = fneg double %44
  %47 = select i1 %45, double %46, double %44
  %48 = tail call double @sqrt(double noundef %47) #3
  %49 = fadd double %48, 1.000000e+00
  %50 = fdiv double 2.000000e+00, %49
  %51 = fcmp oge double %50, 1.000000e+00
  %52 = select i1 %51, double %50, double 1.000000e+00
  store double %52, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 56), align 8, !tbaa !15
  %53 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  %54 = fsub double 1.000000e+00, %53
  %55 = fdiv double %54, %48
  store double %55, ptr @omeg_.temp, align 8, !tbaa !5
  %56 = fsub double 1.000000e+00, %55
  %57 = fadd double %55, 1.000000e+00
  %58 = fdiv double %56, %57
  store double %58, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !24
  %59 = fadd double %52, -1.000000e+00
  %60 = fcmp ult double %59, 0.000000e+00
  %61 = fneg double %59
  %62 = select i1 %60, double %61, double %59
  %63 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 128), align 8, !tbaa !25
  %64 = fcmp olt double %62, %63
  br i1 %64, label %65, label %82

65:                                               ; preds = %41
  store double 0.000000e+00, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !24
  br label %82

66:                                               ; preds = %33
  %67 = fcmp oge double %38, 0.000000e+00
  %68 = fneg double %38
  %69 = select i1 %67, double %38, double %68
  %70 = tail call double @sqrt(double noundef %69) #3
  %71 = fmul double %70, 2.000000e+00
  store double %71, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  %72 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 8), align 8, !tbaa !14
  %73 = fneg double %72
  %74 = tail call double @llvm.fmuladd.f64(double %73, double 4.000000e+00, double 1.000000e+00)
  %75 = fcmp ult double %74, 0.000000e+00
  %76 = fneg double %74
  %77 = select i1 %75, double %76, double %74
  %78 = tail call double @sqrt(double noundef %77) #3
  %79 = fadd double %78, 1.000000e+00
  %80 = fdiv double 2.000000e+00, %79
  store double %80, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 56), align 8, !tbaa !15
  %81 = fadd double %80, -1.000000e+00
  store double %81, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !24
  store i64 0, ptr @itcom2_, align 8, !tbaa !26
  store i64 0, ptr getelementptr inbounds (i8, ptr @itcom2_, i64 32), align 8, !tbaa !27
  br label %82

82:                                               ; preds = %41, %65, %66
  ret i32 0
}

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

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

attributes #0 = { mustprogress nofree nounwind willreturn memory(readwrite, 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 #1 = { 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 #2 = { mustprogress nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !6, i64 16}
!12 = !{!"", !6, i64 0, !6, i64 8, !6, i64 16, !6, i64 24, !6, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !6, i64 64, !6, i64 72, !6, i64 80, !6, i64 88, !6, i64 96, !6, i64 104, !6, i64 112, !6, i64 120, !6, i64 128, !6, i64 136, !6, i64 144, !6, i64 152}
!13 = !{!12, !6, i64 120}
!14 = !{!12, !6, i64 8}
!15 = !{!12, !6, i64 56}
!16 = !{!17, !10, i64 16}
!17 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!18 = !{!12, !6, i64 0}
!19 = !{!20, !10, i64 0}
!20 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!21 = !{!20, !10, i64 8}
!22 = !{!12, !6, i64 24}
!23 = !{!12, !6, i64 32}
!24 = !{!12, !6, i64 112}
!25 = !{!12, !6, i64 128}
!26 = !{!17, !10, i64 0}
!27 = !{!17, !10, i64 32}


; Effective O3 passes: DSEPass,EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,PostOrderFunctionAttrsPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass