; LLVM IR from OpenMathLib/OpenBLAS :: lapack-netlib/SRC (dspgvx)

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

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@c__1 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dspgvx_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19) #0 {
  %21 = alloca ptr, align 8
  %22 = alloca ptr, align 8
  %23 = alloca ptr, align 8
  %24 = alloca ptr, align 8
  %25 = alloca ptr, align 8
  %26 = alloca ptr, align 8
  %27 = alloca ptr, align 8
  %28 = alloca ptr, align 8
  %29 = alloca ptr, align 8
  %30 = alloca ptr, align 8
  %31 = alloca ptr, align 8
  %32 = alloca ptr, align 8
  %33 = alloca ptr, align 8
  %34 = alloca ptr, align 8
  %35 = alloca ptr, align 8
  %36 = alloca ptr, align 8
  %37 = alloca ptr, align 8
  %38 = alloca ptr, align 8
  %39 = alloca ptr, align 8
  %40 = alloca ptr, align 8
  %41 = alloca i32, align 4
  %42 = alloca i32, align 4
  %43 = alloca i32, align 4
  %44 = alloca i32, align 4
  %45 = alloca [1 x i8], align 1
  %46 = alloca i32, align 4
  %47 = alloca i32, align 4
  %48 = alloca i32, align 4
  %49 = alloca i32, align 4
  %50 = alloca i32, align 4
  %51 = alloca i32, align 4
  store ptr %0, ptr %21, align 8, !tbaa !5
  store ptr %1, ptr %22, align 8, !tbaa !5
  store ptr %2, ptr %23, align 8, !tbaa !5
  store ptr %3, ptr %24, align 8, !tbaa !5
  store ptr %4, ptr %25, align 8, !tbaa !5
  store ptr %5, ptr %26, align 8, !tbaa !5
  store ptr %6, ptr %27, align 8, !tbaa !5
  store ptr %7, ptr %28, align 8, !tbaa !5
  store ptr %8, ptr %29, align 8, !tbaa !5
  store ptr %9, ptr %30, align 8, !tbaa !5
  store ptr %10, ptr %31, align 8, !tbaa !5
  store ptr %11, ptr %32, align 8, !tbaa !5
  store ptr %12, ptr %33, align 8, !tbaa !5
  store ptr %13, ptr %34, align 8, !tbaa !5
  store ptr %14, ptr %35, align 8, !tbaa !5
  store ptr %15, ptr %36, align 8, !tbaa !5
  store ptr %16, ptr %37, align 8, !tbaa !5
  store ptr %17, ptr %38, align 8, !tbaa !5
  store ptr %18, ptr %39, align 8, !tbaa !5
  store ptr %19, ptr %40, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr %45) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %48) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %50) #3
  %52 = load ptr, ptr %26, align 8, !tbaa !5
  %53 = getelementptr inbounds double, ptr %52, i32 -1
  store ptr %53, ptr %26, align 8, !tbaa !5
  %54 = load ptr, ptr %27, align 8, !tbaa !5
  %55 = getelementptr inbounds double, ptr %54, i32 -1
  store ptr %55, ptr %27, align 8, !tbaa !5
  %56 = load ptr, ptr %34, align 8, !tbaa !5
  %57 = getelementptr inbounds double, ptr %56, i32 -1
  store ptr %57, ptr %34, align 8, !tbaa !5
  %58 = load ptr, ptr %36, align 8, !tbaa !5
  %59 = load i32, ptr %58, align 4, !tbaa !9
  store i32 %59, ptr %41, align 4, !tbaa !9
  %60 = load i32, ptr %41, align 4, !tbaa !9
  %61 = mul nsw i32 %60, 1
  %62 = add nsw i32 1, %61
  store i32 %62, ptr %42, align 4, !tbaa !9
  %63 = load i32, ptr %42, align 4, !tbaa !9
  %64 = load ptr, ptr %35, align 8, !tbaa !5
  %65 = sext i32 %63 to i64
  %66 = sub i64 0, %65
  %67 = getelementptr inbounds double, ptr %64, i64 %66
  store ptr %67, ptr %35, align 8, !tbaa !5
  %68 = load ptr, ptr %37, align 8, !tbaa !5
  %69 = getelementptr inbounds double, ptr %68, i32 -1
  store ptr %69, ptr %37, align 8, !tbaa !5
  %70 = load ptr, ptr %38, align 8, !tbaa !5
  %71 = getelementptr inbounds i32, ptr %70, i32 -1
  store ptr %71, ptr %38, align 8, !tbaa !5
  %72 = load ptr, ptr %39, align 8, !tbaa !5
  %73 = getelementptr inbounds i32, ptr %72, i32 -1
  store ptr %73, ptr %39, align 8, !tbaa !5
  %74 = load ptr, ptr %24, align 8, !tbaa !5
  %75 = call i32 @lsame_(ptr noundef %74, ptr noundef @.str)
  store i32 %75, ptr %46, align 4, !tbaa !9
  %76 = load ptr, ptr %22, align 8, !tbaa !5
  %77 = call i32 @lsame_(ptr noundef %76, ptr noundef @.str.1)
  store i32 %77, ptr %47, align 4, !tbaa !9
  %78 = load ptr, ptr %23, align 8, !tbaa !5
  %79 = call i32 @lsame_(ptr noundef %78, ptr noundef @.str.2)
  store i32 %79, ptr %48, align 4, !tbaa !9
  %80 = load ptr, ptr %23, align 8, !tbaa !5
  %81 = call i32 @lsame_(ptr noundef %80, ptr noundef @.str.1)
  store i32 %81, ptr %50, align 4, !tbaa !9
  %82 = load ptr, ptr %23, align 8, !tbaa !5
  %83 = call i32 @lsame_(ptr noundef %82, ptr noundef @.str.3)
  store i32 %83, ptr %49, align 4, !tbaa !9
  %84 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 0, ptr %84, align 4, !tbaa !9
  %85 = load ptr, ptr %21, align 8, !tbaa !5
  %86 = load i32, ptr %85, align 4, !tbaa !9
  %87 = icmp slt i32 %86, 1
  br i1 %87, label %92, label %88

88:                                               ; preds = %20
  %89 = load ptr, ptr %21, align 8, !tbaa !5
  %90 = load i32, ptr %89, align 4, !tbaa !9
  %91 = icmp sgt i32 %90, 3
  br i1 %91, label %92, label %94

92:                                               ; preds = %88, %20
  %93 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -1, ptr %93, align 4, !tbaa !9
  br label %187

94:                                               ; preds = %88
  %95 = load i32, ptr %47, align 4, !tbaa !9
  %96 = icmp ne i32 %95, 0
  br i1 %96, label %103, label %97

97:                                               ; preds = %94
  %98 = load ptr, ptr %22, align 8, !tbaa !5
  %99 = call i32 @lsame_(ptr noundef %98, ptr noundef @.str.4)
  %100 = icmp ne i32 %99, 0
  br i1 %100, label %103, label %101

101:                                              ; preds = %97
  %102 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -2, ptr %102, align 4, !tbaa !9
  br label %186

103:                                              ; preds = %97, %94
  %104 = load i32, ptr %48, align 4, !tbaa !9
  %105 = icmp ne i32 %104, 0
  br i1 %105, label %114, label %106

106:                                              ; preds = %103
  %107 = load i32, ptr %50, align 4, !tbaa !9
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %114, label %109

109:                                              ; preds = %106
  %110 = load i32, ptr %49, align 4, !tbaa !9
  %111 = icmp ne i32 %110, 0
  br i1 %111, label %114, label %112

112:                                              ; preds = %109
  %113 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -3, ptr %113, align 4, !tbaa !9
  br label %185

114:                                              ; preds = %109, %106, %103
  %115 = load i32, ptr %46, align 4, !tbaa !9
  %116 = icmp ne i32 %115, 0
  br i1 %116, label %123, label %117

117:                                              ; preds = %114
  %118 = load ptr, ptr %24, align 8, !tbaa !5
  %119 = call i32 @lsame_(ptr noundef %118, ptr noundef @.str.5)
  %120 = icmp ne i32 %119, 0
  br i1 %120, label %123, label %121

121:                                              ; preds = %117
  %122 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -4, ptr %122, align 4, !tbaa !9
  br label %184

123:                                              ; preds = %117, %114
  %124 = load ptr, ptr %25, align 8, !tbaa !5
  %125 = load i32, ptr %124, align 4, !tbaa !9
  %126 = icmp slt i32 %125, 0
  br i1 %126, label %127, label %129

127:                                              ; preds = %123
  %128 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -5, ptr %128, align 4, !tbaa !9
  br label %183

129:                                              ; preds = %123
  %130 = load i32, ptr %50, align 4, !tbaa !9
  %131 = icmp ne i32 %130, 0
  br i1 %131, label %132, label %145

132:                                              ; preds = %129
  %133 = load ptr, ptr %25, align 8, !tbaa !5
  %134 = load i32, ptr %133, align 4, !tbaa !9
  %135 = icmp sgt i32 %134, 0
  br i1 %135, label %136, label %144

136:                                              ; preds = %132
  %137 = load ptr, ptr %29, align 8, !tbaa !5
  %138 = load double, ptr %137, align 8, !tbaa !11
  %139 = load ptr, ptr %28, align 8, !tbaa !5
  %140 = load double, ptr %139, align 8, !tbaa !11
  %141 = fcmp ole double %138, %140
  br i1 %141, label %142, label %144

142:                                              ; preds = %136
  %143 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -9, ptr %143, align 4, !tbaa !9
  br label %144

144:                                              ; preds = %142, %136, %132
  br label %182

145:                                              ; preds = %129
  %146 = load i32, ptr %49, align 4, !tbaa !9
  %147 = icmp ne i32 %146, 0
  br i1 %147, label %148, label %181

148:                                              ; preds = %145
  %149 = load ptr, ptr %30, align 8, !tbaa !5
  %150 = load i32, ptr %149, align 4, !tbaa !9
  %151 = icmp slt i32 %150, 1
  br i1 %151, label %152, label %154

152:                                              ; preds = %148
  %153 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -10, ptr %153, align 4, !tbaa !9
  br label %180

154:                                              ; preds = %148
  %155 = load ptr, ptr %31, align 8, !tbaa !5
  %156 = load i32, ptr %155, align 4, !tbaa !9
  %157 = load ptr, ptr %25, align 8, !tbaa !5
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = load ptr, ptr %30, align 8, !tbaa !5
  %160 = load i32, ptr %159, align 4, !tbaa !9
  %161 = icmp sle i32 %158, %160
  br i1 %161, label %162, label %165

162:                                              ; preds = %154
  %163 = load ptr, ptr %25, align 8, !tbaa !5
  %164 = load i32, ptr %163, align 4, !tbaa !9
  br label %168

165:                                              ; preds = %154
  %166 = load ptr, ptr %30, align 8, !tbaa !5
  %167 = load i32, ptr %166, align 4, !tbaa !9
  br label %168

168:                                              ; preds = %165, %162
  %169 = phi i32 [ %164, %162 ], [ %167, %165 ]
  %170 = icmp slt i32 %156, %169
  br i1 %170, label %177, label %171

171:                                              ; preds = %168
  %172 = load ptr, ptr %31, align 8, !tbaa !5
  %173 = load i32, ptr %172, align 4, !tbaa !9
  %174 = load ptr, ptr %25, align 8, !tbaa !5
  %175 = load i32, ptr %174, align 4, !tbaa !9
  %176 = icmp sgt i32 %173, %175
  br i1 %176, label %177, label %179

177:                                              ; preds = %171, %168
  %178 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -11, ptr %178, align 4, !tbaa !9
  br label %179

179:                                              ; preds = %177, %171
  br label %180

180:                                              ; preds = %179, %152
  br label %181

181:                                              ; preds = %180, %145
  br label %182

182:                                              ; preds = %181, %144
  br label %183

183:                                              ; preds = %182, %127
  br label %184

184:                                              ; preds = %183, %121
  br label %185

185:                                              ; preds = %184, %112
  br label %186

186:                                              ; preds = %185, %101
  br label %187

187:                                              ; preds = %186, %92
  %188 = load ptr, ptr %40, align 8, !tbaa !5
  %189 = load i32, ptr %188, align 4, !tbaa !9
  %190 = icmp eq i32 %189, 0
  br i1 %190, label %191, label %207

191:                                              ; preds = %187
  %192 = load ptr, ptr %36, align 8, !tbaa !5
  %193 = load i32, ptr %192, align 4, !tbaa !9
  %194 = icmp slt i32 %193, 1
  br i1 %194, label %204, label %195

195:                                              ; preds = %191
  %196 = load i32, ptr %47, align 4, !tbaa !9
  %197 = icmp ne i32 %196, 0
  br i1 %197, label %198, label %206

198:                                              ; preds = %195
  %199 = load ptr, ptr %36, align 8, !tbaa !5
  %200 = load i32, ptr %199, align 4, !tbaa !9
  %201 = load ptr, ptr %25, align 8, !tbaa !5
  %202 = load i32, ptr %201, align 4, !tbaa !9
  %203 = icmp slt i32 %200, %202
  br i1 %203, label %204, label %206

204:                                              ; preds = %198, %191
  %205 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 -16, ptr %205, align 4, !tbaa !9
  br label %206

206:                                              ; preds = %204, %198, %195
  br label %207

207:                                              ; preds = %206, %187
  %208 = load ptr, ptr %40, align 8, !tbaa !5
  %209 = load i32, ptr %208, align 4, !tbaa !9
  %210 = icmp ne i32 %209, 0
  br i1 %210, label %211, label %216

211:                                              ; preds = %207
  %212 = load ptr, ptr %40, align 8, !tbaa !5
  %213 = load i32, ptr %212, align 4, !tbaa !9
  %214 = sub nsw i32 0, %213
  store i32 %214, ptr %43, align 4, !tbaa !9
  %215 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %43, i32 noundef 6)
  store i32 1, ptr %51, align 4
  br label %361

216:                                              ; preds = %207
  %217 = load ptr, ptr %33, align 8, !tbaa !5
  store i32 0, ptr %217, align 4, !tbaa !9
  %218 = load ptr, ptr %25, align 8, !tbaa !5
  %219 = load i32, ptr %218, align 4, !tbaa !9
  %220 = icmp eq i32 %219, 0
  br i1 %220, label %221, label %222

221:                                              ; preds = %216
  store i32 1, ptr %51, align 4
  br label %361

222:                                              ; preds = %216
  %223 = load ptr, ptr %24, align 8, !tbaa !5
  %224 = load ptr, ptr %25, align 8, !tbaa !5
  %225 = load ptr, ptr %27, align 8, !tbaa !5
  %226 = getelementptr inbounds double, ptr %225, i64 1
  %227 = load ptr, ptr %40, align 8, !tbaa !5
  call void @dpptrf_(ptr noundef %223, ptr noundef %224, ptr noundef %226, ptr noundef %227)
  %228 = load ptr, ptr %40, align 8, !tbaa !5
  %229 = load i32, ptr %228, align 4, !tbaa !9
  %230 = icmp ne i32 %229, 0
  br i1 %230, label %231, label %238

231:                                              ; preds = %222
  %232 = load ptr, ptr %25, align 8, !tbaa !5
  %233 = load i32, ptr %232, align 4, !tbaa !9
  %234 = load ptr, ptr %40, align 8, !tbaa !5
  %235 = load i32, ptr %234, align 4, !tbaa !9
  %236 = add nsw i32 %233, %235
  %237 = load ptr, ptr %40, align 8, !tbaa !5
  store i32 %236, ptr %237, align 4, !tbaa !9
  store i32 1, ptr %51, align 4
  br label %361

238:                                              ; preds = %222
  %239 = load ptr, ptr %21, align 8, !tbaa !5
  %240 = load ptr, ptr %24, align 8, !tbaa !5
  %241 = load ptr, ptr %25, align 8, !tbaa !5
  %242 = load ptr, ptr %26, align 8, !tbaa !5
  %243 = getelementptr inbounds double, ptr %242, i64 1
  %244 = load ptr, ptr %27, align 8, !tbaa !5
  %245 = getelementptr inbounds double, ptr %244, i64 1
  %246 = load ptr, ptr %40, align 8, !tbaa !5
  call void @dspgst_(ptr noundef %239, ptr noundef %240, ptr noundef %241, ptr noundef %243, ptr noundef %245, ptr noundef %246)
  %247 = load ptr, ptr %22, align 8, !tbaa !5
  %248 = load ptr, ptr %23, align 8, !tbaa !5
  %249 = load ptr, ptr %24, align 8, !tbaa !5
  %250 = load ptr, ptr %25, align 8, !tbaa !5
  %251 = load ptr, ptr %26, align 8, !tbaa !5
  %252 = getelementptr inbounds double, ptr %251, i64 1
  %253 = load ptr, ptr %28, align 8, !tbaa !5
  %254 = load ptr, ptr %29, align 8, !tbaa !5
  %255 = load ptr, ptr %30, align 8, !tbaa !5
  %256 = load ptr, ptr %31, align 8, !tbaa !5
  %257 = load ptr, ptr %32, align 8, !tbaa !5
  %258 = load ptr, ptr %33, align 8, !tbaa !5
  %259 = load ptr, ptr %34, align 8, !tbaa !5
  %260 = getelementptr inbounds double, ptr %259, i64 1
  %261 = load ptr, ptr %35, align 8, !tbaa !5
  %262 = load i32, ptr %42, align 4, !tbaa !9
  %263 = sext i32 %262 to i64
  %264 = getelementptr inbounds double, ptr %261, i64 %263
  %265 = load ptr, ptr %36, align 8, !tbaa !5
  %266 = load ptr, ptr %37, align 8, !tbaa !5
  %267 = getelementptr inbounds double, ptr %266, i64 1
  %268 = load ptr, ptr %38, align 8, !tbaa !5
  %269 = getelementptr inbounds i32, ptr %268, i64 1
  %270 = load ptr, ptr %39, align 8, !tbaa !5
  %271 = getelementptr inbounds i32, ptr %270, i64 1
  %272 = load ptr, ptr %40, align 8, !tbaa !5
  call void @dspevx_(ptr noundef %247, ptr noundef %248, ptr noundef %249, ptr noundef %250, ptr noundef %252, ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef %256, ptr noundef %257, ptr noundef %258, ptr noundef %260, ptr noundef %264, ptr noundef %265, ptr noundef %267, ptr noundef %269, ptr noundef %271, ptr noundef %272)
  %273 = load i32, ptr %47, align 4, !tbaa !9
  %274 = icmp ne i32 %273, 0
  br i1 %274, label %275, label %360

275:                                              ; preds = %238
  %276 = load ptr, ptr %40, align 8, !tbaa !5
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = icmp sgt i32 %277, 0
  br i1 %278, label %279, label %284

279:                                              ; preds = %275
  %280 = load ptr, ptr %40, align 8, !tbaa !5
  %281 = load i32, ptr %280, align 4, !tbaa !9
  %282 = sub nsw i32 %281, 1
  %283 = load ptr, ptr %33, align 8, !tbaa !5
  store i32 %282, ptr %283, align 4, !tbaa !9
  br label %284

284:                                              ; preds = %279, %275
  %285 = load ptr, ptr %21, align 8, !tbaa !5
  %286 = load i32, ptr %285, align 4, !tbaa !9
  %287 = icmp eq i32 %286, 1
  br i1 %287, label %292, label %288

288:                                              ; preds = %284
  %289 = load ptr, ptr %21, align 8, !tbaa !5
  %290 = load i32, ptr %289, align 4, !tbaa !9
  %291 = icmp eq i32 %290, 2
  br i1 %291, label %292, label %323

292:                                              ; preds = %288, %284
  %293 = load i32, ptr %46, align 4, !tbaa !9
  %294 = icmp ne i32 %293, 0
  br i1 %294, label %295, label %297

295:                                              ; preds = %292
  %296 = getelementptr inbounds [1 x i8], ptr %45, i64 0, i64 0
  store i8 78, ptr %296, align 1, !tbaa !13
  br label %299

297:                                              ; preds = %292
  %298 = getelementptr inbounds [1 x i8], ptr %45, i64 0, i64 0
  store i8 84, ptr %298, align 1, !tbaa !13
  br label %299

299:                                              ; preds = %297, %295
  %300 = load ptr, ptr %33, align 8, !tbaa !5
  %301 = load i32, ptr %300, align 4, !tbaa !9
  store i32 %301, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %302

302:                                              ; preds = %319, %299
  %303 = load i32, ptr %44, align 4, !tbaa !9
  %304 = load i32, ptr %43, align 4, !tbaa !9
  %305 = icmp sle i32 %303, %304
  br i1 %305, label %306, label %322

306:                                              ; preds = %302
  %307 = load ptr, ptr %24, align 8, !tbaa !5
  %308 = getelementptr inbounds [1 x i8], ptr %45, i64 0, i64 0
  %309 = load ptr, ptr %25, align 8, !tbaa !5
  %310 = load ptr, ptr %27, align 8, !tbaa !5
  %311 = getelementptr inbounds double, ptr %310, i64 1
  %312 = load ptr, ptr %35, align 8, !tbaa !5
  %313 = load i32, ptr %44, align 4, !tbaa !9
  %314 = load i32, ptr %41, align 4, !tbaa !9
  %315 = mul nsw i32 %313, %314
  %316 = add nsw i32 %315, 1
  %317 = sext i32 %316 to i64
  %318 = getelementptr inbounds double, ptr %312, i64 %317
  call void @dtpsv_(ptr noundef %307, ptr noundef %308, ptr noundef @.str.7, ptr noundef %309, ptr noundef %311, ptr noundef %318, ptr noundef @c__1)
  br label %319

319:                                              ; preds = %306
  %320 = load i32, ptr %44, align 4, !tbaa !9
  %321 = add nsw i32 %320, 1
  store i32 %321, ptr %44, align 4, !tbaa !9
  br label %302, !llvm.loop !14

322:                                              ; preds = %302
  br label %359

323:                                              ; preds = %288
  %324 = load ptr, ptr %21, align 8, !tbaa !5
  %325 = load i32, ptr %324, align 4, !tbaa !9
  %326 = icmp eq i32 %325, 3
  br i1 %326, label %327, label %358

327:                                              ; preds = %323
  %328 = load i32, ptr %46, align 4, !tbaa !9
  %329 = icmp ne i32 %328, 0
  br i1 %329, label %330, label %332

330:                                              ; preds = %327
  %331 = getelementptr inbounds [1 x i8], ptr %45, i64 0, i64 0
  store i8 84, ptr %331, align 1, !tbaa !13
  br label %334

332:                                              ; preds = %327
  %333 = getelementptr inbounds [1 x i8], ptr %45, i64 0, i64 0
  store i8 78, ptr %333, align 1, !tbaa !13
  br label %334

334:                                              ; preds = %332, %330
  %335 = load ptr, ptr %33, align 8, !tbaa !5
  %336 = load i32, ptr %335, align 4, !tbaa !9
  store i32 %336, ptr %43, align 4, !tbaa !9
  store i32 1, ptr %44, align 4, !tbaa !9
  br label %337

337:                                              ; preds = %354, %334
  %338 = load i32, ptr %44, align 4, !tbaa !9
  %339 = load i32, ptr %43, align 4, !tbaa !9
  %340 = icmp sle i32 %338, %339
  br i1 %340, label %341, label %357

341:                                              ; preds = %337
  %342 = load ptr, ptr %24, align 8, !tbaa !5
  %343 = getelementptr inbounds [1 x i8], ptr %45, i64 0, i64 0
  %344 = load ptr, ptr %25, align 8, !tbaa !5
  %345 = load ptr, ptr %27, align 8, !tbaa !5
  %346 = getelementptr inbounds double, ptr %345, i64 1
  %347 = load ptr, ptr %35, align 8, !tbaa !5
  %348 = load i32, ptr %44, align 4, !tbaa !9
  %349 = load i32, ptr %41, align 4, !tbaa !9
  %350 = mul nsw i32 %348, %349
  %351 = add nsw i32 %350, 1
  %352 = sext i32 %351 to i64
  %353 = getelementptr inbounds double, ptr %347, i64 %352
  call void @dtpmv_(ptr noundef %342, ptr noundef %343, ptr noundef @.str.7, ptr noundef %344, ptr noundef %346, ptr noundef %353, ptr noundef @c__1)
  br label %354

354:                                              ; preds = %341
  %355 = load i32, ptr %44, align 4, !tbaa !9
  %356 = add nsw i32 %355, 1
  store i32 %356, ptr %44, align 4, !tbaa !9
  br label %337, !llvm.loop !16

357:                                              ; preds = %337
  br label %358

358:                                              ; preds = %357, %323
  br label %359

359:                                              ; preds = %358, %322
  br label %360

360:                                              ; preds = %359, %238
  store i32 1, ptr %51, align 4
  br label %361

361:                                              ; preds = %360, %231, %221, %211
  call void @llvm.lifetime.end.p0(i64 4, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  ret void
}

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

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

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

declare void @dpptrf_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dspgst_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dspevx_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dtpsv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare void @dtpmv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

; 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 = { nounwind }

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

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


; Optimized IR (opt -passes='default<O3>'):
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-i128:128-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.7 = external hidden unnamed_addr constant [9 x i8], align 1
@c__1 = external hidden global i32, align 4

; Function Attrs: nounwind uwtable
define dso_local void @dspgvx_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef %19) local_unnamed_addr #0 {
  %21 = alloca i32, align 4
  %22 = alloca [1 x i8], align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %21) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #4
  %23 = load i32, ptr %15, align 4, !tbaa !5
  %narrow = xor i32 %23, -1
  %24 = sext i32 %narrow to i64
  %25 = getelementptr inbounds double, ptr %14, i64 %24
  %26 = tail call i32 @lsame_(ptr noundef %3, ptr noundef nonnull @.str) #4
  %27 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #4
  %28 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.2) #4
  %29 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #4
  %30 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.3) #4
  store i32 0, ptr %19, align 4, !tbaa !5
  %31 = load i32, ptr %0, align 4, !tbaa !5
  %32 = add i32 %31, -4
  %or.cond141 = icmp ult i32 %32, -3
  br i1 %or.cond141, label %.thread147.sink.split, label %33

33:                                               ; preds = %20
  %.not = icmp ne i32 %27, 0
  br i1 %.not, label %36, label %34

34:                                               ; preds = %33
  %35 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.4) #4
  %.not127 = icmp eq i32 %35, 0
  br i1 %.not127, label %.thread147.sink.split, label %36

36:                                               ; preds = %34, %33
  %37 = icmp ne i32 %28, 0
  %38 = icmp ne i32 %29, 0
  %or.cond = select i1 %37, i1 true, i1 %38
  %39 = icmp ne i32 %30, 0
  %or.cond3 = select i1 %or.cond, i1 true, i1 %39
  br i1 %or.cond3, label %40, label %.thread147.sink.split

40:                                               ; preds = %36
  %.not128 = icmp eq i32 %26, 0
  br i1 %.not128, label %41, label %43

41:                                               ; preds = %40
  %42 = tail call i32 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.5) #4
  %.not129 = icmp eq i32 %42, 0
  br i1 %.not129, label %.thread147.sink.split, label %43

43:                                               ; preds = %41, %40
  %44 = load i32, ptr %4, align 4, !tbaa !5
  %45 = icmp slt i32 %44, 0
  br i1 %45, label %.thread147.sink.split, label %46

46:                                               ; preds = %43
  br i1 %38, label %47, label %52

47:                                               ; preds = %46
  %.not131 = icmp eq i32 %44, 0
  br i1 %.not131, label %60, label %48

48:                                               ; preds = %47
  %49 = load double, ptr %8, align 8, !tbaa !9
  %50 = load double, ptr %7, align 8, !tbaa !9
  %51 = fcmp ugt double %49, %50
  br i1 %51, label %60, label %.thread147.sink.split

52:                                               ; preds = %46
  br i1 %39, label %53, label %60

53:                                               ; preds = %52
  %54 = load i32, ptr %9, align 4, !tbaa !5
  %55 = icmp slt i32 %54, 1
  br i1 %55, label %.thread147.sink.split, label %56

56:                                               ; preds = %53
  %57 = load i32, ptr %10, align 4, !tbaa !5
  %. = tail call i32 @llvm.umin.i32(i32 %44, i32 %54)
  %58 = icmp slt i32 %57, %.
  %59 = icmp ugt i32 %57, %44
  %or.cond151 = or i1 %58, %59
  br i1 %or.cond151, label %.thread147.sink.split, label %60

60:                                               ; preds = %56, %48, %47, %52
  %.pr = load i32, ptr %19, align 4, !tbaa !5
  %61 = icmp eq i32 %.pr, 0
  br i1 %61, label %62, label %.thread147

62:                                               ; preds = %60
  %63 = load i32, ptr %15, align 4, !tbaa !5
  %64 = icmp slt i32 %63, 1
  %65 = icmp ult i32 %63, %44
  %or.cond166 = and i1 %.not, %65
  %or.cond168 = or i1 %64, %or.cond166
  br i1 %or.cond168, label %.thread147.sink.split, label %.thread

.thread147.sink.split:                            ; preds = %62, %56, %53, %48, %43, %41, %36, %34, %20
  %.sink = phi i32 [ -1, %20 ], [ -2, %34 ], [ -3, %36 ], [ -4, %41 ], [ -5, %43 ], [ -9, %48 ], [ -10, %53 ], [ -11, %56 ], [ -16, %62 ]
  store i32 %.sink, ptr %19, align 4, !tbaa !5
  br label %.thread147

.thread147:                                       ; preds = %.thread147.sink.split, %60
  %66 = phi i32 [ %.pr, %60 ], [ %.sink, %.thread147.sink.split ]
  %67 = sub nsw i32 0, %66
  store i32 %67, ptr %21, align 4, !tbaa !5
  %68 = call i32 @xerbla_(ptr noundef nonnull @.str.6, ptr noundef nonnull %21, i32 noundef 6) #4
  br label %.loopexit

.thread:                                          ; preds = %62
  store i32 0, ptr %12, align 4, !tbaa !5
  %69 = load i32, ptr %4, align 4, !tbaa !5
  %70 = icmp eq i32 %69, 0
  br i1 %70, label %.loopexit, label %71

71:                                               ; preds = %.thread
  tail call void @dpptrf_(ptr noundef %3, ptr noundef nonnull %4, ptr noundef %6, ptr noundef nonnull %19) #4
  %72 = load i32, ptr %19, align 4, !tbaa !5
  %.not134 = icmp eq i32 %72, 0
  br i1 %.not134, label %76, label %73

73:                                               ; preds = %71
  %74 = load i32, ptr %4, align 4, !tbaa !5
  %75 = add nsw i32 %74, %72
  store i32 %75, ptr %19, align 4, !tbaa !5
  br label %.loopexit

76:                                               ; preds = %71
  tail call void @dspgst_(ptr noundef nonnull %0, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %19) #4
  tail call void @dspevx_(ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef nonnull %12, ptr noundef %13, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %16, ptr noundef %17, ptr noundef %18, ptr noundef nonnull %19) #4
  br i1 %.not, label %77, label %.loopexit

77:                                               ; preds = %76
  %78 = load i32, ptr %19, align 4, !tbaa !5
  %79 = icmp sgt i32 %78, 0
  br i1 %79, label %80, label %82

80:                                               ; preds = %77
  %81 = add nsw i32 %78, -1
  store i32 %81, ptr %12, align 4, !tbaa !5
  br label %82

82:                                               ; preds = %80, %77
  %83 = load i32, ptr %0, align 4, !tbaa !5
  switch i32 %83, label %.loopexit [
    i32 1, label %84
    i32 2, label %84
    i32 3, label %89
  ]

84:                                               ; preds = %82, %82
  %.142 = select i1 %.not128, i8 84, i8 78
  store i8 %.142, ptr %22, align 1, !tbaa !11
  %85 = load i32, ptr %12, align 4, !tbaa !5
  %invariant.gep155 = getelementptr i8, ptr %25, i64 8
  %.not140157 = icmp slt i32 %85, 1
  br i1 %.not140157, label %.loopexit, label %.lr.ph159.preheader

.lr.ph159.preheader:                              ; preds = %84
  %86 = sext i32 %23 to i64
  %87 = zext nneg i32 %85 to i64
  br label %.lr.ph159

.lr.ph159:                                        ; preds = %.lr.ph159.preheader, %.lr.ph159
  %indvars.iv162 = phi i64 [ 1, %.lr.ph159.preheader ], [ %indvars.iv.next163, %.lr.ph159 ]
  %88 = mul nsw i64 %indvars.iv162, %86
  %gep156 = getelementptr double, ptr %invariant.gep155, i64 %88
  call void @dtpsv_(ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef %6, ptr noundef %gep156, ptr noundef nonnull @c__1) #4
  %indvars.iv.next163 = add nuw nsw i64 %indvars.iv162, 1
  %.not140.not = icmp ult i64 %indvars.iv162, %87
  br i1 %.not140.not, label %.lr.ph159, label %.loopexit, !llvm.loop !12

89:                                               ; preds = %82
  %.143 = select i1 %.not128, i8 78, i8 84
  store i8 %.143, ptr %22, align 1, !tbaa !11
  %90 = load i32, ptr %12, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %25, i64 8
  %.not137153 = icmp slt i32 %90, 1
  br i1 %.not137153, label %.loopexit, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %89
  %91 = sext i32 %23 to i64
  %92 = zext nneg i32 %90 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %93 = mul nsw i64 %indvars.iv, %91
  %gep = getelementptr double, ptr %invariant.gep, i64 %93
  call void @dtpmv_(ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef %6, ptr noundef %gep, ptr noundef nonnull @c__1) #4
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %.not137.not = icmp ult i64 %indvars.iv, %92
  br i1 %.not137.not, label %.lr.ph, label %.loopexit, !llvm.loop !14

.loopexit:                                        ; preds = %.lr.ph, %.lr.ph159, %89, %84, %76, %82, %.thread, %73, %.thread147
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %21) #4
  ret void
}

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

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

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

declare void @dpptrf_(ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dspgst_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dspevx_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dtpsv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare void @dtpmv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

; 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.umin.i32(i32, i32) #3

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


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