; LLVM IR from jingweizhanghuai/Morn :: src/deep_learning (morn_tensor_conv)

; 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.MTensor = type { i32, i32, i32, i32, ptr, i32 }

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

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

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

; Function Attrs: nounwind uwtable
define dso_local void @GroupConvTensorToMatData(ptr noundef %0, i32 noundef %1, ptr noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) #2 {
  %10 = alloca ptr, align 8
  %11 = alloca i32, align 4
  %12 = alloca ptr, align 8
  %13 = alloca i32, align 4
  %14 = alloca i32, align 4
  %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
  %29 = alloca ptr, align 8
  %30 = alloca i32, align 4
  %31 = alloca i32, align 4
  %32 = alloca i32, align 4
  %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
  store ptr %0, ptr %10, align 8, !tbaa !5
  store i32 %1, ptr %11, align 4, !tbaa !9
  store ptr %2, ptr %12, align 8, !tbaa !5
  store i32 %3, ptr %13, align 4, !tbaa !9
  store i32 %4, ptr %14, align 4, !tbaa !9
  store i32 %5, ptr %15, align 4, !tbaa !9
  store i32 %6, ptr %16, align 4, !tbaa !9
  store i32 %7, ptr %17, align 4, !tbaa !9
  store i32 %8, ptr %18, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #3
  %44 = load ptr, ptr %10, align 8, !tbaa !5
  %45 = getelementptr inbounds %struct.MTensor, ptr %44, i32 0, i32 2
  %46 = load i32, ptr %45, align 8, !tbaa !11
  store i32 %46, ptr %19, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #3
  %47 = load ptr, ptr %10, align 8, !tbaa !5
  %48 = getelementptr inbounds %struct.MTensor, ptr %47, i32 0, i32 3
  %49 = load i32, ptr %48, align 4, !tbaa !13
  store i32 %49, ptr %20, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #3
  %50 = load ptr, ptr %10, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.MTensor, ptr %50, i32 0, i32 1
  %52 = load i32, ptr %51, align 4, !tbaa !14
  store i32 %52, ptr %21, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %22) #3
  %53 = load i32, ptr %20, align 4, !tbaa !9
  %54 = load i32, ptr %18, align 4, !tbaa !9
  %55 = sdiv i32 %53, %54
  store i32 %55, ptr %22, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #3
  %56 = load i32, ptr %19, align 4, !tbaa !9
  %57 = load i32, ptr %17, align 4, !tbaa !9
  %58 = sdiv i32 %56, %57
  store i32 %58, ptr %23, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #3
  %59 = load i32, ptr %21, align 4, !tbaa !9
  %60 = load i32, ptr %13, align 4, !tbaa !9
  %61 = sdiv i32 %60, 2
  %62 = sub nsw i32 %59, %61
  %63 = add nsw i32 %62, 1
  %64 = load i32, ptr %16, align 4, !tbaa !9
  %65 = sdiv i32 %63, %64
  store i32 %65, ptr %24, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %25) #3
  %66 = load i32, ptr %14, align 4, !tbaa !9
  %67 = load i32, ptr %15, align 4, !tbaa !9
  %68 = mul nsw i32 %66, %67
  %69 = load i32, ptr %13, align 4, !tbaa !9
  %70 = mul nsw i32 %68, %69
  %71 = add nsw i32 %70, 1
  store i32 %71, ptr %25, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %26) #3
  %72 = load i32, ptr %23, align 4, !tbaa !9
  %73 = load i32, ptr %22, align 4, !tbaa !9
  %74 = mul nsw i32 %72, %73
  store i32 %74, ptr %26, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %27) #3
  %75 = load i32, ptr %20, align 4, !tbaa !9
  %76 = load i32, ptr %22, align 4, !tbaa !9
  %77 = sub nsw i32 %76, 1
  %78 = load i32, ptr %18, align 4, !tbaa !9
  %79 = mul nsw i32 %77, %78
  %80 = sub nsw i32 %75, %79
  %81 = sdiv i32 %80, 2
  store i32 %81, ptr %27, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %28) #3
  %82 = load i32, ptr %19, align 4, !tbaa !9
  %83 = load i32, ptr %23, align 4, !tbaa !9
  %84 = sub nsw i32 %83, 1
  %85 = load i32, ptr %17, align 4, !tbaa !9
  %86 = mul nsw i32 %84, %85
  %87 = sub nsw i32 %82, %86
  %88 = sdiv i32 %87, 2
  store i32 %88, ptr %28, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 8, ptr %29) #3
  %89 = load ptr, ptr %10, align 8, !tbaa !5
  %90 = getelementptr inbounds %struct.MTensor, ptr %89, i32 0, i32 4
  %91 = load ptr, ptr %90, align 8, !tbaa !15
  %92 = load i32, ptr %11, align 4, !tbaa !9
  %93 = sext i32 %92 to i64
  %94 = getelementptr inbounds ptr, ptr %91, i64 %93
  %95 = load ptr, ptr %94, align 8, !tbaa !5
  store ptr %95, ptr %29, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %30) #3
  %96 = load ptr, ptr %10, align 8, !tbaa !5
  %97 = getelementptr inbounds %struct.MTensor, ptr %96, i32 0, i32 2
  %98 = load i32, ptr %97, align 8, !tbaa !11
  %99 = load ptr, ptr %10, align 8, !tbaa !5
  %100 = getelementptr inbounds %struct.MTensor, ptr %99, i32 0, i32 3
  %101 = load i32, ptr %100, align 4, !tbaa !13
  %102 = mul nsw i32 %98, %101
  store i32 %102, ptr %30, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.start.p0(i64 4, ptr %34) #3
  store i32 0, ptr %31, align 4, !tbaa !9
  br label %103

103:                                              ; preds = %447, %9
  %104 = load i32, ptr %31, align 4, !tbaa !9
  %105 = load i32, ptr %24, align 4, !tbaa !9
  %106 = icmp slt i32 %104, %105
  br i1 %106, label %107, label %450

107:                                              ; preds = %103
  store i32 0, ptr %33, align 4, !tbaa !9
  br label %108

108:                                              ; preds = %243, %107
  %109 = load i32, ptr %33, align 4, !tbaa !9
  %110 = load i32, ptr %22, align 4, !tbaa !9
  %111 = icmp slt i32 %109, %110
  br i1 %111, label %112, label %246

112:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 4, ptr %35) #3
  %113 = load i32, ptr %28, align 4, !tbaa !9
  %114 = load i32, ptr %14, align 4, !tbaa !9
  %115 = sdiv i32 %114, 2
  %116 = sub nsw i32 %113, %115
  store i32 %116, ptr %35, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %36) #3
  %117 = load i32, ptr %27, align 4, !tbaa !9
  %118 = load i32, ptr %33, align 4, !tbaa !9
  %119 = load i32, ptr %18, align 4, !tbaa !9
  %120 = mul nsw i32 %118, %119
  %121 = add nsw i32 %117, %120
  %122 = load i32, ptr %15, align 4, !tbaa !9
  %123 = sdiv i32 %122, 2
  %124 = sub nsw i32 %121, %123
  store i32 %124, ptr %36, align 4, !tbaa !9
  store i32 0, ptr %32, align 4, !tbaa !9
  br label %125

125:                                              ; preds = %225, %112
  %126 = load i32, ptr %32, align 4, !tbaa !9
  %127 = load i32, ptr %25, align 4, !tbaa !9
  %128 = sub nsw i32 %127, 1
  %129 = icmp slt i32 %126, %128
  br i1 %129, label %130, label %229

130:                                              ; preds = %125
  call void @llvm.lifetime.start.p0(i64 4, ptr %37) #3
  %131 = load i32, ptr %32, align 4, !tbaa !9
  %132 = load i32, ptr %15, align 4, !tbaa !9
  %133 = load i32, ptr %13, align 4, !tbaa !9
  %134 = mul nsw i32 %132, %133
  %135 = sdiv i32 %131, %134
  %136 = load i32, ptr %35, align 4, !tbaa !9
  %137 = add nsw i32 %135, %136
  store i32 %137, ptr %37, align 4, !tbaa !9
  %138 = load i32, ptr %37, align 4, !tbaa !9
  %139 = icmp slt i32 %138, 0
  br i1 %139, label %140, label %141

140:                                              ; preds = %130
  store i32 0, ptr %37, align 4, !tbaa !9
  br label %149

141:                                              ; preds = %130
  %142 = load i32, ptr %37, align 4, !tbaa !9
  %143 = load i32, ptr %19, align 4, !tbaa !9
  %144 = icmp sge i32 %142, %143
  br i1 %144, label %145, label %148

145:                                              ; preds = %141
  %146 = load i32, ptr %19, align 4, !tbaa !9
  %147 = sub nsw i32 %146, 1
  store i32 %147, ptr %37, align 4, !tbaa !9
  br label %148

148:                                              ; preds = %145, %141
  br label %149

149:                                              ; preds = %148, %140
  call void @llvm.lifetime.start.p0(i64 4, ptr %38) #3
  %150 = load i32, ptr %32, align 4, !tbaa !9
  %151 = load i32, ptr %15, align 4, !tbaa !9
  %152 = load i32, ptr %13, align 4, !tbaa !9
  %153 = mul nsw i32 %151, %152
  %154 = srem i32 %150, %153
  %155 = load i32, ptr %13, align 4, !tbaa !9
  %156 = sdiv i32 %154, %155
  %157 = load i32, ptr %36, align 4, !tbaa !9
  %158 = add nsw i32 %156, %157
  store i32 %158, ptr %38, align 4, !tbaa !9
  %159 = load i32, ptr %38, align 4, !tbaa !9
  %160 = icmp slt i32 %159, 0
  br i1 %160, label %161, label %162

161:                                              ; preds = %149
  store i32 0, ptr %38, align 4, !tbaa !9
  br label %170

162:                                              ; preds = %149
  %163 = load i32, ptr %38, align 4, !tbaa !9
  %164 = load i32, ptr %20, align 4, !tbaa !9
  %165 = icmp sge i32 %163, %164
  br i1 %165, label %166, label %169

166:                                              ; preds = %162
  %167 = load i32, ptr %20, align 4, !tbaa !9
  %168 = sub nsw i32 %167, 1
  store i32 %168, ptr %38, align 4, !tbaa !9
  br label %169

169:                                              ; preds = %166, %162
  br label %170

170:                                              ; preds = %169, %161
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %171

171:                                              ; preds = %221, %170
  %172 = load i32, ptr %34, align 4, !tbaa !9
  %173 = load i32, ptr %13, align 4, !tbaa !9
  %174 = icmp slt i32 %172, %173
  br i1 %174, label %175, label %224

175:                                              ; preds = %171
  %176 = load ptr, ptr %29, align 8, !tbaa !5
  %177 = load i32, ptr %34, align 4, !tbaa !9
  %178 = load i32, ptr %31, align 4, !tbaa !9
  %179 = load i32, ptr %16, align 4, !tbaa !9
  %180 = mul nsw i32 %178, %179
  %181 = add nsw i32 %177, %180
  %182 = load i32, ptr %21, align 4, !tbaa !9
  %183 = sub nsw i32 %182, 1
  %184 = icmp slt i32 %181, %183
  br i1 %184, label %185, label %191

185:                                              ; preds = %175
  %186 = load i32, ptr %34, align 4, !tbaa !9
  %187 = load i32, ptr %31, align 4, !tbaa !9
  %188 = load i32, ptr %16, align 4, !tbaa !9
  %189 = mul nsw i32 %187, %188
  %190 = add nsw i32 %186, %189
  br label %194

191:                                              ; preds = %175
  %192 = load i32, ptr %21, align 4, !tbaa !9
  %193 = sub nsw i32 %192, 1
  br label %194

194:                                              ; preds = %191, %185
  %195 = phi i32 [ %190, %185 ], [ %193, %191 ]
  %196 = load i32, ptr %30, align 4, !tbaa !9
  %197 = mul nsw i32 %195, %196
  %198 = load i32, ptr %37, align 4, !tbaa !9
  %199 = load i32, ptr %20, align 4, !tbaa !9
  %200 = mul nsw i32 %198, %199
  %201 = add nsw i32 %197, %200
  %202 = load i32, ptr %38, align 4, !tbaa !9
  %203 = add nsw i32 %201, %202
  %204 = sext i32 %203 to i64
  %205 = getelementptr inbounds float, ptr %176, i64 %204
  %206 = load float, ptr %205, align 4, !tbaa !16
  %207 = load ptr, ptr %12, align 8, !tbaa !5
  %208 = load i32, ptr %31, align 4, !tbaa !9
  %209 = load i32, ptr %26, align 4, !tbaa !9
  %210 = mul nsw i32 %208, %209
  %211 = load i32, ptr %33, align 4, !tbaa !9
  %212 = add nsw i32 %210, %211
  %213 = load i32, ptr %25, align 4, !tbaa !9
  %214 = mul nsw i32 %212, %213
  %215 = load i32, ptr %32, align 4, !tbaa !9
  %216 = add nsw i32 %214, %215
  %217 = load i32, ptr %34, align 4, !tbaa !9
  %218 = add nsw i32 %216, %217
  %219 = sext i32 %218 to i64
  %220 = getelementptr inbounds float, ptr %207, i64 %219
  store float %206, ptr %220, align 4, !tbaa !16
  br label %221

221:                                              ; preds = %194
  %222 = load i32, ptr %34, align 4, !tbaa !9
  %223 = add nsw i32 %222, 1
  store i32 %223, ptr %34, align 4, !tbaa !9
  br label %171, !llvm.loop !18

224:                                              ; preds = %171
  call void @llvm.lifetime.end.p0(i64 4, ptr %38) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %37) #3
  br label %225

225:                                              ; preds = %224
  %226 = load i32, ptr %13, align 4, !tbaa !9
  %227 = load i32, ptr %32, align 4, !tbaa !9
  %228 = add nsw i32 %227, %226
  store i32 %228, ptr %32, align 4, !tbaa !9
  br label %125, !llvm.loop !20

229:                                              ; preds = %125
  %230 = load ptr, ptr %12, align 8, !tbaa !5
  %231 = load i32, ptr %31, align 4, !tbaa !9
  %232 = load i32, ptr %26, align 4, !tbaa !9
  %233 = mul nsw i32 %231, %232
  %234 = load i32, ptr %33, align 4, !tbaa !9
  %235 = add nsw i32 %233, %234
  %236 = load i32, ptr %25, align 4, !tbaa !9
  %237 = mul nsw i32 %235, %236
  %238 = load i32, ptr %25, align 4, !tbaa !9
  %239 = add nsw i32 %237, %238
  %240 = sub nsw i32 %239, 1
  %241 = sext i32 %240 to i64
  %242 = getelementptr inbounds float, ptr %230, i64 %241
  store float 1.000000e+00, ptr %242, align 4, !tbaa !16
  call void @llvm.lifetime.end.p0(i64 4, ptr %36) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %35) #3
  br label %243

243:                                              ; preds = %229
  %244 = load i32, ptr %33, align 4, !tbaa !9
  %245 = add nsw i32 %244, 1
  store i32 %245, ptr %33, align 4, !tbaa !9
  br label %108, !llvm.loop !21

246:                                              ; preds = %108
  %247 = load i32, ptr %22, align 4, !tbaa !9
  store i32 %247, ptr %33, align 4, !tbaa !9
  br label %248

248:                                              ; preds = %443, %246
  %249 = load i32, ptr %33, align 4, !tbaa !9
  %250 = load i32, ptr %26, align 4, !tbaa !9
  %251 = icmp slt i32 %249, %250
  br i1 %251, label %252, label %446

252:                                              ; preds = %248
  call void @llvm.lifetime.start.p0(i64 4, ptr %39) #3
  %253 = load i32, ptr %14, align 4, !tbaa !9
  %254 = load i32, ptr %17, align 4, !tbaa !9
  %255 = sub nsw i32 %253, %254
  %256 = icmp sgt i32 0, %255
  br i1 %256, label %257, label %258

257:                                              ; preds = %252
  br label %262

258:                                              ; preds = %252
  %259 = load i32, ptr %14, align 4, !tbaa !9
  %260 = load i32, ptr %17, align 4, !tbaa !9
  %261 = sub nsw i32 %259, %260
  br label %262

262:                                              ; preds = %258, %257
  %263 = phi i32 [ 0, %257 ], [ %261, %258 ]
  %264 = load i32, ptr %15, align 4, !tbaa !9
  %265 = mul nsw i32 %263, %264
  %266 = load i32, ptr %13, align 4, !tbaa !9
  %267 = mul nsw i32 %265, %266
  store i32 %267, ptr %39, align 4, !tbaa !9
  %268 = load i32, ptr %39, align 4, !tbaa !9
  %269 = icmp sgt i32 %268, 0
  br i1 %269, label %270, label %303

270:                                              ; preds = %262
  %271 = load ptr, ptr %12, align 8, !tbaa !5
  %272 = load i32, ptr %31, align 4, !tbaa !9
  %273 = load i32, ptr %26, align 4, !tbaa !9
  %274 = mul nsw i32 %272, %273
  %275 = load i32, ptr %33, align 4, !tbaa !9
  %276 = add nsw i32 %274, %275
  %277 = load i32, ptr %25, align 4, !tbaa !9
  %278 = mul nsw i32 %276, %277
  %279 = sext i32 %278 to i64
  %280 = getelementptr inbounds float, ptr %271, i64 %279
  %281 = load ptr, ptr %12, align 8, !tbaa !5
  %282 = load i32, ptr %31, align 4, !tbaa !9
  %283 = load i32, ptr %26, align 4, !tbaa !9
  %284 = mul nsw i32 %282, %283
  %285 = load i32, ptr %33, align 4, !tbaa !9
  %286 = add nsw i32 %284, %285
  %287 = load i32, ptr %22, align 4, !tbaa !9
  %288 = sub nsw i32 %286, %287
  %289 = load i32, ptr %25, align 4, !tbaa !9
  %290 = mul nsw i32 %288, %289
  %291 = sext i32 %290 to i64
  %292 = getelementptr inbounds float, ptr %281, i64 %291
  %293 = load i32, ptr %17, align 4, !tbaa !9
  %294 = load i32, ptr %15, align 4, !tbaa !9
  %295 = mul nsw i32 %293, %294
  %296 = load i32, ptr %13, align 4, !tbaa !9
  %297 = mul nsw i32 %295, %296
  %298 = sext i32 %297 to i64
  %299 = getelementptr inbounds float, ptr %292, i64 %298
  %300 = load i32, ptr %39, align 4, !tbaa !9
  %301 = sext i32 %300 to i64
  %302 = mul i64 %301, 4
  call void @llvm.memcpy.p0.p0.i64(ptr align 4 %280, ptr align 4 %299, i64 %302, i1 false)
  br label %303

303:                                              ; preds = %270, %262
  call void @llvm.lifetime.start.p0(i64 4, ptr %40) #3
  %304 = load i32, ptr %28, align 4, !tbaa !9
  %305 = load i32, ptr %33, align 4, !tbaa !9
  %306 = load i32, ptr %22, align 4, !tbaa !9
  %307 = sdiv i32 %305, %306
  %308 = load i32, ptr %17, align 4, !tbaa !9
  %309 = mul nsw i32 %307, %308
  %310 = add nsw i32 %304, %309
  %311 = load i32, ptr %14, align 4, !tbaa !9
  %312 = sdiv i32 %311, 2
  %313 = sub nsw i32 %310, %312
  store i32 %313, ptr %40, align 4, !tbaa !9
  call void @llvm.lifetime.start.p0(i64 4, ptr %41) #3
  %314 = load i32, ptr %27, align 4, !tbaa !9
  %315 = load i32, ptr %33, align 4, !tbaa !9
  %316 = load i32, ptr %22, align 4, !tbaa !9
  %317 = srem i32 %315, %316
  %318 = load i32, ptr %18, align 4, !tbaa !9
  %319 = mul nsw i32 %317, %318
  %320 = add nsw i32 %314, %319
  %321 = load i32, ptr %15, align 4, !tbaa !9
  %322 = sdiv i32 %321, 2
  %323 = sub nsw i32 %320, %322
  store i32 %323, ptr %41, align 4, !tbaa !9
  %324 = load i32, ptr %39, align 4, !tbaa !9
  store i32 %324, ptr %32, align 4, !tbaa !9
  br label %325

325:                                              ; preds = %425, %303
  %326 = load i32, ptr %32, align 4, !tbaa !9
  %327 = load i32, ptr %25, align 4, !tbaa !9
  %328 = sub nsw i32 %327, 1
  %329 = icmp slt i32 %326, %328
  br i1 %329, label %330, label %429

330:                                              ; preds = %325
  call void @llvm.lifetime.start.p0(i64 4, ptr %42) #3
  %331 = load i32, ptr %32, align 4, !tbaa !9
  %332 = load i32, ptr %15, align 4, !tbaa !9
  %333 = load i32, ptr %13, align 4, !tbaa !9
  %334 = mul nsw i32 %332, %333
  %335 = sdiv i32 %331, %334
  %336 = load i32, ptr %40, align 4, !tbaa !9
  %337 = add nsw i32 %335, %336
  store i32 %337, ptr %42, align 4, !tbaa !9
  %338 = load i32, ptr %42, align 4, !tbaa !9
  %339 = icmp slt i32 %338, 0
  br i1 %339, label %340, label %341

340:                                              ; preds = %330
  store i32 0, ptr %42, align 4, !tbaa !9
  br label %349

341:                                              ; preds = %330
  %342 = load i32, ptr %42, align 4, !tbaa !9
  %343 = load i32, ptr %19, align 4, !tbaa !9
  %344 = icmp sge i32 %342, %343
  br i1 %344, label %345, label %348

345:                                              ; preds = %341
  %346 = load i32, ptr %19, align 4, !tbaa !9
  %347 = sub nsw i32 %346, 1
  store i32 %347, ptr %42, align 4, !tbaa !9
  br label %348

348:                                              ; preds = %345, %341
  br label %349

349:                                              ; preds = %348, %340
  call void @llvm.lifetime.start.p0(i64 4, ptr %43) #3
  %350 = load i32, ptr %32, align 4, !tbaa !9
  %351 = load i32, ptr %15, align 4, !tbaa !9
  %352 = load i32, ptr %13, align 4, !tbaa !9
  %353 = mul nsw i32 %351, %352
  %354 = srem i32 %350, %353
  %355 = load i32, ptr %13, align 4, !tbaa !9
  %356 = sdiv i32 %354, %355
  %357 = load i32, ptr %41, align 4, !tbaa !9
  %358 = add nsw i32 %356, %357
  store i32 %358, ptr %43, align 4, !tbaa !9
  %359 = load i32, ptr %43, align 4, !tbaa !9
  %360 = icmp slt i32 %359, 0
  br i1 %360, label %361, label %362

361:                                              ; preds = %349
  store i32 0, ptr %43, align 4, !tbaa !9
  br label %370

362:                                              ; preds = %349
  %363 = load i32, ptr %43, align 4, !tbaa !9
  %364 = load i32, ptr %20, align 4, !tbaa !9
  %365 = icmp sge i32 %363, %364
  br i1 %365, label %366, label %369

366:                                              ; preds = %362
  %367 = load i32, ptr %20, align 4, !tbaa !9
  %368 = sub nsw i32 %367, 1
  store i32 %368, ptr %43, align 4, !tbaa !9
  br label %369

369:                                              ; preds = %366, %362
  br label %370

370:                                              ; preds = %369, %361
  store i32 0, ptr %34, align 4, !tbaa !9
  br label %371

371:                                              ; preds = %421, %370
  %372 = load i32, ptr %34, align 4, !tbaa !9
  %373 = load i32, ptr %13, align 4, !tbaa !9
  %374 = icmp slt i32 %372, %373
  br i1 %374, label %375, label %424

375:                                              ; preds = %371
  %376 = load ptr, ptr %29, align 8, !tbaa !5
  %377 = load i32, ptr %34, align 4, !tbaa !9
  %378 = load i32, ptr %31, align 4, !tbaa !9
  %379 = load i32, ptr %16, align 4, !tbaa !9
  %380 = mul nsw i32 %378, %379
  %381 = add nsw i32 %377, %380
  %382 = load i32, ptr %21, align 4, !tbaa !9
  %383 = sub nsw i32 %382, 1
  %384 = icmp slt i32 %381, %383
  br i1 %384, label %385, label %391

385:                                              ; preds = %375
  %386 = load i32, ptr %34, align 4, !tbaa !9
  %387 = load i32, ptr %31, align 4, !tbaa !9
  %388 = load i32, ptr %16, align 4, !tbaa !9
  %389 = mul nsw i32 %387, %388
  %390 = add nsw i32 %386, %389
  br label %394

391:                                              ; preds = %375
  %392 = load i32, ptr %21, align 4, !tbaa !9
  %393 = sub nsw i32 %392, 1
  br label %394

394:                                              ; preds = %391, %385
  %395 = phi i32 [ %390, %385 ], [ %393, %391 ]
  %396 = load i32, ptr %30, align 4, !tbaa !9
  %397 = mul nsw i32 %395, %396
  %398 = load i32, ptr %42, align 4, !tbaa !9
  %399 = load i32, ptr %20, align 4, !tbaa !9
  %400 = mul nsw i32 %398, %399
  %401 = add nsw i32 %397, %400
  %402 = load i32, ptr %43, align 4, !tbaa !9
  %403 = add nsw i32 %401, %402
  %404 = sext i32 %403 to i64
  %405 = getelementptr inbounds float, ptr %376, i64 %404
  %406 = load float, ptr %405, align 4, !tbaa !16
  %407 = load ptr, ptr %12, align 8, !tbaa !5
  %408 = load i32, ptr %31, align 4, !tbaa !9
  %409 = load i32, ptr %26, align 4, !tbaa !9
  %410 = mul nsw i32 %408, %409
  %411 = load i32, ptr %33, align 4, !tbaa !9
  %412 = add nsw i32 %410, %411
  %413 = load i32, ptr %25, align 4, !tbaa !9
  %414 = mul nsw i32 %412, %413
  %415 = load i32, ptr %32, align 4, !tbaa !9
  %416 = add nsw i32 %414, %415
  %417 = load i32, ptr %34, align 4, !tbaa !9
  %418 = add nsw i32 %416, %417
  %419 = sext i32 %418 to i64
  %420 = getelementptr inbounds float, ptr %407, i64 %419
  store float %406, ptr %420, align 4, !tbaa !16
  br label %421

421:                                              ; preds = %394
  %422 = load i32, ptr %34, align 4, !tbaa !9
  %423 = add nsw i32 %422, 1
  store i32 %423, ptr %34, align 4, !tbaa !9
  br label %371, !llvm.loop !22

424:                                              ; preds = %371
  call void @llvm.lifetime.end.p0(i64 4, ptr %43) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %42) #3
  br label %425

425:                                              ; preds = %424
  %426 = load i32, ptr %13, align 4, !tbaa !9
  %427 = load i32, ptr %32, align 4, !tbaa !9
  %428 = add nsw i32 %427, %426
  store i32 %428, ptr %32, align 4, !tbaa !9
  br label %325, !llvm.loop !23

429:                                              ; preds = %325
  %430 = load ptr, ptr %12, align 8, !tbaa !5
  %431 = load i32, ptr %31, align 4, !tbaa !9
  %432 = load i32, ptr %26, align 4, !tbaa !9
  %433 = mul nsw i32 %431, %432
  %434 = load i32, ptr %33, align 4, !tbaa !9
  %435 = add nsw i32 %433, %434
  %436 = load i32, ptr %25, align 4, !tbaa !9
  %437 = mul nsw i32 %435, %436
  %438 = load i32, ptr %25, align 4, !tbaa !9
  %439 = add nsw i32 %437, %438
  %440 = sub nsw i32 %439, 1
  %441 = sext i32 %440 to i64
  %442 = getelementptr inbounds float, ptr %430, i64 %441
  store float 1.000000e+00, ptr %442, align 4, !tbaa !16
  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
  br label %443

443:                                              ; preds = %429
  %444 = load i32, ptr %33, align 4, !tbaa !9
  %445 = add nsw i32 %444, 1
  store i32 %445, ptr %33, align 4, !tbaa !9
  br label %248, !llvm.loop !24

446:                                              ; preds = %248
  br label %447

447:                                              ; preds = %446
  %448 = load i32, ptr %31, align 4, !tbaa !9
  %449 = add nsw i32 %448, 1
  store i32 %449, ptr %31, align 4, !tbaa !9
  br label %103, !llvm.loop !25

450:                                              ; preds = %103
  call void @llvm.lifetime.end.p0(i64 4, ptr %34) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %33) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %32) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %31) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %30) #3
  call void @llvm.lifetime.end.p0(i64 8, ptr %29) #3
  call void @llvm.lifetime.end.p0(i64 4, ptr %28) #3
  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
  ret void
}

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { 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 #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, !10, i64 8}
!12 = !{!"MTensor", !10, i64 0, !10, i64 4, !10, i64 8, !10, i64 12, !6, i64 16, !10, i64 24}
!13 = !{!12, !10, i64 12}
!14 = !{!12, !10, i64 4}
!15 = !{!12, !6, i64 16}
!16 = !{!17, !17, i64 0}
!17 = !{!"float", !7, i64 0}
!18 = distinct !{!18, !19}
!19 = !{!"llvm.loop.mustprogress"}
!20 = distinct !{!20, !19}
!21 = distinct !{!21, !19}
!22 = distinct !{!22, !19}
!23 = distinct !{!23, !19}
!24 = distinct !{!24, !19}
!25 = distinct !{!25, !19}


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

; Function Attrs: mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite)
declare void @llvm.memcpy.p0.p0.i64(ptr noalias nocapture writeonly, ptr noalias nocapture readonly, i64, i1 immarg) #0

; Function Attrs: nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) uwtable
define dso_local void @GroupConvTensorToMatData(ptr nocapture noundef readonly %0, i32 noundef %1, ptr nocapture noundef %2, i32 noundef %3, i32 noundef %4, i32 noundef %5, i32 noundef %6, i32 noundef %7, i32 noundef %8) local_unnamed_addr #1 {
  %10 = getelementptr inbounds i8, ptr %0, i64 8
  %11 = load i32, ptr %10, align 8, !tbaa !5
  %12 = getelementptr inbounds i8, ptr %0, i64 12
  %13 = load i32, ptr %12, align 4, !tbaa !11
  %14 = getelementptr inbounds i8, ptr %0, i64 4
  %15 = load i32, ptr %14, align 4, !tbaa !12
  %16 = sdiv i32 %13, %8
  %.neg = sdiv i32 %3, -2
  %17 = add nsw i32 %.neg, 1
  %18 = add i32 %17, %15
  %19 = sdiv i32 %18, %6
  %20 = mul i32 %5, %3
  %21 = mul i32 %20, %4
  %22 = add nsw i32 %21, 1
  %23 = getelementptr inbounds i8, ptr %0, i64 16
  %24 = load ptr, ptr %23, align 8, !tbaa !13
  %25 = sext i32 %1 to i64
  %26 = getelementptr inbounds ptr, ptr %24, i64 %25
  %27 = load ptr, ptr %26, align 8, !tbaa !14
  %28 = mul nsw i32 %13, %11
  %29 = icmp sgt i32 %19, 0
  br i1 %29, label %.preheader210.lr.ph, label %._crit_edge234

.preheader210.lr.ph:                              ; preds = %9
  %30 = sdiv i32 %11, %7
  %31 = mul i32 %30, %16
  %32 = add nsw i32 %30, -1
  %33 = mul nsw i32 %32, %7
  %34 = sub nsw i32 %11, %33
  %35 = sdiv i32 %34, 2
  %36 = add nsw i32 %16, -1
  %37 = mul nsw i32 %36, %8
  %38 = sub nsw i32 %13, %37
  %39 = sdiv i32 %38, 2
  %invariant.gep = getelementptr i8, ptr %2, i64 -4
  %40 = icmp sgt i32 %16, 0
  %.neg202 = sdiv i32 %4, -2
  %41 = add nsw i32 %35, %.neg202
  %.neg203 = sdiv i32 %5, -2
  %42 = icmp sgt i32 %21, 0
  %43 = add nsw i32 %11, -1
  %44 = add nsw i32 %39, %.neg203
  %45 = add nsw i32 %13, -1
  %46 = icmp sgt i32 %3, 0
  %47 = add nsw i32 %15, -1
  %factor.op.mul.reass = mul i32 %20, %7
  %48 = icmp slt i32 %16, %31
  %49 = sub i32 %4, %7
  %50 = tail call i32 @llvm.smax.i32(i32 %49, i32 0)
  %51 = mul i32 %20, %50
  %52 = icmp sgt i32 %51, 0
  %53 = sext i32 %factor.op.mul.reass to i64
  %invariant.gep230 = getelementptr float, ptr %2, i64 %53
  %54 = zext nneg i32 %51 to i64
  %55 = shl nuw nsw i64 %54, 2
  %56 = icmp slt i32 %51, %21
  %57 = sext i32 %3 to i64
  %58 = sext i32 %21 to i64
  %59 = sext i32 %22 to i64
  %60 = sext i32 %51 to i64
  %61 = sext i32 %16 to i64
  %62 = zext i32 %6 to i64
  %63 = sext i32 %31 to i64
  %wide.trip.count273 = zext nneg i32 %19 to i64
  %wide.trip.count = zext i32 %16 to i64
  %wide.trip.count255 = zext nneg i32 %16 to i64
  %wide.trip.count247 = zext i32 %3 to i64
  %64 = add nsw i64 %wide.trip.count247, -1
  %xtraiter = and i64 %wide.trip.count, 3
  %65 = icmp ult i32 %16, 4
  %unroll_iter = and i64 %wide.trip.count, 2147483644
  %lcmp.mod.not = icmp eq i64 %xtraiter, 0
  %xtraiter285 = and i64 %wide.trip.count, 3
  %66 = icmp ult i32 %16, 4
  %unroll_iter288 = and i64 %wide.trip.count, 2147483644
  %lcmp.mod287.not = icmp eq i64 %xtraiter285, 0
  %xtraiter290 = and i64 %wide.trip.count247, 1
  %67 = icmp eq i64 %64, 0
  %unroll_iter293 = and i64 %wide.trip.count247, 2147483646
  %lcmp.mod292.not = icmp eq i64 %xtraiter290, 0
  %xtraiter296 = and i64 %wide.trip.count247, 1
  %68 = icmp eq i64 %64, 0
  %unroll_iter299 = and i64 %wide.trip.count247, 2147483646
  %lcmp.mod298.not = icmp eq i64 %xtraiter296, 0
  br label %.preheader210

.preheader210:                                    ; preds = %.preheader210.lr.ph, %._crit_edge
  %indvars.iv270 = phi i64 [ 0, %.preheader210.lr.ph ], [ %indvars.iv.next271, %._crit_edge ]
  br i1 %40, label %.lr.ph, label %.preheader

.lr.ph:                                           ; preds = %.preheader210
  %69 = mul i64 %indvars.iv270, %62
  %70 = mul nsw i64 %indvars.iv270, %63
  %71 = trunc nsw i64 %70 to i32
  %72 = add i32 %71, 1
  br i1 %42, label %.lr.ph.split.us, label %.lr.ph.split.preheader

.lr.ph.split.preheader:                           ; preds = %.lr.ph
  br i1 %65, label %.preheader.loopexit284.unr-lcssa, label %.lr.ph.split

.lr.ph.split.us:                                  ; preds = %.lr.ph
  br i1 %46, label %.lr.ph214.us.us, label %.lr.ph214.us.preheader

.lr.ph214.us.preheader:                           ; preds = %.lr.ph.split.us
  br i1 %66, label %.preheader.loopexit283.unr-lcssa, label %.lr.ph214.us

.lr.ph214.us.us:                                  ; preds = %.lr.ph.split.us, %._crit_edge215.split.us.us.us
  %indvars.iv252 = phi i64 [ %indvars.iv.next253, %._crit_edge215.split.us.us.us ], [ 0, %.lr.ph.split.us ]
  %73 = trunc i64 %indvars.iv252 to i32
  %74 = mul i32 %73, %8
  %75 = add i32 %44, %74
  %76 = add nsw i64 %indvars.iv252, %70
  %77 = mul nsw i64 %76, %59
  %invariant.gep277 = getelementptr float, ptr %2, i64 %77
  br label %.lr.ph.us.us.us

.lr.ph.us.us.us:                                  ; preds = %._crit_edge.us.us.us, %.lr.ph214.us.us
  %indvars.iv249 = phi i64 [ %indvars.iv.next250, %._crit_edge.us.us.us ], [ 0, %.lr.ph214.us.us ]
  %78 = trunc nsw i64 %indvars.iv249 to i32
  %79 = sdiv i32 %78, %20
  %80 = add nsw i32 %41, %79
  %81 = icmp slt i32 %80, 0
  %.not204.us.us.us = icmp slt i32 %80, %11
  %spec.select.us.us.us = select i1 %.not204.us.us.us, i32 %80, i32 %43
  %.0179.us.us.us = select i1 %81, i32 0, i32 %spec.select.us.us.us
  %82 = srem i32 %78, %20
  %83 = udiv i32 %82, %3
  %84 = add nsw i32 %75, %83
  %85 = icmp slt i32 %84, 0
  %.not205.us.us.us = icmp slt i32 %84, %13
  %spec.select206.us.us.us = select i1 %.not205.us.us.us, i32 %84, i32 %45
  %.0178.us.us.us = select i1 %85, i32 0, i32 %spec.select206.us.us.us
  %86 = mul nsw i32 %.0179.us.us.us, %13
  %87 = add i32 %.0178.us.us.us, %86
  %gep278 = getelementptr float, ptr %invariant.gep277, i64 %indvars.iv249
  br i1 %67, label %._crit_edge.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.new

.lr.ph.us.us.us.new:                              ; preds = %.lr.ph.us.us.us, %.lr.ph.us.us.us.new
  %indvars.iv244 = phi i64 [ %indvars.iv.next245.1, %.lr.ph.us.us.us.new ], [ 0, %.lr.ph.us.us.us ]
  %niter294 = phi i64 [ %niter294.next.1, %.lr.ph.us.us.us.new ], [ 0, %.lr.ph.us.us.us ]
  %88 = add i64 %indvars.iv244, %69
  %89 = trunc i64 %88 to i32
  %..us.us.us = tail call i32 @llvm.smin.i32(i32 %89, i32 %47)
  %90 = mul nsw i32 %..us.us.us, %28
  %91 = add i32 %87, %90
  %92 = sext i32 %91 to i64
  %93 = getelementptr inbounds float, ptr %27, i64 %92
  %94 = load float, ptr %93, align 4, !tbaa !15
  %95 = getelementptr float, ptr %gep278, i64 %indvars.iv244
  store float %94, ptr %95, align 4, !tbaa !15
  %indvars.iv.next245 = or disjoint i64 %indvars.iv244, 1
  %96 = add i64 %indvars.iv.next245, %69
  %97 = trunc i64 %96 to i32
  %..us.us.us.1 = tail call i32 @llvm.smin.i32(i32 %97, i32 %47)
  %98 = mul nsw i32 %..us.us.us.1, %28
  %99 = add i32 %87, %98
  %100 = sext i32 %99 to i64
  %101 = getelementptr inbounds float, ptr %27, i64 %100
  %102 = load float, ptr %101, align 4, !tbaa !15
  %103 = getelementptr float, ptr %gep278, i64 %indvars.iv.next245
  store float %102, ptr %103, align 4, !tbaa !15
  %indvars.iv.next245.1 = add nuw nsw i64 %indvars.iv244, 2
  %niter294.next.1 = add i64 %niter294, 2
  %niter294.ncmp.1 = icmp eq i64 %niter294.next.1, %unroll_iter293
  br i1 %niter294.ncmp.1, label %._crit_edge.us.us.us.unr-lcssa, label %.lr.ph.us.us.us.new, !llvm.loop !17

._crit_edge.us.us.us.unr-lcssa:                   ; preds = %.lr.ph.us.us.us.new, %.lr.ph.us.us.us
  %indvars.iv244.unr = phi i64 [ 0, %.lr.ph.us.us.us ], [ %indvars.iv.next245.1, %.lr.ph.us.us.us.new ]
  br i1 %lcmp.mod292.not, label %._crit_edge.us.us.us, label %._crit_edge.us.us.us.epilog-lcssa

._crit_edge.us.us.us.epilog-lcssa:                ; preds = %._crit_edge.us.us.us.unr-lcssa
  %104 = add i64 %indvars.iv244.unr, %69
  %105 = trunc i64 %104 to i32
  %..us.us.us.epil = tail call i32 @llvm.smin.i32(i32 %105, i32 %47)
  %106 = mul nsw i32 %..us.us.us.epil, %28
  %107 = add i32 %87, %106
  %108 = sext i32 %107 to i64
  %109 = getelementptr inbounds float, ptr %27, i64 %108
  %110 = load float, ptr %109, align 4, !tbaa !15
  %111 = getelementptr float, ptr %gep278, i64 %indvars.iv244.unr
  store float %110, ptr %111, align 4, !tbaa !15
  br label %._crit_edge.us.us.us

._crit_edge.us.us.us:                             ; preds = %._crit_edge.us.us.us.unr-lcssa, %._crit_edge.us.us.us.epilog-lcssa
  %indvars.iv.next250 = add nuw nsw i64 %indvars.iv249, %57
  %112 = icmp slt i64 %indvars.iv.next250, %58
  br i1 %112, label %.lr.ph.us.us.us, label %._crit_edge215.split.us.us.us, !llvm.loop !19

._crit_edge215.split.us.us.us:                    ; preds = %._crit_edge.us.us.us
  %113 = trunc nuw nsw i64 %indvars.iv252 to i32
  %114 = add i32 %72, %113
  %115 = mul i32 %114, %22
  %116 = sext i32 %115 to i64
  %gep.us.us = getelementptr float, ptr %invariant.gep, i64 %116
  store float 1.000000e+00, ptr %gep.us.us, align 4, !tbaa !15
  %indvars.iv.next253 = add nuw nsw i64 %indvars.iv252, 1
  %exitcond256.not = icmp eq i64 %indvars.iv.next253, %wide.trip.count255
  br i1 %exitcond256.not, label %.preheader, label %.lr.ph214.us.us, !llvm.loop !20

.lr.ph214.us:                                     ; preds = %.lr.ph214.us.preheader, %.lr.ph214.us
  %indvars.iv239 = phi i64 [ %indvars.iv.next240.3, %.lr.ph214.us ], [ 0, %.lr.ph214.us.preheader ]
  %niter289 = phi i64 [ %niter289.next.3, %.lr.ph214.us ], [ 0, %.lr.ph214.us.preheader ]
  %117 = trunc nuw nsw i64 %indvars.iv239 to i32
  %118 = add i32 %72, %117
  %119 = mul i32 %118, %22
  %120 = sext i32 %119 to i64
  %gep.us = getelementptr float, ptr %invariant.gep, i64 %120
  store float 1.000000e+00, ptr %gep.us, align 4, !tbaa !15
  %121 = trunc i64 %indvars.iv239 to i32
  %122 = or disjoint i32 %121, 1
  %123 = add i32 %72, %122
  %124 = mul i32 %123, %22
  %125 = sext i32 %124 to i64
  %gep.us.1 = getelementptr float, ptr %invariant.gep, i64 %125
  store float 1.000000e+00, ptr %gep.us.1, align 4, !tbaa !15
  %126 = trunc i64 %indvars.iv239 to i32
  %127 = or disjoint i32 %126, 2
  %128 = add i32 %72, %127
  %129 = mul i32 %128, %22
  %130 = sext i32 %129 to i64
  %gep.us.2 = getelementptr float, ptr %invariant.gep, i64 %130
  store float 1.000000e+00, ptr %gep.us.2, align 4, !tbaa !15
  %131 = trunc i64 %indvars.iv239 to i32
  %132 = or disjoint i32 %131, 3
  %133 = add i32 %72, %132
  %134 = mul i32 %133, %22
  %135 = sext i32 %134 to i64
  %gep.us.3 = getelementptr float, ptr %invariant.gep, i64 %135
  store float 1.000000e+00, ptr %gep.us.3, align 4, !tbaa !15
  %indvars.iv.next240.3 = add nuw nsw i64 %indvars.iv239, 4
  %niter289.next.3 = add i64 %niter289, 4
  %niter289.ncmp.3 = icmp eq i64 %niter289.next.3, %unroll_iter288
  br i1 %niter289.ncmp.3, label %.preheader.loopexit283.unr-lcssa, label %.lr.ph214.us, !llvm.loop !20

.preheader.loopexit283.unr-lcssa:                 ; preds = %.lr.ph214.us, %.lr.ph214.us.preheader
  %indvars.iv239.unr = phi i64 [ 0, %.lr.ph214.us.preheader ], [ %indvars.iv.next240.3, %.lr.ph214.us ]
  br i1 %lcmp.mod287.not, label %.preheader, label %.lr.ph214.us.epil

.lr.ph214.us.epil:                                ; preds = %.preheader.loopexit283.unr-lcssa, %.lr.ph214.us.epil
  %indvars.iv239.epil = phi i64 [ %indvars.iv.next240.epil, %.lr.ph214.us.epil ], [ %indvars.iv239.unr, %.preheader.loopexit283.unr-lcssa ]
  %epil.iter286 = phi i64 [ %epil.iter286.next, %.lr.ph214.us.epil ], [ 0, %.preheader.loopexit283.unr-lcssa ]
  %136 = trunc nuw nsw i64 %indvars.iv239.epil to i32
  %137 = add i32 %72, %136
  %138 = mul i32 %137, %22
  %139 = sext i32 %138 to i64
  %gep.us.epil = getelementptr float, ptr %invariant.gep, i64 %139
  store float 1.000000e+00, ptr %gep.us.epil, align 4, !tbaa !15
  %indvars.iv.next240.epil = add nuw nsw i64 %indvars.iv239.epil, 1
  %epil.iter286.next = add i64 %epil.iter286, 1
  %epil.iter286.cmp.not = icmp eq i64 %epil.iter286.next, %xtraiter285
  br i1 %epil.iter286.cmp.not, label %.preheader, label %.lr.ph214.us.epil, !llvm.loop !21

.preheader.loopexit284.unr-lcssa:                 ; preds = %.lr.ph.split, %.lr.ph.split.preheader
  %indvars.iv.unr = phi i64 [ 0, %.lr.ph.split.preheader ], [ %indvars.iv.next.3, %.lr.ph.split ]
  br i1 %lcmp.mod.not, label %.preheader, label %.lr.ph.split.epil

.lr.ph.split.epil:                                ; preds = %.preheader.loopexit284.unr-lcssa, %.lr.ph.split.epil
  %indvars.iv.epil = phi i64 [ %indvars.iv.next.epil, %.lr.ph.split.epil ], [ %indvars.iv.unr, %.preheader.loopexit284.unr-lcssa ]
  %epil.iter = phi i64 [ %epil.iter.next, %.lr.ph.split.epil ], [ 0, %.preheader.loopexit284.unr-lcssa ]
  %140 = trunc nuw nsw i64 %indvars.iv.epil to i32
  %141 = add i32 %72, %140
  %142 = mul i32 %141, %22
  %143 = sext i32 %142 to i64
  %gep.epil = getelementptr float, ptr %invariant.gep, i64 %143
  store float 1.000000e+00, ptr %gep.epil, align 4, !tbaa !15
  %indvars.iv.next.epil = add nuw nsw i64 %indvars.iv.epil, 1
  %epil.iter.next = add i64 %epil.iter, 1
  %epil.iter.cmp.not = icmp eq i64 %epil.iter.next, %xtraiter
  br i1 %epil.iter.cmp.not, label %.preheader, label %.lr.ph.split.epil, !llvm.loop !23

.preheader:                                       ; preds = %.preheader.loopexit284.unr-lcssa, %.lr.ph.split.epil, %.preheader.loopexit283.unr-lcssa, %.lr.ph214.us.epil, %._crit_edge215.split.us.us.us, %.preheader210
  br i1 %48, label %.lr.ph229, label %._crit_edge

.lr.ph229:                                        ; preds = %.preheader
  %144 = mul nsw i64 %indvars.iv270, %63
  %145 = mul i64 %indvars.iv270, %62
  %146 = trunc nsw i64 %144 to i32
  %147 = add i32 %146, 1
  br label %167

.lr.ph.split:                                     ; preds = %.lr.ph.split.preheader, %.lr.ph.split
  %indvars.iv = phi i64 [ %indvars.iv.next.3, %.lr.ph.split ], [ 0, %.lr.ph.split.preheader ]
  %niter = phi i64 [ %niter.next.3, %.lr.ph.split ], [ 0, %.lr.ph.split.preheader ]
  %148 = trunc nuw nsw i64 %indvars.iv to i32
  %149 = add i32 %72, %148
  %150 = mul i32 %149, %22
  %151 = sext i32 %150 to i64
  %gep = getelementptr float, ptr %invariant.gep, i64 %151
  store float 1.000000e+00, ptr %gep, align 4, !tbaa !15
  %152 = trunc i64 %indvars.iv to i32
  %153 = or disjoint i32 %152, 1
  %154 = add i32 %72, %153
  %155 = mul i32 %154, %22
  %156 = sext i32 %155 to i64
  %gep.1 = getelementptr float, ptr %invariant.gep, i64 %156
  store float 1.000000e+00, ptr %gep.1, align 4, !tbaa !15
  %157 = trunc i64 %indvars.iv to i32
  %158 = or disjoint i32 %157, 2
  %159 = add i32 %72, %158
  %160 = mul i32 %159, %22
  %161 = sext i32 %160 to i64
  %gep.2 = getelementptr float, ptr %invariant.gep, i64 %161
  store float 1.000000e+00, ptr %gep.2, align 4, !tbaa !15
  %162 = trunc i64 %indvars.iv to i32
  %163 = or disjoint i32 %162, 3
  %164 = add i32 %72, %163
  %165 = mul i32 %164, %22
  %166 = sext i32 %165 to i64
  %gep.3 = getelementptr float, ptr %invariant.gep, i64 %166
  store float 1.000000e+00, ptr %gep.3, align 4, !tbaa !15
  %indvars.iv.next.3 = add nuw nsw i64 %indvars.iv, 4
  %niter.next.3 = add i64 %niter, 4
  %niter.ncmp.3 = icmp eq i64 %niter.next.3, %unroll_iter
  br i1 %niter.ncmp.3, label %.preheader.loopexit284.unr-lcssa, label %.lr.ph.split, !llvm.loop !20

167:                                              ; preds = %.lr.ph229, %._crit_edge225
  %indvars.iv265 = phi i64 [ %61, %.lr.ph229 ], [ %indvars.iv.next266, %._crit_edge225 ]
  br i1 %52, label %168, label %174

168:                                              ; preds = %167
  %169 = add nsw i64 %indvars.iv265, %144
  %170 = mul nsw i64 %169, %59
  %171 = getelementptr inbounds float, ptr %2, i64 %170
  %172 = sub nsw i64 %169, %61
  %173 = mul nsw i64 %172, %59
  %gep231 = getelementptr float, ptr %invariant.gep230, i64 %173
  tail call void @llvm.memcpy.p0.p0.i64(ptr align 4 %171, ptr align 4 %gep231, i64 %55, i1 false)
  br label %174

174:                                              ; preds = %168, %167
  %175 = trunc nsw i64 %indvars.iv265 to i32
  br i1 %56, label %.lr.ph224, label %._crit_edge225

.lr.ph224:                                        ; preds = %174
  %176 = srem i32 %175, %16
  %177 = mul nsw i32 %176, %8
  %178 = sdiv i32 %175, %16
  %179 = mul nsw i32 %178, %7
  %180 = add i32 %41, %179
  %181 = add i32 %44, %177
  br i1 %46, label %.lr.ph221.us.preheader, label %._crit_edge225

.lr.ph221.us.preheader:                           ; preds = %.lr.ph224
  %182 = add nsw i64 %indvars.iv265, %144
  %183 = mul nsw i64 %182, %59
  %invariant.gep279 = getelementptr float, ptr %2, i64 %183
  br label %.lr.ph221.us

.lr.ph221.us:                                     ; preds = %.lr.ph221.us.preheader, %._crit_edge.us
  %indvars.iv262 = phi i64 [ %60, %.lr.ph221.us.preheader ], [ %indvars.iv.next263, %._crit_edge.us ]
  %184 = trunc nsw i64 %indvars.iv262 to i32
  %185 = sdiv i32 %184, %20
  %186 = add nsw i32 %180, %185
  %187 = icmp slt i32 %186, 0
  %.not.us = icmp slt i32 %186, %11
  %spec.select207.us = select i1 %.not.us, i32 %186, i32 %43
  %.0173.us = select i1 %187, i32 0, i32 %spec.select207.us
  %188 = srem i32 %184, %20
  %189 = sdiv i32 %188, %3
  %190 = add nsw i32 %181, %189
  %191 = icmp slt i32 %190, 0
  %.not201.us = icmp slt i32 %190, %13
  %spec.select208.us = select i1 %.not201.us, i32 %190, i32 %45
  %.0.us = select i1 %191, i32 0, i32 %spec.select208.us
  %192 = mul nsw i32 %.0173.us, %13
  %193 = add i32 %.0.us, %192
  %gep280 = getelementptr float, ptr %invariant.gep279, i64 %indvars.iv262
  br i1 %68, label %._crit_edge.us.unr-lcssa, label %.lr.ph221.us.new

.lr.ph221.us.new:                                 ; preds = %.lr.ph221.us, %.lr.ph221.us.new
  %indvars.iv257 = phi i64 [ %indvars.iv.next258.1, %.lr.ph221.us.new ], [ 0, %.lr.ph221.us ]
  %niter300 = phi i64 [ %niter300.next.1, %.lr.ph221.us.new ], [ 0, %.lr.ph221.us ]
  %194 = add i64 %indvars.iv257, %145
  %195 = trunc i64 %194 to i32
  %.209.us = tail call i32 @llvm.smin.i32(i32 %195, i32 %47)
  %196 = mul nsw i32 %.209.us, %28
  %197 = add i32 %193, %196
  %198 = sext i32 %197 to i64
  %199 = getelementptr inbounds float, ptr %27, i64 %198
  %200 = load float, ptr %199, align 4, !tbaa !15
  %201 = getelementptr float, ptr %gep280, i64 %indvars.iv257
  store float %200, ptr %201, align 4, !tbaa !15
  %indvars.iv.next258 = or disjoint i64 %indvars.iv257, 1
  %202 = add i64 %indvars.iv.next258, %145
  %203 = trunc i64 %202 to i32
  %.209.us.1 = tail call i32 @llvm.smin.i32(i32 %203, i32 %47)
  %204 = mul nsw i32 %.209.us.1, %28
  %205 = add i32 %193, %204
  %206 = sext i32 %205 to i64
  %207 = getelementptr inbounds float, ptr %27, i64 %206
  %208 = load float, ptr %207, align 4, !tbaa !15
  %209 = getelementptr float, ptr %gep280, i64 %indvars.iv.next258
  store float %208, ptr %209, align 4, !tbaa !15
  %indvars.iv.next258.1 = add nuw nsw i64 %indvars.iv257, 2
  %niter300.next.1 = add i64 %niter300, 2
  %niter300.ncmp.1 = icmp eq i64 %niter300.next.1, %unroll_iter299
  br i1 %niter300.ncmp.1, label %._crit_edge.us.unr-lcssa, label %.lr.ph221.us.new, !llvm.loop !24

._crit_edge.us.unr-lcssa:                         ; preds = %.lr.ph221.us.new, %.lr.ph221.us
  %indvars.iv257.unr = phi i64 [ 0, %.lr.ph221.us ], [ %indvars.iv.next258.1, %.lr.ph221.us.new ]
  br i1 %lcmp.mod298.not, label %._crit_edge.us, label %._crit_edge.us.epilog-lcssa

._crit_edge.us.epilog-lcssa:                      ; preds = %._crit_edge.us.unr-lcssa
  %210 = add i64 %indvars.iv257.unr, %145
  %211 = trunc i64 %210 to i32
  %.209.us.epil = tail call i32 @llvm.smin.i32(i32 %211, i32 %47)
  %212 = mul nsw i32 %.209.us.epil, %28
  %213 = add i32 %193, %212
  %214 = sext i32 %213 to i64
  %215 = getelementptr inbounds float, ptr %27, i64 %214
  %216 = load float, ptr %215, align 4, !tbaa !15
  %217 = getelementptr float, ptr %gep280, i64 %indvars.iv257.unr
  store float %216, ptr %217, align 4, !tbaa !15
  br label %._crit_edge.us

._crit_edge.us:                                   ; preds = %._crit_edge.us.unr-lcssa, %._crit_edge.us.epilog-lcssa
  %indvars.iv.next263 = add nsw i64 %indvars.iv262, %57
  %218 = icmp slt i64 %indvars.iv.next263, %58
  br i1 %218, label %.lr.ph221.us, label %._crit_edge225, !llvm.loop !25

._crit_edge225:                                   ; preds = %._crit_edge.us, %174, %.lr.ph224
  %219 = add i32 %147, %175
  %220 = mul i32 %219, %22
  %221 = sext i32 %220 to i64
  %gep227 = getelementptr float, ptr %invariant.gep, i64 %221
  store float 1.000000e+00, ptr %gep227, align 4, !tbaa !15
  %indvars.iv.next266 = add nsw i64 %indvars.iv265, 1
  %exitcond269.not = icmp eq i64 %indvars.iv.next266, %63
  br i1 %exitcond269.not, label %._crit_edge, label %167, !llvm.loop !26

._crit_edge:                                      ; preds = %._crit_edge225, %.preheader
  %indvars.iv.next271 = add nuw nsw i64 %indvars.iv270, 1
  %exitcond274.not = icmp eq i64 %indvars.iv.next271, %wide.trip.count273
  br i1 %exitcond274.not, label %._crit_edge234, label %.preheader210, !llvm.loop !27

._crit_edge234:                                   ; preds = %._crit_edge, %9
  ret void
}

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

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

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: readwrite) }
attributes #1 = { nofree norecurse nosync nounwind memory(read, argmem: readwrite, inaccessiblemem: none) 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 #2 = { nocallback nofree nosync nounwind speculatable willreturn memory(none) }

!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, !7, i64 8}
!6 = !{!"MTensor", !7, i64 0, !7, i64 4, !7, i64 8, !7, i64 12, !10, i64 16, !7, i64 24}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C/C++ TBAA"}
!10 = !{!"any pointer", !8, i64 0}
!11 = !{!6, !7, i64 12}
!12 = !{!6, !7, i64 4}
!13 = !{!6, !10, i64 16}
!14 = !{!10, !10, i64 0}
!15 = !{!16, !16, i64 0}
!16 = !{!"float", !8, i64 0}
!17 = distinct !{!17, !18}
!18 = !{!"llvm.loop.mustprogress"}
!19 = distinct !{!19, !18}
!20 = distinct !{!20, !18}
!21 = distinct !{!21, !22}
!22 = !{!"llvm.loop.unroll.disable"}
!23 = distinct !{!23, !22}
!24 = distinct !{!24, !18}
!25 = distinct !{!25, !18}
!26 = distinct !{!26, !18}
!27 = distinct !{!27, !18}


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