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

; 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 [8 x i8], align 1
@c__1 = external hidden global i32, align 4
@.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
@c_b8 = external hidden global double, align 8
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b20 = external hidden global double, align 8
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1

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

53:                                               ; preds = %7
  %54 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -2, ptr %54, align 4, !tbaa !9
  br label %96

55:                                               ; preds = %7
  %56 = load ptr, ptr %8, align 8, !tbaa !5
  %57 = load i32, ptr %56, align 4, !tbaa !9
  %58 = load ptr, ptr %9, align 8, !tbaa !5
  %59 = load i32, ptr %58, align 4, !tbaa !9
  %60 = icmp slt i32 %57, %59
  br i1 %60, label %61, label %63

61:                                               ; preds = %55
  %62 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -1, ptr %62, align 4, !tbaa !9
  br label %95

63:                                               ; preds = %55
  %64 = load ptr, ptr %11, align 8, !tbaa !5
  %65 = load i32, ptr %64, align 4, !tbaa !9
  %66 = load ptr, ptr %8, align 8, !tbaa !5
  %67 = load i32, ptr %66, align 4, !tbaa !9
  %68 = icmp sge i32 1, %67
  br i1 %68, label %69, label %70

69:                                               ; preds = %63
  br label %73

70:                                               ; preds = %63
  %71 = load ptr, ptr %8, align 8, !tbaa !5
  %72 = load i32, ptr %71, align 4, !tbaa !9
  br label %73

73:                                               ; preds = %70, %69
  %74 = phi i32 [ 1, %69 ], [ %72, %70 ]
  %75 = icmp slt i32 %65, %74
  br i1 %75, label %76, label %78

76:                                               ; preds = %73
  %77 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -4, ptr %77, align 4, !tbaa !9
  br label %94

78:                                               ; preds = %73
  %79 = load ptr, ptr %13, align 8, !tbaa !5
  %80 = load i32, ptr %79, align 4, !tbaa !9
  %81 = load ptr, ptr %9, align 8, !tbaa !5
  %82 = load i32, ptr %81, align 4, !tbaa !9
  %83 = icmp sge i32 1, %82
  br i1 %83, label %84, label %85

84:                                               ; preds = %78
  br label %88

85:                                               ; preds = %78
  %86 = load ptr, ptr %9, align 8, !tbaa !5
  %87 = load i32, ptr %86, align 4, !tbaa !9
  br label %88

88:                                               ; preds = %85, %84
  %89 = phi i32 [ 1, %84 ], [ %87, %85 ]
  %90 = icmp slt i32 %80, %89
  br i1 %90, label %91, label %93

91:                                               ; preds = %88
  %92 = load ptr, ptr %14, align 8, !tbaa !5
  store i32 -6, ptr %92, align 4, !tbaa !9
  br label %93

93:                                               ; preds = %91, %88
  br label %94

94:                                               ; preds = %93, %76
  br label %95

95:                                               ; preds = %94, %61
  br label %96

96:                                               ; preds = %95, %53
  %97 = load ptr, ptr %14, align 8, !tbaa !5
  %98 = load i32, ptr %97, align 4, !tbaa !9
  %99 = icmp ne i32 %98, 0
  br i1 %99, label %100, label %105

100:                                              ; preds = %96
  %101 = load ptr, ptr %14, align 8, !tbaa !5
  %102 = load i32, ptr %101, align 4, !tbaa !9
  %103 = sub nsw i32 0, %102
  store i32 %103, ptr %19, align 4, !tbaa !9
  %104 = call i32 @xerbla_(ptr noundef @.str, ptr noundef %19, i32 noundef 7)
  store i32 1, ptr %28, align 4
  br label %500

105:                                              ; preds = %96
  %106 = load ptr, ptr %9, align 8, !tbaa !5
  %107 = load i32, ptr %106, align 4, !tbaa !9
  %108 = icmp eq i32 %107, 1
  br i1 %108, label %109, label %135

109:                                              ; preds = %105
  %110 = load ptr, ptr %8, align 8, !tbaa !5
  %111 = load ptr, ptr %10, align 8, !tbaa !5
  %112 = load i32, ptr %15, align 4, !tbaa !9
  %113 = add nsw i32 %112, 1
  %114 = sext i32 %113 to i64
  %115 = getelementptr inbounds double, ptr %111, i64 %114
  %116 = load ptr, ptr %10, align 8, !tbaa !5
  %117 = load ptr, ptr %8, align 8, !tbaa !5
  %118 = load i32, ptr %117, align 4, !tbaa !9
  %119 = icmp sle i32 2, %118
  br i1 %119, label %120, label %121

120:                                              ; preds = %109
  br label %124

121:                                              ; preds = %109
  %122 = load ptr, ptr %8, align 8, !tbaa !5
  %123 = load i32, ptr %122, align 4, !tbaa !9
  br label %124

124:                                              ; preds = %121, %120
  %125 = phi i32 [ 2, %120 ], [ %123, %121 ]
  %126 = load i32, ptr %15, align 4, !tbaa !9
  %127 = add nsw i32 %125, %126
  %128 = sext i32 %127 to i64
  %129 = getelementptr inbounds double, ptr %116, i64 %128
  %130 = load ptr, ptr %12, align 8, !tbaa !5
  %131 = load i32, ptr %17, align 4, !tbaa !9
  %132 = add nsw i32 %131, 1
  %133 = sext i32 %132 to i64
  %134 = getelementptr inbounds double, ptr %130, i64 %133
  call void @dlarfg_(ptr noundef %110, ptr noundef %115, ptr noundef %129, ptr noundef @c__1, ptr noundef %134)
  br label %499

135:                                              ; preds = %105
  %136 = load ptr, ptr %9, align 8, !tbaa !5
  %137 = load i32, ptr %136, align 4, !tbaa !9
  %138 = sdiv i32 %137, 2
  store i32 %138, ptr %26, align 4, !tbaa !9
  %139 = load ptr, ptr %9, align 8, !tbaa !5
  %140 = load i32, ptr %139, align 4, !tbaa !9
  %141 = load i32, ptr %26, align 4, !tbaa !9
  %142 = sub nsw i32 %140, %141
  store i32 %142, ptr %27, align 4, !tbaa !9
  %143 = load i32, ptr %26, align 4, !tbaa !9
  %144 = add nsw i32 %143, 1
  store i32 %144, ptr %19, align 4, !tbaa !9
  %145 = load i32, ptr %19, align 4, !tbaa !9
  %146 = load ptr, ptr %9, align 8, !tbaa !5
  %147 = load i32, ptr %146, align 4, !tbaa !9
  %148 = icmp sle i32 %145, %147
  br i1 %148, label %149, label %151

149:                                              ; preds = %135
  %150 = load i32, ptr %19, align 4, !tbaa !9
  br label %154

151:                                              ; preds = %135
  %152 = load ptr, ptr %9, align 8, !tbaa !5
  %153 = load i32, ptr %152, align 4, !tbaa !9
  br label %154

154:                                              ; preds = %151, %149
  %155 = phi i32 [ %150, %149 ], [ %153, %151 ]
  store i32 %155, ptr %25, align 4, !tbaa !9
  %156 = load ptr, ptr %9, align 8, !tbaa !5
  %157 = load i32, ptr %156, align 4, !tbaa !9
  %158 = add nsw i32 %157, 1
  store i32 %158, ptr %19, align 4, !tbaa !9
  %159 = load i32, ptr %19, align 4, !tbaa !9
  %160 = load ptr, ptr %8, align 8, !tbaa !5
  %161 = load i32, ptr %160, align 4, !tbaa !9
  %162 = icmp sle i32 %159, %161
  br i1 %162, label %163, label %165

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

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

168:                                              ; preds = %165, %163
  %169 = phi i32 [ %164, %163 ], [ %167, %165 ]
  store i32 %169, ptr %24, align 4, !tbaa !9
  %170 = load ptr, ptr %8, align 8, !tbaa !5
  %171 = load ptr, ptr %10, align 8, !tbaa !5
  %172 = load i32, ptr %16, align 4, !tbaa !9
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds double, ptr %171, i64 %173
  %175 = load ptr, ptr %11, align 8, !tbaa !5
  %176 = load ptr, ptr %12, align 8, !tbaa !5
  %177 = load i32, ptr %18, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds double, ptr %176, i64 %178
  %180 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dgeqrt3_(ptr noundef %170, ptr noundef %26, ptr noundef %174, ptr noundef %175, ptr noundef %179, ptr noundef %180, ptr noundef %23)
  %181 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %181, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !9
  br label %182

182:                                              ; preds = %218, %168
  %183 = load i32, ptr %22, align 4, !tbaa !9
  %184 = load i32, ptr %19, align 4, !tbaa !9
  %185 = icmp sle i32 %183, %184
  br i1 %185, label %186, label %221

186:                                              ; preds = %182
  %187 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %187, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %188

188:                                              ; preds = %214, %186
  %189 = load i32, ptr %21, align 4, !tbaa !9
  %190 = load i32, ptr %20, align 4, !tbaa !9
  %191 = icmp sle i32 %189, %190
  br i1 %191, label %192, label %217

192:                                              ; preds = %188
  %193 = load ptr, ptr %10, align 8, !tbaa !5
  %194 = load i32, ptr %21, align 4, !tbaa !9
  %195 = load i32, ptr %22, align 4, !tbaa !9
  %196 = load i32, ptr %26, align 4, !tbaa !9
  %197 = add nsw i32 %195, %196
  %198 = load i32, ptr %15, align 4, !tbaa !9
  %199 = mul nsw i32 %197, %198
  %200 = add nsw i32 %194, %199
  %201 = sext i32 %200 to i64
  %202 = getelementptr inbounds double, ptr %193, i64 %201
  %203 = load double, ptr %202, align 8, !tbaa !11
  %204 = load ptr, ptr %12, align 8, !tbaa !5
  %205 = load i32, ptr %21, align 4, !tbaa !9
  %206 = load i32, ptr %22, align 4, !tbaa !9
  %207 = load i32, ptr %26, align 4, !tbaa !9
  %208 = add nsw i32 %206, %207
  %209 = load i32, ptr %17, align 4, !tbaa !9
  %210 = mul nsw i32 %208, %209
  %211 = add nsw i32 %205, %210
  %212 = sext i32 %211 to i64
  %213 = getelementptr inbounds double, ptr %204, i64 %212
  store double %203, ptr %213, align 8, !tbaa !11
  br label %214

214:                                              ; preds = %192
  %215 = load i32, ptr %21, align 4, !tbaa !9
  %216 = add nsw i32 %215, 1
  store i32 %216, ptr %21, align 4, !tbaa !9
  br label %188, !llvm.loop !13

217:                                              ; preds = %188
  br label %218

218:                                              ; preds = %217
  %219 = load i32, ptr %22, align 4, !tbaa !9
  %220 = add nsw i32 %219, 1
  store i32 %220, ptr %22, align 4, !tbaa !9
  br label %182, !llvm.loop !15

221:                                              ; preds = %182
  %222 = load ptr, ptr %10, align 8, !tbaa !5
  %223 = load i32, ptr %16, align 4, !tbaa !9
  %224 = sext i32 %223 to i64
  %225 = getelementptr inbounds double, ptr %222, i64 %224
  %226 = load ptr, ptr %11, align 8, !tbaa !5
  %227 = load ptr, ptr %12, align 8, !tbaa !5
  %228 = load i32, ptr %25, align 4, !tbaa !9
  %229 = load i32, ptr %17, align 4, !tbaa !9
  %230 = mul nsw i32 %228, %229
  %231 = add nsw i32 %230, 1
  %232 = sext i32 %231 to i64
  %233 = getelementptr inbounds double, ptr %227, i64 %232
  %234 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dtrmm_(ptr noundef @.str.1, ptr noundef @.str.1, ptr noundef @.str.2, ptr noundef @.str.3, ptr noundef %26, ptr noundef %27, ptr noundef @c_b8, ptr noundef %225, ptr noundef %226, ptr noundef %233, ptr noundef %234)
  %235 = load ptr, ptr %8, align 8, !tbaa !5
  %236 = load i32, ptr %235, align 4, !tbaa !9
  %237 = load i32, ptr %26, align 4, !tbaa !9
  %238 = sub nsw i32 %236, %237
  store i32 %238, ptr %19, align 4, !tbaa !9
  %239 = load ptr, ptr %10, align 8, !tbaa !5
  %240 = load i32, ptr %25, align 4, !tbaa !9
  %241 = load i32, ptr %15, align 4, !tbaa !9
  %242 = add nsw i32 %240, %241
  %243 = sext i32 %242 to i64
  %244 = getelementptr inbounds double, ptr %239, i64 %243
  %245 = load ptr, ptr %11, align 8, !tbaa !5
  %246 = load ptr, ptr %10, align 8, !tbaa !5
  %247 = load i32, ptr %25, align 4, !tbaa !9
  %248 = load i32, ptr %25, align 4, !tbaa !9
  %249 = load i32, ptr %15, align 4, !tbaa !9
  %250 = mul nsw i32 %248, %249
  %251 = add nsw i32 %247, %250
  %252 = sext i32 %251 to i64
  %253 = getelementptr inbounds double, ptr %246, i64 %252
  %254 = load ptr, ptr %11, align 8, !tbaa !5
  %255 = load ptr, ptr %12, align 8, !tbaa !5
  %256 = load i32, ptr %25, align 4, !tbaa !9
  %257 = load i32, ptr %17, align 4, !tbaa !9
  %258 = mul nsw i32 %256, %257
  %259 = add nsw i32 %258, 1
  %260 = sext i32 %259 to i64
  %261 = getelementptr inbounds double, ptr %255, i64 %260
  %262 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dgemm_(ptr noundef @.str.2, ptr noundef @.str.4, ptr noundef %26, ptr noundef %27, ptr noundef %19, ptr noundef @c_b8, ptr noundef %244, ptr noundef %245, ptr noundef %253, ptr noundef %254, ptr noundef @c_b8, ptr noundef %261, ptr noundef %262)
  %263 = load ptr, ptr %12, align 8, !tbaa !5
  %264 = load i32, ptr %18, align 4, !tbaa !9
  %265 = sext i32 %264 to i64
  %266 = getelementptr inbounds double, ptr %263, i64 %265
  %267 = load ptr, ptr %13, align 8, !tbaa !5
  %268 = load ptr, ptr %12, align 8, !tbaa !5
  %269 = load i32, ptr %25, align 4, !tbaa !9
  %270 = load i32, ptr %17, align 4, !tbaa !9
  %271 = mul nsw i32 %269, %270
  %272 = add nsw i32 %271, 1
  %273 = sext i32 %272 to i64
  %274 = getelementptr inbounds double, ptr %268, i64 %273
  %275 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dtrmm_(ptr noundef @.str.1, ptr noundef @.str.3, ptr noundef @.str.2, ptr noundef @.str.4, ptr noundef %26, ptr noundef %27, ptr noundef @c_b8, ptr noundef %266, ptr noundef %267, ptr noundef %274, ptr noundef %275)
  %276 = load ptr, ptr %8, align 8, !tbaa !5
  %277 = load i32, ptr %276, align 4, !tbaa !9
  %278 = load i32, ptr %26, align 4, !tbaa !9
  %279 = sub nsw i32 %277, %278
  store i32 %279, ptr %19, align 4, !tbaa !9
  %280 = load ptr, ptr %10, align 8, !tbaa !5
  %281 = load i32, ptr %25, align 4, !tbaa !9
  %282 = load i32, ptr %15, align 4, !tbaa !9
  %283 = add nsw i32 %281, %282
  %284 = sext i32 %283 to i64
  %285 = getelementptr inbounds double, ptr %280, i64 %284
  %286 = load ptr, ptr %11, align 8, !tbaa !5
  %287 = load ptr, ptr %12, align 8, !tbaa !5
  %288 = load i32, ptr %25, align 4, !tbaa !9
  %289 = load i32, ptr %17, align 4, !tbaa !9
  %290 = mul nsw i32 %288, %289
  %291 = add nsw i32 %290, 1
  %292 = sext i32 %291 to i64
  %293 = getelementptr inbounds double, ptr %287, i64 %292
  %294 = load ptr, ptr %13, align 8, !tbaa !5
  %295 = load ptr, ptr %10, align 8, !tbaa !5
  %296 = load i32, ptr %25, align 4, !tbaa !9
  %297 = load i32, ptr %25, align 4, !tbaa !9
  %298 = load i32, ptr %15, align 4, !tbaa !9
  %299 = mul nsw i32 %297, %298
  %300 = add nsw i32 %296, %299
  %301 = sext i32 %300 to i64
  %302 = getelementptr inbounds double, ptr %295, i64 %301
  %303 = load ptr, ptr %11, align 8, !tbaa !5
  call void @dgemm_(ptr noundef @.str.4, ptr noundef @.str.4, ptr noundef %19, ptr noundef %27, ptr noundef %26, ptr noundef @c_b20, ptr noundef %285, ptr noundef %286, ptr noundef %293, ptr noundef %294, ptr noundef @c_b8, ptr noundef %302, ptr noundef %303)
  %304 = load ptr, ptr %10, align 8, !tbaa !5
  %305 = load i32, ptr %16, align 4, !tbaa !9
  %306 = sext i32 %305 to i64
  %307 = getelementptr inbounds double, ptr %304, i64 %306
  %308 = load ptr, ptr %11, align 8, !tbaa !5
  %309 = load ptr, ptr %12, align 8, !tbaa !5
  %310 = load i32, ptr %25, align 4, !tbaa !9
  %311 = load i32, ptr %17, align 4, !tbaa !9
  %312 = mul nsw i32 %310, %311
  %313 = add nsw i32 %312, 1
  %314 = sext i32 %313 to i64
  %315 = getelementptr inbounds double, ptr %309, i64 %314
  %316 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dtrmm_(ptr noundef @.str.1, ptr noundef @.str.1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %26, ptr noundef %27, ptr noundef @c_b8, ptr noundef %307, ptr noundef %308, ptr noundef %315, ptr noundef %316)
  %317 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %317, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !9
  br label %318

318:                                              ; preds = %356, %221
  %319 = load i32, ptr %22, align 4, !tbaa !9
  %320 = load i32, ptr %19, align 4, !tbaa !9
  %321 = icmp sle i32 %319, %320
  br i1 %321, label %322, label %359

322:                                              ; preds = %318
  %323 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %323, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %324

324:                                              ; preds = %352, %322
  %325 = load i32, ptr %21, align 4, !tbaa !9
  %326 = load i32, ptr %20, align 4, !tbaa !9
  %327 = icmp sle i32 %325, %326
  br i1 %327, label %328, label %355

328:                                              ; preds = %324
  %329 = load ptr, ptr %12, align 8, !tbaa !5
  %330 = load i32, ptr %21, align 4, !tbaa !9
  %331 = load i32, ptr %22, align 4, !tbaa !9
  %332 = load i32, ptr %26, align 4, !tbaa !9
  %333 = add nsw i32 %331, %332
  %334 = load i32, ptr %17, align 4, !tbaa !9
  %335 = mul nsw i32 %333, %334
  %336 = add nsw i32 %330, %335
  %337 = sext i32 %336 to i64
  %338 = getelementptr inbounds double, ptr %329, i64 %337
  %339 = load double, ptr %338, align 8, !tbaa !11
  %340 = load ptr, ptr %10, align 8, !tbaa !5
  %341 = load i32, ptr %21, align 4, !tbaa !9
  %342 = load i32, ptr %22, align 4, !tbaa !9
  %343 = load i32, ptr %26, align 4, !tbaa !9
  %344 = add nsw i32 %342, %343
  %345 = load i32, ptr %15, align 4, !tbaa !9
  %346 = mul nsw i32 %344, %345
  %347 = add nsw i32 %341, %346
  %348 = sext i32 %347 to i64
  %349 = getelementptr inbounds double, ptr %340, i64 %348
  %350 = load double, ptr %349, align 8, !tbaa !11
  %351 = fsub double %350, %339
  store double %351, ptr %349, align 8, !tbaa !11
  br label %352

352:                                              ; preds = %328
  %353 = load i32, ptr %21, align 4, !tbaa !9
  %354 = add nsw i32 %353, 1
  store i32 %354, ptr %21, align 4, !tbaa !9
  br label %324, !llvm.loop !16

355:                                              ; preds = %324
  br label %356

356:                                              ; preds = %355
  %357 = load i32, ptr %22, align 4, !tbaa !9
  %358 = add nsw i32 %357, 1
  store i32 %358, ptr %22, align 4, !tbaa !9
  br label %318, !llvm.loop !17

359:                                              ; preds = %318
  %360 = load ptr, ptr %8, align 8, !tbaa !5
  %361 = load i32, ptr %360, align 4, !tbaa !9
  %362 = load i32, ptr %26, align 4, !tbaa !9
  %363 = sub nsw i32 %361, %362
  store i32 %363, ptr %19, align 4, !tbaa !9
  %364 = load ptr, ptr %10, align 8, !tbaa !5
  %365 = load i32, ptr %25, align 4, !tbaa !9
  %366 = load i32, ptr %25, align 4, !tbaa !9
  %367 = load i32, ptr %15, align 4, !tbaa !9
  %368 = mul nsw i32 %366, %367
  %369 = add nsw i32 %365, %368
  %370 = sext i32 %369 to i64
  %371 = getelementptr inbounds double, ptr %364, i64 %370
  %372 = load ptr, ptr %11, align 8, !tbaa !5
  %373 = load ptr, ptr %12, align 8, !tbaa !5
  %374 = load i32, ptr %25, align 4, !tbaa !9
  %375 = load i32, ptr %25, align 4, !tbaa !9
  %376 = load i32, ptr %17, align 4, !tbaa !9
  %377 = mul nsw i32 %375, %376
  %378 = add nsw i32 %374, %377
  %379 = sext i32 %378 to i64
  %380 = getelementptr inbounds double, ptr %373, i64 %379
  %381 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dgeqrt3_(ptr noundef %19, ptr noundef %27, ptr noundef %371, ptr noundef %372, ptr noundef %380, ptr noundef %381, ptr noundef %23)
  %382 = load i32, ptr %26, align 4, !tbaa !9
  store i32 %382, ptr %19, align 4, !tbaa !9
  store i32 1, ptr %21, align 4, !tbaa !9
  br label %383

383:                                              ; preds = %419, %359
  %384 = load i32, ptr %21, align 4, !tbaa !9
  %385 = load i32, ptr %19, align 4, !tbaa !9
  %386 = icmp sle i32 %384, %385
  br i1 %386, label %387, label %422

387:                                              ; preds = %383
  %388 = load i32, ptr %27, align 4, !tbaa !9
  store i32 %388, ptr %20, align 4, !tbaa !9
  store i32 1, ptr %22, align 4, !tbaa !9
  br label %389

389:                                              ; preds = %415, %387
  %390 = load i32, ptr %22, align 4, !tbaa !9
  %391 = load i32, ptr %20, align 4, !tbaa !9
  %392 = icmp sle i32 %390, %391
  br i1 %392, label %393, label %418

393:                                              ; preds = %389
  %394 = load ptr, ptr %10, align 8, !tbaa !5
  %395 = load i32, ptr %22, align 4, !tbaa !9
  %396 = load i32, ptr %26, align 4, !tbaa !9
  %397 = add nsw i32 %395, %396
  %398 = load i32, ptr %21, align 4, !tbaa !9
  %399 = load i32, ptr %15, align 4, !tbaa !9
  %400 = mul nsw i32 %398, %399
  %401 = add nsw i32 %397, %400
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds double, ptr %394, i64 %402
  %404 = load double, ptr %403, align 8, !tbaa !11
  %405 = load ptr, ptr %12, align 8, !tbaa !5
  %406 = load i32, ptr %21, align 4, !tbaa !9
  %407 = load i32, ptr %22, align 4, !tbaa !9
  %408 = load i32, ptr %26, align 4, !tbaa !9
  %409 = add nsw i32 %407, %408
  %410 = load i32, ptr %17, align 4, !tbaa !9
  %411 = mul nsw i32 %409, %410
  %412 = add nsw i32 %406, %411
  %413 = sext i32 %412 to i64
  %414 = getelementptr inbounds double, ptr %405, i64 %413
  store double %404, ptr %414, align 8, !tbaa !11
  br label %415

415:                                              ; preds = %393
  %416 = load i32, ptr %22, align 4, !tbaa !9
  %417 = add nsw i32 %416, 1
  store i32 %417, ptr %22, align 4, !tbaa !9
  br label %389, !llvm.loop !18

418:                                              ; preds = %389
  br label %419

419:                                              ; preds = %418
  %420 = load i32, ptr %21, align 4, !tbaa !9
  %421 = add nsw i32 %420, 1
  store i32 %421, ptr %21, align 4, !tbaa !9
  br label %383, !llvm.loop !19

422:                                              ; preds = %383
  %423 = load ptr, ptr %10, align 8, !tbaa !5
  %424 = load i32, ptr %25, align 4, !tbaa !9
  %425 = load i32, ptr %25, align 4, !tbaa !9
  %426 = load i32, ptr %15, align 4, !tbaa !9
  %427 = mul nsw i32 %425, %426
  %428 = add nsw i32 %424, %427
  %429 = sext i32 %428 to i64
  %430 = getelementptr inbounds double, ptr %423, i64 %429
  %431 = load ptr, ptr %11, align 8, !tbaa !5
  %432 = load ptr, ptr %12, align 8, !tbaa !5
  %433 = load i32, ptr %25, align 4, !tbaa !9
  %434 = load i32, ptr %17, align 4, !tbaa !9
  %435 = mul nsw i32 %433, %434
  %436 = add nsw i32 %435, 1
  %437 = sext i32 %436 to i64
  %438 = getelementptr inbounds double, ptr %432, i64 %437
  %439 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dtrmm_(ptr noundef @.str.5, ptr noundef @.str.1, ptr noundef @.str.4, ptr noundef @.str.3, ptr noundef %26, ptr noundef %27, ptr noundef @c_b8, ptr noundef %430, ptr noundef %431, ptr noundef %438, ptr noundef %439)
  %440 = load ptr, ptr %8, align 8, !tbaa !5
  %441 = load i32, ptr %440, align 4, !tbaa !9
  %442 = load ptr, ptr %9, align 8, !tbaa !5
  %443 = load i32, ptr %442, align 4, !tbaa !9
  %444 = sub nsw i32 %441, %443
  store i32 %444, ptr %19, align 4, !tbaa !9
  %445 = load ptr, ptr %10, align 8, !tbaa !5
  %446 = load i32, ptr %24, align 4, !tbaa !9
  %447 = load i32, ptr %15, align 4, !tbaa !9
  %448 = add nsw i32 %446, %447
  %449 = sext i32 %448 to i64
  %450 = getelementptr inbounds double, ptr %445, i64 %449
  %451 = load ptr, ptr %11, align 8, !tbaa !5
  %452 = load ptr, ptr %10, align 8, !tbaa !5
  %453 = load i32, ptr %24, align 4, !tbaa !9
  %454 = load i32, ptr %25, align 4, !tbaa !9
  %455 = load i32, ptr %15, align 4, !tbaa !9
  %456 = mul nsw i32 %454, %455
  %457 = add nsw i32 %453, %456
  %458 = sext i32 %457 to i64
  %459 = getelementptr inbounds double, ptr %452, i64 %458
  %460 = load ptr, ptr %11, align 8, !tbaa !5
  %461 = load ptr, ptr %12, align 8, !tbaa !5
  %462 = load i32, ptr %25, align 4, !tbaa !9
  %463 = load i32, ptr %17, align 4, !tbaa !9
  %464 = mul nsw i32 %462, %463
  %465 = add nsw i32 %464, 1
  %466 = sext i32 %465 to i64
  %467 = getelementptr inbounds double, ptr %461, i64 %466
  %468 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dgemm_(ptr noundef @.str.2, ptr noundef @.str.4, ptr noundef %26, ptr noundef %27, ptr noundef %19, ptr noundef @c_b8, ptr noundef %450, ptr noundef %451, ptr noundef %459, ptr noundef %460, ptr noundef @c_b8, ptr noundef %467, ptr noundef %468)
  %469 = load ptr, ptr %12, align 8, !tbaa !5
  %470 = load i32, ptr %18, align 4, !tbaa !9
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds double, ptr %469, i64 %471
  %473 = load ptr, ptr %13, align 8, !tbaa !5
  %474 = load ptr, ptr %12, align 8, !tbaa !5
  %475 = load i32, ptr %25, align 4, !tbaa !9
  %476 = load i32, ptr %17, align 4, !tbaa !9
  %477 = mul nsw i32 %475, %476
  %478 = add nsw i32 %477, 1
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds double, ptr %474, i64 %479
  %481 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dtrmm_(ptr noundef @.str.1, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.4, ptr noundef %26, ptr noundef %27, ptr noundef @c_b20, ptr noundef %472, ptr noundef %473, ptr noundef %480, ptr noundef %481)
  %482 = load ptr, ptr %12, align 8, !tbaa !5
  %483 = load i32, ptr %25, align 4, !tbaa !9
  %484 = load i32, ptr %25, align 4, !tbaa !9
  %485 = load i32, ptr %17, align 4, !tbaa !9
  %486 = mul nsw i32 %484, %485
  %487 = add nsw i32 %483, %486
  %488 = sext i32 %487 to i64
  %489 = getelementptr inbounds double, ptr %482, i64 %488
  %490 = load ptr, ptr %13, align 8, !tbaa !5
  %491 = load ptr, ptr %12, align 8, !tbaa !5
  %492 = load i32, ptr %25, align 4, !tbaa !9
  %493 = load i32, ptr %17, align 4, !tbaa !9
  %494 = mul nsw i32 %492, %493
  %495 = add nsw i32 %494, 1
  %496 = sext i32 %495 to i64
  %497 = getelementptr inbounds double, ptr %491, i64 %496
  %498 = load ptr, ptr %13, align 8, !tbaa !5
  call void @dtrmm_(ptr noundef @.str.5, ptr noundef @.str.3, ptr noundef @.str.4, ptr noundef @.str.4, ptr noundef %26, ptr noundef %27, ptr noundef @c_b8, ptr noundef %489, ptr noundef %490, ptr noundef %497, ptr noundef %498)
  br label %499

499:                                              ; preds = %422, %124
  store i32 1, ptr %28, align 4
  br label %500

500:                                              ; preds = %499, %100
  call void @llvm.lifetime.end.p0(i64 4, ptr %27) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %26) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %25) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %22) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #3
  ret void
}

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

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

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

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

declare void @dgemm_(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 = !{!"int", !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}
!19 = distinct !{!19, !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"

@.str = external hidden unnamed_addr constant [8 x i8], align 1
@c__1 = external hidden global i32, align 4
@.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
@c_b8 = external hidden global double, align 8
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c_b20 = external hidden global double, align 8
@.str.5 = external hidden unnamed_addr constant [2 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @dgeqrt3_(ptr noundef %0, ptr nocapture noundef readonly %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr nocapture noundef writeonly %6) local_unnamed_addr #0 {
  %8 = alloca i32, align 4
  %9 = alloca i32, align 4
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %8) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %11) #4
  %12 = load i32, ptr %3, align 4, !tbaa !5
  %narrow = xor i32 %12, -1
  %13 = sext i32 %narrow to i64
  %14 = getelementptr inbounds double, ptr %2, i64 %13
  %15 = load i32, ptr %5, align 4, !tbaa !5
  %narrow207 = xor i32 %15, -1
  %16 = sext i32 %narrow207 to i64
  %17 = getelementptr inbounds double, ptr %4, i64 %16
  store i32 0, ptr %6, align 4, !tbaa !5
  %18 = load i32, ptr %1, align 4, !tbaa !5
  %19 = icmp slt i32 %18, 0
  br i1 %19, label %.thread, label %20

20:                                               ; preds = %7
  %21 = load i32, ptr %0, align 4, !tbaa !5
  %22 = icmp slt i32 %21, %18
  br i1 %22, label %.thread, label %23

23:                                               ; preds = %20
  %24 = load i32, ptr %3, align 4, !tbaa !5
  %spec.select = tail call i32 @llvm.umax.i32(i32 %21, i32 1)
  %25 = icmp slt i32 %24, %spec.select
  br i1 %25, label %.thread, label %26

26:                                               ; preds = %23
  %27 = load i32, ptr %5, align 4, !tbaa !5
  %spec.select208 = tail call i32 @llvm.umax.i32(i32 %18, i32 1)
  %28 = icmp slt i32 %27, %spec.select208
  br i1 %28, label %.thread, label %30

.thread:                                          ; preds = %26, %23, %20, %7
  %.sink = phi i32 [ -2, %7 ], [ -1, %20 ], [ -4, %23 ], [ -6, %26 ]
  %.neg = phi i32 [ 2, %7 ], [ 1, %20 ], [ 4, %23 ], [ 6, %26 ]
  store i32 %.sink, ptr %6, align 4, !tbaa !5
  store i32 %.neg, ptr %8, align 4, !tbaa !5
  %29 = call i32 @xerbla_(ptr noundef nonnull @.str, ptr noundef nonnull %8, i32 noundef 7) #4
  br label %231

30:                                               ; preds = %26
  %31 = icmp eq i32 %18, 1
  br i1 %31, label %32, label %37

32:                                               ; preds = %30
  %33 = tail call i32 @llvm.umin.i32(i32 %21, i32 2)
  %34 = add nsw i32 %33, %12
  %35 = sext i32 %34 to i64
  %36 = getelementptr inbounds double, ptr %14, i64 %35
  tail call void @dlarfg_(ptr noundef nonnull %0, ptr noundef %2, ptr noundef %36, ptr noundef nonnull @c__1, ptr noundef %4) #4
  br label %231

37:                                               ; preds = %30
  %38 = lshr i32 %18, 1
  store i32 %38, ptr %10, align 4, !tbaa !5
  %39 = sub nsw i32 %18, %38
  store i32 %39, ptr %11, align 4, !tbaa !5
  %40 = add nuw nsw i32 %38, 1
  %.not199.not.not = icmp eq i32 %18, 0
  %. = select i1 %.not199.not.not, i32 0, i32 %40
  %41 = add nuw nsw i32 %18, 1
  store i32 %41, ptr %8, align 4, !tbaa !5
  %.not200.not = icmp ult i32 %18, %21
  %42 = select i1 %.not200.not, i32 %41, i32 %21
  call void @dgeqrt3_(ptr noundef nonnull %0, ptr noundef nonnull %10, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %4, ptr noundef nonnull %5, ptr noundef nonnull %9)
  store i32 %39, ptr %8, align 4, !tbaa !5
  %.not201213 = icmp slt i32 %39, 1
  br i1 %.not201213, label %._crit_edge217, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %37
  %43 = zext nneg i32 %38 to i64
  %44 = sext i32 %12 to i64
  %45 = sext i32 %15 to i64
  %46 = add nuw i32 %39, 1
  %wide.trip.count248 = zext i32 %46 to i64
  %wide.trip.count = zext nneg i32 %40 to i64
  %47 = mul nsw i64 %wide.trip.count, %45
  %48 = shl nsw i64 %16, 3
  %49 = add i64 %47, %16
  %50 = shl i64 %49, 3
  %51 = getelementptr i8, ptr %4, i64 %50
  %52 = shl nuw nsw i64 %43, 3
  %53 = add nuw nsw i64 %43, %wide.trip.count248
  %54 = shl nuw nsw i64 %53, 3
  %55 = add nsw i64 %54, -8
  %56 = mul i64 %55, %45
  %57 = getelementptr i8, ptr %4, i64 %56
  %58 = getelementptr i8, ptr %57, i64 %52
  %59 = getelementptr i8, ptr %58, i64 %48
  %60 = mul nsw i64 %wide.trip.count, %44
  %61 = shl nsw i64 %13, 3
  %62 = add i64 %60, %13
  %63 = shl i64 %62, 3
  %64 = getelementptr i8, ptr %2, i64 %63
  %65 = mul i64 %55, %44
  %66 = getelementptr i8, ptr %2, i64 %65
  %67 = getelementptr i8, ptr %66, i64 %52
  %68 = getelementptr i8, ptr %67, i64 %61
  %69 = add nuw nsw i64 %43, 1
  %min.iters.check = icmp ult i32 %18, 16
  %bound0 = icmp ult ptr %51, %68
  %bound1 = icmp ult ptr %64, %59
  %found.conflict = and i1 %bound0, %bound1
  %70 = or i32 %15, %12
  %71 = icmp slt i32 %70, 0
  %72 = or i1 %found.conflict, %71
  %n.vec = and i64 %43, 1073741820
  %ind.end = or disjoint i64 %n.vec, 1
  %cmp.n = icmp eq i64 %n.vec, %43
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %._crit_edge
  %indvars.iv245 = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next246, %._crit_edge ]
  %73 = add nuw nsw i64 %indvars.iv245, %43
  %74 = mul nsw i64 %73, %44
  %75 = mul nsw i64 %73, %45
  %invariant.gep = getelementptr double, ptr %14, i64 %74
  %invariant.gep270 = getelementptr double, ptr %17, i64 %75
  %brmerge = select i1 %min.iters.check, i1 true, i1 %72
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph ]
  %offset.idx = or disjoint i64 %index, 1
  %76 = getelementptr double, ptr %invariant.gep, i64 %offset.idx
  %77 = getelementptr i8, ptr %76, i64 16
  %wide.load = load <2 x double>, ptr %76, align 8, !tbaa !9, !alias.scope !11
  %wide.load285 = load <2 x double>, ptr %77, align 8, !tbaa !9, !alias.scope !11
  %78 = getelementptr double, ptr %invariant.gep270, i64 %offset.idx
  %79 = getelementptr i8, ptr %78, i64 16
  store <2 x double> %wide.load, ptr %78, align 8, !tbaa !9, !alias.scope !14, !noalias !11
  store <2 x double> %wide.load285, ptr %79, align 8, !tbaa !9, !alias.scope !14, !noalias !11
  %index.next = add nuw i64 %index, 4
  %80 = icmp eq i64 %index.next, %n.vec
  br i1 %80, label %middle.block, label %vector.body, !llvm.loop !16

middle.block:                                     ; preds = %vector.body
  br i1 %cmp.n, label %._crit_edge, label %scalar.ph.preheader

scalar.ph.preheader:                              ; preds = %.lr.ph, %middle.block
  %indvars.iv.ph = phi i64 [ 1, %.lr.ph ], [ %ind.end, %middle.block ]
  %81 = sub nsw i64 %69, %indvars.iv.ph
  %82 = sub nsw i64 %43, %indvars.iv.ph
  %xtraiter = and i64 %81, 3
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader, %scalar.ph.prol
  %indvars.iv.prol = phi i64 [ %indvars.iv.next.prol, %scalar.ph.prol ], [ %indvars.iv.ph, %scalar.ph.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph.prol ], [ 0, %scalar.ph.preheader ]
  %gep.prol = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.prol
  %83 = load double, ptr %gep.prol, align 8, !tbaa !9
  %gep271.prol = getelementptr double, ptr %invariant.gep270, i64 %indvars.iv.prol
  store double %83, ptr %gep271.prol, align 8, !tbaa !9
  %indvars.iv.next.prol = add nuw nsw i64 %indvars.iv.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter
  br i1 %prol.iter.cmp.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol, !llvm.loop !20

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv.unr = phi i64 [ %indvars.iv.ph, %scalar.ph.preheader ], [ %indvars.iv.next.prol, %scalar.ph.prol ]
  %84 = icmp ult i64 %82, 3
  br i1 %84, label %._crit_edge, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %scalar.ph ], [ %indvars.iv.unr, %scalar.ph.prol.loopexit ]
  %gep = getelementptr double, ptr %invariant.gep, i64 %indvars.iv
  %85 = load double, ptr %gep, align 8, !tbaa !9
  %gep271 = getelementptr double, ptr %invariant.gep270, i64 %indvars.iv
  store double %85, ptr %gep271, align 8, !tbaa !9
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %gep.1 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.next
  %86 = load double, ptr %gep.1, align 8, !tbaa !9
  %gep271.1 = getelementptr double, ptr %invariant.gep270, i64 %indvars.iv.next
  store double %86, ptr %gep271.1, align 8, !tbaa !9
  %indvars.iv.next.1 = add nuw nsw i64 %indvars.iv, 2
  %gep.2 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.next.1
  %87 = load double, ptr %gep.2, align 8, !tbaa !9
  %gep271.2 = getelementptr double, ptr %invariant.gep270, i64 %indvars.iv.next.1
  store double %87, ptr %gep271.2, align 8, !tbaa !9
  %indvars.iv.next.2 = add nuw nsw i64 %indvars.iv, 3
  %gep.3 = getelementptr double, ptr %invariant.gep, i64 %indvars.iv.next.2
  %88 = load double, ptr %gep.3, align 8, !tbaa !9
  %gep271.3 = getelementptr double, ptr %invariant.gep270, i64 %indvars.iv.next.2
  store double %88, ptr %gep271.3, align 8, !tbaa !9
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %exitcond.not.3 = icmp eq i64 %indvars.iv.next.3, %wide.trip.count
  br i1 %exitcond.not.3, label %._crit_edge, label %scalar.ph, !llvm.loop !22

._crit_edge:                                      ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next246 = add nuw nsw i64 %indvars.iv245, 1
  %exitcond249.not = icmp eq i64 %indvars.iv.next246, %wide.trip.count248
  br i1 %exitcond249.not, label %._crit_edge217, label %.lr.ph, !llvm.loop !23

._crit_edge217:                                   ; preds = %._crit_edge, %37
  %89 = mul nsw i32 %., %15
  %90 = sext i32 %89 to i64
  %91 = getelementptr double, ptr %17, i64 %90
  %92 = getelementptr i8, ptr %91, i64 8
  call void @dtrmm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull @c_b8, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %92, ptr noundef nonnull %5) #4
  %93 = load i32, ptr %0, align 4, !tbaa !5
  %94 = load i32, ptr %10, align 4, !tbaa !5
  %95 = sub nsw i32 %93, %94
  store i32 %95, ptr %8, align 4, !tbaa !5
  %96 = add nsw i32 %., %12
  %97 = sext i32 %96 to i64
  %98 = getelementptr inbounds double, ptr %14, i64 %97
  %99 = mul nsw i32 %., %12
  %100 = add nsw i32 %99, %.
  %101 = sext i32 %100 to i64
  %102 = getelementptr inbounds double, ptr %14, i64 %101
  call void @dgemm_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.4, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %8, ptr noundef nonnull @c_b8, ptr noundef %98, ptr noundef nonnull %3, ptr noundef %102, ptr noundef nonnull %3, ptr noundef nonnull @c_b8, ptr noundef %92, ptr noundef nonnull %5) #4
  call void @dtrmm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.4, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull @c_b8, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %92, ptr noundef nonnull %5) #4
  %103 = load i32, ptr %0, align 4, !tbaa !5
  %104 = load i32, ptr %10, align 4, !tbaa !5
  %105 = sub nsw i32 %103, %104
  store i32 %105, ptr %8, align 4, !tbaa !5
  call void @dgemm_(ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.4, ptr noundef nonnull %8, ptr noundef nonnull %11, ptr noundef nonnull %10, ptr noundef nonnull @c_b20, ptr noundef %98, ptr noundef nonnull %3, ptr noundef %92, ptr noundef nonnull %5, ptr noundef nonnull @c_b8, ptr noundef %102, ptr noundef nonnull %3) #4
  call void @dtrmm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull @c_b8, ptr noundef %2, ptr noundef nonnull %3, ptr noundef %92, ptr noundef nonnull %5) #4
  %106 = load i32, ptr %11, align 4, !tbaa !5
  %.not202223 = icmp slt i32 %106, 1
  %.pre = load i32, ptr %10, align 4, !tbaa !5
  %.not205218 = icmp slt i32 %.pre, 1
  %or.cond280 = select i1 %.not202223, i1 true, i1 %.not205218
  br i1 %or.cond280, label %._crit_edge227, label %.lr.ph221.preheader

.lr.ph221.preheader:                              ; preds = %._crit_edge217
  %107 = add nuw i32 %.pre, 1
  %108 = zext nneg i32 %.pre to i64
  %109 = sext i32 %15 to i64
  %110 = sext i32 %12 to i64
  %111 = add nuw i32 %106, 1
  %wide.trip.count258 = zext i32 %111 to i64
  %wide.trip.count253 = zext i32 %107 to i64
  %112 = add nuw nsw i64 %108, 1
  %113 = mul nsw i64 %112, %110
  %114 = shl nsw i64 %13, 3
  %115 = add i64 %113, %13
  %116 = shl i64 %115, 3
  %117 = getelementptr i8, ptr %2, i64 %116
  %scevgep287 = getelementptr i8, ptr %117, i64 8
  %118 = add nuw nsw i64 %108, %wide.trip.count258
  %119 = shl nuw nsw i64 %118, 3
  %120 = add nsw i64 %119, -8
  %121 = mul i64 %120, %110
  %122 = shl nuw nsw i64 %wide.trip.count253, 3
  %123 = getelementptr i8, ptr %2, i64 %121
  %124 = getelementptr i8, ptr %123, i64 %114
  %scevgep288 = getelementptr i8, ptr %124, i64 %122
  %125 = mul nsw i64 %112, %109
  %126 = shl nsw i64 %16, 3
  %127 = add i64 %125, %16
  %128 = shl i64 %127, 3
  %129 = getelementptr i8, ptr %4, i64 %128
  %scevgep289 = getelementptr i8, ptr %129, i64 8
  %130 = mul i64 %120, %109
  %131 = getelementptr i8, ptr %4, i64 %130
  %132 = getelementptr i8, ptr %131, i64 %126
  %scevgep290 = getelementptr i8, ptr %132, i64 %122
  %133 = zext nneg i32 %.pre to i64
  %134 = zext nneg i32 %.pre to i64
  %min.iters.check298 = icmp ult i32 %.pre, 6
  %bound0291 = icmp ult ptr %scevgep287, %scevgep290
  %bound1292 = icmp ult ptr %scevgep289, %scevgep288
  %found.conflict293 = and i1 %bound0291, %bound1292
  %135 = or i32 %12, %15
  %136 = icmp slt i32 %135, 0
  %137 = or i1 %found.conflict293, %136
  %n.vec301 = and i64 %133, 2147483644
  %ind.end302 = or disjoint i64 %n.vec301, 1
  %cmp.n312 = icmp eq i64 %n.vec301, %133
  br label %.lr.ph221

.lr.ph221:                                        ; preds = %.lr.ph221.preheader, %._crit_edge222
  %indvars.iv255 = phi i64 [ 1, %.lr.ph221.preheader ], [ %indvars.iv.next256, %._crit_edge222 ]
  %138 = add nuw nsw i64 %indvars.iv255, %108
  %139 = mul nsw i64 %138, %109
  %140 = mul nsw i64 %138, %110
  %invariant.gep272 = getelementptr double, ptr %17, i64 %139
  %invariant.gep274 = getelementptr double, ptr %14, i64 %140
  %brmerge343 = select i1 %min.iters.check298, i1 true, i1 %137
  br i1 %brmerge343, label %scalar.ph297.preheader, label %vector.body304

vector.body304:                                   ; preds = %.lr.ph221, %vector.body304
  %index305 = phi i64 [ %index.next311, %vector.body304 ], [ 0, %.lr.ph221 ]
  %offset.idx306 = or disjoint i64 %index305, 1
  %141 = getelementptr double, ptr %invariant.gep272, i64 %offset.idx306
  %142 = getelementptr i8, ptr %141, i64 16
  %wide.load307 = load <2 x double>, ptr %141, align 8, !tbaa !9, !alias.scope !24
  %wide.load308 = load <2 x double>, ptr %142, align 8, !tbaa !9, !alias.scope !24
  %143 = getelementptr double, ptr %invariant.gep274, i64 %offset.idx306
  %144 = getelementptr i8, ptr %143, i64 16
  %wide.load309 = load <2 x double>, ptr %143, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  %wide.load310 = load <2 x double>, ptr %144, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  %145 = fsub <2 x double> %wide.load309, %wide.load307
  %146 = fsub <2 x double> %wide.load310, %wide.load308
  store <2 x double> %145, ptr %143, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  store <2 x double> %146, ptr %144, align 8, !tbaa !9, !alias.scope !27, !noalias !24
  %index.next311 = add nuw i64 %index305, 4
  %147 = icmp eq i64 %index.next311, %n.vec301
  br i1 %147, label %middle.block296, label %vector.body304, !llvm.loop !29

middle.block296:                                  ; preds = %vector.body304
  br i1 %cmp.n312, label %._crit_edge222, label %scalar.ph297.preheader

scalar.ph297.preheader:                           ; preds = %.lr.ph221, %middle.block296
  %indvars.iv250.ph = phi i64 [ 1, %.lr.ph221 ], [ %ind.end302, %middle.block296 ]
  %148 = sub nsw i64 %wide.trip.count253, %indvars.iv250.ph
  %149 = sub nsw i64 %134, %indvars.iv250.ph
  %xtraiter337 = and i64 %148, 3
  %lcmp.mod338.not = icmp eq i64 %xtraiter337, 0
  br i1 %lcmp.mod338.not, label %scalar.ph297.prol.loopexit, label %scalar.ph297.prol

scalar.ph297.prol:                                ; preds = %scalar.ph297.preheader, %scalar.ph297.prol
  %indvars.iv250.prol = phi i64 [ %indvars.iv.next251.prol, %scalar.ph297.prol ], [ %indvars.iv250.ph, %scalar.ph297.preheader ]
  %prol.iter339 = phi i64 [ %prol.iter339.next, %scalar.ph297.prol ], [ 0, %scalar.ph297.preheader ]
  %gep273.prol = getelementptr double, ptr %invariant.gep272, i64 %indvars.iv250.prol
  %150 = load double, ptr %gep273.prol, align 8, !tbaa !9
  %gep275.prol = getelementptr double, ptr %invariant.gep274, i64 %indvars.iv250.prol
  %151 = load double, ptr %gep275.prol, align 8, !tbaa !9
  %152 = fsub double %151, %150
  store double %152, ptr %gep275.prol, align 8, !tbaa !9
  %indvars.iv.next251.prol = add nuw nsw i64 %indvars.iv250.prol, 1
  %prol.iter339.next = add i64 %prol.iter339, 1
  %prol.iter339.cmp.not = icmp eq i64 %prol.iter339.next, %xtraiter337
  br i1 %prol.iter339.cmp.not, label %scalar.ph297.prol.loopexit, label %scalar.ph297.prol, !llvm.loop !30

scalar.ph297.prol.loopexit:                       ; preds = %scalar.ph297.prol, %scalar.ph297.preheader
  %indvars.iv250.unr = phi i64 [ %indvars.iv250.ph, %scalar.ph297.preheader ], [ %indvars.iv.next251.prol, %scalar.ph297.prol ]
  %153 = icmp ult i64 %149, 3
  br i1 %153, label %._crit_edge222, label %scalar.ph297

scalar.ph297:                                     ; preds = %scalar.ph297.prol.loopexit, %scalar.ph297
  %indvars.iv250 = phi i64 [ %indvars.iv.next251.3, %scalar.ph297 ], [ %indvars.iv250.unr, %scalar.ph297.prol.loopexit ]
  %gep273 = getelementptr double, ptr %invariant.gep272, i64 %indvars.iv250
  %154 = load double, ptr %gep273, align 8, !tbaa !9
  %gep275 = getelementptr double, ptr %invariant.gep274, i64 %indvars.iv250
  %155 = load double, ptr %gep275, align 8, !tbaa !9
  %156 = fsub double %155, %154
  store double %156, ptr %gep275, align 8, !tbaa !9
  %indvars.iv.next251 = add nuw nsw i64 %indvars.iv250, 1
  %gep273.1 = getelementptr double, ptr %invariant.gep272, i64 %indvars.iv.next251
  %157 = load double, ptr %gep273.1, align 8, !tbaa !9
  %gep275.1 = getelementptr double, ptr %invariant.gep274, i64 %indvars.iv.next251
  %158 = load double, ptr %gep275.1, align 8, !tbaa !9
  %159 = fsub double %158, %157
  store double %159, ptr %gep275.1, align 8, !tbaa !9
  %indvars.iv.next251.1 = add nuw nsw i64 %indvars.iv250, 2
  %gep273.2 = getelementptr double, ptr %invariant.gep272, i64 %indvars.iv.next251.1
  %160 = load double, ptr %gep273.2, align 8, !tbaa !9
  %gep275.2 = getelementptr double, ptr %invariant.gep274, i64 %indvars.iv.next251.1
  %161 = load double, ptr %gep275.2, align 8, !tbaa !9
  %162 = fsub double %161, %160
  store double %162, ptr %gep275.2, align 8, !tbaa !9
  %indvars.iv.next251.2 = add nuw nsw i64 %indvars.iv250, 3
  %gep273.3 = getelementptr double, ptr %invariant.gep272, i64 %indvars.iv.next251.2
  %163 = load double, ptr %gep273.3, align 8, !tbaa !9
  %gep275.3 = getelementptr double, ptr %invariant.gep274, i64 %indvars.iv.next251.2
  %164 = load double, ptr %gep275.3, align 8, !tbaa !9
  %165 = fsub double %164, %163
  store double %165, ptr %gep275.3, align 8, !tbaa !9
  %indvars.iv.next251.3 = add nuw nsw i64 %indvars.iv250, 4
  %exitcond254.not.3 = icmp eq i64 %indvars.iv.next251.3, %wide.trip.count253
  br i1 %exitcond254.not.3, label %._crit_edge222, label %scalar.ph297, !llvm.loop !31

._crit_edge222:                                   ; preds = %scalar.ph297.prol.loopexit, %scalar.ph297, %middle.block296
  %indvars.iv.next256 = add nuw nsw i64 %indvars.iv255, 1
  %exitcond259.not = icmp eq i64 %indvars.iv.next256, %wide.trip.count258
  br i1 %exitcond259.not, label %._crit_edge227, label %.lr.ph221, !llvm.loop !32

._crit_edge227:                                   ; preds = %._crit_edge222, %._crit_edge217
  %166 = load i32, ptr %0, align 4, !tbaa !5
  %167 = sub nsw i32 %166, %.pre
  store i32 %167, ptr %8, align 4, !tbaa !5
  %168 = add nsw i32 %89, %.
  %169 = sext i32 %168 to i64
  %170 = getelementptr inbounds double, ptr %17, i64 %169
  call void @dgeqrt3_(ptr noundef nonnull %8, ptr noundef nonnull %11, ptr noundef %102, ptr noundef nonnull %3, ptr noundef %170, ptr noundef nonnull %5, ptr noundef nonnull %9)
  %171 = load i32, ptr %10, align 4, !tbaa !5
  store i32 %171, ptr %8, align 4, !tbaa !5
  %.not203233 = icmp slt i32 %171, 1
  br i1 %.not203233, label %._crit_edge237, label %.lr.ph236

.lr.ph236:                                        ; preds = %._crit_edge227
  %172 = load i32, ptr %11, align 4, !tbaa !5
  %.not204228 = icmp slt i32 %172, 1
  br i1 %.not204228, label %._crit_edge237, label %.lr.ph231.preheader

.lr.ph231.preheader:                              ; preds = %.lr.ph236
  %173 = zext nneg i32 %171 to i64
  %174 = sext i32 %15 to i64
  %175 = add nuw i32 %172, 1
  %176 = sext i32 %12 to i64
  %177 = add nuw i32 %171, 1
  %wide.trip.count268 = zext i32 %177 to i64
  %wide.trip.count263 = zext i32 %175 to i64
  %178 = shl nuw nsw i64 %173, 3
  %scevgep314 = getelementptr i8, ptr %4, i64 %178
  %179 = shl nuw nsw i64 %wide.trip.count268, 3
  %180 = shl nuw nsw i64 %wide.trip.count263, 3
  %181 = getelementptr i8, ptr %4, i64 %178
  %182 = getelementptr i8, ptr %181, i64 %179
  %183 = getelementptr i8, ptr %182, i64 %180
  %scevgep315 = getelementptr i8, ptr %183, i64 -24
  %184 = shl nsw i64 %176, 3
  %185 = shl nsw i64 %13, 3
  %186 = getelementptr i8, ptr %2, i64 %184
  %187 = getelementptr i8, ptr %186, i64 %185
  %188 = getelementptr i8, ptr %187, i64 %178
  %scevgep316 = getelementptr i8, ptr %188, i64 8
  %189 = add nsw i64 %179, -8
  %190 = mul i64 %189, %176
  %191 = getelementptr i8, ptr %2, i64 %190
  %192 = getelementptr i8, ptr %191, i64 %185
  %193 = getelementptr i8, ptr %192, i64 %178
  %scevgep317 = getelementptr i8, ptr %193, i64 %180
  %194 = zext nneg i32 %172 to i64
  %195 = zext nneg i32 %172 to i64
  %min.iters.check324 = icmp ugt i32 %172, 5
  %ident.check.not = icmp eq i32 %15, 1
  %or.cond = select i1 %min.iters.check324, i1 %ident.check.not, i1 false
  %bound0318 = icmp ult ptr %scevgep314, %scevgep317
  %bound1319 = icmp ult ptr %scevgep316, %scevgep315
  %found.conflict320 = and i1 %bound0318, %bound1319
  %stride.check321 = icmp slt i32 %12, 0
  %196 = or i1 %found.conflict320, %stride.check321
  %n.vec327 = and i64 %194, 2147483644
  %ind.end328 = or disjoint i64 %n.vec327, 1
  %cmp.n336 = icmp eq i64 %n.vec327, %194
  br label %.lr.ph231

.lr.ph231:                                        ; preds = %.lr.ph231.preheader, %._crit_edge232
  %indvars.iv265 = phi i64 [ 1, %.lr.ph231.preheader ], [ %indvars.iv.next266, %._crit_edge232 ]
  %197 = mul nsw i64 %indvars.iv265, %176
  %invariant.gep276 = getelementptr double, ptr %14, i64 %197
  %invariant.gep278 = getelementptr double, ptr %17, i64 %indvars.iv265
  %or.cond.not = xor i1 %or.cond, true
  %brmerge344 = select i1 %or.cond.not, i1 true, i1 %196
  br i1 %brmerge344, label %scalar.ph323.preheader, label %vector.body330

vector.body330:                                   ; preds = %.lr.ph231, %vector.body330
  %index331 = phi i64 [ %index.next335, %vector.body330 ], [ 0, %.lr.ph231 ]
  %offset.idx332 = or disjoint i64 %index331, 1
  %198 = add nuw nsw i64 %offset.idx332, %173
  %199 = getelementptr double, ptr %invariant.gep276, i64 %198
  %200 = getelementptr i8, ptr %199, i64 16
  %wide.load333 = load <2 x double>, ptr %199, align 8, !tbaa !9, !alias.scope !33
  %wide.load334 = load <2 x double>, ptr %200, align 8, !tbaa !9, !alias.scope !33
  %201 = getelementptr double, ptr %invariant.gep278, i64 %198
  %202 = getelementptr i8, ptr %201, i64 16
  store <2 x double> %wide.load333, ptr %201, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  store <2 x double> %wide.load334, ptr %202, align 8, !tbaa !9, !alias.scope !36, !noalias !33
  %index.next335 = add nuw i64 %index331, 4
  %203 = icmp eq i64 %index.next335, %n.vec327
  br i1 %203, label %middle.block322, label %vector.body330, !llvm.loop !38

middle.block322:                                  ; preds = %vector.body330
  br i1 %cmp.n336, label %._crit_edge232, label %scalar.ph323.preheader

scalar.ph323.preheader:                           ; preds = %.lr.ph231, %middle.block322
  %indvars.iv260.ph = phi i64 [ 1, %.lr.ph231 ], [ %ind.end328, %middle.block322 ]
  %204 = sub nsw i64 %wide.trip.count263, %indvars.iv260.ph
  %205 = sub nsw i64 %195, %indvars.iv260.ph
  %xtraiter340 = and i64 %204, 3
  %lcmp.mod341.not = icmp eq i64 %xtraiter340, 0
  br i1 %lcmp.mod341.not, label %scalar.ph323.prol.loopexit, label %scalar.ph323.prol

scalar.ph323.prol:                                ; preds = %scalar.ph323.preheader, %scalar.ph323.prol
  %indvars.iv260.prol = phi i64 [ %indvars.iv.next261.prol, %scalar.ph323.prol ], [ %indvars.iv260.ph, %scalar.ph323.preheader ]
  %prol.iter342 = phi i64 [ %prol.iter342.next, %scalar.ph323.prol ], [ 0, %scalar.ph323.preheader ]
  %206 = add nuw nsw i64 %indvars.iv260.prol, %173
  %gep277.prol = getelementptr double, ptr %invariant.gep276, i64 %206
  %207 = load double, ptr %gep277.prol, align 8, !tbaa !9
  %208 = mul nsw i64 %206, %174
  %gep279.prol = getelementptr double, ptr %invariant.gep278, i64 %208
  store double %207, ptr %gep279.prol, align 8, !tbaa !9
  %indvars.iv.next261.prol = add nuw nsw i64 %indvars.iv260.prol, 1
  %prol.iter342.next = add i64 %prol.iter342, 1
  %prol.iter342.cmp.not = icmp eq i64 %prol.iter342.next, %xtraiter340
  br i1 %prol.iter342.cmp.not, label %scalar.ph323.prol.loopexit, label %scalar.ph323.prol, !llvm.loop !39

scalar.ph323.prol.loopexit:                       ; preds = %scalar.ph323.prol, %scalar.ph323.preheader
  %indvars.iv260.unr = phi i64 [ %indvars.iv260.ph, %scalar.ph323.preheader ], [ %indvars.iv.next261.prol, %scalar.ph323.prol ]
  %209 = icmp ult i64 %205, 3
  br i1 %209, label %._crit_edge232, label %scalar.ph323

scalar.ph323:                                     ; preds = %scalar.ph323.prol.loopexit, %scalar.ph323
  %indvars.iv260 = phi i64 [ %indvars.iv.next261.3, %scalar.ph323 ], [ %indvars.iv260.unr, %scalar.ph323.prol.loopexit ]
  %210 = add nuw nsw i64 %indvars.iv260, %173
  %gep277 = getelementptr double, ptr %invariant.gep276, i64 %210
  %211 = load double, ptr %gep277, align 8, !tbaa !9
  %212 = mul nsw i64 %210, %174
  %gep279 = getelementptr double, ptr %invariant.gep278, i64 %212
  store double %211, ptr %gep279, align 8, !tbaa !9
  %indvars.iv.next261 = add nuw nsw i64 %indvars.iv260, 1
  %213 = add nuw nsw i64 %indvars.iv.next261, %173
  %gep277.1 = getelementptr double, ptr %invariant.gep276, i64 %213
  %214 = load double, ptr %gep277.1, align 8, !tbaa !9
  %215 = mul nsw i64 %213, %174
  %gep279.1 = getelementptr double, ptr %invariant.gep278, i64 %215
  store double %214, ptr %gep279.1, align 8, !tbaa !9
  %indvars.iv.next261.1 = add nuw nsw i64 %indvars.iv260, 2
  %216 = add nuw nsw i64 %indvars.iv.next261.1, %173
  %gep277.2 = getelementptr double, ptr %invariant.gep276, i64 %216
  %217 = load double, ptr %gep277.2, align 8, !tbaa !9
  %218 = mul nsw i64 %216, %174
  %gep279.2 = getelementptr double, ptr %invariant.gep278, i64 %218
  store double %217, ptr %gep279.2, align 8, !tbaa !9
  %indvars.iv.next261.2 = add nuw nsw i64 %indvars.iv260, 3
  %219 = add nuw nsw i64 %indvars.iv.next261.2, %173
  %gep277.3 = getelementptr double, ptr %invariant.gep276, i64 %219
  %220 = load double, ptr %gep277.3, align 8, !tbaa !9
  %221 = mul nsw i64 %219, %174
  %gep279.3 = getelementptr double, ptr %invariant.gep278, i64 %221
  store double %220, ptr %gep279.3, align 8, !tbaa !9
  %indvars.iv.next261.3 = add nuw nsw i64 %indvars.iv260, 4
  %exitcond264.not.3 = icmp eq i64 %indvars.iv.next261.3, %wide.trip.count263
  br i1 %exitcond264.not.3, label %._crit_edge232, label %scalar.ph323, !llvm.loop !40

._crit_edge232:                                   ; preds = %scalar.ph323.prol.loopexit, %scalar.ph323, %middle.block322
  %indvars.iv.next266 = add nuw nsw i64 %indvars.iv265, 1
  %exitcond269.not = icmp eq i64 %indvars.iv.next266, %wide.trip.count268
  br i1 %exitcond269.not, label %._crit_edge237, label %.lr.ph231, !llvm.loop !41

._crit_edge237:                                   ; preds = %._crit_edge232, %.lr.ph236, %._crit_edge227
  call void @dtrmm_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.3, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull @c_b8, ptr noundef %102, ptr noundef nonnull %3, ptr noundef %92, ptr noundef nonnull %5) #4
  %222 = load i32, ptr %0, align 4, !tbaa !5
  %223 = load i32, ptr %1, align 4, !tbaa !5
  %224 = sub nsw i32 %222, %223
  store i32 %224, ptr %8, align 4, !tbaa !5
  %225 = add nsw i32 %42, %12
  %226 = sext i32 %225 to i64
  %227 = getelementptr inbounds double, ptr %14, i64 %226
  %228 = add nsw i32 %42, %99
  %229 = sext i32 %228 to i64
  %230 = getelementptr inbounds double, ptr %14, i64 %229
  call void @dgemm_(ptr noundef nonnull @.str.2, ptr noundef nonnull @.str.4, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull %8, ptr noundef nonnull @c_b8, ptr noundef %227, ptr noundef nonnull %3, ptr noundef %230, ptr noundef nonnull %3, ptr noundef nonnull @c_b8, ptr noundef %92, ptr noundef nonnull %5) #4
  call void @dtrmm_(ptr noundef nonnull @.str.1, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.4, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull @c_b20, ptr noundef %4, ptr noundef nonnull %5, ptr noundef %92, ptr noundef nonnull %5) #4
  call void @dtrmm_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.3, ptr noundef nonnull @.str.4, ptr noundef nonnull @.str.4, ptr noundef nonnull %10, ptr noundef nonnull %11, ptr noundef nonnull @c_b8, ptr noundef %170, ptr noundef nonnull %5, ptr noundef %92, ptr noundef nonnull %5) #4
  br label %231

231:                                              ; preds = %32, %._crit_edge237, %.thread
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %11) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %10) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %9) #4
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %8) #4
  ret void
}

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

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

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

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

declare void @dgemm_(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 i32 @llvm.umax.i32(i32, i32) #3

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

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

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"int", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !10, i64 0}
!10 = !{!"double", !7, i64 0}
!11 = !{!12}
!12 = distinct !{!12, !13}
!13 = distinct !{!13, !"LVerDomain"}
!14 = !{!15}
!15 = distinct !{!15, !13}
!16 = distinct !{!16, !17, !18, !19}
!17 = !{!"llvm.loop.mustprogress"}
!18 = !{!"llvm.loop.isvectorized", i32 1}
!19 = !{!"llvm.loop.unroll.runtime.disable"}
!20 = distinct !{!20, !21}
!21 = !{!"llvm.loop.unroll.disable"}
!22 = distinct !{!22, !17, !18}
!23 = distinct !{!23, !17}
!24 = !{!25}
!25 = distinct !{!25, !26}
!26 = distinct !{!26, !"LVerDomain"}
!27 = !{!28}
!28 = distinct !{!28, !26}
!29 = distinct !{!29, !17, !18, !19}
!30 = distinct !{!30, !21}
!31 = distinct !{!31, !17, !18}
!32 = distinct !{!32, !17}
!33 = !{!34}
!34 = distinct !{!34, !35}
!35 = distinct !{!35, !"LVerDomain"}
!36 = !{!37}
!37 = distinct !{!37, !35}
!38 = distinct !{!38, !17, !18, !19}
!39 = distinct !{!39, !21}
!40 = distinct !{!40, !17, !18}
!41 = distinct !{!41, !17}


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