; 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.MLayer = type { [32 x i8], i32, ptr, ptr, ptr, i32 }
%struct.TensorGroupConvPara = type { ptr, i32, i32, i32, i32, i32, i32, float, float, float, i32, i32 }
%struct.MHandle = type { i32, i32, ptr, ptr }
%struct.MTensor = type { i32, i32, i32, i32, ptr, i32 }
%struct.HandleTensorGroupConv = type { ptr, ptr, ptr }
%struct.MMemoryBlock = type { i32, i32, ptr, ptr, ptr, i32 }

@.str.1 = external hidden unnamed_addr constant [92 x i8], align 1
@.str.16 = external hidden unnamed_addr constant [19 x i8], align 1
@morn_network_flag = external global i32, align 4
@morn_network_parafile = external global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1
@__FUNCTION__.TensorGroupConvSet = external hidden unnamed_addr constant [19 x i8], align 1

; Function Attrs: nocallback nofree nounwind willreturn memory(argmem: write)
declare void @llvm.memset.p0.i64(ptr nocapture writeonly, i8, 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

declare void @m_Exception(i32 noundef, i32 noundef, ptr noundef, i32 noundef, ptr noundef, ptr noundef, ...) #2

declare void @mMemoryBlockRelease(ptr noundef) #2

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

declare void @TensorRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) #2

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

; Function Attrs: nounwind
declare double @sqrt(double noundef) #3

declare float @mNormalRand(float noundef, float noundef) #2

; Function Attrs: nounwind
declare i32 @sprintf(ptr noundef, ptr noundef, ...) #3

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @endTensorGroupConv(ptr noundef) #4

; Function Attrs: nounwind uwtable
define dso_local void @TensorGroupConvSet(ptr noundef %0) #4 {
  %2 = alloca ptr, align 8
  %3 = alloca ptr, align 8
  %4 = alloca i32, align 4
  %5 = alloca ptr, align 8
  %6 = alloca ptr, align 8
  %7 = alloca ptr, align 8
  %8 = alloca ptr, align 8
  %9 = alloca ptr, align 8
  %10 = alloca i32, align 4
  %11 = alloca i32, align 4
  %12 = alloca i32, align 4
  %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 ptr, align 8
  %23 = alloca float, align 4
  %24 = alloca i32, align 4
  %25 = alloca [64 x i8], align 16
  %26 = alloca ptr, align 8
  store ptr %0, ptr %2, align 8, !tbaa !5
  %27 = load ptr, ptr %2, align 8, !tbaa !5
  %28 = getelementptr inbounds %struct.MLayer, ptr %27, i32 0, i32 5
  %29 = load i32, ptr %28, align 8, !tbaa !9
  %30 = icmp ne i32 %29, -1
  br i1 %30, label %31, label %32

31:                                               ; preds = %1
  br label %515

32:                                               ; preds = %1
  call void @llvm.lifetime.start.p0(i64 8, ptr %3) #5
  %33 = load ptr, ptr %2, align 8, !tbaa !5
  %34 = getelementptr inbounds %struct.MLayer, ptr %33, i32 0, i32 4
  %35 = load ptr, ptr %34, align 8, !tbaa !12
  store ptr %35, ptr %3, align 8, !tbaa !5
  %36 = load ptr, ptr %3, align 8, !tbaa !5
  %37 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %36, i32 0, i32 10
  %38 = load i32, ptr %37, align 4, !tbaa !13
  %39 = icmp sle i32 %38, 0
  br i1 %39, label %40, label %44

40:                                               ; preds = %32
  %41 = call i32 @mTensorRegisterIndex(ptr noundef @.str.23)
  %42 = load ptr, ptr %2, align 8, !tbaa !5
  %43 = getelementptr inbounds %struct.MLayer, ptr %42, i32 0, i32 1
  store i32 %41, ptr %43, align 8, !tbaa !16
  store i32 1, ptr %4, align 4
  br label %513

44:                                               ; preds = %32
  call void @llvm.lifetime.start.p0(i64 8, ptr %5) #5
  %45 = load ptr, ptr %3, align 8, !tbaa !5
  %46 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %45, i32 0, i32 0
  %47 = load ptr, ptr %46, align 8, !tbaa !17
  %48 = getelementptr inbounds %struct.MLayer, ptr %47, i32 0, i32 2
  %49 = load ptr, ptr %48, align 8, !tbaa !18
  store ptr %49, ptr %5, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %6) #5
  %50 = load ptr, ptr %3, align 8, !tbaa !5
  %51 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %50, i32 0, i32 0
  %52 = load ptr, ptr %51, align 8, !tbaa !17
  %53 = getelementptr inbounds %struct.MLayer, ptr %52, i32 0, i32 3
  %54 = load ptr, ptr %53, align 8, !tbaa !19
  store ptr %54, ptr %6, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %7) #5
  %55 = load ptr, ptr %2, align 8, !tbaa !5
  %56 = getelementptr inbounds %struct.MLayer, ptr %55, i32 0, i32 2
  %57 = load ptr, ptr %56, align 8, !tbaa !18
  store ptr %57, ptr %7, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %8) #5
  %58 = load ptr, ptr %7, align 8, !tbaa !5
  %59 = call ptr @GetHandle(ptr noundef %58, i32 noundef 24, i32 noundef -2105121901, ptr noundef @endTensorGroupConv)
  store ptr %59, ptr %8, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 8, ptr %9) #5
  %60 = load ptr, ptr %8, align 8, !tbaa !5
  %61 = getelementptr inbounds %struct.MHandle, ptr %60, i32 0, i32 3
  %62 = load ptr, ptr %61, align 8, !tbaa !20
  store ptr %62, ptr %9, align 8, !tbaa !5
  call void @llvm.lifetime.start.p0(i64 4, ptr %10) #5
  %63 = load ptr, ptr %5, align 8, !tbaa !5
  %64 = getelementptr inbounds %struct.MTensor, ptr %63, i32 0, i32 2
  %65 = load i32, ptr %64, align 8, !tbaa !22
  %66 = load ptr, ptr %3, align 8, !tbaa !5
  %67 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %66, i32 0, i32 5
  %68 = load i32, ptr %67, align 8, !tbaa !24
  %69 = sdiv i32 %65, %68
  store i32 %69, ptr %10, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %11) #5
  %70 = load ptr, ptr %5, align 8, !tbaa !5
  %71 = getelementptr inbounds %struct.MTensor, ptr %70, i32 0, i32 3
  %72 = load i32, ptr %71, align 4, !tbaa !26
  %73 = load ptr, ptr %3, align 8, !tbaa !5
  %74 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %73, i32 0, i32 4
  %75 = load i32, ptr %74, align 4, !tbaa !27
  %76 = sdiv i32 %72, %75
  store i32 %76, ptr %11, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %12) #5
  %77 = load ptr, ptr %5, align 8, !tbaa !5
  %78 = getelementptr inbounds %struct.MTensor, ptr %77, i32 0, i32 1
  %79 = load i32, ptr %78, align 4, !tbaa !28
  %80 = load ptr, ptr %3, align 8, !tbaa !5
  %81 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %80, i32 0, i32 10
  %82 = load i32, ptr %81, align 4, !tbaa !13
  %83 = sdiv i32 %82, 2
  %84 = sub nsw i32 %79, %83
  %85 = add nsw i32 %84, 1
  %86 = load ptr, ptr %3, align 8, !tbaa !5
  %87 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %86, i32 0, i32 11
  %88 = load i32, ptr %87, align 8, !tbaa !29
  %89 = sdiv i32 %85, %88
  store i32 %89, ptr %12, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %13) #5
  %90 = load i32, ptr %10, align 4, !tbaa !25
  %91 = load i32, ptr %11, align 4, !tbaa !25
  %92 = mul nsw i32 %90, %91
  %93 = load i32, ptr %12, align 4, !tbaa !25
  %94 = mul nsw i32 %92, %93
  store i32 %94, ptr %13, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %14) #5
  %95 = load ptr, ptr %3, align 8, !tbaa !5
  %96 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %95, i32 0, i32 2
  %97 = load i32, ptr %96, align 4, !tbaa !30
  %98 = load ptr, ptr %3, align 8, !tbaa !5
  %99 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %98, i32 0, i32 3
  %100 = load i32, ptr %99, align 8, !tbaa !31
  %101 = mul nsw i32 %97, %100
  %102 = load ptr, ptr %3, align 8, !tbaa !5
  %103 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %102, i32 0, i32 10
  %104 = load i32, ptr %103, align 4, !tbaa !13
  %105 = mul nsw i32 %101, %104
  %106 = add nsw i32 %105, 1
  store i32 %106, ptr %14, align 4, !tbaa !25
  call void @llvm.lifetime.start.p0(i64 4, ptr %15) #5
  %107 = load ptr, ptr %3, align 8, !tbaa !5
  %108 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %107, i32 0, i32 1
  %109 = load i32, ptr %108, align 8, !tbaa !32
  %110 = load i32, ptr %14, align 4, !tbaa !25
  %111 = mul nsw i32 %109, %110
  store i32 %111, ptr %15, align 4, !tbaa !25
  br label %112

112:                                              ; preds = %44
  call void @llvm.lifetime.start.p0(i64 4, ptr %16) #5
  store i32 5, ptr %16, align 4, !tbaa !25
  %113 = load i32, ptr %16, align 4, !tbaa !25
  %114 = icmp eq i32 %113, 0
  br i1 %114, label %115, label %120

115:                                              ; preds = %112
  %116 = load ptr, ptr %7, align 8, !tbaa !5
  %117 = load ptr, ptr %7, align 8, !tbaa !5
  %118 = getelementptr inbounds %struct.MTensor, ptr %117, i32 0, i32 4
  %119 = load ptr, ptr %118, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %116, i32 noundef -1, i32 noundef -1, i32 noundef -1, i32 noundef -1, ptr noundef %119, i32 noundef -1)
  br label %183

120:                                              ; preds = %112
  %121 = load i32, ptr %16, align 4, !tbaa !25
  %122 = icmp eq i32 %121, 4
  br i1 %122, label %123, label %139

123:                                              ; preds = %120
  %124 = load ptr, ptr %7, align 8, !tbaa !5
  %125 = load ptr, ptr %5, align 8, !tbaa !5
  %126 = getelementptr inbounds %struct.MTensor, ptr %125, i32 0, i32 0
  %127 = load i32, ptr %126, align 8, !tbaa !34
  %128 = add nsw i32 %127, 0
  %129 = load ptr, ptr %3, align 8, !tbaa !5
  %130 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %129, i32 0, i32 1
  %131 = load i32, ptr %130, align 8, !tbaa !32
  %132 = load i32, ptr %12, align 4, !tbaa !25
  %133 = mul nsw i32 %131, %132
  %134 = load i32, ptr %10, align 4, !tbaa !25
  %135 = load i32, ptr %11, align 4, !tbaa !25
  %136 = load ptr, ptr %7, align 8, !tbaa !5
  %137 = getelementptr inbounds %struct.MTensor, ptr %136, i32 0, i32 4
  %138 = load ptr, ptr %137, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %124, i32 noundef %128, i32 noundef %133, i32 noundef %134, i32 noundef %135, ptr noundef %138, i32 noundef -1)
  br label %182

139:                                              ; preds = %120
  %140 = load i32, ptr %16, align 4, !tbaa !25
  %141 = icmp eq i32 %140, 5
  br i1 %141, label %142, label %155

142:                                              ; preds = %139
  %143 = load ptr, ptr %7, align 8, !tbaa !5
  %144 = load ptr, ptr %5, align 8, !tbaa !5
  %145 = getelementptr inbounds %struct.MTensor, ptr %144, i32 0, i32 0
  %146 = load i32, ptr %145, align 8, !tbaa !34
  %147 = add nsw i32 %146, 0
  %148 = load ptr, ptr %3, align 8, !tbaa !5
  %149 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %148, i32 0, i32 1
  %150 = load i32, ptr %149, align 8, !tbaa !32
  %151 = load i32, ptr %12, align 4, !tbaa !25
  %152 = mul nsw i32 %150, %151
  %153 = load i32, ptr %10, align 4, !tbaa !25
  %154 = load i32, ptr %11, align 4, !tbaa !25
  call void @TensorRedefine(ptr noundef %143, i32 noundef %147, i32 noundef %152, i32 noundef %153, i32 noundef %154, ptr noundef null, i32 noundef -1)
  br label %181

155:                                              ; preds = %139
  %156 = load i32, ptr %16, align 4, !tbaa !25
  %157 = icmp eq i32 %156, 6
  br i1 %157, label %158, label %171

158:                                              ; preds = %155
  %159 = load ptr, ptr %7, align 8, !tbaa !5
  %160 = load ptr, ptr %5, align 8, !tbaa !5
  %161 = getelementptr inbounds %struct.MTensor, ptr %160, i32 0, i32 0
  %162 = load i32, ptr %161, align 8, !tbaa !34
  %163 = add nsw i32 %162, 0
  %164 = load ptr, ptr %3, align 8, !tbaa !5
  %165 = getelementptr inbounds %struct.TensorGroupConvPara, ptr %164, i32 0, i32 1
  %166 = load i32, ptr %165, align 8, !tbaa !32
  %167 = load i32, ptr %12, align 4, !tbaa !25
  %168 = mul nsw i32 %166, %167
  %169 = load i32, ptr %10, align 4, !tbaa !25
  %170 = load i32, ptr %11, align 4, !tbaa !25
  call void @TensorRedefine(ptr noundef %159, i32 noundef %163, i32 noundef %168, i32 noundef %169, i32 noundef %170, ptr noundef null, i32 noundef -1)
  br label %180

171:                                              ; preds = %155
  br label %172

172:                                              ; preds = %171
  call void @llvm.lifetime.start.p0(i64 4, ptr %17) #5
  store i32 1, ptr %17, align 4, !tbaa !25
  %173 = load i32, ptr %17, align 4, !tbaa !25
  %174 = icmp ne i32 %173, 0
  br i1 %174, label %175, label %177

175:                                              ; preds = %172
  %176 = load i32, ptr %17, align 4, !tbaa !25
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %176, i32 noundef -1, ptr noundef @.str.1, i32 noundef 634, ptr noundef @__FUNCTION__.TensorGroupConvSet, ptr noundef @.str.16)
  br label %177

177:                                              ; preds = %175, %172
  call void @llvm.lifetime.end.p0(i64 4, ptr %17) #5
  br label %178

178:                                              ; preds = %177
  br label %179

179:                                              ; preds = %178
  br label %180

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

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

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

183:                                              ; preds = %182, %115
  call void @llvm.lifetime.end.p0(i64 4, ptr %16) #5
  br label %184

184:                                              ; preds = %183
  br label %185

185:                                              ; preds = %184
  %186 = load i32, ptr @morn_network_flag, align 4, !tbaa !25
  %187 = icmp eq i32 %186, 1
  br i1 %187, label %188, label %425

188:                                              ; preds = %185
  %189 = load ptr, ptr %6, align 8, !tbaa !5
  %190 = icmp eq ptr %189, null
  br i1 %190, label %195, label %191

191:                                              ; preds = %188
  %192 = load ptr, ptr %6, align 8, !tbaa !5
  %193 = ptrtoint ptr %192 to i64
  %194 = icmp eq i64 %193, -1
  br i1 %194, label %195, label %196

195:                                              ; preds = %191, %188
  br i1 true, label %232, label %319

196:                                              ; preds = %191
  %197 = load ptr, ptr %6, align 8, !tbaa !5
  %198 = getelementptr inbounds %struct.MTensor, ptr %197, i32 0, i32 4
  %199 = load ptr, ptr %198, align 8, !tbaa !33
  %200 = icmp eq ptr %199, null
  br i1 %200, label %232, label %201

201:                                              ; preds = %196
  %202 = load ptr, ptr %6, align 8, !tbaa !5
  %203 = getelementptr inbounds %struct.MTensor, ptr %202, i32 0, i32 4
  %204 = load ptr, ptr %203, align 8, !tbaa !33
  %205 = ptrtoint ptr %204 to i64
  %206 = icmp eq i64 %205, -1
  br i1 %206, label %232, label %207

207:                                              ; preds = %201
  %208 = load ptr, ptr %6, align 8, !tbaa !5
  %209 = getelementptr inbounds %struct.MTensor, ptr %208, i32 0, i32 0
  %210 = load i32, ptr %209, align 8, !tbaa !34
  %211 = icmp sle i32 %210, 0
  br i1 %211, label %232, label %212

212:                                              ; preds = %207
  %213 = load ptr, ptr %6, align 8, !tbaa !5
  %214 = getelementptr inbounds %struct.MTensor, ptr %213, i32 0, i32 2
  %215 = load i32, ptr %214, align 8, !tbaa !22
  %216 = icmp sle i32 %215, 0
  br i1 %216, label %232, label %217

217:                                              ; preds = %212
  %218 = load ptr, ptr %6, align 8, !tbaa !5
  %219 = getelementptr inbounds %struct.MTensor, ptr %218, i32 0, i32 3
  %220 = load i32, ptr %219, align 4, !tbaa !26
  %221 = icmp sle i32 %220, 0
  br i1 %221, label %232, label %222

222:                                              ; preds = %217
  %223 = load ptr, ptr %6, align 8, !tbaa !5
  %224 = getelementptr inbounds %struct.MTensor, ptr %223, i32 0, i32 1
  %225 = load i32, ptr %224, align 4, !tbaa !28
  %226 = icmp sle i32 %225, 0
  br i1 %226, label %232, label %227

227:                                              ; preds = %222
  %228 = load ptr, ptr %6, align 8, !tbaa !5
  %229 = getelementptr inbounds ptr, ptr %228, i64 -1
  %230 = load ptr, ptr %229, align 8, !tbaa !5
  %231 = icmp eq ptr %230, null
  br i1 %231, label %232, label %319

232:                                              ; preds = %227, %222, %217, %212, %207, %201, %196, %195
  br label %233

233:                                              ; preds = %232
  call void @llvm.lifetime.start.p0(i64 4, ptr %18) #5
  store i32 5, ptr %18, align 4, !tbaa !25
  %234 = load i32, ptr %18, align 4, !tbaa !25
  %235 = icmp eq i32 %234, 0
  br i1 %235, label %236, label %241

236:                                              ; preds = %233
  %237 = load ptr, ptr %6, align 8, !tbaa !5
  %238 = load ptr, ptr %6, align 8, !tbaa !5
  %239 = getelementptr inbounds %struct.MTensor, ptr %238, i32 0, i32 4
  %240 = load ptr, ptr %239, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %237, i32 noundef -1, i32 noundef -1, i32 noundef -1, i32 noundef -1, ptr noundef %240, i32 noundef -1)
  br label %316

241:                                              ; preds = %233
  %242 = load i32, ptr %18, align 4, !tbaa !25
  %243 = icmp eq i32 %242, 4
  br i1 %243, label %244, label %262

244:                                              ; preds = %241
  %245 = load ptr, ptr %6, align 8, !tbaa !5
  %246 = load ptr, ptr %5, align 8, !tbaa !5
  %247 = getelementptr inbounds %struct.MTensor, ptr %246, i32 0, i32 0
  %248 = load i32, ptr %247, align 8, !tbaa !34
  %249 = add nsw i32 %248, 0
  %250 = load ptr, ptr %5, align 8, !tbaa !5
  %251 = getelementptr inbounds %struct.MTensor, ptr %250, i32 0, i32 1
  %252 = load i32, ptr %251, align 4, !tbaa !28
  %253 = load ptr, ptr %5, align 8, !tbaa !5
  %254 = getelementptr inbounds %struct.MTensor, ptr %253, i32 0, i32 2
  %255 = load i32, ptr %254, align 8, !tbaa !22
  %256 = load ptr, ptr %5, align 8, !tbaa !5
  %257 = getelementptr inbounds %struct.MTensor, ptr %256, i32 0, i32 3
  %258 = load i32, ptr %257, align 4, !tbaa !26
  %259 = load ptr, ptr %6, align 8, !tbaa !5
  %260 = getelementptr inbounds %struct.MTensor, ptr %259, i32 0, i32 4
  %261 = load ptr, ptr %260, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %245, i32 noundef %249, i32 noundef %252, i32 noundef %255, i32 noundef %258, ptr noundef %261, i32 noundef -1)
  br label %315

262:                                              ; preds = %241
  %263 = load i32, ptr %18, align 4, !tbaa !25
  %264 = icmp eq i32 %263, 5
  br i1 %264, label %265, label %283

265:                                              ; preds = %262
  %266 = load ptr, ptr %6, align 8, !tbaa !5
  %267 = load ptr, ptr %5, align 8, !tbaa !5
  %268 = getelementptr inbounds %struct.MTensor, ptr %267, i32 0, i32 0
  %269 = load i32, ptr %268, align 8, !tbaa !34
  %270 = add nsw i32 %269, 0
  %271 = load ptr, ptr %5, align 8, !tbaa !5
  %272 = getelementptr inbounds %struct.MTensor, ptr %271, i32 0, i32 1
  %273 = load i32, ptr %272, align 4, !tbaa !28
  %274 = load ptr, ptr %5, align 8, !tbaa !5
  %275 = getelementptr inbounds %struct.MTensor, ptr %274, i32 0, i32 2
  %276 = load i32, ptr %275, align 8, !tbaa !22
  %277 = load ptr, ptr %5, align 8, !tbaa !5
  %278 = getelementptr inbounds %struct.MTensor, ptr %277, i32 0, i32 3
  %279 = load i32, ptr %278, align 4, !tbaa !26
  %280 = load ptr, ptr %5, align 8, !tbaa !5
  %281 = getelementptr inbounds %struct.MTensor, ptr %280, i32 0, i32 4
  %282 = load ptr, ptr %281, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %266, i32 noundef %270, i32 noundef %273, i32 noundef %276, i32 noundef %279, ptr noundef %282, i32 noundef -1)
  br label %314

283:                                              ; preds = %262
  %284 = load i32, ptr %18, align 4, !tbaa !25
  %285 = icmp eq i32 %284, 6
  br i1 %285, label %286, label %304

286:                                              ; preds = %283
  %287 = load ptr, ptr %6, align 8, !tbaa !5
  %288 = load ptr, ptr %5, align 8, !tbaa !5
  %289 = getelementptr inbounds %struct.MTensor, ptr %288, i32 0, i32 0
  %290 = load i32, ptr %289, align 8, !tbaa !34
  %291 = add nsw i32 %290, 0
  %292 = load ptr, ptr %5, align 8, !tbaa !5
  %293 = getelementptr inbounds %struct.MTensor, ptr %292, i32 0, i32 1
  %294 = load i32, ptr %293, align 4, !tbaa !28
  %295 = load ptr, ptr %5, align 8, !tbaa !5
  %296 = getelementptr inbounds %struct.MTensor, ptr %295, i32 0, i32 2
  %297 = load i32, ptr %296, align 8, !tbaa !22
  %298 = load ptr, ptr %5, align 8, !tbaa !5
  %299 = getelementptr inbounds %struct.MTensor, ptr %298, i32 0, i32 3
  %300 = load i32, ptr %299, align 4, !tbaa !26
  %301 = load ptr, ptr %5, align 8, !tbaa !5
  %302 = getelementptr inbounds %struct.MTensor, ptr %301, i32 0, i32 4
  %303 = load ptr, ptr %302, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %287, i32 noundef %291, i32 noundef %294, i32 noundef %297, i32 noundef %300, ptr noundef %303, i32 noundef -1)
  br label %313

304:                                              ; preds = %283
  br label %305

305:                                              ; preds = %304
  call void @llvm.lifetime.start.p0(i64 4, ptr %19) #5
  store i32 1, ptr %19, align 4, !tbaa !25
  %306 = load i32, ptr %19, align 4, !tbaa !25
  %307 = icmp ne i32 %306, 0
  br i1 %307, label %308, label %310

308:                                              ; preds = %305
  %309 = load i32, ptr %19, align 4, !tbaa !25
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %309, i32 noundef -1, ptr noundef @.str.1, i32 noundef 637, ptr noundef @__FUNCTION__.TensorGroupConvSet, ptr noundef @.str.16)
  br label %310

310:                                              ; preds = %308, %305
  call void @llvm.lifetime.end.p0(i64 4, ptr %19) #5
  br label %311

311:                                              ; preds = %310
  br label %312

312:                                              ; preds = %311
  br label %313

313:                                              ; preds = %312, %286
  br label %314

314:                                              ; preds = %313, %265
  br label %315

315:                                              ; preds = %314, %244
  br label %316

316:                                              ; preds = %315, %236
  call void @llvm.lifetime.end.p0(i64 4, ptr %18) #5
  br label %317

317:                                              ; preds = %316
  br label %318

318:                                              ; preds = %317
  br label %400

319:                                              ; preds = %227, %195
  br label %320

320:                                              ; preds = %319
  call void @llvm.lifetime.start.p0(i64 4, ptr %20) #5
  store i32 5, ptr %20, align 4, !tbaa !25
  %321 = load i32, ptr %20, align 4, !tbaa !25
  %322 = icmp eq i32 %321, 0
  br i1 %322, label %323, label %328

323:                                              ; preds = %320
  %324 = load ptr, ptr %6, align 8, !tbaa !5
  %325 = load ptr, ptr %6, align 8, !tbaa !5
  %326 = getelementptr inbounds %struct.MTensor, ptr %325, i32 0, i32 4
  %327 = load ptr, ptr %326, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %324, i32 noundef -1, i32 noundef -1, i32 noundef -1, i32 noundef -1, ptr noundef %327, i32 noundef -1)
  br label %397

328:                                              ; preds = %320
  %329 = load i32, ptr %20, align 4, !tbaa !25
  %330 = icmp eq i32 %329, 4
  br i1 %330, label %331, label %349

331:                                              ; preds = %328
  %332 = load ptr, ptr %6, align 8, !tbaa !5
  %333 = load ptr, ptr %5, align 8, !tbaa !5
  %334 = getelementptr inbounds %struct.MTensor, ptr %333, i32 0, i32 0
  %335 = load i32, ptr %334, align 8, !tbaa !34
  %336 = add nsw i32 %335, 0
  %337 = load ptr, ptr %5, align 8, !tbaa !5
  %338 = getelementptr inbounds %struct.MTensor, ptr %337, i32 0, i32 1
  %339 = load i32, ptr %338, align 4, !tbaa !28
  %340 = load ptr, ptr %5, align 8, !tbaa !5
  %341 = getelementptr inbounds %struct.MTensor, ptr %340, i32 0, i32 2
  %342 = load i32, ptr %341, align 8, !tbaa !22
  %343 = load ptr, ptr %5, align 8, !tbaa !5
  %344 = getelementptr inbounds %struct.MTensor, ptr %343, i32 0, i32 3
  %345 = load i32, ptr %344, align 4, !tbaa !26
  %346 = load ptr, ptr %6, align 8, !tbaa !5
  %347 = getelementptr inbounds %struct.MTensor, ptr %346, i32 0, i32 4
  %348 = load ptr, ptr %347, align 8, !tbaa !33
  call void @TensorRedefine(ptr noundef %332, i32 noundef %336, i32 noundef %339, i32 noundef %342, i32 noundef %345, ptr noundef %348, i32 noundef -1)
  br label %396

349:                                              ; preds = %328
  %350 = load i32, ptr %20, align 4, !tbaa !25
  %351 = icmp eq i32 %350, 5
  br i1 %351, label %352, label %367

352:                                              ; preds = %349
  %353 = load ptr, ptr %6, align 8, !tbaa !5
  %354 = load ptr, ptr %5, align 8, !tbaa !5
  %355 = getelementptr inbounds %struct.MTensor, ptr %354, i32 0, i32 0
  %356 = load i32, ptr %355, align 8, !tbaa !34
  %357 = add nsw i32 %356, 0
  %358 = load ptr, ptr %5, align 8, !tbaa !5
  %359 = getelementptr inbounds %struct.MTensor, ptr %358, i32 0, i32 1
  %360 = load i32, ptr %359, align 4, !tbaa !28
  %361 = load ptr, ptr %5, align 8, !tbaa !5
  %362 = getelementptr inbounds %struct.MTensor, ptr %361, i32 0, i32 2
  %363 = load i32, ptr %362, align 8, !tbaa !22
  %364 = load ptr, ptr %5, align 8, !tbaa !5
  %365 = getelementptr inbounds %struct.MTensor, ptr %364, i32 0, i32 3
  %366 = load i32, ptr %365, align 4, !tbaa !26
  call void @TensorRedefine(ptr noundef %353, i32 noundef %357, i32 noundef %360, i32 noundef %363, i32 noundef %366, ptr noundef null, i32 noundef -1)
  br label %395

367:                                              ; preds = %349
  %368 = load i32, ptr %20, align 4, !tbaa !25
  %369 = icmp eq i32 %368, 6
  br i1 %369, label %370, label %385

370:                                              ; preds = %367
  %371 = load ptr, ptr %6, align 8, !tbaa !5
  %372 = load ptr, ptr %5, align 8, !tbaa !5
  %373 = getelementptr inbounds %struct.MTensor, ptr %372, i32 0, i32 0
  %374 = load i32, ptr %373, align 8, !tbaa !34
  %375 = add nsw i32 %374, 0
  %376 = load ptr, ptr %5, align 8, !tbaa !5
  %377 = getelementptr inbounds %struct.MTensor, ptr %376, i32 0, i32 1
  %378 = load i32, ptr %377, align 4, !tbaa !28
  %379 = load ptr, ptr %5, align 8, !tbaa !5
  %380 = getelementptr inbounds %struct.MTensor, ptr %379, i32 0, i32 2
  %381 = load i32, ptr %380, align 8, !tbaa !22
  %382 = load ptr, ptr %5, align 8, !tbaa !5
  %383 = getelementptr inbounds %struct.MTensor, ptr %382, i32 0, i32 3
  %384 = load i32, ptr %383, align 4, !tbaa !26
  call void @TensorRedefine(ptr noundef %371, i32 noundef %375, i32 noundef %378, i32 noundef %381, i32 noundef %384, ptr noundef null, i32 noundef -1)
  br label %394

385:                                              ; preds = %367
  br label %386

386:                                              ; preds = %385
  call void @llvm.lifetime.start.p0(i64 4, ptr %21) #5
  store i32 1, ptr %21, align 4, !tbaa !25
  %387 = load i32, ptr %21, align 4, !tbaa !25
  %388 = icmp ne i32 %387, 0
  br i1 %388, label %389, label %391

389:                                              ; preds = %386
  %390 = load i32, ptr %21, align 4, !tbaa !25
  call void (i32, i32, ptr, i32, ptr, ptr, ...) @m_Exception(i32 noundef %390, i32 noundef -1, ptr noundef @.str.1, i32 noundef 638, ptr noundef @__FUNCTION__.TensorGroupConvSet, ptr noundef @.str.16)
  br label %391

391:                                              ; preds = %389, %386
  call void @llvm.lifetime.end.p0(i64 4, ptr %21) #5
  br label %392

392:                                              ; preds = %391
  br label %393

393:                                              ; preds = %392
  br label %394

394:                                              ; preds = %393, %370
  br label %395

395:                                              ; preds = %394, %352
  br label %396

396:                                              ; preds = %395, %331
  br label %397

397:                                              ; preds = %396, %323
  call void @llvm.lifetime.end.p0(i64 4, ptr %20) #5
  br label %398

398:                                              ; preds = %397
  br label %399

399:                                              ; preds = %398
  br label %400

400:                                              ; preds = %399, %318
  %401 = load ptr, ptr %9, align 8, !tbaa !5
  %402 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %401, i32 0, i32 2
  %403 = load ptr, ptr %402, align 8, !tbaa !35
  %404 = icmp ne ptr %403, null
  br i1 %404, label %405, label %409

405:                                              ; preds = %400
  %406 = load ptr, ptr %9, align 8, !tbaa !5
  %407 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %406, i32 0, i32 2
  %408 = load ptr, ptr %407, align 8, !tbaa !35
  call void @mMemoryBlockRelease(ptr noundef %408)
  br label %409

409:                                              ; preds = %405, %400
  %410 = load i32, ptr %15, align 4, !tbaa !25
  %411 = sext i32 %410 to i64
  %412 = mul i64 %411, 4
  %413 = trunc i64 %412 to i32
  %414 = call ptr @mMemoryBlockCreate(i32 noundef %413, i32 noundef 0)
  %415 = load ptr, ptr %9, align 8, !tbaa !5
  %416 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %415, i32 0, i32 2
  store ptr %414, ptr %416, align 8, !tbaa !35
  %417 = load ptr, ptr %9, align 8, !tbaa !5
  %418 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %417, i32 0, i32 2
  %419 = load ptr, ptr %418, align 8, !tbaa !35
  %420 = getelementptr inbounds %struct.MMemoryBlock, ptr %419, i32 0, i32 2
  %421 = load ptr, ptr %420, align 8, !tbaa !37
  %422 = load i32, ptr %15, align 4, !tbaa !25
  %423 = sext i32 %422 to i64
  %424 = mul i64 %423, 4
  call void @llvm.memset.p0.i64(ptr align 1 %421, i8 0, i64 %424, i1 false)
  br label %425

425:                                              ; preds = %409, %185
  %426 = load ptr, ptr %9, align 8, !tbaa !5
  %427 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %426, i32 0, i32 1
  %428 = load ptr, ptr %427, align 8, !tbaa !39
  %429 = icmp ne ptr %428, null
  br i1 %429, label %430, label %434

430:                                              ; preds = %425
  %431 = load ptr, ptr %9, align 8, !tbaa !5
  %432 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %431, i32 0, i32 1
  %433 = load ptr, ptr %432, align 8, !tbaa !39
  call void @mMemoryBlockRelease(ptr noundef %433)
  br label %434

434:                                              ; preds = %430, %425
  %435 = load i32, ptr %15, align 4, !tbaa !25
  %436 = sext i32 %435 to i64
  %437 = mul i64 %436, 4
  %438 = trunc i64 %437 to i32
  %439 = call ptr @mMemoryBlockCreate(i32 noundef %438, i32 noundef 0)
  %440 = load ptr, ptr %9, align 8, !tbaa !5
  %441 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %440, i32 0, i32 1
  store ptr %439, ptr %441, align 8, !tbaa !39
  call void @llvm.lifetime.start.p0(i64 8, ptr %22) #5
  %442 = load ptr, ptr %9, align 8, !tbaa !5
  %443 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %442, i32 0, i32 1
  %444 = load ptr, ptr %443, align 8, !tbaa !39
  %445 = getelementptr inbounds %struct.MMemoryBlock, ptr %444, i32 0, i32 2
  %446 = load ptr, ptr %445, align 8, !tbaa !37
  store ptr %446, ptr %22, align 8, !tbaa !5
  %447 = load ptr, ptr @morn_network_parafile, align 8, !tbaa !5
  %448 = icmp eq ptr %447, null
  br i1 %448, label %449, label %473

449:                                              ; preds = %434
  call void @llvm.lifetime.start.p0(i64 4, ptr %23) #5
  %450 = load i32, ptr %14, align 4, !tbaa !25
  %451 = sitofp i32 %450 to float
  %452 = fdiv float 2.000000e+00, %451
  %453 = fpext float %452 to double
  %454 = call double @sqrt(double noundef %453) #5
  %455 = fptrunc double %454 to float
  store float %455, ptr %23, align 4, !tbaa !40
  call void @llvm.lifetime.start.p0(i64 4, ptr %24) #5
  store i32 0, ptr %24, align 4, !tbaa !25
  br label %456

456:                                              ; preds = %469, %449
  %457 = load i32, ptr %24, align 4, !tbaa !25
  %458 = load i32, ptr %15, align 4, !tbaa !25
  %459 = icmp slt i32 %457, %458
  br i1 %459, label %461, label %460

460:                                              ; preds = %456
  store i32 14, ptr %4, align 4
  call void @llvm.lifetime.end.p0(i64 4, ptr %24) #5
  br label %472

461:                                              ; preds = %456
  %462 = load float, ptr %23, align 4, !tbaa !40
  %463 = call float @mNormalRand(float noundef 0.000000e+00, float noundef 1.000000e+00)
  %464 = fmul float %462, %463
  %465 = load ptr, ptr %22, align 8, !tbaa !5
  %466 = load i32, ptr %24, align 4, !tbaa !25
  %467 = sext i32 %466 to i64
  %468 = getelementptr inbounds float, ptr %465, i64 %467
  store float %464, ptr %468, align 4, !tbaa !40
  br label %469

469:                                              ; preds = %461
  %470 = load i32, ptr %24, align 4, !tbaa !25
  %471 = add nsw i32 %470, 1
  store i32 %471, ptr %24, align 4, !tbaa !25
  br label %456, !llvm.loop !41

472:                                              ; preds = %460
  call void @llvm.lifetime.end.p0(i64 4, ptr %23) #5
  br label %492

473:                                              ; preds = %434
  br label %474

474:                                              ; preds = %473
  call void @llvm.lifetime.start.p0(i64 64, ptr %25) #5
  %475 = getelementptr inbounds [64 x i8], ptr %25, i64 0, i64 0
  %476 = load ptr, ptr %2, align 8, !tbaa !5
  %477 = getelementptr inbounds %struct.MLayer, ptr %476, i32 0, i32 0
  %478 = getelementptr inbounds [32 x i8], ptr %477, i64 0, i64 0
  %479 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef %475, ptr noundef @.str.17, ptr noundef %478, ptr noundef @.str.18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr %26) #5
  %480 = load ptr, ptr %22, align 8, !tbaa !5
  store ptr %480, ptr %26, align 8, !tbaa !5
  %481 = load ptr, ptr @morn_network_parafile, align 8, !tbaa !5
  %482 = getelementptr inbounds [64 x i8], ptr %25, i64 0, i64 0
  %483 = getelementptr inbounds i8, ptr %482, i64 0
  %484 = call i32 @m_Hash(ptr noundef %483, i32 noundef -1)
  %485 = load i32, ptr %15, align 4, !tbaa !25
  %486 = sext i32 %485 to i64
  %487 = mul i64 %486, 4
  %488 = trunc i64 %487 to i32
  %489 = call i32 @mMORNRead(ptr noundef %481, i32 noundef %484, ptr noundef %26, i32 noundef 1, i32 noundef %488)
  call void @llvm.lifetime.end.p0(i64 8, ptr %26) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr %25) #5
  br label %490

490:                                              ; preds = %474
  br label %491

491:                                              ; preds = %490
  br label %492

492:                                              ; preds = %491, %472
  %493 = load ptr, ptr %9, align 8, !tbaa !5
  %494 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %493, i32 0, i32 0
  %495 = load ptr, ptr %494, align 8, !tbaa !43
  %496 = icmp ne ptr %495, null
  br i1 %496, label %497, label %501

497:                                              ; preds = %492
  %498 = load ptr, ptr %9, align 8, !tbaa !5
  %499 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %498, i32 0, i32 0
  %500 = load ptr, ptr %499, align 8, !tbaa !43
  call void @mMemoryBlockRelease(ptr noundef %500)
  br label %501

501:                                              ; preds = %497, %492
  %502 = load i32, ptr %13, align 4, !tbaa !25
  %503 = load i32, ptr %14, align 4, !tbaa !25
  %504 = mul nsw i32 %502, %503
  %505 = sext i32 %504 to i64
  %506 = mul i64 %505, 4
  %507 = trunc i64 %506 to i32
  %508 = call ptr @mMemoryBlockCreate(i32 noundef %507, i32 noundef 0)
  %509 = load ptr, ptr %9, align 8, !tbaa !5
  %510 = getelementptr inbounds %struct.HandleTensorGroupConv, ptr %509, i32 0, i32 0
  store ptr %508, ptr %510, align 8, !tbaa !43
  %511 = load ptr, ptr %8, align 8, !tbaa !5
  %512 = getelementptr inbounds %struct.MHandle, ptr %511, i32 0, i32 1
  store volatile i32 1, ptr %512, align 4, !tbaa !44
  call void @llvm.lifetime.end.p0(i64 8, ptr %22) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %15) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %14) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %13) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %12) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %11) #5
  call void @llvm.lifetime.end.p0(i64 4, ptr %10) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %9) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %8) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %7) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %6) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr %5) #5
  store i32 0, ptr %4, align 4
  br label %513

513:                                              ; preds = %501, %40
  call void @llvm.lifetime.end.p0(i64 8, ptr %3) #5
  %514 = load i32, ptr %4, align 4
  switch i32 %514, label %516 [
    i32 0, label %515
    i32 1, label %515
  ]

515:                                              ; preds = %513, %513, %31
  ret void

516:                                              ; preds = %513
  unreachable
}

declare i32 @mTensorRegisterIndex(ptr noundef) #2

attributes #0 = { nocallback nofree nounwind willreturn memory(argmem: write) }
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 "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 #4 = { 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 #5 = { nounwind }

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

!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 19.1.0 (git@github.com:llvm/llvm-project.git a4bf6cd7cfb1a1421ba92bca9d017b49936c55e4)"}
!5 = !{!6, !6, i64 0}
!6 = !{!"any pointer", !7, i64 0}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!10, !11, i64 64}
!10 = !{!"MLayer", !7, i64 0, !11, i64 32, !6, i64 40, !6, i64 48, !6, i64 56, !11, i64 64}
!11 = !{!"int", !7, i64 0}
!12 = !{!10, !6, i64 56}
!13 = !{!14, !11, i64 44}
!14 = !{!"TensorGroupConvPara", !6, i64 0, !11, i64 8, !11, i64 12, !11, i64 16, !11, i64 20, !11, i64 24, !11, i64 28, !15, i64 32, !15, i64 36, !15, i64 40, !11, i64 44, !11, i64 48}
!15 = !{!"float", !7, i64 0}
!16 = !{!10, !11, i64 32}
!17 = !{!14, !6, i64 0}
!18 = !{!10, !6, i64 40}
!19 = !{!10, !6, i64 48}
!20 = !{!21, !6, i64 16}
!21 = !{!"MHandle", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16}
!22 = !{!23, !11, i64 8}
!23 = !{!"MTensor", !11, i64 0, !11, i64 4, !11, i64 8, !11, i64 12, !6, i64 16, !11, i64 24}
!24 = !{!14, !11, i64 24}
!25 = !{!11, !11, i64 0}
!26 = !{!23, !11, i64 12}
!27 = !{!14, !11, i64 20}
!28 = !{!23, !11, i64 4}
!29 = !{!14, !11, i64 48}
!30 = !{!14, !11, i64 12}
!31 = !{!14, !11, i64 16}
!32 = !{!14, !11, i64 8}
!33 = !{!23, !6, i64 16}
!34 = !{!23, !11, i64 0}
!35 = !{!36, !6, i64 16}
!36 = !{!"HandleTensorGroupConv", !6, i64 0, !6, i64 8, !6, i64 16}
!37 = !{!38, !6, i64 8}
!38 = !{!"MMemoryBlock", !11, i64 0, !11, i64 4, !6, i64 8, !6, i64 16, !6, i64 24, !11, i64 32}
!39 = !{!36, !6, i64 8}
!40 = !{!15, !15, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!36, !6, i64 0}
!44 = !{!21, !11, i64 4}


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

@morn_network_flag = external local_unnamed_addr global i32, align 4
@morn_network_parafile = external local_unnamed_addr global ptr, align 8
@.str.17 = external hidden unnamed_addr constant [6 x i8], align 1
@.str.18 = external hidden unnamed_addr constant [7 x i8], align 1
@.str.23 = external hidden unnamed_addr constant [5 x i8], align 1

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

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

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

declare void @mMemoryBlockRelease(ptr noundef) local_unnamed_addr #2

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

declare void @TensorRedefine(ptr noundef, i32 noundef, i32 noundef, i32 noundef, i32 noundef, ptr noundef, i32 noundef) local_unnamed_addr #2

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

declare float @mNormalRand(float noundef, float noundef) local_unnamed_addr #2

; Function Attrs: nofree nounwind
declare noundef i32 @sprintf(ptr noalias nocapture noundef writeonly, ptr nocapture noundef readonly, ...) local_unnamed_addr #3

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

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

; Function Attrs: nounwind uwtable
declare dso_local void @endTensorGroupConv(ptr noundef) #4

; Function Attrs: nounwind uwtable
define dso_local void @TensorGroupConvSet(ptr noundef %0) local_unnamed_addr #4 {
  %2 = alloca [64 x i8], align 16
  %3 = alloca ptr, align 8
  %4 = getelementptr inbounds i8, ptr %0, i64 64
  %5 = load i32, ptr %4, align 8, !tbaa !5
  %.not = icmp eq i32 %5, -1
  br i1 %.not, label %6, label %136

6:                                                ; preds = %1
  %7 = getelementptr inbounds i8, ptr %0, i64 56
  %8 = load ptr, ptr %7, align 8, !tbaa !11
  %9 = getelementptr inbounds i8, ptr %8, i64 44
  %10 = load i32, ptr %9, align 4, !tbaa !12
  %11 = icmp slt i32 %10, 1
  br i1 %11, label %12, label %15

12:                                               ; preds = %6
  %13 = tail call i32 @mTensorRegisterIndex(ptr noundef nonnull @.str.23) #5
  %14 = getelementptr inbounds i8, ptr %0, i64 32
  store i32 %13, ptr %14, align 8, !tbaa !15
  br label %136

15:                                               ; preds = %6
  %16 = load ptr, ptr %8, align 8, !tbaa !16
  %17 = getelementptr inbounds i8, ptr %16, i64 40
  %18 = load ptr, ptr %17, align 8, !tbaa !17
  %19 = getelementptr inbounds i8, ptr %16, i64 48
  %20 = load ptr, ptr %19, align 8, !tbaa !18
  %21 = getelementptr inbounds i8, ptr %0, i64 40
  %22 = load ptr, ptr %21, align 8, !tbaa !17
  %23 = tail call ptr @GetHandle(ptr noundef %22, i32 noundef 24, i32 noundef -2105121901, ptr noundef nonnull @endTensorGroupConv) #5
  %24 = getelementptr inbounds i8, ptr %23, i64 16
  %25 = load ptr, ptr %24, align 8, !tbaa !19
  %26 = getelementptr inbounds i8, ptr %18, i64 8
  %27 = load i32, ptr %26, align 8, !tbaa !21
  %28 = getelementptr inbounds i8, ptr %8, i64 24
  %29 = load i32, ptr %28, align 8, !tbaa !23
  %30 = sdiv i32 %27, %29
  %31 = getelementptr inbounds i8, ptr %18, i64 12
  %32 = load i32, ptr %31, align 4, !tbaa !24
  %33 = getelementptr inbounds i8, ptr %8, i64 20
  %34 = load i32, ptr %33, align 4, !tbaa !25
  %35 = sdiv i32 %32, %34
  %36 = getelementptr inbounds i8, ptr %18, i64 4
  %37 = load i32, ptr %36, align 4, !tbaa !26
  %38 = load i32, ptr %9, align 4, !tbaa !12
  %.neg = sdiv i32 %38, -2
  %39 = add i32 %37, 1
  %40 = add i32 %39, %.neg
  %41 = getelementptr inbounds i8, ptr %8, i64 48
  %42 = load i32, ptr %41, align 8, !tbaa !27
  %43 = sdiv i32 %40, %42
  %44 = getelementptr inbounds i8, ptr %8, i64 12
  %45 = load i32, ptr %44, align 4, !tbaa !28
  %46 = getelementptr inbounds i8, ptr %8, i64 16
  %47 = load i32, ptr %46, align 8, !tbaa !29
  %48 = mul i32 %45, %38
  %49 = mul i32 %48, %47
  %50 = add i32 %49, 1
  %51 = getelementptr inbounds i8, ptr %8, i64 8
  %52 = load i32, ptr %51, align 8, !tbaa !30
  %53 = mul i32 %50, %52
  %54 = load i32, ptr %18, align 8, !tbaa !31
  %55 = mul nsw i32 %52, %43
  tail call void @TensorRedefine(ptr noundef %22, i32 noundef %54, i32 noundef %55, i32 noundef %30, i32 noundef %35, ptr noundef null, i32 noundef -1) #5
  %56 = load i32, ptr @morn_network_flag, align 4, !tbaa !32
  %57 = icmp eq i32 %56, 1
  br i1 %57, label %58, label %104

58:                                               ; preds = %15
  %magicptr = ptrtoint ptr %20 to i64
  switch i64 %magicptr, label %59 [
    i64 -1, label %81
    i64 0, label %81
  ]

59:                                               ; preds = %58
  %60 = getelementptr inbounds i8, ptr %20, i64 16
  %61 = load ptr, ptr %60, align 8, !tbaa !33
  %magicptr146 = ptrtoint ptr %61 to i64
  switch i64 %magicptr146, label %62 [
    i64 0, label %81
    i64 -1, label %81
  ]

62:                                               ; preds = %59
  %63 = load i32, ptr %20, align 8, !tbaa !31
  %64 = icmp slt i32 %63, 1
  br i1 %64, label %81, label %65

65:                                               ; preds = %62
  %66 = getelementptr inbounds i8, ptr %20, i64 8
  %67 = load i32, ptr %66, align 8, !tbaa !21
  %68 = icmp slt i32 %67, 1
  br i1 %68, label %81, label %69

69:                                               ; preds = %65
  %70 = getelementptr inbounds i8, ptr %20, i64 12
  %71 = load i32, ptr %70, align 4, !tbaa !24
  %72 = icmp slt i32 %71, 1
  br i1 %72, label %81, label %73

73:                                               ; preds = %69
  %74 = getelementptr inbounds i8, ptr %20, i64 4
  %75 = load i32, ptr %74, align 4, !tbaa !26
  %76 = icmp slt i32 %75, 1
  br i1 %76, label %81, label %77

77:                                               ; preds = %73
  %78 = getelementptr inbounds i8, ptr %20, i64 -8
  %79 = load ptr, ptr %78, align 8, !tbaa !34
  %80 = icmp eq ptr %79, null
  br i1 %80, label %81, label %88

81:                                               ; preds = %77, %73, %69, %65, %62, %58, %58, %59, %59
  %82 = load i32, ptr %18, align 8, !tbaa !31
  %83 = load i32, ptr %36, align 4, !tbaa !26
  %84 = load i32, ptr %26, align 8, !tbaa !21
  %85 = load i32, ptr %31, align 4, !tbaa !24
  %86 = getelementptr inbounds i8, ptr %18, i64 16
  %87 = load ptr, ptr %86, align 8, !tbaa !33
  tail call void @TensorRedefine(ptr noundef %20, i32 noundef %82, i32 noundef %83, i32 noundef %84, i32 noundef %85, ptr noundef %87, i32 noundef -1) #5
  br label %93

88:                                               ; preds = %77
  %89 = load i32, ptr %18, align 8, !tbaa !31
  %90 = load i32, ptr %36, align 4, !tbaa !26
  %91 = load i32, ptr %26, align 8, !tbaa !21
  %92 = load i32, ptr %31, align 4, !tbaa !24
  tail call void @TensorRedefine(ptr noundef nonnull %20, i32 noundef %89, i32 noundef %90, i32 noundef %91, i32 noundef %92, ptr noundef null, i32 noundef -1) #5
  br label %93

93:                                               ; preds = %88, %81
  %94 = getelementptr inbounds i8, ptr %25, i64 16
  %95 = load ptr, ptr %94, align 8, !tbaa !35
  %.not143 = icmp eq ptr %95, null
  br i1 %.not143, label %97, label %96

96:                                               ; preds = %93
  tail call void @mMemoryBlockRelease(ptr noundef nonnull %95) #5
  br label %97

97:                                               ; preds = %96, %93
  %98 = sext i32 %53 to i64
  %99 = shl nsw i64 %98, 2
  %100 = trunc i64 %99 to i32
  %101 = tail call ptr @mMemoryBlockCreate(i32 noundef %100, i32 noundef 0) #5
  store ptr %101, ptr %94, align 8, !tbaa !35
  %102 = getelementptr inbounds i8, ptr %101, i64 8
  %103 = load ptr, ptr %102, align 8, !tbaa !37
  tail call void @llvm.memset.p0.i64(ptr align 1 %103, i8 0, i64 %99, i1 false)
  br label %104

104:                                              ; preds = %97, %15
  %105 = getelementptr inbounds i8, ptr %25, i64 8
  %106 = load ptr, ptr %105, align 8, !tbaa !39
  %.not144 = icmp eq ptr %106, null
  br i1 %.not144, label %108, label %107

107:                                              ; preds = %104
  tail call void @mMemoryBlockRelease(ptr noundef nonnull %106) #5
  br label %108

108:                                              ; preds = %107, %104
  %109 = shl i32 %53, 2
  %110 = tail call ptr @mMemoryBlockCreate(i32 noundef %109, i32 noundef 0) #5
  store ptr %110, ptr %105, align 8, !tbaa !39
  %111 = getelementptr inbounds i8, ptr %110, i64 8
  %112 = load ptr, ptr %111, align 8, !tbaa !37
  %113 = load ptr, ptr @morn_network_parafile, align 8, !tbaa !34
  %114 = icmp eq ptr %113, null
  br i1 %114, label %115, label %122

115:                                              ; preds = %108
  %116 = sitofp i32 %50 to float
  %117 = fdiv float 2.000000e+00, %116
  %sqrtf = tail call float @sqrtf(float noundef %117) #6
  %118 = icmp sgt i32 %53, 0
  br i1 %118, label %.lr.ph.preheader, label %.loopexit

.lr.ph.preheader:                                 ; preds = %115
  %wide.trip.count = zext nneg i32 %53 to i64
  br label %.lr.ph

.lr.ph:                                           ; preds = %.lr.ph.preheader, %.lr.ph
  %indvars.iv = phi i64 [ 0, %.lr.ph.preheader ], [ %indvars.iv.next, %.lr.ph ]
  %119 = tail call float @mNormalRand(float noundef 0.000000e+00, float noundef 1.000000e+00) #5
  %120 = fmul float %sqrtf, %119
  %121 = getelementptr inbounds float, ptr %112, i64 %indvars.iv
  store float %120, ptr %121, align 4, !tbaa !40
  %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 %.loopexit, label %.lr.ph, !llvm.loop !41

122:                                              ; preds = %108
  call void @llvm.lifetime.start.p0(i64 64, ptr nonnull %2) #5
  %123 = call i32 (ptr, ptr, ...) @sprintf(ptr noundef nonnull dereferenceable(1) %2, ptr noundef nonnull dereferenceable(1) @.str.17, ptr noundef nonnull %0, ptr noundef nonnull @.str.18) #5
  call void @llvm.lifetime.start.p0(i64 8, ptr nonnull %3) #5
  store ptr %112, ptr %3, align 8, !tbaa !34
  %124 = load ptr, ptr @morn_network_parafile, align 8, !tbaa !34
  %125 = call i32 @m_Hash(ptr noundef nonnull %2, i32 noundef -1) #5
  %126 = call i32 @mMORNRead(ptr noundef %124, i32 noundef %125, ptr noundef nonnull %3, i32 noundef 1, i32 noundef %109) #5
  call void @llvm.lifetime.end.p0(i64 8, ptr nonnull %3) #5
  call void @llvm.lifetime.end.p0(i64 64, ptr nonnull %2) #5
  br label %.loopexit

.loopexit:                                        ; preds = %.lr.ph, %115, %122
  %127 = load ptr, ptr %25, align 8, !tbaa !43
  %.not145 = icmp eq ptr %127, null
  br i1 %.not145, label %129, label %128

128:                                              ; preds = %.loopexit
  call void @mMemoryBlockRelease(ptr noundef nonnull %127) #5
  br label %129

129:                                              ; preds = %128, %.loopexit
  %130 = shl i32 %30, 2
  %131 = mul i32 %130, %35
  %132 = mul i32 %131, %43
  %133 = mul i32 %132, %50
  %134 = call ptr @mMemoryBlockCreate(i32 noundef %133, i32 noundef 0) #5
  store ptr %134, ptr %25, align 8, !tbaa !43
  %135 = getelementptr inbounds i8, ptr %23, i64 4
  store volatile i32 1, ptr %135, align 4, !tbaa !44
  br label %136

136:                                              ; preds = %12, %129, %1
  ret void
}

declare i32 @mTensorRegisterIndex(ptr noundef) local_unnamed_addr #2

declare float @sqrtf(float) local_unnamed_addr

attributes #0 = { mustprogress nocallback nofree nounwind willreturn memory(argmem: write) }
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 = { nofree nounwind "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 #4 = { 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 #5 = { nounwind }
attributes #6 = { mustprogress nofree nounwind willreturn memory(write) "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" }

!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, !9, i64 64}
!6 = !{!"MLayer", !7, i64 0, !9, i64 32, !10, i64 40, !10, i64 48, !10, i64 56, !9, i64 64}
!7 = !{!"omnipotent char", !8, i64 0}
!8 = !{!"Simple C/C++ TBAA"}
!9 = !{!"int", !7, i64 0}
!10 = !{!"any pointer", !7, i64 0}
!11 = !{!6, !10, i64 56}
!12 = !{!13, !9, i64 44}
!13 = !{!"TensorGroupConvPara", !10, i64 0, !9, i64 8, !9, i64 12, !9, i64 16, !9, i64 20, !9, i64 24, !9, i64 28, !14, i64 32, !14, i64 36, !14, i64 40, !9, i64 44, !9, i64 48}
!14 = !{!"float", !7, i64 0}
!15 = !{!6, !9, i64 32}
!16 = !{!13, !10, i64 0}
!17 = !{!6, !10, i64 40}
!18 = !{!6, !10, i64 48}
!19 = !{!20, !10, i64 16}
!20 = !{!"MHandle", !9, i64 0, !9, i64 4, !10, i64 8, !10, i64 16}
!21 = !{!22, !9, i64 8}
!22 = !{!"MTensor", !9, i64 0, !9, i64 4, !9, i64 8, !9, i64 12, !10, i64 16, !9, i64 24}
!23 = !{!13, !9, i64 24}
!24 = !{!22, !9, i64 12}
!25 = !{!13, !9, i64 20}
!26 = !{!22, !9, i64 4}
!27 = !{!13, !9, i64 48}
!28 = !{!13, !9, i64 12}
!29 = !{!13, !9, i64 16}
!30 = !{!13, !9, i64 8}
!31 = !{!22, !9, i64 0}
!32 = !{!9, !9, i64 0}
!33 = !{!22, !10, i64 16}
!34 = !{!10, !10, i64 0}
!35 = !{!36, !10, i64 16}
!36 = !{!"HandleTensorGroupConv", !10, i64 0, !10, i64 8, !10, i64 16}
!37 = !{!38, !10, i64 8}
!38 = !{!"MMemoryBlock", !9, i64 0, !9, i64 4, !10, i64 8, !10, i64 16, !10, i64 24, !9, i64 32}
!39 = !{!36, !10, i64 8}
!40 = !{!14, !14, i64 0}
!41 = distinct !{!41, !42}
!42 = !{!"llvm.loop.mustprogress"}
!43 = !{!36, !10, i64 0}
!44 = !{!20, !9, i64 4}


; Effective O3 passes: CorrelatedValuePropagationPass,EarlyCSEPass,GlobalOptPass,IPSCCPPass,IndVarSimplifyPass,InferFunctionAttrsPass,InstCombinePass,JumpThreadingPass,LoopRotatePass,LoopSimplifyPass,LoopUnrollPass,ReassociatePass,SROAPass,SimplifyCFGPass,TailCallElimPass