; 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
@c_b21 = external hidden global double, align 8
@itcom2_ = external hidden global %struct.anon.1, align 8
@chgsi_.zm1 = external hidden global double, align 8
@chgsi_.zm2 = external hidden global double, align 8
@chgsi_.cmold = external hidden global double, align 8

; Function Attrs: nounwind uwtable
define dso_local i32 @chgsi_(ptr noundef %0, ptr noundef %1) #0 {
  %3 = alloca i32, align 4
  %4 = alloca ptr, align 8
  %5 = alloca ptr, align 8
  %6 = alloca i64, align 8
  %7 = alloca i32, align 4
  store ptr %0, ptr %4, align 8, !tbaa !5
  store ptr %1, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #4
  %8 = load ptr, ptr %5, align 8, !tbaa !5
  %9 = load i64, ptr %8, align 8, !tbaa !9
  switch i64 %9, label %13 [
    i64 1, label %10
    i64 2, label %11
    i64 3, label %12
  ]

10:                                               ; preds = %2
  br label %14

11:                                               ; preds = %2
  br label %126

12:                                               ; preds = %2
  br label %247

13:                                               ; preds = %2
  br label %14

14:                                               ; preds = %13, %10
  %15 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %16 = icmp eq i64 %15, 0
  br i1 %16, label %17, label %19

17:                                               ; preds = %14
  %18 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  store double %18, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %19

19:                                               ; preds = %17, %14
  %20 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %21 = icmp ne i64 %20, 0
  br i1 %21, label %22, label %27

22:                                               ; preds = %19
  %23 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %24 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !17
  %25 = sub nsw i64 %23, %24
  store i64 %25, ptr %6, align 8, !tbaa !9
  %26 = call double @cheby_(ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 8), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 9), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 11), ptr noundef %6, ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 13))
  store double %26, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %27

27:                                               ; preds = %22, %19
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  %29 = load double, ptr %28, align 8, !tbaa !16
  %30 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  %31 = fdiv double %29, %30
  store double %31, ptr @chgsi_.zm2, align 8, !tbaa !16
  %32 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  store double %32, ptr @chgsi_.cmold, align 8, !tbaa !16
  %33 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %34 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %35 = fcmp oge double %33, %34
  br i1 %35, label %36, label %38

36:                                               ; preds = %27
  %37 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %40

38:                                               ; preds = %27
  %39 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %40

40:                                               ; preds = %38, %36
  %41 = phi double [ %37, %36 ], [ %39, %38 ]
  %42 = load double, ptr @chgsi_.cmold, align 8, !tbaa !16
  %43 = fcmp oge double %41, %42
  br i1 %43, label %44, label %54

44:                                               ; preds = %40
  %45 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %46 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %47 = fcmp oge double %45, %46
  br i1 %47, label %48, label %50

48:                                               ; preds = %44
  %49 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %52

50:                                               ; preds = %44
  %51 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %52

52:                                               ; preds = %50, %48
  %53 = phi double [ %49, %48 ], [ %51, %50 ]
  br label %56

54:                                               ; preds = %40
  %55 = load double, ptr @chgsi_.cmold, align 8, !tbaa !16
  br label %56

56:                                               ; preds = %54, %52
  %57 = phi double [ %53, %52 ], [ %55, %54 ]
  store double %57, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %58 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %59 = fcmp oge double %58, 1.000000e+00
  br i1 %59, label %60, label %61

60:                                               ; preds = %56
  br label %124

61:                                               ; preds = %56
  %62 = load i64, ptr getelementptr inbounds (%struct.anon.1, ptr @itcom2_, i32 0, i32 2), align 8, !tbaa !19
  %63 = icmp ne i64 %62, 0
  br i1 %63, label %64, label %67

64:                                               ; preds = %61
  %65 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %66 = fneg double %65
  store double %66, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 13), align 8, !tbaa !21
  br label %67

67:                                               ; preds = %64, %61
  %68 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %69 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 13), align 8, !tbaa !21
  %70 = fsub double %68, %69
  %71 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %72 = fsub double 2.000000e+00, %71
  %73 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 13), align 8, !tbaa !21
  %74 = fsub double %72, %73
  %75 = fdiv double %70, %74
  store double %75, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %76 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %77 = fsub double 2.000000e+00, %76
  %78 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 13), align 8, !tbaa !21
  %79 = fsub double %77, %78
  %80 = fdiv double 2.000000e+00, %79
  store double %80, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 6), align 8, !tbaa !23
  %81 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %82 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %83 = fneg double %81
  %84 = call double @llvm.fmuladd.f64(double %83, double %82, double 1.000000e+00)
  %85 = fcmp oge double %84, 0.000000e+00
  br i1 %85, label %86, label %91

86:                                               ; preds = %67
  %87 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %88 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %89 = fneg double %87
  %90 = call double @llvm.fmuladd.f64(double %89, double %88, double 1.000000e+00)
  br label %97

91:                                               ; preds = %67
  %92 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %93 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %94 = fneg double %92
  %95 = call double @llvm.fmuladd.f64(double %94, double %93, double 1.000000e+00)
  %96 = fneg double %95
  br label %97

97:                                               ; preds = %91, %86
  %98 = phi double [ %90, %86 ], [ %96, %91 ]
  %99 = call double @sqrt(double noundef %98) #4
  %100 = fsub double 1.000000e+00, %99
  %101 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %102 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %103 = fneg double %101
  %104 = call double @llvm.fmuladd.f64(double %103, double %102, double 1.000000e+00)
  %105 = fcmp oge double %104, 0.000000e+00
  br i1 %105, label %106, label %111

106:                                              ; preds = %97
  %107 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %108 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %109 = fneg double %107
  %110 = call double @llvm.fmuladd.f64(double %109, double %108, double 1.000000e+00)
  br label %117

111:                                              ; preds = %97
  %112 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %113 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %114 = fneg double %112
  %115 = call double @llvm.fmuladd.f64(double %114, double %113, double 1.000000e+00)
  %116 = fneg double %115
  br label %117

117:                                              ; preds = %111, %106
  %118 = phi double [ %110, %106 ], [ %116, %111 ]
  %119 = call double @sqrt(double noundef %118) #4
  %120 = fadd double %119, 1.000000e+00
  %121 = fdiv double %100, %120
  store double %121, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 11), align 8, !tbaa !24
  %122 = load i64, ptr @itcom1_, align 8, !tbaa !11
  store i64 %122, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !17
  %123 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  store double %123, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 4), align 8, !tbaa !25
  store double 1.000000e+00, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 10), align 8, !tbaa !26
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %324

124:                                              ; preds = %60
  %125 = load double, ptr @chgsi_.cmold, align 8, !tbaa !16
  store double %125, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  store i64 0, ptr @itcom2_, align 8, !tbaa !27
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %324

126:                                              ; preds = %11
  %127 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %128 = icmp eq i64 %127, 0
  br i1 %128, label %129, label %131

129:                                              ; preds = %126
  %130 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  store double %130, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %131

131:                                              ; preds = %129, %126
  %132 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %133 = icmp ne i64 %132, 0
  br i1 %133, label %134, label %140

134:                                              ; preds = %131
  %135 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %136 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !17
  %137 = sub nsw i64 %135, %136
  %138 = shl i64 %137, 1
  store i64 %138, ptr %6, align 8, !tbaa !9
  %139 = call double @cheby_(ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 8), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 9), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 11), ptr noundef %6, ptr noundef @c_b21, ptr noundef @c_b21)
  store double %139, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %140

140:                                              ; preds = %134, %131
  %141 = load ptr, ptr %4, align 8, !tbaa !5
  %142 = load double, ptr %141, align 8, !tbaa !16
  %143 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  %144 = fdiv double %142, %143
  %145 = fcmp oge double %144, 0.000000e+00
  br i1 %145, label %146, label %151

146:                                              ; preds = %140
  %147 = load ptr, ptr %4, align 8, !tbaa !5
  %148 = load double, ptr %147, align 8, !tbaa !16
  %149 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  %150 = fdiv double %148, %149
  br label %157

151:                                              ; preds = %140
  %152 = load ptr, ptr %4, align 8, !tbaa !5
  %153 = load double, ptr %152, align 8, !tbaa !16
  %154 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  %155 = fdiv double %153, %154
  %156 = fneg double %155
  br label %157

157:                                              ; preds = %151, %146
  %158 = phi double [ %150, %146 ], [ %156, %151 ]
  %159 = call double @sqrt(double noundef %158) #4
  store double %159, ptr @chgsi_.zm2, align 8, !tbaa !16
  %160 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  store double %160, ptr @chgsi_.cmold, align 8, !tbaa !16
  %161 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %162 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %163 = fcmp oge double %161, %162
  br i1 %163, label %164, label %166

164:                                              ; preds = %157
  %165 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %168

166:                                              ; preds = %157
  %167 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %168

168:                                              ; preds = %166, %164
  %169 = phi double [ %165, %164 ], [ %167, %166 ]
  %170 = load double, ptr @chgsi_.cmold, align 8, !tbaa !16
  %171 = fcmp oge double %169, %170
  br i1 %171, label %172, label %182

172:                                              ; preds = %168
  %173 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %174 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %175 = fcmp oge double %173, %174
  br i1 %175, label %176, label %178

176:                                              ; preds = %172
  %177 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %180

178:                                              ; preds = %172
  %179 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %180

180:                                              ; preds = %178, %176
  %181 = phi double [ %177, %176 ], [ %179, %178 ]
  br label %184

182:                                              ; preds = %168
  %183 = load double, ptr @chgsi_.cmold, align 8, !tbaa !16
  br label %184

184:                                              ; preds = %182, %180
  %185 = phi double [ %181, %180 ], [ %183, %182 ]
  store double %185, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %186 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %187 = fcmp oge double %186, 1.000000e+00
  br i1 %187, label %188, label %190

188:                                              ; preds = %184
  %189 = load double, ptr @chgsi_.cmold, align 8, !tbaa !16
  store double %189, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  store i64 0, ptr @itcom2_, align 8, !tbaa !27
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %324

190:                                              ; preds = %184
  %191 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %192 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %193 = fmul double %191, %192
  %194 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %195 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %196 = fneg double %194
  %197 = call double @llvm.fmuladd.f64(double %196, double %195, double 2.000000e+00)
  %198 = fdiv double %193, %197
  store double %198, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 12), align 8, !tbaa !22
  %199 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %200 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %201 = fneg double %199
  %202 = call double @llvm.fmuladd.f64(double %201, double %200, double 2.000000e+00)
  %203 = fdiv double 2.000000e+00, %202
  store double %203, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 6), align 8, !tbaa !23
  %204 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %205 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %206 = fneg double %204
  %207 = call double @llvm.fmuladd.f64(double %206, double %205, double 1.000000e+00)
  %208 = fcmp oge double %207, 0.000000e+00
  br i1 %208, label %209, label %214

209:                                              ; preds = %190
  %210 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %211 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %212 = fneg double %210
  %213 = call double @llvm.fmuladd.f64(double %212, double %211, double 1.000000e+00)
  br label %220

214:                                              ; preds = %190
  %215 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %216 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %217 = fneg double %215
  %218 = call double @llvm.fmuladd.f64(double %217, double %216, double 1.000000e+00)
  %219 = fneg double %218
  br label %220

220:                                              ; preds = %214, %209
  %221 = phi double [ %213, %209 ], [ %219, %214 ]
  %222 = call double @sqrt(double noundef %221) #4
  %223 = fsub double 1.000000e+00, %222
  %224 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %225 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %226 = fneg double %224
  %227 = call double @llvm.fmuladd.f64(double %226, double %225, double 1.000000e+00)
  %228 = fcmp oge double %227, 0.000000e+00
  br i1 %228, label %229, label %234

229:                                              ; preds = %220
  %230 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %231 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %232 = fneg double %230
  %233 = call double @llvm.fmuladd.f64(double %232, double %231, double 1.000000e+00)
  br label %240

234:                                              ; preds = %220
  %235 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %236 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 2), align 8, !tbaa !13
  %237 = fneg double %235
  %238 = call double @llvm.fmuladd.f64(double %237, double %236, double 1.000000e+00)
  %239 = fneg double %238
  br label %240

240:                                              ; preds = %234, %229
  %241 = phi double [ %233, %229 ], [ %239, %234 ]
  %242 = call double @sqrt(double noundef %241) #4
  %243 = fadd double %242, 1.000000e+00
  %244 = fdiv double %223, %243
  store double %244, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 11), align 8, !tbaa !24
  %245 = load i64, ptr @itcom1_, align 8, !tbaa !11
  store i64 %245, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !17
  %246 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  store double %246, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 4), align 8, !tbaa !25
  store double 1.000000e+00, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 10), align 8, !tbaa !26
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %324

247:                                              ; preds = %12
  %248 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  %249 = fcmp oeq double %248, 0.000000e+00
  br i1 %249, label %250, label %251

250:                                              ; preds = %247
  store double 0x3FC5F6199780BAA6, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  br label %251

251:                                              ; preds = %250, %247
  %252 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %253 = icmp ne i64 %252, 0
  br i1 %253, label %254, label %259

254:                                              ; preds = %251
  %255 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %256 = load i64, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !17
  %257 = sub nsw i64 %255, %256
  store i64 %257, ptr %6, align 8, !tbaa !9
  %258 = call double @cheby_(ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 8), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 9), ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 11), ptr noundef %6, ptr noundef getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), ptr noundef @c_b21)
  store double %258, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %262

259:                                              ; preds = %251
  %260 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  store double %260, ptr @chgsi_.zm1, align 8, !tbaa !16
  %261 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  store double %261, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !29
  br label %262

262:                                              ; preds = %259, %254
  %263 = load ptr, ptr %4, align 8, !tbaa !5
  %264 = load double, ptr %263, align 8, !tbaa !16
  %265 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  %266 = fdiv double %264, %265
  store double %266, ptr @chgsi_.zm2, align 8, !tbaa !16
  %267 = load i64, ptr @itcom2_, align 8, !tbaa !27
  %268 = icmp ne i64 %267, 0
  br i1 %268, label %298, label %269

269:                                              ; preds = %262
  %270 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %271 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %272 = fcmp oge double %270, %271
  br i1 %272, label %273, label %275

273:                                              ; preds = %269
  %274 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %277

275:                                              ; preds = %269
  %276 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %277

277:                                              ; preds = %275, %273
  %278 = phi double [ %274, %273 ], [ %276, %275 ]
  %279 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  %280 = fcmp oge double %278, %279
  br i1 %280, label %281, label %291

281:                                              ; preds = %277
  %282 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %283 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %284 = fcmp oge double %282, %283
  br i1 %284, label %285, label %287

285:                                              ; preds = %281
  %286 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %289

287:                                              ; preds = %281
  %288 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %289

289:                                              ; preds = %287, %285
  %290 = phi double [ %286, %285 ], [ %288, %287 ]
  br label %293

291:                                              ; preds = %277
  %292 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  br label %293

293:                                              ; preds = %291, %289
  %294 = phi double [ %290, %289 ], [ %292, %291 ]
  store double %294, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 14), align 8, !tbaa !28
  %295 = load i64, ptr @itcom1_, align 8, !tbaa !11
  %296 = add nsw i64 %295, 1
  store i64 %296, ptr getelementptr inbounds (%struct.anon, ptr @itcom1_, i32 0, i32 1), align 8, !tbaa !17
  %297 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 3), align 8, !tbaa !18
  store double %297, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 4), align 8, !tbaa !25
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %324

298:                                              ; preds = %262
  %299 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %300 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %301 = fcmp oge double %299, %300
  br i1 %301, label %302, label %304

302:                                              ; preds = %298
  %303 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %306

304:                                              ; preds = %298
  %305 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %306

306:                                              ; preds = %304, %302
  %307 = phi double [ %303, %302 ], [ %305, %304 ]
  %308 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !29
  %309 = fcmp oge double %307, %308
  br i1 %309, label %310, label %320

310:                                              ; preds = %306
  %311 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  %312 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  %313 = fcmp oge double %311, %312
  br i1 %313, label %314, label %316

314:                                              ; preds = %310
  %315 = load double, ptr @chgsi_.zm1, align 8, !tbaa !16
  br label %318

316:                                              ; preds = %310
  %317 = load double, ptr @chgsi_.zm2, align 8, !tbaa !16
  br label %318

318:                                              ; preds = %316, %314
  %319 = phi double [ %315, %314 ], [ %317, %316 ]
  br label %322

320:                                              ; preds = %306
  %321 = load double, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !29
  br label %322

322:                                              ; preds = %320, %318
  %323 = phi double [ %319, %318 ], [ %321, %320 ]
  store double %323, ptr getelementptr inbounds (%struct.anon.0, ptr @itcom3_, i32 0, i32 15), align 8, !tbaa !29
  store i32 0, ptr %3, align 4
  store i32 1, ptr %7, align 4
  br label %324

324:                                              ; preds = %322, %293, %240, %188, %124, %117
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #4
  %325 = load i32, ptr %3, align 4
  ret i32 %325
}

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local double @cheby_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #0

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 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #3 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
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, !10, i64 0}
!10 = !{!"long", !7, i64 0}
!11 = !{!12, !10, i64 0}
!12 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32, !10, i64 40}
!13 = !{!14, !15, i64 16}
!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 = !{!15, !15, i64 0}
!17 = !{!12, !10, i64 8}
!18 = !{!14, !15, i64 24}
!19 = !{!20, !10, i64 16}
!20 = !{!"", !10, i64 0, !10, i64 8, !10, i64 16, !10, i64 24, !10, i64 32}
!21 = !{!14, !15, i64 104}
!22 = !{!14, !15, i64 96}
!23 = !{!14, !15, i64 48}
!24 = !{!14, !15, i64 88}
!25 = !{!14, !15, i64 32}
!26 = !{!14, !15, i64 80}
!27 = !{!20, !10, i64 0}
!28 = !{!14, !15, i64 112}
!29 = !{!14, !15, i64 120}


; 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 global %struct.anon.0, align 8
@c_b21 = external hidden global double, align 8
@itcom2_ = external hidden local_unnamed_addr global %struct.anon.1, align 8
@chgsi_.zm1 = external hidden local_unnamed_addr global double, align 8
@chgsi_.zm2 = external hidden local_unnamed_addr global double, align 8
@chgsi_.cmold = external hidden local_unnamed_addr global double, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @chgsi_(ptr nocapture noundef readonly %0, ptr nocapture noundef readonly %1) local_unnamed_addr #0 {
  %3 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #4
  %4 = load i64, ptr %1, align 8, !tbaa !5
  switch i64 %4, label %5 [
    i64 3, label %98
    i64 2, label %51
  ]

5:                                                ; preds = %2
  %6 = load i64, ptr @itcom1_, align 8, !tbaa !9
  %7 = icmp eq i64 %6, 0
  br i1 %7, label %.thread, label %9

.thread:                                          ; preds = %5
  %8 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  br label %13

9:                                                ; preds = %5
  %10 = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !14
  %11 = sub nsw i64 %6, %10
  store i64 %11, ptr %3, align 8, !tbaa !5
  %12 = call double @cheby_(ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 64), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 72), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 88), ptr noundef nonnull %3, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 16), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 104))
  %.pre = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  br label %13

13:                                               ; preds = %.thread, %9
  %14 = phi double [ %.pre, %9 ], [ %8, %.thread ]
  %storemerge36 = phi double [ %12, %9 ], [ %8, %.thread ]
  store double %storemerge36, ptr @chgsi_.zm1, align 8, !tbaa !15
  %15 = load double, ptr %0, align 8, !tbaa !15
  %16 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !16
  %17 = fdiv double %15, %16
  store double %17, ptr @chgsi_.zm2, align 8, !tbaa !15
  store double %14, ptr @chgsi_.cmold, align 8, !tbaa !15
  %18 = fcmp oge double %storemerge36, %17
  %19 = select i1 %18, double %storemerge36, double %17
  %.inv37 = fcmp oge double %19, %14
  %. = select i1 %.inv37, double %19, double %14
  store double %., ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  %20 = fcmp ult double %., 1.000000e+00
  br i1 %20, label %21, label %50

21:                                               ; preds = %13
  %22 = load i64, ptr getelementptr inbounds (i8, ptr @itcom2_, i64 16), align 8, !tbaa !17
  %.not30 = icmp eq i64 %22, 0
  br i1 %.not30, label %._crit_edge, label %23

._crit_edge:                                      ; preds = %21
  %.pre38 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 104), align 8, !tbaa !19
  br label %25

23:                                               ; preds = %21
  %24 = fneg double %.
  store double %24, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 104), align 8, !tbaa !19
  br label %25

25:                                               ; preds = %._crit_edge, %23
  %26 = phi double [ %.pre38, %._crit_edge ], [ %24, %23 ]
  %27 = fsub double %., %26
  %28 = fsub double 2.000000e+00, %.
  %29 = fsub double %28, %26
  %30 = fdiv double %27, %29
  store double %30, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 96), align 8, !tbaa !20
  %31 = fdiv double 2.000000e+00, %29
  store double %31, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 48), align 8, !tbaa !21
  %32 = fneg double %30
  %33 = call double @llvm.fmuladd.f64(double %32, double %30, double 1.000000e+00)
  %34 = fcmp ult double %33, 0.000000e+00
  %35 = fneg double %33
  %36 = select i1 %34, double %35, double %33
  %37 = call double @sqrt(double noundef %36) #4
  %38 = fsub double 1.000000e+00, %37
  %39 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 96), align 8, !tbaa !20
  %40 = fneg double %39
  %41 = call double @llvm.fmuladd.f64(double %40, double %39, double 1.000000e+00)
  %42 = fcmp ult double %41, 0.000000e+00
  %43 = fneg double %41
  %44 = select i1 %42, double %43, double %41
  %45 = call double @sqrt(double noundef %44) #4
  %46 = fadd double %45, 1.000000e+00
  %47 = fdiv double %38, %46
  store double %47, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 88), align 8, !tbaa !22
  %48 = load i64, ptr @itcom1_, align 8, !tbaa !9
  store i64 %48, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !14
  %49 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !16
  store double %49, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 32), align 8, !tbaa !23
  store double 1.000000e+00, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 80), align 8, !tbaa !24
  br label %124

50:                                               ; preds = %13
  store double %14, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  store i64 0, ptr @itcom2_, align 8, !tbaa !25
  br label %124

51:                                               ; preds = %2
  %52 = load i64, ptr @itcom1_, align 8, !tbaa !9
  %53 = icmp eq i64 %52, 0
  br i1 %53, label %.thread33, label %55

.thread33:                                        ; preds = %51
  %54 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  br label %60

55:                                               ; preds = %51
  %56 = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !14
  %57 = sub nsw i64 %52, %56
  %58 = shl i64 %57, 1
  store i64 %58, ptr %3, align 8, !tbaa !5
  %59 = call double @cheby_(ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 64), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 72), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 88), ptr noundef nonnull %3, ptr noundef nonnull @c_b21, ptr noundef nonnull @c_b21)
  br label %60

60:                                               ; preds = %.thread33, %55
  %storemerge = phi double [ %59, %55 ], [ %54, %.thread33 ]
  store double %storemerge, ptr @chgsi_.zm1, align 8, !tbaa !15
  %61 = load double, ptr %0, align 8, !tbaa !15
  %62 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !16
  %63 = fdiv double %61, %62
  %64 = fcmp ult double %63, 0.000000e+00
  %65 = fneg double %63
  %66 = select i1 %64, double %65, double %63
  %67 = call double @sqrt(double noundef %66) #4
  store double %67, ptr @chgsi_.zm2, align 8, !tbaa !15
  %68 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  store double %68, ptr @chgsi_.cmold, align 8, !tbaa !15
  %69 = load double, ptr @chgsi_.zm1, align 8
  %70 = fcmp oge double %69, %67
  %71 = select i1 %70, double %69, double %67
  %.inv = fcmp oge double %71, %68
  %72 = select i1 %.inv, double %71, double %68
  store double %72, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  %73 = fcmp ult double %72, 1.000000e+00
  br i1 %73, label %75, label %74

74:                                               ; preds = %60
  store double %68, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  store i64 0, ptr @itcom2_, align 8, !tbaa !25
  br label %124

75:                                               ; preds = %60
  %76 = fmul double %72, %72
  %77 = fneg double %72
  %78 = call double @llvm.fmuladd.f64(double %77, double %72, double 2.000000e+00)
  %79 = fdiv double %76, %78
  store double %79, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 96), align 8, !tbaa !20
  %80 = fdiv double 2.000000e+00, %78
  store double %80, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 48), align 8, !tbaa !21
  %81 = call double @llvm.fmuladd.f64(double %77, double %72, double 1.000000e+00)
  %82 = fcmp ult double %81, 0.000000e+00
  %83 = fneg double %81
  %84 = select i1 %82, double %83, double %81
  %85 = call double @sqrt(double noundef %84) #4
  %86 = fsub double 1.000000e+00, %85
  %87 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 16), align 8, !tbaa !11
  %88 = fneg double %87
  %89 = call double @llvm.fmuladd.f64(double %88, double %87, double 1.000000e+00)
  %90 = fcmp ult double %89, 0.000000e+00
  %91 = fneg double %89
  %92 = select i1 %90, double %91, double %89
  %93 = call double @sqrt(double noundef %92) #4
  %94 = fadd double %93, 1.000000e+00
  %95 = fdiv double %86, %94
  store double %95, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 88), align 8, !tbaa !22
  %96 = load i64, ptr @itcom1_, align 8, !tbaa !9
  store i64 %96, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !14
  %97 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !16
  store double %97, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 32), align 8, !tbaa !23
  store double 1.000000e+00, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 80), align 8, !tbaa !24
  br label %124

98:                                               ; preds = %2
  %99 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !26
  %100 = fcmp oeq double %99, 0.000000e+00
  br i1 %100, label %101, label %102

101:                                              ; preds = %98
  store double 0x3FC5F6199780BAA6, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !26
  br label %102

102:                                              ; preds = %101, %98
  %103 = phi double [ 0x3FC5F6199780BAA6, %101 ], [ %99, %98 ]
  %104 = load i64, ptr @itcom1_, align 8, !tbaa !9
  %.not27 = icmp eq i64 %104, 0
  br i1 %.not27, label %109, label %105

105:                                              ; preds = %102
  %106 = load i64, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !14
  %107 = sub nsw i64 %104, %106
  store i64 %107, ptr %3, align 8, !tbaa !5
  %108 = call double @cheby_(ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 64), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 72), ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 88), ptr noundef nonnull %3, ptr noundef nonnull getelementptr inbounds (i8, ptr @itcom3_, i64 112), ptr noundef nonnull @c_b21)
  br label %110

109:                                              ; preds = %102
  store double %103, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !27
  br label %110

110:                                              ; preds = %109, %105
  %111 = phi double [ %103, %109 ], [ %108, %105 ]
  store double %111, ptr @chgsi_.zm1, align 8
  %112 = load double, ptr %0, align 8, !tbaa !15
  %113 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 24), align 8, !tbaa !16
  %114 = fdiv double %112, %113
  store double %114, ptr @chgsi_.zm2, align 8, !tbaa !15
  %115 = load i64, ptr @itcom2_, align 8, !tbaa !25
  %.not28 = icmp eq i64 %115, 0
  %116 = fcmp oge double %111, %114
  %117 = select i1 %116, double %111, double %114
  br i1 %.not28, label %118, label %122

118:                                              ; preds = %110
  %119 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !26
  %.inv35 = fcmp oge double %117, %119
  %.31 = select i1 %.inv35, double %117, double %119
  store double %.31, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 112), align 8, !tbaa !26
  %120 = load i64, ptr @itcom1_, align 8, !tbaa !9
  %121 = add nsw i64 %120, 1
  store i64 %121, ptr getelementptr inbounds (i8, ptr @itcom1_, i64 8), align 8, !tbaa !14
  store double %113, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 32), align 8, !tbaa !23
  br label %124

122:                                              ; preds = %110
  %123 = load double, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !27
  %.inv34 = fcmp oge double %117, %123
  %.32 = select i1 %.inv34, double %117, double %123
  store double %.32, ptr getelementptr inbounds (i8, ptr @itcom3_, i64 120), align 8, !tbaa !27
  br label %124

124:                                              ; preds = %122, %118, %75, %74, %50, %25
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #4
  ret i32 0
}

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

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

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

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

; Function Attrs: nounwind uwtable
declare dso_local double @cheby_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #0

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


; Effective O3 passes: EarlyCSEPass,GVNPass,GlobalOptPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,MergedLoadStoreMotionPass,PostOrderFunctionAttrsPass,SROAPass,SimplifyCFGPass