; LLVM IR from niuyishuai/PDCABB :: LAPACK_BLAS/LAPACK (dorglq)

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

@c__1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_n1 = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local i32 @dorglq_(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) #0 {
  %10 = alloca i32, align 4
  %11 = alloca ptr, align 8
  %12 = alloca ptr, align 8
  %13 = alloca ptr, align 8
  %14 = alloca ptr, align 8
  %15 = alloca ptr, align 8
  %16 = alloca ptr, align 8
  %17 = alloca ptr, align 8
  %18 = alloca ptr, align 8
  %19 = alloca ptr, align 8
  %20 = alloca i64, align 8
  %21 = alloca i64, align 8
  %22 = alloca i64, align 8
  %23 = alloca i64, align 8
  %24 = alloca i64, align 8
  %25 = alloca i64, align 8
  %26 = alloca i64, align 8
  %27 = alloca i64, align 8
  %28 = alloca i64, align 8
  %29 = alloca i64, align 8
  %30 = alloca i64, align 8
  %31 = alloca i64, align 8
  %32 = alloca i64, align 8
  %33 = alloca i64, align 8
  %34 = alloca i64, align 8
  %35 = alloca i64, align 8
  %36 = alloca i64, align 8
  %37 = alloca i64, align 8
  %38 = alloca i64, align 8
  %39 = alloca i32, align 4
  store ptr %0, ptr %11, align 8, !tbaa !5
  store ptr %1, ptr %12, align 8, !tbaa !5
  store ptr %2, ptr %13, align 8, !tbaa !5
  store ptr %3, ptr %14, align 8, !tbaa !5
  store ptr %4, ptr %15, align 8, !tbaa !5
  store ptr %5, ptr %16, align 8, !tbaa !5
  store ptr %6, ptr %17, align 8, !tbaa !5
  store ptr %7, ptr %18, align 8, !tbaa !5
  store ptr %8, ptr %19, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %20) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr %38) #3
  %40 = load ptr, ptr %15, align 8, !tbaa !5
  %41 = load i64, ptr %40, align 8, !tbaa !9
  store i64 %41, ptr %20, align 8, !tbaa !9
  %42 = load i64, ptr %20, align 8, !tbaa !9
  %43 = add nsw i64 1, %42
  store i64 %43, ptr %21, align 8, !tbaa !9
  %44 = load i64, ptr %21, align 8, !tbaa !9
  %45 = load ptr, ptr %14, align 8, !tbaa !5
  %46 = sub i64 0, %44
  %47 = getelementptr inbounds double, ptr %45, i64 %46
  store ptr %47, ptr %14, align 8, !tbaa !5
  %48 = load ptr, ptr %16, align 8, !tbaa !5
  %49 = getelementptr inbounds double, ptr %48, i32 -1
  store ptr %49, ptr %16, align 8, !tbaa !5
  %50 = load ptr, ptr %17, align 8, !tbaa !5
  %51 = getelementptr inbounds double, ptr %50, i32 -1
  store ptr %51, ptr %17, align 8, !tbaa !5
  %52 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 0, ptr %52, align 8, !tbaa !9
  %53 = load ptr, ptr %11, align 8, !tbaa !5
  %54 = load ptr, ptr %12, align 8, !tbaa !5
  %55 = load ptr, ptr %13, align 8, !tbaa !5
  %56 = call i64 @ilaenv_(ptr noundef @c__1, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %53, ptr noundef %54, ptr noundef %55, ptr noundef @c_n1)
  store i64 %56, ptr %29, align 8, !tbaa !9
  %57 = load ptr, ptr %11, align 8, !tbaa !5
  %58 = load i64, ptr %57, align 8, !tbaa !9
  %59 = icmp sge i64 1, %58
  br i1 %59, label %60, label %61

60:                                               ; preds = %9
  br label %64

61:                                               ; preds = %9
  %62 = load ptr, ptr %11, align 8, !tbaa !5
  %63 = load i64, ptr %62, align 8, !tbaa !9
  br label %64

64:                                               ; preds = %61, %60
  %65 = phi i64 [ 1, %60 ], [ %63, %61 ]
  %66 = load i64, ptr %29, align 8, !tbaa !9
  %67 = mul nsw i64 %65, %66
  store i64 %67, ptr %37, align 8, !tbaa !9
  %68 = load i64, ptr %37, align 8, !tbaa !9
  %69 = sitofp i64 %68 to double
  %70 = load ptr, ptr %17, align 8, !tbaa !5
  %71 = getelementptr inbounds double, ptr %70, i64 1
  store double %69, ptr %71, align 8, !tbaa !11
  %72 = load ptr, ptr %18, align 8, !tbaa !5
  %73 = load i64, ptr %72, align 8, !tbaa !9
  %74 = icmp eq i64 %73, -1
  %75 = zext i1 %74 to i32
  %76 = sext i32 %75 to i64
  store i64 %76, ptr %38, align 8, !tbaa !9
  %77 = load ptr, ptr %11, align 8, !tbaa !5
  %78 = load i64, ptr %77, align 8, !tbaa !9
  %79 = icmp slt i64 %78, 0
  br i1 %79, label %80, label %82

80:                                               ; preds = %64
  %81 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -1, ptr %81, align 8, !tbaa !9
  br label %139

82:                                               ; preds = %64
  %83 = load ptr, ptr %12, align 8, !tbaa !5
  %84 = load i64, ptr %83, align 8, !tbaa !9
  %85 = load ptr, ptr %11, align 8, !tbaa !5
  %86 = load i64, ptr %85, align 8, !tbaa !9
  %87 = icmp slt i64 %84, %86
  br i1 %87, label %88, label %90

88:                                               ; preds = %82
  %89 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -2, ptr %89, align 8, !tbaa !9
  br label %138

90:                                               ; preds = %82
  %91 = load ptr, ptr %13, align 8, !tbaa !5
  %92 = load i64, ptr %91, align 8, !tbaa !9
  %93 = icmp slt i64 %92, 0
  br i1 %93, label %100, label %94

94:                                               ; preds = %90
  %95 = load ptr, ptr %13, align 8, !tbaa !5
  %96 = load i64, ptr %95, align 8, !tbaa !9
  %97 = load ptr, ptr %11, align 8, !tbaa !5
  %98 = load i64, ptr %97, align 8, !tbaa !9
  %99 = icmp sgt i64 %96, %98
  br i1 %99, label %100, label %102

100:                                              ; preds = %94, %90
  %101 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -3, ptr %101, align 8, !tbaa !9
  br label %137

102:                                              ; preds = %94
  %103 = load ptr, ptr %15, align 8, !tbaa !5
  %104 = load i64, ptr %103, align 8, !tbaa !9
  %105 = load ptr, ptr %11, align 8, !tbaa !5
  %106 = load i64, ptr %105, align 8, !tbaa !9
  %107 = icmp sge i64 1, %106
  br i1 %107, label %108, label %109

108:                                              ; preds = %102
  br label %112

109:                                              ; preds = %102
  %110 = load ptr, ptr %11, align 8, !tbaa !5
  %111 = load i64, ptr %110, align 8, !tbaa !9
  br label %112

112:                                              ; preds = %109, %108
  %113 = phi i64 [ 1, %108 ], [ %111, %109 ]
  %114 = icmp slt i64 %104, %113
  br i1 %114, label %115, label %117

115:                                              ; preds = %112
  %116 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -5, ptr %116, align 8, !tbaa !9
  br label %136

117:                                              ; preds = %112
  %118 = load ptr, ptr %18, align 8, !tbaa !5
  %119 = load i64, ptr %118, align 8, !tbaa !9
  %120 = load ptr, ptr %11, align 8, !tbaa !5
  %121 = load i64, ptr %120, align 8, !tbaa !9
  %122 = icmp sge i64 1, %121
  br i1 %122, label %123, label %124

123:                                              ; preds = %117
  br label %127

124:                                              ; preds = %117
  %125 = load ptr, ptr %11, align 8, !tbaa !5
  %126 = load i64, ptr %125, align 8, !tbaa !9
  br label %127

127:                                              ; preds = %124, %123
  %128 = phi i64 [ 1, %123 ], [ %126, %124 ]
  %129 = icmp slt i64 %119, %128
  br i1 %129, label %130, label %135

130:                                              ; preds = %127
  %131 = load i64, ptr %38, align 8, !tbaa !9
  %132 = icmp ne i64 %131, 0
  br i1 %132, label %135, label %133

133:                                              ; preds = %130
  %134 = load ptr, ptr %19, align 8, !tbaa !5
  store i64 -8, ptr %134, align 8, !tbaa !9
  br label %135

135:                                              ; preds = %133, %130, %127
  br label %136

136:                                              ; preds = %135, %115
  br label %137

137:                                              ; preds = %136, %100
  br label %138

138:                                              ; preds = %137, %88
  br label %139

139:                                              ; preds = %138, %80
  %140 = load ptr, ptr %19, align 8, !tbaa !5
  %141 = load i64, ptr %140, align 8, !tbaa !9
  %142 = icmp ne i64 %141, 0
  br i1 %142, label %143, label %148

143:                                              ; preds = %139
  %144 = load ptr, ptr %19, align 8, !tbaa !5
  %145 = load i64, ptr %144, align 8, !tbaa !9
  %146 = sub nsw i64 0, %145
  store i64 %146, ptr %22, align 8, !tbaa !9
  %147 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %22)
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %485

148:                                              ; preds = %139
  %149 = load i64, ptr %38, align 8, !tbaa !9
  %150 = icmp ne i64 %149, 0
  br i1 %150, label %151, label %152

151:                                              ; preds = %148
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %485

152:                                              ; preds = %148
  br label %153

153:                                              ; preds = %152
  %154 = load ptr, ptr %11, align 8, !tbaa !5
  %155 = load i64, ptr %154, align 8, !tbaa !9
  %156 = icmp sle i64 %155, 0
  br i1 %156, label %157, label %160

157:                                              ; preds = %153
  %158 = load ptr, ptr %17, align 8, !tbaa !5
  %159 = getelementptr inbounds double, ptr %158, i64 1
  store double 1.000000e+00, ptr %159, align 8, !tbaa !11
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %485

160:                                              ; preds = %153
  store i64 2, ptr %34, align 8, !tbaa !9
  store i64 0, ptr %32, align 8, !tbaa !9
  %161 = load ptr, ptr %11, align 8, !tbaa !5
  %162 = load i64, ptr %161, align 8, !tbaa !9
  store i64 %162, ptr %33, align 8, !tbaa !9
  %163 = load i64, ptr %29, align 8, !tbaa !9
  %164 = icmp sgt i64 %163, 1
  br i1 %164, label %165, label %218

165:                                              ; preds = %160
  %166 = load i64, ptr %29, align 8, !tbaa !9
  %167 = load ptr, ptr %13, align 8, !tbaa !5
  %168 = load i64, ptr %167, align 8, !tbaa !9
  %169 = icmp slt i64 %166, %168
  br i1 %169, label %170, label %218

170:                                              ; preds = %165
  store i64 0, ptr %22, align 8, !tbaa !9
  %171 = load ptr, ptr %11, align 8, !tbaa !5
  %172 = load ptr, ptr %12, align 8, !tbaa !5
  %173 = load ptr, ptr %13, align 8, !tbaa !5
  %174 = call i64 @ilaenv_(ptr noundef @c__3, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %171, ptr noundef %172, ptr noundef %173, ptr noundef @c_n1)
  store i64 %174, ptr %23, align 8, !tbaa !9
  %175 = load i64, ptr %22, align 8, !tbaa !9
  %176 = load i64, ptr %23, align 8, !tbaa !9
  %177 = icmp sge i64 %175, %176
  br i1 %177, label %178, label %180

178:                                              ; preds = %170
  %179 = load i64, ptr %22, align 8, !tbaa !9
  br label %182

180:                                              ; preds = %170
  %181 = load i64, ptr %23, align 8, !tbaa !9
  br label %182

182:                                              ; preds = %180, %178
  %183 = phi i64 [ %179, %178 ], [ %181, %180 ]
  store i64 %183, ptr %32, align 8, !tbaa !9
  %184 = load i64, ptr %32, align 8, !tbaa !9
  %185 = load ptr, ptr %13, align 8, !tbaa !5
  %186 = load i64, ptr %185, align 8, !tbaa !9
  %187 = icmp slt i64 %184, %186
  br i1 %187, label %188, label %217

188:                                              ; preds = %182
  %189 = load ptr, ptr %11, align 8, !tbaa !5
  %190 = load i64, ptr %189, align 8, !tbaa !9
  store i64 %190, ptr %36, align 8, !tbaa !9
  %191 = load i64, ptr %36, align 8, !tbaa !9
  %192 = load i64, ptr %29, align 8, !tbaa !9
  %193 = mul nsw i64 %191, %192
  store i64 %193, ptr %33, align 8, !tbaa !9
  %194 = load ptr, ptr %18, align 8, !tbaa !5
  %195 = load i64, ptr %194, align 8, !tbaa !9
  %196 = load i64, ptr %33, align 8, !tbaa !9
  %197 = icmp slt i64 %195, %196
  br i1 %197, label %198, label %216

198:                                              ; preds = %188
  %199 = load ptr, ptr %18, align 8, !tbaa !5
  %200 = load i64, ptr %199, align 8, !tbaa !9
  %201 = load i64, ptr %36, align 8, !tbaa !9
  %202 = sdiv i64 %200, %201
  store i64 %202, ptr %29, align 8, !tbaa !9
  store i64 2, ptr %22, align 8, !tbaa !9
  %203 = load ptr, ptr %11, align 8, !tbaa !5
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = load ptr, ptr %13, align 8, !tbaa !5
  %206 = call i64 @ilaenv_(ptr noundef @c__2, ptr noundef @.str, ptr noundef @.str.1, ptr noundef %203, ptr noundef %204, ptr noundef %205, ptr noundef @c_n1)
  store i64 %206, ptr %23, align 8, !tbaa !9
  %207 = load i64, ptr %22, align 8, !tbaa !9
  %208 = load i64, ptr %23, align 8, !tbaa !9
  %209 = icmp sge i64 %207, %208
  br i1 %209, label %210, label %212

210:                                              ; preds = %198
  %211 = load i64, ptr %22, align 8, !tbaa !9
  br label %214

212:                                              ; preds = %198
  %213 = load i64, ptr %23, align 8, !tbaa !9
  br label %214

214:                                              ; preds = %212, %210
  %215 = phi i64 [ %211, %210 ], [ %213, %212 ]
  store i64 %215, ptr %34, align 8, !tbaa !9
  br label %216

216:                                              ; preds = %214, %188
  br label %217

217:                                              ; preds = %216, %182
  br label %218

218:                                              ; preds = %217, %165, %160
  %219 = load i64, ptr %29, align 8, !tbaa !9
  %220 = load i64, ptr %34, align 8, !tbaa !9
  %221 = icmp sge i64 %219, %220
  br i1 %221, label %222, label %286

222:                                              ; preds = %218
  %223 = load i64, ptr %29, align 8, !tbaa !9
  %224 = load ptr, ptr %13, align 8, !tbaa !5
  %225 = load i64, ptr %224, align 8, !tbaa !9
  %226 = icmp slt i64 %223, %225
  br i1 %226, label %227, label %286

227:                                              ; preds = %222
  %228 = load i64, ptr %32, align 8, !tbaa !9
  %229 = load ptr, ptr %13, align 8, !tbaa !5
  %230 = load i64, ptr %229, align 8, !tbaa !9
  %231 = icmp slt i64 %228, %230
  br i1 %231, label %232, label %286

232:                                              ; preds = %227
  %233 = load ptr, ptr %13, align 8, !tbaa !5
  %234 = load i64, ptr %233, align 8, !tbaa !9
  %235 = load i64, ptr %32, align 8, !tbaa !9
  %236 = sub nsw i64 %234, %235
  %237 = sub nsw i64 %236, 1
  %238 = load i64, ptr %29, align 8, !tbaa !9
  %239 = sdiv i64 %237, %238
  %240 = load i64, ptr %29, align 8, !tbaa !9
  %241 = mul nsw i64 %239, %240
  store i64 %241, ptr %30, align 8, !tbaa !9
  %242 = load ptr, ptr %13, align 8, !tbaa !5
  %243 = load i64, ptr %242, align 8, !tbaa !9
  store i64 %243, ptr %22, align 8, !tbaa !9
  %244 = load i64, ptr %30, align 8, !tbaa !9
  %245 = load i64, ptr %29, align 8, !tbaa !9
  %246 = add nsw i64 %244, %245
  store i64 %246, ptr %23, align 8, !tbaa !9
  %247 = load i64, ptr %22, align 8, !tbaa !9
  %248 = load i64, ptr %23, align 8, !tbaa !9
  %249 = icmp sle i64 %247, %248
  br i1 %249, label %250, label %252

250:                                              ; preds = %232
  %251 = load i64, ptr %22, align 8, !tbaa !9
  br label %254

252:                                              ; preds = %232
  %253 = load i64, ptr %23, align 8, !tbaa !9
  br label %254

254:                                              ; preds = %252, %250
  %255 = phi i64 [ %251, %250 ], [ %253, %252 ]
  store i64 %255, ptr %31, align 8, !tbaa !9
  %256 = load i64, ptr %31, align 8, !tbaa !9
  store i64 %256, ptr %22, align 8, !tbaa !9
  store i64 1, ptr %26, align 8, !tbaa !9
  br label %257

257:                                              ; preds = %282, %254
  %258 = load i64, ptr %26, align 8, !tbaa !9
  %259 = load i64, ptr %22, align 8, !tbaa !9
  %260 = icmp sle i64 %258, %259
  br i1 %260, label %261, label %285

261:                                              ; preds = %257
  %262 = load ptr, ptr %11, align 8, !tbaa !5
  %263 = load i64, ptr %262, align 8, !tbaa !9
  store i64 %263, ptr %23, align 8, !tbaa !9
  %264 = load i64, ptr %31, align 8, !tbaa !9
  %265 = add nsw i64 %264, 1
  store i64 %265, ptr %25, align 8, !tbaa !9
  br label %266

266:                                              ; preds = %278, %261
  %267 = load i64, ptr %25, align 8, !tbaa !9
  %268 = load i64, ptr %23, align 8, !tbaa !9
  %269 = icmp sle i64 %267, %268
  br i1 %269, label %270, label %281

270:                                              ; preds = %266
  %271 = load ptr, ptr %14, align 8, !tbaa !5
  %272 = load i64, ptr %25, align 8, !tbaa !9
  %273 = load i64, ptr %26, align 8, !tbaa !9
  %274 = load i64, ptr %20, align 8, !tbaa !9
  %275 = mul nsw i64 %273, %274
  %276 = add nsw i64 %272, %275
  %277 = getelementptr inbounds double, ptr %271, i64 %276
  store double 0.000000e+00, ptr %277, align 8, !tbaa !11
  br label %278

278:                                              ; preds = %270
  %279 = load i64, ptr %25, align 8, !tbaa !9
  %280 = add nsw i64 %279, 1
  store i64 %280, ptr %25, align 8, !tbaa !9
  br label %266, !llvm.loop !13

281:                                              ; preds = %266
  br label %282

282:                                              ; preds = %281
  %283 = load i64, ptr %26, align 8, !tbaa !9
  %284 = add nsw i64 %283, 1
  store i64 %284, ptr %26, align 8, !tbaa !9
  br label %257, !llvm.loop !15

285:                                              ; preds = %257
  br label %287

286:                                              ; preds = %227, %222, %218
  store i64 0, ptr %31, align 8, !tbaa !9
  br label %287

287:                                              ; preds = %286, %285
  %288 = load i64, ptr %31, align 8, !tbaa !9
  %289 = load ptr, ptr %11, align 8, !tbaa !5
  %290 = load i64, ptr %289, align 8, !tbaa !9
  %291 = icmp slt i64 %288, %290
  br i1 %291, label %292, label %322

292:                                              ; preds = %287
  %293 = load ptr, ptr %11, align 8, !tbaa !5
  %294 = load i64, ptr %293, align 8, !tbaa !9
  %295 = load i64, ptr %31, align 8, !tbaa !9
  %296 = sub nsw i64 %294, %295
  store i64 %296, ptr %22, align 8, !tbaa !9
  %297 = load ptr, ptr %12, align 8, !tbaa !5
  %298 = load i64, ptr %297, align 8, !tbaa !9
  %299 = load i64, ptr %31, align 8, !tbaa !9
  %300 = sub nsw i64 %298, %299
  store i64 %300, ptr %23, align 8, !tbaa !9
  %301 = load ptr, ptr %13, align 8, !tbaa !5
  %302 = load i64, ptr %301, align 8, !tbaa !9
  %303 = load i64, ptr %31, align 8, !tbaa !9
  %304 = sub nsw i64 %302, %303
  store i64 %304, ptr %24, align 8, !tbaa !9
  %305 = load ptr, ptr %14, align 8, !tbaa !5
  %306 = load i64, ptr %31, align 8, !tbaa !9
  %307 = add nsw i64 %306, 1
  %308 = load i64, ptr %31, align 8, !tbaa !9
  %309 = add nsw i64 %308, 1
  %310 = load i64, ptr %20, align 8, !tbaa !9
  %311 = mul nsw i64 %309, %310
  %312 = add nsw i64 %307, %311
  %313 = getelementptr inbounds double, ptr %305, i64 %312
  %314 = load ptr, ptr %15, align 8, !tbaa !5
  %315 = load ptr, ptr %16, align 8, !tbaa !5
  %316 = load i64, ptr %31, align 8, !tbaa !9
  %317 = add nsw i64 %316, 1
  %318 = getelementptr inbounds double, ptr %315, i64 %317
  %319 = load ptr, ptr %17, align 8, !tbaa !5
  %320 = getelementptr inbounds double, ptr %319, i64 1
  %321 = call i32 @dorgl2_(ptr noundef %22, ptr noundef %23, ptr noundef %24, ptr noundef %313, ptr noundef %314, ptr noundef %318, ptr noundef %320, ptr noundef %35)
  br label %322

322:                                              ; preds = %292, %287
  %323 = load i64, ptr %31, align 8, !tbaa !9
  %324 = icmp sgt i64 %323, 0
  br i1 %324, label %325, label %480

325:                                              ; preds = %322
  %326 = load i64, ptr %29, align 8, !tbaa !9
  %327 = sub nsw i64 0, %326
  store i64 %327, ptr %22, align 8, !tbaa !9
  %328 = load i64, ptr %30, align 8, !tbaa !9
  %329 = add nsw i64 %328, 1
  store i64 %329, ptr %25, align 8, !tbaa !9
  br label %330

330:                                              ; preds = %475, %325
  %331 = load i64, ptr %22, align 8, !tbaa !9
  %332 = icmp slt i64 %331, 0
  br i1 %332, label %333, label %337

333:                                              ; preds = %330
  %334 = load i64, ptr %25, align 8, !tbaa !9
  %335 = icmp sge i64 %334, 1
  %336 = zext i1 %335 to i32
  br label %341

337:                                              ; preds = %330
  %338 = load i64, ptr %25, align 8, !tbaa !9
  %339 = icmp sle i64 %338, 1
  %340 = zext i1 %339 to i32
  br label %341

341:                                              ; preds = %337, %333
  %342 = phi i32 [ %336, %333 ], [ %340, %337 ]
  %343 = icmp ne i32 %342, 0
  br i1 %343, label %344, label %479

344:                                              ; preds = %341
  %345 = load i64, ptr %29, align 8, !tbaa !9
  store i64 %345, ptr %23, align 8, !tbaa !9
  %346 = load ptr, ptr %13, align 8, !tbaa !5
  %347 = load i64, ptr %346, align 8, !tbaa !9
  %348 = load i64, ptr %25, align 8, !tbaa !9
  %349 = sub nsw i64 %347, %348
  %350 = add nsw i64 %349, 1
  store i64 %350, ptr %24, align 8, !tbaa !9
  %351 = load i64, ptr %23, align 8, !tbaa !9
  %352 = load i64, ptr %24, align 8, !tbaa !9
  %353 = icmp sle i64 %351, %352
  br i1 %353, label %354, label %356

354:                                              ; preds = %344
  %355 = load i64, ptr %23, align 8, !tbaa !9
  br label %358

356:                                              ; preds = %344
  %357 = load i64, ptr %24, align 8, !tbaa !9
  br label %358

358:                                              ; preds = %356, %354
  %359 = phi i64 [ %355, %354 ], [ %357, %356 ]
  store i64 %359, ptr %28, align 8, !tbaa !9
  %360 = load i64, ptr %25, align 8, !tbaa !9
  %361 = load i64, ptr %28, align 8, !tbaa !9
  %362 = add nsw i64 %360, %361
  %363 = load ptr, ptr %11, align 8, !tbaa !5
  %364 = load i64, ptr %363, align 8, !tbaa !9
  %365 = icmp sle i64 %362, %364
  br i1 %365, label %366, label %423

366:                                              ; preds = %358
  %367 = load ptr, ptr %12, align 8, !tbaa !5
  %368 = load i64, ptr %367, align 8, !tbaa !9
  %369 = load i64, ptr %25, align 8, !tbaa !9
  %370 = sub nsw i64 %368, %369
  %371 = add nsw i64 %370, 1
  store i64 %371, ptr %23, align 8, !tbaa !9
  %372 = load ptr, ptr %14, align 8, !tbaa !5
  %373 = load i64, ptr %25, align 8, !tbaa !9
  %374 = load i64, ptr %25, align 8, !tbaa !9
  %375 = load i64, ptr %20, align 8, !tbaa !9
  %376 = mul nsw i64 %374, %375
  %377 = add nsw i64 %373, %376
  %378 = getelementptr inbounds double, ptr %372, i64 %377
  %379 = load ptr, ptr %15, align 8, !tbaa !5
  %380 = load ptr, ptr %16, align 8, !tbaa !5
  %381 = load i64, ptr %25, align 8, !tbaa !9
  %382 = getelementptr inbounds double, ptr %380, i64 %381
  %383 = load ptr, ptr %17, align 8, !tbaa !5
  %384 = getelementptr inbounds double, ptr %383, i64 1
  %385 = call i32 @dlarft_(ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %23, ptr noundef %28, ptr noundef %378, ptr noundef %379, ptr noundef %382, ptr noundef %384, ptr noundef %36)
  %386 = load ptr, ptr %11, align 8, !tbaa !5
  %387 = load i64, ptr %386, align 8, !tbaa !9
  %388 = load i64, ptr %25, align 8, !tbaa !9
  %389 = sub nsw i64 %387, %388
  %390 = load i64, ptr %28, align 8, !tbaa !9
  %391 = sub nsw i64 %389, %390
  %392 = add nsw i64 %391, 1
  store i64 %392, ptr %23, align 8, !tbaa !9
  %393 = load ptr, ptr %12, align 8, !tbaa !5
  %394 = load i64, ptr %393, align 8, !tbaa !9
  %395 = load i64, ptr %25, align 8, !tbaa !9
  %396 = sub nsw i64 %394, %395
  %397 = add nsw i64 %396, 1
  store i64 %397, ptr %24, align 8, !tbaa !9
  %398 = load ptr, ptr %14, align 8, !tbaa !5
  %399 = load i64, ptr %25, align 8, !tbaa !9
  %400 = load i64, ptr %25, align 8, !tbaa !9
  %401 = load i64, ptr %20, align 8, !tbaa !9
  %402 = mul nsw i64 %400, %401
  %403 = add nsw i64 %399, %402
  %404 = getelementptr inbounds double, ptr %398, i64 %403
  %405 = load ptr, ptr %15, align 8, !tbaa !5
  %406 = load ptr, ptr %17, align 8, !tbaa !5
  %407 = getelementptr inbounds double, ptr %406, i64 1
  %408 = load ptr, ptr %14, align 8, !tbaa !5
  %409 = load i64, ptr %25, align 8, !tbaa !9
  %410 = load i64, ptr %28, align 8, !tbaa !9
  %411 = add nsw i64 %409, %410
  %412 = load i64, ptr %25, align 8, !tbaa !9
  %413 = load i64, ptr %20, align 8, !tbaa !9
  %414 = mul nsw i64 %412, %413
  %415 = add nsw i64 %411, %414
  %416 = getelementptr inbounds double, ptr %408, i64 %415
  %417 = load ptr, ptr %15, align 8, !tbaa !5
  %418 = load ptr, ptr %17, align 8, !tbaa !5
  %419 = load i64, ptr %28, align 8, !tbaa !9
  %420 = add nsw i64 %419, 1
  %421 = getelementptr inbounds double, ptr %418, i64 %420
  %422 = call i32 @dlarfb_(ptr noundef @.str.4, ptr noundef @.str.5, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %23, ptr noundef %24, ptr noundef %28, ptr noundef %404, ptr noundef %405, ptr noundef %407, ptr noundef %36, ptr noundef %416, ptr noundef %417, ptr noundef %421, ptr noundef %36)
  br label %423

423:                                              ; preds = %366, %358
  %424 = load ptr, ptr %12, align 8, !tbaa !5
  %425 = load i64, ptr %424, align 8, !tbaa !9
  %426 = load i64, ptr %25, align 8, !tbaa !9
  %427 = sub nsw i64 %425, %426
  %428 = add nsw i64 %427, 1
  store i64 %428, ptr %23, align 8, !tbaa !9
  %429 = load ptr, ptr %14, align 8, !tbaa !5
  %430 = load i64, ptr %25, align 8, !tbaa !9
  %431 = load i64, ptr %25, align 8, !tbaa !9
  %432 = load i64, ptr %20, align 8, !tbaa !9
  %433 = mul nsw i64 %431, %432
  %434 = add nsw i64 %430, %433
  %435 = getelementptr inbounds double, ptr %429, i64 %434
  %436 = load ptr, ptr %15, align 8, !tbaa !5
  %437 = load ptr, ptr %16, align 8, !tbaa !5
  %438 = load i64, ptr %25, align 8, !tbaa !9
  %439 = getelementptr inbounds double, ptr %437, i64 %438
  %440 = load ptr, ptr %17, align 8, !tbaa !5
  %441 = getelementptr inbounds double, ptr %440, i64 1
  %442 = call i32 @dorgl2_(ptr noundef %28, ptr noundef %23, ptr noundef %28, ptr noundef %435, ptr noundef %436, ptr noundef %439, ptr noundef %441, ptr noundef %35)
  %443 = load i64, ptr %25, align 8, !tbaa !9
  %444 = sub nsw i64 %443, 1
  store i64 %444, ptr %23, align 8, !tbaa !9
  store i64 1, ptr %26, align 8, !tbaa !9
  br label %445

445:                                              ; preds = %471, %423
  %446 = load i64, ptr %26, align 8, !tbaa !9
  %447 = load i64, ptr %23, align 8, !tbaa !9
  %448 = icmp sle i64 %446, %447
  br i1 %448, label %449, label %474

449:                                              ; preds = %445
  %450 = load i64, ptr %25, align 8, !tbaa !9
  %451 = load i64, ptr %28, align 8, !tbaa !9
  %452 = add nsw i64 %450, %451
  %453 = sub nsw i64 %452, 1
  store i64 %453, ptr %24, align 8, !tbaa !9
  %454 = load i64, ptr %25, align 8, !tbaa !9
  store i64 %454, ptr %27, align 8, !tbaa !9
  br label %455

455:                                              ; preds = %467, %449
  %456 = load i64, ptr %27, align 8, !tbaa !9
  %457 = load i64, ptr %24, align 8, !tbaa !9
  %458 = icmp sle i64 %456, %457
  br i1 %458, label %459, label %470

459:                                              ; preds = %455
  %460 = load ptr, ptr %14, align 8, !tbaa !5
  %461 = load i64, ptr %27, align 8, !tbaa !9
  %462 = load i64, ptr %26, align 8, !tbaa !9
  %463 = load i64, ptr %20, align 8, !tbaa !9
  %464 = mul nsw i64 %462, %463
  %465 = add nsw i64 %461, %464
  %466 = getelementptr inbounds double, ptr %460, i64 %465
  store double 0.000000e+00, ptr %466, align 8, !tbaa !11
  br label %467

467:                                              ; preds = %459
  %468 = load i64, ptr %27, align 8, !tbaa !9
  %469 = add nsw i64 %468, 1
  store i64 %469, ptr %27, align 8, !tbaa !9
  br label %455, !llvm.loop !16

470:                                              ; preds = %455
  br label %471

471:                                              ; preds = %470
  %472 = load i64, ptr %26, align 8, !tbaa !9
  %473 = add nsw i64 %472, 1
  store i64 %473, ptr %26, align 8, !tbaa !9
  br label %445, !llvm.loop !17

474:                                              ; preds = %445
  br label %475

475:                                              ; preds = %474
  %476 = load i64, ptr %22, align 8, !tbaa !9
  %477 = load i64, ptr %25, align 8, !tbaa !9
  %478 = add nsw i64 %477, %476
  store i64 %478, ptr %25, align 8, !tbaa !9
  br label %330, !llvm.loop !18

479:                                              ; preds = %341
  br label %480

480:                                              ; preds = %479, %322
  %481 = load i64, ptr %33, align 8, !tbaa !9
  %482 = sitofp i64 %481 to double
  %483 = load ptr, ptr %17, align 8, !tbaa !5
  %484 = getelementptr inbounds double, ptr %483, i64 1
  store double %482, ptr %484, align 8, !tbaa !11
  store i32 0, ptr %10, align 4
  store i32 1, ptr %39, align 4
  br label %485

485:                                              ; preds = %480, %157, %151, %143
  call void @llvm.lifetime.end.p0(i64 8, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %28) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %20) #3
  %486 = load i32, ptr %10, align 4
  ret i32 %486
}

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

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

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

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

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

declare i32 @dlarfb_(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

; 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 = distinct !{!13, !14}
!14 = !{!"llvm.loop.mustprogress"}
!15 = distinct !{!15, !14}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !14}
!18 = distinct !{!18, !14}


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

@c__1 = external hidden global i64, align 8
@.str = external hidden unnamed_addr constant [7 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@c_n1 = external hidden global i64, align 8
@c__3 = external hidden global i64, align 8
@c__2 = external hidden global i64, align 8
@.str.2 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [8 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local noundef i32 @dorglq_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr nocapture noundef readonly %7, ptr nocapture noundef %8) local_unnamed_addr #0 {
  %10 = alloca i64, align 8
  %11 = alloca i64, align 8
  %12 = alloca i64, align 8
  %13 = alloca i64, align 8
  %14 = alloca i64, align 8
  %15 = alloca i64, align 8
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %10) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %15) #5
  %16 = load i64, ptr %4, align 8, !tbaa !5
  %17 = xor i64 %16, -1
  %18 = getelementptr inbounds double, ptr %3, i64 %17
  %19 = getelementptr inbounds i8, ptr %5, i64 -8
  store i64 0, ptr %8, align 8, !tbaa !5
  %20 = tail call i64 @ilaenv_(ptr noundef nonnull @c__1, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef nonnull @c_n1) #5
  %21 = load i64, ptr %0, align 8, !tbaa !5
  %spec.select = tail call i64 @llvm.smax.i64(i64 %21, i64 1)
  %22 = mul nsw i64 %spec.select, %20
  %23 = sitofp i64 %22 to double
  store double %23, ptr %6, align 8, !tbaa !9
  %24 = load i64, ptr %7, align 8, !tbaa !5
  %25 = icmp eq i64 %24, -1
  %26 = icmp slt i64 %21, 0
  br i1 %26, label %.thread.sink.split, label %27

27:                                               ; preds = %9
  %28 = load i64, ptr %1, align 8, !tbaa !5
  %29 = icmp slt i64 %28, %21
  br i1 %29, label %.thread.sink.split, label %30

30:                                               ; preds = %27
  %31 = load i64, ptr %2, align 8, !tbaa !5
  %or.cond191 = icmp ugt i64 %31, %21
  br i1 %or.cond191, label %.thread.sink.split, label %32

32:                                               ; preds = %30
  %33 = load i64, ptr %4, align 8, !tbaa !5
  %34 = icmp slt i64 %33, %spec.select
  br i1 %34, label %.thread.sink.split, label %35

35:                                               ; preds = %32
  %36 = icmp sge i64 %24, %spec.select
  %or.cond = or i1 %36, %25
  br i1 %or.cond, label %37, label %.thread.sink.split

37:                                               ; preds = %35
  %.pr = load i64, ptr %8, align 8, !tbaa !5
  %.not = icmp eq i64 %.pr, 0
  br i1 %.not, label %41, label %.thread

.thread.sink.split:                               ; preds = %35, %32, %30, %27, %9
  %.sink = phi i64 [ -1, %9 ], [ -2, %27 ], [ -3, %30 ], [ -5, %32 ], [ -8, %35 ]
  store i64 %.sink, ptr %8, align 8, !tbaa !5
  br label %.thread

.thread:                                          ; preds = %.thread.sink.split, %37
  %38 = phi i64 [ %.pr, %37 ], [ %.sink, %.thread.sink.split ]
  %39 = sub nsw i64 0, %38
  store i64 %39, ptr %10, align 8, !tbaa !5
  %40 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %10) #5
  br label %170

41:                                               ; preds = %37
  br i1 %25, label %170, label %42

42:                                               ; preds = %41
  %43 = icmp eq i64 %21, 0
  br i1 %43, label %44, label %45

44:                                               ; preds = %42
  store double 1.000000e+00, ptr %6, align 8, !tbaa !9
  br label %170

45:                                               ; preds = %42
  %46 = icmp sgt i64 %20, 1
  br i1 %46, label %47, label %.thread208

47:                                               ; preds = %45
  %48 = icmp ult i64 %20, %31
  br i1 %48, label %49, label %.thread197

49:                                               ; preds = %47
  %50 = tail call i64 @ilaenv_(ptr noundef nonnull @c__3, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #5
  %51 = tail call i64 @llvm.smax.i64(i64 %50, i64 0)
  %52 = load i64, ptr %2, align 8, !tbaa !5
  %53 = icmp slt i64 %51, %52
  br i1 %53, label %54, label %.thread197

54:                                               ; preds = %49
  %55 = load i64, ptr %0, align 8, !tbaa !5
  store i64 %55, ptr %15, align 8, !tbaa !5
  %56 = mul nsw i64 %55, %20
  %57 = load i64, ptr %7, align 8, !tbaa !5
  %58 = icmp slt i64 %57, %56
  br i1 %58, label %59, label %.thread197

59:                                               ; preds = %54
  %60 = sdiv i64 %57, %55
  %61 = tail call i64 @ilaenv_(ptr noundef nonnull @c__2, ptr noundef nonnull @.str, ptr noundef nonnull @.str.1, ptr noundef nonnull %0, ptr noundef nonnull %1, ptr noundef nonnull %2, ptr noundef nonnull @c_n1) #5
  %62 = tail call i64 @llvm.smax.i64(i64 %61, i64 2)
  %.not183 = icmp slt i64 %60, %62
  br i1 %.not183, label %.thread208, label %..thread197_crit_edge

..thread197_crit_edge:                            ; preds = %59
  %.pre = load i64, ptr %2, align 8, !tbaa !5
  br label %.thread197

.thread197:                                       ; preds = %..thread197_crit_edge, %47, %49, %54
  %63 = phi i64 [ %.pre, %..thread197_crit_edge ], [ %31, %47 ], [ %52, %49 ], [ %52, %54 ]
  %.0158206 = phi i64 [ %56, %..thread197_crit_edge ], [ %21, %47 ], [ %21, %49 ], [ %56, %54 ]
  %.0159205 = phi i64 [ %51, %..thread197_crit_edge ], [ 0, %47 ], [ %51, %49 ], [ %51, %54 ]
  %.0162203 = phi i64 [ %60, %..thread197_crit_edge ], [ %20, %47 ], [ %20, %49 ], [ %20, %54 ]
  %64 = icmp slt i64 %.0162203, %63
  %65 = icmp slt i64 %.0159205, %63
  %or.cond194 = and i1 %64, %65
  br i1 %or.cond194, label %66, label %.thread208

66:                                               ; preds = %.thread197
  %67 = xor i64 %.0159205, -1
  %68 = add nsw i64 %63, %67
  %.fr = freeze i64 %68
  %69 = srem i64 %.fr, %.0162203
  %70 = sub nsw i64 %.fr, %69
  %71 = add nsw i64 %70, %.0162203
  store i64 %71, ptr %11, align 8, !tbaa !5
  %72 = tail call i64 @llvm.smin.i64(i64 %63, i64 %71)
  store i64 %72, ptr %10, align 8, !tbaa !5
  %.not185217 = icmp slt i64 %72, 1
  br i1 %.not185217, label %.thread208.loopexit, label %.lr.ph220

.lr.ph220:                                        ; preds = %66
  %73 = load i64, ptr %0, align 8, !tbaa !5
  %.not190.not215 = icmp slt i64 %72, %73
  br i1 %.not190.not215, label %.lr.ph.us.preheader, label %.thread208.loopexit

.lr.ph.us.preheader:                              ; preds = %.lr.ph220
  %74 = shl i64 %72, 3
  %75 = shl i64 %16, 3
  %76 = sub nsw i64 %73, %72
  %77 = shl i64 %76, 3
  %78 = getelementptr i8, ptr %3, i64 %74
  %xtraiter = and i64 %72, 7
  %79 = icmp ult i64 %72, 8
  br i1 %79, label %.thread208.loopexit.loopexit.unr-lcssa, label %.lr.ph.us.preheader.new

.lr.ph.us.preheader.new:                          ; preds = %.lr.ph.us.preheader
  %unroll_iter = and i64 %72, 9223372036854775800
  br label %.lr.ph.us

.lr.ph.us:                                        ; preds = %.lr.ph.us, %.lr.ph.us.preheader.new
  %indvar = phi i64 [ 0, %.lr.ph.us.preheader.new ], [ %indvar.next.7, %.lr.ph.us ]
  %niter = phi i64 [ 0, %.lr.ph.us.preheader.new ], [ %niter.next.7, %.lr.ph.us ]
  %80 = mul i64 %75, %indvar
  %scevgep = getelementptr i8, ptr %78, i64 %80
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next = or disjoint i64 %indvar, 1
  %81 = mul i64 %75, %indvar.next
  %scevgep.1 = getelementptr i8, ptr %78, i64 %81
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.1, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.1 = or disjoint i64 %indvar, 2
  %82 = mul i64 %75, %indvar.next.1
  %scevgep.2 = getelementptr i8, ptr %78, i64 %82
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.2, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.2 = or disjoint i64 %indvar, 3
  %83 = mul i64 %75, %indvar.next.2
  %scevgep.3 = getelementptr i8, ptr %78, i64 %83
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.3, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.3 = or disjoint i64 %indvar, 4
  %84 = mul i64 %75, %indvar.next.3
  %scevgep.4 = getelementptr i8, ptr %78, i64 %84
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.4, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.4 = or disjoint i64 %indvar, 5
  %85 = mul i64 %75, %indvar.next.4
  %scevgep.5 = getelementptr i8, ptr %78, i64 %85
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.5, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.5 = or disjoint i64 %indvar, 6
  %86 = mul i64 %75, %indvar.next.5
  %scevgep.6 = getelementptr i8, ptr %78, i64 %86
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.6, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.6 = or disjoint i64 %indvar, 7
  %87 = mul i64 %75, %indvar.next.6
  %scevgep.7 = getelementptr i8, ptr %78, i64 %87
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.7, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.7 = add nuw nsw i64 %indvar, 8
  %niter.next.7 = add i64 %niter, 8
  %niter.ncmp.7 = icmp eq i64 %niter.next.7, %unroll_iter
  br i1 %niter.ncmp.7, label %.thread208.loopexit.loopexit.unr-lcssa, label %.lr.ph.us, !llvm.loop !11

.thread208.loopexit.loopexit.unr-lcssa:           ; preds = %.lr.ph.us, %.lr.ph.us.preheader
  %indvar.unr = phi i64 [ 0, %.lr.ph.us.preheader ], [ %indvar.next.7, %.lr.ph.us ]
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %.thread208.loopexit, label %.lr.ph.us.epil

.lr.ph.us.epil:                                   ; preds = %.thread208.loopexit.loopexit.unr-lcssa, %.lr.ph.us.epil
  %indvar.epil = phi i64 [ %indvar.next.epil, %.lr.ph.us.epil ], [ %indvar.unr, %.thread208.loopexit.loopexit.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.us.epil ], [ 0, %.thread208.loopexit.loopexit.unr-lcssa ]
  %88 = mul i64 %75, %indvar.epil
  %scevgep.epil = getelementptr i8, ptr %78, i64 %88
  tail call void @llvm.memset.p0.i64(ptr align 8 %scevgep.epil, i8 0, i64 %77, i1 false), !tbaa !9
  %indvar.next.epil = add nuw nsw i64 %indvar.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.thread208.loopexit, label %.lr.ph.us.epil, !llvm.loop !13

.thread208.loopexit:                              ; preds = %.thread208.loopexit.loopexit.unr-lcssa, %.lr.ph.us.epil, %.lr.ph220, %66
  %89 = add nsw i64 %70, 1
  br label %.thread208

.thread208:                                       ; preds = %.thread208.loopexit, %45, %59, %.thread197
  %.0158207 = phi i64 [ %.0158206, %.thread197 ], [ %56, %59 ], [ %21, %45 ], [ %.0158206, %.thread208.loopexit ]
  %.0162204 = phi i64 [ %.0162203, %.thread197 ], [ %60, %59 ], [ %20, %45 ], [ %.0162203, %.thread208.loopexit ]
  %.0161 = phi i64 [ undef, %.thread197 ], [ undef, %59 ], [ undef, %45 ], [ %89, %.thread208.loopexit ]
  %.0160 = phi i64 [ 0, %.thread197 ], [ 0, %59 ], [ 0, %45 ], [ %72, %.thread208.loopexit ]
  %90 = load i64, ptr %0, align 8, !tbaa !5
  %91 = icmp slt i64 %.0160, %90
  br i1 %91, label %92, label %104

92:                                               ; preds = %.thread208
  %93 = sub nsw i64 %90, %.0160
  store i64 %93, ptr %10, align 8, !tbaa !5
  %94 = load i64, ptr %1, align 8, !tbaa !5
  %95 = sub nsw i64 %94, %.0160
  store i64 %95, ptr %11, align 8, !tbaa !5
  %96 = load i64, ptr %2, align 8, !tbaa !5
  %97 = sub nsw i64 %96, %.0160
  store i64 %97, ptr %12, align 8, !tbaa !5
  %98 = add nsw i64 %.0160, 1
  %99 = add i64 %16, 1
  %100 = mul i64 %98, %99
  %101 = getelementptr inbounds double, ptr %18, i64 %100
  %102 = getelementptr double, ptr %5, i64 %.0160
  %103 = call i32 @dorgl2_(ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef %101, ptr noundef nonnull %4, ptr noundef %102, ptr noundef nonnull %6, ptr noundef nonnull %14) #5
  br label %104

104:                                              ; preds = %92, %.thread208
  %105 = icmp sgt i64 %.0160, 0
  br i1 %105, label %106, label %.loopexit

106:                                              ; preds = %104
  %107 = sub nsw i64 0, %.0162204
  store i64 %107, ptr %10, align 8, !tbaa !5
  %108 = icmp sgt i64 %.0162204, 0
  %109 = icmp sgt i64 %.0161, 0
  %110 = icmp slt i64 %.0161, 2
  %.in233 = select i1 %108, i1 %109, i1 %110
  br i1 %.in233, label %.lr.ph, label %.loopexit

.lr.ph:                                           ; preds = %106
  %111 = add i64 %16, 1
  %112 = shl i64 %16, 3
  %invariant.gep = getelementptr i8, ptr %3, i64 -8
  br label %113

113:                                              ; preds = %.lr.ph, %._crit_edge227
  %.1166234 = phi i64 [ %.0161, %.lr.ph ], [ %165, %._crit_edge227 ]
  %114 = load i64, ptr %2, align 8, !tbaa !5
  %115 = sub nsw i64 %114, %.1166234
  %116 = add nsw i64 %115, 1
  store i64 %116, ptr %12, align 8, !tbaa !5
  %117 = call i64 @llvm.smin.i64(i64 %.0162204, i64 %116)
  store i64 %117, ptr %13, align 8, !tbaa !5
  %118 = add nsw i64 %117, %.1166234
  %119 = load i64, ptr %0, align 8, !tbaa !5
  %.not187 = icmp sgt i64 %118, %119
  %.pre247 = load i64, ptr %1, align 8, !tbaa !5
  br i1 %.not187, label %138, label %120

120:                                              ; preds = %113
  %reass.sub = sub i64 %.pre247, %.1166234
  %121 = add i64 %reass.sub, 1
  store i64 %121, ptr %11, align 8, !tbaa !5
  %122 = mul nsw i64 %.1166234, %16
  %123 = getelementptr double, ptr %18, i64 %.1166234
  %124 = getelementptr double, ptr %123, i64 %122
  %125 = getelementptr inbounds double, ptr %19, i64 %.1166234
  %126 = call i32 @dlarft_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef %124, ptr noundef nonnull %4, ptr noundef nonnull %125, ptr noundef nonnull %6, ptr noundef nonnull %15) #5
  %127 = load i64, ptr %0, align 8, !tbaa !5
  %128 = load i64, ptr %13, align 8, !tbaa !5
  %129 = add i64 %127, 1
  %130 = add i64 %.1166234, %128
  %131 = sub i64 %129, %130
  store i64 %131, ptr %11, align 8, !tbaa !5
  %132 = load i64, ptr %1, align 8, !tbaa !5
  %reass.sub238 = sub i64 %132, %.1166234
  %133 = add i64 %reass.sub238, 1
  store i64 %133, ptr %12, align 8, !tbaa !5
  %134 = getelementptr double, ptr %123, i64 %128
  %135 = getelementptr double, ptr %134, i64 %122
  %136 = getelementptr double, ptr %6, i64 %128
  %137 = call i32 @dlarfb_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %11, ptr noundef nonnull %12, ptr noundef nonnull %13, ptr noundef %124, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %15, ptr noundef %135, ptr noundef nonnull %4, ptr noundef %136, ptr noundef nonnull %15) #5
  %.pre246 = load i64, ptr %1, align 8, !tbaa !5
  br label %138

138:                                              ; preds = %120, %113
  %139 = phi i64 [ %.pre246, %120 ], [ %.pre247, %113 ]
  %reass.sub239 = sub i64 %139, %.1166234
  %140 = add i64 %reass.sub239, 1
  store i64 %140, ptr %11, align 8, !tbaa !5
  %141 = mul i64 %.1166234, %111
  %142 = getelementptr inbounds double, ptr %18, i64 %141
  %143 = getelementptr inbounds double, ptr %19, i64 %.1166234
  %144 = call i32 @dorgl2_(ptr noundef nonnull %13, ptr noundef nonnull %11, ptr noundef nonnull %13, ptr noundef %142, ptr noundef nonnull %4, ptr noundef nonnull %143, ptr noundef nonnull %6, ptr noundef nonnull %14) #5
  %145 = add i64 %.1166234, -1
  store i64 %145, ptr %11, align 8, !tbaa !5
  %.not188.not223 = icmp sgt i64 %.1166234, 1
  br i1 %.not188.not223, label %.lr.ph226, label %._crit_edge227

.lr.ph226:                                        ; preds = %138
  %146 = load i64, ptr %13, align 8, !tbaa !5
  %147 = add i64 %146, %.1166234
  %148 = add nsw i64 %147, -1
  store i64 %148, ptr %12, align 8, !tbaa !5
  %.not189.not221 = icmp sgt i64 %146, 0
  br i1 %.not189.not221, label %.lr.ph.us229.preheader, label %._crit_edge227

.lr.ph.us229.preheader:                           ; preds = %.lr.ph226
  %149 = shl i64 %.1166234, 3
  %150 = add nuw i64 %.1166234, 1
  %smax = call i64 @llvm.smax.i64(i64 %147, i64 %150)
  %151 = sub i64 %smax, %.1166234
  %152 = shl i64 %151, 3
  %gep = getelementptr i8, ptr %invariant.gep, i64 %149
  %153 = add nsw i64 %.1166234, -2
  %xtraiter248 = and i64 %145, 7
  %154 = icmp ult i64 %153, 7
  br i1 %154, label %._crit_edge227.loopexit.unr-lcssa, label %.lr.ph.us229.preheader.new

.lr.ph.us229.preheader.new:                       ; preds = %.lr.ph.us229.preheader
  %unroll_iter251 = and i64 %145, -8
  br label %.lr.ph.us229

.lr.ph.us229:                                     ; preds = %.lr.ph.us229, %.lr.ph.us229.preheader.new
  %indvar242 = phi i64 [ 0, %.lr.ph.us229.preheader.new ], [ %indvar.next243.7, %.lr.ph.us229 ]
  %niter252 = phi i64 [ 0, %.lr.ph.us229.preheader.new ], [ %niter252.next.7, %.lr.ph.us229 ]
  %155 = mul i64 %112, %indvar242
  %scevgep244 = getelementptr i8, ptr %gep, i64 %155
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243 = or disjoint i64 %indvar242, 1
  %156 = mul i64 %112, %indvar.next243
  %scevgep244.1 = getelementptr i8, ptr %gep, i64 %156
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.1, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.1 = or disjoint i64 %indvar242, 2
  %157 = mul i64 %112, %indvar.next243.1
  %scevgep244.2 = getelementptr i8, ptr %gep, i64 %157
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.2, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.2 = or disjoint i64 %indvar242, 3
  %158 = mul i64 %112, %indvar.next243.2
  %scevgep244.3 = getelementptr i8, ptr %gep, i64 %158
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.3, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.3 = or disjoint i64 %indvar242, 4
  %159 = mul i64 %112, %indvar.next243.3
  %scevgep244.4 = getelementptr i8, ptr %gep, i64 %159
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.4, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.4 = or disjoint i64 %indvar242, 5
  %160 = mul i64 %112, %indvar.next243.4
  %scevgep244.5 = getelementptr i8, ptr %gep, i64 %160
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.5, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.5 = or disjoint i64 %indvar242, 6
  %161 = mul i64 %112, %indvar.next243.5
  %scevgep244.6 = getelementptr i8, ptr %gep, i64 %161
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.6, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.6 = or disjoint i64 %indvar242, 7
  %162 = mul i64 %112, %indvar.next243.6
  %scevgep244.7 = getelementptr i8, ptr %gep, i64 %162
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.7, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.7 = add nuw nsw i64 %indvar242, 8
  %niter252.next.7 = add i64 %niter252, 8
  %niter252.ncmp.7 = icmp eq i64 %niter252.next.7, %unroll_iter251
  br i1 %niter252.ncmp.7, label %._crit_edge227.loopexit.unr-lcssa, label %.lr.ph.us229, !llvm.loop !15

._crit_edge227.loopexit.unr-lcssa:                ; preds = %.lr.ph.us229, %.lr.ph.us229.preheader
  %indvar242.unr = phi i64 [ 0, %.lr.ph.us229.preheader ], [ %indvar.next243.7, %.lr.ph.us229 ]
  %lcmp.mod250.not = icmp eq i64 %xtraiter248, 0
  br i1 %lcmp.mod250.not, label %._crit_edge227, label %.lr.ph.us229.epil

.lr.ph.us229.epil:                                ; preds = %._crit_edge227.loopexit.unr-lcssa, %.lr.ph.us229.epil
  %indvar242.epil = phi i64 [ %indvar.next243.epil, %.lr.ph.us229.epil ], [ %indvar242.unr, %._crit_edge227.loopexit.unr-lcssa ]
  %epil.iter249 = phi i64 [ %epil.iter249.next, %.lr.ph.us229.epil ], [ 0, %._crit_edge227.loopexit.unr-lcssa ]
  %163 = mul i64 %112, %indvar242.epil
  %scevgep244.epil = getelementptr i8, ptr %gep, i64 %163
  call void @llvm.memset.p0.i64(ptr align 8 %scevgep244.epil, i8 0, i64 %152, i1 false), !tbaa !9
  %indvar.next243.epil = add nuw nsw i64 %indvar242.epil, 1
  %epil.iter249.next = add i64 %epil.iter249, 1
  %epil.iter249.cmp.not = icmp eq i64 %epil.iter249.next, %xtraiter248
  br i1 %epil.iter249.cmp.not, label %._crit_edge227, label %.lr.ph.us229.epil, !llvm.loop !16

._crit_edge227:                                   ; preds = %._crit_edge227.loopexit.unr-lcssa, %.lr.ph.us229.epil, %.lr.ph226, %138
  %164 = load i64, ptr %10, align 8, !tbaa !5
  %165 = add nsw i64 %164, %.1166234
  %166 = icmp slt i64 %164, 0
  %167 = icmp sgt i64 %165, 0
  %168 = icmp slt i64 %165, 2
  %.in = select i1 %166, i1 %167, i1 %168
  br i1 %.in, label %113, label %.loopexit, !llvm.loop !17

.loopexit:                                        ; preds = %._crit_edge227, %106, %104
  %169 = sitofp i64 %.0158207 to double
  store double %169, ptr %6, align 8, !tbaa !9
  br label %170

170:                                              ; preds = %41, %.loopexit, %44, %.thread
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %15) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %14) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %13) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %12) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %11) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %10) #5
  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 @ilaenv_(ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef, ptr noundef) local_unnamed_addr #2

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

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

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

declare i32 @dlarfb_(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

; 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.smax.i64(i64, i64) #3

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

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, i64, i1 immarg) #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 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }
attributes #4 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 = !{!"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 = distinct !{!11, !12}
!12 = !{!"llvm.loop.mustprogress"}
!13 = distinct !{!13, !14}
!14 = !{!"llvm.loop.unroll.disable"}
!15 = distinct !{!15, !12}
!16 = distinct !{!16, !14}
!17 = distinct !{!17, !12}


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