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

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

%struct.complex = type { float, float }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@c_b1 = external hidden global %struct.complex, align 4
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [13 x i8], align 1

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

95:                                               ; preds = %16
  %96 = load ptr, ptr %22, align 8, !tbaa !5
  %97 = load i32, ptr %96, align 4, !tbaa !9
  %98 = icmp sle i32 %97, 0
  br i1 %98, label %99, label %100

99:                                               ; preds = %95, %16
  store i32 1, ptr %51, align 4
  br label %586

100:                                              ; preds = %95
  store i32 0, ptr %47, align 4, !tbaa !9
  %101 = load ptr, ptr %19, align 8, !tbaa !5
  %102 = call i32 @lsame_(ptr noundef %101, ptr noundef @.str)
  %103 = icmp ne i32 %102, 0
  br i1 %103, label %105, label %104

104:                                              ; preds = %100
  store i32 -3, ptr %47, align 4, !tbaa !9
  br label %111

105:                                              ; preds = %100
  %106 = load ptr, ptr %20, align 8, !tbaa !5
  %107 = call i32 @lsame_(ptr noundef %106, ptr noundef @.str.1)
  %108 = icmp ne i32 %107, 0
  br i1 %108, label %110, label %109

109:                                              ; preds = %105
  store i32 -4, ptr %47, align 4, !tbaa !9
  br label %110

110:                                              ; preds = %109, %105
  br label %111

111:                                              ; preds = %110, %104
  %112 = load i32, ptr %47, align 4, !tbaa !9
  %113 = icmp ne i32 %112, 0
  br i1 %113, label %114, label %118

114:                                              ; preds = %111
  %115 = load i32, ptr %47, align 4, !tbaa !9
  %116 = sub nsw i32 0, %115
  store i32 %116, ptr %41, align 4, !tbaa !9
  %117 = call i32 @xerbla_(ptr noundef @.str.2, ptr noundef %41, i32 noundef 6)
  store i32 1, ptr %51, align 4
  br label %586

118:                                              ; preds = %111
  %119 = load ptr, ptr %18, align 8, !tbaa !5
  %120 = call i32 @lsame_(ptr noundef %119, ptr noundef @.str.3)
  %121 = icmp ne i32 %120, 0
  br i1 %121, label %122, label %124

122:                                              ; preds = %118
  %123 = getelementptr inbounds [1 x i8], ptr %50, i64 0, i64 0
  store i8 67, ptr %123, align 1, !tbaa !11
  br label %126

124:                                              ; preds = %118
  %125 = getelementptr inbounds [1 x i8], ptr %50, i64 0, i64 0
  store i8 78, ptr %125, align 1, !tbaa !11
  br label %126

126:                                              ; preds = %124, %122
  %127 = load ptr, ptr %17, align 8, !tbaa !5
  %128 = call i32 @lsame_(ptr noundef %127, ptr noundef @.str.4)
  %129 = icmp ne i32 %128, 0
  br i1 %129, label %130, label %311

130:                                              ; preds = %126
  %131 = load ptr, ptr %23, align 8, !tbaa !5
  %132 = load i32, ptr %131, align 4, !tbaa !9
  store i32 %132, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %133

133:                                              ; preds = %153, %130
  %134 = load i32, ptr %49, align 4, !tbaa !9
  %135 = load i32, ptr %41, align 4, !tbaa !9
  %136 = icmp sle i32 %134, %135
  br i1 %136, label %137, label %156

137:                                              ; preds = %133
  %138 = load ptr, ptr %22, align 8, !tbaa !5
  %139 = load ptr, ptr %29, align 8, !tbaa !5
  %140 = load i32, ptr %49, align 4, !tbaa !9
  %141 = load i32, ptr %33, align 4, !tbaa !9
  %142 = add nsw i32 %140, %141
  %143 = sext i32 %142 to i64
  %144 = getelementptr inbounds %struct.complex, ptr %139, i64 %143
  %145 = load ptr, ptr %30, align 8, !tbaa !5
  %146 = load ptr, ptr %31, align 8, !tbaa !5
  %147 = load i32, ptr %49, align 4, !tbaa !9
  %148 = load i32, ptr %39, align 4, !tbaa !9
  %149 = mul nsw i32 %147, %148
  %150 = add nsw i32 %149, 1
  %151 = sext i32 %150 to i64
  %152 = getelementptr inbounds %struct.complex, ptr %146, i64 %151
  call void @ccopy_(ptr noundef %138, ptr noundef %144, ptr noundef %145, ptr noundef %152, ptr noundef @c__1)
  br label %153

153:                                              ; preds = %137
  %154 = load i32, ptr %49, align 4, !tbaa !9
  %155 = add nsw i32 %154, 1
  store i32 %155, ptr %49, align 4, !tbaa !9
  br label %133, !llvm.loop !12

156:                                              ; preds = %133
  %157 = load ptr, ptr %24, align 8, !tbaa !5
  %158 = load i32, ptr %157, align 4, !tbaa !9
  %159 = icmp sgt i32 %158, 0
  br i1 %159, label %160, label %186

160:                                              ; preds = %156
  %161 = load ptr, ptr %22, align 8, !tbaa !5
  %162 = load ptr, ptr %23, align 8, !tbaa !5
  %163 = load ptr, ptr %24, align 8, !tbaa !5
  %164 = load ptr, ptr %29, align 8, !tbaa !5
  %165 = load ptr, ptr %21, align 8, !tbaa !5
  %166 = load i32, ptr %165, align 4, !tbaa !9
  %167 = load ptr, ptr %24, align 8, !tbaa !5
  %168 = load i32, ptr %167, align 4, !tbaa !9
  %169 = sub nsw i32 %166, %168
  %170 = add nsw i32 %169, 1
  %171 = load i32, ptr %33, align 4, !tbaa !9
  %172 = add nsw i32 %170, %171
  %173 = sext i32 %172 to i64
  %174 = getelementptr inbounds %struct.complex, ptr %164, i64 %173
  %175 = load ptr, ptr %30, align 8, !tbaa !5
  %176 = load ptr, ptr %25, align 8, !tbaa !5
  %177 = load i32, ptr %38, align 4, !tbaa !9
  %178 = sext i32 %177 to i64
  %179 = getelementptr inbounds %struct.complex, ptr %176, i64 %178
  %180 = load ptr, ptr %26, align 8, !tbaa !5
  %181 = load ptr, ptr %31, align 8, !tbaa !5
  %182 = load i32, ptr %40, align 4, !tbaa !9
  %183 = sext i32 %182 to i64
  %184 = getelementptr inbounds %struct.complex, ptr %181, i64 %183
  %185 = load ptr, ptr %32, align 8, !tbaa !5
  call void @cgemm_(ptr noundef @.str.5, ptr noundef @.str.6, ptr noundef %161, ptr noundef %162, ptr noundef %163, ptr noundef @c_b1, ptr noundef %174, ptr noundef %175, ptr noundef %179, ptr noundef %180, ptr noundef @c_b1, ptr noundef %184, ptr noundef %185)
  br label %186

186:                                              ; preds = %160, %156
  %187 = getelementptr inbounds [1 x i8], ptr %50, i64 0, i64 0
  %188 = load ptr, ptr %22, align 8, !tbaa !5
  %189 = load ptr, ptr %23, align 8, !tbaa !5
  %190 = load ptr, ptr %27, align 8, !tbaa !5
  %191 = load i32, ptr %36, align 4, !tbaa !9
  %192 = sext i32 %191 to i64
  %193 = getelementptr inbounds %struct.complex, ptr %190, i64 %192
  %194 = load ptr, ptr %28, align 8, !tbaa !5
  %195 = load ptr, ptr %31, align 8, !tbaa !5
  %196 = load i32, ptr %40, align 4, !tbaa !9
  %197 = sext i32 %196 to i64
  %198 = getelementptr inbounds %struct.complex, ptr %195, i64 %197
  %199 = load ptr, ptr %32, align 8, !tbaa !5
  call void @ctrmm_(ptr noundef @.str.7, ptr noundef @.str.8, ptr noundef %187, ptr noundef @.str.9, ptr noundef %188, ptr noundef %189, ptr noundef @c_b1, ptr noundef %193, ptr noundef %194, ptr noundef %198, ptr noundef %199)
  %200 = load ptr, ptr %22, align 8, !tbaa !5
  %201 = load i32, ptr %200, align 4, !tbaa !9
  store i32 %201, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %202

202:                                              ; preds = %275, %186
  %203 = load i32, ptr %49, align 4, !tbaa !9
  %204 = load i32, ptr %41, align 4, !tbaa !9
  %205 = icmp sle i32 %203, %204
  br i1 %205, label %206, label %278

206:                                              ; preds = %202
  %207 = load ptr, ptr %23, align 8, !tbaa !5
  %208 = load i32, ptr %207, align 4, !tbaa !9
  store i32 %208, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %209

209:                                              ; preds = %271, %206
  %210 = load i32, ptr %48, align 4, !tbaa !9
  %211 = load i32, ptr %42, align 4, !tbaa !9
  %212 = icmp sle i32 %210, %211
  br i1 %212, label %213, label %274

213:                                              ; preds = %209
  %214 = load i32, ptr %48, align 4, !tbaa !9
  %215 = load i32, ptr %49, align 4, !tbaa !9
  %216 = load i32, ptr %33, align 4, !tbaa !9
  %217 = mul nsw i32 %215, %216
  %218 = add nsw i32 %214, %217
  store i32 %218, ptr %43, align 4, !tbaa !9
  %219 = load i32, ptr %48, align 4, !tbaa !9
  %220 = load i32, ptr %49, align 4, !tbaa !9
  %221 = load i32, ptr %33, align 4, !tbaa !9
  %222 = mul nsw i32 %220, %221
  %223 = add nsw i32 %219, %222
  store i32 %223, ptr %44, align 4, !tbaa !9
  %224 = load i32, ptr %49, align 4, !tbaa !9
  %225 = load i32, ptr %48, align 4, !tbaa !9
  %226 = load i32, ptr %39, align 4, !tbaa !9
  %227 = mul nsw i32 %225, %226
  %228 = add nsw i32 %224, %227
  store i32 %228, ptr %45, align 4, !tbaa !9
  %229 = load ptr, ptr %29, align 8, !tbaa !5
  %230 = load i32, ptr %44, align 4, !tbaa !9
  %231 = sext i32 %230 to i64
  %232 = getelementptr inbounds %struct.complex, ptr %229, i64 %231
  %233 = getelementptr inbounds %struct.complex, ptr %232, i32 0, i32 0
  %234 = load float, ptr %233, align 4, !tbaa !14
  %235 = load ptr, ptr %31, align 8, !tbaa !5
  %236 = load i32, ptr %45, align 4, !tbaa !9
  %237 = sext i32 %236 to i64
  %238 = getelementptr inbounds %struct.complex, ptr %235, i64 %237
  %239 = getelementptr inbounds %struct.complex, ptr %238, i32 0, i32 0
  %240 = load float, ptr %239, align 4, !tbaa !14
  %241 = fsub float %234, %240
  %242 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 0
  store float %241, ptr %242, align 4, !tbaa !14
  %243 = load ptr, ptr %29, align 8, !tbaa !5
  %244 = load i32, ptr %44, align 4, !tbaa !9
  %245 = sext i32 %244 to i64
  %246 = getelementptr inbounds %struct.complex, ptr %243, i64 %245
  %247 = getelementptr inbounds %struct.complex, ptr %246, i32 0, i32 1
  %248 = load float, ptr %247, align 4, !tbaa !17
  %249 = load ptr, ptr %31, align 8, !tbaa !5
  %250 = load i32, ptr %45, align 4, !tbaa !9
  %251 = sext i32 %250 to i64
  %252 = getelementptr inbounds %struct.complex, ptr %249, i64 %251
  %253 = getelementptr inbounds %struct.complex, ptr %252, i32 0, i32 1
  %254 = load float, ptr %253, align 4, !tbaa !17
  %255 = fsub float %248, %254
  %256 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 1
  store float %255, ptr %256, align 4, !tbaa !17
  %257 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 0
  %258 = load float, ptr %257, align 4, !tbaa !14
  %259 = load ptr, ptr %29, align 8, !tbaa !5
  %260 = load i32, ptr %43, align 4, !tbaa !9
  %261 = sext i32 %260 to i64
  %262 = getelementptr inbounds %struct.complex, ptr %259, i64 %261
  %263 = getelementptr inbounds %struct.complex, ptr %262, i32 0, i32 0
  store float %258, ptr %263, align 4, !tbaa !14
  %264 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 1
  %265 = load float, ptr %264, align 4, !tbaa !17
  %266 = load ptr, ptr %29, align 8, !tbaa !5
  %267 = load i32, ptr %43, align 4, !tbaa !9
  %268 = sext i32 %267 to i64
  %269 = getelementptr inbounds %struct.complex, ptr %266, i64 %268
  %270 = getelementptr inbounds %struct.complex, ptr %269, i32 0, i32 1
  store float %265, ptr %270, align 4, !tbaa !17
  br label %271

271:                                              ; preds = %213
  %272 = load i32, ptr %48, align 4, !tbaa !9
  %273 = add nsw i32 %272, 1
  store i32 %273, ptr %48, align 4, !tbaa !9
  br label %209, !llvm.loop !18

274:                                              ; preds = %209
  br label %275

275:                                              ; preds = %274
  %276 = load i32, ptr %49, align 4, !tbaa !9
  %277 = add nsw i32 %276, 1
  store i32 %277, ptr %49, align 4, !tbaa !9
  br label %202, !llvm.loop !19

278:                                              ; preds = %202
  %279 = load ptr, ptr %24, align 8, !tbaa !5
  %280 = load i32, ptr %279, align 4, !tbaa !9
  %281 = icmp sgt i32 %280, 0
  br i1 %281, label %282, label %310

282:                                              ; preds = %278
  %283 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 0
  store float -1.000000e+00, ptr %283, align 4, !tbaa !14
  %284 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 1
  store float 0.000000e+00, ptr %284, align 4, !tbaa !17
  %285 = load ptr, ptr %24, align 8, !tbaa !5
  %286 = load ptr, ptr %22, align 8, !tbaa !5
  %287 = load ptr, ptr %23, align 8, !tbaa !5
  %288 = load ptr, ptr %25, align 8, !tbaa !5
  %289 = load i32, ptr %38, align 4, !tbaa !9
  %290 = sext i32 %289 to i64
  %291 = getelementptr inbounds %struct.complex, ptr %288, i64 %290
  %292 = load ptr, ptr %26, align 8, !tbaa !5
  %293 = load ptr, ptr %31, align 8, !tbaa !5
  %294 = load i32, ptr %40, align 4, !tbaa !9
  %295 = sext i32 %294 to i64
  %296 = getelementptr inbounds %struct.complex, ptr %293, i64 %295
  %297 = load ptr, ptr %32, align 8, !tbaa !5
  %298 = load ptr, ptr %29, align 8, !tbaa !5
  %299 = load ptr, ptr %21, align 8, !tbaa !5
  %300 = load i32, ptr %299, align 4, !tbaa !9
  %301 = load ptr, ptr %24, align 8, !tbaa !5
  %302 = load i32, ptr %301, align 4, !tbaa !9
  %303 = sub nsw i32 %300, %302
  %304 = add nsw i32 %303, 1
  %305 = load i32, ptr %33, align 4, !tbaa !9
  %306 = add nsw i32 %304, %305
  %307 = sext i32 %306 to i64
  %308 = getelementptr inbounds %struct.complex, ptr %298, i64 %307
  %309 = load ptr, ptr %30, align 8, !tbaa !5
  call void @cgemm_(ptr noundef @.str.5, ptr noundef @.str.5, ptr noundef %285, ptr noundef %286, ptr noundef %287, ptr noundef %46, ptr noundef %291, ptr noundef %292, ptr noundef %296, ptr noundef %297, ptr noundef @c_b1, ptr noundef %308, ptr noundef %309)
  br label %310

310:                                              ; preds = %282, %278
  br label %585

311:                                              ; preds = %126
  %312 = load ptr, ptr %17, align 8, !tbaa !5
  %313 = call i32 @lsame_(ptr noundef %312, ptr noundef @.str.1)
  %314 = icmp ne i32 %313, 0
  br i1 %314, label %315, label %584

315:                                              ; preds = %311
  %316 = load ptr, ptr %23, align 8, !tbaa !5
  %317 = load i32, ptr %316, align 4, !tbaa !9
  store i32 %317, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %318

318:                                              ; preds = %338, %315
  %319 = load i32, ptr %49, align 4, !tbaa !9
  %320 = load i32, ptr %41, align 4, !tbaa !9
  %321 = icmp sle i32 %319, %320
  br i1 %321, label %322, label %341

322:                                              ; preds = %318
  %323 = load ptr, ptr %21, align 8, !tbaa !5
  %324 = load ptr, ptr %29, align 8, !tbaa !5
  %325 = load i32, ptr %49, align 4, !tbaa !9
  %326 = load i32, ptr %33, align 4, !tbaa !9
  %327 = mul nsw i32 %325, %326
  %328 = add nsw i32 %327, 1
  %329 = sext i32 %328 to i64
  %330 = getelementptr inbounds %struct.complex, ptr %324, i64 %329
  %331 = load ptr, ptr %31, align 8, !tbaa !5
  %332 = load i32, ptr %49, align 4, !tbaa !9
  %333 = load i32, ptr %39, align 4, !tbaa !9
  %334 = mul nsw i32 %332, %333
  %335 = add nsw i32 %334, 1
  %336 = sext i32 %335 to i64
  %337 = getelementptr inbounds %struct.complex, ptr %331, i64 %336
  call void @ccopy_(ptr noundef %323, ptr noundef %330, ptr noundef @c__1, ptr noundef %337, ptr noundef @c__1)
  br label %338

338:                                              ; preds = %322
  %339 = load i32, ptr %49, align 4, !tbaa !9
  %340 = add nsw i32 %339, 1
  store i32 %340, ptr %49, align 4, !tbaa !9
  br label %318, !llvm.loop !20

341:                                              ; preds = %318
  %342 = load ptr, ptr %24, align 8, !tbaa !5
  %343 = load i32, ptr %342, align 4, !tbaa !9
  %344 = icmp sgt i32 %343, 0
  br i1 %344, label %345, label %372

345:                                              ; preds = %341
  %346 = load ptr, ptr %21, align 8, !tbaa !5
  %347 = load ptr, ptr %23, align 8, !tbaa !5
  %348 = load ptr, ptr %24, align 8, !tbaa !5
  %349 = load ptr, ptr %29, align 8, !tbaa !5
  %350 = load ptr, ptr %22, align 8, !tbaa !5
  %351 = load i32, ptr %350, align 4, !tbaa !9
  %352 = load ptr, ptr %24, align 8, !tbaa !5
  %353 = load i32, ptr %352, align 4, !tbaa !9
  %354 = sub nsw i32 %351, %353
  %355 = add nsw i32 %354, 1
  %356 = load i32, ptr %33, align 4, !tbaa !9
  %357 = mul nsw i32 %355, %356
  %358 = add nsw i32 %357, 1
  %359 = sext i32 %358 to i64
  %360 = getelementptr inbounds %struct.complex, ptr %349, i64 %359
  %361 = load ptr, ptr %30, align 8, !tbaa !5
  %362 = load ptr, ptr %25, align 8, !tbaa !5
  %363 = load i32, ptr %38, align 4, !tbaa !9
  %364 = sext i32 %363 to i64
  %365 = getelementptr inbounds %struct.complex, ptr %362, i64 %364
  %366 = load ptr, ptr %26, align 8, !tbaa !5
  %367 = load ptr, ptr %31, align 8, !tbaa !5
  %368 = load i32, ptr %40, align 4, !tbaa !9
  %369 = sext i32 %368 to i64
  %370 = getelementptr inbounds %struct.complex, ptr %367, i64 %369
  %371 = load ptr, ptr %32, align 8, !tbaa !5
  call void @cgemm_(ptr noundef @.str.10, ptr noundef @.str.5, ptr noundef %346, ptr noundef %347, ptr noundef %348, ptr noundef @c_b1, ptr noundef %360, ptr noundef %361, ptr noundef %365, ptr noundef %366, ptr noundef @c_b1, ptr noundef %370, ptr noundef %371)
  br label %372

372:                                              ; preds = %345, %341
  %373 = load ptr, ptr %23, align 8, !tbaa !5
  %374 = load i32, ptr %373, align 4, !tbaa !9
  store i32 %374, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %375

375:                                              ; preds = %393, %372
  %376 = load i32, ptr %49, align 4, !tbaa !9
  %377 = load i32, ptr %41, align 4, !tbaa !9
  %378 = icmp sle i32 %376, %377
  br i1 %378, label %379, label %396

379:                                              ; preds = %375
  %380 = load ptr, ptr %23, align 8, !tbaa !5
  %381 = load i32, ptr %380, align 4, !tbaa !9
  %382 = load i32, ptr %49, align 4, !tbaa !9
  %383 = sub nsw i32 %381, %382
  %384 = add nsw i32 %383, 1
  store i32 %384, ptr %42, align 4, !tbaa !9
  %385 = load ptr, ptr %27, align 8, !tbaa !5
  %386 = load i32, ptr %49, align 4, !tbaa !9
  %387 = load i32, ptr %49, align 4, !tbaa !9
  %388 = load i32, ptr %35, align 4, !tbaa !9
  %389 = mul nsw i32 %387, %388
  %390 = add nsw i32 %386, %389
  %391 = sext i32 %390 to i64
  %392 = getelementptr inbounds %struct.complex, ptr %385, i64 %391
  call void @clacgv_(ptr noundef %42, ptr noundef %392, ptr noundef @c__1)
  br label %393

393:                                              ; preds = %379
  %394 = load i32, ptr %49, align 4, !tbaa !9
  %395 = add nsw i32 %394, 1
  store i32 %395, ptr %49, align 4, !tbaa !9
  br label %375, !llvm.loop !21

396:                                              ; preds = %375
  %397 = load ptr, ptr %18, align 8, !tbaa !5
  %398 = load ptr, ptr %21, align 8, !tbaa !5
  %399 = load ptr, ptr %23, align 8, !tbaa !5
  %400 = load ptr, ptr %27, align 8, !tbaa !5
  %401 = load i32, ptr %36, align 4, !tbaa !9
  %402 = sext i32 %401 to i64
  %403 = getelementptr inbounds %struct.complex, ptr %400, i64 %402
  %404 = load ptr, ptr %28, align 8, !tbaa !5
  %405 = load ptr, ptr %31, align 8, !tbaa !5
  %406 = load i32, ptr %40, align 4, !tbaa !9
  %407 = sext i32 %406 to i64
  %408 = getelementptr inbounds %struct.complex, ptr %405, i64 %407
  %409 = load ptr, ptr %32, align 8, !tbaa !5
  call void @ctrmm_(ptr noundef @.str.7, ptr noundef @.str.8, ptr noundef %397, ptr noundef @.str.9, ptr noundef %398, ptr noundef %399, ptr noundef @c_b1, ptr noundef %403, ptr noundef %404, ptr noundef %408, ptr noundef %409)
  %410 = load ptr, ptr %23, align 8, !tbaa !5
  %411 = load i32, ptr %410, align 4, !tbaa !9
  store i32 %411, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %412

412:                                              ; preds = %430, %396
  %413 = load i32, ptr %49, align 4, !tbaa !9
  %414 = load i32, ptr %41, align 4, !tbaa !9
  %415 = icmp sle i32 %413, %414
  br i1 %415, label %416, label %433

416:                                              ; preds = %412
  %417 = load ptr, ptr %23, align 8, !tbaa !5
  %418 = load i32, ptr %417, align 4, !tbaa !9
  %419 = load i32, ptr %49, align 4, !tbaa !9
  %420 = sub nsw i32 %418, %419
  %421 = add nsw i32 %420, 1
  store i32 %421, ptr %42, align 4, !tbaa !9
  %422 = load ptr, ptr %27, align 8, !tbaa !5
  %423 = load i32, ptr %49, align 4, !tbaa !9
  %424 = load i32, ptr %49, align 4, !tbaa !9
  %425 = load i32, ptr %35, align 4, !tbaa !9
  %426 = mul nsw i32 %424, %425
  %427 = add nsw i32 %423, %426
  %428 = sext i32 %427 to i64
  %429 = getelementptr inbounds %struct.complex, ptr %422, i64 %428
  call void @clacgv_(ptr noundef %42, ptr noundef %429, ptr noundef @c__1)
  br label %430

430:                                              ; preds = %416
  %431 = load i32, ptr %49, align 4, !tbaa !9
  %432 = add nsw i32 %431, 1
  store i32 %432, ptr %49, align 4, !tbaa !9
  br label %412, !llvm.loop !22

433:                                              ; preds = %412
  %434 = load ptr, ptr %23, align 8, !tbaa !5
  %435 = load i32, ptr %434, align 4, !tbaa !9
  store i32 %435, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %436

436:                                              ; preds = %509, %433
  %437 = load i32, ptr %49, align 4, !tbaa !9
  %438 = load i32, ptr %41, align 4, !tbaa !9
  %439 = icmp sle i32 %437, %438
  br i1 %439, label %440, label %512

440:                                              ; preds = %436
  %441 = load ptr, ptr %21, align 8, !tbaa !5
  %442 = load i32, ptr %441, align 4, !tbaa !9
  store i32 %442, ptr %42, align 4, !tbaa !9
  store i32 1, ptr %48, align 4, !tbaa !9
  br label %443

443:                                              ; preds = %505, %440
  %444 = load i32, ptr %48, align 4, !tbaa !9
  %445 = load i32, ptr %42, align 4, !tbaa !9
  %446 = icmp sle i32 %444, %445
  br i1 %446, label %447, label %508

447:                                              ; preds = %443
  %448 = load i32, ptr %48, align 4, !tbaa !9
  %449 = load i32, ptr %49, align 4, !tbaa !9
  %450 = load i32, ptr %33, align 4, !tbaa !9
  %451 = mul nsw i32 %449, %450
  %452 = add nsw i32 %448, %451
  store i32 %452, ptr %43, align 4, !tbaa !9
  %453 = load i32, ptr %48, align 4, !tbaa !9
  %454 = load i32, ptr %49, align 4, !tbaa !9
  %455 = load i32, ptr %33, align 4, !tbaa !9
  %456 = mul nsw i32 %454, %455
  %457 = add nsw i32 %453, %456
  store i32 %457, ptr %44, align 4, !tbaa !9
  %458 = load i32, ptr %48, align 4, !tbaa !9
  %459 = load i32, ptr %49, align 4, !tbaa !9
  %460 = load i32, ptr %39, align 4, !tbaa !9
  %461 = mul nsw i32 %459, %460
  %462 = add nsw i32 %458, %461
  store i32 %462, ptr %45, align 4, !tbaa !9
  %463 = load ptr, ptr %29, align 8, !tbaa !5
  %464 = load i32, ptr %44, align 4, !tbaa !9
  %465 = sext i32 %464 to i64
  %466 = getelementptr inbounds %struct.complex, ptr %463, i64 %465
  %467 = getelementptr inbounds %struct.complex, ptr %466, i32 0, i32 0
  %468 = load float, ptr %467, align 4, !tbaa !14
  %469 = load ptr, ptr %31, align 8, !tbaa !5
  %470 = load i32, ptr %45, align 4, !tbaa !9
  %471 = sext i32 %470 to i64
  %472 = getelementptr inbounds %struct.complex, ptr %469, i64 %471
  %473 = getelementptr inbounds %struct.complex, ptr %472, i32 0, i32 0
  %474 = load float, ptr %473, align 4, !tbaa !14
  %475 = fsub float %468, %474
  %476 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 0
  store float %475, ptr %476, align 4, !tbaa !14
  %477 = load ptr, ptr %29, align 8, !tbaa !5
  %478 = load i32, ptr %44, align 4, !tbaa !9
  %479 = sext i32 %478 to i64
  %480 = getelementptr inbounds %struct.complex, ptr %477, i64 %479
  %481 = getelementptr inbounds %struct.complex, ptr %480, i32 0, i32 1
  %482 = load float, ptr %481, align 4, !tbaa !17
  %483 = load ptr, ptr %31, align 8, !tbaa !5
  %484 = load i32, ptr %45, align 4, !tbaa !9
  %485 = sext i32 %484 to i64
  %486 = getelementptr inbounds %struct.complex, ptr %483, i64 %485
  %487 = getelementptr inbounds %struct.complex, ptr %486, i32 0, i32 1
  %488 = load float, ptr %487, align 4, !tbaa !17
  %489 = fsub float %482, %488
  %490 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 1
  store float %489, ptr %490, align 4, !tbaa !17
  %491 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 0
  %492 = load float, ptr %491, align 4, !tbaa !14
  %493 = load ptr, ptr %29, align 8, !tbaa !5
  %494 = load i32, ptr %43, align 4, !tbaa !9
  %495 = sext i32 %494 to i64
  %496 = getelementptr inbounds %struct.complex, ptr %493, i64 %495
  %497 = getelementptr inbounds %struct.complex, ptr %496, i32 0, i32 0
  store float %492, ptr %497, align 4, !tbaa !14
  %498 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 1
  %499 = load float, ptr %498, align 4, !tbaa !17
  %500 = load ptr, ptr %29, align 8, !tbaa !5
  %501 = load i32, ptr %43, align 4, !tbaa !9
  %502 = sext i32 %501 to i64
  %503 = getelementptr inbounds %struct.complex, ptr %500, i64 %502
  %504 = getelementptr inbounds %struct.complex, ptr %503, i32 0, i32 1
  store float %499, ptr %504, align 4, !tbaa !17
  br label %505

505:                                              ; preds = %447
  %506 = load i32, ptr %48, align 4, !tbaa !9
  %507 = add nsw i32 %506, 1
  store i32 %507, ptr %48, align 4, !tbaa !9
  br label %443, !llvm.loop !23

508:                                              ; preds = %443
  br label %509

509:                                              ; preds = %508
  %510 = load i32, ptr %49, align 4, !tbaa !9
  %511 = add nsw i32 %510, 1
  store i32 %511, ptr %49, align 4, !tbaa !9
  br label %436, !llvm.loop !24

512:                                              ; preds = %436
  %513 = load ptr, ptr %24, align 8, !tbaa !5
  %514 = load i32, ptr %513, align 4, !tbaa !9
  store i32 %514, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %515

515:                                              ; preds = %528, %512
  %516 = load i32, ptr %49, align 4, !tbaa !9
  %517 = load i32, ptr %41, align 4, !tbaa !9
  %518 = icmp sle i32 %516, %517
  br i1 %518, label %519, label %531

519:                                              ; preds = %515
  %520 = load ptr, ptr %23, align 8, !tbaa !5
  %521 = load ptr, ptr %25, align 8, !tbaa !5
  %522 = load i32, ptr %49, align 4, !tbaa !9
  %523 = load i32, ptr %37, align 4, !tbaa !9
  %524 = mul nsw i32 %522, %523
  %525 = add nsw i32 %524, 1
  %526 = sext i32 %525 to i64
  %527 = getelementptr inbounds %struct.complex, ptr %521, i64 %526
  call void @clacgv_(ptr noundef %520, ptr noundef %527, ptr noundef @c__1)
  br label %528

528:                                              ; preds = %519
  %529 = load i32, ptr %49, align 4, !tbaa !9
  %530 = add nsw i32 %529, 1
  store i32 %530, ptr %49, align 4, !tbaa !9
  br label %515, !llvm.loop !25

531:                                              ; preds = %515
  %532 = load ptr, ptr %24, align 8, !tbaa !5
  %533 = load i32, ptr %532, align 4, !tbaa !9
  %534 = icmp sgt i32 %533, 0
  br i1 %534, label %535, label %564

535:                                              ; preds = %531
  %536 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 0
  store float -1.000000e+00, ptr %536, align 4, !tbaa !14
  %537 = getelementptr inbounds %struct.complex, ptr %46, i32 0, i32 1
  store float 0.000000e+00, ptr %537, align 4, !tbaa !17
  %538 = load ptr, ptr %21, align 8, !tbaa !5
  %539 = load ptr, ptr %24, align 8, !tbaa !5
  %540 = load ptr, ptr %23, align 8, !tbaa !5
  %541 = load ptr, ptr %31, align 8, !tbaa !5
  %542 = load i32, ptr %40, align 4, !tbaa !9
  %543 = sext i32 %542 to i64
  %544 = getelementptr inbounds %struct.complex, ptr %541, i64 %543
  %545 = load ptr, ptr %32, align 8, !tbaa !5
  %546 = load ptr, ptr %25, align 8, !tbaa !5
  %547 = load i32, ptr %38, align 4, !tbaa !9
  %548 = sext i32 %547 to i64
  %549 = getelementptr inbounds %struct.complex, ptr %546, i64 %548
  %550 = load ptr, ptr %26, align 8, !tbaa !5
  %551 = load ptr, ptr %29, align 8, !tbaa !5
  %552 = load ptr, ptr %22, align 8, !tbaa !5
  %553 = load i32, ptr %552, align 4, !tbaa !9
  %554 = load ptr, ptr %24, align 8, !tbaa !5
  %555 = load i32, ptr %554, align 4, !tbaa !9
  %556 = sub nsw i32 %553, %555
  %557 = add nsw i32 %556, 1
  %558 = load i32, ptr %33, align 4, !tbaa !9
  %559 = mul nsw i32 %557, %558
  %560 = add nsw i32 %559, 1
  %561 = sext i32 %560 to i64
  %562 = getelementptr inbounds %struct.complex, ptr %551, i64 %561
  %563 = load ptr, ptr %30, align 8, !tbaa !5
  call void @cgemm_(ptr noundef @.str.10, ptr noundef @.str.10, ptr noundef %538, ptr noundef %539, ptr noundef %540, ptr noundef %46, ptr noundef %544, ptr noundef %545, ptr noundef %549, ptr noundef %550, ptr noundef @c_b1, ptr noundef %562, ptr noundef %563)
  br label %564

564:                                              ; preds = %535, %531
  %565 = load ptr, ptr %24, align 8, !tbaa !5
  %566 = load i32, ptr %565, align 4, !tbaa !9
  store i32 %566, ptr %41, align 4, !tbaa !9
  store i32 1, ptr %49, align 4, !tbaa !9
  br label %567

567:                                              ; preds = %580, %564
  %568 = load i32, ptr %49, align 4, !tbaa !9
  %569 = load i32, ptr %41, align 4, !tbaa !9
  %570 = icmp sle i32 %568, %569
  br i1 %570, label %571, label %583

571:                                              ; preds = %567
  %572 = load ptr, ptr %23, align 8, !tbaa !5
  %573 = load ptr, ptr %25, align 8, !tbaa !5
  %574 = load i32, ptr %49, align 4, !tbaa !9
  %575 = load i32, ptr %37, align 4, !tbaa !9
  %576 = mul nsw i32 %574, %575
  %577 = add nsw i32 %576, 1
  %578 = sext i32 %577 to i64
  %579 = getelementptr inbounds %struct.complex, ptr %573, i64 %578
  call void @clacgv_(ptr noundef %572, ptr noundef %579, ptr noundef @c__1)
  br label %580

580:                                              ; preds = %571
  %581 = load i32, ptr %49, align 4, !tbaa !9
  %582 = add nsw i32 %581, 1
  store i32 %582, ptr %49, align 4, !tbaa !9
  br label %567, !llvm.loop !26

583:                                              ; preds = %567
  br label %584

584:                                              ; preds = %583, %311
  br label %585

585:                                              ; preds = %584, %310
  store i32 1, ptr %51, align 4
  br label %586

586:                                              ; preds = %585, %114, %99
  call void @llvm.lifetime.end.p0(i64 1, ptr %50) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %49) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %48) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %47) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %46) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %45) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %44) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %41) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %40) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %39) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  ret void
}

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

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

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

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

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

declare void @ctrmm_(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 @clacgv_(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 = !{!7, !7, i64 0}
!12 = distinct !{!12, !13}
!13 = !{!"llvm.loop.mustprogress"}
!14 = !{!15, !16, i64 0}
!15 = !{!"", !16, i64 0, !16, i64 4}
!16 = !{!"float", !7, i64 0}
!17 = !{!15, !16, i64 4}
!18 = distinct !{!18, !13}
!19 = distinct !{!19, !13}
!20 = distinct !{!20, !13}
!21 = distinct !{!21, !13}
!22 = distinct !{!22, !13}
!23 = distinct !{!23, !13}
!24 = distinct !{!24, !13}
!25 = distinct !{!25, !13}
!26 = distinct !{!26, !13}


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

%struct.complex = type { float, float }

@.str = external hidden unnamed_addr constant [2 x i8], align 1
@.str.1 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.2 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.3 = external hidden unnamed_addr constant [2 x i8], align 1
@.str.4 = external hidden unnamed_addr constant [2 x i8], align 1
@c__1 = external hidden global i32, align 4
@.str.5 = external hidden unnamed_addr constant [10 x i8], align 1
@.str.6 = external hidden unnamed_addr constant [20 x i8], align 1
@c_b1 = external hidden global %struct.complex, align 4
@.str.7 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.8 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.9 = external hidden unnamed_addr constant [9 x i8], align 1
@.str.10 = external hidden unnamed_addr constant [13 x i8], align 1

; Function Attrs: nounwind uwtable
define dso_local void @clarzb_(ptr noundef %0, ptr noundef %1, ptr noundef %2, ptr noundef %3, ptr noundef %4, ptr noundef %5, ptr noundef %6, ptr noundef %7, ptr noundef %8, ptr noundef %9, ptr noundef %10, ptr noundef %11, ptr noundef %12, ptr noundef %13, ptr noundef %14, ptr noundef %15) local_unnamed_addr #0 {
  %17 = alloca i32, align 4
  %18 = alloca i32, align 4
  %19 = alloca %struct.complex, align 8
  %20 = alloca [1 x i8], align 1
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %17) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr nonnull %18) #3
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %19) #3
  call void @llvm.lifetime.start.p0(i64 1, ptr nonnull %20) #3
  %21 = load i32, ptr %9, align 4, !tbaa !5
  %narrow229 = xor i32 %21, -1
  %22 = sext i32 %narrow229 to i64
  %23 = getelementptr inbounds %struct.complex, ptr %8, i64 %22
  %24 = load i32, ptr %11, align 4, !tbaa !5
  %narrow226 = xor i32 %24, -1
  %25 = sext i32 %narrow226 to i64
  %26 = getelementptr inbounds %struct.complex, ptr %10, i64 %25
  %27 = load i32, ptr %13, align 4, !tbaa !5
  %narrow = xor i32 %27, -1
  %28 = sext i32 %narrow to i64
  %29 = getelementptr inbounds %struct.complex, ptr %12, i64 %28
  %30 = load i32, ptr %15, align 4, !tbaa !5
  %narrow227 = xor i32 %30, -1
  %31 = sext i32 %narrow227 to i64
  %32 = getelementptr inbounds %struct.complex, ptr %14, i64 %31
  %33 = load i32, ptr %4, align 4, !tbaa !5
  %34 = icmp slt i32 %33, 1
  br i1 %34, label %.loopexit, label %35

35:                                               ; preds = %16
  %36 = load i32, ptr %5, align 4, !tbaa !5
  %37 = icmp slt i32 %36, 1
  br i1 %37, label %.loopexit, label %38

38:                                               ; preds = %35
  %39 = tail call i32 @lsame_(ptr noundef %2, ptr noundef nonnull @.str) #3
  %.not = icmp eq i32 %39, 0
  br i1 %.not, label %.thread, label %40

40:                                               ; preds = %38
  %41 = tail call i32 @lsame_(ptr noundef %3, ptr noundef nonnull @.str.1) #3
  %.not213.not = icmp eq i32 %41, 0
  br i1 %.not213.not, label %.thread, label %43

.thread:                                          ; preds = %38, %40
  %.0210.neg234 = phi i32 [ 4, %40 ], [ 3, %38 ]
  store i32 %.0210.neg234, ptr %17, align 4, !tbaa !5
  %42 = call i32 @xerbla_(ptr noundef nonnull @.str.2, ptr noundef nonnull %17, i32 noundef 6) #3
  br label %.loopexit

43:                                               ; preds = %40
  %44 = tail call i32 @lsame_(ptr noundef %1, ptr noundef nonnull @.str.3) #3
  %.not215 = icmp eq i32 %44, 0
  %. = select i1 %.not215, i8 78, i8 67
  store i8 %., ptr %20, align 1, !tbaa !9
  %45 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.4) #3
  %.not216 = icmp eq i32 %45, 0
  br i1 %.not216, label %117, label %46

46:                                               ; preds = %43
  %47 = load i32, ptr %6, align 4, !tbaa !5
  %invariant.gep = getelementptr i8, ptr %32, i64 8
  %.not225238 = icmp slt i32 %47, 1
  br i1 %.not225238, label %._crit_edge, label %.lr.ph.preheader

.lr.ph.preheader:                                 ; preds = %46
  %48 = sext i32 %27 to i64
  %49 = sext i32 %30 to i64
  %50 = add nuw i32 %47, 1
  %wide.trip.count = zext i32 %50 to i64
  %invariant.gep369 = getelementptr %struct.complex, ptr %29, i64 %48
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 1, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %gep370 = getelementptr %struct.complex, ptr %invariant.gep369, i64 %indvars.iv
  %51 = mul nsw i64 %indvars.iv, %49
  %gep = getelementptr %struct.complex, ptr %invariant.gep, i64 %51
  tail call void @ccopy_(ptr noundef nonnull %5, ptr noundef %gep370, ptr noundef nonnull %13, ptr noundef %gep, ptr noundef nonnull @c__1) #3
  %indvars.iv.next = add nuw nsw i64 %indvars.iv, 1
  %exitcond.not = icmp eq i64 %indvars.iv.next, %wide.trip.count
  br i1 %exitcond.not, label %._crit_edge, label %.lr.ph, !llvm.loop !10

._crit_edge:                                      ; preds = %.lr.ph, %46
  %52 = load i32, ptr %7, align 4, !tbaa !5
  %53 = icmp sgt i32 %52, 0
  br i1 %53, label %54, label %61

54:                                               ; preds = %._crit_edge
  %55 = load i32, ptr %4, align 4, !tbaa !5
  %56 = add i32 %27, 1
  %57 = sub i32 %56, %52
  %58 = add i32 %57, %55
  %59 = sext i32 %58 to i64
  %60 = getelementptr inbounds %struct.complex, ptr %29, i64 %59
  tail call void @cgemm_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.6, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef %60, ptr noundef nonnull %13, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull @c_b1, ptr noundef %14, ptr noundef nonnull %15) #3
  br label %61

61:                                               ; preds = %54, %._crit_edge
  call void @ctrmm_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, ptr noundef nonnull %20, ptr noundef nonnull @.str.9, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull @c_b1, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %14, ptr noundef nonnull %15) #3
  %62 = load i32, ptr %5, align 4, !tbaa !5
  %.not228250 = icmp slt i32 %62, 1
  br i1 %.not228250, label %._crit_edge255, label %.lr.ph254

.lr.ph254:                                        ; preds = %61
  %63 = load i32, ptr %6, align 4, !tbaa !5
  %.not230240 = icmp slt i32 %63, 1
  br i1 %.not230240, label %._crit_edge255, label %.lr.ph243.preheader

.lr.ph243.preheader:                              ; preds = %.lr.ph254
  %64 = sext i32 %30 to i64
  %65 = add nuw i32 %63, 1
  %66 = sext i32 %27 to i64
  %67 = add nuw i32 %62, 1
  %wide.trip.count333 = zext i32 %67 to i64
  %wide.trip.count328 = zext i32 %65 to i64
  %68 = shl nsw i64 %66, 3
  %69 = shl nsw i64 %28, 3
  %70 = getelementptr i8, ptr %12, i64 %68
  %71 = getelementptr i8, ptr %70, i64 %69
  %scevgep = getelementptr i8, ptr %71, i64 8
  %72 = shl nuw nsw i64 %wide.trip.count333, 3
  %73 = add nsw i64 %72, -8
  %74 = mul i64 %73, %66
  %75 = shl nuw nsw i64 %wide.trip.count328, 3
  %76 = getelementptr i8, ptr %12, i64 %74
  %77 = getelementptr i8, ptr %76, i64 %69
  %78 = getelementptr i8, ptr %77, i64 %75
  %scevgep380 = getelementptr i8, ptr %78, i64 -4
  %79 = getelementptr i8, ptr %14, i64 %72
  %80 = getelementptr i8, ptr %79, i64 %75
  %scevgep381 = getelementptr i8, ptr %80, i64 -28
  %81 = getelementptr i8, ptr %12, i64 %68
  %82 = getelementptr i8, ptr %81, i64 %69
  %scevgep382 = getelementptr i8, ptr %82, i64 12
  %83 = getelementptr i8, ptr %12, i64 %74
  %84 = getelementptr i8, ptr %83, i64 %69
  %scevgep383 = getelementptr i8, ptr %84, i64 %75
  %scevgep384 = getelementptr i8, ptr %14, i64 4
  %85 = getelementptr i8, ptr %14, i64 %72
  %86 = getelementptr i8, ptr %85, i64 %75
  %scevgep385 = getelementptr i8, ptr %86, i64 -24
  %87 = zext nneg i32 %63 to i64
  %88 = zext nneg i32 %63 to i64
  %min.iters.check = icmp ugt i32 %63, 5
  %ident.check.not = icmp eq i32 %30, 1
  %or.cond = select i1 %min.iters.check, i1 %ident.check.not, i1 false
  %bound0 = icmp ult ptr %scevgep, %scevgep381
  %bound1 = icmp ugt ptr %scevgep380, %14
  %found.conflict = and i1 %bound0, %bound1
  %bound0386 = icmp ult ptr %scevgep382, %scevgep385
  %bound1387 = icmp ult ptr %scevgep384, %scevgep383
  %found.conflict388 = and i1 %bound0386, %bound1387
  %stride.check389 = icmp slt i32 %27, 0
  %89 = or i1 %found.conflict388, %stride.check389
  %conflict.rdx = or i1 %found.conflict, %89
  %n.vec = and i64 %87, 2147483646
  %ind.end = or i64 %87, 1
  %cmp.n = icmp eq i64 %n.vec, %87
  %90 = and i32 %63, 1
  %lcmp.mod.not = icmp eq i32 %90, 0
  br label %.lr.ph243

.lr.ph243:                                        ; preds = %.lr.ph243.preheader, %._crit_edge244
  %indvars.iv330 = phi i64 [ 1, %.lr.ph243.preheader ], [ %indvars.iv.next331, %._crit_edge244 ]
  %91 = mul nsw i64 %indvars.iv330, %66
  %invariant.gep371 = getelementptr %struct.complex, ptr %29, i64 %91
  %invariant.gep373 = getelementptr %struct.complex, ptr %32, i64 %indvars.iv330
  %or.cond.not = xor i1 %or.cond, true
  %brmerge = select i1 %or.cond.not, i1 true, i1 %conflict.rdx
  br i1 %brmerge, label %scalar.ph.preheader, label %vector.body

vector.body:                                      ; preds = %.lr.ph243, %vector.body
  %index = phi i64 [ %index.next, %vector.body ], [ 0, %.lr.ph243 ]
  %offset.idx = or disjoint i64 %index, 1
  %92 = getelementptr %struct.complex, ptr %invariant.gep371, i64 %offset.idx
  %wide.vec = load <4 x float>, ptr %92, align 4, !tbaa !12
  %93 = getelementptr %struct.complex, ptr %invariant.gep373, i64 %offset.idx
  %wide.vec391 = load <4 x float>, ptr %93, align 4, !tbaa !12
  %interleaved.vec = fsub <4 x float> %wide.vec, %wide.vec391
  store <4 x float> %interleaved.vec, ptr %92, align 4, !tbaa !12
  %index.next = add nuw i64 %index, 2
  %94 = icmp eq i64 %index.next, %n.vec
  br i1 %94, label %middle.block, label %vector.body, !llvm.loop !14

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

scalar.ph.preheader:                              ; preds = %.lr.ph243, %middle.block
  %indvars.iv325.ph = phi i64 [ 1, %.lr.ph243 ], [ %ind.end, %middle.block ]
  br i1 %lcmp.mod.not, label %scalar.ph.prol.loopexit, label %scalar.ph.prol

scalar.ph.prol:                                   ; preds = %scalar.ph.preheader
  %95 = mul nsw i64 %indvars.iv325.ph, %64
  %gep372.prol = getelementptr %struct.complex, ptr %invariant.gep371, i64 %indvars.iv325.ph
  %gep374.prol = getelementptr %struct.complex, ptr %invariant.gep373, i64 %95
  %96 = load <2 x float>, ptr %gep372.prol, align 4, !tbaa !12
  %97 = load <2 x float>, ptr %gep374.prol, align 4, !tbaa !12
  %98 = fsub <2 x float> %96, %97
  store <2 x float> %98, ptr %gep372.prol, align 4, !tbaa !12
  %indvars.iv.next326.prol = add nuw nsw i64 %indvars.iv325.ph, 1
  br label %scalar.ph.prol.loopexit

scalar.ph.prol.loopexit:                          ; preds = %scalar.ph.prol, %scalar.ph.preheader
  %indvars.iv325.unr = phi i64 [ %indvars.iv325.ph, %scalar.ph.preheader ], [ %indvars.iv.next326.prol, %scalar.ph.prol ]
  %99 = icmp eq i64 %indvars.iv325.ph, %88
  br i1 %99, label %._crit_edge244, label %scalar.ph

scalar.ph:                                        ; preds = %scalar.ph.prol.loopexit, %scalar.ph
  %indvars.iv325 = phi i64 [ %indvars.iv.next326.1, %scalar.ph ], [ %indvars.iv325.unr, %scalar.ph.prol.loopexit ]
  %100 = mul nsw i64 %indvars.iv325, %64
  %gep372 = getelementptr %struct.complex, ptr %invariant.gep371, i64 %indvars.iv325
  %gep374 = getelementptr %struct.complex, ptr %invariant.gep373, i64 %100
  %101 = load <2 x float>, ptr %gep372, align 4, !tbaa !12
  %102 = load <2 x float>, ptr %gep374, align 4, !tbaa !12
  %103 = fsub <2 x float> %101, %102
  store <2 x float> %103, ptr %gep372, align 4, !tbaa !12
  %indvars.iv.next326 = add nuw nsw i64 %indvars.iv325, 1
  %104 = mul nsw i64 %indvars.iv.next326, %64
  %gep372.1 = getelementptr %struct.complex, ptr %invariant.gep371, i64 %indvars.iv.next326
  %gep374.1 = getelementptr %struct.complex, ptr %invariant.gep373, i64 %104
  %105 = load <2 x float>, ptr %gep372.1, align 4, !tbaa !12
  %106 = load <2 x float>, ptr %gep374.1, align 4, !tbaa !12
  %107 = fsub <2 x float> %105, %106
  store <2 x float> %107, ptr %gep372.1, align 4, !tbaa !12
  %indvars.iv.next326.1 = add nuw nsw i64 %indvars.iv325, 2
  %exitcond329.not.1 = icmp eq i64 %indvars.iv.next326.1, %wide.trip.count328
  br i1 %exitcond329.not.1, label %._crit_edge244, label %scalar.ph, !llvm.loop !17

._crit_edge244:                                   ; preds = %scalar.ph.prol.loopexit, %scalar.ph, %middle.block
  %indvars.iv.next331 = add nuw nsw i64 %indvars.iv330, 1
  %exitcond334.not = icmp eq i64 %indvars.iv.next331, %wide.trip.count333
  br i1 %exitcond334.not, label %._crit_edge255, label %.lr.ph243, !llvm.loop !18

._crit_edge255:                                   ; preds = %._crit_edge244, %.lr.ph254, %61
  %108 = load i32, ptr %7, align 4, !tbaa !5
  %109 = icmp sgt i32 %108, 0
  br i1 %109, label %110, label %.loopexit

110:                                              ; preds = %._crit_edge255
  store <2 x float> <float -1.000000e+00, float 0.000000e+00>, ptr %19, align 8, !tbaa !12
  %111 = load i32, ptr %4, align 4, !tbaa !5
  %112 = add i32 %27, 1
  %113 = sub i32 %112, %108
  %114 = add i32 %113, %111
  %115 = sext i32 %114 to i64
  %116 = getelementptr inbounds %struct.complex, ptr %29, i64 %115
  call void @cgemm_(ptr noundef nonnull @.str.5, ptr noundef nonnull @.str.5, ptr noundef nonnull %7, ptr noundef nonnull %5, ptr noundef nonnull %6, ptr noundef nonnull %19, ptr noundef %8, ptr noundef nonnull %9, ptr noundef %14, ptr noundef nonnull %15, ptr noundef nonnull @c_b1, ptr noundef %116, ptr noundef nonnull %13) #3
  br label %.loopexit

117:                                              ; preds = %43
  %118 = tail call i32 @lsame_(ptr noundef %0, ptr noundef nonnull @.str.1) #3
  %.not217 = icmp eq i32 %118, 0
  br i1 %.not217, label %.loopexit, label %119

119:                                              ; preds = %117
  %120 = load i32, ptr %6, align 4, !tbaa !5
  %invariant.gep262 = getelementptr i8, ptr %29, i64 8
  %invariant.gep264 = getelementptr i8, ptr %32, i64 8
  %.not218266 = icmp slt i32 %120, 1
  br i1 %.not218266, label %._crit_edge270, label %.lr.ph269.preheader

.lr.ph269.preheader:                              ; preds = %119
  %121 = sext i32 %27 to i64
  %122 = sext i32 %30 to i64
  %123 = add nuw i32 %120, 1
  %wide.trip.count338 = zext i32 %123 to i64
  br label %.lr.ph269

.lr.ph269:                                        ; preds = %.lr.ph269.preheader, %.lr.ph269
  %indvars.iv335 = phi i64 [ 1, %.lr.ph269.preheader ], [ %indvars.iv.next336, %.lr.ph269 ]
  %124 = mul nsw i64 %indvars.iv335, %121
  %gep263 = getelementptr %struct.complex, ptr %invariant.gep262, i64 %124
  %125 = mul nsw i64 %indvars.iv335, %122
  %gep265 = getelementptr %struct.complex, ptr %invariant.gep264, i64 %125
  tail call void @ccopy_(ptr noundef nonnull %4, ptr noundef %gep263, ptr noundef nonnull @c__1, ptr noundef %gep265, ptr noundef nonnull @c__1) #3
  %indvars.iv.next336 = add nuw nsw i64 %indvars.iv335, 1
  %exitcond339.not = icmp eq i64 %indvars.iv.next336, %wide.trip.count338
  br i1 %exitcond339.not, label %._crit_edge270, label %.lr.ph269, !llvm.loop !19

._crit_edge270:                                   ; preds = %.lr.ph269, %119
  %126 = load i32, ptr %7, align 4, !tbaa !5
  %127 = icmp sgt i32 %126, 0
  br i1 %127, label %128, label %135

128:                                              ; preds = %._crit_edge270
  %129 = load i32, ptr %5, align 4, !tbaa !5
  %reass.sub = sub i32 %129, %126
  %130 = add i32 %reass.sub, 1
  %131 = mul nsw i32 %130, %27
  %132 = sext i32 %131 to i64
  %133 = getelementptr %struct.complex, ptr %29, i64 %132
  %134 = getelementptr i8, ptr %133, i64 8
  tail call void @cgemm_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.5, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull %7, ptr noundef nonnull @c_b1, ptr noundef %134, ptr noundef nonnull %13, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull @c_b1, ptr noundef %14, ptr noundef nonnull %15) #3
  br label %135

135:                                              ; preds = %128, %._crit_edge270
  %136 = load i32, ptr %6, align 4, !tbaa !5
  %.not219271 = icmp slt i32 %136, 1
  br i1 %.not219271, label %._crit_edge275, label %.lr.ph274

.lr.ph274:                                        ; preds = %135
  %137 = add i32 %24, 1
  %138 = zext nneg i32 %136 to i64
  br label %139

139:                                              ; preds = %.lr.ph274, %139
  %indvars.iv340 = phi i64 [ 1, %.lr.ph274 ], [ %indvars.iv.next341, %139 ]
  %140 = load i32, ptr %6, align 4, !tbaa !5
  %141 = trunc nuw nsw i64 %indvars.iv340 to i32
  %reass.sub316 = sub i32 %140, %141
  %142 = add i32 %reass.sub316, 1
  store i32 %142, ptr %18, align 4, !tbaa !5
  %143 = mul i32 %137, %141
  %144 = sext i32 %143 to i64
  %145 = getelementptr inbounds %struct.complex, ptr %26, i64 %144
  call void @clacgv_(ptr noundef nonnull %18, ptr noundef %145, ptr noundef nonnull @c__1) #3
  %indvars.iv.next341 = add nuw nsw i64 %indvars.iv340, 1
  %.not219.not = icmp ult i64 %indvars.iv340, %138
  br i1 %.not219.not, label %139, label %._crit_edge275, !llvm.loop !20

._crit_edge275:                                   ; preds = %139, %135
  call void @ctrmm_(ptr noundef nonnull @.str.7, ptr noundef nonnull @.str.8, ptr noundef %1, ptr noundef nonnull @.str.9, ptr noundef nonnull %4, ptr noundef nonnull %6, ptr noundef nonnull @c_b1, ptr noundef %10, ptr noundef nonnull %11, ptr noundef %14, ptr noundef nonnull %15) #3
  %146 = load i32, ptr %6, align 4, !tbaa !5
  %.not220276 = icmp slt i32 %146, 1
  br i1 %.not220276, label %._crit_edge280.thread, label %.lr.ph279

._crit_edge280.thread:                            ; preds = %._crit_edge275
  %.promoted289364 = load float, ptr %19, align 8, !tbaa !21
  br label %229

.lr.ph279:                                        ; preds = %._crit_edge275
  %147 = add i32 %24, 1
  %148 = zext nneg i32 %146 to i64
  br label %149

149:                                              ; preds = %.lr.ph279, %149
  %indvars.iv343 = phi i64 [ 1, %.lr.ph279 ], [ %indvars.iv.next344, %149 ]
  %150 = load i32, ptr %6, align 4, !tbaa !5
  %151 = trunc nuw nsw i64 %indvars.iv343 to i32
  %reass.sub317 = sub i32 %150, %151
  %152 = add i32 %reass.sub317, 1
  store i32 %152, ptr %18, align 4, !tbaa !5
  %153 = mul i32 %147, %151
  %154 = sext i32 %153 to i64
  %155 = getelementptr inbounds %struct.complex, ptr %26, i64 %154
  call void @clacgv_(ptr noundef nonnull %18, ptr noundef %155, ptr noundef nonnull @c__1) #3
  %indvars.iv.next344 = add nuw nsw i64 %indvars.iv343, 1
  %.not220.not = icmp ult i64 %indvars.iv343, %148
  br i1 %.not220.not, label %149, label %._crit_edge280, !llvm.loop !23

._crit_edge280:                                   ; preds = %149
  %.pre = load i32, ptr %6, align 4, !tbaa !5
  %.promoted289 = load float, ptr %19, align 8, !tbaa !21
  %.not221291 = icmp slt i32 %.pre, 1
  br i1 %.not221291, label %229, label %.lr.ph295

.lr.ph295:                                        ; preds = %._crit_edge280
  %156 = load i32, ptr %4, align 4, !tbaa !5
  %.not224282 = icmp slt i32 %156, 1
  %157 = getelementptr inbounds i8, ptr %19, i64 4
  br i1 %.not224282, label %.lr.ph295.split.us.preheader, label %.lr.ph285.preheader

.lr.ph285.preheader:                              ; preds = %.lr.ph295
  %158 = add nuw i32 %156, 1
  %159 = sext i32 %27 to i64
  %160 = sext i32 %30 to i64
  %161 = add nuw i32 %.pre, 1
  %wide.trip.count354 = zext i32 %161 to i64
  %wide.trip.count349 = zext i32 %158 to i64
  %162 = shl nsw i64 %159, 3
  %163 = shl nsw i64 %28, 3
  %164 = getelementptr i8, ptr %12, i64 %162
  %165 = getelementptr i8, ptr %164, i64 %163
  %scevgep395 = getelementptr i8, ptr %165, i64 8
  %166 = shl nuw nsw i64 %wide.trip.count354, 3
  %167 = add nsw i64 %166, -8
  %168 = mul i64 %167, %159
  %169 = shl nuw nsw i64 %wide.trip.count349, 3
  %170 = getelementptr i8, ptr %12, i64 %168
  %171 = getelementptr i8, ptr %170, i64 %163
  %172 = getelementptr i8, ptr %171, i64 %169
  %scevgep396 = getelementptr i8, ptr %172, i64 -4
  %173 = shl nsw i64 %160, 3
  %174 = shl nsw i64 %31, 3
  %175 = getelementptr i8, ptr %14, i64 %173
  %176 = getelementptr i8, ptr %175, i64 %174
  %scevgep397 = getelementptr i8, ptr %176, i64 8
  %177 = mul i64 %167, %160
  %178 = getelementptr i8, ptr %14, i64 %177
  %179 = getelementptr i8, ptr %178, i64 %174
  %180 = getelementptr i8, ptr %179, i64 %169
  %scevgep398 = getelementptr i8, ptr %180, i64 -4
  %181 = getelementptr i8, ptr %12, i64 %162
  %182 = getelementptr i8, ptr %181, i64 %163
  %scevgep399 = getelementptr i8, ptr %182, i64 12
  %183 = getelementptr i8, ptr %12, i64 %168
  %184 = getelementptr i8, ptr %183, i64 %163
  %scevgep400 = getelementptr i8, ptr %184, i64 %169
  %185 = getelementptr i8, ptr %14, i64 %173
  %186 = getelementptr i8, ptr %185, i64 %174
  %scevgep401 = getelementptr i8, ptr %186, i64 12
  %187 = getelementptr i8, ptr %14, i64 %177
  %188 = getelementptr i8, ptr %187, i64 %174
  %scevgep402 = getelementptr i8, ptr %188, i64 %169
  %189 = zext nneg i32 %156 to i64
  %190 = zext nneg i32 %156 to i64
  %min.iters.check416 = icmp ult i32 %156, 6
  %bound0403 = icmp ult ptr %scevgep395, %scevgep398
  %bound1404 = icmp ult ptr %scevgep397, %scevgep396
  %found.conflict405 = and i1 %bound0403, %bound1404
  %191 = or i32 %27, %30
  %192 = icmp slt i32 %191, 0
  %193 = or i1 %found.conflict405, %192
  %bound0408 = icmp ult ptr %scevgep399, %scevgep402
  %bound1409 = icmp ult ptr %scevgep401, %scevgep400
  %found.conflict410 = and i1 %bound0408, %bound1409
  %194 = or i32 %27, %30
  %195 = icmp slt i32 %194, 0
  %196 = or i1 %found.conflict410, %195
  %conflict.rdx413 = or i1 %193, %196
  %n.vec419 = and i64 %189, 2147483646
  %ind.end420 = or i64 %189, 1
  %cmp.n433 = icmp eq i64 %n.vec419, %189
  br label %.lr.ph285

.lr.ph295.split.us.preheader:                     ; preds = %.lr.ph295
  %.promoted298 = load float, ptr %157, align 4, !tbaa !24
  %197 = insertelement <2 x float> poison, float %.promoted289, i64 0
  %198 = insertelement <2 x float> %197, float %.promoted298, i64 1
  br label %._crit_edge296

.lr.ph285:                                        ; preds = %.lr.ph285.preheader, %._crit_edge286
  %indvars.iv351 = phi i64 [ 1, %.lr.ph285.preheader ], [ %indvars.iv.next352, %._crit_edge286 ]
  %199 = mul nsw i64 %indvars.iv351, %159
  %200 = mul nsw i64 %indvars.iv351, %160
  %invariant.gep375 = getelementptr %struct.complex, ptr %29, i64 %199
  %invariant.gep377 = getelementptr %struct.complex, ptr %32, i64 %200
  %brmerge443 = select i1 %min.iters.check416, i1 true, i1 %conflict.rdx413
  br i1 %brmerge443, label %scalar.ph415.preheader, label %vector.body422

vector.body422:                                   ; preds = %.lr.ph285, %vector.body422
  %index423 = phi i64 [ %index.next432, %vector.body422 ], [ 0, %.lr.ph285 ]
  %offset.idx424 = or disjoint i64 %index423, 1
  %201 = getelementptr %struct.complex, ptr %invariant.gep375, i64 %offset.idx424
  %wide.vec425 = load <4 x float>, ptr %201, align 4, !tbaa !12
  %202 = getelementptr %struct.complex, ptr %invariant.gep377, i64 %offset.idx424
  %wide.vec428 = load <4 x float>, ptr %202, align 4, !tbaa !12
  %203 = fsub <4 x float> %wide.vec425, %wide.vec428
  %204 = fsub <4 x float> %wide.vec425, %wide.vec428
  %interleaved.vec431 = shufflevector <4 x float> %203, <4 x float> %204, <4 x i32> <i32 0, i32 5, i32 2, i32 7>
  store <4 x float> %interleaved.vec431, ptr %201, align 4, !tbaa !12
  %index.next432 = add nuw i64 %index423, 2
  %205 = icmp eq i64 %index.next432, %n.vec419
  br i1 %205, label %middle.block414, label %vector.body422, !llvm.loop !25

middle.block414:                                  ; preds = %vector.body422
  %206 = shufflevector <4 x float> %203, <4 x float> %204, <2 x i32> <i32 2, i32 7>
  br i1 %cmp.n433, label %._crit_edge286, label %scalar.ph415.preheader

scalar.ph415.preheader:                           ; preds = %.lr.ph285, %middle.block414
  %indvars.iv346.ph = phi i64 [ 1, %.lr.ph285 ], [ %ind.end420, %middle.block414 ]
  %207 = sub nsw i64 %wide.trip.count349, %indvars.iv346.ph
  %208 = sub nsw i64 %190, %indvars.iv346.ph
  %xtraiter437 = and i64 %207, 3
  %lcmp.mod438.not = icmp eq i64 %xtraiter437, 0
  br i1 %lcmp.mod438.not, label %scalar.ph415.prol.loopexit, label %scalar.ph415.prol

scalar.ph415.prol:                                ; preds = %scalar.ph415.preheader, %scalar.ph415.prol
  %indvars.iv346.prol = phi i64 [ %indvars.iv.next347.prol, %scalar.ph415.prol ], [ %indvars.iv346.ph, %scalar.ph415.preheader ]
  %prol.iter = phi i64 [ %prol.iter.next, %scalar.ph415.prol ], [ 0, %scalar.ph415.preheader ]
  %gep376.prol = getelementptr %struct.complex, ptr %invariant.gep375, i64 %indvars.iv346.prol
  %gep378.prol = getelementptr %struct.complex, ptr %invariant.gep377, i64 %indvars.iv346.prol
  %209 = load <2 x float>, ptr %gep376.prol, align 4, !tbaa !12
  %210 = load <2 x float>, ptr %gep378.prol, align 4, !tbaa !12
  %211 = fsub <2 x float> %209, %210
  store <2 x float> %211, ptr %gep376.prol, align 4, !tbaa !12
  %indvars.iv.next347.prol = add nuw nsw i64 %indvars.iv346.prol, 1
  %prol.iter.next = add i64 %prol.iter, 1
  %prol.iter.cmp.not = icmp eq i64 %prol.iter.next, %xtraiter437
  br i1 %prol.iter.cmp.not, label %scalar.ph415.prol.loopexit, label %scalar.ph415.prol, !llvm.loop !26

scalar.ph415.prol.loopexit:                       ; preds = %scalar.ph415.prol, %scalar.ph415.preheader
  %.lcssa435.unr = phi <2 x float> [ poison, %scalar.ph415.preheader ], [ %211, %scalar.ph415.prol ]
  %indvars.iv346.unr = phi i64 [ %indvars.iv346.ph, %scalar.ph415.preheader ], [ %indvars.iv.next347.prol, %scalar.ph415.prol ]
  %212 = icmp ult i64 %208, 3
  br i1 %212, label %._crit_edge286, label %scalar.ph415

scalar.ph415:                                     ; preds = %scalar.ph415.prol.loopexit, %scalar.ph415
  %indvars.iv346 = phi i64 [ %indvars.iv.next347.3, %scalar.ph415 ], [ %indvars.iv346.unr, %scalar.ph415.prol.loopexit ]
  %gep376 = getelementptr %struct.complex, ptr %invariant.gep375, i64 %indvars.iv346
  %gep378 = getelementptr %struct.complex, ptr %invariant.gep377, i64 %indvars.iv346
  %213 = load <2 x float>, ptr %gep376, align 4, !tbaa !12
  %214 = load <2 x float>, ptr %gep378, align 4, !tbaa !12
  %215 = fsub <2 x float> %213, %214
  store <2 x float> %215, ptr %gep376, align 4, !tbaa !12
  %indvars.iv.next347 = add nuw nsw i64 %indvars.iv346, 1
  %gep376.1 = getelementptr %struct.complex, ptr %invariant.gep375, i64 %indvars.iv.next347
  %gep378.1 = getelementptr %struct.complex, ptr %invariant.gep377, i64 %indvars.iv.next347
  %216 = load <2 x float>, ptr %gep376.1, align 4, !tbaa !12
  %217 = load <2 x float>, ptr %gep378.1, align 4, !tbaa !12
  %218 = fsub <2 x float> %216, %217
  store <2 x float> %218, ptr %gep376.1, align 4, !tbaa !12
  %indvars.iv.next347.1 = add nuw nsw i64 %indvars.iv346, 2
  %gep376.2 = getelementptr %struct.complex, ptr %invariant.gep375, i64 %indvars.iv.next347.1
  %gep378.2 = getelementptr %struct.complex, ptr %invariant.gep377, i64 %indvars.iv.next347.1
  %219 = load <2 x float>, ptr %gep376.2, align 4, !tbaa !12
  %220 = load <2 x float>, ptr %gep378.2, align 4, !tbaa !12
  %221 = fsub <2 x float> %219, %220
  store <2 x float> %221, ptr %gep376.2, align 4, !tbaa !12
  %indvars.iv.next347.2 = add nuw nsw i64 %indvars.iv346, 3
  %gep376.3 = getelementptr %struct.complex, ptr %invariant.gep375, i64 %indvars.iv.next347.2
  %gep378.3 = getelementptr %struct.complex, ptr %invariant.gep377, i64 %indvars.iv.next347.2
  %222 = load <2 x float>, ptr %gep376.3, align 4, !tbaa !12
  %223 = load <2 x float>, ptr %gep378.3, align 4, !tbaa !12
  %224 = fsub <2 x float> %222, %223
  store <2 x float> %224, ptr %gep376.3, align 4, !tbaa !12
  %indvars.iv.next347.3 = add nuw nsw i64 %indvars.iv346, 4
  %exitcond350.not.3 = icmp eq i64 %indvars.iv.next347.3, %wide.trip.count349
  br i1 %exitcond350.not.3, label %._crit_edge286, label %scalar.ph415, !llvm.loop !28

._crit_edge286:                                   ; preds = %scalar.ph415.prol.loopexit, %scalar.ph415, %middle.block414
  %225 = phi <2 x float> [ %206, %middle.block414 ], [ %.lcssa435.unr, %scalar.ph415.prol.loopexit ], [ %224, %scalar.ph415 ]
  %indvars.iv.next352 = add nuw nsw i64 %indvars.iv351, 1
  %exitcond355.not = icmp eq i64 %indvars.iv.next352, %wide.trip.count354
  br i1 %exitcond355.not, label %._crit_edge296, label %.lr.ph285, !llvm.loop !29

._crit_edge296:                                   ; preds = %._crit_edge286, %.lr.ph295.split.us.preheader
  %226 = phi <2 x float> [ %198, %.lr.ph295.split.us.preheader ], [ %225, %._crit_edge286 ]
  store i32 %156, ptr %18, align 4, !tbaa !5
  %227 = extractelement <2 x float> %226, i64 1
  store float %227, ptr %157, align 4, !tbaa !24
  %228 = extractelement <2 x float> %226, i64 0
  br label %229

229:                                              ; preds = %._crit_edge280.thread, %._crit_edge296, %._crit_edge280
  %.lcssa290.lcssa = phi float [ %228, %._crit_edge296 ], [ %.promoted289, %._crit_edge280 ], [ %.promoted289364, %._crit_edge280.thread ]
  store float %.lcssa290.lcssa, ptr %19, align 8, !tbaa !21
  %230 = load i32, ptr %7, align 4, !tbaa !5
  %invariant.gep303 = getelementptr i8, ptr %23, i64 8
  %.not222305 = icmp slt i32 %230, 1
  br i1 %.not222305, label %.loopexit, label %.lr.ph308.preheader

.lr.ph308.preheader:                              ; preds = %229
  %231 = sext i32 %21 to i64
  %232 = zext nneg i32 %230 to i64
  br label %.lr.ph308

.lr.ph308:                                        ; preds = %.lr.ph308.preheader, %.lr.ph308
  %indvars.iv356 = phi i64 [ 1, %.lr.ph308.preheader ], [ %indvars.iv.next357, %.lr.ph308 ]
  %233 = mul nsw i64 %indvars.iv356, %231
  %gep304 = getelementptr %struct.complex, ptr %invariant.gep303, i64 %233
  call void @clacgv_(ptr noundef nonnull %6, ptr noundef %gep304, ptr noundef nonnull @c__1) #3
  %indvars.iv.next357 = add nuw nsw i64 %indvars.iv356, 1
  %.not222.not = icmp ult i64 %indvars.iv356, %232
  br i1 %.not222.not, label %.lr.ph308, label %._crit_edge309, !llvm.loop !30

._crit_edge309:                                   ; preds = %.lr.ph308
  %.pre362 = load i32, ptr %7, align 4, !tbaa !5
  %234 = icmp sgt i32 %.pre362, 0
  br i1 %234, label %235, label %.loopexit

235:                                              ; preds = %._crit_edge309
  store <2 x float> <float -1.000000e+00, float 0.000000e+00>, ptr %19, align 8, !tbaa !12
  %236 = load i32, ptr %5, align 4, !tbaa !5
  %reass.sub318 = sub i32 %236, %.pre362
  %237 = add i32 %reass.sub318, 1
  %238 = mul nsw i32 %237, %27
  %239 = sext i32 %238 to i64
  %240 = getelementptr %struct.complex, ptr %29, i64 %239
  %241 = getelementptr i8, ptr %240, i64 8
  call void @cgemm_(ptr noundef nonnull @.str.10, ptr noundef nonnull @.str.10, ptr noundef nonnull %4, ptr noundef nonnull %7, ptr noundef nonnull %6, ptr noundef nonnull %19, ptr noundef %14, ptr noundef nonnull %15, ptr noundef %8, ptr noundef nonnull %9, ptr noundef nonnull @c_b1, ptr noundef %241, ptr noundef nonnull %13) #3
  %.pre363 = load i32, ptr %7, align 4, !tbaa !5
  %.not223312 = icmp slt i32 %.pre363, 1
  br i1 %.not223312, label %.loopexit, label %.lr.ph315.preheader

.lr.ph315.preheader:                              ; preds = %235
  %242 = sext i32 %21 to i64
  %243 = zext nneg i32 %.pre363 to i64
  br label %.lr.ph315

.lr.ph315:                                        ; preds = %.lr.ph315.preheader, %.lr.ph315
  %indvars.iv359 = phi i64 [ 1, %.lr.ph315.preheader ], [ %indvars.iv.next360, %.lr.ph315 ]
  %244 = mul nsw i64 %indvars.iv359, %242
  %gep311 = getelementptr %struct.complex, ptr %invariant.gep303, i64 %244
  call void @clacgv_(ptr noundef nonnull %6, ptr noundef %gep311, ptr noundef nonnull @c__1) #3
  %indvars.iv.next360 = add nuw nsw i64 %indvars.iv359, 1
  %.not223.not = icmp ult i64 %indvars.iv359, %243
  br i1 %.not223.not, label %.lr.ph315, label %.loopexit, !llvm.loop !31

.loopexit:                                        ; preds = %.lr.ph315, %229, %._crit_edge309, %235, %110, %._crit_edge255, %117, %16, %35, %.thread
  call void @llvm.lifetime.end.p0(i64 1, ptr nonnull %20) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %19) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %18) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr nonnull %17) #3
  ret void
}

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

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

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

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

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

declare void @ctrmm_(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 @clacgv_(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

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 = { 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 = !{!7, !7, i64 0}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = !{!13, !13, i64 0}
!13 = !{!"float", !7, i64 0}
!14 = distinct !{!14, !11, !15, !16}
!15 = !{!"llvm.loop.isvectorized", i32 1}
!16 = !{!"llvm.loop.unroll.runtime.disable"}
!17 = distinct !{!17, !11, !15}
!18 = distinct !{!18, !11}
!19 = distinct !{!19, !11}
!20 = distinct !{!20, !11}
!21 = !{!22, !13, i64 0}
!22 = !{!"", !13, i64 0, !13, i64 4}
!23 = distinct !{!23, !11}
!24 = !{!22, !13, i64 4}
!25 = distinct !{!25, !11, !15, !16}
!26 = distinct !{!26, !27}
!27 = !{!"llvm.loop.unroll.disable"}
!28 = distinct !{!28, !11, !15}
!29 = distinct !{!29, !11}
!30 = distinct !{!30, !11}
!31 = distinct !{!31, !11}


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