; LLVM IR from jingweizhanghuai/Morn :: src/math (morn_calculate)

; 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.CalculateFunction = type { [32 x i8], %union.anon }
%union.anon = type { ptr }

@morn_calculate_function_num = external dso_local global i32, align 4
@morn_calculate_function = external dso_local global [128 x %struct.CalculateFunction], align 16
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [4 x i8], align 1

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

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

; Function Attrs: nounwind uwtable
declare dso_local double @Calculate(ptr noundef) #1

; Function Attrs: nounwind uwtable
define dso_local double @GetValue(ptr noundef %0) #1 {
  %2 = alloca double, align 8
  %3 = alloca ptr, align 8
  %4 = alloca ptr, align 8
  %5 = alloca double, align 8
  %6 = alloca double, align 8
  %7 = alloca double, align 8
  %8 = alloca double, align 8
  %9 = alloca double, align 8
  %10 = alloca double, align 8
  %11 = alloca double, align 8
  %12 = alloca double, align 8
  %13 = alloca double, align 8
  %14 = alloca i32, align 4
  %15 = alloca ptr, align 8
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  store ptr %0, ptr %3, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %4) #6
  %18 = load ptr, ptr %3, align 8, !tbaa !5
  %19 = load ptr, ptr %18, align 8, !tbaa !5
  store ptr %19, ptr %4, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.start.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #6
  store i32 0, ptr %14, align 4, !tbaa !9
  %20 = load ptr, ptr %4, align 8, !tbaa !5
  %21 = load i8, ptr %20, align 1, !tbaa !11
  %22 = sext i8 %21 to i32
  %23 = icmp eq i32 %22, 45
  br i1 %23, label %24, label %27

24:                                               ; preds = %1
  store i32 1, ptr %14, align 4, !tbaa !9
  %25 = load ptr, ptr %4, align 8, !tbaa !5
  %26 = getelementptr inbounds i8, ptr %25, i32 1
  store ptr %26, ptr %4, align 8, !tbaa !5
  br label %36

27:                                               ; preds = %1
  %28 = load ptr, ptr %4, align 8, !tbaa !5
  %29 = load i8, ptr %28, align 1, !tbaa !11
  %30 = sext i8 %29 to i32
  %31 = icmp eq i32 %30, 43
  br i1 %31, label %32, label %35

32:                                               ; preds = %27
  store i32 0, ptr %14, align 4, !tbaa !9
  %33 = load ptr, ptr %4, align 8, !tbaa !5
  %34 = getelementptr inbounds i8, ptr %33, i32 1
  store ptr %34, ptr %4, align 8, !tbaa !5
  br label %35

35:                                               ; preds = %32, %27
  br label %36

36:                                               ; preds = %35, %24
  call void @llvm.lifetime.start.p0(i64 8, ptr %15) #6
  %37 = load ptr, ptr %4, align 8, !tbaa !5
  store ptr %37, ptr %15, align 8, !tbaa !5
  br label %38

38:                                               ; preds = %848, %36
  %39 = load ptr, ptr %4, align 8, !tbaa !5
  %40 = load i8, ptr %39, align 1, !tbaa !11
  %41 = sext i8 %40 to i32
  %42 = icmp ne i32 %41, 0
  br i1 %42, label %43, label %83

43:                                               ; preds = %38
  %44 = load ptr, ptr %4, align 8, !tbaa !5
  %45 = load i8, ptr %44, align 1, !tbaa !11
  %46 = sext i8 %45 to i32
  %47 = icmp ne i32 %46, 41
  br i1 %47, label %48, label %83

48:                                               ; preds = %43
  %49 = load ptr, ptr %4, align 8, !tbaa !5
  %50 = load i8, ptr %49, align 1, !tbaa !11
  %51 = sext i8 %50 to i32
  %52 = icmp ne i32 %51, 44
  br i1 %52, label %53, label %83

53:                                               ; preds = %48
  %54 = load ptr, ptr %4, align 8, !tbaa !5
  %55 = load i8, ptr %54, align 1, !tbaa !11
  %56 = sext i8 %55 to i32
  %57 = icmp ne i32 %56, 43
  br i1 %57, label %58, label %83

58:                                               ; preds = %53
  %59 = load ptr, ptr %4, align 8, !tbaa !5
  %60 = load i8, ptr %59, align 1, !tbaa !11
  %61 = sext i8 %60 to i32
  %62 = icmp ne i32 %61, 45
  br i1 %62, label %63, label %83

63:                                               ; preds = %58
  %64 = load ptr, ptr %4, align 8, !tbaa !5
  %65 = load i8, ptr %64, align 1, !tbaa !11
  %66 = sext i8 %65 to i32
  %67 = icmp ne i32 %66, 42
  br i1 %67, label %68, label %83

68:                                               ; preds = %63
  %69 = load ptr, ptr %4, align 8, !tbaa !5
  %70 = load i8, ptr %69, align 1, !tbaa !11
  %71 = sext i8 %70 to i32
  %72 = icmp ne i32 %71, 47
  br i1 %72, label %73, label %83

73:                                               ; preds = %68
  %74 = load ptr, ptr %4, align 8, !tbaa !5
  %75 = load i8, ptr %74, align 1, !tbaa !11
  %76 = sext i8 %75 to i32
  %77 = icmp ne i32 %76, 37
  br i1 %77, label %78, label %83

78:                                               ; preds = %73
  %79 = load ptr, ptr %4, align 8, !tbaa !5
  %80 = load i8, ptr %79, align 1, !tbaa !11
  %81 = sext i8 %80 to i32
  %82 = icmp ne i32 %81, 94
  br label %83

83:                                               ; preds = %78, %73, %68, %63, %58, %53, %48, %43, %38
  %84 = phi i1 [ false, %73 ], [ false, %68 ], [ false, %63 ], [ false, %58 ], [ false, %53 ], [ false, %48 ], [ false, %43 ], [ false, %38 ], [ %82, %78 ]
  br i1 %84, label %85, label %853

85:                                               ; preds = %83
  %86 = load ptr, ptr %4, align 8, !tbaa !5
  %87 = load i8, ptr %86, align 1, !tbaa !11
  %88 = sext i8 %87 to i32
  %89 = icmp eq i32 %88, 40
  br i1 %89, label %90, label %848

90:                                               ; preds = %85
  %91 = load ptr, ptr %4, align 8, !tbaa !5
  %92 = getelementptr inbounds i8, ptr %91, i64 0
  store i8 0, ptr %92, align 1, !tbaa !11
  %93 = load ptr, ptr %4, align 8, !tbaa !5
  %94 = getelementptr inbounds i8, ptr %93, i64 1
  store ptr %94, ptr %4, align 8, !tbaa !5
  %95 = load ptr, ptr %4, align 8, !tbaa !5
  %96 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %95, ptr %96, align 8, !tbaa !5
  %97 = load ptr, ptr %4, align 8, !tbaa !5
  %98 = load ptr, ptr %15, align 8, !tbaa !5
  %99 = getelementptr inbounds i8, ptr %98, i64 1
  %100 = icmp eq ptr %97, %99
  br i1 %100, label %101, label %118

101:                                              ; preds = %90
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = call double @Calculate(ptr noundef %102)
  store double %103, ptr %5, align 8, !tbaa !12
  %104 = load ptr, ptr %3, align 8, !tbaa !5
  %105 = load ptr, ptr %104, align 8, !tbaa !5
  store ptr %105, ptr %4, align 8, !tbaa !5
  %106 = load ptr, ptr %4, align 8, !tbaa !5
  %107 = getelementptr inbounds i8, ptr %106, i64 1
  %108 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %107, ptr %108, align 8, !tbaa !5
  %109 = load ptr, ptr %4, align 8, !tbaa !5
  %110 = load i8, ptr %109, align 1, !tbaa !11
  %111 = sext i8 %110 to i32
  %112 = icmp eq i32 %111, 41
  br i1 %112, label %113, label %115

113:                                              ; preds = %101
  %114 = load double, ptr %5, align 8, !tbaa !12
  br label %116

115:                                              ; preds = %101
  br label %116

116:                                              ; preds = %115, %113
  %117 = phi double [ %114, %113 ], [ 0x7FF8000000000000, %115 ]
  store double %117, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

118:                                              ; preds = %90
  %119 = load ptr, ptr %15, align 8, !tbaa !5
  %120 = call i32 @strcasecmp(ptr noundef %119, ptr noundef @.str.3) #7
  %121 = icmp eq i32 %120, 0
  br i1 %121, label %122, label %147

122:                                              ; preds = %118
  %123 = load ptr, ptr %3, align 8, !tbaa !5
  %124 = call double @Calculate(ptr noundef %123)
  store double %124, ptr %5, align 8, !tbaa !12
  %125 = load ptr, ptr %3, align 8, !tbaa !5
  %126 = load ptr, ptr %125, align 8, !tbaa !5
  store ptr %126, ptr %4, align 8, !tbaa !5
  %127 = load ptr, ptr %4, align 8, !tbaa !5
  %128 = getelementptr inbounds i8, ptr %127, i64 1
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %128, ptr %129, align 8, !tbaa !5
  %130 = load ptr, ptr %4, align 8, !tbaa !5
  %131 = load i8, ptr %130, align 1, !tbaa !11
  %132 = sext i8 %131 to i32
  %133 = icmp eq i32 %132, 41
  br i1 %133, label %134, label %144

134:                                              ; preds = %122
  %135 = load double, ptr %5, align 8, !tbaa !12
  %136 = fcmp ogt double %135, 0.000000e+00
  br i1 %136, label %137, label %139

137:                                              ; preds = %134
  %138 = load double, ptr %5, align 8, !tbaa !12
  br label %142

139:                                              ; preds = %134
  %140 = load double, ptr %5, align 8, !tbaa !12
  %141 = fsub double 0.000000e+00, %140
  br label %142

142:                                              ; preds = %139, %137
  %143 = phi double [ %138, %137 ], [ %141, %139 ]
  br label %145

144:                                              ; preds = %122
  br label %145

145:                                              ; preds = %144, %142
  %146 = phi double [ %143, %142 ], [ 0x7FF8000000000000, %144 ]
  store double %146, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

147:                                              ; preds = %118
  %148 = load ptr, ptr %15, align 8, !tbaa !5
  %149 = call i32 @strcasecmp(ptr noundef %148, ptr noundef @.str.4) #7
  %150 = icmp eq i32 %149, 0
  br i1 %150, label %151, label %169

151:                                              ; preds = %147
  %152 = load ptr, ptr %3, align 8, !tbaa !5
  %153 = call double @Calculate(ptr noundef %152)
  store double %153, ptr %5, align 8, !tbaa !12
  %154 = load ptr, ptr %3, align 8, !tbaa !5
  %155 = load ptr, ptr %154, align 8, !tbaa !5
  store ptr %155, ptr %4, align 8, !tbaa !5
  %156 = load ptr, ptr %4, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i64 1
  %158 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %157, ptr %158, align 8, !tbaa !5
  %159 = load ptr, ptr %4, align 8, !tbaa !5
  %160 = load i8, ptr %159, align 1, !tbaa !11
  %161 = sext i8 %160 to i32
  %162 = icmp eq i32 %161, 41
  br i1 %162, label %163, label %166

163:                                              ; preds = %151
  %164 = load double, ptr %5, align 8, !tbaa !12
  %165 = call double @sqrt(double noundef %164) #6
  br label %167

166:                                              ; preds = %151
  br label %167

167:                                              ; preds = %166, %163
  %168 = phi double [ %165, %163 ], [ 0x7FF8000000000000, %166 ]
  store double %168, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

169:                                              ; preds = %147
  %170 = load ptr, ptr %15, align 8, !tbaa !5
  %171 = call i32 @strcasecmp(ptr noundef %170, ptr noundef @.str.5) #7
  %172 = icmp eq i32 %171, 0
  br i1 %172, label %173, label %191

173:                                              ; preds = %169
  %174 = load ptr, ptr %3, align 8, !tbaa !5
  %175 = call double @Calculate(ptr noundef %174)
  store double %175, ptr %5, align 8, !tbaa !12
  %176 = load ptr, ptr %3, align 8, !tbaa !5
  %177 = load ptr, ptr %176, align 8, !tbaa !5
  store ptr %177, ptr %4, align 8, !tbaa !5
  %178 = load ptr, ptr %4, align 8, !tbaa !5
  %179 = getelementptr inbounds i8, ptr %178, i64 1
  %180 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %179, ptr %180, align 8, !tbaa !5
  %181 = load ptr, ptr %4, align 8, !tbaa !5
  %182 = load i8, ptr %181, align 1, !tbaa !11
  %183 = sext i8 %182 to i32
  %184 = icmp eq i32 %183, 41
  br i1 %184, label %185, label %188

185:                                              ; preds = %173
  %186 = load double, ptr %5, align 8, !tbaa !12
  %187 = call double @exp(double noundef %186) #6
  br label %189

188:                                              ; preds = %173
  br label %189

189:                                              ; preds = %188, %185
  %190 = phi double [ %187, %185 ], [ 0x7FF8000000000000, %188 ]
  store double %190, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

191:                                              ; preds = %169
  %192 = load ptr, ptr %15, align 8, !tbaa !5
  %193 = call i32 @strcasecmp(ptr noundef %192, ptr noundef @.str.6) #7
  %194 = icmp eq i32 %193, 0
  br i1 %194, label %195, label %213

195:                                              ; preds = %191
  %196 = load ptr, ptr %3, align 8, !tbaa !5
  %197 = call double @Calculate(ptr noundef %196)
  store double %197, ptr %5, align 8, !tbaa !12
  %198 = load ptr, ptr %3, align 8, !tbaa !5
  %199 = load ptr, ptr %198, align 8, !tbaa !5
  store ptr %199, ptr %4, align 8, !tbaa !5
  %200 = load ptr, ptr %4, align 8, !tbaa !5
  %201 = getelementptr inbounds i8, ptr %200, i64 1
  %202 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %201, ptr %202, align 8, !tbaa !5
  %203 = load ptr, ptr %4, align 8, !tbaa !5
  %204 = load i8, ptr %203, align 1, !tbaa !11
  %205 = sext i8 %204 to i32
  %206 = icmp eq i32 %205, 41
  br i1 %206, label %207, label %210

207:                                              ; preds = %195
  %208 = load double, ptr %5, align 8, !tbaa !12
  %209 = call double @log(double noundef %208) #6
  br label %211

210:                                              ; preds = %195
  br label %211

211:                                              ; preds = %210, %207
  %212 = phi double [ %209, %207 ], [ 0x7FF8000000000000, %210 ]
  store double %212, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

213:                                              ; preds = %191
  %214 = load ptr, ptr %15, align 8, !tbaa !5
  %215 = call i32 @strcasecmp(ptr noundef %214, ptr noundef @.str.7) #7
  %216 = icmp eq i32 %215, 0
  br i1 %216, label %217, label %235

217:                                              ; preds = %213
  %218 = load ptr, ptr %3, align 8, !tbaa !5
  %219 = call double @Calculate(ptr noundef %218)
  store double %219, ptr %5, align 8, !tbaa !12
  %220 = load ptr, ptr %3, align 8, !tbaa !5
  %221 = load ptr, ptr %220, align 8, !tbaa !5
  store ptr %221, ptr %4, align 8, !tbaa !5
  %222 = load ptr, ptr %4, align 8, !tbaa !5
  %223 = getelementptr inbounds i8, ptr %222, i64 1
  %224 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %223, ptr %224, align 8, !tbaa !5
  %225 = load ptr, ptr %4, align 8, !tbaa !5
  %226 = load i8, ptr %225, align 1, !tbaa !11
  %227 = sext i8 %226 to i32
  %228 = icmp eq i32 %227, 41
  br i1 %228, label %229, label %232

229:                                              ; preds = %217
  %230 = load double, ptr %5, align 8, !tbaa !12
  %231 = call double @log10(double noundef %230) #6
  br label %233

232:                                              ; preds = %217
  br label %233

233:                                              ; preds = %232, %229
  %234 = phi double [ %231, %229 ], [ 0x7FF8000000000000, %232 ]
  store double %234, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

235:                                              ; preds = %213
  %236 = load ptr, ptr %15, align 8, !tbaa !5
  %237 = call i32 @strcasecmp(ptr noundef %236, ptr noundef @.str.8) #7
  %238 = icmp eq i32 %237, 0
  br i1 %238, label %239, label %257

239:                                              ; preds = %235
  %240 = load ptr, ptr %3, align 8, !tbaa !5
  %241 = call double @Calculate(ptr noundef %240)
  store double %241, ptr %5, align 8, !tbaa !12
  %242 = load ptr, ptr %3, align 8, !tbaa !5
  %243 = load ptr, ptr %242, align 8, !tbaa !5
  store ptr %243, ptr %4, align 8, !tbaa !5
  %244 = load ptr, ptr %4, align 8, !tbaa !5
  %245 = getelementptr inbounds i8, ptr %244, i64 1
  %246 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %245, ptr %246, align 8, !tbaa !5
  %247 = load ptr, ptr %4, align 8, !tbaa !5
  %248 = load i8, ptr %247, align 1, !tbaa !11
  %249 = sext i8 %248 to i32
  %250 = icmp eq i32 %249, 41
  br i1 %250, label %251, label %254

251:                                              ; preds = %239
  %252 = load double, ptr %5, align 8, !tbaa !12
  %253 = call double @sin(double noundef %252) #6
  br label %255

254:                                              ; preds = %239
  br label %255

255:                                              ; preds = %254, %251
  %256 = phi double [ %253, %251 ], [ 0x7FF8000000000000, %254 ]
  store double %256, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

257:                                              ; preds = %235
  %258 = load ptr, ptr %15, align 8, !tbaa !5
  %259 = call i32 @strcasecmp(ptr noundef %258, ptr noundef @.str.9) #7
  %260 = icmp eq i32 %259, 0
  br i1 %260, label %261, label %279

261:                                              ; preds = %257
  %262 = load ptr, ptr %3, align 8, !tbaa !5
  %263 = call double @Calculate(ptr noundef %262)
  store double %263, ptr %5, align 8, !tbaa !12
  %264 = load ptr, ptr %3, align 8, !tbaa !5
  %265 = load ptr, ptr %264, align 8, !tbaa !5
  store ptr %265, ptr %4, align 8, !tbaa !5
  %266 = load ptr, ptr %4, align 8, !tbaa !5
  %267 = getelementptr inbounds i8, ptr %266, i64 1
  %268 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %267, ptr %268, align 8, !tbaa !5
  %269 = load ptr, ptr %4, align 8, !tbaa !5
  %270 = load i8, ptr %269, align 1, !tbaa !11
  %271 = sext i8 %270 to i32
  %272 = icmp eq i32 %271, 41
  br i1 %272, label %273, label %276

273:                                              ; preds = %261
  %274 = load double, ptr %5, align 8, !tbaa !12
  %275 = call double @cos(double noundef %274) #6
  br label %277

276:                                              ; preds = %261
  br label %277

277:                                              ; preds = %276, %273
  %278 = phi double [ %275, %273 ], [ 0x7FF8000000000000, %276 ]
  store double %278, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

279:                                              ; preds = %257
  %280 = load ptr, ptr %15, align 8, !tbaa !5
  %281 = call i32 @strcasecmp(ptr noundef %280, ptr noundef @.str.10) #7
  %282 = icmp eq i32 %281, 0
  br i1 %282, label %283, label %301

283:                                              ; preds = %279
  %284 = load ptr, ptr %3, align 8, !tbaa !5
  %285 = call double @Calculate(ptr noundef %284)
  store double %285, ptr %5, align 8, !tbaa !12
  %286 = load ptr, ptr %3, align 8, !tbaa !5
  %287 = load ptr, ptr %286, align 8, !tbaa !5
  store ptr %287, ptr %4, align 8, !tbaa !5
  %288 = load ptr, ptr %4, align 8, !tbaa !5
  %289 = getelementptr inbounds i8, ptr %288, i64 1
  %290 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %289, ptr %290, align 8, !tbaa !5
  %291 = load ptr, ptr %4, align 8, !tbaa !5
  %292 = load i8, ptr %291, align 1, !tbaa !11
  %293 = sext i8 %292 to i32
  %294 = icmp eq i32 %293, 41
  br i1 %294, label %295, label %298

295:                                              ; preds = %283
  %296 = load double, ptr %5, align 8, !tbaa !12
  %297 = call double @tan(double noundef %296) #6
  br label %299

298:                                              ; preds = %283
  br label %299

299:                                              ; preds = %298, %295
  %300 = phi double [ %297, %295 ], [ 0x7FF8000000000000, %298 ]
  store double %300, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

301:                                              ; preds = %279
  %302 = load ptr, ptr %15, align 8, !tbaa !5
  %303 = call i32 @strcasecmp(ptr noundef %302, ptr noundef @.str.11) #7
  %304 = icmp eq i32 %303, 0
  br i1 %304, label %305, label %324

305:                                              ; preds = %301
  %306 = load ptr, ptr %3, align 8, !tbaa !5
  %307 = call double @Calculate(ptr noundef %306)
  store double %307, ptr %5, align 8, !tbaa !12
  %308 = load ptr, ptr %3, align 8, !tbaa !5
  %309 = load ptr, ptr %308, align 8, !tbaa !5
  store ptr %309, ptr %4, align 8, !tbaa !5
  %310 = load ptr, ptr %4, align 8, !tbaa !5
  %311 = getelementptr inbounds i8, ptr %310, i64 1
  %312 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %311, ptr %312, align 8, !tbaa !5
  %313 = load ptr, ptr %4, align 8, !tbaa !5
  %314 = load i8, ptr %313, align 1, !tbaa !11
  %315 = sext i8 %314 to i32
  %316 = icmp eq i32 %315, 41
  br i1 %316, label %317, label %321

317:                                              ; preds = %305
  %318 = load double, ptr %5, align 8, !tbaa !12
  %319 = call double @tan(double noundef %318) #6
  %320 = fdiv double 1.000000e+00, %319
  br label %322

321:                                              ; preds = %305
  br label %322

322:                                              ; preds = %321, %317
  %323 = phi double [ %320, %317 ], [ 0x7FF8000000000000, %321 ]
  store double %323, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

324:                                              ; preds = %301
  %325 = load ptr, ptr %15, align 8, !tbaa !5
  %326 = call i32 @strcasecmp(ptr noundef %325, ptr noundef @.str.12) #7
  %327 = icmp eq i32 %326, 0
  br i1 %327, label %328, label %346

328:                                              ; preds = %324
  %329 = load ptr, ptr %3, align 8, !tbaa !5
  %330 = call double @Calculate(ptr noundef %329)
  store double %330, ptr %5, align 8, !tbaa !12
  %331 = load ptr, ptr %3, align 8, !tbaa !5
  %332 = load ptr, ptr %331, align 8, !tbaa !5
  store ptr %332, ptr %4, align 8, !tbaa !5
  %333 = load ptr, ptr %4, align 8, !tbaa !5
  %334 = getelementptr inbounds i8, ptr %333, i64 1
  %335 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %334, ptr %335, align 8, !tbaa !5
  %336 = load ptr, ptr %4, align 8, !tbaa !5
  %337 = load i8, ptr %336, align 1, !tbaa !11
  %338 = sext i8 %337 to i32
  %339 = icmp eq i32 %338, 41
  br i1 %339, label %340, label %343

340:                                              ; preds = %328
  %341 = load double, ptr %5, align 8, !tbaa !12
  %342 = call double @asin(double noundef %341) #6
  br label %344

343:                                              ; preds = %328
  br label %344

344:                                              ; preds = %343, %340
  %345 = phi double [ %342, %340 ], [ 0x7FF8000000000000, %343 ]
  store double %345, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

346:                                              ; preds = %324
  %347 = load ptr, ptr %15, align 8, !tbaa !5
  %348 = call i32 @strcasecmp(ptr noundef %347, ptr noundef @.str.13) #7
  %349 = icmp eq i32 %348, 0
  br i1 %349, label %350, label %368

350:                                              ; preds = %346
  %351 = load ptr, ptr %3, align 8, !tbaa !5
  %352 = call double @Calculate(ptr noundef %351)
  store double %352, ptr %5, align 8, !tbaa !12
  %353 = load ptr, ptr %3, align 8, !tbaa !5
  %354 = load ptr, ptr %353, align 8, !tbaa !5
  store ptr %354, ptr %4, align 8, !tbaa !5
  %355 = load ptr, ptr %4, align 8, !tbaa !5
  %356 = getelementptr inbounds i8, ptr %355, i64 1
  %357 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %356, ptr %357, align 8, !tbaa !5
  %358 = load ptr, ptr %4, align 8, !tbaa !5
  %359 = load i8, ptr %358, align 1, !tbaa !11
  %360 = sext i8 %359 to i32
  %361 = icmp eq i32 %360, 41
  br i1 %361, label %362, label %365

362:                                              ; preds = %350
  %363 = load double, ptr %5, align 8, !tbaa !12
  %364 = call double @acos(double noundef %363) #6
  br label %366

365:                                              ; preds = %350
  br label %366

366:                                              ; preds = %365, %362
  %367 = phi double [ %364, %362 ], [ 0x7FF8000000000000, %365 ]
  store double %367, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

368:                                              ; preds = %346
  %369 = load ptr, ptr %15, align 8, !tbaa !5
  %370 = call i32 @strcasecmp(ptr noundef %369, ptr noundef @.str.14) #7
  %371 = icmp eq i32 %370, 0
  br i1 %371, label %372, label %390

372:                                              ; preds = %368
  %373 = load ptr, ptr %3, align 8, !tbaa !5
  %374 = call double @Calculate(ptr noundef %373)
  store double %374, ptr %5, align 8, !tbaa !12
  %375 = load ptr, ptr %3, align 8, !tbaa !5
  %376 = load ptr, ptr %375, align 8, !tbaa !5
  store ptr %376, ptr %4, align 8, !tbaa !5
  %377 = load ptr, ptr %4, align 8, !tbaa !5
  %378 = getelementptr inbounds i8, ptr %377, i64 1
  %379 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %378, ptr %379, align 8, !tbaa !5
  %380 = load ptr, ptr %4, align 8, !tbaa !5
  %381 = load i8, ptr %380, align 1, !tbaa !11
  %382 = sext i8 %381 to i32
  %383 = icmp eq i32 %382, 41
  br i1 %383, label %384, label %387

384:                                              ; preds = %372
  %385 = load double, ptr %5, align 8, !tbaa !12
  %386 = call double @atan(double noundef %385) #6
  br label %388

387:                                              ; preds = %372
  br label %388

388:                                              ; preds = %387, %384
  %389 = phi double [ %386, %384 ], [ 0x7FF8000000000000, %387 ]
  store double %389, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

390:                                              ; preds = %368
  %391 = load ptr, ptr %15, align 8, !tbaa !5
  %392 = call i32 @strcasecmp(ptr noundef %391, ptr noundef @.str.15) #7
  %393 = icmp eq i32 %392, 0
  br i1 %393, label %394, label %413

394:                                              ; preds = %390
  %395 = load ptr, ptr %3, align 8, !tbaa !5
  %396 = call double @Calculate(ptr noundef %395)
  store double %396, ptr %5, align 8, !tbaa !12
  %397 = load ptr, ptr %3, align 8, !tbaa !5
  %398 = load ptr, ptr %397, align 8, !tbaa !5
  store ptr %398, ptr %4, align 8, !tbaa !5
  %399 = load ptr, ptr %4, align 8, !tbaa !5
  %400 = getelementptr inbounds i8, ptr %399, i64 1
  %401 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %400, ptr %401, align 8, !tbaa !5
  %402 = load ptr, ptr %4, align 8, !tbaa !5
  %403 = load i8, ptr %402, align 1, !tbaa !11
  %404 = sext i8 %403 to i32
  %405 = icmp eq i32 %404, 41
  br i1 %405, label %406, label %410

406:                                              ; preds = %394
  %407 = load double, ptr %5, align 8, !tbaa !12
  %408 = fdiv double 1.000000e+00, %407
  %409 = call double @atan(double noundef %408) #6
  br label %411

410:                                              ; preds = %394
  br label %411

411:                                              ; preds = %410, %406
  %412 = phi double [ %409, %406 ], [ 0x7FF8000000000000, %410 ]
  store double %412, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

413:                                              ; preds = %390
  %414 = load ptr, ptr %15, align 8, !tbaa !5
  %415 = call i32 @strcasecmp(ptr noundef %414, ptr noundef @.str.16) #7
  %416 = icmp eq i32 %415, 0
  br i1 %416, label %417, label %435

417:                                              ; preds = %413
  %418 = load ptr, ptr %3, align 8, !tbaa !5
  %419 = call double @Calculate(ptr noundef %418)
  store double %419, ptr %5, align 8, !tbaa !12
  %420 = load ptr, ptr %3, align 8, !tbaa !5
  %421 = load ptr, ptr %420, align 8, !tbaa !5
  store ptr %421, ptr %4, align 8, !tbaa !5
  %422 = load ptr, ptr %4, align 8, !tbaa !5
  %423 = getelementptr inbounds i8, ptr %422, i64 1
  %424 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %423, ptr %424, align 8, !tbaa !5
  %425 = load ptr, ptr %4, align 8, !tbaa !5
  %426 = load i8, ptr %425, align 1, !tbaa !11
  %427 = sext i8 %426 to i32
  %428 = icmp eq i32 %427, 41
  br i1 %428, label %429, label %432

429:                                              ; preds = %417
  %430 = load double, ptr %5, align 8, !tbaa !12
  %431 = call double @llvm.ceil.f64(double %430)
  br label %433

432:                                              ; preds = %417
  br label %433

433:                                              ; preds = %432, %429
  %434 = phi double [ %431, %429 ], [ 0x7FF8000000000000, %432 ]
  store double %434, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

435:                                              ; preds = %413
  %436 = load ptr, ptr %15, align 8, !tbaa !5
  %437 = call i32 @strcasecmp(ptr noundef %436, ptr noundef @.str.17) #7
  %438 = icmp eq i32 %437, 0
  br i1 %438, label %439, label %457

439:                                              ; preds = %435
  %440 = load ptr, ptr %3, align 8, !tbaa !5
  %441 = call double @Calculate(ptr noundef %440)
  store double %441, ptr %5, align 8, !tbaa !12
  %442 = load ptr, ptr %3, align 8, !tbaa !5
  %443 = load ptr, ptr %442, align 8, !tbaa !5
  store ptr %443, ptr %4, align 8, !tbaa !5
  %444 = load ptr, ptr %4, align 8, !tbaa !5
  %445 = getelementptr inbounds i8, ptr %444, i64 1
  %446 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %445, ptr %446, align 8, !tbaa !5
  %447 = load ptr, ptr %4, align 8, !tbaa !5
  %448 = load i8, ptr %447, align 1, !tbaa !11
  %449 = sext i8 %448 to i32
  %450 = icmp eq i32 %449, 41
  br i1 %450, label %451, label %454

451:                                              ; preds = %439
  %452 = load double, ptr %5, align 8, !tbaa !12
  %453 = call double @llvm.floor.f64(double %452)
  br label %455

454:                                              ; preds = %439
  br label %455

455:                                              ; preds = %454, %451
  %456 = phi double [ %453, %451 ], [ 0x7FF8000000000000, %454 ]
  store double %456, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

457:                                              ; preds = %435
  %458 = load ptr, ptr %15, align 8, !tbaa !5
  %459 = call i32 @strcasecmp(ptr noundef %458, ptr noundef @.str.18) #7
  %460 = icmp eq i32 %459, 0
  br i1 %460, label %461, label %479

461:                                              ; preds = %457
  %462 = load ptr, ptr %3, align 8, !tbaa !5
  %463 = call double @Calculate(ptr noundef %462)
  store double %463, ptr %5, align 8, !tbaa !12
  %464 = load ptr, ptr %3, align 8, !tbaa !5
  %465 = load ptr, ptr %464, align 8, !tbaa !5
  store ptr %465, ptr %4, align 8, !tbaa !5
  %466 = load ptr, ptr %4, align 8, !tbaa !5
  %467 = getelementptr inbounds i8, ptr %466, i64 1
  %468 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %467, ptr %468, align 8, !tbaa !5
  %469 = load ptr, ptr %4, align 8, !tbaa !5
  %470 = load i8, ptr %469, align 1, !tbaa !11
  %471 = sext i8 %470 to i32
  %472 = icmp eq i32 %471, 41
  br i1 %472, label %473, label %476

473:                                              ; preds = %461
  %474 = load double, ptr %5, align 8, !tbaa !12
  %475 = call double @llvm.round.f64(double %474)
  br label %477

476:                                              ; preds = %461
  br label %477

477:                                              ; preds = %476, %473
  %478 = phi double [ %475, %473 ], [ 0x7FF8000000000000, %476 ]
  store double %478, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

479:                                              ; preds = %457
  %480 = load ptr, ptr %15, align 8, !tbaa !5
  %481 = call i32 @strcasecmp(ptr noundef %480, ptr noundef @.str.19) #7
  %482 = icmp eq i32 %481, 0
  br i1 %482, label %483, label %521

483:                                              ; preds = %479
  %484 = load ptr, ptr %3, align 8, !tbaa !5
  %485 = call double @Calculate(ptr noundef %484)
  store double %485, ptr %6, align 8, !tbaa !12
  %486 = load ptr, ptr %3, align 8, !tbaa !5
  %487 = load ptr, ptr %486, align 8, !tbaa !5
  store ptr %487, ptr %4, align 8, !tbaa !5
  %488 = load ptr, ptr %4, align 8, !tbaa !5
  %489 = load i8, ptr %488, align 1, !tbaa !11
  %490 = sext i8 %489 to i32
  %491 = icmp ne i32 %490, 44
  br i1 %491, label %492, label %493

492:                                              ; preds = %483
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

493:                                              ; preds = %483
  %494 = load ptr, ptr %4, align 8, !tbaa !5
  %495 = getelementptr inbounds i8, ptr %494, i64 1
  %496 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %495, ptr %496, align 8, !tbaa !5
  %497 = load ptr, ptr %3, align 8, !tbaa !5
  %498 = call double @Calculate(ptr noundef %497)
  store double %498, ptr %7, align 8, !tbaa !12
  %499 = load ptr, ptr %3, align 8, !tbaa !5
  %500 = load ptr, ptr %499, align 8, !tbaa !5
  store ptr %500, ptr %4, align 8, !tbaa !5
  %501 = load ptr, ptr %4, align 8, !tbaa !5
  %502 = getelementptr inbounds i8, ptr %501, i64 1
  %503 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %502, ptr %503, align 8, !tbaa !5
  %504 = load ptr, ptr %4, align 8, !tbaa !5
  %505 = load i8, ptr %504, align 1, !tbaa !11
  %506 = sext i8 %505 to i32
  %507 = icmp eq i32 %506, 41
  br i1 %507, label %508, label %518

508:                                              ; preds = %493
  %509 = load double, ptr %6, align 8, !tbaa !12
  %510 = load double, ptr %7, align 8, !tbaa !12
  %511 = fcmp olt double %509, %510
  br i1 %511, label %512, label %514

512:                                              ; preds = %508
  %513 = load double, ptr %6, align 8, !tbaa !12
  br label %516

514:                                              ; preds = %508
  %515 = load double, ptr %7, align 8, !tbaa !12
  br label %516

516:                                              ; preds = %514, %512
  %517 = phi double [ %513, %512 ], [ %515, %514 ]
  br label %519

518:                                              ; preds = %493
  br label %519

519:                                              ; preds = %518, %516
  %520 = phi double [ %517, %516 ], [ 0x7FF8000000000000, %518 ]
  store double %520, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

521:                                              ; preds = %479
  %522 = load ptr, ptr %15, align 8, !tbaa !5
  %523 = call i32 @strcasecmp(ptr noundef %522, ptr noundef @.str.20) #7
  %524 = icmp eq i32 %523, 0
  br i1 %524, label %525, label %563

525:                                              ; preds = %521
  %526 = load ptr, ptr %3, align 8, !tbaa !5
  %527 = call double @Calculate(ptr noundef %526)
  store double %527, ptr %6, align 8, !tbaa !12
  %528 = load ptr, ptr %3, align 8, !tbaa !5
  %529 = load ptr, ptr %528, align 8, !tbaa !5
  store ptr %529, ptr %4, align 8, !tbaa !5
  %530 = load ptr, ptr %4, align 8, !tbaa !5
  %531 = load i8, ptr %530, align 1, !tbaa !11
  %532 = sext i8 %531 to i32
  %533 = icmp ne i32 %532, 44
  br i1 %533, label %534, label %535

534:                                              ; preds = %525
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

535:                                              ; preds = %525
  %536 = load ptr, ptr %4, align 8, !tbaa !5
  %537 = getelementptr inbounds i8, ptr %536, i64 1
  %538 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %537, ptr %538, align 8, !tbaa !5
  %539 = load ptr, ptr %3, align 8, !tbaa !5
  %540 = call double @Calculate(ptr noundef %539)
  store double %540, ptr %7, align 8, !tbaa !12
  %541 = load ptr, ptr %3, align 8, !tbaa !5
  %542 = load ptr, ptr %541, align 8, !tbaa !5
  store ptr %542, ptr %4, align 8, !tbaa !5
  %543 = load ptr, ptr %4, align 8, !tbaa !5
  %544 = getelementptr inbounds i8, ptr %543, i64 1
  %545 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %544, ptr %545, align 8, !tbaa !5
  %546 = load ptr, ptr %4, align 8, !tbaa !5
  %547 = load i8, ptr %546, align 1, !tbaa !11
  %548 = sext i8 %547 to i32
  %549 = icmp eq i32 %548, 41
  br i1 %549, label %550, label %560

550:                                              ; preds = %535
  %551 = load double, ptr %6, align 8, !tbaa !12
  %552 = load double, ptr %7, align 8, !tbaa !12
  %553 = fcmp ogt double %551, %552
  br i1 %553, label %554, label %556

554:                                              ; preds = %550
  %555 = load double, ptr %6, align 8, !tbaa !12
  br label %558

556:                                              ; preds = %550
  %557 = load double, ptr %7, align 8, !tbaa !12
  br label %558

558:                                              ; preds = %556, %554
  %559 = phi double [ %555, %554 ], [ %557, %556 ]
  br label %561

560:                                              ; preds = %535
  br label %561

561:                                              ; preds = %560, %558
  %562 = phi double [ %559, %558 ], [ 0x7FF8000000000000, %560 ]
  store double %562, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

563:                                              ; preds = %521
  %564 = load ptr, ptr %15, align 8, !tbaa !5
  %565 = call i32 @strcasecmp(ptr noundef %564, ptr noundef @.str.21) #7
  %566 = icmp eq i32 %565, 0
  br i1 %566, label %567, label %599

567:                                              ; preds = %563
  %568 = load ptr, ptr %3, align 8, !tbaa !5
  %569 = call double @Calculate(ptr noundef %568)
  store double %569, ptr %6, align 8, !tbaa !12
  %570 = load ptr, ptr %3, align 8, !tbaa !5
  %571 = load ptr, ptr %570, align 8, !tbaa !5
  store ptr %571, ptr %4, align 8, !tbaa !5
  %572 = load ptr, ptr %4, align 8, !tbaa !5
  %573 = load i8, ptr %572, align 1, !tbaa !11
  %574 = sext i8 %573 to i32
  %575 = icmp ne i32 %574, 44
  br i1 %575, label %576, label %577

576:                                              ; preds = %567
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

577:                                              ; preds = %567
  %578 = load ptr, ptr %4, align 8, !tbaa !5
  %579 = getelementptr inbounds i8, ptr %578, i64 1
  %580 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %579, ptr %580, align 8, !tbaa !5
  %581 = load ptr, ptr %3, align 8, !tbaa !5
  %582 = call double @Calculate(ptr noundef %581)
  store double %582, ptr %7, align 8, !tbaa !12
  %583 = load ptr, ptr %3, align 8, !tbaa !5
  %584 = load ptr, ptr %583, align 8, !tbaa !5
  store ptr %584, ptr %4, align 8, !tbaa !5
  %585 = load ptr, ptr %4, align 8, !tbaa !5
  %586 = getelementptr inbounds i8, ptr %585, i64 1
  %587 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %586, ptr %587, align 8, !tbaa !5
  %588 = load ptr, ptr %4, align 8, !tbaa !5
  %589 = load i8, ptr %588, align 1, !tbaa !11
  %590 = sext i8 %589 to i32
  %591 = icmp eq i32 %590, 41
  br i1 %591, label %592, label %596

592:                                              ; preds = %577
  %593 = load double, ptr %6, align 8, !tbaa !12
  %594 = load double, ptr %7, align 8, !tbaa !12
  %595 = call double @pow(double noundef %593, double noundef %594) #6
  br label %597

596:                                              ; preds = %577
  br label %597

597:                                              ; preds = %596, %592
  %598 = phi double [ %595, %592 ], [ 0x7FF8000000000000, %596 ]
  store double %598, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

599:                                              ; preds = %563
  %600 = load ptr, ptr %15, align 8, !tbaa !5
  %601 = call i32 @strcasecmp(ptr noundef %600, ptr noundef @.str.22) #7
  %602 = icmp eq i32 %601, 0
  br i1 %602, label %603, label %637

603:                                              ; preds = %599
  %604 = load ptr, ptr %3, align 8, !tbaa !5
  %605 = call double @Calculate(ptr noundef %604)
  store double %605, ptr %6, align 8, !tbaa !12
  %606 = load ptr, ptr %3, align 8, !tbaa !5
  %607 = load ptr, ptr %606, align 8, !tbaa !5
  store ptr %607, ptr %4, align 8, !tbaa !5
  %608 = load ptr, ptr %4, align 8, !tbaa !5
  %609 = load i8, ptr %608, align 1, !tbaa !11
  %610 = sext i8 %609 to i32
  %611 = icmp ne i32 %610, 44
  br i1 %611, label %612, label %613

612:                                              ; preds = %603
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

613:                                              ; preds = %603
  %614 = load ptr, ptr %4, align 8, !tbaa !5
  %615 = getelementptr inbounds i8, ptr %614, i64 1
  %616 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %615, ptr %616, align 8, !tbaa !5
  %617 = load ptr, ptr %3, align 8, !tbaa !5
  %618 = call double @Calculate(ptr noundef %617)
  store double %618, ptr %7, align 8, !tbaa !12
  %619 = load ptr, ptr %3, align 8, !tbaa !5
  %620 = load ptr, ptr %619, align 8, !tbaa !5
  store ptr %620, ptr %4, align 8, !tbaa !5
  %621 = load ptr, ptr %4, align 8, !tbaa !5
  %622 = getelementptr inbounds i8, ptr %621, i64 1
  %623 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %622, ptr %623, align 8, !tbaa !5
  %624 = load ptr, ptr %4, align 8, !tbaa !5
  %625 = load i8, ptr %624, align 1, !tbaa !11
  %626 = sext i8 %625 to i32
  %627 = icmp eq i32 %626, 41
  br i1 %627, label %628, label %634

628:                                              ; preds = %613
  %629 = load double, ptr %7, align 8, !tbaa !12
  %630 = call double @log(double noundef %629) #6
  %631 = load double, ptr %6, align 8, !tbaa !12
  %632 = call double @log(double noundef %631) #6
  %633 = fdiv double %630, %632
  br label %635

634:                                              ; preds = %613
  br label %635

635:                                              ; preds = %634, %628
  %636 = phi double [ %633, %628 ], [ 0x7FF8000000000000, %634 ]
  store double %636, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

637:                                              ; preds = %599
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #6
  store i32 0, ptr %17, align 4, !tbaa !9
  br label %638

638:                                              ; preds = %842, %637
  %639 = load i32, ptr %17, align 4, !tbaa !9
  %640 = load i32, ptr @morn_calculate_function_num, align 4, !tbaa !9
  %641 = icmp slt i32 %639, %640
  br i1 %641, label %643, label %642

642:                                              ; preds = %638
  store i32 4, ptr %16, align 4
  br label %845

643:                                              ; preds = %638
  %644 = load ptr, ptr %15, align 8, !tbaa !5
  %645 = load i32, ptr %17, align 4, !tbaa !9
  %646 = sext i32 %645 to i64
  %647 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %646
  %648 = getelementptr inbounds %struct.CalculateFunction, ptr %647, i32 0, i32 0
  %649 = getelementptr inbounds [32 x i8], ptr %648, i64 0, i64 0
  %650 = call i32 @strcasecmp(ptr noundef %644, ptr noundef %649) #7
  %651 = icmp eq i32 %650, 0
  br i1 %651, label %652, label %841

652:                                              ; preds = %643
  %653 = load ptr, ptr %3, align 8, !tbaa !5
  %654 = call double @Calculate(ptr noundef %653)
  store double %654, ptr %6, align 8, !tbaa !12
  %655 = load ptr, ptr %3, align 8, !tbaa !5
  %656 = load ptr, ptr %655, align 8, !tbaa !5
  store ptr %656, ptr %4, align 8, !tbaa !5
  %657 = load ptr, ptr %4, align 8, !tbaa !5
  %658 = getelementptr inbounds i8, ptr %657, i64 1
  %659 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %658, ptr %659, align 8, !tbaa !5
  %660 = load ptr, ptr %4, align 8, !tbaa !5
  %661 = load i8, ptr %660, align 1, !tbaa !11
  %662 = sext i8 %661 to i32
  %663 = icmp eq i32 %662, 41
  br i1 %663, label %664, label %672

664:                                              ; preds = %652
  %665 = load i32, ptr %17, align 4, !tbaa !9
  %666 = sext i32 %665 to i64
  %667 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %666
  %668 = getelementptr inbounds %struct.CalculateFunction, ptr %667, i32 0, i32 1
  %669 = load ptr, ptr %668, align 8, !tbaa !11
  %670 = load double, ptr %6, align 8, !tbaa !12
  %671 = call double %669(double noundef %670)
  store double %671, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

672:                                              ; preds = %652
  %673 = load ptr, ptr %3, align 8, !tbaa !5
  %674 = call double @Calculate(ptr noundef %673)
  store double %674, ptr %7, align 8, !tbaa !12
  %675 = load ptr, ptr %3, align 8, !tbaa !5
  %676 = load ptr, ptr %675, align 8, !tbaa !5
  store ptr %676, ptr %4, align 8, !tbaa !5
  %677 = load ptr, ptr %4, align 8, !tbaa !5
  %678 = getelementptr inbounds i8, ptr %677, i64 1
  %679 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %678, ptr %679, align 8, !tbaa !5
  %680 = load ptr, ptr %4, align 8, !tbaa !5
  %681 = load i8, ptr %680, align 1, !tbaa !11
  %682 = sext i8 %681 to i32
  %683 = icmp eq i32 %682, 41
  br i1 %683, label %684, label %693

684:                                              ; preds = %672
  %685 = load i32, ptr %17, align 4, !tbaa !9
  %686 = sext i32 %685 to i64
  %687 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %686
  %688 = getelementptr inbounds %struct.CalculateFunction, ptr %687, i32 0, i32 1
  %689 = load ptr, ptr %688, align 8, !tbaa !11
  %690 = load double, ptr %6, align 8, !tbaa !12
  %691 = load double, ptr %7, align 8, !tbaa !12
  %692 = call double %689(double noundef %690, double noundef %691)
  store double %692, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

693:                                              ; preds = %672
  %694 = load ptr, ptr %3, align 8, !tbaa !5
  %695 = call double @Calculate(ptr noundef %694)
  store double %695, ptr %8, align 8, !tbaa !12
  %696 = load ptr, ptr %3, align 8, !tbaa !5
  %697 = load ptr, ptr %696, align 8, !tbaa !5
  store ptr %697, ptr %4, align 8, !tbaa !5
  %698 = load ptr, ptr %4, align 8, !tbaa !5
  %699 = getelementptr inbounds i8, ptr %698, i64 1
  %700 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %699, ptr %700, align 8, !tbaa !5
  %701 = load ptr, ptr %4, align 8, !tbaa !5
  %702 = load i8, ptr %701, align 1, !tbaa !11
  %703 = sext i8 %702 to i32
  %704 = icmp eq i32 %703, 41
  br i1 %704, label %705, label %715

705:                                              ; preds = %693
  %706 = load i32, ptr %17, align 4, !tbaa !9
  %707 = sext i32 %706 to i64
  %708 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %707
  %709 = getelementptr inbounds %struct.CalculateFunction, ptr %708, i32 0, i32 1
  %710 = load ptr, ptr %709, align 8, !tbaa !11
  %711 = load double, ptr %6, align 8, !tbaa !12
  %712 = load double, ptr %7, align 8, !tbaa !12
  %713 = load double, ptr %8, align 8, !tbaa !12
  %714 = call double %710(double noundef %711, double noundef %712, double noundef %713)
  store double %714, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

715:                                              ; preds = %693
  %716 = load ptr, ptr %3, align 8, !tbaa !5
  %717 = call double @Calculate(ptr noundef %716)
  store double %717, ptr %9, align 8, !tbaa !12
  %718 = load ptr, ptr %3, align 8, !tbaa !5
  %719 = load ptr, ptr %718, align 8, !tbaa !5
  store ptr %719, ptr %4, align 8, !tbaa !5
  %720 = load ptr, ptr %4, align 8, !tbaa !5
  %721 = getelementptr inbounds i8, ptr %720, i64 1
  %722 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %721, ptr %722, align 8, !tbaa !5
  %723 = load ptr, ptr %4, align 8, !tbaa !5
  %724 = load i8, ptr %723, align 1, !tbaa !11
  %725 = sext i8 %724 to i32
  %726 = icmp eq i32 %725, 41
  br i1 %726, label %727, label %738

727:                                              ; preds = %715
  %728 = load i32, ptr %17, align 4, !tbaa !9
  %729 = sext i32 %728 to i64
  %730 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %729
  %731 = getelementptr inbounds %struct.CalculateFunction, ptr %730, i32 0, i32 1
  %732 = load ptr, ptr %731, align 8, !tbaa !11
  %733 = load double, ptr %6, align 8, !tbaa !12
  %734 = load double, ptr %7, align 8, !tbaa !12
  %735 = load double, ptr %8, align 8, !tbaa !12
  %736 = load double, ptr %9, align 8, !tbaa !12
  %737 = call double %732(double noundef %733, double noundef %734, double noundef %735, double noundef %736)
  store double %737, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

738:                                              ; preds = %715
  %739 = load ptr, ptr %3, align 8, !tbaa !5
  %740 = call double @Calculate(ptr noundef %739)
  store double %740, ptr %10, align 8, !tbaa !12
  %741 = load ptr, ptr %3, align 8, !tbaa !5
  %742 = load ptr, ptr %741, align 8, !tbaa !5
  store ptr %742, ptr %4, align 8, !tbaa !5
  %743 = load ptr, ptr %4, align 8, !tbaa !5
  %744 = getelementptr inbounds i8, ptr %743, i64 1
  %745 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %744, ptr %745, align 8, !tbaa !5
  %746 = load ptr, ptr %4, align 8, !tbaa !5
  %747 = load i8, ptr %746, align 1, !tbaa !11
  %748 = sext i8 %747 to i32
  %749 = icmp eq i32 %748, 41
  br i1 %749, label %750, label %762

750:                                              ; preds = %738
  %751 = load i32, ptr %17, align 4, !tbaa !9
  %752 = sext i32 %751 to i64
  %753 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %752
  %754 = getelementptr inbounds %struct.CalculateFunction, ptr %753, i32 0, i32 1
  %755 = load ptr, ptr %754, align 8, !tbaa !11
  %756 = load double, ptr %6, align 8, !tbaa !12
  %757 = load double, ptr %7, align 8, !tbaa !12
  %758 = load double, ptr %8, align 8, !tbaa !12
  %759 = load double, ptr %9, align 8, !tbaa !12
  %760 = load double, ptr %10, align 8, !tbaa !12
  %761 = call double %755(double noundef %756, double noundef %757, double noundef %758, double noundef %759, double noundef %760)
  store double %761, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

762:                                              ; preds = %738
  %763 = load ptr, ptr %3, align 8, !tbaa !5
  %764 = call double @Calculate(ptr noundef %763)
  store double %764, ptr %11, align 8, !tbaa !12
  %765 = load ptr, ptr %3, align 8, !tbaa !5
  %766 = load ptr, ptr %765, align 8, !tbaa !5
  store ptr %766, ptr %4, align 8, !tbaa !5
  %767 = load ptr, ptr %4, align 8, !tbaa !5
  %768 = getelementptr inbounds i8, ptr %767, i64 1
  %769 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %768, ptr %769, align 8, !tbaa !5
  %770 = load ptr, ptr %4, align 8, !tbaa !5
  %771 = load i8, ptr %770, align 1, !tbaa !11
  %772 = sext i8 %771 to i32
  %773 = icmp eq i32 %772, 41
  br i1 %773, label %774, label %787

774:                                              ; preds = %762
  %775 = load i32, ptr %17, align 4, !tbaa !9
  %776 = sext i32 %775 to i64
  %777 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %776
  %778 = getelementptr inbounds %struct.CalculateFunction, ptr %777, i32 0, i32 1
  %779 = load ptr, ptr %778, align 8, !tbaa !11
  %780 = load double, ptr %6, align 8, !tbaa !12
  %781 = load double, ptr %7, align 8, !tbaa !12
  %782 = load double, ptr %8, align 8, !tbaa !12
  %783 = load double, ptr %9, align 8, !tbaa !12
  %784 = load double, ptr %10, align 8, !tbaa !12
  %785 = load double, ptr %11, align 8, !tbaa !12
  %786 = call double %779(double noundef %780, double noundef %781, double noundef %782, double noundef %783, double noundef %784, double noundef %785)
  store double %786, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

787:                                              ; preds = %762
  %788 = load ptr, ptr %3, align 8, !tbaa !5
  %789 = call double @Calculate(ptr noundef %788)
  store double %789, ptr %12, align 8, !tbaa !12
  %790 = load ptr, ptr %3, align 8, !tbaa !5
  %791 = load ptr, ptr %790, align 8, !tbaa !5
  store ptr %791, ptr %4, align 8, !tbaa !5
  %792 = load ptr, ptr %4, align 8, !tbaa !5
  %793 = getelementptr inbounds i8, ptr %792, i64 1
  %794 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %793, ptr %794, align 8, !tbaa !5
  %795 = load ptr, ptr %4, align 8, !tbaa !5
  %796 = load i8, ptr %795, align 1, !tbaa !11
  %797 = sext i8 %796 to i32
  %798 = icmp eq i32 %797, 41
  br i1 %798, label %799, label %813

799:                                              ; preds = %787
  %800 = load i32, ptr %17, align 4, !tbaa !9
  %801 = sext i32 %800 to i64
  %802 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %801
  %803 = getelementptr inbounds %struct.CalculateFunction, ptr %802, i32 0, i32 1
  %804 = load ptr, ptr %803, align 8, !tbaa !11
  %805 = load double, ptr %6, align 8, !tbaa !12
  %806 = load double, ptr %7, align 8, !tbaa !12
  %807 = load double, ptr %8, align 8, !tbaa !12
  %808 = load double, ptr %9, align 8, !tbaa !12
  %809 = load double, ptr %10, align 8, !tbaa !12
  %810 = load double, ptr %11, align 8, !tbaa !12
  %811 = load double, ptr %12, align 8, !tbaa !12
  %812 = call double %804(double noundef %805, double noundef %806, double noundef %807, double noundef %808, double noundef %809, double noundef %810, double noundef %811)
  store double %812, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

813:                                              ; preds = %787
  %814 = load ptr, ptr %3, align 8, !tbaa !5
  %815 = call double @Calculate(ptr noundef %814)
  store double %815, ptr %13, align 8, !tbaa !12
  %816 = load ptr, ptr %3, align 8, !tbaa !5
  %817 = load ptr, ptr %816, align 8, !tbaa !5
  store ptr %817, ptr %4, align 8, !tbaa !5
  %818 = load ptr, ptr %4, align 8, !tbaa !5
  %819 = getelementptr inbounds i8, ptr %818, i64 1
  %820 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %819, ptr %820, align 8, !tbaa !5
  %821 = load ptr, ptr %4, align 8, !tbaa !5
  %822 = load i8, ptr %821, align 1, !tbaa !11
  %823 = sext i8 %822 to i32
  %824 = icmp eq i32 %823, 41
  br i1 %824, label %825, label %840

825:                                              ; preds = %813
  %826 = load i32, ptr %17, align 4, !tbaa !9
  %827 = sext i32 %826 to i64
  %828 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %827
  %829 = getelementptr inbounds %struct.CalculateFunction, ptr %828, i32 0, i32 1
  %830 = load ptr, ptr %829, align 8, !tbaa !11
  %831 = load double, ptr %6, align 8, !tbaa !12
  %832 = load double, ptr %7, align 8, !tbaa !12
  %833 = load double, ptr %8, align 8, !tbaa !12
  %834 = load double, ptr %9, align 8, !tbaa !12
  %835 = load double, ptr %10, align 8, !tbaa !12
  %836 = load double, ptr %11, align 8, !tbaa !12
  %837 = load double, ptr %12, align 8, !tbaa !12
  %838 = load double, ptr %13, align 8, !tbaa !12
  %839 = call double %830(double noundef %831, double noundef %832, double noundef %833, double noundef %834, double noundef %835, double noundef %836, double noundef %837, double noundef %838)
  store double %839, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

840:                                              ; preds = %813
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %845

841:                                              ; preds = %643
  br label %842

842:                                              ; preds = %841
  %843 = load i32, ptr %17, align 4, !tbaa !9
  %844 = add nsw i32 %843, 1
  store i32 %844, ptr %17, align 4, !tbaa !9
  br label %638, !llvm.loop !14

845:                                              ; preds = %840, %825, %799, %774, %750, %727, %705, %684, %664, %642
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #6
  %846 = load i32, ptr %16, align 4
  switch i32 %846, label %919 [
    i32 4, label %847
  ]

847:                                              ; preds = %845
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

848:                                              ; preds = %85
  %849 = load ptr, ptr %4, align 8, !tbaa !5
  %850 = getelementptr inbounds i8, ptr %849, i32 1
  store ptr %850, ptr %4, align 8, !tbaa !5
  %851 = load ptr, ptr %4, align 8, !tbaa !5
  %852 = load ptr, ptr %3, align 8, !tbaa !5
  store ptr %851, ptr %852, align 8, !tbaa !5
  br label %38, !llvm.loop !16

853:                                              ; preds = %83
  %854 = load ptr, ptr %15, align 8, !tbaa !5
  %855 = getelementptr inbounds i8, ptr %854, i64 0
  %856 = load i8, ptr %855, align 1, !tbaa !11
  %857 = sext i8 %856 to i32
  %858 = icmp eq i32 %857, 112
  br i1 %858, label %865, label %859

859:                                              ; preds = %853
  %860 = load ptr, ptr %15, align 8, !tbaa !5
  %861 = getelementptr inbounds i8, ptr %860, i64 0
  %862 = load i8, ptr %861, align 1, !tbaa !11
  %863 = sext i8 %862 to i32
  %864 = icmp eq i32 %863, 80
  br i1 %864, label %865, label %878

865:                                              ; preds = %859, %853
  %866 = load ptr, ptr %15, align 8, !tbaa !5
  %867 = getelementptr inbounds i8, ptr %866, i64 1
  %868 = load i8, ptr %867, align 1, !tbaa !11
  %869 = sext i8 %868 to i32
  %870 = icmp eq i32 %869, 105
  br i1 %870, label %877, label %871

871:                                              ; preds = %865
  %872 = load ptr, ptr %15, align 8, !tbaa !5
  %873 = getelementptr inbounds i8, ptr %872, i64 1
  %874 = load i8, ptr %873, align 1, !tbaa !11
  %875 = sext i8 %874 to i32
  %876 = icmp eq i32 %875, 73
  br i1 %876, label %877, label %878

877:                                              ; preds = %871, %865
  store double 0x400921FB54442D18, ptr %5, align 8, !tbaa !12
  br label %909

878:                                              ; preds = %871, %859
  %879 = load ptr, ptr %15, align 8, !tbaa !5
  %880 = getelementptr inbounds i8, ptr %879, i64 0
  %881 = load i8, ptr %880, align 1, !tbaa !11
  %882 = sext i8 %881 to i32
  %883 = icmp eq i32 %882, 101
  br i1 %883, label %890, label %884

884:                                              ; preds = %878
  %885 = load ptr, ptr %15, align 8, !tbaa !5
  %886 = getelementptr inbounds i8, ptr %885, i64 0
  %887 = load i8, ptr %886, align 1, !tbaa !11
  %888 = sext i8 %887 to i32
  %889 = icmp eq i32 %888, 69
  br i1 %889, label %890, label %891

890:                                              ; preds = %884, %878
  store double 0x4005BF0A8B145769, ptr %5, align 8, !tbaa !12
  br label %908

891:                                              ; preds = %884
  %892 = load ptr, ptr %15, align 8, !tbaa !5
  %893 = getelementptr inbounds i8, ptr %892, i64 0
  %894 = load i8, ptr %893, align 1, !tbaa !11
  %895 = sext i8 %894 to i32
  %896 = icmp sge i32 %895, 48
  br i1 %896, label %897, label %906

897:                                              ; preds = %891
  %898 = load ptr, ptr %15, align 8, !tbaa !5
  %899 = getelementptr inbounds i8, ptr %898, i64 0
  %900 = load i8, ptr %899, align 1, !tbaa !11
  %901 = sext i8 %900 to i32
  %902 = icmp sle i32 %901, 57
  br i1 %902, label %903, label %906

903:                                              ; preds = %897
  %904 = load ptr, ptr %15, align 8, !tbaa !5
  %905 = call double @atof(ptr noundef %904) #7
  store double %905, ptr %5, align 8, !tbaa !12
  br label %907

906:                                              ; preds = %897, %891
  store double 0x7FF8000000000000, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

907:                                              ; preds = %903
  br label %908

908:                                              ; preds = %907, %890
  br label %909

909:                                              ; preds = %908, %877
  %910 = load i32, ptr %14, align 4, !tbaa !9
  %911 = icmp eq i32 %910, 0
  br i1 %911, label %912, label %914

912:                                              ; preds = %909
  %913 = load double, ptr %5, align 8, !tbaa !12
  br label %917

914:                                              ; preds = %909
  %915 = load double, ptr %5, align 8, !tbaa !12
  %916 = fsub double 0.000000e+00, %915
  br label %917

917:                                              ; preds = %914, %912
  %918 = phi double [ %913, %912 ], [ %916, %914 ]
  store double %918, ptr %2, align 8
  store i32 1, ptr %16, align 4
  br label %919

919:                                              ; preds = %917, %906, %847, %845, %635, %612, %597, %576, %561, %534, %519, %492, %477, %455, %433, %411, %388, %366, %344, %322, %299, %277, %255, %233, %211, %189, %167, %145, %116
  call void @llvm.lifetime.end.p0(i64 8, ptr %15) #6
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %13) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %12) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %11) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %10) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #6
  call void @llvm.lifetime.end.p0(i64 8, ptr %4) #6
  %920 = load double, ptr %2, align 8
  ret double %920
}

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

; Function Attrs: nounwind willreturn memory(read)
declare i32 @strcasecmp(ptr noundef, ptr noundef) #3

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint nounwind willreturn memory(read) uwtable
declare double @atof(ptr noundef nonnull) #5

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { 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 #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 = { nounwind willreturn memory(read) "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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #5 = { inlinehint nounwind willreturn memory(read) 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 #6 = { nounwind }
attributes #7 = { nounwind willreturn memory(read) }

!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 = !{!"int", !7, i64 0}
!11 = !{!7, !7, i64 0}
!12 = !{!13, !13, i64 0}
!13 = !{!"double", !7, i64 0}
!14 = distinct !{!14, !15}
!15 = !{!"llvm.loop.mustprogress"}
!16 = distinct !{!16, !15}


; 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.CalculateFunction = type { [32 x i8], %union.anon }
%union.anon = type { ptr }

@morn_calculate_function_num = external dso_local local_unnamed_addr global i32, align 4
@morn_calculate_function = external dso_local global [128 x %struct.CalculateFunction], align 16
@.str.3 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [3 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.11 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.12 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.13 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.14 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.15 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [5 x i8], align 1
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.19 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.20 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.21 = external hidden unnamed_addr constant [4 x i8], align 1
@.str.22 = external hidden unnamed_addr constant [4 x i8], align 1

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

; Function Attrs: nounwind uwtable
define dso_local double @GetValue(ptr noundef %0) local_unnamed_addr #0 {
  %2 = load ptr, ptr %0, align 8, !tbaa !5
  %3 = load i8, ptr %2, align 1, !tbaa !9
  %.not321 = icmp eq i8 %3, 45
  %4 = icmp eq i8 %3, 43
  %5 = or i1 %.not321, %4
  %.0305.idx = zext i1 %5 to i64
  %.0305 = getelementptr inbounds i8, ptr %2, i64 %.0305.idx
  br label %6

6:                                                ; preds = %349, %1
  %.1306 = phi ptr [ %.0305, %1 ], [ %350, %349 ]
  %7 = load i8, ptr %.1306, align 1, !tbaa !9
  switch i8 %7, label %349 [
    i8 0, label %.critedge
    i8 41, label %.critedge
    i8 44, label %.critedge
    i8 43, label %.critedge
    i8 45, label %.critedge
    i8 42, label %.critedge
    i8 47, label %.critedge
    i8 37, label %.critedge
    i8 94, label %.critedge
    i8 40, label %8
  ]

8:                                                ; preds = %6
  store i8 0, ptr %.1306, align 1, !tbaa !9
  %9 = getelementptr inbounds i8, ptr %.1306, i64 1
  store ptr %9, ptr %0, align 8, !tbaa !5
  %10 = icmp eq ptr %.1306, %.0305
  br i1 %10, label %11, label %18

11:                                               ; preds = %8
  %12 = tail call double @Calculate(ptr noundef nonnull %0)
  %13 = load ptr, ptr %0, align 8, !tbaa !5
  %14 = getelementptr inbounds i8, ptr %13, i64 1
  store ptr %14, ptr %0, align 8, !tbaa !5
  %15 = load i8, ptr %13, align 1, !tbaa !9
  %16 = icmp eq i8 %15, 41
  %17 = select i1 %16, double %12, double 0x7FF8000000000000
  br label %.thread

18:                                               ; preds = %8
  %19 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.3) #6
  %20 = icmp eq i32 %19, 0
  br i1 %20, label %21, label %29

21:                                               ; preds = %18
  %22 = tail call double @Calculate(ptr noundef nonnull %0)
  %23 = load ptr, ptr %0, align 8, !tbaa !5
  %24 = getelementptr inbounds i8, ptr %23, i64 1
  store ptr %24, ptr %0, align 8, !tbaa !5
  %25 = load i8, ptr %23, align 1, !tbaa !9
  %26 = icmp eq i8 %25, 41
  %27 = tail call double @llvm.fabs.f64(double %22)
  %28 = select i1 %26, double %27, double 0x7FF8000000000000
  br label %.thread

29:                                               ; preds = %18
  %30 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.4) #6
  %31 = icmp eq i32 %30, 0
  br i1 %31, label %32, label %40

32:                                               ; preds = %29
  %33 = tail call double @Calculate(ptr noundef nonnull %0)
  %34 = load ptr, ptr %0, align 8, !tbaa !5
  %35 = getelementptr inbounds i8, ptr %34, i64 1
  store ptr %35, ptr %0, align 8, !tbaa !5
  %36 = load i8, ptr %34, align 1, !tbaa !9
  %37 = icmp eq i8 %36, 41
  br i1 %37, label %38, label %.thread

38:                                               ; preds = %32
  %39 = tail call double @sqrt(double noundef %33) #7
  br label %.thread

40:                                               ; preds = %29
  %41 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.5) #6
  %42 = icmp eq i32 %41, 0
  br i1 %42, label %43, label %51

43:                                               ; preds = %40
  %44 = tail call double @Calculate(ptr noundef nonnull %0)
  %45 = load ptr, ptr %0, align 8, !tbaa !5
  %46 = getelementptr inbounds i8, ptr %45, i64 1
  store ptr %46, ptr %0, align 8, !tbaa !5
  %47 = load i8, ptr %45, align 1, !tbaa !9
  %48 = icmp eq i8 %47, 41
  br i1 %48, label %49, label %.thread

49:                                               ; preds = %43
  %50 = tail call double @exp(double noundef %44) #7
  br label %.thread

51:                                               ; preds = %40
  %52 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.6) #6
  %53 = icmp eq i32 %52, 0
  br i1 %53, label %54, label %62

54:                                               ; preds = %51
  %55 = tail call double @Calculate(ptr noundef nonnull %0)
  %56 = load ptr, ptr %0, align 8, !tbaa !5
  %57 = getelementptr inbounds i8, ptr %56, i64 1
  store ptr %57, ptr %0, align 8, !tbaa !5
  %58 = load i8, ptr %56, align 1, !tbaa !9
  %59 = icmp eq i8 %58, 41
  br i1 %59, label %60, label %.thread

60:                                               ; preds = %54
  %61 = tail call double @log(double noundef %55) #7
  br label %.thread

62:                                               ; preds = %51
  %63 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.7) #6
  %64 = icmp eq i32 %63, 0
  br i1 %64, label %65, label %73

65:                                               ; preds = %62
  %66 = tail call double @Calculate(ptr noundef nonnull %0)
  %67 = load ptr, ptr %0, align 8, !tbaa !5
  %68 = getelementptr inbounds i8, ptr %67, i64 1
  store ptr %68, ptr %0, align 8, !tbaa !5
  %69 = load i8, ptr %67, align 1, !tbaa !9
  %70 = icmp eq i8 %69, 41
  br i1 %70, label %71, label %.thread

71:                                               ; preds = %65
  %72 = tail call double @log10(double noundef %66) #7
  br label %.thread

73:                                               ; preds = %62
  %74 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.8) #6
  %75 = icmp eq i32 %74, 0
  br i1 %75, label %76, label %84

76:                                               ; preds = %73
  %77 = tail call double @Calculate(ptr noundef nonnull %0)
  %78 = load ptr, ptr %0, align 8, !tbaa !5
  %79 = getelementptr inbounds i8, ptr %78, i64 1
  store ptr %79, ptr %0, align 8, !tbaa !5
  %80 = load i8, ptr %78, align 1, !tbaa !9
  %81 = icmp eq i8 %80, 41
  br i1 %81, label %82, label %.thread

82:                                               ; preds = %76
  %83 = tail call double @sin(double noundef %77) #7
  br label %.thread

84:                                               ; preds = %73
  %85 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.9) #6
  %86 = icmp eq i32 %85, 0
  br i1 %86, label %87, label %95

87:                                               ; preds = %84
  %88 = tail call double @Calculate(ptr noundef nonnull %0)
  %89 = load ptr, ptr %0, align 8, !tbaa !5
  %90 = getelementptr inbounds i8, ptr %89, i64 1
  store ptr %90, ptr %0, align 8, !tbaa !5
  %91 = load i8, ptr %89, align 1, !tbaa !9
  %92 = icmp eq i8 %91, 41
  br i1 %92, label %93, label %.thread

93:                                               ; preds = %87
  %94 = tail call double @cos(double noundef %88) #7
  br label %.thread

95:                                               ; preds = %84
  %96 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.10) #6
  %97 = icmp eq i32 %96, 0
  br i1 %97, label %98, label %106

98:                                               ; preds = %95
  %99 = tail call double @Calculate(ptr noundef nonnull %0)
  %100 = load ptr, ptr %0, align 8, !tbaa !5
  %101 = getelementptr inbounds i8, ptr %100, i64 1
  store ptr %101, ptr %0, align 8, !tbaa !5
  %102 = load i8, ptr %100, align 1, !tbaa !9
  %103 = icmp eq i8 %102, 41
  br i1 %103, label %104, label %.thread

104:                                              ; preds = %98
  %105 = tail call double @tan(double noundef %99) #7
  br label %.thread

106:                                              ; preds = %95
  %107 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.11) #6
  %108 = icmp eq i32 %107, 0
  br i1 %108, label %109, label %118

109:                                              ; preds = %106
  %110 = tail call double @Calculate(ptr noundef nonnull %0)
  %111 = load ptr, ptr %0, align 8, !tbaa !5
  %112 = getelementptr inbounds i8, ptr %111, i64 1
  store ptr %112, ptr %0, align 8, !tbaa !5
  %113 = load i8, ptr %111, align 1, !tbaa !9
  %114 = icmp eq i8 %113, 41
  br i1 %114, label %115, label %.thread

115:                                              ; preds = %109
  %116 = tail call double @tan(double noundef %110) #7
  %117 = fdiv double 1.000000e+00, %116
  br label %.thread

118:                                              ; preds = %106
  %119 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.12) #6
  %120 = icmp eq i32 %119, 0
  br i1 %120, label %121, label %129

121:                                              ; preds = %118
  %122 = tail call double @Calculate(ptr noundef nonnull %0)
  %123 = load ptr, ptr %0, align 8, !tbaa !5
  %124 = getelementptr inbounds i8, ptr %123, i64 1
  store ptr %124, ptr %0, align 8, !tbaa !5
  %125 = load i8, ptr %123, align 1, !tbaa !9
  %126 = icmp eq i8 %125, 41
  br i1 %126, label %127, label %.thread

127:                                              ; preds = %121
  %128 = tail call double @asin(double noundef %122) #7
  br label %.thread

129:                                              ; preds = %118
  %130 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.13) #6
  %131 = icmp eq i32 %130, 0
  br i1 %131, label %132, label %140

132:                                              ; preds = %129
  %133 = tail call double @Calculate(ptr noundef nonnull %0)
  %134 = load ptr, ptr %0, align 8, !tbaa !5
  %135 = getelementptr inbounds i8, ptr %134, i64 1
  store ptr %135, ptr %0, align 8, !tbaa !5
  %136 = load i8, ptr %134, align 1, !tbaa !9
  %137 = icmp eq i8 %136, 41
  br i1 %137, label %138, label %.thread

138:                                              ; preds = %132
  %139 = tail call double @acos(double noundef %133) #7
  br label %.thread

140:                                              ; preds = %129
  %141 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.14) #6
  %142 = icmp eq i32 %141, 0
  br i1 %142, label %143, label %151

143:                                              ; preds = %140
  %144 = tail call double @Calculate(ptr noundef nonnull %0)
  %145 = load ptr, ptr %0, align 8, !tbaa !5
  %146 = getelementptr inbounds i8, ptr %145, i64 1
  store ptr %146, ptr %0, align 8, !tbaa !5
  %147 = load i8, ptr %145, align 1, !tbaa !9
  %148 = icmp eq i8 %147, 41
  br i1 %148, label %149, label %.thread

149:                                              ; preds = %143
  %150 = tail call double @atan(double noundef %144) #7
  br label %.thread

151:                                              ; preds = %140
  %152 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.15) #6
  %153 = icmp eq i32 %152, 0
  br i1 %153, label %154, label %163

154:                                              ; preds = %151
  %155 = tail call double @Calculate(ptr noundef nonnull %0)
  %156 = load ptr, ptr %0, align 8, !tbaa !5
  %157 = getelementptr inbounds i8, ptr %156, i64 1
  store ptr %157, ptr %0, align 8, !tbaa !5
  %158 = load i8, ptr %156, align 1, !tbaa !9
  %159 = icmp eq i8 %158, 41
  br i1 %159, label %160, label %.thread

160:                                              ; preds = %154
  %161 = fdiv double 1.000000e+00, %155
  %162 = tail call double @atan(double noundef %161) #7
  br label %.thread

163:                                              ; preds = %151
  %164 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.16) #6
  %165 = icmp eq i32 %164, 0
  br i1 %165, label %166, label %174

166:                                              ; preds = %163
  %167 = tail call double @Calculate(ptr noundef nonnull %0)
  %168 = load ptr, ptr %0, align 8, !tbaa !5
  %169 = getelementptr inbounds i8, ptr %168, i64 1
  store ptr %169, ptr %0, align 8, !tbaa !5
  %170 = load i8, ptr %168, align 1, !tbaa !9
  %171 = icmp eq i8 %170, 41
  %172 = tail call double @llvm.ceil.f64(double %167)
  %173 = select i1 %171, double %172, double 0x7FF8000000000000
  br label %.thread

174:                                              ; preds = %163
  %175 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.17) #6
  %176 = icmp eq i32 %175, 0
  br i1 %176, label %177, label %185

177:                                              ; preds = %174
  %178 = tail call double @Calculate(ptr noundef nonnull %0)
  %179 = load ptr, ptr %0, align 8, !tbaa !5
  %180 = getelementptr inbounds i8, ptr %179, i64 1
  store ptr %180, ptr %0, align 8, !tbaa !5
  %181 = load i8, ptr %179, align 1, !tbaa !9
  %182 = icmp eq i8 %181, 41
  %183 = tail call double @llvm.floor.f64(double %178)
  %184 = select i1 %182, double %183, double 0x7FF8000000000000
  br label %.thread

185:                                              ; preds = %174
  %186 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.18) #6
  %187 = icmp eq i32 %186, 0
  br i1 %187, label %188, label %196

188:                                              ; preds = %185
  %189 = tail call double @Calculate(ptr noundef nonnull %0)
  %190 = load ptr, ptr %0, align 8, !tbaa !5
  %191 = getelementptr inbounds i8, ptr %190, i64 1
  store ptr %191, ptr %0, align 8, !tbaa !5
  %192 = load i8, ptr %190, align 1, !tbaa !9
  %193 = icmp eq i8 %192, 41
  %194 = tail call double @llvm.round.f64(double %189)
  %195 = select i1 %193, double %194, double 0x7FF8000000000000
  br label %.thread

196:                                              ; preds = %185
  %197 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.19) #6
  %198 = icmp eq i32 %197, 0
  br i1 %198, label %199, label %213

199:                                              ; preds = %196
  %200 = tail call double @Calculate(ptr noundef nonnull %0)
  %201 = load ptr, ptr %0, align 8, !tbaa !5
  %202 = load i8, ptr %201, align 1, !tbaa !9
  %.not326 = icmp eq i8 %202, 44
  br i1 %.not326, label %203, label %.thread

203:                                              ; preds = %199
  %204 = getelementptr inbounds i8, ptr %201, i64 1
  store ptr %204, ptr %0, align 8, !tbaa !5
  %205 = tail call double @Calculate(ptr noundef nonnull %0)
  %206 = load ptr, ptr %0, align 8, !tbaa !5
  %207 = getelementptr inbounds i8, ptr %206, i64 1
  store ptr %207, ptr %0, align 8, !tbaa !5
  %208 = load i8, ptr %206, align 1, !tbaa !9
  %209 = icmp eq i8 %208, 41
  %210 = fcmp olt double %200, %205
  %211 = select i1 %210, double %200, double %205
  %212 = select i1 %209, double %211, double 0x7FF8000000000000
  br label %.thread

213:                                              ; preds = %196
  %214 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.20) #6
  %215 = icmp eq i32 %214, 0
  br i1 %215, label %216, label %230

216:                                              ; preds = %213
  %217 = tail call double @Calculate(ptr noundef nonnull %0)
  %218 = load ptr, ptr %0, align 8, !tbaa !5
  %219 = load i8, ptr %218, align 1, !tbaa !9
  %.not325 = icmp eq i8 %219, 44
  br i1 %.not325, label %220, label %.thread

220:                                              ; preds = %216
  %221 = getelementptr inbounds i8, ptr %218, i64 1
  store ptr %221, ptr %0, align 8, !tbaa !5
  %222 = tail call double @Calculate(ptr noundef nonnull %0)
  %223 = load ptr, ptr %0, align 8, !tbaa !5
  %224 = getelementptr inbounds i8, ptr %223, i64 1
  store ptr %224, ptr %0, align 8, !tbaa !5
  %225 = load i8, ptr %223, align 1, !tbaa !9
  %226 = icmp eq i8 %225, 41
  %227 = fcmp ogt double %217, %222
  %228 = select i1 %227, double %217, double %222
  %229 = select i1 %226, double %228, double 0x7FF8000000000000
  br label %.thread

230:                                              ; preds = %213
  %231 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.21) #6
  %232 = icmp eq i32 %231, 0
  br i1 %232, label %233, label %246

233:                                              ; preds = %230
  %234 = tail call double @Calculate(ptr noundef nonnull %0)
  %235 = load ptr, ptr %0, align 8, !tbaa !5
  %236 = load i8, ptr %235, align 1, !tbaa !9
  %.not324 = icmp eq i8 %236, 44
  br i1 %.not324, label %237, label %.thread

237:                                              ; preds = %233
  %238 = getelementptr inbounds i8, ptr %235, i64 1
  store ptr %238, ptr %0, align 8, !tbaa !5
  %239 = tail call double @Calculate(ptr noundef nonnull %0)
  %240 = load ptr, ptr %0, align 8, !tbaa !5
  %241 = getelementptr inbounds i8, ptr %240, i64 1
  store ptr %241, ptr %0, align 8, !tbaa !5
  %242 = load i8, ptr %240, align 1, !tbaa !9
  %243 = icmp eq i8 %242, 41
  br i1 %243, label %244, label %.thread

244:                                              ; preds = %237
  %245 = tail call double @pow(double noundef %234, double noundef %239) #7
  br label %.thread

246:                                              ; preds = %230
  %247 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull @.str.22) #6
  %248 = icmp eq i32 %247, 0
  br i1 %248, label %250, label %.preheader

.preheader:                                       ; preds = %246
  %249 = load i32, ptr @morn_calculate_function_num, align 4, !tbaa !10
  %.not322329 = icmp sgt i32 %249, 0
  br i1 %.not322329, label %.lr.ph.preheader, label %.thread

.lr.ph.preheader:                                 ; preds = %.preheader
  %wide.trip.count = zext nneg i32 %249 to i64
  br label %.lr.ph

250:                                              ; preds = %246
  %251 = tail call double @Calculate(ptr noundef nonnull %0)
  %252 = load ptr, ptr %0, align 8, !tbaa !5
  %253 = load i8, ptr %252, align 1, !tbaa !9
  %.not323 = icmp eq i8 %253, 44
  br i1 %.not323, label %254, label %.thread

254:                                              ; preds = %250
  %255 = getelementptr inbounds i8, ptr %252, i64 1
  store ptr %255, ptr %0, align 8, !tbaa !5
  %256 = tail call double @Calculate(ptr noundef nonnull %0)
  %257 = load ptr, ptr %0, align 8, !tbaa !5
  %258 = getelementptr inbounds i8, ptr %257, i64 1
  store ptr %258, ptr %0, align 8, !tbaa !5
  %259 = load i8, ptr %257, align 1, !tbaa !9
  %260 = icmp eq i8 %259, 41
  br i1 %260, label %261, label %.thread

261:                                              ; preds = %254
  %262 = tail call double @log(double noundef %256) #7
  %263 = tail call double @log(double noundef %251) #7
  %264 = fdiv double %262, %263
  br label %.thread

265:                                              ; preds = %.lr.ph
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %.thread, label %.lr.ph, !llvm.loop !12

.lr.ph:                                           ; preds = %.lr.ph.preheader, %265
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %265 ]
  %266 = getelementptr inbounds [128 x %struct.CalculateFunction], ptr @morn_calculate_function, i64 0, i64 %indvars.iv
  %267 = tail call i32 @strcasecmp(ptr noundef nonnull %.0305, ptr noundef nonnull %266) #6
  %268 = icmp eq i32 %267, 0
  br i1 %268, label %269, label %265

269:                                              ; preds = %.lr.ph
  %270 = tail call double @Calculate(ptr noundef nonnull %0)
  %271 = load ptr, ptr %0, align 8, !tbaa !5
  %272 = getelementptr inbounds i8, ptr %271, i64 1
  store ptr %272, ptr %0, align 8, !tbaa !5
  %273 = load i8, ptr %271, align 1, !tbaa !9
  %274 = icmp eq i8 %273, 41
  br i1 %274, label %275, label %279

275:                                              ; preds = %269
  %276 = getelementptr inbounds i8, ptr %266, i64 32
  %277 = load ptr, ptr %276, align 8, !tbaa !9
  %278 = tail call double %277(double noundef %270) #7
  br label %.thread

279:                                              ; preds = %269
  %280 = tail call double @Calculate(ptr noundef nonnull %0)
  %281 = load ptr, ptr %0, align 8, !tbaa !5
  %282 = getelementptr inbounds i8, ptr %281, i64 1
  store ptr %282, ptr %0, align 8, !tbaa !5
  %283 = load i8, ptr %281, align 1, !tbaa !9
  %284 = icmp eq i8 %283, 41
  br i1 %284, label %285, label %289

285:                                              ; preds = %279
  %286 = getelementptr inbounds i8, ptr %266, i64 32
  %287 = load ptr, ptr %286, align 8, !tbaa !9
  %288 = tail call double %287(double noundef %270, double noundef %280) #7
  br label %.thread

289:                                              ; preds = %279
  %290 = tail call double @Calculate(ptr noundef nonnull %0)
  %291 = load ptr, ptr %0, align 8, !tbaa !5
  %292 = getelementptr inbounds i8, ptr %291, i64 1
  store ptr %292, ptr %0, align 8, !tbaa !5
  %293 = load i8, ptr %291, align 1, !tbaa !9
  %294 = icmp eq i8 %293, 41
  br i1 %294, label %295, label %299

295:                                              ; preds = %289
  %296 = getelementptr inbounds i8, ptr %266, i64 32
  %297 = load ptr, ptr %296, align 8, !tbaa !9
  %298 = tail call double %297(double noundef %270, double noundef %280, double noundef %290) #7
  br label %.thread

299:                                              ; preds = %289
  %300 = tail call double @Calculate(ptr noundef nonnull %0)
  %301 = load ptr, ptr %0, align 8, !tbaa !5
  %302 = getelementptr inbounds i8, ptr %301, i64 1
  store ptr %302, ptr %0, align 8, !tbaa !5
  %303 = load i8, ptr %301, align 1, !tbaa !9
  %304 = icmp eq i8 %303, 41
  br i1 %304, label %305, label %309

305:                                              ; preds = %299
  %306 = getelementptr inbounds i8, ptr %266, i64 32
  %307 = load ptr, ptr %306, align 8, !tbaa !9
  %308 = tail call double %307(double noundef %270, double noundef %280, double noundef %290, double noundef %300) #7
  br label %.thread

309:                                              ; preds = %299
  %310 = tail call double @Calculate(ptr noundef nonnull %0)
  %311 = load ptr, ptr %0, align 8, !tbaa !5
  %312 = getelementptr inbounds i8, ptr %311, i64 1
  store ptr %312, ptr %0, align 8, !tbaa !5
  %313 = load i8, ptr %311, align 1, !tbaa !9
  %314 = icmp eq i8 %313, 41
  br i1 %314, label %315, label %319

315:                                              ; preds = %309
  %316 = getelementptr inbounds i8, ptr %266, i64 32
  %317 = load ptr, ptr %316, align 8, !tbaa !9
  %318 = tail call double %317(double noundef %270, double noundef %280, double noundef %290, double noundef %300, double noundef %310) #7
  br label %.thread

319:                                              ; preds = %309
  %320 = tail call double @Calculate(ptr noundef nonnull %0)
  %321 = load ptr, ptr %0, align 8, !tbaa !5
  %322 = getelementptr inbounds i8, ptr %321, i64 1
  store ptr %322, ptr %0, align 8, !tbaa !5
  %323 = load i8, ptr %321, align 1, !tbaa !9
  %324 = icmp eq i8 %323, 41
  br i1 %324, label %325, label %329

325:                                              ; preds = %319
  %326 = getelementptr inbounds i8, ptr %266, i64 32
  %327 = load ptr, ptr %326, align 8, !tbaa !9
  %328 = tail call double %327(double noundef %270, double noundef %280, double noundef %290, double noundef %300, double noundef %310, double noundef %320) #7
  br label %.thread

329:                                              ; preds = %319
  %330 = tail call double @Calculate(ptr noundef nonnull %0)
  %331 = load ptr, ptr %0, align 8, !tbaa !5
  %332 = getelementptr inbounds i8, ptr %331, i64 1
  store ptr %332, ptr %0, align 8, !tbaa !5
  %333 = load i8, ptr %331, align 1, !tbaa !9
  %334 = icmp eq i8 %333, 41
  br i1 %334, label %335, label %339

335:                                              ; preds = %329
  %336 = getelementptr inbounds i8, ptr %266, i64 32
  %337 = load ptr, ptr %336, align 8, !tbaa !9
  %338 = tail call double %337(double noundef %270, double noundef %280, double noundef %290, double noundef %300, double noundef %310, double noundef %320, double noundef %330) #7
  br label %.thread

339:                                              ; preds = %329
  %340 = tail call double @Calculate(ptr noundef nonnull %0)
  %341 = load ptr, ptr %0, align 8, !tbaa !5
  %342 = getelementptr inbounds i8, ptr %341, i64 1
  store ptr %342, ptr %0, align 8, !tbaa !5
  %343 = load i8, ptr %341, align 1, !tbaa !9
  %344 = icmp eq i8 %343, 41
  br i1 %344, label %345, label %.thread

345:                                              ; preds = %339
  %346 = getelementptr inbounds i8, ptr %266, i64 32
  %347 = load ptr, ptr %346, align 8, !tbaa !9
  %348 = tail call double %347(double noundef %270, double noundef %280, double noundef %290, double noundef %300, double noundef %310, double noundef %320, double noundef %330, double noundef %340) #7
  br label %.thread

349:                                              ; preds = %6
  %350 = getelementptr inbounds i8, ptr %.1306, i64 1
  store ptr %350, ptr %0, align 8, !tbaa !5
  br label %6, !llvm.loop !14

.critedge:                                        ; preds = %6, %6, %6, %6, %6, %6, %6, %6, %6
  %351 = load i8, ptr %.0305, align 1, !tbaa !9
  switch i8 %351, label %356 [
    i8 112, label %352
    i8 80, label %352
    i8 101, label %360
    i8 69, label %360
  ]

352:                                              ; preds = %.critedge, %.critedge
  %353 = getelementptr inbounds i8, ptr %.0305, i64 1
  %354 = load i8, ptr %353, align 1, !tbaa !9
  switch i8 %354, label %355 [
    i8 105, label %360
    i8 73, label %360
  ]

355:                                              ; preds = %352
  %cond = icmp eq i8 %351, 101
  br i1 %cond, label %360, label %.thread

356:                                              ; preds = %.critedge
  %357 = add i8 %351, -48
  %or.cond = icmp ult i8 %357, 10
  br i1 %or.cond, label %358, label %.thread

358:                                              ; preds = %356
  %359 = tail call double @atof(ptr noundef %.0305) #6
  br label %360

360:                                              ; preds = %355, %.critedge, %.critedge, %352, %352, %358
  %.0307 = phi double [ %359, %358 ], [ 0x400921FB54442D18, %352 ], [ 0x400921FB54442D18, %352 ], [ 0x4005BF0A8B145769, %355 ], [ 0x4005BF0A8B145769, %.critedge ], [ 0x4005BF0A8B145769, %.critedge ]
  %361 = fsub double 0.000000e+00, %.0307
  %362 = select i1 %.not321, double %361, double %.0307
  br label %.thread

.thread:                                          ; preds = %265, %355, %.preheader, %275, %285, %295, %305, %315, %325, %335, %345, %339, %356, %261, %254, %250, %244, %237, %233, %216, %199, %160, %154, %149, %143, %138, %132, %127, %121, %115, %109, %104, %98, %93, %87, %82, %76, %71, %65, %60, %54, %49, %43, %38, %32, %360, %220, %203, %188, %177, %166, %21, %11
  %.1 = phi double [ %17, %11 ], [ %28, %21 ], [ %173, %166 ], [ %184, %177 ], [ %195, %188 ], [ %212, %203 ], [ %229, %220 ], [ %362, %360 ], [ %39, %38 ], [ 0x7FF8000000000000, %32 ], [ %50, %49 ], [ 0x7FF8000000000000, %43 ], [ %61, %60 ], [ 0x7FF8000000000000, %54 ], [ %72, %71 ], [ 0x7FF8000000000000, %65 ], [ %83, %82 ], [ 0x7FF8000000000000, %76 ], [ %94, %93 ], [ 0x7FF8000000000000, %87 ], [ %105, %104 ], [ 0x7FF8000000000000, %98 ], [ %117, %115 ], [ 0x7FF8000000000000, %109 ], [ %128, %127 ], [ 0x7FF8000000000000, %121 ], [ %139, %138 ], [ 0x7FF8000000000000, %132 ], [ %150, %149 ], [ 0x7FF8000000000000, %143 ], [ %162, %160 ], [ 0x7FF8000000000000, %154 ], [ 0x7FF8000000000000, %199 ], [ 0x7FF8000000000000, %216 ], [ 0x7FF8000000000000, %233 ], [ %245, %244 ], [ 0x7FF8000000000000, %237 ], [ 0x7FF8000000000000, %250 ], [ %264, %261 ], [ 0x7FF8000000000000, %254 ], [ 0x7FF8000000000000, %356 ], [ 0x7FF8000000000000, %339 ], [ %348, %345 ], [ %338, %335 ], [ %328, %325 ], [ %318, %315 ], [ %308, %305 ], [ %298, %295 ], [ %288, %285 ], [ %278, %275 ], [ 0x7FF8000000000000, %.preheader ], [ 0x7FF8000000000000, %355 ], [ 0x7FF8000000000000, %265 ]
  ret double %.1
}

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

; Function Attrs: mustprogress nofree nounwind willreturn memory(read)
declare i32 @strcasecmp(ptr nocapture noundef, ptr nocapture noundef) local_unnamed_addr #2

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

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

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

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

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

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

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

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

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

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

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

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

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

; Function Attrs: inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable
declare double @atof(ptr nocapture noundef nonnull) local_unnamed_addr #4

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

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 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 nofree nounwind willreturn memory(read) "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 = { inlinehint mustprogress nofree nounwind willreturn memory(read) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #5 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #6 = { nounwind willreturn memory(read) }
attributes #7 = { 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 = !{!7, !7, i64 0}
!10 = !{!11, !11, i64 0}
!11 = !{!"int", !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = distinct !{!14, !13}


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