; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (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 i64, align 8

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

87:                                               ; preds = %20
  %88 = load ptr, ptr %22, align 8, !tbaa !5
  %89 = load i64, ptr %88, align 8, !tbaa !9
  %90 = icmp sgt i64 %89, 3
  br i1 %90, label %91, label %93

91:                                               ; preds = %87, %20
  %92 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -1, ptr %92, align 8, !tbaa !9
  br label %186

93:                                               ; preds = %87
  %94 = load i64, ptr %48, align 8, !tbaa !9
  %95 = icmp ne i64 %94, 0
  br i1 %95, label %102, label %96

96:                                               ; preds = %93
  %97 = load ptr, ptr %23, align 8, !tbaa !5
  %98 = call i64 @lsame_(ptr noundef %97, ptr noundef @.str.4)
  %99 = icmp ne i64 %98, 0
  br i1 %99, label %102, label %100

100:                                              ; preds = %96
  %101 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -2, ptr %101, align 8, !tbaa !9
  br label %185

102:                                              ; preds = %96, %93
  %103 = load i64, ptr %49, align 8, !tbaa !9
  %104 = icmp ne i64 %103, 0
  br i1 %104, label %113, label %105

105:                                              ; preds = %102
  %106 = load i64, ptr %51, align 8, !tbaa !9
  %107 = icmp ne i64 %106, 0
  br i1 %107, label %113, label %108

108:                                              ; preds = %105
  %109 = load i64, ptr %50, align 8, !tbaa !9
  %110 = icmp ne i64 %109, 0
  br i1 %110, label %113, label %111

111:                                              ; preds = %108
  %112 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -3, ptr %112, align 8, !tbaa !9
  br label %184

113:                                              ; preds = %108, %105, %102
  %114 = load i64, ptr %47, align 8, !tbaa !9
  %115 = icmp ne i64 %114, 0
  br i1 %115, label %122, label %116

116:                                              ; preds = %113
  %117 = load ptr, ptr %25, align 8, !tbaa !5
  %118 = call i64 @lsame_(ptr noundef %117, ptr noundef @.str.5)
  %119 = icmp ne i64 %118, 0
  br i1 %119, label %122, label %120

120:                                              ; preds = %116
  %121 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -4, ptr %121, align 8, !tbaa !9
  br label %183

122:                                              ; preds = %116, %113
  %123 = load ptr, ptr %26, align 8, !tbaa !5
  %124 = load i64, ptr %123, align 8, !tbaa !9
  %125 = icmp slt i64 %124, 0
  br i1 %125, label %126, label %128

126:                                              ; preds = %122
  %127 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -5, ptr %127, align 8, !tbaa !9
  br label %182

128:                                              ; preds = %122
  %129 = load i64, ptr %51, align 8, !tbaa !9
  %130 = icmp ne i64 %129, 0
  br i1 %130, label %131, label %144

131:                                              ; preds = %128
  %132 = load ptr, ptr %26, align 8, !tbaa !5
  %133 = load i64, ptr %132, align 8, !tbaa !9
  %134 = icmp sgt i64 %133, 0
  br i1 %134, label %135, label %143

135:                                              ; preds = %131
  %136 = load ptr, ptr %30, align 8, !tbaa !5
  %137 = load double, ptr %136, align 8, !tbaa !11
  %138 = load ptr, ptr %29, align 8, !tbaa !5
  %139 = load double, ptr %138, align 8, !tbaa !11
  %140 = fcmp ole double %137, %139
  br i1 %140, label %141, label %143

141:                                              ; preds = %135
  %142 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -9, ptr %142, align 8, !tbaa !9
  br label %143

143:                                              ; preds = %141, %135, %131
  br label %181

144:                                              ; preds = %128
  %145 = load i64, ptr %50, align 8, !tbaa !9
  %146 = icmp ne i64 %145, 0
  br i1 %146, label %147, label %180

147:                                              ; preds = %144
  %148 = load ptr, ptr %31, align 8, !tbaa !5
  %149 = load i64, ptr %148, align 8, !tbaa !9
  %150 = icmp slt i64 %149, 1
  br i1 %150, label %151, label %153

151:                                              ; preds = %147
  %152 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -10, ptr %152, align 8, !tbaa !9
  br label %179

153:                                              ; preds = %147
  %154 = load ptr, ptr %32, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = load ptr, ptr %26, align 8, !tbaa !5
  %157 = load i64, ptr %156, align 8, !tbaa !9
  %158 = load ptr, ptr %31, align 8, !tbaa !5
  %159 = load i64, ptr %158, align 8, !tbaa !9
  %160 = icmp sle i64 %157, %159
  br i1 %160, label %161, label %164

161:                                              ; preds = %153
  %162 = load ptr, ptr %26, align 8, !tbaa !5
  %163 = load i64, ptr %162, align 8, !tbaa !9
  br label %167

164:                                              ; preds = %153
  %165 = load ptr, ptr %31, align 8, !tbaa !5
  %166 = load i64, ptr %165, align 8, !tbaa !9
  br label %167

167:                                              ; preds = %164, %161
  %168 = phi i64 [ %163, %161 ], [ %166, %164 ]
  %169 = icmp slt i64 %155, %168
  br i1 %169, label %176, label %170

170:                                              ; preds = %167
  %171 = load ptr, ptr %32, align 8, !tbaa !5
  %172 = load i64, ptr %171, align 8, !tbaa !9
  %173 = load ptr, ptr %26, align 8, !tbaa !5
  %174 = load i64, ptr %173, align 8, !tbaa !9
  %175 = icmp sgt i64 %172, %174
  br i1 %175, label %176, label %178

176:                                              ; preds = %170, %167
  %177 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -11, ptr %177, align 8, !tbaa !9
  br label %178

178:                                              ; preds = %176, %170
  br label %179

179:                                              ; preds = %178, %151
  br label %180

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

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

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

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

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

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

186:                                              ; preds = %185, %91
  %187 = load ptr, ptr %41, align 8, !tbaa !5
  %188 = load i64, ptr %187, align 8, !tbaa !9
  %189 = icmp eq i64 %188, 0
  br i1 %189, label %190, label %206

190:                                              ; preds = %186
  %191 = load ptr, ptr %37, align 8, !tbaa !5
  %192 = load i64, ptr %191, align 8, !tbaa !9
  %193 = icmp slt i64 %192, 1
  br i1 %193, label %203, label %194

194:                                              ; preds = %190
  %195 = load i64, ptr %48, align 8, !tbaa !9
  %196 = icmp ne i64 %195, 0
  br i1 %196, label %197, label %205

197:                                              ; preds = %194
  %198 = load ptr, ptr %37, align 8, !tbaa !5
  %199 = load i64, ptr %198, align 8, !tbaa !9
  %200 = load ptr, ptr %26, align 8, !tbaa !5
  %201 = load i64, ptr %200, align 8, !tbaa !9
  %202 = icmp slt i64 %199, %201
  br i1 %202, label %203, label %205

203:                                              ; preds = %197, %190
  %204 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 -16, ptr %204, align 8, !tbaa !9
  br label %205

205:                                              ; preds = %203, %197, %194
  br label %206

206:                                              ; preds = %205, %186
  %207 = load ptr, ptr %41, align 8, !tbaa !5
  %208 = load i64, ptr %207, align 8, !tbaa !9
  %209 = icmp ne i64 %208, 0
  br i1 %209, label %210, label %215

210:                                              ; preds = %206
  %211 = load ptr, ptr %41, align 8, !tbaa !5
  %212 = load i64, ptr %211, align 8, !tbaa !9
  %213 = sub nsw i64 0, %212
  store i64 %213, ptr %44, align 8, !tbaa !9
  %214 = call i32 @xerbla_(ptr noundef @.str.6, ptr noundef %44)
  store i32 0, ptr %21, align 4
  store i32 1, ptr %52, align 4
  br label %362

215:                                              ; preds = %206
  %216 = load ptr, ptr %34, align 8, !tbaa !5
  store i64 0, ptr %216, align 8, !tbaa !9
  %217 = load ptr, ptr %26, align 8, !tbaa !5
  %218 = load i64, ptr %217, align 8, !tbaa !9
  %219 = icmp eq i64 %218, 0
  br i1 %219, label %220, label %221

220:                                              ; preds = %215
  store i32 0, ptr %21, align 4
  store i32 1, ptr %52, align 4
  br label %362

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

231:                                              ; preds = %221
  %232 = load ptr, ptr %26, align 8, !tbaa !5
  %233 = load i64, ptr %232, align 8, !tbaa !9
  %234 = load ptr, ptr %41, align 8, !tbaa !5
  %235 = load i64, ptr %234, align 8, !tbaa !9
  %236 = add nsw i64 %233, %235
  %237 = load ptr, ptr %41, align 8, !tbaa !5
  store i64 %236, ptr %237, align 8, !tbaa !9
  store i32 0, ptr %21, align 4
  store i32 1, ptr %52, align 4
  br label %362

238:                                              ; preds = %221
  %239 = load ptr, ptr %22, align 8, !tbaa !5
  %240 = load ptr, ptr %25, align 8, !tbaa !5
  %241 = load ptr, ptr %26, align 8, !tbaa !5
  %242 = load ptr, ptr %27, align 8, !tbaa !5
  %243 = getelementptr inbounds double, ptr %242, i64 1
  %244 = load ptr, ptr %28, align 8, !tbaa !5
  %245 = getelementptr inbounds double, ptr %244, i64 1
  %246 = load ptr, ptr %41, align 8, !tbaa !5
  %247 = call i32 @dspgst_(ptr noundef %239, ptr noundef %240, ptr noundef %241, ptr noundef %243, ptr noundef %245, ptr noundef %246)
  %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 = load ptr, ptr %27, align 8, !tbaa !5
  %253 = getelementptr inbounds double, ptr %252, i64 1
  %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 = load ptr, ptr %35, align 8, !tbaa !5
  %261 = getelementptr inbounds double, ptr %260, i64 1
  %262 = load ptr, ptr %36, align 8, !tbaa !5
  %263 = load i64, ptr %43, align 8, !tbaa !9
  %264 = getelementptr inbounds double, ptr %262, i64 %263
  %265 = load ptr, ptr %37, align 8, !tbaa !5
  %266 = load ptr, ptr %38, align 8, !tbaa !5
  %267 = getelementptr inbounds double, ptr %266, i64 1
  %268 = load ptr, ptr %39, align 8, !tbaa !5
  %269 = getelementptr inbounds i64, ptr %268, i64 1
  %270 = load ptr, ptr %40, align 8, !tbaa !5
  %271 = getelementptr inbounds i64, ptr %270, i64 1
  %272 = load ptr, ptr %41, align 8, !tbaa !5
  %273 = call i32 @dspevx_(ptr noundef %248, ptr noundef %249, ptr noundef %250, ptr noundef %251, ptr noundef %253, ptr noundef %254, ptr noundef %255, ptr noundef %256, ptr noundef %257, ptr noundef %258, ptr noundef %259, ptr noundef %261, ptr noundef %264, ptr noundef %265, ptr noundef %267, ptr noundef %269, ptr noundef %271, ptr noundef %272)
  %274 = load i64, ptr %48, align 8, !tbaa !9
  %275 = icmp ne i64 %274, 0
  br i1 %275, label %276, label %361

276:                                              ; preds = %238
  %277 = load ptr, ptr %41, align 8, !tbaa !5
  %278 = load i64, ptr %277, align 8, !tbaa !9
  %279 = icmp sgt i64 %278, 0
  br i1 %279, label %280, label %285

280:                                              ; preds = %276
  %281 = load ptr, ptr %41, align 8, !tbaa !5
  %282 = load i64, ptr %281, align 8, !tbaa !9
  %283 = sub nsw i64 %282, 1
  %284 = load ptr, ptr %34, align 8, !tbaa !5
  store i64 %283, ptr %284, align 8, !tbaa !9
  br label %285

285:                                              ; preds = %280, %276
  %286 = load ptr, ptr %22, align 8, !tbaa !5
  %287 = load i64, ptr %286, align 8, !tbaa !9
  %288 = icmp eq i64 %287, 1
  br i1 %288, label %293, label %289

289:                                              ; preds = %285
  %290 = load ptr, ptr %22, align 8, !tbaa !5
  %291 = load i64, ptr %290, align 8, !tbaa !9
  %292 = icmp eq i64 %291, 2
  br i1 %292, label %293, label %324

293:                                              ; preds = %289, %285
  %294 = load i64, ptr %47, align 8, !tbaa !9
  %295 = icmp ne i64 %294, 0
  br i1 %295, label %296, label %298

296:                                              ; preds = %293
  %297 = getelementptr inbounds [1 x i8], ptr %46, i64 0, i64 0
  store i8 78, ptr %297, align 1, !tbaa !13
  br label %300

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

300:                                              ; preds = %298, %296
  %301 = load ptr, ptr %34, align 8, !tbaa !5
  %302 = load i64, ptr %301, align 8, !tbaa !9
  store i64 %302, ptr %44, align 8, !tbaa !9
  store i64 1, ptr %45, align 8, !tbaa !9
  br label %303

303:                                              ; preds = %320, %300
  %304 = load i64, ptr %45, align 8, !tbaa !9
  %305 = load i64, ptr %44, align 8, !tbaa !9
  %306 = icmp sle i64 %304, %305
  br i1 %306, label %307, label %323

307:                                              ; preds = %303
  %308 = load ptr, ptr %25, align 8, !tbaa !5
  %309 = getelementptr inbounds [1 x i8], ptr %46, i64 0, i64 0
  %310 = load ptr, ptr %26, align 8, !tbaa !5
  %311 = load ptr, ptr %28, align 8, !tbaa !5
  %312 = getelementptr inbounds double, ptr %311, i64 1
  %313 = load ptr, ptr %36, align 8, !tbaa !5
  %314 = load i64, ptr %45, align 8, !tbaa !9
  %315 = load i64, ptr %42, align 8, !tbaa !9
  %316 = mul nsw i64 %314, %315
  %317 = add nsw i64 %316, 1
  %318 = getelementptr inbounds double, ptr %313, i64 %317
  %319 = call i32 @f2c_dtpsv(ptr noundef %308, ptr noundef %309, ptr noundef @.str.7, ptr noundef %310, ptr noundef %312, ptr noundef %318, ptr noundef @c__1)
  br label %320

320:                                              ; preds = %307
  %321 = load i64, ptr %45, align 8, !tbaa !9
  %322 = add nsw i64 %321, 1
  store i64 %322, ptr %45, align 8, !tbaa !9
  br label %303, !llvm.loop !14

323:                                              ; preds = %303
  br label %360

324:                                              ; preds = %289
  %325 = load ptr, ptr %22, align 8, !tbaa !5
  %326 = load i64, ptr %325, align 8, !tbaa !9
  %327 = icmp eq i64 %326, 3
  br i1 %327, label %328, label %359

328:                                              ; preds = %324
  %329 = load i64, ptr %47, align 8, !tbaa !9
  %330 = icmp ne i64 %329, 0
  br i1 %330, label %331, label %333

331:                                              ; preds = %328
  %332 = getelementptr inbounds [1 x i8], ptr %46, i64 0, i64 0
  store i8 84, ptr %332, align 1, !tbaa !13
  br label %335

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

335:                                              ; preds = %333, %331
  %336 = load ptr, ptr %34, align 8, !tbaa !5
  %337 = load i64, ptr %336, align 8, !tbaa !9
  store i64 %337, ptr %44, align 8, !tbaa !9
  store i64 1, ptr %45, align 8, !tbaa !9
  br label %338

338:                                              ; preds = %355, %335
  %339 = load i64, ptr %45, align 8, !tbaa !9
  %340 = load i64, ptr %44, align 8, !tbaa !9
  %341 = icmp sle i64 %339, %340
  br i1 %341, label %342, label %358

342:                                              ; preds = %338
  %343 = load ptr, ptr %25, align 8, !tbaa !5
  %344 = getelementptr inbounds [1 x i8], ptr %46, i64 0, i64 0
  %345 = load ptr, ptr %26, align 8, !tbaa !5
  %346 = load ptr, ptr %28, align 8, !tbaa !5
  %347 = getelementptr inbounds double, ptr %346, i64 1
  %348 = load ptr, ptr %36, align 8, !tbaa !5
  %349 = load i64, ptr %45, align 8, !tbaa !9
  %350 = load i64, ptr %42, align 8, !tbaa !9
  %351 = mul nsw i64 %349, %350
  %352 = add nsw i64 %351, 1
  %353 = getelementptr inbounds double, ptr %348, i64 %352
  %354 = call i32 @f2c_dtpmv(ptr noundef %343, ptr noundef %344, ptr noundef @.str.7, ptr noundef %345, ptr noundef %347, ptr noundef %353, ptr noundef @c__1)
  br label %355

355:                                              ; preds = %342
  %356 = load i64, ptr %45, align 8, !tbaa !9
  %357 = add nsw i64 %356, 1
  store i64 %357, ptr %45, align 8, !tbaa !9
  br label %338, !llvm.loop !16

358:                                              ; preds = %338
  br label %359

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

360:                                              ; preds = %359, %323
  br label %361

361:                                              ; preds = %360, %238
  store i32 0, ptr %21, align 4
  store i32 1, ptr %52, align 4
  br label %362

362:                                              ; preds = %361, %231, %220, %210
  call void @llvm.lifetime.end.p0(i64 8, ptr %51) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 1, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %42) #3
  %363 = load i32, ptr %21, align 4
  ret i32 %363
}

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

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

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

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

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

declare i32 @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 i32 @f2c_dtpsv(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) #2

declare i32 @f2c_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 = !{!"long", !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 i64, align 8

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @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 i64, align 8
  %22 = alloca [1 x i8], align 1
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %21) #4
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %22) #4
  %23 = load i64, ptr %15, align 8, !tbaa !5
  %24 = xor i64 %23, -1
  %25 = getelementptr inbounds double, ptr %14, i64 %24
  %26 = tail call i64 @lsame_(ptr noundef %3, ptr noundef nonnull @.str) #4
  %27 = tail call i64 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.1) #4
  %28 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.2) #4
  %29 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.1) #4
  %30 = tail call i64 @lsame_(ptr noundef %2, ptr noundef nonnull @.str.3) #4
  store i64 0, ptr %19, align 8, !tbaa !5
  %31 = load i64, ptr %0, align 8, !tbaa !5
  %32 = add i64 %31, -4
  %or.cond142 = icmp ult i64 %32, -3
  br i1 %or.cond142, label %.thread148.sink.split, label %33

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

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

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

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

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

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

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

47:                                               ; preds = %46
  %.not132 = icmp eq i64 %44, 0
  br i1 %.not132, 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 %.thread148.sink.split

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

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

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

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

62:                                               ; preds = %60
  %63 = load i64, ptr %15, align 8, !tbaa !5
  %64 = icmp slt i64 %63, 1
  %65 = icmp ult i64 %63, %44
  %or.cond163 = and i1 %.not, %65
  %or.cond165 = or i1 %64, %or.cond163
  br i1 %or.cond165, label %.thread148.sink.split, label %.thread

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

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

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

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

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

77:                                               ; preds = %71
  %78 = tail call i32 @dspgst_(ptr noundef nonnull %0, ptr noundef %3, ptr noundef nonnull %4, ptr noundef %5, ptr noundef %6, ptr noundef nonnull %19) #4
  %79 = tail call i32 @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 %80, label %.loopexit

80:                                               ; preds = %77
  %81 = load i64, ptr %19, align 8, !tbaa !5
  %82 = icmp sgt i64 %81, 0
  br i1 %82, label %83, label %85

83:                                               ; preds = %80
  %84 = add nsw i64 %81, -1
  store i64 %84, ptr %12, align 8, !tbaa !5
  br label %85

85:                                               ; preds = %83, %80
  %86 = load i64, ptr %0, align 8, !tbaa !5
  switch i64 %86, label %.loopexit [
    i64 1, label %87
    i64 2, label %87
    i64 3, label %92
  ]

87:                                               ; preds = %85, %85
  %.143 = select i1 %.not129, i8 84, i8 78
  store i8 %.143, ptr %22, align 1, !tbaa !11
  %88 = load i64, ptr %12, align 8, !tbaa !5
  %invariant.gep156 = getelementptr i8, ptr %25, i64 8
  %.not141158 = icmp slt i64 %88, 1
  br i1 %.not141158, label %.loopexit, label %.lr.ph160

.lr.ph160:                                        ; preds = %87, %.lr.ph160
  %.0120159 = phi i64 [ %91, %.lr.ph160 ], [ 1, %87 ]
  %89 = mul nsw i64 %.0120159, %23
  %gep157 = getelementptr double, ptr %invariant.gep156, i64 %89
  %90 = call i32 @f2c_dtpsv(ptr noundef %3, ptr noundef nonnull %22, ptr noundef nonnull @.str.7, ptr noundef nonnull %4, ptr noundef %6, ptr noundef %gep157, ptr noundef nonnull @c__1) #4
  %91 = add nuw nsw i64 %.0120159, 1
  %.not141.not = icmp slt i64 %.0120159, %88
  br i1 %.not141.not, label %.lr.ph160, label %.loopexit, !llvm.loop !12

92:                                               ; preds = %85
  %.144 = select i1 %.not129, i8 78, i8 84
  store i8 %.144, ptr %22, align 1, !tbaa !11
  %93 = load i64, ptr %12, align 8, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %25, i64 8
  %.not138154 = icmp slt i64 %93, 1
  br i1 %.not138154, label %.loopexit, label %.lr.ph

.lr.ph:                                           ; preds = %92, %.lr.ph
  %.1155 = phi i64 [ %96, %.lr.ph ], [ 1, %92 ]
  %94 = mul nsw i64 %.1155, %23
  %gep = getelementptr double, ptr %invariant.gep, i64 %94
  %95 = call i32 @f2c_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
  %96 = add nuw nsw i64 %.1155, 1
  %.not138.not = icmp slt i64 %.1155, %93
  br i1 %.not138.not, label %.lr.ph, label %.loopexit, !llvm.loop !14

.loopexit:                                        ; preds = %.lr.ph, %.lr.ph160, %92, %87, %77, %85, %.thread, %74, %.thread148
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %22) #4
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %21) #4
  ret i32 0
}

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

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

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

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

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

declare i32 @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 i32 @f2c_dtpsv(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

declare i32 @f2c_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 i64 @llvm.umin.i64(i64, i64) #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 = !{!"long", !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,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LICMPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,PostOrderFunctionAttrsPass,SCCPPass,SROAPass,SimplifyCFGPass,TailCallElimPass