; 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: nounwind uwtable
define dso_local i32 @TA_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) #0 {
  %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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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 %511

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_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 %511

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 double, ptr %235, i64 %238
  %240 = load double, ptr %239, align 8, !tbaa !11
  store double %240, ptr %37, align 8, !tbaa !11
  %241 = load ptr, ptr %20, align 8, !tbaa !9
  %242 = load i32, ptr %34, align 4, !tbaa !5
  %243 = sub nsw i32 %242, 1
  %244 = sext i32 %243 to i64
  %245 = getelementptr inbounds double, ptr %241, i64 %244
  %246 = load double, ptr %245, align 8, !tbaa !11
  store double %246, ptr %38, align 8, !tbaa !11
  %247 = load double, ptr %21, align 8, !tbaa !11
  %248 = fcmp oeq double %247, 0.000000e+00
  br i1 %248, label %249, label %267

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

252:                                              ; preds = %249
  %253 = load ptr, ptr %19, align 8, !tbaa !9
  %254 = load i32, ptr %34, align 4, !tbaa !5
  %255 = sext i32 %254 to i64
  %256 = getelementptr inbounds double, ptr %253, i64 %255
  %257 = load double, ptr %256, align 8, !tbaa !11
  store double %257, ptr %43, align 8, !tbaa !11
  %258 = load double, ptr %38, align 8, !tbaa !11
  store double %258, ptr %44, align 8, !tbaa !11
  br label %266

259:                                              ; preds = %249
  %260 = load ptr, ptr %20, align 8, !tbaa !9
  %261 = load i32, ptr %34, align 4, !tbaa !5
  %262 = sext i32 %261 to i64
  %263 = getelementptr inbounds double, ptr %260, i64 %262
  %264 = load double, ptr %263, align 8, !tbaa !11
  store double %264, ptr %43, align 8, !tbaa !11
  %265 = load double, ptr %37, align 8, !tbaa !11
  store double %265, ptr %44, align 8, !tbaa !11
  br label %266

266:                                              ; preds = %259, %252
  br label %286

267:                                              ; preds = %231
  %268 = load double, ptr %21, align 8, !tbaa !11
  %269 = fcmp ogt double %268, 0.000000e+00
  br i1 %269, label %270, label %277

270:                                              ; preds = %267
  %271 = load ptr, ptr %19, align 8, !tbaa !9
  %272 = load i32, ptr %34, align 4, !tbaa !5
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %271, i64 %273
  %275 = load double, ptr %274, align 8, !tbaa !11
  store double %275, ptr %43, align 8, !tbaa !11
  %276 = load double, ptr %21, align 8, !tbaa !11
  store double %276, ptr %44, align 8, !tbaa !11
  br label %285

277:                                              ; preds = %267
  %278 = load ptr, ptr %20, align 8, !tbaa !9
  %279 = load i32, ptr %34, align 4, !tbaa !5
  %280 = sext i32 %279 to i64
  %281 = getelementptr inbounds double, ptr %278, i64 %280
  %282 = load double, ptr %281, align 8, !tbaa !11
  store double %282, ptr %43, align 8, !tbaa !11
  %283 = load double, ptr %21, align 8, !tbaa !11
  %284 = call double @llvm.fabs.f64(double %283)
  store double %284, ptr %44, align 8, !tbaa !11
  br label %285

285:                                              ; preds = %277, %270
  br label %286

286:                                              ; preds = %285, %266
  %287 = load ptr, ptr %20, align 8, !tbaa !9
  %288 = load i32, ptr %34, align 4, !tbaa !5
  %289 = sext i32 %288 to i64
  %290 = getelementptr inbounds double, ptr %287, i64 %289
  %291 = load double, ptr %290, align 8, !tbaa !11
  store double %291, ptr %38, align 8, !tbaa !11
  %292 = load ptr, ptr %19, align 8, !tbaa !9
  %293 = load i32, ptr %34, align 4, !tbaa !5
  %294 = sext i32 %293 to i64
  %295 = getelementptr inbounds double, ptr %292, i64 %294
  %296 = load double, ptr %295, align 8, !tbaa !11
  store double %296, ptr %37, align 8, !tbaa !11
  br label %297

297:                                              ; preds = %507, %286
  %298 = load i32, ptr %34, align 4, !tbaa !5
  %299 = load i32, ptr %18, align 4, !tbaa !5
  %300 = icmp sle i32 %298, %299
  br i1 %300, label %301, label %508

301:                                              ; preds = %297
  %302 = load double, ptr %38, align 8, !tbaa !11
  store double %302, ptr %40, align 8, !tbaa !11
  %303 = load double, ptr %37, align 8, !tbaa !11
  store double %303, ptr %39, align 8, !tbaa !11
  %304 = load ptr, ptr %20, align 8, !tbaa !9
  %305 = load i32, ptr %34, align 4, !tbaa !5
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %304, i64 %306
  %308 = load double, ptr %307, align 8, !tbaa !11
  store double %308, ptr %38, align 8, !tbaa !11
  %309 = load ptr, ptr %19, align 8, !tbaa !9
  %310 = load i32, ptr %34, align 4, !tbaa !5
  %311 = sext i32 %310 to i64
  %312 = getelementptr inbounds double, ptr %309, i64 %311
  %313 = load double, ptr %312, align 8, !tbaa !11
  store double %313, ptr %37, align 8, !tbaa !11
  %314 = load i32, ptr %34, align 4, !tbaa !5
  %315 = add nsw i32 %314, 1
  store i32 %315, ptr %34, align 4, !tbaa !5
  %316 = load i32, ptr %33, align 4, !tbaa !5
  %317 = icmp eq i32 %316, 1
  br i1 %317, label %318, label %412

318:                                              ; preds = %301
  %319 = load double, ptr %38, align 8, !tbaa !11
  %320 = load double, ptr %44, align 8, !tbaa !11
  %321 = fcmp ole double %319, %320
  br i1 %321, label %322, label %371

322:                                              ; preds = %318
  store i32 0, ptr %33, align 4, !tbaa !5
  %323 = load double, ptr %43, align 8, !tbaa !11
  store double %323, ptr %44, align 8, !tbaa !11
  %324 = load double, ptr %44, align 8, !tbaa !11
  %325 = load double, ptr %39, align 8, !tbaa !11
  %326 = fcmp olt double %324, %325
  br i1 %326, label %327, label %329

327:                                              ; preds = %322
  %328 = load double, ptr %39, align 8, !tbaa !11
  store double %328, ptr %44, align 8, !tbaa !11
  br label %329

329:                                              ; preds = %327, %322
  %330 = load double, ptr %44, align 8, !tbaa !11
  %331 = load double, ptr %37, align 8, !tbaa !11
  %332 = fcmp olt double %330, %331
  br i1 %332, label %333, label %335

333:                                              ; preds = %329
  %334 = load double, ptr %37, align 8, !tbaa !11
  store double %334, ptr %44, align 8, !tbaa !11
  br label %335

335:                                              ; preds = %333, %329
  %336 = load double, ptr %22, align 8, !tbaa !11
  %337 = fcmp une double %336, 0.000000e+00
  br i1 %337, label %338, label %343

338:                                              ; preds = %335
  %339 = load double, ptr %44, align 8, !tbaa !11
  %340 = load double, ptr %22, align 8, !tbaa !11
  %341 = load double, ptr %44, align 8, !tbaa !11
  %342 = call double @llvm.fmuladd.f64(double %339, double %340, double %341)
  store double %342, ptr %44, align 8, !tbaa !11
  br label %343

343:                                              ; preds = %338, %335
  %344 = load double, ptr %44, align 8, !tbaa !11
  %345 = fneg double %344
  %346 = load ptr, ptr %31, align 8, !tbaa !9
  %347 = load i32, ptr %35, align 4, !tbaa !5
  %348 = add nsw i32 %347, 1
  store i32 %348, ptr %35, align 4, !tbaa !5
  %349 = sext i32 %347 to i64
  %350 = getelementptr inbounds double, ptr %346, i64 %349
  store double %345, ptr %350, align 8, !tbaa !11
  %351 = load double, ptr %26, align 8, !tbaa !11
  store double %351, ptr %42, align 8, !tbaa !11
  %352 = load double, ptr %38, align 8, !tbaa !11
  store double %352, ptr %43, align 8, !tbaa !11
  %353 = load double, ptr %44, align 8, !tbaa !11
  %354 = load double, ptr %42, align 8, !tbaa !11
  %355 = load double, ptr %43, align 8, !tbaa !11
  %356 = load double, ptr %44, align 8, !tbaa !11
  %357 = fsub double %355, %356
  %358 = call double @llvm.fmuladd.f64(double %354, double %357, double %353)
  store double %358, ptr %44, align 8, !tbaa !11
  %359 = load double, ptr %44, align 8, !tbaa !11
  %360 = load double, ptr %39, align 8, !tbaa !11
  %361 = fcmp olt double %359, %360
  br i1 %361, label %362, label %364

362:                                              ; preds = %343
  %363 = load double, ptr %39, align 8, !tbaa !11
  store double %363, ptr %44, align 8, !tbaa !11
  br label %364

364:                                              ; preds = %362, %343
  %365 = load double, ptr %44, align 8, !tbaa !11
  %366 = load double, ptr %37, align 8, !tbaa !11
  %367 = fcmp olt double %365, %366
  br i1 %367, label %368, label %370

368:                                              ; preds = %364
  %369 = load double, ptr %37, align 8, !tbaa !11
  store double %369, ptr %44, align 8, !tbaa !11
  br label %370

370:                                              ; preds = %368, %364
  br label %411

371:                                              ; preds = %318
  %372 = load double, ptr %44, align 8, !tbaa !11
  %373 = load ptr, ptr %31, align 8, !tbaa !9
  %374 = load i32, ptr %35, align 4, !tbaa !5
  %375 = add nsw i32 %374, 1
  store i32 %375, ptr %35, align 4, !tbaa !5
  %376 = sext i32 %374 to i64
  %377 = getelementptr inbounds double, ptr %373, i64 %376
  store double %372, ptr %377, align 8, !tbaa !11
  %378 = load double, ptr %37, align 8, !tbaa !11
  %379 = load double, ptr %43, align 8, !tbaa !11
  %380 = fcmp ogt double %378, %379
  br i1 %380, label %381, label %392

381:                                              ; preds = %371
  %382 = load double, ptr %37, align 8, !tbaa !11
  store double %382, ptr %43, align 8, !tbaa !11
  %383 = load double, ptr %24, align 8, !tbaa !11
  %384 = load double, ptr %41, align 8, !tbaa !11
  %385 = fadd double %384, %383
  store double %385, ptr %41, align 8, !tbaa !11
  %386 = load double, ptr %41, align 8, !tbaa !11
  %387 = load double, ptr %25, align 8, !tbaa !11
  %388 = fcmp ogt double %386, %387
  br i1 %388, label %389, label %391

389:                                              ; preds = %381
  %390 = load double, ptr %25, align 8, !tbaa !11
  store double %390, ptr %41, align 8, !tbaa !11
  br label %391

391:                                              ; preds = %389, %381
  br label %392

392:                                              ; preds = %391, %371
  %393 = load double, ptr %44, align 8, !tbaa !11
  %394 = load double, ptr %41, align 8, !tbaa !11
  %395 = load double, ptr %43, align 8, !tbaa !11
  %396 = load double, ptr %44, align 8, !tbaa !11
  %397 = fsub double %395, %396
  %398 = call double @llvm.fmuladd.f64(double %394, double %397, double %393)
  store double %398, ptr %44, align 8, !tbaa !11
  %399 = load double, ptr %44, align 8, !tbaa !11
  %400 = load double, ptr %40, align 8, !tbaa !11
  %401 = fcmp ogt double %399, %400
  br i1 %401, label %402, label %404

402:                                              ; preds = %392
  %403 = load double, ptr %40, align 8, !tbaa !11
  store double %403, ptr %44, align 8, !tbaa !11
  br label %404

404:                                              ; preds = %402, %392
  %405 = load double, ptr %44, align 8, !tbaa !11
  %406 = load double, ptr %38, align 8, !tbaa !11
  %407 = fcmp ogt double %405, %406
  br i1 %407, label %408, label %410

408:                                              ; preds = %404
  %409 = load double, ptr %38, align 8, !tbaa !11
  store double %409, ptr %44, align 8, !tbaa !11
  br label %410

410:                                              ; preds = %408, %404
  br label %411

411:                                              ; preds = %410, %370
  br label %507

412:                                              ; preds = %301
  %413 = load double, ptr %37, align 8, !tbaa !11
  %414 = load double, ptr %44, align 8, !tbaa !11
  %415 = fcmp oge double %413, %414
  br i1 %415, label %416, label %465

416:                                              ; preds = %412
  store i32 1, ptr %33, align 4, !tbaa !5
  %417 = load double, ptr %43, align 8, !tbaa !11
  store double %417, ptr %44, align 8, !tbaa !11
  %418 = load double, ptr %44, align 8, !tbaa !11
  %419 = load double, ptr %40, align 8, !tbaa !11
  %420 = fcmp ogt double %418, %419
  br i1 %420, label %421, label %423

421:                                              ; preds = %416
  %422 = load double, ptr %40, align 8, !tbaa !11
  store double %422, ptr %44, align 8, !tbaa !11
  br label %423

423:                                              ; preds = %421, %416
  %424 = load double, ptr %44, align 8, !tbaa !11
  %425 = load double, ptr %38, align 8, !tbaa !11
  %426 = fcmp ogt double %424, %425
  br i1 %426, label %427, label %429

427:                                              ; preds = %423
  %428 = load double, ptr %38, align 8, !tbaa !11
  store double %428, ptr %44, align 8, !tbaa !11
  br label %429

429:                                              ; preds = %427, %423
  %430 = load double, ptr %22, align 8, !tbaa !11
  %431 = fcmp une double %430, 0.000000e+00
  br i1 %431, label %432, label %438

432:                                              ; preds = %429
  %433 = load double, ptr %44, align 8, !tbaa !11
  %434 = load double, ptr %22, align 8, !tbaa !11
  %435 = load double, ptr %44, align 8, !tbaa !11
  %436 = fneg double %433
  %437 = call double @llvm.fmuladd.f64(double %436, double %434, double %435)
  store double %437, ptr %44, align 8, !tbaa !11
  br label %438

438:                                              ; preds = %432, %429
  %439 = load double, ptr %44, align 8, !tbaa !11
  %440 = load ptr, ptr %31, align 8, !tbaa !9
  %441 = load i32, ptr %35, align 4, !tbaa !5
  %442 = add nsw i32 %441, 1
  store i32 %442, ptr %35, align 4, !tbaa !5
  %443 = sext i32 %441 to i64
  %444 = getelementptr inbounds double, ptr %440, i64 %443
  store double %439, ptr %444, align 8, !tbaa !11
  %445 = load double, ptr %23, align 8, !tbaa !11
  store double %445, ptr %41, align 8, !tbaa !11
  %446 = load double, ptr %37, align 8, !tbaa !11
  store double %446, ptr %43, align 8, !tbaa !11
  %447 = load double, ptr %44, align 8, !tbaa !11
  %448 = load double, ptr %41, align 8, !tbaa !11
  %449 = load double, ptr %43, align 8, !tbaa !11
  %450 = load double, ptr %44, align 8, !tbaa !11
  %451 = fsub double %449, %450
  %452 = call double @llvm.fmuladd.f64(double %448, double %451, double %447)
  store double %452, ptr %44, align 8, !tbaa !11
  %453 = load double, ptr %44, align 8, !tbaa !11
  %454 = load double, ptr %40, align 8, !tbaa !11
  %455 = fcmp ogt double %453, %454
  br i1 %455, label %456, label %458

456:                                              ; preds = %438
  %457 = load double, ptr %40, align 8, !tbaa !11
  store double %457, ptr %44, align 8, !tbaa !11
  br label %458

458:                                              ; preds = %456, %438
  %459 = load double, ptr %44, align 8, !tbaa !11
  %460 = load double, ptr %38, align 8, !tbaa !11
  %461 = fcmp ogt double %459, %460
  br i1 %461, label %462, label %464

462:                                              ; preds = %458
  %463 = load double, ptr %38, align 8, !tbaa !11
  store double %463, ptr %44, align 8, !tbaa !11
  br label %464

464:                                              ; preds = %462, %458
  br label %506

465:                                              ; preds = %412
  %466 = load double, ptr %44, align 8, !tbaa !11
  %467 = fneg double %466
  %468 = load ptr, ptr %31, align 8, !tbaa !9
  %469 = load i32, ptr %35, align 4, !tbaa !5
  %470 = add nsw i32 %469, 1
  store i32 %470, ptr %35, align 4, !tbaa !5
  %471 = sext i32 %469 to i64
  %472 = getelementptr inbounds double, ptr %468, i64 %471
  store double %467, ptr %472, align 8, !tbaa !11
  %473 = load double, ptr %38, align 8, !tbaa !11
  %474 = load double, ptr %43, align 8, !tbaa !11
  %475 = fcmp olt double %473, %474
  br i1 %475, label %476, label %487

476:                                              ; preds = %465
  %477 = load double, ptr %38, align 8, !tbaa !11
  store double %477, ptr %43, align 8, !tbaa !11
  %478 = load double, ptr %27, align 8, !tbaa !11
  %479 = load double, ptr %42, align 8, !tbaa !11
  %480 = fadd double %479, %478
  store double %480, ptr %42, align 8, !tbaa !11
  %481 = load double, ptr %42, align 8, !tbaa !11
  %482 = load double, ptr %28, align 8, !tbaa !11
  %483 = fcmp ogt double %481, %482
  br i1 %483, label %484, label %486

484:                                              ; preds = %476
  %485 = load double, ptr %28, align 8, !tbaa !11
  store double %485, ptr %42, align 8, !tbaa !11
  br label %486

486:                                              ; preds = %484, %476
  br label %487

487:                                              ; preds = %486, %465
  %488 = load double, ptr %44, align 8, !tbaa !11
  %489 = load double, ptr %42, align 8, !tbaa !11
  %490 = load double, ptr %43, align 8, !tbaa !11
  %491 = load double, ptr %44, align 8, !tbaa !11
  %492 = fsub double %490, %491
  %493 = call double @llvm.fmuladd.f64(double %489, double %492, double %488)
  store double %493, ptr %44, align 8, !tbaa !11
  %494 = load double, ptr %44, align 8, !tbaa !11
  %495 = load double, ptr %39, align 8, !tbaa !11
  %496 = fcmp olt double %494, %495
  br i1 %496, label %497, label %499

497:                                              ; preds = %487
  %498 = load double, ptr %39, align 8, !tbaa !11
  store double %498, ptr %44, align 8, !tbaa !11
  br label %499

499:                                              ; preds = %497, %487
  %500 = load double, ptr %44, align 8, !tbaa !11
  %501 = load double, ptr %37, align 8, !tbaa !11
  %502 = fcmp olt double %500, %501
  br i1 %502, label %503, label %505

503:                                              ; preds = %499
  %504 = load double, ptr %37, align 8, !tbaa !11
  store double %504, ptr %44, align 8, !tbaa !11
  br label %505

505:                                              ; preds = %503, %499
  br label %506

506:                                              ; preds = %505, %464
  br label %507

507:                                              ; preds = %506, %411
  br label %297, !llvm.loop !13

508:                                              ; preds = %297
  %509 = load i32, ptr %35, align 4, !tbaa !5
  %510 = load ptr, ptr %30, align 8, !tbaa !9
  store i32 %509, ptr %510, align 4, !tbaa !5
  store i32 0, ptr %16, align 4
  store i32 1, ptr %46, align 4
  br label %511

511:                                              ; preds = %508, %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
  %512 = load i32, ptr %16, align 4
  ret i32 %512
}

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

declare i32 @TA_MINUS_DM(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) #2

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

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

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"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 = distinct !{!13, !14}
!14 = !{!"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: nounwind uwtable
define dso_local i32 @TA_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 #0 {
  %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 %167, label %19

19:                                               ; preds = %15
  %20 = icmp slt i32 %1, %0
  br i1 %20, label %167, 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 %167

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 %167, 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 %167, 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 %167, 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 %167, 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 %167, 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 %167, 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 %167, 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 %167, 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 %167, 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 %89

73:                                               ; preds = %67
  %74 = call i32 @TA_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
  %.not278 = icmp eq i32 %74, 0
  br i1 %.not278, label %75, label %.sink.split.sink.split

75:                                               ; preds = %73
  %76 = load double, ptr %17, align 8, !tbaa !5
  %77 = fcmp ule double %76, 0.000000e+00
  store i32 %65, ptr %12, align 4, !tbaa !9
  %78 = add nsw i32 %65, -1
  %79 = zext nneg i32 %78 to i64
  %80 = zext nneg i32 %65 to i64
  br i1 %77, label %81, label %85

81:                                               ; preds = %75
  %82 = getelementptr inbounds double, ptr %3, i64 %79
  %83 = load double, ptr %82, align 8, !tbaa !5
  %84 = getelementptr inbounds double, ptr %2, i64 %80
  br label %97

85:                                               ; preds = %75
  %86 = getelementptr inbounds double, ptr %2, i64 %79
  %87 = load double, ptr %86, align 8, !tbaa !5
  %88 = getelementptr inbounds double, ptr %3, i64 %80
  br label %97

89:                                               ; preds = %67
  %90 = fcmp ogt double %.0236, 0.000000e+00
  store i32 %65, ptr %12, align 4, !tbaa !9
  %91 = zext nneg i32 %65 to i64
  br i1 %90, label %92, label %94

92:                                               ; preds = %89
  %93 = getelementptr inbounds double, ptr %2, i64 %91
  br label %97

94:                                               ; preds = %89
  %95 = getelementptr inbounds double, ptr %3, i64 %91
  %96 = tail call double @llvm.fabs.f64(double %.0236)
  br label %97

97:                                               ; preds = %92, %94, %81, %85
  %.1233284.shrunk = phi i32 [ 1, %81 ], [ 0, %85 ], [ 1, %92 ], [ 0, %94 ]
  %.0213.in = phi ptr [ %84, %81 ], [ %88, %85 ], [ %93, %92 ], [ %95, %94 ]
  %.0 = phi double [ %83, %81 ], [ %87, %85 ], [ %.0236, %92 ], [ %96, %94 ]
  %.not279285 = icmp ugt i32 %65, %1
  br i1 %.not279285, label %.sink.split, label %.lr.ph

.lr.ph:                                           ; preds = %97
  %98 = zext nneg i32 %65 to i64
  %99 = getelementptr inbounds double, ptr %2, i64 %98
  %100 = load double, ptr %99, align 8, !tbaa !5
  %101 = getelementptr inbounds double, ptr %3, i64 %98
  %102 = load double, ptr %101, align 8, !tbaa !5
  %.0213 = load double, ptr %.0213.in, align 8, !tbaa !5
  %103 = fcmp une double %.0237, 0.000000e+00
  %104 = call i32 @llvm.umax.i32(i32 %0, i32 1)
  %umax = zext nneg i32 %104 to i64
  %105 = add nuw i32 %1, 1
  %106 = sub i32 %105, %65
  %wide.trip.count = zext i32 %106 to i64
  br label %107

107:                                              ; preds = %.lr.ph, %166
  %indvars.iv295 = phi i64 [ %umax, %.lr.ph ], [ %indvars.iv.next296, %166 ]
  %indvars.iv = phi i64 [ 0, %.lr.ph ], [ %indvars.iv.next, %166 ]
  %.1294 = phi double [ %.0, %.lr.ph ], [ %.12, %166 ]
  %.1214293 = phi double [ %.0213, %.lr.ph ], [ %.4217, %166 ]
  %.1219292 = phi double [ %.0218, %.lr.ph ], [ %.3221, %166 ]
  %.1223291 = phi double [ %.0222, %.lr.ph ], [ %.3225, %166 ]
  %.0227290 = phi double [ %102, %.lr.ph ], [ %109, %166 ]
  %.0228289 = phi double [ %100, %.lr.ph ], [ %111, %166 ]
  %.2234286 = phi i32 [ %.1233284.shrunk, %.lr.ph ], [ %.3235, %166 ]
  %108 = getelementptr inbounds double, ptr %3, i64 %indvars.iv295
  %109 = load double, ptr %108, align 8, !tbaa !5
  %110 = getelementptr inbounds double, ptr %2, i64 %indvars.iv295
  %111 = load double, ptr %110, align 8, !tbaa !5
  %indvars.iv.next296 = add nuw nsw i64 %indvars.iv295, 1
  %112 = icmp eq i32 %.2234286, 1
  br i1 %112, label %113, label %139

113:                                              ; preds = %107
  %114 = fcmp ugt double %109, %.1294
  br i1 %114, label %126, label %115

115:                                              ; preds = %113
  %116 = fcmp olt double %.1214293, %.0228289
  %.2 = select i1 %116, double %.0228289, double %.1214293
  %117 = fcmp olt double %.2, %111
  %.3 = select i1 %117, double %111, double %.2
  %118 = call double @llvm.fmuladd.f64(double %.3, double %.0237, double %.3)
  %.4 = select i1 %103, double %118, double %.3
  %119 = fneg double %.4
  %120 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %119, ptr %120, align 8, !tbaa !5
  %121 = fsub double %109, %.4
  %122 = call double @llvm.fmuladd.f64(double %.0218, double %121, double %.4)
  %123 = fcmp olt double %122, %.0228289
  %.5 = select i1 %123, double %.0228289, double %122
  %124 = fcmp olt double %.5, %111
  br i1 %124, label %125, label %166

125:                                              ; preds = %115
  br label %166

126:                                              ; preds = %113
  %127 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %.1294, ptr %127, align 8, !tbaa !5
  %128 = fcmp ogt double %111, %.1214293
  br i1 %128, label %129, label %133

129:                                              ; preds = %126
  %130 = fadd double %.1241, %.1223291
  %131 = fcmp ogt double %130, %.0247
  br i1 %131, label %132, label %133

132:                                              ; preds = %129
  br label %133

133:                                              ; preds = %129, %132, %126
  %.2224 = phi double [ %.0247, %132 ], [ %130, %129 ], [ %.1223291, %126 ]
  %.2215 = phi double [ %111, %132 ], [ %111, %129 ], [ %.1214293, %126 ]
  %134 = fsub double %.2215, %.1294
  %135 = call double @llvm.fmuladd.f64(double %.2224, double %134, double %.1294)
  %136 = fcmp ogt double %135, %.0227290
  %.6 = select i1 %136, double %.0227290, double %135
  %137 = fcmp ogt double %.6, %109
  br i1 %137, label %138, label %166

138:                                              ; preds = %133
  br label %166

139:                                              ; preds = %107
  %140 = fcmp ult double %111, %.1294
  br i1 %140, label %152, label %141

141:                                              ; preds = %139
  %142 = fcmp ogt double %.1214293, %.0227290
  %.7 = select i1 %142, double %.0227290, double %.1214293
  %143 = fcmp ogt double %.7, %109
  %.8 = select i1 %143, double %109, double %.7
  %144 = fneg double %.8
  %145 = call double @llvm.fmuladd.f64(double %144, double %.0237, double %.8)
  %.9 = select i1 %103, double %145, double %.8
  %146 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %.9, ptr %146, align 8, !tbaa !5
  %147 = fsub double %111, %.9
  %148 = call double @llvm.fmuladd.f64(double %.0222, double %147, double %.9)
  %149 = fcmp ogt double %148, %.0227290
  %.10 = select i1 %149, double %.0227290, double %148
  %150 = fcmp ogt double %.10, %109
  br i1 %150, label %151, label %166

151:                                              ; preds = %141
  br label %166

152:                                              ; preds = %139
  %153 = fneg double %.1294
  %154 = getelementptr inbounds double, ptr %14, i64 %indvars.iv
  store double %153, ptr %154, align 8, !tbaa !5
  %155 = fcmp olt double %109, %.1214293
  br i1 %155, label %156, label %160

156:                                              ; preds = %152
  %157 = fadd double %.1244, %.1219292
  %158 = fcmp ogt double %157, %.0242
  br i1 %158, label %159, label %160

159:                                              ; preds = %156
  br label %160

160:                                              ; preds = %156, %159, %152
  %.2220 = phi double [ %.0242, %159 ], [ %157, %156 ], [ %.1219292, %152 ]
  %.3216 = phi double [ %109, %159 ], [ %109, %156 ], [ %.1214293, %152 ]
  %161 = fsub double %.3216, %.1294
  %162 = call double @llvm.fmuladd.f64(double %.2220, double %161, double %.1294)
  %163 = fcmp olt double %162, %.0228289
  %.11 = select i1 %163, double %.0228289, double %162
  %164 = fcmp olt double %.11, %111
  br i1 %164, label %165, label %166

165:                                              ; preds = %160
  br label %166

166:                                              ; preds = %151, %141, %165, %160, %125, %115, %138, %133
  %.3235 = phi i32 [ 0, %125 ], [ 0, %115 ], [ 1, %138 ], [ 1, %133 ], [ 1, %151 ], [ 1, %141 ], [ 0, %165 ], [ 0, %160 ]
  %.3225 = phi double [ %.1223291, %125 ], [ %.1223291, %115 ], [ %.2224, %138 ], [ %.2224, %133 ], [ %.0222, %151 ], [ %.0222, %141 ], [ %.1223291, %165 ], [ %.1223291, %160 ]
  %.3221 = phi double [ %.0218, %125 ], [ %.0218, %115 ], [ %.1219292, %138 ], [ %.1219292, %133 ], [ %.1219292, %151 ], [ %.1219292, %141 ], [ %.2220, %165 ], [ %.2220, %160 ]
  %.4217 = phi double [ %109, %125 ], [ %109, %115 ], [ %.2215, %138 ], [ %.2215, %133 ], [ %111, %151 ], [ %111, %141 ], [ %.3216, %165 ], [ %.3216, %160 ]
  %.12 = phi double [ %111, %125 ], [ %.5, %115 ], [ %109, %138 ], [ %.6, %133 ], [ %109, %151 ], [ %.10, %141 ], [ %111, %165 ], [ %.11, %160 ]
  %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 %107, !llvm.loop !11

.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 = %166, %.sink.split.sink.split, %97
  %.0229.lcssa.sink = phi i32 [ 0, %97 ], [ 0, %.sink.split.sink.split ], [ %106, %166 ]
  %.0226.ph = phi i32 [ 0, %97 ], [ %.0226.ph.ph, %.sink.split.sink.split ], [ 0, %166 ]
  store i32 %.0229.lcssa.sink, ptr %13, align 4, !tbaa !9
  br label %167

167:                                              ; 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
}

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

declare i32 @TA_MINUS_DM(i32 noundef, i32 noundef, ptr noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

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

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