; LLVM IR from mkmarek/forex.analytics :: lib/ta-lib/src/ta_func (ta_SAREXT)

; 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"

; 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 speculatable willreturn memory(none)
declare double @llvm.fabs.f64(double) #1

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @TA_S_SAREXT(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, double noundef %4, double noundef %5, double noundef %6, double noundef %7, double noundef %8, double noundef %9, double noundef %10, double noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14) #2 {
  %16 = alloca i32, align 4
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca ptr, align 8
  %20 = alloca ptr, align 8
  %21 = alloca double, align 8
  %22 = alloca double, align 8
  %23 = alloca double, align 8
  %24 = alloca double, align 8
  %25 = alloca double, align 8
  %26 = alloca double, align 8
  %27 = alloca double, align 8
  %28 = alloca double, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca i32, align 4
  %33 = alloca i32, align 4
  %34 = alloca i32, align 4
  %35 = alloca i32, align 4
  %36 = alloca i32, align 4
  %37 = alloca double, align 8
  %38 = alloca double, align 8
  %39 = alloca double, align 8
  %40 = alloca double, align 8
  %41 = alloca double, align 8
  %42 = alloca double, align 8
  %43 = alloca double, align 8
  %44 = alloca double, align 8
  %45 = alloca [1 x double], align 8
  %46 = alloca i32, align 4
  store i32 %0, ptr %17, align 4, !tbaa !5
  store i32 %1, ptr %18, align 4, !tbaa !5
  store ptr %2, ptr %19, align 8, !tbaa !9
  store ptr %3, ptr %20, align 8, !tbaa !9
  store double %4, ptr %21, align 8, !tbaa !11
  store double %5, ptr %22, align 8, !tbaa !11
  store double %6, ptr %23, align 8, !tbaa !11
  store double %7, ptr %24, align 8, !tbaa !11
  store double %8, ptr %25, align 8, !tbaa !11
  store double %9, ptr %26, align 8, !tbaa !11
  store double %10, ptr %27, align 8, !tbaa !11
  store double %11, ptr %28, align 8, !tbaa !11
  store ptr %12, ptr %29, align 8, !tbaa !9
  store ptr %13, ptr %30, align 8, !tbaa !9
  store ptr %14, ptr %31, align 8, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.start.p0(i64 8, ptr %45) #4
  %47 = load i32, ptr %17, align 4, !tbaa !5
  %48 = icmp slt i32 %47, 0
  br i1 %48, label %49, label %50

49:                                               ; preds = %15
  store i32 12, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

50:                                               ; preds = %15
  %51 = load i32, ptr %18, align 4, !tbaa !5
  %52 = icmp slt i32 %51, 0
  br i1 %52, label %57, label %53

53:                                               ; preds = %50
  %54 = load i32, ptr %18, align 4, !tbaa !5
  %55 = load i32, ptr %17, align 4, !tbaa !5
  %56 = icmp slt i32 %54, %55
  br i1 %56, label %57, label %58

57:                                               ; preds = %53, %50
  store i32 13, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

58:                                               ; preds = %53
  %59 = load ptr, ptr %19, align 8, !tbaa !9
  %60 = icmp ne ptr %59, null
  br i1 %60, label %61, label %64

61:                                               ; preds = %58
  %62 = load ptr, ptr %20, align 8, !tbaa !9
  %63 = icmp ne ptr %62, null
  br i1 %63, label %65, label %64

64:                                               ; preds = %61, %58
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

65:                                               ; preds = %61
  %66 = load double, ptr %21, align 8, !tbaa !11
  %67 = fcmp oeq double %66, -4.000000e+37
  br i1 %67, label %68, label %69

68:                                               ; preds = %65
  store double 0.000000e+00, ptr %21, align 8, !tbaa !11
  br label %77

69:                                               ; preds = %65
  %70 = load double, ptr %21, align 8, !tbaa !11
  %71 = fcmp olt double %70, -3.000000e+37
  br i1 %71, label %75, label %72

72:                                               ; preds = %69
  %73 = load double, ptr %21, align 8, !tbaa !11
  %74 = fcmp ogt double %73, 3.000000e+37
  br i1 %74, label %75, label %76

75:                                               ; preds = %72, %69
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

76:                                               ; preds = %72
  br label %77

77:                                               ; preds = %76, %68
  %78 = load double, ptr %22, align 8, !tbaa !11
  %79 = fcmp oeq double %78, -4.000000e+37
  br i1 %79, label %80, label %81

80:                                               ; preds = %77
  store double 0.000000e+00, ptr %22, align 8, !tbaa !11
  br label %89

81:                                               ; preds = %77
  %82 = load double, ptr %22, align 8, !tbaa !11
  %83 = fcmp olt double %82, 0.000000e+00
  br i1 %83, label %87, label %84

84:                                               ; preds = %81
  %85 = load double, ptr %22, align 8, !tbaa !11
  %86 = fcmp ogt double %85, 3.000000e+37
  br i1 %86, label %87, label %88

87:                                               ; preds = %84, %81
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

88:                                               ; preds = %84
  br label %89

89:                                               ; preds = %88, %80
  %90 = load double, ptr %23, align 8, !tbaa !11
  %91 = fcmp oeq double %90, -4.000000e+37
  br i1 %91, label %92, label %93

92:                                               ; preds = %89
  store double 2.000000e-02, ptr %23, align 8, !tbaa !11
  br label %101

93:                                               ; preds = %89
  %94 = load double, ptr %23, align 8, !tbaa !11
  %95 = fcmp olt double %94, 0.000000e+00
  br i1 %95, label %99, label %96

96:                                               ; preds = %93
  %97 = load double, ptr %23, align 8, !tbaa !11
  %98 = fcmp ogt double %97, 3.000000e+37
  br i1 %98, label %99, label %100

99:                                               ; preds = %96, %93
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

100:                                              ; preds = %96
  br label %101

101:                                              ; preds = %100, %92
  %102 = load double, ptr %24, align 8, !tbaa !11
  %103 = fcmp oeq double %102, -4.000000e+37
  br i1 %103, label %104, label %105

104:                                              ; preds = %101
  store double 2.000000e-02, ptr %24, align 8, !tbaa !11
  br label %113

105:                                              ; preds = %101
  %106 = load double, ptr %24, align 8, !tbaa !11
  %107 = fcmp olt double %106, 0.000000e+00
  br i1 %107, label %111, label %108

108:                                              ; preds = %105
  %109 = load double, ptr %24, align 8, !tbaa !11
  %110 = fcmp ogt double %109, 3.000000e+37
  br i1 %110, label %111, label %112

111:                                              ; preds = %108, %105
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

112:                                              ; preds = %108
  br label %113

113:                                              ; preds = %112, %104
  %114 = load double, ptr %25, align 8, !tbaa !11
  %115 = fcmp oeq double %114, -4.000000e+37
  br i1 %115, label %116, label %117

116:                                              ; preds = %113
  store double 2.000000e-01, ptr %25, align 8, !tbaa !11
  br label %125

117:                                              ; preds = %113
  %118 = load double, ptr %25, align 8, !tbaa !11
  %119 = fcmp olt double %118, 0.000000e+00
  br i1 %119, label %123, label %120

120:                                              ; preds = %117
  %121 = load double, ptr %25, align 8, !tbaa !11
  %122 = fcmp ogt double %121, 3.000000e+37
  br i1 %122, label %123, label %124

123:                                              ; preds = %120, %117
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

124:                                              ; preds = %120
  br label %125

125:                                              ; preds = %124, %116
  %126 = load double, ptr %26, align 8, !tbaa !11
  %127 = fcmp oeq double %126, -4.000000e+37
  br i1 %127, label %128, label %129

128:                                              ; preds = %125
  store double 2.000000e-02, ptr %26, align 8, !tbaa !11
  br label %137

129:                                              ; preds = %125
  %130 = load double, ptr %26, align 8, !tbaa !11
  %131 = fcmp olt double %130, 0.000000e+00
  br i1 %131, label %135, label %132

132:                                              ; preds = %129
  %133 = load double, ptr %26, align 8, !tbaa !11
  %134 = fcmp ogt double %133, 3.000000e+37
  br i1 %134, label %135, label %136

135:                                              ; preds = %132, %129
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

136:                                              ; preds = %132
  br label %137

137:                                              ; preds = %136, %128
  %138 = load double, ptr %27, align 8, !tbaa !11
  %139 = fcmp oeq double %138, -4.000000e+37
  br i1 %139, label %140, label %141

140:                                              ; preds = %137
  store double 2.000000e-02, ptr %27, align 8, !tbaa !11
  br label %149

141:                                              ; preds = %137
  %142 = load double, ptr %27, align 8, !tbaa !11
  %143 = fcmp olt double %142, 0.000000e+00
  br i1 %143, label %147, label %144

144:                                              ; preds = %141
  %145 = load double, ptr %27, align 8, !tbaa !11
  %146 = fcmp ogt double %145, 3.000000e+37
  br i1 %146, label %147, label %148

147:                                              ; preds = %144, %141
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

148:                                              ; preds = %144
  br label %149

149:                                              ; preds = %148, %140
  %150 = load double, ptr %28, align 8, !tbaa !11
  %151 = fcmp oeq double %150, -4.000000e+37
  br i1 %151, label %152, label %153

152:                                              ; preds = %149
  store double 2.000000e-01, ptr %28, align 8, !tbaa !11
  br label %161

153:                                              ; preds = %149
  %154 = load double, ptr %28, align 8, !tbaa !11
  %155 = fcmp olt double %154, 0.000000e+00
  br i1 %155, label %159, label %156

156:                                              ; preds = %153
  %157 = load double, ptr %28, align 8, !tbaa !11
  %158 = fcmp ogt double %157, 3.000000e+37
  br i1 %158, label %159, label %160

159:                                              ; preds = %156, %153
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

160:                                              ; preds = %156
  br label %161

161:                                              ; preds = %160, %152
  %162 = load ptr, ptr %31, align 8, !tbaa !9
  %163 = icmp ne ptr %162, null
  br i1 %163, label %165, label %164

164:                                              ; preds = %161
  store i32 2, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

165:                                              ; preds = %161
  %166 = load i32, ptr %17, align 4, !tbaa !5
  %167 = icmp slt i32 %166, 1
  br i1 %167, label %168, label %169

168:                                              ; preds = %165
  store i32 1, ptr %17, align 4, !tbaa !5
  br label %169

169:                                              ; preds = %168, %165
  %170 = load i32, ptr %17, align 4, !tbaa !5
  %171 = load i32, ptr %18, align 4, !tbaa !5
  %172 = icmp sgt i32 %170, %171
  br i1 %172, label %173, label %176

173:                                              ; preds = %169
  %174 = load ptr, ptr %29, align 8, !tbaa !9
  store i32 0, ptr %174, align 4, !tbaa !5
  %175 = load ptr, ptr %30, align 8, !tbaa !9
  store i32 0, ptr %175, align 4, !tbaa !5
  store i32 0, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

176:                                              ; preds = %169
  %177 = load double, ptr %23, align 8, !tbaa !11
  store double %177, ptr %41, align 8, !tbaa !11
  %178 = load double, ptr %26, align 8, !tbaa !11
  store double %178, ptr %42, align 8, !tbaa !11
  %179 = load double, ptr %41, align 8, !tbaa !11
  %180 = load double, ptr %25, align 8, !tbaa !11
  %181 = fcmp ogt double %179, %180
  br i1 %181, label %182, label %184

182:                                              ; preds = %176
  %183 = load double, ptr %25, align 8, !tbaa !11
  store double %183, ptr %23, align 8, !tbaa !11
  store double %183, ptr %41, align 8, !tbaa !11
  br label %184

184:                                              ; preds = %182, %176
  %185 = load double, ptr %24, align 8, !tbaa !11
  %186 = load double, ptr %25, align 8, !tbaa !11
  %187 = fcmp ogt double %185, %186
  br i1 %187, label %188, label %190

188:                                              ; preds = %184
  %189 = load double, ptr %25, align 8, !tbaa !11
  store double %189, ptr %24, align 8, !tbaa !11
  br label %190

190:                                              ; preds = %188, %184
  %191 = load double, ptr %42, align 8, !tbaa !11
  %192 = load double, ptr %28, align 8, !tbaa !11
  %193 = fcmp ogt double %191, %192
  br i1 %193, label %194, label %196

194:                                              ; preds = %190
  %195 = load double, ptr %28, align 8, !tbaa !11
  store double %195, ptr %26, align 8, !tbaa !11
  store double %195, ptr %42, align 8, !tbaa !11
  br label %196

196:                                              ; preds = %194, %190
  %197 = load double, ptr %27, align 8, !tbaa !11
  %198 = load double, ptr %28, align 8, !tbaa !11
  %199 = fcmp ogt double %197, %198
  br i1 %199, label %200, label %202

200:                                              ; preds = %196
  %201 = load double, ptr %28, align 8, !tbaa !11
  store double %201, ptr %27, align 8, !tbaa !11
  br label %202

202:                                              ; preds = %200, %196
  %203 = load double, ptr %21, align 8, !tbaa !11
  %204 = fcmp oeq double %203, 0.000000e+00
  br i1 %204, label %205, label %225

205:                                              ; preds = %202
  %206 = load i32, ptr %17, align 4, !tbaa !5
  %207 = load i32, ptr %17, align 4, !tbaa !5
  %208 = load ptr, ptr %19, align 8, !tbaa !9
  %209 = load ptr, ptr %20, align 8, !tbaa !9
  %210 = getelementptr inbounds [1 x double], ptr %45, i64 0, i64 0
  %211 = call i32 @TA_S_MINUS_DM(i32 noundef %206, i32 noundef %207, ptr noundef %208, ptr noundef %209, i32 noundef 1, ptr noundef %36, ptr noundef %36, ptr noundef %210)
  store i32 %211, ptr %32, align 4, !tbaa !5
  %212 = getelementptr inbounds [1 x double], ptr %45, i64 0, i64 0
  %213 = load double, ptr %212, align 8, !tbaa !11
  %214 = fcmp ogt double %213, 0.000000e+00
  br i1 %214, label %215, label %216

215:                                              ; preds = %205
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %217

216:                                              ; preds = %205
  store i32 1, ptr %33, align 4, !tbaa !5
  br label %217

217:                                              ; preds = %216, %215
  %218 = load i32, ptr %32, align 4, !tbaa !5
  %219 = icmp ne i32 %218, 0
  br i1 %219, label %220, label %224

220:                                              ; preds = %217
  %221 = load ptr, ptr %29, align 8, !tbaa !9
  store i32 0, ptr %221, align 4, !tbaa !5
  %222 = load ptr, ptr %30, align 8, !tbaa !9
  store i32 0, ptr %222, align 4, !tbaa !5
  %223 = load i32, ptr %32, align 4, !tbaa !5
  store i32 %223, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

224:                                              ; preds = %217
  br label %231

225:                                              ; preds = %202
  %226 = load double, ptr %21, align 8, !tbaa !11
  %227 = fcmp ogt double %226, 0.000000e+00
  br i1 %227, label %228, label %229

228:                                              ; preds = %225
  store i32 1, ptr %33, align 4, !tbaa !5
  br label %230

229:                                              ; preds = %225
  store i32 0, ptr %33, align 4, !tbaa !5
  br label %230

230:                                              ; preds = %229, %228
  br label %231

231:                                              ; preds = %230, %224
  %232 = load i32, ptr %17, align 4, !tbaa !5
  %233 = load ptr, ptr %29, align 8, !tbaa !9
  store i32 %232, ptr %233, align 4, !tbaa !5
  store i32 0, ptr %35, align 4, !tbaa !5
  %234 = load i32, ptr %17, align 4, !tbaa !5
  store i32 %234, ptr %34, align 4, !tbaa !5
  %235 = load ptr, ptr %19, align 8, !tbaa !9
  %236 = load i32, ptr %34, align 4, !tbaa !5
  %237 = sub nsw i32 %236, 1
  %238 = sext i32 %237 to i64
  %239 = getelementptr inbounds float, ptr %235, i64 %238
  %240 = load float, ptr %239, align 4, !tbaa !13
  %241 = fpext float %240 to double
  store double %241, ptr %37, align 8, !tbaa !11
  %242 = load ptr, ptr %20, align 8, !tbaa !9
  %243 = load i32, ptr %34, align 4, !tbaa !5
  %244 = sub nsw i32 %243, 1
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds float, ptr %242, i64 %245
  %247 = load float, ptr %246, align 4, !tbaa !13
  %248 = fpext float %247 to double
  store double %248, ptr %38, align 8, !tbaa !11
  %249 = load double, ptr %21, align 8, !tbaa !11
  %250 = fcmp oeq double %249, 0.000000e+00
  br i1 %250, label %251, label %271

251:                                              ; preds = %231
  %252 = load i32, ptr %33, align 4, !tbaa !5
  %253 = icmp eq i32 %252, 1
  br i1 %253, label %254, label %262

254:                                              ; preds = %251
  %255 = load ptr, ptr %19, align 8, !tbaa !9
  %256 = load i32, ptr %34, align 4, !tbaa !5
  %257 = sext i32 %256 to i64
  %258 = getelementptr inbounds float, ptr %255, i64 %257
  %259 = load float, ptr %258, align 4, !tbaa !13
  %260 = fpext float %259 to double
  store double %260, ptr %43, align 8, !tbaa !11
  %261 = load double, ptr %38, align 8, !tbaa !11
  store double %261, ptr %44, align 8, !tbaa !11
  br label %270

262:                                              ; preds = %251
  %263 = load ptr, ptr %20, align 8, !tbaa !9
  %264 = load i32, ptr %34, align 4, !tbaa !5
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds float, ptr %263, i64 %265
  %267 = load float, ptr %266, align 4, !tbaa !13
  %268 = fpext float %267 to double
  store double %268, ptr %43, align 8, !tbaa !11
  %269 = load double, ptr %37, align 8, !tbaa !11
  store double %269, ptr %44, align 8, !tbaa !11
  br label %270

270:                                              ; preds = %262, %254
  br label %292

271:                                              ; preds = %231
  %272 = load double, ptr %21, align 8, !tbaa !11
  %273 = fcmp ogt double %272, 0.000000e+00
  br i1 %273, label %274, label %282

274:                                              ; preds = %271
  %275 = load ptr, ptr %19, align 8, !tbaa !9
  %276 = load i32, ptr %34, align 4, !tbaa !5
  %277 = sext i32 %276 to i64
  %278 = getelementptr inbounds float, ptr %275, i64 %277
  %279 = load float, ptr %278, align 4, !tbaa !13
  %280 = fpext float %279 to double
  store double %280, ptr %43, align 8, !tbaa !11
  %281 = load double, ptr %21, align 8, !tbaa !11
  store double %281, ptr %44, align 8, !tbaa !11
  br label %291

282:                                              ; preds = %271
  %283 = load ptr, ptr %20, align 8, !tbaa !9
  %284 = load i32, ptr %34, align 4, !tbaa !5
  %285 = sext i32 %284 to i64
  %286 = getelementptr inbounds float, ptr %283, i64 %285
  %287 = load float, ptr %286, align 4, !tbaa !13
  %288 = fpext float %287 to double
  store double %288, ptr %43, align 8, !tbaa !11
  %289 = load double, ptr %21, align 8, !tbaa !11
  %290 = call double @llvm.fabs.f64(double %289)
  store double %290, ptr %44, align 8, !tbaa !11
  br label %291

291:                                              ; preds = %282, %274
  br label %292

292:                                              ; preds = %291, %270
  %293 = load ptr, ptr %20, align 8, !tbaa !9
  %294 = load i32, ptr %34, align 4, !tbaa !5
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds float, ptr %293, i64 %295
  %297 = load float, ptr %296, align 4, !tbaa !13
  %298 = fpext float %297 to double
  store double %298, ptr %38, align 8, !tbaa !11
  %299 = load ptr, ptr %19, align 8, !tbaa !9
  %300 = load i32, ptr %34, align 4, !tbaa !5
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds float, ptr %299, i64 %301
  %303 = load float, ptr %302, align 4, !tbaa !13
  %304 = fpext float %303 to double
  store double %304, ptr %37, align 8, !tbaa !11
  br label %305

305:                                              ; preds = %517, %292
  %306 = load i32, ptr %34, align 4, !tbaa !5
  %307 = load i32, ptr %18, align 4, !tbaa !5
  %308 = icmp sle i32 %306, %307
  br i1 %308, label %309, label %518

309:                                              ; preds = %305
  %310 = load double, ptr %38, align 8, !tbaa !11
  store double %310, ptr %40, align 8, !tbaa !11
  %311 = load double, ptr %37, align 8, !tbaa !11
  store double %311, ptr %39, align 8, !tbaa !11
  %312 = load ptr, ptr %20, align 8, !tbaa !9
  %313 = load i32, ptr %34, align 4, !tbaa !5
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds float, ptr %312, i64 %314
  %316 = load float, ptr %315, align 4, !tbaa !13
  %317 = fpext float %316 to double
  store double %317, ptr %38, align 8, !tbaa !11
  %318 = load ptr, ptr %19, align 8, !tbaa !9
  %319 = load i32, ptr %34, align 4, !tbaa !5
  %320 = sext i32 %319 to i64
  %321 = getelementptr inbounds float, ptr %318, i64 %320
  %322 = load float, ptr %321, align 4, !tbaa !13
  %323 = fpext float %322 to double
  store double %323, ptr %37, align 8, !tbaa !11
  %324 = load i32, ptr %34, align 4, !tbaa !5
  %325 = add nsw i32 %324, 1
  store i32 %325, ptr %34, align 4, !tbaa !5
  %326 = load i32, ptr %33, align 4, !tbaa !5
  %327 = icmp eq i32 %326, 1
  br i1 %327, label %328, label %422

328:                                              ; preds = %309
  %329 = load double, ptr %38, align 8, !tbaa !11
  %330 = load double, ptr %44, align 8, !tbaa !11
  %331 = fcmp ole double %329, %330
  br i1 %331, label %332, label %381

332:                                              ; preds = %328
  store i32 0, ptr %33, align 4, !tbaa !5
  %333 = load double, ptr %43, align 8, !tbaa !11
  store double %333, ptr %44, align 8, !tbaa !11
  %334 = load double, ptr %44, align 8, !tbaa !11
  %335 = load double, ptr %39, align 8, !tbaa !11
  %336 = fcmp olt double %334, %335
  br i1 %336, label %337, label %339

337:                                              ; preds = %332
  %338 = load double, ptr %39, align 8, !tbaa !11
  store double %338, ptr %44, align 8, !tbaa !11
  br label %339

339:                                              ; preds = %337, %332
  %340 = load double, ptr %44, align 8, !tbaa !11
  %341 = load double, ptr %37, align 8, !tbaa !11
  %342 = fcmp olt double %340, %341
  br i1 %342, label %343, label %345

343:                                              ; preds = %339
  %344 = load double, ptr %37, align 8, !tbaa !11
  store double %344, ptr %44, align 8, !tbaa !11
  br label %345

345:                                              ; preds = %343, %339
  %346 = load double, ptr %22, align 8, !tbaa !11
  %347 = fcmp une double %346, 0.000000e+00
  br i1 %347, label %348, label %353

348:                                              ; preds = %345
  %349 = load double, ptr %44, align 8, !tbaa !11
  %350 = load double, ptr %22, align 8, !tbaa !11
  %351 = load double, ptr %44, align 8, !tbaa !11
  %352 = call double @llvm.fmuladd.f64(double %349, double %350, double %351)
  store double %352, ptr %44, align 8, !tbaa !11
  br label %353

353:                                              ; preds = %348, %345
  %354 = load double, ptr %44, align 8, !tbaa !11
  %355 = fneg double %354
  %356 = load ptr, ptr %31, align 8, !tbaa !9
  %357 = load i32, ptr %35, align 4, !tbaa !5
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %35, align 4, !tbaa !5
  %359 = sext i32 %357 to i64
  %360 = getelementptr inbounds double, ptr %356, i64 %359
  store double %355, ptr %360, align 8, !tbaa !11
  %361 = load double, ptr %26, align 8, !tbaa !11
  store double %361, ptr %42, align 8, !tbaa !11
  %362 = load double, ptr %38, align 8, !tbaa !11
  store double %362, ptr %43, align 8, !tbaa !11
  %363 = load double, ptr %44, align 8, !tbaa !11
  %364 = load double, ptr %42, align 8, !tbaa !11
  %365 = load double, ptr %43, align 8, !tbaa !11
  %366 = load double, ptr %44, align 8, !tbaa !11
  %367 = fsub double %365, %366
  %368 = call double @llvm.fmuladd.f64(double %364, double %367, double %363)
  store double %368, ptr %44, align 8, !tbaa !11
  %369 = load double, ptr %44, align 8, !tbaa !11
  %370 = load double, ptr %39, align 8, !tbaa !11
  %371 = fcmp olt double %369, %370
  br i1 %371, label %372, label %374

372:                                              ; preds = %353
  %373 = load double, ptr %39, align 8, !tbaa !11
  store double %373, ptr %44, align 8, !tbaa !11
  br label %374

374:                                              ; preds = %372, %353
  %375 = load double, ptr %44, align 8, !tbaa !11
  %376 = load double, ptr %37, align 8, !tbaa !11
  %377 = fcmp olt double %375, %376
  br i1 %377, label %378, label %380

378:                                              ; preds = %374
  %379 = load double, ptr %37, align 8, !tbaa !11
  store double %379, ptr %44, align 8, !tbaa !11
  br label %380

380:                                              ; preds = %378, %374
  br label %421

381:                                              ; preds = %328
  %382 = load double, ptr %44, align 8, !tbaa !11
  %383 = load ptr, ptr %31, align 8, !tbaa !9
  %384 = load i32, ptr %35, align 4, !tbaa !5
  %385 = add nsw i32 %384, 1
  store i32 %385, ptr %35, align 4, !tbaa !5
  %386 = sext i32 %384 to i64
  %387 = getelementptr inbounds double, ptr %383, i64 %386
  store double %382, ptr %387, align 8, !tbaa !11
  %388 = load double, ptr %37, align 8, !tbaa !11
  %389 = load double, ptr %43, align 8, !tbaa !11
  %390 = fcmp ogt double %388, %389
  br i1 %390, label %391, label %402

391:                                              ; preds = %381
  %392 = load double, ptr %37, align 8, !tbaa !11
  store double %392, ptr %43, align 8, !tbaa !11
  %393 = load double, ptr %24, align 8, !tbaa !11
  %394 = load double, ptr %41, align 8, !tbaa !11
  %395 = fadd double %394, %393
  store double %395, ptr %41, align 8, !tbaa !11
  %396 = load double, ptr %41, align 8, !tbaa !11
  %397 = load double, ptr %25, align 8, !tbaa !11
  %398 = fcmp ogt double %396, %397
  br i1 %398, label %399, label %401

399:                                              ; preds = %391
  %400 = load double, ptr %25, align 8, !tbaa !11
  store double %400, ptr %41, align 8, !tbaa !11
  br label %401

401:                                              ; preds = %399, %391
  br label %402

402:                                              ; preds = %401, %381
  %403 = load double, ptr %44, align 8, !tbaa !11
  %404 = load double, ptr %41, align 8, !tbaa !11
  %405 = load double, ptr %43, align 8, !tbaa !11
  %406 = load double, ptr %44, align 8, !tbaa !11
  %407 = fsub double %405, %406
  %408 = call double @llvm.fmuladd.f64(double %404, double %407, double %403)
  store double %408, ptr %44, align 8, !tbaa !11
  %409 = load double, ptr %44, align 8, !tbaa !11
  %410 = load double, ptr %40, align 8, !tbaa !11
  %411 = fcmp ogt double %409, %410
  br i1 %411, label %412, label %414

412:                                              ; preds = %402
  %413 = load double, ptr %40, align 8, !tbaa !11
  store double %413, ptr %44, align 8, !tbaa !11
  br label %414

414:                                              ; preds = %412, %402
  %415 = load double, ptr %44, align 8, !tbaa !11
  %416 = load double, ptr %38, align 8, !tbaa !11
  %417 = fcmp ogt double %415, %416
  br i1 %417, label %418, label %420

418:                                              ; preds = %414
  %419 = load double, ptr %38, align 8, !tbaa !11
  store double %419, ptr %44, align 8, !tbaa !11
  br label %420

420:                                              ; preds = %418, %414
  br label %421

421:                                              ; preds = %420, %380
  br label %517

422:                                              ; preds = %309
  %423 = load double, ptr %37, align 8, !tbaa !11
  %424 = load double, ptr %44, align 8, !tbaa !11
  %425 = fcmp oge double %423, %424
  br i1 %425, label %426, label %475

426:                                              ; preds = %422
  store i32 1, ptr %33, align 4, !tbaa !5
  %427 = load double, ptr %43, align 8, !tbaa !11
  store double %427, ptr %44, align 8, !tbaa !11
  %428 = load double, ptr %44, align 8, !tbaa !11
  %429 = load double, ptr %40, align 8, !tbaa !11
  %430 = fcmp ogt double %428, %429
  br i1 %430, label %431, label %433

431:                                              ; preds = %426
  %432 = load double, ptr %40, align 8, !tbaa !11
  store double %432, ptr %44, align 8, !tbaa !11
  br label %433

433:                                              ; preds = %431, %426
  %434 = load double, ptr %44, align 8, !tbaa !11
  %435 = load double, ptr %38, align 8, !tbaa !11
  %436 = fcmp ogt double %434, %435
  br i1 %436, label %437, label %439

437:                                              ; preds = %433
  %438 = load double, ptr %38, align 8, !tbaa !11
  store double %438, ptr %44, align 8, !tbaa !11
  br label %439

439:                                              ; preds = %437, %433
  %440 = load double, ptr %22, align 8, !tbaa !11
  %441 = fcmp une double %440, 0.000000e+00
  br i1 %441, label %442, label %448

442:                                              ; preds = %439
  %443 = load double, ptr %44, align 8, !tbaa !11
  %444 = load double, ptr %22, align 8, !tbaa !11
  %445 = load double, ptr %44, align 8, !tbaa !11
  %446 = fneg double %443
  %447 = call double @llvm.fmuladd.f64(double %446, double %444, double %445)
  store double %447, ptr %44, align 8, !tbaa !11
  br label %448

448:                                              ; preds = %442, %439
  %449 = load double, ptr %44, align 8, !tbaa !11
  %450 = load ptr, ptr %31, align 8, !tbaa !9
  %451 = load i32, ptr %35, align 4, !tbaa !5
  %452 = add nsw i32 %451, 1
  store i32 %452, ptr %35, align 4, !tbaa !5
  %453 = sext i32 %451 to i64
  %454 = getelementptr inbounds double, ptr %450, i64 %453
  store double %449, ptr %454, align 8, !tbaa !11
  %455 = load double, ptr %23, align 8, !tbaa !11
  store double %455, ptr %41, align 8, !tbaa !11
  %456 = load double, ptr %37, align 8, !tbaa !11
  store double %456, ptr %43, align 8, !tbaa !11
  %457 = load double, ptr %44, align 8, !tbaa !11
  %458 = load double, ptr %41, align 8, !tbaa !11
  %459 = load double, ptr %43, align 8, !tbaa !11
  %460 = load double, ptr %44, align 8, !tbaa !11
  %461 = fsub double %459, %460
  %462 = call double @llvm.fmuladd.f64(double %458, double %461, double %457)
  store double %462, ptr %44, align 8, !tbaa !11
  %463 = load double, ptr %44, align 8, !tbaa !11
  %464 = load double, ptr %40, align 8, !tbaa !11
  %465 = fcmp ogt double %463, %464
  br i1 %465, label %466, label %468

466:                                              ; preds = %448
  %467 = load double, ptr %40, align 8, !tbaa !11
  store double %467, ptr %44, align 8, !tbaa !11
  br label %468

468:                                              ; preds = %466, %448
  %469 = load double, ptr %44, align 8, !tbaa !11
  %470 = load double, ptr %38, align 8, !tbaa !11
  %471 = fcmp ogt double %469, %470
  br i1 %471, label %472, label %474

472:                                              ; preds = %468
  %473 = load double, ptr %38, align 8, !tbaa !11
  store double %473, ptr %44, align 8, !tbaa !11
  br label %474

474:                                              ; preds = %472, %468
  br label %516

475:                                              ; preds = %422
  %476 = load double, ptr %44, align 8, !tbaa !11
  %477 = fneg double %476
  %478 = load ptr, ptr %31, align 8, !tbaa !9
  %479 = load i32, ptr %35, align 4, !tbaa !5
  %480 = add nsw i32 %479, 1
  store i32 %480, ptr %35, align 4, !tbaa !5
  %481 = sext i32 %479 to i64
  %482 = getelementptr inbounds double, ptr %478, i64 %481
  store double %477, ptr %482, align 8, !tbaa !11
  %483 = load double, ptr %38, align 8, !tbaa !11
  %484 = load double, ptr %43, align 8, !tbaa !11
  %485 = fcmp olt double %483, %484
  br i1 %485, label %486, label %497

486:                                              ; preds = %475
  %487 = load double, ptr %38, align 8, !tbaa !11
  store double %487, ptr %43, align 8, !tbaa !11
  %488 = load double, ptr %27, align 8, !tbaa !11
  %489 = load double, ptr %42, align 8, !tbaa !11
  %490 = fadd double %489, %488
  store double %490, ptr %42, align 8, !tbaa !11
  %491 = load double, ptr %42, align 8, !tbaa !11
  %492 = load double, ptr %28, align 8, !tbaa !11
  %493 = fcmp ogt double %491, %492
  br i1 %493, label %494, label %496

494:                                              ; preds = %486
  %495 = load double, ptr %28, align 8, !tbaa !11
  store double %495, ptr %42, align 8, !tbaa !11
  br label %496

496:                                              ; preds = %494, %486
  br label %497

497:                                              ; preds = %496, %475
  %498 = load double, ptr %44, align 8, !tbaa !11
  %499 = load double, ptr %42, align 8, !tbaa !11
  %500 = load double, ptr %43, align 8, !tbaa !11
  %501 = load double, ptr %44, align 8, !tbaa !11
  %502 = fsub double %500, %501
  %503 = call double @llvm.fmuladd.f64(double %499, double %502, double %498)
  store double %503, ptr %44, align 8, !tbaa !11
  %504 = load double, ptr %44, align 8, !tbaa !11
  %505 = load double, ptr %39, align 8, !tbaa !11
  %506 = fcmp olt double %504, %505
  br i1 %506, label %507, label %509

507:                                              ; preds = %497
  %508 = load double, ptr %39, align 8, !tbaa !11
  store double %508, ptr %44, align 8, !tbaa !11
  br label %509

509:                                              ; preds = %507, %497
  %510 = load double, ptr %44, align 8, !tbaa !11
  %511 = load double, ptr %37, align 8, !tbaa !11
  %512 = fcmp olt double %510, %511
  br i1 %512, label %513, label %515

513:                                              ; preds = %509
  %514 = load double, ptr %37, align 8, !tbaa !11
  store double %514, ptr %44, align 8, !tbaa !11
  br label %515

515:                                              ; preds = %513, %509
  br label %516

516:                                              ; preds = %515, %474
  br label %517

517:                                              ; preds = %516, %421
  br label %305, !llvm.loop !15

518:                                              ; preds = %305
  %519 = load i32, ptr %35, align 4, !tbaa !5
  %520 = load ptr, ptr %30, align 8, !tbaa !9
  store i32 %519, ptr %520, align 4, !tbaa !5
  store i32 0, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %521

521:                                              ; preds = %518, %220, %173, %164, %159, %147, %135, %123, %111, %99, %87, %75, %64, %57, %49
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %41) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %40) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %39) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #4
  %522 = load i32, ptr %16, align 4
  ret i32 %522
}

declare i32 @TA_S_MINUS_DM(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #3

attributes #0 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #2 = { nounwind uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #3 = { "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cmov,+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #4 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"double", !7, i64 0}
!13 = !{!14, !14, i64 0}
!14 = !{!"float", !7, i64 0}
!15 = distinct !{!15, !16}
!16 = !{!"llvm.loop.mustprogress"}


; 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"

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

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

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

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

; Function Attrs: nounwind uwtable
define dso_local i32 @TA_S_SAREXT(i32 noundef %0, i32 noundef %1, ptr noundef %2, ptr noundef %3, double noundef %4, double noundef %5, double noundef %6, double noundef %7, double noundef %8, double noundef %9, double noundef %10, double noundef %11, ptr nocapture noundef writeonly %12, ptr nocapture noundef writeonly %13, ptr noundef writeonly %14) local_unnamed_addr #2 {
  %16 = alloca i32, align 4
  %17 = alloca [1 x double], align 8
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %16) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %17) #5
  %18 = icmp slt i32 %0, 0
  br i1 %18, label %176, label %19

19:                                               ; preds = %15
  %20 = icmp slt i32 %1, %0
  br i1 %20, label %176, label %21

21:                                               ; preds = %19
  %22 = icmp ne ptr %2, null
  %23 = icmp ne ptr %3, null
  %or.cond = and i1 %22, %23
  br i1 %or.cond, label %24, label %176

24:                                               ; preds = %21
  %25 = fcmp oeq double %4, -4.000000e+37
  br i1 %25, label %28, label %26

26:                                               ; preds = %24
  %27 = tail call double @llvm.fabs.f64(double %4)
  %or.cond3 = fcmp ogt double %27, 3.000000e+37
  br i1 %or.cond3, label %176, label %28

28:                                               ; preds = %24, %26
  %.0236 = phi double [ %4, %26 ], [ 0.000000e+00, %24 ]
  %29 = fcmp oeq double %5, -4.000000e+37
  br i1 %29, label %33, label %30

30:                                               ; preds = %28
  %31 = fcmp olt double %5, 0.000000e+00
  %32 = fcmp ogt double %5, 3.000000e+37
  %or.cond5 = or i1 %31, %32
  br i1 %or.cond5, label %176, label %33

33:                                               ; preds = %28, %30
  %.0237 = phi double [ %5, %30 ], [ 0.000000e+00, %28 ]
  %34 = fcmp oeq double %6, -4.000000e+37
  br i1 %34, label %38, label %35

35:                                               ; preds = %33
  %36 = fcmp olt double %6, 0.000000e+00
  %37 = fcmp ogt double %6, 3.000000e+37
  %or.cond7 = or i1 %36, %37
  br i1 %or.cond7, label %176, label %38

38:                                               ; preds = %33, %35
  %.0238 = phi double [ %6, %35 ], [ 2.000000e-02, %33 ]
  %39 = fcmp oeq double %7, -4.000000e+37
  br i1 %39, label %43, label %40

40:                                               ; preds = %38
  %41 = fcmp olt double %7, 0.000000e+00
  %42 = fcmp ogt double %7, 3.000000e+37
  %or.cond9 = or i1 %41, %42
  br i1 %or.cond9, label %176, label %43

43:                                               ; preds = %38, %40
  %.0240 = phi double [ %7, %40 ], [ 2.000000e-02, %38 ]
  %44 = fcmp oeq double %8, -4.000000e+37
  br i1 %44, label %48, label %45

45:                                               ; preds = %43
  %46 = fcmp olt double %8, 0.000000e+00
  %47 = fcmp ogt double %8, 3.000000e+37
  %or.cond11 = or i1 %46, %47
  br i1 %or.cond11, label %176, label %48

48:                                               ; preds = %43, %45
  %.0247 = phi double [ %8, %45 ], [ 2.000000e-01, %43 ]
  %49 = fcmp oeq double %9, -4.000000e+37
  br i1 %49, label %53, label %50

50:                                               ; preds = %48
  %51 = fcmp olt double %9, 0.000000e+00
  %52 = fcmp ogt double %9, 3.000000e+37
  %or.cond13 = or i1 %51, %52
  br i1 %or.cond13, label %176, label %53

53:                                               ; preds = %48, %50
  %.0245 = phi double [ %9, %50 ], [ 2.000000e-02, %48 ]
  %54 = fcmp oeq double %10, -4.000000e+37
  br i1 %54, label %58, label %55

55:                                               ; preds = %53
  %56 = fcmp olt double %10, 0.000000e+00
  %57 = fcmp ogt double %10, 3.000000e+37
  %or.cond15 = or i1 %56, %57
  br i1 %or.cond15, label %176, label %58

58:                                               ; preds = %53, %55
  %.0243 = phi double [ %10, %55 ], [ 2.000000e-02, %53 ]
  %59 = fcmp oeq double %11, -4.000000e+37
  br i1 %59, label %63, label %60

60:                                               ; preds = %58
  %61 = fcmp olt double %11, 0.000000e+00
  %62 = fcmp ogt double %11, 3.000000e+37
  %or.cond17 = or i1 %61, %62
  br i1 %or.cond17, label %176, label %63

63:                                               ; preds = %58, %60
  %.0242 = phi double [ %11, %60 ], [ 2.000000e-01, %58 ]
  %.not = icmp eq ptr %14, null
  br i1 %.not, label %176, label %64

64:                                               ; preds = %63
  %65 = tail call i32 @llvm.umax.i32(i32 %0, i32 1)
  %66 = icmp ugt i32 %65, %1
  br i1 %66, label %.sink.split.sink.split, label %67

67:                                               ; preds = %64
  %68 = fcmp ogt double %.0238, %.0247
  %.0222 = select i1 %68, double %.0247, double %.0238
  %69 = fcmp ogt double %.0240, %.0247
  %.1241 = select i1 %69, double %.0247, double %.0240
  %70 = fcmp ogt double %.0245, %.0242
  %.0218 = select i1 %70, double %.0242, double %.0245
  %71 = fcmp ogt double %.0243, %.0242
  %.1244 = select i1 %71, double %.0242, double %.0243
  %72 = fcmp oeq double %.0236, 0.000000e+00
  br i1 %72, label %73, label %77

73:                                               ; preds = %67
  %74 = call i32 @TA_S_MINUS_DM(i32 noundef %65, i32 noundef %65, ptr noundef nonnull %2, ptr noundef nonnull %3, i32 noundef 1, ptr noundef nonnull %16, ptr noundef nonnull %16, ptr noundef nonnull %17) #5
  %75 = load double, ptr %17, align 8, !tbaa !5
  %76 = fcmp ule double %75, 0.000000e+00
  %.not278 = icmp eq i32 %74, 0
  br i1 %.not278, label %79, label %.sink.split.sink.split

77:                                               ; preds = %67
  %78 = fcmp ogt double %.0236, 0.000000e+00
  br label %79

79:                                               ; preds = %77, %73
  %.1233.in = phi i1 [ %76, %73 ], [ %78, %77 ]
  %.1233 = zext i1 %.1233.in to i32
  store i32 %65, ptr %12, align 4, !tbaa !9
  %80 = add nsw i32 %65, -1
  %81 = zext nneg i32 %80 to i64
  %82 = getelementptr inbounds float, ptr %2, i64 %81
  %83 = load float, ptr %82, align 4, !tbaa !11
  %84 = fpext float %83 to double
  %85 = getelementptr inbounds float, ptr %3, i64 %81
  %86 = load float, ptr %85, align 4, !tbaa !11
  %87 = fpext float %86 to double
  br i1 %72, label %88, label %94

88:                                               ; preds = %79
  %89 = zext nneg i32 %65 to i64
  br i1 %.1233.in, label %90, label %92

90:                                               ; preds = %88
  %91 = getelementptr inbounds float, ptr %2, i64 %89
  br label %102

92:                                               ; preds = %88
  %93 = getelementptr inbounds float, ptr %3, i64 %89
  br label %102

94:                                               ; preds = %79
  %95 = fcmp ogt double %.0236, 0.000000e+00
  %96 = zext nneg i32 %65 to i64
  br i1 %95, label %97, label %99

97:                                               ; preds = %94
  %98 = getelementptr inbounds float, ptr %2, i64 %96
  br label %102

99:                                               ; preds = %94
  %100 = getelementptr inbounds float, ptr %3, i64 %96
  %101 = call double @llvm.fabs.f64(double %.0236)
  br label %102

102:                                              ; preds = %97, %99, %90, %92
  %.0213.in.in = phi ptr [ %91, %90 ], [ %93, %92 ], [ %98, %97 ], [ %100, %99 ]
  %.0 = phi double [ %87, %90 ], [ %84, %92 ], [ %.0236, %97 ], [ %101, %99 ]
  %.not279282 = icmp ugt i32 %65, %1
  br i1 %.not279282, label %.sink.split, label %.lr.ph

.lr.ph:                                           ; preds = %102
  %103 = zext nneg i32 %65 to i64
  %104 = getelementptr inbounds float, ptr %2, i64 %103
  %105 = load float, ptr %104, align 4, !tbaa !11
  %106 = fpext float %105 to double
  %107 = getelementptr inbounds float, ptr %3, i64 %103
  %108 = load float, ptr %107, align 4, !tbaa !11
  %109 = fpext float %108 to double
  %.0213.in = load float, ptr %.0213.in.in, align 4, !tbaa !11
  %.0213 = fpext float %.0213.in to double
  %110 = fcmp une double %.0237, 0.000000e+00
  %111 = call i32 @llvm.umax.i32(i32 %0, i32 1)
  %umax = zext nneg i32 %111 to i64
  %112 = add nuw i32 %1, 1
  %113 = sub i32 %112, %65
  %wide.trip.count = zext i32 %113 to i64
  br label %114

114:                                              ; preds = %.lr.ph, %175
  %indvars.iv292 = phi i64 [ %umax, %.lr.ph ], [ %indvars.iv.next293, %175 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %175 ]
  %.1291 = phi double [ %.0, %.lr.ph ], [ %.12, %175 ]
  %.1214290 = phi double [ %.0213, %.lr.ph ], [ %.4217, %175 ]
  %.1219289 = phi double [ %.0218, %.lr.ph ], [ %.3221, %175 ]
  %.1223288 = phi double [ %.0222, %.lr.ph ], [ %.3225, %175 ]
  %.0227287 = phi double [ %109, %.lr.ph ], [ %117, %175 ]
  %.0228286 = phi double [ %106, %.lr.ph ], [ %120, %175 ]
  %.2234283 = phi i32 [ %.1233, %.lr.ph ], [ %.3235, %175 ]
  %115 = getelementptr inbounds float, ptr %3, i64 %indvars.iv292
  %116 = load float, ptr %115, align 4, !tbaa !11
  %117 = fpext float %116 to double
  %118 = getelementptr inbounds float, ptr %2, i64 %indvars.iv292
  %119 = load float, ptr %118, align 4, !tbaa !11
  %120 = fpext float %119 to double
  %indvars.iv.next293 = add nuw nsw i64 %indvars.iv292, 1
  %121 = icmp eq i32 %.2234283, 1
  br i1 %121, label %122, label %148

122:                                              ; preds = %114
  %123 = fcmp ult double %.1291, %117
  br i1 %123, label %135, label %124

124:                                              ; preds = %122
  %125 = fcmp olt double %.1214290, %.0228286
  %.2 = select i1 %125, double %.0228286, double %.1214290
  %126 = fcmp olt double %.2, %120
  %.3 = select i1 %126, double %120, double %.2
  %127 = call double @llvm.fmuladd.f64(double %.3, double %.0237, double %.3)
  %.4 = select i1 %110, double %127, double %.3
  %128 = fneg double %.4
  %129 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %128, ptr %129, align 8, !tbaa !5
  %130 = fsub double %117, %.4
  %131 = call double @llvm.fmuladd.f64(double %.0218, double %130, double %.4)
  %132 = fcmp olt double %131, %.0228286
  %.5 = select i1 %132, double %.0228286, double %131
  %133 = fcmp olt double %.5, %120
  br i1 %133, label %134, label %175

134:                                              ; preds = %124
  br label %175

135:                                              ; preds = %122
  %136 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %.1291, ptr %136, align 8, !tbaa !5
  %137 = fcmp olt double %.1214290, %120
  br i1 %137, label %138, label %142

138:                                              ; preds = %135
  %139 = fadd double %.1241, %.1223288
  %140 = fcmp ogt double %139, %.0247
  br i1 %140, label %141, label %142

141:                                              ; preds = %138
  br label %142

142:                                              ; preds = %138, %141, %135
  %.2224 = phi double [ %.0247, %141 ], [ %139, %138 ], [ %.1223288, %135 ]
  %.2215 = phi double [ %120, %141 ], [ %120, %138 ], [ %.1214290, %135 ]
  %143 = fsub double %.2215, %.1291
  %144 = call double @llvm.fmuladd.f64(double %.2224, double %143, double %.1291)
  %145 = fcmp ogt double %144, %.0227287
  %.6 = select i1 %145, double %.0227287, double %144
  %146 = fcmp ogt double %.6, %117
  br i1 %146, label %147, label %175

147:                                              ; preds = %142
  br label %175

148:                                              ; preds = %114
  %149 = fcmp ugt double %.1291, %120
  br i1 %149, label %161, label %150

150:                                              ; preds = %148
  %151 = fcmp ogt double %.1214290, %.0227287
  %.7 = select i1 %151, double %.0227287, double %.1214290
  %152 = fcmp ogt double %.7, %117
  %.8 = select i1 %152, double %117, double %.7
  %153 = fneg double %.8
  %154 = call double @llvm.fmuladd.f64(double %153, double %.0237, double %.8)
  %.9 = select i1 %110, double %154, double %.8
  %155 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %.9, ptr %155, align 8, !tbaa !5
  %156 = fsub double %120, %.9
  %157 = call double @llvm.fmuladd.f64(double %.0222, double %156, double %.9)
  %158 = fcmp ogt double %157, %.0227287
  %.10 = select i1 %158, double %.0227287, double %157
  %159 = fcmp ogt double %.10, %117
  br i1 %159, label %160, label %175

160:                                              ; preds = %150
  br label %175

161:                                              ; preds = %148
  %162 = fneg double %.1291
  %163 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %162, ptr %163, align 8, !tbaa !5
  %164 = fcmp ogt double %.1214290, %117
  br i1 %164, label %165, label %169

165:                                              ; preds = %161
  %166 = fadd double %.1244, %.1219289
  %167 = fcmp ogt double %166, %.0242
  br i1 %167, label %168, label %169

168:                                              ; preds = %165
  br label %169

169:                                              ; preds = %165, %168, %161
  %.2220 = phi double [ %.0242, %168 ], [ %166, %165 ], [ %.1219289, %161 ]
  %.3216 = phi double [ %117, %168 ], [ %117, %165 ], [ %.1214290, %161 ]
  %170 = fsub double %.3216, %.1291
  %171 = call double @llvm.fmuladd.f64(double %.2220, double %170, double %.1291)
  %172 = fcmp olt double %171, %.0228286
  %.11 = select i1 %172, double %.0228286, double %171
  %173 = fcmp olt double %.11, %120
  br i1 %173, label %174, label %175

174:                                              ; preds = %169
  br label %175

175:                                              ; preds = %160, %150, %174, %169, %134, %124, %147, %142
  %.3235 = phi i32 [ 0, %134 ], [ 0, %124 ], [ 1, %147 ], [ 1, %142 ], [ 1, %160 ], [ 1, %150 ], [ 0, %174 ], [ 0, %169 ]
  %.3225 = phi double [ %.1223288, %134 ], [ %.1223288, %124 ], [ %.2224, %147 ], [ %.2224, %142 ], [ %.0222, %160 ], [ %.0222, %150 ], [ %.1223288, %174 ], [ %.1223288, %169 ]
  %.3221 = phi double [ %.0218, %134 ], [ %.0218, %124 ], [ %.1219289, %147 ], [ %.1219289, %142 ], [ %.1219289, %160 ], [ %.1219289, %150 ], [ %.2220, %174 ], [ %.2220, %169 ]
  %.4217 = phi double [ %117, %134 ], [ %117, %124 ], [ %.2215, %147 ], [ %.2215, %142 ], [ %120, %160 ], [ %120, %150 ], [ %.3216, %174 ], [ %.3216, %169 ]
  %.12 = phi double [ %120, %134 ], [ %.5, %124 ], [ %117, %147 ], [ %.6, %142 ], [ %117, %160 ], [ %.10, %150 ], [ %120, %174 ], [ %.11, %169 ]
  %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 %.sink.split, label %114, !llvm.loop !13

.sink.split.sink.split:                           ; preds = %73, %64
  %.0226.ph.ph = phi i32 [ 0, %64 ], [ %74, %73 ]
  store i32 0, ptr %12, align 4, !tbaa !9
  br label %.sink.split

.sink.split:                                      ; preds = %175, %.sink.split.sink.split, %102
  %.0229.lcssa.sink = phi i32 [ 0, %102 ], [ 0, %.sink.split.sink.split ], [ %113, %175 ]
  %.0226.ph = phi i32 [ 0, %102 ], [ %.0226.ph.ph, %.sink.split.sink.split ], [ 0, %175 ]
  store i32 %.0229.lcssa.sink, ptr %13, align 4, !tbaa !9
  br label %176

176:                                              ; preds = %.sink.split, %63, %60, %55, %50, %45, %40, %35, %30, %26, %21, %19, %15
  %.0226 = phi i32 [ 12, %15 ], [ 13, %19 ], [ 2, %21 ], [ 2, %26 ], [ 2, %30 ], [ 2, %35 ], [ 2, %40 ], [ 2, %45 ], [ 2, %50 ], [ 2, %55 ], [ 2, %60 ], [ 2, %63 ], [ %.0226.ph, %.sink.split ]
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %17) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %16) #5
  ret i32 %.0226
}

declare i32 @TA_S_MINUS_DM(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #3

; Function Attrs: nocallback nofree nosync nounwind speculatable willreturn memory(none)
declare i32 @llvm.umax.i32(i32, i32) #4

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"double", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"int", !7, i64 0}
!11 = !{!12, !12, i64 0}
!12 = !{!"float", !7, i64 0}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}


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